/* * Copyright 2004-2015 the Seasar Foundation and the Others. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, * either express or implied. See the License for the specific language * governing permissions and limitations under the License. */ package org.seasar.extension.jdbc.gen.internal.command; import java.io.File; import java.util.HashSet; import java.util.Set; import org.seasar.extension.jdbc.gen.command.Command; import org.seasar.extension.jdbc.gen.generator.GenerationContext; import org.seasar.extension.jdbc.gen.generator.Generator; import org.seasar.extension.jdbc.gen.internal.exception.RequiredPropertyNullRuntimeException; import org.seasar.extension.jdbc.gen.internal.util.FileUtil; import org.seasar.extension.jdbc.gen.model.ClassModel; import org.seasar.extension.jdbc.gen.model.SqlFileTestModel; import org.seasar.extension.jdbc.gen.model.SqlFileTestModelFactory; import org.seasar.framework.log.Logger; import org.seasar.framework.util.ClassUtil; /** * SQLファイルに対するテストクラスのJavaファイルを生成する{@link Command}の実装です。 * * @author taedium */ public class GenerateSqlFileTestCommand extends AbstractCommand { /** ロガー */ protected static Logger logger = Logger .getLogger(GenerateSqlFileTestCommand.class); /** クラスパスのディレクトリ */ protected File classpathDir; /** SQLファイルのセット */ protected Set<File> sqlFileSet = new HashSet<File>(); /** ルートパッケージ名 */ protected String rootPackageName = ""; /** サブパッケージ名 */ protected String subPackageName = ""; /** 生成するテストクラスの単純名 */ protected String shortClassName = "SqlFileTest"; /** テストクラスでS2JUnit4を使用する場合{@code true}、S2Unitを使用する場合{@code false} */ protected boolean useS2junit4; /** テストクラスのテンプレート名 */ protected String templateFileName = "java/sqlfiletest.ftl"; /** テンプレートファイルのエンコーディング */ protected String templateFileEncoding = "UTF-8"; /** テンプレートファイルを格納するプライマリディレクトリ */ protected File templateFilePrimaryDir = null; /** 生成するJavaファイルの出力先ディレクトリ */ protected File javaFileDestDir = new File(new File("src", "main"), "java"); /** Javaファイルのエンコーディング */ protected String javaFileEncoding = "UTF-8"; /** 上書きをする場合{@code true}、しない場合{@code false} */ protected boolean overwrite = true; /** SQLファイルテストのモデルのファクトリ */ protected SqlFileTestModelFactory sqlFileTestModelFactory; /** ジェネレータ */ protected Generator generator; /** * サブパッケージ名を返します。 * * @return サブパッケージ名 */ public String getSubPackageName() { return subPackageName; } /** * サブパッケージ名を設定します。 * * @param subPackageName * サブパッケージ名 */ public void setSubPackageName(String subPackageName) { this.subPackageName = subPackageName; } /** * テストクラスのテンプレート名を返します。 * * @return テストクラスのテンプレート名 */ public String getTemplateFileName() { return templateFileName; } /** * テストクラスのテンプレート名を設定します。 * * @param templateFileName * テストクラスのテンプレート名 */ public void setTemplateFileName(String templateFileName) { this.templateFileName = templateFileName; } /** * 生成するJavaファイルの出力先ディレクトリを返します。 * * @return 生成するJavaファイルの出力先ディレクトリ */ public File getJavaFileDestDir() { return javaFileDestDir; } /** * 生成するJavaファイルの出力先ディレクトリを設定します。 * * @param javaFileDestDir * 生成するJavaファイルの出力先ディレクトリ */ public void setJavaFileDestDir(File javaFileDestDir) { this.javaFileDestDir = javaFileDestDir; } /** * Javaファイルのエンコーディングを返します。 * * @return Javaファイルのエンコーディング */ public String getJavaFileEncoding() { return javaFileEncoding; } /** * Javaファイルのエンコーディングを設定します。 * * @param javaFileEncoding * Javaファイルのエンコーディング */ public void setJavaFileEncoding(String javaFileEncoding) { this.javaFileEncoding = javaFileEncoding; } /** * 上書きをする場合{@code true}、しない場合{@code false}を返します。 * * @return 上書きをする場合{@code true}、しない場合{@code false} */ public boolean isOverwrite() { return overwrite; } /** * 上書きをする場合{@code true}、しない場合{@code false}を設定します。 * * @param overwrite * 上書きをする場合{@code true}、しない場合{@code false} */ public void setOverwrite(boolean overwrite) { this.overwrite = overwrite; } /** * ルートパッケージ名を設定します。 * * @return ルートパッケージ名 */ public String getRootPackageName() { return rootPackageName; } /** * ルートパッケージ名を返します。 * * @param rootPackageName * ルートパッケージ名 */ public void setRootPackageName(String rootPackageName) { this.rootPackageName = rootPackageName; } /** * テンプレートファイルのエンコーディングを返します。 * * @return テンプレートファイルのエンコーディング */ public String getTemplateFileEncoding() { return templateFileEncoding; } /** * テンプレートファイルのエンコーディングを設定します。 * * @param templateFileEncoding * テンプレートファイルのエンコーディング */ public void setTemplateFileEncoding(String templateFileEncoding) { this.templateFileEncoding = templateFileEncoding; } /** * テンプレートファイルを格納するプライマリディレクトリを返します。 * * @return テンプレートファイルを格納するプライマリディレクトリ */ public File getTemplateFilePrimaryDir() { return templateFilePrimaryDir; } /** * テンプレートファイルを格納するプライマリディレクトリを設定します。 * * @param templateFilePrimaryDir * テンプレートファイルを格納するプライマリディレクトリ */ public void setTemplateFilePrimaryDir(File templateFilePrimaryDir) { this.templateFilePrimaryDir = templateFilePrimaryDir; } /** * クラスパスのディレクトリを返します。 * * @return クラスパスのディレクトリ */ public File getClasspathDir() { return classpathDir; } /** * クラスパスのディレクトリを設定します。 * * @param classpathDir * クラスパスのディレクトリ */ public void setClasspathDir(File classpathDir) { this.classpathDir = classpathDir; } /** * SQLファイルのセットを返します。 * * @return SQLファイルのセット */ public Set<File> getSqlFileSet() { return sqlFileSet; } /** * SQLファイルのセットを設定します。 * * @param sqlFileSet * SQLファイルのセット */ public void setSqlFileSet(Set<File> sqlFileSet) { this.sqlFileSet = sqlFileSet; } /** * 生成するテストクラスの単純名を返します。 * * @return 生成するテストクラスの単純名 */ public String getShortClassName() { return shortClassName; } /** * 生成するテストクラスの単純名を設定します。 * * @param shortClassName * 生成するテストクラスの単純名 */ public void setShortClassName(String shortClassName) { this.shortClassName = shortClassName; } /** * テストクラスでS2JUnit4を使用する場合{@code true}、S2Unitを使用する場合{@code false}を返します。 * * @return テストクラスでS2JUnit4を使用する場合{@code true}、S2Unitを使用する場合{@code false} */ public boolean isUseS2junit4() { return useS2junit4; } /** * テストクラスでS2JUnit4を使用する場合{@code true}、S2Unitを使用する場合{@code false}を設定します。 * * @param useS2junit4 * テストクラスでS2JUnit4を使用する場合{@code true}、S2Unitを使用する場合{@code false} */ public void setUseS2junit4(boolean useS2junit4) { this.useS2junit4 = useS2junit4; } @Override protected void doValidate() { if (classpathDir == null) { throw new RequiredPropertyNullRuntimeException("classpathDir"); } } /** * 初期化します。 */ @Override protected void doInit() { sqlFileTestModelFactory = createSqlFileTestModelFactory(); generator = createGenerator(); } @Override protected void doExecute() { SqlFileTestModel model = sqlFileTestModelFactory.getSqlFileTestModel(); GenerationContext context = createGenerationContext(model, templateFileName); generator.generate(context); } @Override protected void doDestroy() { } /** * {@link SqlFileTestModelFactory}の実装を作成します。 * * @return {@link SqlFileTestModelFactory}の実装 */ protected SqlFileTestModelFactory createSqlFileTestModelFactory() { return factory.createSqlFileTestModelFactory(this, classpathDir, sqlFileSet, configPath, jdbcManagerName, ClassUtil.concatName( rootPackageName, subPackageName), shortClassName, useS2junit4); } /** * {@link Generator}の実装を作成します。 * * @return {@link Generator}の実装 */ protected Generator createGenerator() { return factory.createGenerator(this, templateFileEncoding, templateFilePrimaryDir); } /** * {@link GenerationContext}の実装を作成します。 * * @param model * モデル * @param templateName * テンプレート名 * @return {@link GenerationContext}の実装 */ protected GenerationContext createGenerationContext(ClassModel model, String templateName) { File file = FileUtil.createJavaFile(javaFileDestDir, model .getPackageName(), model.getShortClassName()); return factory.createGenerationContext(this, model, file, templateName, javaFileEncoding, overwrite); } @Override protected Logger getLogger() { return logger; } }