Develop and Download Open Source Software

Recent Changes

2012-05-25
2012-04-24
2012-04-17
2012-04-16

Wiki Guide

Side Bar

Blanco2g

Abstract

  • Blanco2g is Java Application Framework. It generate Java source code by input Java source code.
  • Blanco2g is provided by Open Source License.
  • By annotation on Java source code, it can generate various Java source code, and it bring growth software development speed and maintenance quality.

名称の由来

  • Blanco2g という名称は、blanco Framework の第 2 世代にあたるフレームワークであることを示しています。

位置づけ

  • 第 1 世代の blanco Framework (Blanco1g) は、Excel ブックを入力してソースコードを生成するタイプのソースコード自動生成フレームワークです。主にウォーターフォール開発モデルに適しています。
  • 第 2 世代の blanco Framework (Blanco2g) は、ソースコードを入力してソースコードを生成するタイプのソースコード自動生成フレームワークです。主にアジャイル開発モデルに向いています。
  • Blanco1g と Blanco2g は、おのおの独立して利用することもできますし、組み合わせて利用することもできます。そして、組み合わせての利用が最も効果が高いものと考えられます。

Blanco2g をダウンロード

Blanco2g リファレンス

Blanco2g をはじめてみよう

おおまかな流れ

  • 基本的なソースコード自動生成のながれを説明するために、「@BlancoNotNull」と「@BlancoTrace」という 2 つの Blanco2g アノテーションを利用した極めてシンプルなサンプルを示します。
  • この例では、AbstractSampleNotNull.java という Java ソースコードを入力して、SampleNotNull.java という Java ソースコードを出力するサンプルです。★Blanco2g は、基本的に AbstractXXXXXXXX.java というファイル名のクラスから XXXXXXXX.java を自動生成します。

Input source code: AbstractSampleNotNull.java

package sample;

import blanco.notnull.BlancoNotNull;
import blanco.trace.BlancoTrace;

/**
 * 非 NULL のサンプル。
 */
public abstract class AbstractSampleNotNull {
    /**
     * パラメータあり、戻り値なし。
     * 
     * @param abc
     *            パラメータ 1.
     */
    public void a11(@BlancoNotNull final String abc) {
    }

    public String a21(@BlancoNotNull final String abc, @BlancoNotNull final String def) {
        return "あああ:" + abc + ", " + def;
    }

    /**
     * トレースと非 NULL との組み合わせ。
     * 
     * @param abc
     * @param def
     * @return
     */
    @BlancoTrace
    public String a91(@BlancoNotNull final String abc, @BlancoNotNull final String def) {
        return "あああ:" + abc + ", " + def;
    }
}

Output source code: SampleNotNull.java (Generated by Blanco2g)

package sample;

/**
 * 非 NULL のサンプル。
 */
public class SampleNotNull extends AbstractSampleNotNull {
    /**
     * パラメータあり、戻り値なし。
     *
     * @param abc パラメータ 1.
     */
    public void a11(String abc) {
        if (abc == null) {
            throw new IllegalArgumentException("不正引数例外: SampleNotNull#a11(String abc) のパラメータ 'abc' に null を与えることはできません。");
        }
        super.a11(abc);
    }

    /**
     *
     * @param abc
     * @param def
     * @return
     */
    public String a21(String abc, String def) {
        java.lang.String autoValMethodResult;
        if (abc == null) {
            throw new IllegalArgumentException("不正引数例外: SampleNotNull#a21(String abc, String def) のパラメータ 'abc' に null を与えることはできません。");
        }
        if (def == null) {
            throw new IllegalArgumentException("不正引数例外: SampleNotNull#a21(String abc, String def) のパラメータ 'def' に null を与えることはできません。");
        }
        autoValMethodResult = super.a21(abc, def);
        return autoValMethodResult;
    }

    /**
     * トレースと非 NULL との組み合わせ。
     *
     * @param abc
     * @param def
     * @return
     */
    public String a91(String abc, String def) {
        java.lang.String autoValMethodResult;
        long autoValStartTimeMillisec = System.currentTimeMillis();
        System.out.println("trace: AbstractSampleNotNull#a91(" + abc + ", " + def + ") begin.");
        if (abc == null) {
            throw new IllegalArgumentException("不正引数例外: SampleNotNull#a91(String abc, String def) のパラメータ 'abc' に null を与えることはできません。");
        }
        if (def == null) {
            throw new IllegalArgumentException("不正引数例外: SampleNotNull#a91(String abc, String def) のパラメータ 'def' に null を与えることはできません。");
        }
        autoValMethodResult = super.a91(abc, def);
        System.out.println("trace: AbstractSampleNotNull#a91(" + abc + ", " + def + ") end. " + "[" + autoValMethodResult + "] " + (System.currentTimeMillis() - autoValStartTimeMillisec) + "ms");
        return autoValMethodResult;
    }
}

おおまかな流れ (その 2)

  • 上述したサンプルは簡単すぎます。
  • 実際のところ Blanco2g アノテーションで利用可能なアノテーションには、もっと高機能なものがいくつもあり、またそれらを組み合わせて利用することができるのです。
  • Blanco2g で最も効果が高いのは @BlancoInject アノテーションです。

特徴

  • 自動生成したソースコードの実行時には、Spring のような特殊なランタイムは必要ありません。
  • 基本的に Java ソースコードで完結して作業できます。また XML ファイルのたぐいを閲覧したり編集したりする必要はありません。
  • 少ないコンピュータ・リソースで動作するフレームワークであるため、クラウドコンピューティング環境や組み込み環境での動作にも適合しやすいです。

Source code

  • 現在開発中の最新ソースコードは次のリンクからダウンロード (SVN によるチェックアウト) をおこなうことができます。: http://svn.sourceforge.jp/svnroot/blancofw/blanco2g/trunk/
  • もし Eclipse 3.6 以降が手元にあれば、上記のリンクから SVN チェックアウトをおこなったプロジェクトから自動生成を実際に動作させることができます。

License

  • Blanco2g は原則として GNU LGPL と EPL のいずれか一方、あるいは両方のデュアル・ライセンスというライセンスを採用しています。
  • ごく一部のソースコードについて、GNU LGPL, EPL, Apache ライセンスのトリプル・ライセンスを採用しているものがあります。
  • もし詳しく知りたい場合には、おのおののソースコードのファイルヘッダーを参照することによりライセンスを確認することができます。
  • なお、Blanco2g が自動生成するソースコードについては、Blanco2g のライセンスとは関わりなく、その入力となったソースコードのライセンスをそのまま引き継ぐこととなります。

同梱物

  • Blanco2g は、動作のために EPL のもとに公開されているライブラリを必要とします。
  • Blanco2g が生成したソースコードは 基本的にそれ単独で動作するようになっています。

技術的な特徴

  • Blanco2g is based on static AOP (SAOP) architecture.
  • Blanco2g depends on 'Reversed Generation Gap Pattern' design pattern.
  • Blanco2g can extends by user easily.

Wiki URL


SourceForge.JP is a Japanese version of SourceForge.net. For developments that are not related to Japan, we recommend you to use SourceForge.net.