/*
 * blanco Framework
 * Copyright (C) 2004-2005 IGA Tosiki
 * 
 * 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.constants.task;

import java.io.File;
import java.io.IOException;

import javax.xml.transform.TransformerException;

import blanco.constants.BlancoConstantsConstants;
import blanco.constants.BlancoConstantsMeta2Xml;
import blanco.constants.BlancoConstantsXml2JavaClass;
import blanco.constants.resourcebundle.BlancoConstantsResourceBundle;

/**
 * 定数定義書(XLS)からJavaソースコードを自動生成するAntタスクです。
 * 
 * このクラスは、blancoによって自動生成された、Antタスク抽象クラスを継承しています。
 * 
 * @author IGA Tosiki
 */
public class BlancoConstantsTask extends AbstractBlancoConstantsTask {
    /**
     * リソースバンドルへのアクセサクラスのオブジェクト。
     */
    private final BlancoConstantsResourceBundle fBundle = new BlancoConstantsResourceBundle();

    /**
     * 定数定義書(XLS)からJavaソースコードを自動生成するAntタスクのエントリポイントです。
     * 
     * このクラスは、blancoによって自動生成された、Antタスク抽象クラスから呼び出されます。<br>
     * 抽象クラス側で各種入力チェックが終わった状態で、このメソッドは呼び出されます。
     */
    protected void process() throws IllegalArgumentException {
        System.out.println("- " + BlancoConstantsConstants.PRODUCT_NAME + " ("
                + BlancoConstantsConstants.VERSION + ")");

        try {
            final File fileMetadir = new File(getMetadir());
            if (fileMetadir.exists() == false) {
                throw new IllegalArgumentException(fBundle
                        .getAnttaskErr001(getMetadir()));
            }

            // テンポラリディレクトリを作成。
            new File(getTmpdir() + BlancoConstantsConstants.TARGET_SUBDIRECTORY)
                    .mkdirs();

            // 指定されたメタディレクトリを処理します。
            new BlancoConstantsMeta2Xml().processDirectory(fileMetadir,
                    getTmpdir() + BlancoConstantsConstants.TARGET_SUBDIRECTORY);

            // XML化されたメタファイルからValueObjectを生成
            // 最初にテンポラリフォルダを走査
            final File[] fileMeta2 = new File(getTmpdir()
                    + BlancoConstantsConstants.TARGET_SUBDIRECTORY).listFiles();
            for (int index = 0; index < fileMeta2.length; index++) {
                if (fileMeta2[index].getName().endsWith(".xml") == false) {
                    continue;
                }

                new BlancoConstantsXml2JavaClass().process(fileMeta2[index],
                        new File(getTargetdir()));
            }
        } catch (IOException e) {
            throw new IllegalArgumentException(e.toString());
        } catch (TransformerException e) {
            throw new IllegalArgumentException(e.toString());
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
            throw e;
        }
    }
}
