/*
 * blanco Framework
 * Copyright (C) 2004-2006 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.cg.transformer;

import blanco.cg.BlancoCgSupportedLang;
import blanco.cg.BlancoCgTransformer;
import blanco.cg.transformer.cs.BlancoCgCsSourceTransformer;
import blanco.cg.transformer.java.BlancoCgJavaSourceTransformer;
import blanco.cg.transformer.js.BlancoCgJsSourceTransformer;
import blanco.cg.transformer.php.BlancoCgPhpSourceTransformer;
import blanco.cg.transformer.vb.BlancoCgVbSourceTransformer;

/**
 * blancoCgのバリューオブジェクトからソースコードを自動生成するトランスフォーマーファクトリーです。
 * 
 * blancoCgのバリューオブジェクトを構築のうえ、BlancoCgTransformerをもちいて変換することによりソースコードを自動生成することができます。
 * なお、BlancoCgTransformerをもちいたソースコード変換について、現在の仕様では 1度しか実行することができないようになっています。
 * バリューオブジェクトの内容が処理の都度更新されるようになっているからです。その点にご注意ください。
 * 
 * @author IGA Tosiki
 */
public class BlancoCgTransformerFactory {
    /**
     * ソースコードへのトランスフォーマーを取得します。
     * 
     * @param targetLang
     *            取得したいトランスフォーマのプログラミング言語。BlancoCgSupportedLangで指定します。
     * @return ソースコード変換のためのトランスフォーマー。
     */
    public static final BlancoCgTransformer getSourceTransformer(
            final int targetLang) {
        switch (targetLang) {
        case BlancoCgSupportedLang.JAVA:
            return BlancoCgTransformerFactory.getJavaSourceTransformer();
        case BlancoCgSupportedLang.CS:
            return BlancoCgTransformerFactory.getCsSourceTransformer();
        case BlancoCgSupportedLang.JS:
            return BlancoCgTransformerFactory.getJsSourceTransformer();
        case BlancoCgSupportedLang.VB:
            return BlancoCgTransformerFactory.getVbSourceTransformer();
        case BlancoCgSupportedLang.PHP:
            return BlancoCgTransformerFactory.getPhpSourceTransformer();
        default:
            throw new IllegalArgumentException(
                    "BlancoCgTransformerFactory.getSourceTransformer: 対応しないプログラミング言語("
                            + targetLang + ")が指定されました。");
        }
    }

    /**
     * Javaソースコードへのトランスフォーマーを取得します。
     * 
     * @return Java言語ソースコードのためのトランスフォーマー。
     */
    public static BlancoCgTransformer getJavaSourceTransformer() {
        return new BlancoCgJavaSourceTransformer();
    }

    /**
     * C#.NETソースコードへのトランスフォーマーを取得します。
     * 
     * @return C#.NET言語ソースコードのためのトランスフォーマー。
     */
    public static BlancoCgTransformer getCsSourceTransformer() {
        return new BlancoCgCsSourceTransformer();
    }

    /**
     * JavaScriptソースコードへのトランスフォーマーを取得します。
     * 
     * @return JavaScript言語ソースコードのためのトランスフォーマー。
     */
    public static BlancoCgTransformer getJsSourceTransformer() {
        return new BlancoCgJsSourceTransformer();
    }

    /**
     * VB.NETソースコードへのトランスフォーマーを取得します。
     * 
     * @return VB.NET言語ソースコードのためのトランスフォーマー。
     */
    public static BlancoCgTransformer getVbSourceTransformer() {
        return new BlancoCgVbSourceTransformer();
    }

    /**
     * PHPソースコードへのトランスフォーマーを取得します。
     * 
     * @return PHP言語ソースコードのためのトランスフォーマー。
     */
    public static BlancoCgTransformer getPhpSourceTransformer() {
        return new BlancoCgPhpSourceTransformer();
    }
}