/*
このファイルの中身は、NTT オープンソースライセンス　バージョン 1.0（「本
契約」という）の適用を受けます。
本契約を遵守しない限り、このファイルを使用してはなりません。
本契約のコピーは、次のＵＲＬから入手できます。
【配布サイトのURL】 http://www.oss.ecl.ntt.co.jp/lms/

本契約に基づき頒布されるソフトウェアは、現状のまま、明示又は黙示のあらゆ
る種類の保証なしで、頒布されます。本契約に基づく権利及び制限を律する特定
の文言については、本契約を参照してください。

「オリジナルコード」は、 NTT Cyber Space Laboratories Code です。 
「オリジナルコード」の「初期開発者」は、日本電信電話株式会社です。  
日本電信電話株式会社により創作された部分は、Copyright (C) 2004 
日本電信電話株式会社 です。
全ての権利が留保されます。 
「コントリビュータ」：_____________________________________ 


The contents of this file are subject to the NTT Opensource License
Version 1.0 (the License); you may not use this file except in
compliance with the License. You may obtain a copy of the License at
【配布サイトのURL】 http://www.oss.ecl.ntt.co.jp/lms/

Software distributed under the License is distributed on an AS IS
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
License for the specific language governing rights and limitations
under the License.

The Original Code is NTT Cyber Space Laboratories Code .

The Initial Developer of the Original Code is NIPPON TELEGRAPH AND 
TELEPHONE CORPORATION.
Portions created by the NIPPON TELEGRAPH AND TELEPHONE CORPORATION 
are Copyright (C) 2004 NIPPON TELEGRAPH AND TELEPHONE CORPORATION. 
All Rights Reserved.

Contributor(s) ______________________________________.
*/

//
//機能名称 
//		  GetPutParam用のクラス
//変更履歴
//			  2003.11.24	gxl  新規作成		
//

package jp.co.ntt.lms.lo.scorm.cbtcom;
/**
 * GetPutParam用のクラス
 * @author gxl
 * 
 */

public class MaintenanceGetPutParam implements IMaintenanceGetPutParam {

	/**
	 * データモデル区分
	 */
	private String modal = null;

	/**
	* MaintenanceGetPutParamクラスのコンストラクタ<br>
	* @param inModal データモデル
	*/
	public MaintenanceGetPutParam(String inModal) {
		modal = inModal;
	}

	/**
	* PutParam用情報取得メソッド<br>
	* @param element CMIElement データモデルエレメント
	* @param name StringBuffer 返却の結果
	* @return int エラーコード
	*/
	public int getPutParam(CMIElement element, StringBuffer name) {

		if("getPutCoreGroup".equals(modal)) {
			return getPutCoreGroup(element,name);
		}
		if("getPutCoreLessonGroup".equals(modal)) {
			return getPutCoreLessonGroup(element,name);
		}
		if("getPutCommentsGroup".equals(modal)) {
			return getPutCommentsGroup(element,name);
		}
		if("getPutStudentDataGroup".equals(modal)) {
			return getPutStudentDataGroup(element,name);
		}
		if("getPutStudentPreferencesGroup".equals(modal)) {
			return getPutStudentPreferencesGroup(element,name);
		}
		if("getPutObjectivesStatusGroup".equals(modal)) {
			return getPutObjectivesStatusGroup(element,name);
		}
		
		return HACPError.HACP_ERR_SUCCESSFUL;
	}

