実装内容

 本プロジェクトで実装したミドルウェアのハードウェア構成、ソフトウェア構成について述べる.

 

ハードウェア構成

 本ミドルウェアはユーザ端末、サーバPC及び位置情報センサの3要素によって構成される.

       ユーザ端末

   ユーザが携帯する端末である.ユーザが一人につき一台携帯していると想定する.

       サーバPC

   環境に設置されたPC、あるいはWSである.スペースモデルの管理ドメインにつき一台設置する.

       位置情報センサ

   環境に設置され、ユーザの位置情報を取得するセンサである.十分な粒度の位置情報取得に必要な台数を設置する.

 

ソフトウェア構成

 本ミドルウェアのソフトウェア構成について述べる.まず、本ミドルウェアの主なパッケージ構成とその役割について述べ、次にAPIについて述べる.

ソフトウェア構成図を以下に示す.

 

 

 

○ユーザプロファイル管理モジュール

[パッケージ名:jp.ac.keio.sfc.ht.heisyu.pegasus]

ユーザ端末上で動作する.

ユーザプロファイルを管理する。サービスルールに基づいて、必要とされるユーザプロファイルを取得する。ユーザルールエディタで編集されたユーザルールを適用し、ユーザプロファイルの提供粒度を変更する。提供粒度の変更されたユーザプロファイルを、クライアントモジュールの要求に応じて提供する。

 

○クライアントモジュール

[パッケージ名:jp.ac.keio.sfc.ht.spl.client]

 ユーザ端末上で動作する.

 アプリケーションに対し、スペースモデル利用のためのAPIを提供するモジュールである.

 ユーザプロファイル管理モジュールからユーザプロファイル情報を取得し、スペースモデル管理モジュールに送る.その後、スペースモデルをスペースモデル管理モジュールから取得し、アプリケーションに提供する.

 

○スペースモデル管理機構

[パッケージ名:jp.ac.keio.sfc.ht.spl.server]

 サーバPC上で動作する.

 クライアントモジュールからユーザプロファイル、クライアント位置管理モジュールからクライアントの位置情報を取得し、スペースモデルを更新、管理する.クライアントモジュールの要求に対し、スペースモデルを返す.また、本モジュールで利用するロケーションモデルはロケーションモデルエディタを用いて作成する.

 

○クライアント位置管理モジュール

[パッケージ名:jp.ac.keio.sfc.ht.spl.clientlocation]

 サーバPC上で動作する.

 位置情報センサからユーザの位置情報を取得し、ユーザの位置情報を管理する.ユーザの移動情報をスペースモデル管理部に通知する.

 

○ユーザルールエディタ

[パッケージ名:jp.ac.keio.sfc.ht.heisyu.Pegasus.userruleeditor]

 アプリケーションユーザがユーザルールを編集するためのツールである.ユーザルールを容易に編集するためのGUIを実装した.

 

○ロケーションモデルエディタ

[パッケージ名:jp.ac.keio.sfc.ht.spl.locationmodeleditor]

 スペースモデル管理者がロケーションモデルを編集するためのツールである.ロケーションモデルを容易に編集するためのGUIを実装した.

○スペースモデルビューア

[パッケージ名:jp.ac.keio.sfc.ht.spl.spacemodelviewer]

 スペースモデル管理者が実際のスペースモデルを閲覧するためのツールである.スペースモデルを容易に閲覧するためのGUIを実装した.

 GUIの画面ダンプを以下に示す.

 

スペースモデルビューワ

 

○その他(主要パッケージ)

[パッケージ名:jp.ac.keio.sfc.ht.spl.spacemodel]

 スペースモデルのデータクラス、スペースモデルの更新やファイルへの保存などを行うマネージャクラスが含まれている.また、サブパッケージに、spacemodel.locationmodelパッケージ、spacemodel.spacepropertyパッケージがある.spacemodel.locationmodelパッケージには、ロケーションモデルのデータクラス、マネージャクラスが、spacemodel.spacepropertyパッケージには、スペースプロパティのデータクラス、マネージャクラスがそれぞれ含まれる.

 

[パッケージ名:jp.ac.keio.sfc.ht.tomo.rfdetector]

 本プロジェクトの実装に用いた位置情報センサ、spider reader用のモジュールである.このモジュールがspider readerに接続されたPC上で動作し、ユーザの位置情報をLAN経由でクライアント位置管理モジュールに送る.

 

提供API

 本ミドルウェアがアプリケーション開発者に対して提供する主なAPIについて記述する.

 

○クラス:SplClient

・パッケージ:jp.ac.keio.sfc.ht.spl.client

・コンストラクタ:

SplClient(String client_id, java.net.InetAddress spl_server_addr)

指定されたクライアント識別子、サーバアドレスでSplClientオブジェクトを生成します.

・メソッド:

SpaceModel getSpaceModel()

              ユーザプロファイルをサーバに送信し、スペースモデルを取得します.

void sendProfile()

              ユーザプロファイルをサーバに送信します.

 

○インタフェース:SpaceModelListener

・パッケージ:jp.ac.keio.sfc.ht.spl.spacemodel

・メソッド:

void modelChanged(SpaceModel space_model)

スペースモデルリスナがSpaceModelManagerに登録されていれば、スペースモデルが更新された時に呼び出される.

 

○クラス:SpaceModelManager

・パッケージ:jp.ac.keio.sfc.ht.spl.spacemodel

・コンストラクタ:

SpaceModelManager()

              SpaceModeoManagerオブジェクトを生成します.

・メソッド:

void addSpaceModelListener(SpaceModelListener sm_lis)

              スペースモデルリスナを登録します.

void deleteSpaceModelListener(SpaceModelListener sm_lis)

              スペースモデルリスナを削除します.

SpaceModel getSpaceModel()

              最新のスペースモデルを取得します.

void locadSpaceModel(String l_model_file_path, String s_property_file_path)

              ファイルパスを指定し、スペースモデルをファイルから読み込みます.

void saveSpaceModel(String l_model_file_path, String s_property_file_path)

              ファイルパスを指定し、スペースモデルをファイルに保存します.

 

○クラス:SpaceModel

・パッケージ:jp.ac.keio.sfc.ht.spl.spacemodel

・メソッド:

LocationModel getLocationModel()

              ロケーションモデルを取得する.

Vector getLocationModelSpace()

              LocationModelSpaceオブジェクトのVectorを取得する.

int sizeLocationModelSpace()

              存在する空間の数を取得する.

java.util.Vector getLocationModelPaht()

              空間間に存在する経路のVectorを取得する.

int sizeLocationModelPath()

              存在する経路の数を取得する.

LocationModelPath getLocationModelPath(String from_space_id,String to_space_id)

              二つの空間を指定し、LocationModelPathオブジェクトを取得する.

double getDistance(String from_space_id, String to_space_id)

              二つの空間を指定し、空間間の距離を取得する.

SpaceProperty getSpaceProperty()

              SpacePropertyオブジェクトを取得する.

Vector getSpacePropertyProfile(String space_id)

              空間の識別子を指定し、その空間にいるユーザのプロファイルのVector取得する.

int sizeSpacePropertyProfile()

              SpacePropertyProfileの数を取得する.

int getFemaleNum(String space_id)

              空間の識別子を指定し、その空間にいる女性の数を取得する.

int getMaleNum(String space_id)

              空間の識別子を指定し、その空間にいる男性の数を取得する.