/*
 * 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.io.IOException;
import java.util.HashMap;

import blanco.ig.expander.ClassExpander;
import blanco.ig.generator.GeneratorSetting;
import blanco.ig.generator.ImplementGenerator;
import blanco.wsdl.valueobject.BlancoWsdlWebServiceOperation;

/**
 * 処理生成に関する各種処理をユーティリティとしてまとめたクラス。
 * 
 * このクラスは blanco Framework内の既存クラスを参考として作成されました。
 * 
 * @author IGA Tosiki
 */
public class TerasolunaBLogicUtil {
    /**
     * 電文定義書の情報を電文処理定義書のマップから取得する。
     * 
     * @param operationName
     *            オペレーション名。
     * @return 電文定義書の情報。
     */
    public static final BlancoWsdlWebServiceOperation getTelegramProcessorDef(
            final String operationName, final HashMap mapTelegramProcessDef) {
        if (mapTelegramProcessDef.get(operationName) == null) {
            throw new IllegalArgumentException(
                    "電文処理ID["
                            + operationName
                            + "]のための電文処理定義書が発見できませんでした。電文処理一覧の作成が事前に適切に実行されているかどうかを確認してください。");
        }

        return (BlancoWsdlWebServiceOperation) mapTelegramProcessDef
                .get(operationName);
    }

    /**
     * 取得されたクラス展開情報をもとに、Javaソースコードを生成する。
     * 
     * 与えられたClassExpander情報を元にJavaソースコードを生成する。
     * 
     * @param classExpander
     *            クラス展開情報。
     * @param directoryTarget
     *            Javaソースコードの出力先ディレクトリ。
     * @throws IOException
     *             入出力例外が発生した場合。
     */
    public static void generateJavaSource(ClassExpander classExpander,
            File directoryTarget) throws IOException {
        GeneratorSetting setting = new GeneratorSetting();
        // 出力先ディレクトリを設定します。
        setting.setWorkDirectory(directoryTarget.getAbsolutePath());
        ImplementGenerator implementGenerator = new ImplementGenerator(setting);
        // 作成したクラスを登録します。
        implementGenerator.addMain(classExpander);
        // 実際にソースコード生成を実行します。
        implementGenerator.generate();
        // System.out.println("ソースコード生成が完了しました。");
    }
}