	/**
	* Core グループの getPutParamメソッド<br>
	* @param element CMIElement データモデルエレメント
	* @param outstr StringBuffer 返却の結果
	* @return int エラーコード
	*/
	private int getPutCoreGroup(CMIElement element, StringBuffer outstr) {
	
		// エラーコードに正常終了値を設定（初期値）
		int intErrCode = HACPError.HACP_ERR_SUCCESSFUL;
		// CoreグループのCMIデータエレメント		
		CMINode node = null;
		if ( (element) instanceof CMINode ) {
			node = (CMINode)element;
		}
		CMIElement	child = null;

		String strSubPath = null;
		String strPath = null;
		String strValue = null;
		String strLocalValue = null;

		// CBTバージョンの取得
		boolean blnCbtV3 = element.isV3Above();

		if (node != null) {
			// Coreグループエレメントが存在した場合
			outstr.append("[");
			outstr.append(node.getKeyWord());
			outstr.append("]");
			outstr.append(CMIElement.STR_CRLF);

			// Lesson_Location
			strSubPath = "lesson_location";
			child = node.getChild(strSubPath);
			// AICCバージョンが3.0未満の場合は、レッスン値を取得するように修正
			// （使用メソッドが異なる）
			// ローカル値を取得する
			strLocalValue = child.localGetValue(strSubPath);
			if (strLocalValue != null) {
				strValue = strLocalValue;
				outstr.append("Lesson_Location");
				outstr.append("=");
				outstr.append(strValue);
				outstr.append(CMIElement.STR_CRLF);
			}

			// Lesson_Status
			strSubPath = "lesson_status";
			child = node.getChild(strSubPath);
			// AICCバージョンが3.0未満の場合は、レッスン値を取得するように修正
			// （使用メソッドが異なる）
			// ローカル値を取得する
			strLocalValue = child.localGetValue(strSubPath);
			if (strLocalValue == null) {
				strValue = "";
			} else {
				strValue = strLocalValue;
			}

			// exit
			strSubPath = "exit";
			child = node.getChild(strSubPath);

			// ローカル値を取得する
			strLocalValue = child.getLocalValue();
			if (strLocalValue == null) {
				// 必須項目のため、データがなくてもキーワードと空文字を取得する
				strValue = strValue + ",";
			} else {
				strValue = strValue + "," + strLocalValue;
			}
			outstr.append("Lesson_Status");
			outstr.append("=");
			outstr.append(strValue);
			outstr.append(CMIElement.STR_CRLF);
			strSubPath = "score";
			child = node.getChild(strSubPath);

			// AICCバージョンが3.0未満の場合は、レッスン値を取得するように修正
			// （使用メソッドが異なる）
			String strVal_score = "";
			if (blnCbtV3) {
				// スコア値を取得する
				strVal_score = CMIUtil.getScoreValue(child);
			} else {
				strSubPath = strSubPath + ".raw";
				strLocalValue = child.localGetValue(strSubPath);
				if (strLocalValue == null){	
					// 必須項目のため、データがなくてもキーワードと空文字を取得する
					strVal_score = "";
				} else {
					strVal_score = strLocalValue;
				}
			}
			outstr.append("Score");
			outstr.append("=");
			outstr.append(strVal_score);
			outstr.append(CMIElement.STR_CRLF);
			
			strSubPath = "total_time";
			child = node.getChild(strSubPath);

			// ローカル値を取得する
			strLocalValue = child.getLocalValue();

			if (strLocalValue == null) {
				// 必須項目のため、データがなくてもキーワードと空文字を取得する
				strValue = "";
			} else {
				strValue = strLocalValue;
			}
			outstr.append("Time");
			outstr.append("=");
			outstr.append(strValue);
			outstr.append(CMIElement.STR_CRLF);
		}
		return intErrCode;
	}

	/**
	* Core_Lessonグループの getPutParamメソッド<br
	* @param elementエレメント
	* @param outstr返却の結果
	* @return int エラーコード
	*/
	private int getPutCoreLessonGroup(CMIElement element, StringBuffer outstr) {

		int  intErrCode = HACPError.HACP_ERR_SUCCESSFUL;
		String strSubPath = null;
		String strPath = null;
		String strValue = null;
		String strLocalValue = null;
		if ( outstr == null ) {
			outstr = new StringBuffer();
		}
		if ( element != null ) {
			// Core_Lessonグループエレメントが存在した場合
			outstr.append("[");
			outstr.append(element.getKeyWord());
			outstr.append("]");
			outstr.append(CMIElement.STR_CRLF);

			// Core_Lessonグループのローカル値を取得する
			strLocalValue = element.getLocalValue();
			if (strLocalValue == null){	
				// 必須項目のため、データがなくてもキーワードと空文字を取得する
				strValue = "";
			} else {
				strValue = strLocalValue;
			}
		} else {
			// 必須項目のため、データがなくてもキーワードと空文字を取得する
			strValue = "";
		}
		outstr.append(strValue);
		outstr.append(CMIElement.STR_CRLF);
		return intErrCode;
	}

