top / index / prev / next / target / source
日記形式でつづる いがぴょんコラム ウェブページです。
blanco Frameworkの根っこのライブラリである blancoIgを用いた Javaソースコード自動生成のシンプルサンプルを作成しました。
blancoIgを用いた Javaソースコード生成シンプルサンプルを作りました。
依存するライブラリ
blancoig-0.5.21.jar BlancoIgSimpleGenerator.java
``` /*
import blanco.ig.expander.ClassExpander; import blanco.ig.expander.Type; import blanco.ig.expander.Value; import blanco.ig.expander.field.PrivateField; import blanco.ig.expander.method.MethodExpander; import blanco.ig.generator.GeneratorSetting; import blanco.ig.generator.ImplementGenerator; import blanco.ig.service.ServiceClass;
/** * すごく単純な blancoIgの利用サンプルです。 * * @author Tosiki Iga */ public class BlancoIgSimpleGenerator {
public static void main(String[] args) {
// パッケージ名やクラス名を指定します。
ClassExpander classExpander = new ClassExpander(new Type("my.pkg",
"MyClass")) {
protected void expandClassStruct() {
addFileComment("はじめての blancoIg動作サンプル<br>");
addFileComment("このサンプルは機械的に生成されました。");
getJavaDoc().addLine("はじめてのクラスのサンプル<br>");
getJavaDoc().addLine("このサンプルはblancoIgにより機械的に自動生成されています。");
getJavaDoc().addLine("");
getJavaDoc().addLine("@version 2005.08.16");
getJavaDoc().addLine("@author Tosiki Iga");
// フィールド変数を宣言します。
PrivateField field1 = new PrivateField(new Type(
"java.sql.Connection"), "Connection");
field1.getJavaDoc().addLine("フィールド変数の例となります。<br>");
field1.getJavaDoc().addLine("ただしこのサンプルでは利用されていませんね…");
addField(field1);
addMethod(new MethodExpander("myMethod") {
// メソッドのシグニチャ指定
public void setupSignature() {
getJavaDoc().addLine("はじめてのメソッド");
getJavaDoc().addParameter("argInt", "単なる引数です");
addArgument(new Value(int.class, "argInt"));
getJavaDoc().addParameter("argString", "単なる引数2です");
addArgument(new Value(String.class, "argString"));
getJavaDoc().addParameter("argString", "文字列渡しによる引数3です");
addArgument(new Value(new Type("java.lang.String"),
"argString3"));
getJavaDoc().addReturn("このメソッドの実行結果です");
setReturnType(new Type(int.class));
getJavaDoc().addException(
new Type("java.sql.SQLException"), "データベース例外");
addException(new Type("java.sql.SQLException"));
}
// メソッドの実装
public void implement() {
String escapedQuery = "はろう\"わーるど\"".replaceAll("\"",
"\\\\\"");
getData().addLine(
"System.out.println(\"" + escapedQuery
+ "\" + argString);");
getData().addLine("return argInt;");
}
});
addMethod(new MethodExpander("main") {
protected boolean isStatic() {
return true;
}
// メソッドのシグニチャ指定
public void setupSignature() {
setFinal(true);
getJavaDoc().addLine("はじめてのクラスのメインメソッド");
getJavaDoc().addLine("メインメソッドは このように実装されます。");
getJavaDoc().addParameter("args", "メインメソッドへの引数。");
addArgument(new Value(new Type("java.lang.String[]"),
"args"));
}
// メソッドの実装
public void implement() {
getData().addLine("try {");
getData().addLine(
"new MyClass().myMethod(1, \"引数の値\", \"3\");");
getData().addLine("} catch(SQLException ex) {");
getData().addLine("ex.printStackTrace();");
getData().addLine("}");
}
});
}
};
// 実際にJavaソースコードを生成します。
GeneratorSetting setting = new GeneratorSetting();
// 出力先ディレクトリを設定します。
setting.setWorkDirectory("blanco");
ImplementGenerator implementGenerator = new ImplementGenerator(
new ServiceClass("DummyService"), setting);
// 作成したクラスを登録します。
implementGenerator.addMain(classExpander);
try {
// 実際にソースコード生成を実行します。
implementGenerator.generate();
System.out.println("ソースコード生成が完了しました。");
} catch (IOException e) {
e.printStackTrace();
}
}
} ```
サンプルを動作させてみて、実際にJavaソースコードが生成されるのは、ふだん blancoDbなどで動作は知っているとはいえ、とても印象的でした。
blancoIgを利用するソースコードを、私は初めてスクラッチから作成しました。フラットに記述したら結構シンプルに記述できることを知り、嬉しかったです。
Eclipseプラグイン入門 (amazon.co.jp: 4777510921) Eclipseプラグイン開発入門本の決定版です。普段持ち歩きたいので 2冊目を購入しました。
NATIONAL リニアスムーサー ES8045 (amazon.co.jp: B0007PYU6S) 念願のひげ剃り更新を行いました。