Namesクラス と SqlFilesクラス

たけぞうさんからリクエストがあったNamesクラスとSqlFilesクラスに対応しました。次のバージョン(2.4.40)に入ります。


Namesクラスは、Gen-Namesタスクを実行すれば自動で作られるようにしました(生成しないことも可)。


SqlFilesクラスは、こんなantタスクで生成できるようにしました。

<gen-sqlfileconstants
    classpathDir="build/classes"
    rootpackagename="examples"
    classpathref="classpath">
    <sqlfileset dir="build/classes">
        <include name="META-INF/sql/**/*.sql" />
    </sqlfileset>
</gen-sqlfileconstants>

上のタスクを実行すると、たとえば、こんなクラスが作られます。

/**
 * SQLファイルの定数クラスです。
 *
 */
public final class SqlFiles {

    /**
     * {@code META-INF/sql/Address/getStreet.sql}の定数です。
     */
    public static final String ADDRESS_GET_STREET = "META-INF/sql/Address/getStreet.sql";

    /**
     * {@code META-INF/sql/Employee/updateEmployeeName.sql}の定数です。
     */
    public static final String EMPLOYEE_UPDATE_EMPLOYEE_NAME = "META-INF/sql/Employee/updateEmployeeName.sql";
}

定数名は、デフォルトでは、SQLファイルのディレクトリ名とファイル名をキャメルケースから大文字のアンダースコア(_)区切りに変換し、 両者をアンダースコア(_)で連結したものになります。
定数名をカスタマイズするには、SqlFileConstantNamingRuleというインタフェースの実装クラスを作ってクラス名をタスクのパラメータで指定します。SqlFileConstantNamingRuleはこんなインタフェースです。

/**
 * SQLファイルのパスを表す定数の名前付けルールです。
 * 
 * @author taedium
 * 
 */
public interface SqlFileConstantNamingRule {

    /**
     * SQLファイルのパスから定数名に変換します。
     * 
     * @param path
     *            SQLファイルのパス。ディレクトリの区切りはスラッシュで表されます。たとえば次のような {@code
     *            aaa/bbb/ccc.sql}のような文字列になります。
     * @return 定数名
     */
    String fromPathToConstantName(String path);
}

一応SNAPSHOTをつくってみました。よければどうぞ。
http://maven.seasar.org/maven2-snapshot/org/seasar/container/s2jdbc-gen/2.4.40-SNAPSHOT/s2jdbc-gen-2.4.40-20091008.121505-1.jar