	/**
	 * Comments グループの getPutParamメソッド<br>
	 * @param elementエレメント
	 * @param outstr返却の結果
	 * @return int エラーコード
	 */
	private int getPutCommentsGroup(CMIElement element, StringBuffer outstr) {

		int intErrCode = HACPError.HACP_ERR_SUCCESSFUL;
		String  strLocalValue = null;

		if (element != null) {
			// Commentsグループエレメントが存在した場合
			outstr.append("[");
			outstr.append(element.getKeyWord());
			outstr.append("]");
			outstr.append(CMIElement.STR_CRLF);

			// Commentsグループのローカル値を取得する
			strLocalValue = element.getLocalValue();
			if (strLocalValue != null) {
				outstr.append(strLocalValue).append(CMIElement.STR_CRLF);
			}
		}
		return intErrCode;
	}

	/**
	* Objectives_Status グループの getPutParamメソッド<br>
	* @param elementエレメント
	* @param outstr返却の結果
	* @return int エラーコード
	*/
	private int getPutObjectivesStatusGroup(CMIElement element, StringBuffer outstr) {

		int intErrCode = HACPError.HACP_ERR_SUCCESSFUL;
		
		CMINode node = null;
		if ( (element) instanceof CMINode ) {
			node = (CMINode)element;
		}
		CMIElement	child = null;
		String strSubPath = null;
		String strPath = null;
		String strValue = null;
		String  strLocalValue = null;

		// CBTバージョンの取得
		int intVersion = element.getVersion();

		// J_Scoreの複数スコア間のセパレータの決定
		// CBTバージョンの判定
		boolean blnCbtV3 = element.isV3Above();
		String strSeparate = null;
		if (blnCbtV3) {
			// CBTバージョンが「3.0」、「3.0.1」、「3.0.2」の場合
			// スコア間の区切り文字をセミコロン「;」にする
			strSeparate = ";";
		}else{
			// CBTバージョンが「2.0」、「2.1」、「2.2」の場合
			// スコア間の区切り文字をカンマ「,」にする
			strSeparate = ",";
		}

		//Objectives_Statusグループエレメントが存在した場合
		if (node != null) {	
			outstr.append("[");
			outstr.append(node.getKeyWord());
			outstr.append("]");
			outstr.append(CMIElement.STR_CRLF);

			// Objectives_Statusグループに属する各項目のローカル値を取得する

			// objectives配下の設定件数を取得する
			int intCount = node.getChildCount();
			for ( int i = 0; i < intCount; i++ ) {
				// 件数が０件より上である場合、インデックス0から順に子
				// (objectives.n)の項目を取得する
				CMINode	child_n = (CMINode)node.getChild(i);

				// J_ID.n	n.id
				strSubPath = "id";
				child = child_n.getChild(strSubPath);

				// ローカル値を取得する
				strLocalValue = child.getLocalValue();

				// "J_ID.n"のnがi番目の項目のデータがNULL値、または
				// 空データ値の場合は、取得データに含めず、次のデータを
				// 取得するためにcontinueする。
				// （i番目に該当する"J_Score"、"J_Status"も取得データに
				// 含めない）
				if (strLocalValue == null) {
					continue;
				} else {
					outstr.append("J_ID.");
					outstr.append(String.valueOf(i+1));
					outstr.append("=");
					outstr.append(strLocalValue);
					outstr.append(CMIElement.STR_CRLF);
				}

				// バージョン情報により、処理を分岐する
				// バージョン情報が3.5以降の場合には、n.score. raw, max, minをGetParamする
				if ( intVersion >= 3500 ) {
					// ----------------- J_Score.n の取得 start -----------------
					// J_Score.n	n.score
					strSubPath = "score";
					child = child_n.getChild(strSubPath);

					// スコア値を取得する
					String val_score = CMIUtil.getScoreValue(child);
					
					outstr.append("J_Score.");
					outstr.append(String.valueOf(i+1));
					outstr.append("=");
					outstr.append(val_score);
					outstr.append(CMIElement.STR_CRLF);
					// ----------------- J_Score.n の取得 end -----------------

					// ----------------- J_Status.n の取得 start -----------------
					// J_Status.n	n.status
					strSubPath = "status";
					child = child_n.getChild(strSubPath);

					strLocalValue = child.getLocalValue();
					if (strLocalValue != null) {
						outstr.append("J_Status.");
						outstr.append( String.valueOf( i + 1 ) );
						outstr.append("=");
						outstr.append(strLocalValue);
						outstr.append(CMIElement.STR_CRLF);
					}
				// ----------------- J_Status.n の取得 end -----------------
				} else {
				// バージョンが3.5以前の場合
					// ----------------- J_Score.n の取得 start -----------------
					// J_Score.n	n.attempts.n.score
					strSubPath = "attempts";
					CMINode	attempts = (CMINode)child_n.getChild(strSubPath);

					// attempts配下の設定件数を取得する
					String strVal_score  = null;
					// AICCバージョンが3.0未満の場合は、レッスン値を取得するように修正
					// （使用メソッドが異なる）
					String temp_val_score;//一時的にscoreを格納するために使用
					int intCount_2 = attempts.getChildCount();
					
					//インデックス0から順に子(attempts.n)の項目を取得する
					for ( int j = 0; j < intCount_2; j++ ) {
						CMINode	child_n2 = (CMINode)attempts.getChild(j); // n
					
						strSubPath = "score";
						CMINode	scores = (CMINode)child_n2.getChild(strSubPath);

						// score（AICC Ver 3.xならraw,max,min、AICC Ver2.xならraw）を取得する
						if ( blnCbtV3 ) {
							//AICC Ver3.xの時
							temp_val_score = CMIUtil.getScoreValue(scores);
						} else {
							//AICC Ver2.xの時
							// AICCバージョンが3.0未満の場合は、レッスン値を取得するように修正
							// （使用メソッドが異なる）
							strPath = strSubPath + ".raw";
							//scoreを取得する
							strLocalValue = scores.localGetValue(strPath);
							if ( strLocalValue != null ) {
								temp_val_score = strLocalValue;
							} else {
								temp_val_score = "";
							}
						}
						if ( strVal_score == null ) {
							// 1つ目のscoreなので、素直に代入する
							strVal_score = temp_val_score;
						} else {
							//２つ目以降なので連結する
							strVal_score = strVal_score + strSeparate 
													+ temp_val_score;
						}
					}
					// J_Score が空であれば、GetParamデータに出力しない。
					if ( strVal_score != null && !"".equals(strVal_score)) {
						// J_Score.n   n.attempts.n.scores.[raw,max,min]
						outstr.append("J_Score.");
						outstr.append( String.valueOf( i + 1 ) );
						outstr.append("=");
						outstr.append(strVal_score);
						outstr.append(CMIElement.STR_CRLF);
					}
					// ----------------- J_Score.n の取得 end -----------------

					// ----------------- J_Status.n の取得 start -----------------
					// J_Status.n	n.status


					//attempts以下に要素が無ければ、statusをとりに行かない。
					if ( intCount_2 > 0 ) {
						String val_status;
						strSubPath = "status";
						CMINode	child_n2 = (CMINode)attempts.getChild(0);
						CMIElement child_status = child_n2.getChild(strSubPath);
						//child_statusがNULLならば、statusが無いので、取得処理をしない
						if (child_status != null) {
						
							//nodeから、ステータスを取得
							// AICCバージョンが3.0未満の場合は、レッスン値を取得するように修正
							strLocalValue = child_status.localGetValue(strSubPath);
							if ( strLocalValue != null ) {
								val_status = strLocalValue;
							} else {
								val_status = "";
							}
							// J_Status が空であれば、GetParamデータに出力しない。
							if ( !"".equals( val_status ) ) {
							// J_Status.n
							outstr.append("J_Status.");
							outstr.append( String.valueOf( i + 1 ) );
							outstr.append("=");
							outstr.append(val_status);
							outstr.append(CMIElement.STR_CRLF);
							}
						}//if(child_status != NULL)のend
					}//if(intCount_2 > 0)のend
				// ----------------- J_Status.n の取得 end -----------------

				} // バージョンによる分岐ここまで
			}
		}
		return intErrCode;
	}

