/*
 * blanco Framework
 * Copyright(C) 2006-2008 NTT DATA BUSINESS BRAINS CORPORATION.
 * 
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 */
package blanco.soap.terasoluna.rich;

import java.io.File;
import java.util.HashMap;

import javax.xml.transform.dom.DOMResult;

import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import blanco.commons.util.BlancoXmlUtil;
import blanco.wsdl.valueobject.BlancoWsdlWebServiceOperation;

/**
 * 電文処理定義書情報をパースします。
 * 
 * 「説明」を利用するために、このクラスは利用される。<br>
 * このクラスは blanco Framework内の既存クラスを参考として作成されました。
 * 
 * @author IGA Tosiki
 */
public class ParseTelegramProcessDefInfo {
    /**
     * 電文処理定義書のマップ。
     */
    private HashMap fMap = new HashMap();

    /**
     * 指定のテンポラリフォルダ内の相対位置にある電文処理定義書一覧のファイルを読み込みます。
     * 
     * @param fileTmpDirectory
     *            テンポラリフォルダのルート。
     * @return BlancoSqlDefInfoValueObjectのMapを戻します。
     */
    public HashMap process(final File fileTmpDirectory) {
        DOMResult result = null;
        try {
            result = BlancoXmlUtil.transformFile2Dom(new File(fileTmpDirectory
                    .getAbsolutePath()
                    + "/doclisting/blancotelegramprocess-common.combinedxml"));
        } catch (java.lang.IllegalArgumentException ex) {
            System.out.println("ファイル読み込みなどに失敗しました。処理中断します。" + ex.toString());
            // ファイル読み込みなどに失敗しました。処理中断します。
            return fMap;
        }
        final Element element = BlancoXmlUtil.getElement(result.getNode(),
                "workbook/sheet");
        if (element == null) {
            System.out
                    .println("blancotelegramprocess-commonからルートノード解析に失敗しました。");
            return fMap;
        }
        final NodeList nodeList = element
                .getElementsByTagName("blancotelegramprocess-common");
        final int sizeList = nodeList.getLength();
        for (int index = 0; index < sizeList; index++) {
            final Node nodeLook = nodeList.item(index);
            if (nodeLook instanceof Element == false) {
                continue;
            }
            final Element eleLook = (Element) nodeLook;

            final BlancoWsdlWebServiceOperation telegramProcessDefInfo = new BlancoWsdlWebServiceOperation();

            telegramProcessDefInfo.setName(BlancoXmlUtil.getTextContent(
                    eleLook, "telegramProcessId"));
            telegramProcessDefInfo.setDescription(BlancoXmlUtil.getTextContent(
                    eleLook, "description"));

            fMap.put(telegramProcessDefInfo.getName(), telegramProcessDefInfo);

            // SQL定義書のサーチについては、このTERASOLUNA拡張対応版には実装されません。
        }
        return fMap;
    }
}
