実装
5.3.7 サービスハンドオフデータ取得 & 解析部
SHデータ取得&解析部はHandoffDataGetterAndParserクラスが担う.HandoffDataGet- terAndParserクラスではまず,SH元サービスのDepartureUsdlParserインスタンスを 利用してリクエストメッセージを取得する.次にSH元データにリクエストメッセージ を送信し,SHデータ要求を行いSHデータを取得する.その後,取得データをHandof- fXmlParserクラスまたはHandoffCsvParserクラスのインスタンスとして読み込み,解 析を行う.ここでの解析とは取得データとusdlファイルを照合し,変数名とその値のリ ストを作成することである.HandoffDataGetterAndParserクラスが保持するメソッド を表5.9,HandoffXmlParserクラスが保持するメソッドを表5.10,HandoffCsvParser クラスが保持するメソッドを表5.11に示す.
5.3.8 データマッピング部
データマッピング部はDataMapperクラスが担う.DataMapperクラスでは,Hand-
offProtocolGetterクラスにより作成されたSHデータで必要となる変数名のリストと,
HandoffDataGetterAndParserクラスにより作成された受信SHデータの変数名とその データ値のリストから,SHデータの作成で必要となる変数名とそのデータ値のリスト を再編成し作成する.この際,SHデータで必要となる変数名に対応するデータ値が 存在しない場合,欠如データ算出部に依頼し欠如したデータを算出することを試みる.
データマッピングの詳細を図5.6に示す.
表 5.9: HandoffDataGetterAndParserクラスのメソッド
public HandoffDataGetterAndParser(
DepartureUsdlParser departure)
コンストラクタ public void getHandoffData(
DepartureUsdlParser departure)
SHデータ取得 public ArrayList<ArrayList<String[]>>
getDataAndElementName()
データ値とその親要素名のリスト作成 public ArrayList<ArrayList<String[]>>
getVariableAndElementName()
変数名とその親要素名のリスト作成 public ArrayList<ArrayList<String[]>>
mapVariableAndData()
変数名とそのデータ値のリストをマッ ピングし作成
表 5.10: HandoffXmlParserのメソッド
public HandoffDataGetterAndParser(
DepartureUsdlParser departure)
コンストラクタ public ArrayList<ArrayList<String[]>>
getDataAndElementName()
データ値とその親要素名のリスト作成 public ArrayList<ArrayList<String[]>>
getVariableAndElementName()
変数名とその親要素名のリスト作成
表 5.11: HandoffCsvParserクラスのメソッド
public HandoffDataGetterAndParser(
DepartureUsdlParser departure)
コンストラクタ public ArrayList<ArrayList<String[]>>
getDataAndElementName()
データ値とその親要素名のリスト作成 public ArrayList<ArrayList<String[]>>
getVariableAndElementName()
変数名とその親要素名のリスト作成
'
&
$
%
package umediator;
・・・
public class DataMapper {
public ArrayList<String[]> dataMapping(
ArrayList<String> destinationVariableList, ArrayList<String[]> variableAndValueList) {
//最終的にSHデータ作成に必要となる変数名とデータ値をマッピングしたリスト
ArrayList<String[]> destinationVariableAndValueList = new ArrayList<String[]>();
//データマッピングのための走査を行うループ
for (int i = 0; i < destinationVariableList.size(); i++){ //欠如データの有無を判定するフラグ true:無しfalse:有り boolean flag = false;
label1: for (int j = 0; j < variableAndValueList.size(); j++) { if (destinationVariableList.get(i).equals(
variableAndValueList.get(j)[0])) {
//変数名とデータ値をマッピングし一時的に配列に格納
String[] destinationVariableAndValue = {destinationVariableList.get(i), variableAndValueList.get(j)[1] };
//マッピング結果である変数名とデータ値を格納
destinationVariableAndValueList.add(destinationVariableAndValue);
//一致データの変数名とデータ値を削除 variableAndValueList.remove(j);
flag = true;
break label1;
} }
//欠如データが有る場合の処理 if (!flag) {
LackDataCalculator calculator = new LackDataCalculator();
//欠如データ算出部の呼び出し,結果をリストに追加 destinationVariableAndValueList.add(
calculator.calculate(destinationVariableList.get(i));
} }
return destinationVariableAndValueList;
}
} 60