	/**
	* Student_Data グループの getPutParamメソッド<br>
	* @param elementエレメント
	* @param outstr返却の結果
	* @return int エラーコード
	*/
	private int getPutStudentDataGroup(CMIElement element, StringBuffer outstr) {

		int intErrCode = HACPError.HACP_ERR_SUCCESSFUL;
		CMINode node = null;
		if ( (element) instanceof CMINode ) {
			node = (CMINode)element;
		}
		CMIElement	child = null;
		String strSubPath = null;
		String strPath = null;
		String strValue = null;
		String strLocalValue = null;

		if (node != null) {
			outstr.append("[");
			outstr.append(node.getKeyWord());
			outstr.append("]");
			outstr.append(CMIElement.STR_CRLF);

			// Student_Dataグループに属する各項目のローカル値を取得する
			// Attempt_Number
			strSubPath = "attempt_number";
			child = node.getChild(strSubPath);

			// ローカル値を取得する
			strLocalValue = child.getLocalValue();
			if (strLocalValue != null) {
				// ローカル値がNULL以外の場合、PutParam用のデータ取得対象とする
				outstr.append("Attempt_Number");
				outstr.append("=");
				outstr.append(strLocalValue);
				outstr.append(CMIElement.STR_CRLF);
			}

			// Mastery_Score
			strSubPath = "mastery_score";
			child = node.getChild(strSubPath);

			// ローカル値を取得する
			strLocalValue = child.getLocalValue();
			if (strLocalValue != null) {
				// ローカル値がNULL以外の場合、PutParam用のデータ取得対象とする
				outstr.append("Mastery_Score");
				outstr.append("=");
				outstr.append(strLocalValue);
				outstr.append(CMIElement.STR_CRLF);
			}
				
			// Max_Time_Allowed
			strSubPath = "max_time_allowed";
			child = node.getChild(strSubPath);

			// ローカル値を取得する
			strLocalValue = child.getLocalValue();
			if (strLocalValue != null) {
				// ローカル値がNULL以外の場合、PutParam用のデータ取得対象とする
				outstr.append("Max_Time_Allowed");
				outstr.append("=");
				outstr.append(strLocalValue);
				outstr.append(CMIElement.STR_CRLF);
			}

			// Time_Limit_Action
			strSubPath = "time_limit_action";
			child = node.getChild(strSubPath);

			// ローカル値を取得する
			strLocalValue = child.getLocalValue();
			if (strLocalValue != null) {
				// ローカル値がNULL以外の場合、PutParam用のデータ取得対象とする
				outstr.append("Time_Limit_Action");
				outstr.append("=");
				outstr.append(strLocalValue);
				outstr.append(CMIElement.STR_CRLF);
			}

			// attempt_records
			strSubPath = "attempt_records";
			CMINode child_attempt = (CMINode)node.getChild(strSubPath);

			// attempt_records配下の設定件数を取得する
			int intCount = child_attempt.getChildCount();
			for ( int i = 0; i < intCount; i++ ) {
				// インデックス0から順に子(attempt_records.n)の項目を取得する
				int intCount_2;
				CMINode	child_n = (CMINode)child_attempt.getChild(i);
				// n
				String str_n = child_n.getName();	 

				// Lesson_Status.n
				// n.lesson_statuses.n の最大の n を使用する。
				strSubPath = "lesson_statuses";
				CMINode statusNode = (CMINode)child_n.getNChild(strSubPath);

				// lesson_statuses配下の設定件数を取得する
				intCount_2 = statusNode.getChildCount();
				for ( int j = 0; j < intCount_2; j++ ) {
					// インデックス0から順に子(lesson_statuses.n)の項目を取得
					// する
					CMIElement child_n2 = statusNode.getChild(j);

					// ローカル値を取得する
					strLocalValue = child_n2.getLocalValue();
					if (strLocalValue != null) {
						// ローカル値がNULL以外の場合、PutParam用のデータ取得対象とする
						outstr.append("Lesson_Status.");
						outstr.append(String.valueOf(j+1));
						outstr.append("=");
						outstr.append(strLocalValue);
						outstr.append(CMIElement.STR_CRLF);
					}
				}
				// Score
				// n.lesson_scores.n の最大の n を使用する。
				strSubPath = "lesson_scores";
				CMINode scoresNode = (CMINode)child_n.getNChild(strSubPath);

				// lesson_scores配下の設定件数を取得する
				intCount_2 = scoresNode.getChildCount();
				// インデックス0から順に子(lesson_scores.n)の項目を取得
				// する
				for ( int j2 = 0; j2 < intCount_2; j2++ ) {
					CMIElement	child_n2 = scoresNode.getChild(j2);

					String str_score = CMIUtil.getScoreValue(child_n2);
					
					outstr.append("Score.");
					outstr.append(String.valueOf(j2+1));
					outstr.append("=");
					outstr.append(str_score);
					outstr.append(CMIElement.STR_CRLF);
				}
			}
		}
		return intErrCode;
	}

	/**
	* Student_Preferences グループの getPutParamメソッド<br>
	* @param elementエレメント
	* @param outstr返却の結果
	* @return int エラーコード
	*/
	private int getPutStudentPreferencesGroup(CMIElement element, StringBuffer outstr) {

		int intErrCode = HACPError.HACP_ERR_SUCCESSFUL;
		
		CMINode node = null;
		if ( (element) instanceof CMINode ) {
			node = (CMINode)element;
		}
		CMIElement	child = null;
		String strSubPath = null;
		String strPath = null;
		String strValue = null;
		String strLocalValue = null;

		if (node != null) {
			outstr.append("[");
			outstr.append(node.getKeyWord());
			outstr.append("]");
			outstr.append(CMIElement.STR_CRLF);

			// Student_Preferenceグループに属する各項目のローカル値を取得する
			// Audio 取得
			strSubPath = "audio";
			child = node.getChild(strSubPath);

			strLocalValue = child.getLocalValue();
			if (strLocalValue != null) {
				outstr.append("Audio");
				outstr.append("=");
				outstr.append(strLocalValue);
				outstr.append(CMIElement.STR_CRLF);
			}
			
			// Language 取得
			strSubPath = "language";
			child = node.getChild(strSubPath);

			strLocalValue = child.getLocalValue();
			if (strLocalValue != null) {
				outstr.append("Language");
				outstr.append("=");
				outstr.append(strLocalValue);
				outstr.append(CMIElement.STR_CRLF);
			}

			// Lesson_Type 取得
			strSubPath = "lesson_type";
			child = node.getChild(strSubPath);

			strLocalValue = child.getLocalValue();
			if (strLocalValue != null) {
				outstr.append("Lesson_Type");
				outstr.append("=");
				outstr.append(strLocalValue);
				outstr.append(CMIElement.STR_CRLF);
			}

			// Speed 取得
			strSubPath = "speed";
			child = node.getChild(strSubPath);

			strLocalValue = child.getLocalValue();
			if (strLocalValue != null) {
				outstr.append("Speed");
				outstr.append("=");
				outstr.append(strLocalValue);
				outstr.append(CMIElement.STR_CRLF);
			}

			// Text 取得
			strSubPath = "text";
			child = node.getChild(strSubPath);

			strLocalValue = child.getLocalValue();
			if (strLocalValue != null) {
				outstr.append("Text");
				outstr.append("=");
				outstr.append(strLocalValue);
				outstr.append(CMIElement.STR_CRLF);
			}

			// Text_Color 取得
			strSubPath = "text_color";
			child = node.getChild(strSubPath);

			strLocalValue = child.getLocalValue();
			if (strLocalValue != null) {
				outstr.append("Text_Color");
				outstr.append("=");
				outstr.append(strLocalValue);
				outstr.append(CMIElement.STR_CRLF);
			}

			// Text_Location 取得
			strSubPath = "text_location";
			child = node.getChild(strSubPath);

			strLocalValue = child.getLocalValue();
			if (strLocalValue != null) {
				outstr.append("Text_Location");
				outstr.append("=");
				outstr.append(strLocalValue);
				outstr.append(CMIElement.STR_CRLF);
			}

			// Text_Size 取得
			strSubPath = "text_size";
			child = node.getChild(strSubPath);

			strLocalValue = child.getLocalValue();
			if (strLocalValue != null) {
				outstr.append("Text_Size");
				outstr.append("=");
				outstr.append(strLocalValue);
				outstr.append(CMIElement.STR_CRLF);
			}

			// Video 取得
			strSubPath = "video";
			child = node.getChild(strSubPath);

			strLocalValue = child.getLocalValue();
			if (strLocalValue != null) {
				outstr.append("Video");
				outstr.append("=");
				outstr.append(strLocalValue);
				outstr.append(CMIElement.STR_CRLF);
			}

			// Window.n 取得
			strSubPath = "windows";
			CMINode windowsNode = (CMINode)node.getNChild(strSubPath);

			// windows配下の設定件数を取得する
			int intCount = windowsNode.getChildCount();
			if ( intCount > 0 ) {
				// 件数が０件より上である場合、インデックス0から順に子の項目を
				// 取得する
				for (int i = 0; i < intCount; i++) {
					CMIElement	child_n = windowsNode.getChild(i);
					// ローカル値を取得する
					strLocalValue = child_n.getLocalValue();
					if (strLocalValue != null) {
						// ローカル値がNULL以外の場合、PutParam用のデータ取得対象とする
						outstr.append("Window.");
						outstr.append(String.valueOf(i+1));
						outstr.append("=");
						outstr.append(strLocalValue);
						outstr.append(CMIElement.STR_CRLF);
					}
				}
			}
		}
		return intErrCode;
	}
}
