svnno****@sourc*****
svnno****@sourc*****
2009年 4月 14日 (火) 16:24:54 JST
Revision: 3268 http://svn.sourceforge.jp/view?root=jiemamy&view=rev&rev=3268 Author: j5ik2o Date: 2009-04-14 16:24:54 +0900 (Tue, 14 Apr 2009) Log Message: ----------- リファクタリング Modified Paths: -------------- leto/jiemamy-entity-io/trunk/pom.xml leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/desc/impl/AttributeDescFactoryImpl.java leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/desc/impl/EntityDescFactoryImpl.java leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/desc/impl/EntitySetDescFactoryImpl.java leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/generator/impl/GeneratorImpl.java leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/meta/DbColumnMeta.java leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/meta/DbForeignKeyMeta.java leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/meta/DbTableMeta.java leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/meta/DbTableMetaReader.java leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/meta/DbUniqueKeyMeta.java leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/meta/EntityMetaWriterContext.java leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/meta/impl/EntityMetaWriterImpl.java Added Paths: ----------- leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/ProductInfo.java leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/model/impl/ leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/model/impl/AssociationModelFactoryImpl.java leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/model/impl/AttributeModelFactoryImpl.java leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/model/impl/ClassModelSupport.java leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/model/impl/CompositeUniqueConstraintModelFactoryImpl.java leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/model/impl/EntityModelFactoryImpl.java leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/model/impl/GeneratedModelSupport.java leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/meta/DefaultEntityMetaWriterContext.java leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/meta/DefaultEntityMetaWriterFactory.java leto/jiemamy-entity-io/trunk/src/test/java/org/jiemamy/entity/io/meta/impl/EntityMetaWriterImplTest.java leto/jiemamy-entity-io/trunk/src/test/resources/template/ Removed Paths: ------------- leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/model/ConditionAssociationModel.java leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/model/ConditionAttributeModel.java leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/model/ConditionModel.java leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/meta/impl/EntityMetaWriterFactoryImpl.java -------------- next part -------------- Modified: leto/jiemamy-entity-io/trunk/pom.xml =================================================================== --- leto/jiemamy-entity-io/trunk/pom.xml 2009-04-14 00:12:41 UTC (rev 3267) +++ leto/jiemamy-entity-io/trunk/pom.xml 2009-04-14 07:24:54 UTC (rev 3268) @@ -146,6 +146,11 @@ <version>0.9.15</version> </dependency> <dependency> + <groupId>commons-beanutils</groupId> + <artifactId>commons-beanutils</artifactId> + <version>1.8.0</version> + </dependency> + <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.4</version> @@ -170,6 +175,11 @@ <artifactId>freemarker</artifactId> <version>2.3.13</version> </dependency> +<dependency> + <groupId>org.apache.geronimo.specs</groupId> + <artifactId>geronimo-annotation_1.0_spec</artifactId> + <version>1.0</version> +</dependency> </dependencies> <reporting> <plugins> Added: leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/ProductInfo.java =================================================================== --- leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/ProductInfo.java (rev 0) +++ leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/ProductInfo.java 2009-04-14 07:24:54 UTC (rev 3268) @@ -0,0 +1,180 @@ +/* + * Copyright 2004-2009 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.jiemamy.entity.io; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Properties; + +import org.jiemamy.exception.JiemamyError; + +/** + * プロダクト情報。 + * + * @author j5ik2o + */ +public class ProductInfo { + + /** + * プロダクト情報のホルダ。 + * + * @author j5ik2o + */ + protected static class ProductInfoHolder { + + /** POMのプロパティファイルのパス */ + protected static final String POM_PROPERTIES_PATH = + "META-INF/maven/org.jiemamy/jiemamy-entity-io/pom.properties"; + + /** プロダクト情報 */ + protected static final ProductInfo PRODUCT_INFO = createProductInfo(); + + + /** + * プロダクト情報を取得する。 + * + * @return プロダクト情報 + */ + protected static ProductInfo createProductInfo() { + Properties props = loadProperties(); + return new ProductInfo(props.getProperty("version"), props.getProperty("groupId"), props + .getProperty("artifactId")); + } + + /** + * プロパティをロードし取得する。 + * + * @return プロパティ + */ + protected static Properties loadProperties() { + InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(POM_PROPERTIES_PATH); + Properties props = new Properties(); + if (is != null) { + try { + props.load(is); + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return props; + } + + /** + * インスタンスを生成する。 + * + */ + protected ProductInfoHolder() { + throw new JiemamyError("不到達ポイント"); + } + } + + + /** プロダクト名 */ + protected static final String PRODUCT_NAME = "Jiemamy EntityIO"; + + /** 不明な値 */ + protected static final String UNKNOWN = "unknown"; + + + /** + * シングルトンの{@link ProductInfo}を取得する。 + * + * @return シングルトンの{@link ProductInfo} + */ + public static ProductInfo getInstance() { + return ProductInfoHolder.PRODUCT_INFO; + } + + /** + * プロダクト情報を標準出力へ出力する。 + * + * @param args プログラム引数 + */ + public static void main(String[] args) { + ProductInfo info = ProductInfoHolder.PRODUCT_INFO; + System.out.printf("jiemamy entity io name : %s\n", info.getName()); + System.out.printf("jiemamy entity io version : %s\n", info.getVersion()); + System.out.printf("jiemamy entity io groupId : %s\n", info.getGroupId()); + System.out.printf("jiemamy entity io artifactId : %s\n", info.getArtifactId()); + } + + + /** groupId */ + protected final String groupId; + + /** artifactId */ + protected final String artifactId; + + /** バージョン */ + protected final String version; + + + /** + * インスタンスを生成する。 + * + * @param version バージョン + * @param groupId グループID + * @param artifactId アーティファクトID + */ + protected ProductInfo(String version, String groupId, String artifactId) { + this.version = version != null ? version : UNKNOWN; + this.groupId = groupId != null ? groupId : UNKNOWN; + this.artifactId = artifactId != null ? artifactId : UNKNOWN; + } + + /** + * artifactIdを取得する。 + * + * @return artifactId + */ + public String getArtifactId() { + return artifactId; + } + + /** + * groupIdを取得する。 + * + * @return groupId + */ + public String getGroupId() { + return groupId; + } + + /** + * 名前を取得する。 + * + * @return 名前 + */ + public String getName() { + return PRODUCT_NAME; + } + + /** + * バージョンを取得する。 + * + * @return バージョン + */ + public String getVersion() { + return version; + } + +} Property changes on: leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/ProductInfo.java ___________________________________________________________________ Added: svn:mime-type + text/plain Modified: leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/desc/impl/AttributeDescFactoryImpl.java =================================================================== --- leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/desc/impl/AttributeDescFactoryImpl.java 2009-04-14 00:12:41 UTC (rev 3267) +++ leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/desc/impl/AttributeDescFactoryImpl.java 2009-04-14 07:24:54 UTC (rev 3268) @@ -33,6 +33,7 @@ import org.jiemamy.entity.io.gen.meta.DbTableMeta; import org.jiemamy.entity.io.utils.AnnotationUtil; import org.jiemamy.utils.ClassUtil; +import org.jiemamy.utils.StringUtil; /** * {@link AttributeDescFactory}の実装クラスです。 @@ -62,10 +63,10 @@ * @param initialValue エンティティの識別子の初期値、指定しない場合は{@code null} * @param allocationSize エンティティの識別子の割り当てサイズ、指定しない場合は{@code null} */ - public AttributeDescFactoryImpl(String versionColumnNamePattern, GenerationType generationType, + public AttributeDescFactoryImpl(Pattern versionColumnNamePattern, GenerationType generationType, Integer initialValue, Integer allocationSize) { Validate.notNull(versionColumnNamePattern); - this.versionColumnNamePattern = Pattern.compile(versionColumnNamePattern, Pattern.CASE_INSENSITIVE); + this.versionColumnNamePattern = versionColumnNamePattern; this.generationType = generationType == GenerationType.AUTO ? getDefaultGenerationType() : generationType; if (this.generationType == GenerationType.IDENTITY) { @@ -173,8 +174,7 @@ } private String fromColumnNameToPropertyName(String name) { - // TODO Auto-generated method stub - return null; + return StringUtil.camelize(name); } public AttributeDesc getAttributeDesc(DbTableMeta tableMeta, DbColumnMeta columnMeta) { @@ -188,8 +188,7 @@ } private GenerationType getDefaultGenerationType() { - // TODO Auto-generated method stub - return null; + return GenerationType.AUTO; } /** Modified: leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/desc/impl/EntityDescFactoryImpl.java =================================================================== --- leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/desc/impl/EntityDescFactoryImpl.java 2009-04-14 00:12:41 UTC (rev 3267) +++ leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/desc/impl/EntityDescFactoryImpl.java 2009-04-14 07:24:54 UTC (rev 3268) @@ -29,6 +29,7 @@ import org.jiemamy.entity.io.gen.meta.DbColumnMeta; import org.jiemamy.entity.io.gen.meta.DbTableMeta; import org.jiemamy.entity.io.gen.meta.DbUniqueKeyMeta; +import org.jiemamy.utils.StringUtil; /** * {@link EntityDescFactory}の実装クラスです。 @@ -114,8 +115,7 @@ } private String fromTableNameToEntityName(String name) { - // TODO Auto-generated method stub - return null; + return StringUtil.camelize(name); } public EntityDesc getEntityDesc(DbTableMeta tableMeta) { Modified: leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/desc/impl/EntitySetDescFactoryImpl.java =================================================================== --- leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/desc/impl/EntitySetDescFactoryImpl.java 2009-04-14 00:12:41 UTC (rev 3267) +++ leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/desc/impl/EntitySetDescFactoryImpl.java 2009-04-14 07:24:54 UTC (rev 3268) @@ -25,6 +25,7 @@ import java.io.InputStreamReader; import java.util.LinkedHashMap; import java.util.List; +import java.util.regex.Pattern; import javax.persistence.GenerationType; @@ -51,7 +52,7 @@ protected DbTableMetaReader dbTableMetaReader; /** バージョンカラム名のパターン */ - protected String versionColumnNamePattern; + protected Pattern versionColumnNamePattern; /** 単語を複数系に変換するための辞書ファイル、使用しない場合は{@code null} */ protected File pluralFormFile; @@ -79,7 +80,7 @@ * @param initialValue エンティティの識別子の初期値、指定しない場合は{@code null} * @param allocationSize エンティティの識別子の割り当てサイズ、指定しない場合は{@code null} */ - public EntitySetDescFactoryImpl(DbTableMetaReader dbTableMetaReader, String versionColumnNamePattern, + public EntitySetDescFactoryImpl(DbTableMetaReader dbTableMetaReader, Pattern versionColumnNamePattern, File pluralFormFile, GenerationType generationType, Integer initialValue, Integer allocationSize) { Validate.notNull(dbTableMetaReader); Validate.notNull(versionColumnNamePattern); Modified: leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/generator/impl/GeneratorImpl.java =================================================================== --- leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/generator/impl/GeneratorImpl.java 2009-04-14 00:12:41 UTC (rev 3267) +++ leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/generator/impl/GeneratorImpl.java 2009-04-14 07:24:54 UTC (rev 3268) @@ -92,7 +92,6 @@ * @throws IOException 入出力が失敗した場合 */ protected TemplateLoader createTemplateLoader(File templateFilePrimaryDir) throws IOException { - Validate.notNull(templateFilePrimaryDir); TemplateLoader primary = null; if (templateFilePrimaryDir != null) { primary = new FileTemplateLoader(templateFilePrimaryDir); Modified: leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/meta/DbColumnMeta.java =================================================================== --- leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/meta/DbColumnMeta.java 2009-04-14 00:12:41 UTC (rev 3267) +++ leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/meta/DbColumnMeta.java 2009-04-14 07:24:54 UTC (rev 3268) @@ -60,7 +60,7 @@ /** - * コメントを返します。 + * コメントを取得する。 * * @return コメント */ @@ -69,7 +69,7 @@ } /** - * デフォルト値を返します。 + * デフォルト値を取得する。 * * @return デフォルト値 */ @@ -78,7 +78,7 @@ } /** - * 長さを返します。 + * 長さを取得する。 * * @return 長さ */ @@ -87,7 +87,7 @@ } /** - * 名前を返します。 + * 名前を取得する。 * * @return 名前 */ @@ -96,7 +96,7 @@ } /** - * スケールを返します。 + * スケールを取得する。 * * @return スケール */ @@ -105,7 +105,7 @@ } /** - * SQL型を返します。 + * SQL型を取得する。 * * @return SQL型 */ @@ -114,7 +114,7 @@ } /** - * 型名を返します。 + * 型名を取得する。 * * @return 型名 */ Modified: leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/meta/DbForeignKeyMeta.java =================================================================== --- leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/meta/DbForeignKeyMeta.java 2009-04-14 00:12:41 UTC (rev 3267) +++ leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/meta/DbForeignKeyMeta.java 2009-04-14 07:24:54 UTC (rev 3268) @@ -23,7 +23,7 @@ import java.util.List; /** - * データベースの外部キーメタデータです。 + * データベースの外部キーメタデータ。 * * @author j5ik2o */ @@ -52,7 +52,7 @@ /** - * 外部キーのカラム名を追加します。 + * 外部キーのカラム名を追加する。 * * @param foreignKeyColumnName 外部キーのカラム名 */ @@ -61,7 +61,7 @@ } /** - * 主キーのカラム名を追加します。 + * 主キーのカラム名を追加する。 * * @param primaryKeyColumnName 主キーのカラム名 */ @@ -70,7 +70,7 @@ } /** - * 外部キーのカラム名のリストを返します。 + * 外部キーのカラム名のリストを取得する。 * * @return 外部キーのカラム名のリスト */ @@ -79,7 +79,7 @@ } /** - * 名前を返します。 + * 名前を取得する。 * * @return 名前 */ @@ -88,7 +88,7 @@ } /** - * 主キー側のカタログ名を返します。 + * 主キー側のカタログ名を取得する。 * * @return 主キー側のカタログ名 */ @@ -97,7 +97,7 @@ } /** - * 主キーのカラム名のリストを返します。 + * 主キーのカラム名のリストを取得する。 * * @return 主キーのカラム名のリスト */ @@ -106,7 +106,7 @@ } /** - * 完全なテーブル名を返します。 + * 完全なテーブル名を取得する。 * * @return 完全なテーブル名 */ @@ -122,7 +122,7 @@ } /** - * 主キー側のスキーマ名を返します。 + * 主キー側のスキーマ名を取得する。 * * @return 主キー側のスキーマ名 */ @@ -131,7 +131,7 @@ } /** - * 主キー側のテーブル名を返します。 + * 主キー側のテーブル名を取得する。 * * @return 主キー側のテーブル名 */ @@ -140,7 +140,7 @@ } /** - * 複合外部キーの場合{@code true}、そうでない場合{@code false}を返します。 + * 複合外部キーの場合{@code true}、そうでない場合{@code false}を取得する。 * * @return 複合外部キーの場合{@code true}、そうでない場合{@code false} */ @@ -149,7 +149,7 @@ } /** - * 一意の場合{@code true}、そうでない場合{@code false}を返します。 + * 一意の場合{@code true}、そうでない場合{@code false}を取得する。 * * @return 一意の場合{@code true}、そうでない場合{@code false} */ @@ -158,7 +158,7 @@ } /** - * 名前を設定します。 + * 名前を設定する。 * * @param name 名前 */ @@ -167,7 +167,7 @@ } /** - * 主キー側のカタログ名を設定します。 + * 主キー側のカタログ名を設定する。 * * @param primaryKeyCatalogName 主キー側のカタログ名 */ @@ -176,7 +176,7 @@ } /** - * 主キー側のスキーマ名を設定します。 + * 主キー側のスキーマ名を設定する。 * * @param primaryKeySchemaName 主キー側のスキーマ名 */ @@ -185,7 +185,7 @@ } /** - * 主キー側のテーブル名を設定します。 + * 主キー側のテーブル名を設定する。 * * @param primaryKeyTableName 主キー側のテーブル名 */ @@ -194,7 +194,7 @@ } /** - * 一意の場合{@code true}、そうでない場合{@code false}を設定します。 + * 一意の場合{@code true}、そうでない場合{@code false}を設定する。 * * @param unique 一意の場合{@code true} */ Modified: leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/meta/DbTableMeta.java =================================================================== --- leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/meta/DbTableMeta.java 2009-04-14 00:12:41 UTC (rev 3267) +++ leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/meta/DbTableMeta.java 2009-04-14 07:24:54 UTC (rev 3268) @@ -60,12 +60,12 @@ /** * カラムのメタデータを追加する。 * - * @param columnDesc カラム記述 + * @param columnMeta カラム記述 */ - public void addColumnMeta(DbColumnMeta columnDesc) { - columnMetaList.add(columnDesc); - if (columnDesc.isPrimaryKey()) { - primaryKeyColumnMetaList.add(columnDesc); + public void addColumnMeta(DbColumnMeta columnMeta) { + columnMetaList.add(columnMeta); + if (columnMeta.isPrimaryKey()) { + primaryKeyColumnMetaList.add(columnMeta); } } @@ -88,7 +88,7 @@ } /** - * カタログ名を返します。 + * カタログ名を取得する。 * * @return カタログ名 */ @@ -97,7 +97,7 @@ } /** - * カラムのメタデータのリストを返します。 + * カラムのメタデータのリストを取得する。 * * @return カラムのメタデータのリスト */ Modified: leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/meta/DbTableMetaReader.java =================================================================== --- leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/meta/DbTableMetaReader.java 2009-04-14 00:12:41 UTC (rev 3267) +++ leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/meta/DbTableMetaReader.java 2009-04-14 07:24:54 UTC (rev 3268) @@ -21,14 +21,14 @@ import java.util.List; /** - * {@link DbTableMeta データベースのテーブルメタデータ}を読み取るインタフェースです。 + * {@link DbTableMeta データベースのテーブルメタデータ}を読み取るインタフェース。 * * @author j5ik2o */ public interface DbTableMetaReader { /** - * データベースのテーブルメタデータを読み取ります。 + * データベースのテーブルメタデータを読み取る。 * * @return テーブルメタデータのリスト */ Modified: leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/meta/DbUniqueKeyMeta.java =================================================================== --- leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/meta/DbUniqueKeyMeta.java 2009-04-14 00:12:41 UTC (rev 3267) +++ leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/meta/DbUniqueKeyMeta.java 2009-04-14 07:24:54 UTC (rev 3268) @@ -23,7 +23,7 @@ import java.util.List; /** - * データベースの一意キーメタデータです。 + * データベースの一意キーメタデータ。 * * @author j5ik2o */ @@ -40,7 +40,7 @@ /** - * カラム名を追加します。 + * カラム名を追加する。 * * @param columnName カラム名 */ @@ -49,7 +49,7 @@ } /** - * カラム名のリストを返します。 + * カラム名のリストを取得する。 * * @return カラム名のリスト */ @@ -58,7 +58,7 @@ } /** - * 名前を返します。 + * 名前を取得する。 * * @return 名前 */ @@ -67,7 +67,7 @@ } /** - * 複合一意キーの場合{@code true}、そうでない場合{@code false}を返します。 + * 複合一意キーの場合{@code true}、そうでない場合{@code false}を取得する。 * * @return 複合一意キーの場合{@code true}、そうでない場合{@code false} */ @@ -76,7 +76,7 @@ } /** - * 主キーの場合{@code true}、そうでない場合{@code false}を返します。 + * 主キーの場合{@code true}、そうでない場合{@code false}を取得する。 * * @return 主キーの場合{@code true}、そうでない場合{@code false} */ @@ -85,7 +85,7 @@ } /** - * 名前を設定します。 + * 名前を設定する。 * * @param name 名前 */ @@ -94,7 +94,7 @@ } /** - * 主キーの場合{@code true}、そうでない場合{@code false}を設定します。 + * 主キーの場合{@code true}、そうでない場合{@code false}を設定する。 * * @param primaryKey 主キーの場合{@code true}、そうでない場合{@code false} */ Deleted: leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/model/ConditionAssociationModel.java =================================================================== --- leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/model/ConditionAssociationModel.java 2009-04-14 00:12:41 UTC (rev 3267) +++ leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/model/ConditionAssociationModel.java 2009-04-14 07:24:54 UTC (rev 3268) @@ -1,70 +0,0 @@ -/* - * Copyright 2007-2009 Jiemamy Project and the Others. - * - * This file is part of Jiemamy. - * - * 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.jiemamy.entity.io.gen.model; - -/** - * 条件クラスの関連モデル。 - * - * @author j5ik2o - */ -public class ConditionAssociationModel { - - /** 名前 */ - protected String name; - - /** 関連先の条件クラスの単純名 */ - protected String shortConditionClassName; - - - /** - * 名前を取得する - * - * @return 名前 - */ - public String getName() { - return name; - } - - /** - * 戻り値のクラスの単純名を取得する。 - * - * @return 戻り値のクラスの単純名 - */ - public String getShortConditionClassName() { - return shortConditionClassName; - } - - /** - * 名前を設定する。 - * - * @param name 名前 - */ - public void setName(String name) { - this.name = name; - } - - /** - * 関連先の条件クラスの単純名を設定する。 - * - * @param shortConditionClassName 関連先の条件クラスの単純名 - */ - public void setShortConditionClassName(String shortConditionClassName) { - this.shortConditionClassName = shortConditionClassName; - } - -} Deleted: leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/model/ConditionAttributeModel.java =================================================================== --- leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/model/ConditionAttributeModel.java 2009-04-14 00:12:41 UTC (rev 3267) +++ leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/model/ConditionAttributeModel.java 2009-04-14 07:24:54 UTC (rev 3268) @@ -1,112 +0,0 @@ -/* - * Copyright 2007-2009 Jiemamy Project and the Others. - * - * This file is part of Jiemamy. - * - * 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.jiemamy.entity.io.gen.model; - -/** - * 条件クラスの属性モデル。 - * - * @author j5ik2o - */ -public class ConditionAttributeModel { - - /** 名前 */ - protected String name; - - /** 属性のクラス */ - protected Class<?> attributeClass; - - /** 条件クラス */ - protected Class<?> conditionClass; - - /** パラメタ化される場合{@code true} */ - protected boolean parameterized; - - - /** - * 属性のクラスを取得する。 - * - * @return 属性のクラス - */ - public Class<?> getAttributeClass() { - return attributeClass; - } - - /** - * 条件クラスを取得する。 - * - * @return 条件クラス - */ - public Class<?> getConditionClass() { - return conditionClass; - } - - /** - * 名前を取得する。 - * - * @return 名前 - */ - public String getName() { - return name; - } - - /** - * パラメタ化されている場合{@code true}を取得する。 - * - * @return パラメタ化されている場合{@code true} - */ - public boolean isParameterized() { - return parameterized; - } - - /** - * 属性のクラスを設定する。 - * - * @param attributeClass 属性のクラス - */ - public void setAttributeClass(Class<?> attributeClass) { - this.attributeClass = attributeClass; - } - - /** - * 条件クラスを設定する。 - * - * @param conditionClass 条件クラス - */ - public void setConditionClass(Class<?> conditionClass) { - this.conditionClass = conditionClass; - } - - /** - * 名前を設定する。 - * - * @param name 名前 - */ - public void setName(String name) { - this.name = name; - } - - /** - * パラメタ化されている場合{@code true}を設定する。 - * - * @param parameterized パラメタ化されている場合{@code true} - */ - public void setParameterized(boolean parameterized) { - this.parameterized = parameterized; - } - -} Deleted: leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/model/ConditionModel.java =================================================================== --- leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/model/ConditionModel.java 2009-04-14 00:12:41 UTC (rev 3267) +++ leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/model/ConditionModel.java 2009-04-14 07:24:54 UTC (rev 3268) @@ -1,96 +0,0 @@ -/* - * Copyright 2007-2009 Jiemamy Project and the Others. - * - * This file is part of Jiemamy. - * - * 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.jiemamy.entity.io.gen.model; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -/** - * 条件クラスのモデル。 - * - * @author j5ik2o - */ -public class ConditionModel extends ClassModel { - - /** エンティティクラスの単純名 */ - protected String shortEntityClassName; - - /** 条件クラスの属性モデルのリスト */ - protected List<ConditionAttributeModel> conditionAttributeModelList = new ArrayList<ConditionAttributeModel>(); - - /** 条件クラスの関連モデルのリスト */ - protected List<ConditionAssociationModel> conditionAssociationModelList = - new ArrayList<ConditionAssociationModel>(); - - - /** - * 条件クラスのメソッドモデルを追加する。 - * - * @param conditionAssociationModel 条件クラスの関連モデル - */ - public void addConditionAssociationModel(ConditionAssociationModel conditionAssociationModel) { - conditionAssociationModelList.add(conditionAssociationModel); - } - - /** - * 条件クラスの属性モデルを追加する。 - * - * @param conditionAttributeModel 条件クラスの属性モデル - */ - public void addConditionAttributeModel(ConditionAttributeModel conditionAttributeModel) { - conditionAttributeModelList.add(conditionAttributeModel); - } - - /** - * 条件クラスの関連モデルのリストを取得する。 - * - * @return 条件クラスの関連モデルのリスト - */ - public List<ConditionAssociationModel> getConditionAssociationModelList() { - return Collections.unmodifiableList(conditionAssociationModelList); - } - - /** - * 条件クラスの属性モデルのリストを取得する。 - * - * @return 条件クラスの属性モデルのリスト - */ - public List<ConditionAttributeModel> getConditionAttributeModelList() { - return Collections.unmodifiableList(conditionAttributeModelList); - } - - /** - * エンティティクラスの単純名を取得する。 - * - * @return エンティティクラスの単純名 - */ - public String getShortEntityClassName() { - return shortEntityClassName; - } - - /** - * エンティティクラスの単純名を設定する。 - * - * @param shortEntityClassName エンティティクラスの単純名 - */ - public void setShortEntityClassName(String shortEntityClassName) { - this.shortEntityClassName = shortEntityClassName; - } - -} Added: leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/model/impl/AssociationModelFactoryImpl.java =================================================================== --- leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/model/impl/AssociationModelFactoryImpl.java (rev 0) +++ leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/model/impl/AssociationModelFactoryImpl.java 2009-04-14 07:24:54 UTC (rev 3268) @@ -0,0 +1,126 @@ +/* + * Copyright 2007-2009 Jiemamy Project and the Others. + * + * This file is part of Jiemamy. + * + * 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.jiemamy.entity.io.gen.model.impl; + +import javax.persistence.JoinColumn; + +import org.jiemamy.entity.io.gen.desc.AssociationDesc; +import org.jiemamy.entity.io.gen.desc.AssociationType; +import org.jiemamy.entity.io.gen.model.AssociationModel; +import org.jiemamy.entity.io.gen.model.AssociationModelFactory; +import org.jiemamy.entity.io.gen.model.JoinColumnModel; +import org.jiemamy.entity.io.gen.model.JoinColumnsModel; + +/** + * {@link AssociationModelFactory}の実装クラスです。 + * + * @author taedium + */ +public class AssociationModelFactoryImpl implements AssociationModelFactory { + + /** {@link JoinColumn}を表示する場合{@code true} */ + protected boolean showJoinColumn; + + + /** + * インスタンスを構築します。 + * + * @param showJoinColumn + * {@link JoinColumn}を表示する場合{@code true} + */ + public AssociationModelFactoryImpl(boolean showJoinColumn) { + this.showJoinColumn = showJoinColumn; + } + + /** + * 結合カラムモデルを処理します。 + * + * @param associationModel + * 関連モデル + * @param associationDesc + * 関連記述 + */ + protected void doJoinColumnModel(AssociationModel associationModel, AssociationDesc associationDesc) { + String propertyName = associationDesc.getName(); + String columnName = associationDesc.getColumnNameList().get(0); + String referencedColumnName = associationDesc.getReferencedColumnNameList().get(0); + if (showJoinColumn || !matchesDefaultMappingRule(propertyName, columnName, referencedColumnName)) { + JoinColumnModel joinColumnModel = new JoinColumnModel(); + joinColumnModel.setName(columnName); + joinColumnModel.setReferencedColumnName(referencedColumnName); + associationModel.setJoinColumnModel(joinColumnModel); + } + } + + /** + * 複合結合カラムモデルを処理します。 + * + * @param associationModel + * 関連モデル + * @param associationDesc + * 関連記述 + */ + protected void doJoinColumnsModel(AssociationModel associationModel, AssociationDesc associationDesc) { + JoinColumnsModel joinColumnsModel = new JoinColumnsModel(); + int i = 0; + for (String name : associationDesc.getColumnNameList()) { + String referencedColumnName = associationDesc.getReferencedColumnNameList().get(i); + JoinColumnModel joinColumnModel = new JoinColumnModel(); + joinColumnModel.setName(name); + joinColumnModel.setReferencedColumnName(referencedColumnName); + joinColumnsModel.addJoinColumnModel(joinColumnModel); + i++; + } + associationModel.setJoinColumnsModel(joinColumnsModel); + } + + public AssociationModel getAssociationModel(AssociationDesc associationDesc) { + AssociationModel model = new AssociationModel(); + model.setName(associationDesc.getName()); + if (associationDesc.getAssociationType() == AssociationType.ONE_TO_MANY) { + String entityName = associationDesc.getReferencedEntityDesc().getName(); + model.setShortClassName("List<" + entityName + ">"); + } else { + model.setShortClassName(associationDesc.getReferencedEntityDesc().getName()); + } + model.setAssociationType(associationDesc.getAssociationType()); + model.setMappedBy(associationDesc.getMappedBy()); + if (associationDesc.getColumnNameList().size() == 1) { + doJoinColumnModel(model, associationDesc); + } else if (associationDesc.getColumnNameList().size() > 1) { + doJoinColumnsModel(model, associationDesc); + } + return model; + } + + /** + * 結合カラムのデフォルトのマッピングルールに合致する場合{@code true}を返します。 + * + * @param propertyName + * プロパティ名 + * @param columnName + * 参照する側のカラム名 + * @param referencedColumnName + * 参照される側のカラム名 + * @return 結合カラムの命名規約に合致する場合{@code true} + */ + protected boolean matchesDefaultMappingRule(String propertyName, String columnName, String referencedColumnName) { + return columnName.equalsIgnoreCase(propertyName + "_" + referencedColumnName); + } + +} Property changes on: leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/model/impl/AssociationModelFactoryImpl.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/model/impl/AttributeModelFactoryImpl.java =================================================================== --- leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/model/impl/AttributeModelFactoryImpl.java (rev 0) +++ leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/model/impl/AttributeModelFactoryImpl.java 2009-04-14 07:24:54 UTC (rev 3268) @@ -0,0 +1,195 @@ +/* + * Copyright 2007-2009 Jiemamy Project and the Others. + * + * This file is part of Jiemamy. + * + * 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.jiemamy.entity.io.gen.model.impl; + +import java.math.BigDecimal; +import java.util.Calendar; +import java.util.Date; + +import javax.persistence.TemporalType; + +import org.jiemamy.entity.io.gen.desc.AttributeDesc; +import org.jiemamy.entity.io.gen.model.AttributeModel; +import org.jiemamy.entity.io.gen.model.AttributeModelFactory; +import org.jiemamy.utils.ClassUtil; +import org.jiemamy.utils.StringUtil; + +/** + * {@link AttributeModelFactory}の実装クラス。 + * + * @author j5ik2o + */ +public class AttributeModelFactoryImpl implements AttributeModelFactory { + + /** カラム名を表示する場合{@code true} */ + protected boolean showColumnName; + + /** カラム定義を表示する場合{@code true} */ + protected boolean showColumnDefinition; + + /** {@link TemporalType}を使用する場合{@code true} */ + protected boolean useTemporalType; + + + /** + * インスタンスを構築します。 + * + * @param showColumnName + * カラム名を表示する場合{@code true} + * @param showColumnDefinition + * カラム定義を表示する場合{@code true} + * @param useTemporalType + * {@link TemporalType}を使用する場合{@code true} + * @param persistenceConvention + * 永続化層の命名規約 + */ + public AttributeModelFactoryImpl(boolean showColumnName, boolean showColumnDefinition, boolean useTemporalType) { + this.showColumnName = showColumnName; + this.showColumnDefinition = showColumnDefinition; + this.useTemporalType = useTemporalType; + } + + /** + * 属性のクラスを処理します。 + * + * @param attributeModel 属性モデル + * @param attributeDesc 属性記述 + */ + protected void doAttributeClass(AttributeModel attributeModel, AttributeDesc attributeDesc) { + if (useTemporalType && attributeDesc.isTemporal()) { + attributeModel.setTemporalType(attributeDesc.getTemporalType()); + attributeModel.setAttributeClass(Date.class); + } else { + attributeModel.setAttributeClass(attributeDesc.getAttributeClass()); + } + } + + /** + * カラム定義を処理します。 + * + * @param attributeModel + * 属性モデル + * @param attributeDesc + * 属性記述 + */ + protected void doColumnDefinition(AttributeModel attributeModel, AttributeDesc attributeDesc) { + attributeModel.setColumnDefinition(attributeDesc.getColumnDefinition()); + attributeModel.setUnsupportedColumnType(attributeDesc.isUnsupportedColumnType()); + } + + /** + * カラム名を処理します。 + * + * @param attributeModel + * 属性モデル + * @param attributeDesc + * 属性記述 + */ + protected void doColumnName(AttributeModel attributeModel, AttributeDesc attributeDesc) { + String realColumnName = attributeDesc.getColumnName(); + String convertedColumnName = fromPropertyNameToColumnName(attributeModel.getName()); + if (showColumnName || !realColumnName.equalsIgnoreCase(convertedColumnName)) { + attributeModel.setColumnName(realColumnName); + } + } + + /** + * 長さを処理します。 + * + * @param attributeModel + * 属性モデル + * @param attributeDesc + * 属性記述 + */ + protected void doLength(AttributeModel attributeModel, AttributeDesc attributeDesc) { + if (attributeDesc.getLength() < 1) { + return; + } + Class<?> clazz = ClassUtil.getWrapperClassIfPrimitive(attributeDesc.getAttributeClass()); + if (!Number.class.isAssignableFrom(clazz) && !Date.class.isAssignableFrom(clazz) + && !Calendar.class.isAssignableFrom(clazz)) { + attributeModel.setLength(attributeDesc.getLength()); + } + } + + /** + * 精度を処理します。 + * + * @param attributeModel + * 属性モデル + * @param attributeDesc + * 属性記述 + */ + protected void doPrecision(AttributeModel attributeModel, AttributeDesc attributeDesc) { + if (attributeDesc.getPrecision() < 1) { + return; + } + Class<?> clazz = ClassUtil.getWrapperClassIfPrimitive(attributeDesc.getAttributeClass()); + if (Number.class.isAssignableFrom(clazz)) { + attributeModel.setPrecision(attributeDesc.getPrecision()); + } + } + + /** + * スケールを処理します。 + * + * @param attributeModel + * 属性モデル + * @param attributeDesc + * 属性記述 + */ + protected void doScale(AttributeModel attributeModel, AttributeDesc attributeDesc) { + if (attributeDesc.getScale() < 1) { + return; + } + Class<?> clazz = ClassUtil.getWrapperClassIfPrimitive(attributeDesc.getAttributeClass()); + if (clazz == BigDecimal.class || clazz == Float.class || clazz == Double.class) { + attributeModel.setScale(attributeDesc.getScale()); + } + } + + private String fromPropertyNameToColumnName(String name) { + return StringUtil.decamelize(name); + } + + public AttributeModel getAttributeModel(AttributeDesc attributeDesc) { + AttributeModel attributeModel = new AttributeModel(); + attributeModel.setName(attributeDesc.getName()); + attributeModel.setId(attributeDesc.isId()); + attributeModel.setGenerationType(attributeDesc.getGenerationType()); + attributeModel.setInitialValue(attributeDesc.getInitialValue()); + attributeModel.setAllocationSize(attributeDesc.getAllocationSize()); + attributeModel.setLob(attributeDesc.isLob()); + attributeModel.setTransient(attributeDesc.isTransient()); + attributeModel.setVersion(attributeDesc.isVersion()); + attributeModel.setNullable(attributeDesc.isNullable()); + attributeModel.setUnique(attributeDesc.isUnique()); + attributeModel.setColumnTypeName(attributeDesc.getColumnTypeName()); + attributeModel.setComment(attributeDesc.getComment()); + doAttributeClass(attributeModel, attributeDesc); + doColumnName(attributeModel, attributeDesc); + if (showColumnDefinition) { + doColumnDefinition(attributeModel, attributeDesc); + } else { + doLength(attributeModel, attributeDesc); + doPrecision(attributeModel, attributeDesc); + doScale(attributeModel, attributeDesc); + } + return attributeModel; + } +} Property changes on: leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/model/impl/AttributeModelFactoryImpl.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/model/impl/ClassModelSupport.java =================================================================== --- leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/model/impl/ClassModelSupport.java (rev 0) +++ leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/model/impl/ClassModelSupport.java 2009-04-14 07:24:54 UTC (rev 3268) @@ -0,0 +1,115 @@ +/* + * Copyright 2007-2009 Jiemamy Project and the Others. + * + * This file is part of Jiemamy. + * + * 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.jiemamy.entity.io.gen.model.impl; + +import org.jiemamy.entity.io.gen.model.ClassModel; +import org.jiemamy.utils.ClassUtil; + +/** + * {@link ClassModel}のサポートクラス。 + * + * @author j5ik2o + */ +public class ClassModelSupport { + + /** + * クラスモデルにインポート名を追加する。 + * + * @param classModel クラスモデル + * @param importClass インポート対象のクラス + */ + public void addImportName(ClassModel classModel, Class<?> importClass) { + String importedPackageName = ClassUtil.getPackageName(importClass); + if (isImportTargetPackage(classModel, importedPackageName)) { + classModel.addImportName(importClass.getName()); + } + } + + /** + * クラスモデルにインポート名を追加する。 + * + * @param classModel クラスモデル + * @param importClassName インポート対象のクラス名 + */ + public void addImportName(ClassModel classModel, String importClassName) { + String importedPackageName = ClassUtil.splitPackageAndShortClassName(importClassName)[0]; + if (isImportTargetPackage(classModel, importedPackageName)) { + classModel.addImportName(importClassName); + } + } + + /** + * クラスモデルにstaticインポート名を追加する。 + * + * @param classModel クラスモデル + * @param importClass インポート対象のクラス + */ + public void addStaticImportName(ClassModel classModel, Class<?> importClass) { + String importedPackageName = ClassUtil.getPackageName(importClass); + if (isStaticImportTargetPackage(classModel, importedPackageName)) { + classModel.addStaticImportName(importClass.getName() + ".*"); + } + } + + /** + * クラスモデルにstaticインポート名を追加する。 + * + * @param classModel クラスモデル + * @param importClassName インポート対象のクラス名 + */ + public void addStaticImportName(ClassModel classModel, String importClassName) { + String importedPackageName = ClassUtil.splitPackageAndShortClassName(importClassName)[0]; + if (isStaticImportTargetPackage(classModel, importedPackageName)) { + classModel.addStaticImportName(importClassName + ".*"); + } + } + + /** + * インポートが必要なパッケージの場合{@code true}を取得する。 + * + * @param classModel クラスモデル + * @param importPackageName インポートするパッケージ名 + * @return インポートが必要なパッケージの場合{@code true} + */ + protected boolean isImportTargetPackage(ClassModel classModel, String importPackageName) { + if (importPackageName == null) { + return false; + } + if (importPackageName.equals(classModel.getPackageName())) { + return false; + } + if (importPackageName.equals("java.lang")) { + return false; + } + return true; + } + + /** + * staticインポートが必要なパッケージの場合{@code true}を返します。 + * + * @param classModel クラスモデル + * @param importPackageName インポートするパッケージ名 + * @return インポートが必要なパッケージの場合{@code true} + */ + protected boolean isStaticImportTargetPackage(ClassModel classModel, String importPackageName) { + if (importPackageName == null) { + return false; + } + return true; + } +} Property changes on: leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/model/impl/ClassModelSupport.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/model/impl/CompositeUniqueConstraintModelFactoryImpl.java =================================================================== --- leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/model/impl/CompositeUniqueConstraintModelFactoryImpl.java (rev 0) +++ leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/model/impl/CompositeUniqueConstraintModelFactoryImpl.java 2009-04-14 07:24:54 UTC (rev 3268) @@ -0,0 +1,39 @@ +/* + * Copyright 2007-2009 Jiemamy Project and the Others. + * + * This file is part of Jiemamy. + * + * 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.jiemamy.entity.io.gen.model.impl; + +import org.jiemamy.entity.io.gen.desc.CompositeUniqueConstraintDesc; +import org.jiemamy.entity.io.gen.model.CompositeUniqueConstraintModel; +import org.jiemamy.entity.io.gen.model.CompositeUniqueConstraintModelFactory; + +/** + * {@link CompositeUniqueConstraintModelFactory}の実装クラス。 + * + * @author j5ik2o + */ +public class CompositeUniqueConstraintModelFactoryImpl implements CompositeUniqueConstraintModelFactory { + + public CompositeUniqueConstraintModel getUniqueConstraintModel( + CompositeUniqueConstraintDesc compositeUniqueConstraintDesc) { + CompositeUniqueConstraintModel compositeUniqueConstraintModel = new CompositeUniqueConstraintModel(); + for (String columnName : compositeUniqueConstraintDesc.getColumnNameList()) { + compositeUniqueConstraintModel.addColumnName(columnName); + } + return compositeUniqueConstraintModel; + } +} Property changes on: leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/model/impl/CompositeUniqueConstraintModelFactoryImpl.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/model/impl/EntityModelFactoryImpl.java =================================================================== --- leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/model/impl/EntityModelFactoryImpl.java (rev 0) +++ leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/model/impl/EntityModelFactoryImpl.java 2009-04-14 07:24:54 UTC (rev 3268) @@ -0,0 +1,315 @@ +/* + * Copyright 2007-2009 Jiemamy Project and the Others. + * + * This file is part of Jiemamy. + * + * 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.jiemamy.entity.io.gen.model.impl; + +import java.io.Serializable; +import java.util.List; + +import javax.annotation.Generated; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.JoinColumns; +import javax.persistence.Lob; +import javax.persistence.SequenceGenerator; +import javax.persistence.Table; +import javax.persistence.TableGenerator; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; +import javax.persistence.Transient; +import javax.persistence.UniqueConstraint; +import javax.persistence.Version; + +import org.jiemamy.entity.io.gen.desc.AssociationDesc; +import org.jiemamy.entity.io.gen.desc.AssociationType; +import org.jiemamy.entity.io.gen.desc.AttributeDesc; +import org.jiemamy.entity.io.gen.desc.CompositeUniqueConstraintDesc; +import org.jiemamy.entity.io.gen.desc.EntityDesc; +import org.jiemamy.entity.io.gen.model.AssociationModel; +import org.jiemamy.entity.io.gen.model.AssociationModelFactory; +import org.jiemamy.entity.io.gen.model.AttributeModel; +import org.jiemamy.entity.io.gen.model.AttributeModelFactory; +import org.jiemamy.entity.io.gen.model.CompositeUniqueConstraintModel; +import org.jiemamy.entity.io.gen.model.CompositeUniqueConstraintModelFactory; +import org.jiemamy.entity.io.gen.model.EntityModel; +import org.jiemamy.entity.io.gen.model.EntityModelFactory; +import org.jiemamy.utils.ClassUtil; + +/** + * {@link EntityModelFactory}の実装クラスです。 + * + * @author taedium + */ +public class EntityModelFactoryImpl implements EntityModelFactory { + + /** パッケージ名、デフォルトパッケージの場合は{@code null} */ + protected String packageName; + + /** 属性モデルのファクトリ */ + protected AttributeModelFactory attributeModelFactory; + + /** 関連モデルのファクトリ */ + protected AssociationModelFactory associationModelFactory; + + /** 複合一意制約モデルのファクトリ */ + protected CompositeUniqueConstraintModelFactory compositeUniqueConstraintModelFactory; + + /** エンティティクラスでアクセサを使用する場合 {@code true} */ + protected boolean useAccessor; + + /** コメントを使用する場合{@code true} */ + protected boolean useComment; + + /** カタログ名を表示する場合{@code true} */ + protected boolean showCatalogName; + + /** スキーマ名を表示する場合{@code true} */ + protected boolean showSchemaName; + + /** テーブル名を表示する場合{@code true} */ + protected boolean showTableName; + + /** エンティティのスーパークラス、スーパークラスを持たない場合は{@code null} */ + protected Class<?> superclass; + + /** + * {@link #superclass}が{@link MappedSuperclass}である場合そのクラスのBean記述、そうでない場合 + * {@code null} + */ + //protected BeanDesc mappedSuperclassBeanDesc; + /** クラスモデルのサポート */ + protected ClassModelSupport classModelSupport = new ClassModelSupport(); + + /** 生成モデルのサポート */ + protected GeneratedModelSupport generatedModelSupport = new GeneratedModelSupport(); + + + /** + * インスタンスを構築しますl + * + * @param packageName + * パッケージ名、デフォルトパッケージの場合は{@code null} + * @param superclass + * エンティティのスーパークラス、スーパークラスを持たない場合は{@code null} + * @param attributeModelFactory + * 属性モデルのファクトリ + * @param associationModelFactory + * 関連モデルのファクトリ + * @param compositeUniqueConstraintModelFactory + * 複合一意制約モデルのファクトリ + * @param useAccessor + * エンティティクラスでアクセサを使用する場合 {@code true} + * @param useComment + * コメントを使用する場合{@code true} + * @param showCatalogName + * カタログ名を表示する場合{@code true} + * @param showSchemaName + * スキーマ名を表示する場合{@code true} + * @param showTableName + * テーブル名を表示する場合{@code true} + */ + public EntityModelFactoryImpl(String packageName, Class<?> superclass, AttributeModelFactory attributeModelFactory, + AssociationModelFactory associationModelFactory, + CompositeUniqueConstraintModelFactory compositeUniqueConstraintModelFactory, boolean useAccessor, + boolean useComment, boolean showCatalogName, boolean showSchemaName, boolean showTableName) { + if (attributeModelFactory == null) { + throw new NullPointerException("attributeModelFactory"); + } + if (associationModelFactory == null) { + throw new NullPointerException("associationModelFactory"); + } + if (compositeUniqueConstraintModelFactory == null) { + throw new NullPointerException("compositeUniqueConstraintModelFactory"); + } + this.packageName = packageName; + this.superclass = superclass; + this.attributeModelFactory = attributeModelFactory; + this.associationModelFactory = associationModelFactory; + this.compositeUniqueConstraintModelFactory = compositeUniqueConstraintModelFactory; + this.useAccessor = useAccessor; + this.useComment = useComment; + this.showCatalogName = showCatalogName; + this.showSchemaName = showSchemaName; + this.showTableName = showTableName; +// if (superclass != null) { +// if (superclass.isAnnotationPresent(MappedSuperclass.class)) { +// mappedSuperclassBeanDesc = BeanDescFactory.getBeanDesc(superclass); +// } +// } + } + + /** + * 関連モデルを処理します。 + * + * @param entityModel エンティティモデル + * @param entityDesc エンティティ記述 + */ + protected void doAssociationModel(EntityModel entityModel, EntityDesc entityDesc) { + for (AssociationDesc associationDesc : entityDesc.getAssociationDescList()) { + if (superclass != null && ClassUtil.getFieldNoException(superclass, associationDesc.getName()) != null) { + continue; + } + AssociationModel associationModel = associationModelFactory.getAssociationModel(associationDesc); + entityModel.addAssociationModel(associationModel); + } + } + + /** + * 属性モデルを処理します。 + * + * @param entityModel + * エンティティモデル + * @param entityDesc + * エンティティ記述 + */ + protected void doAttributeModel(EntityModel entityModel, EntityDesc entityDesc) { + for (AttributeDesc attributeDesc : entityDesc.getAttributeDescList()) { + if (superclass != null && ClassUtil.getFieldNoException(superclass, attributeDesc.getName()) != null) { + continue; + } + AttributeModel attributeModel = attributeModelFactory.getAttributeModel(attributeDesc); + entityModel.addAttributeModel(attributeModel); + } + } + + /** + * 複合一意制約モデルを処理します。 + * + * @param entityModel + * エンティティモデル + * @param entityDesc + * エンティティ記述 + */ + protected void doCompositeUniqueConstraintModel(EntityModel entityModel, EntityDesc entityDesc) { + for (CompositeUniqueConstraintDesc compositeUniqueConstraintDesc : entityDesc + .getCompositeUniqueConstraintDescList()) { + CompositeUniqueConstraintModel compositeUniqueConstraintModel = + compositeUniqueConstraintModelFactory.getUniqueConstraintModel(compositeUniqueConstraintDesc); + entityModel.addCompositeUniqueConstraintModel(compositeUniqueConstraintModel); + } + } + + /** + * 生成情報を処理します。 + * + * @param entityModel + * エンティティモデル + * @param entityDesc + * エンティティ記述 + */ + protected void doGeneratedInfo(EntityModel entityModel, EntityDesc entityDesc) { + generatedModelSupport.fillGeneratedInfo(this, entityModel); + } + + /** + * インポート名を処理します。 + * + * @param model エンティティクラスのモデル + * @param entityDesc エンティティ記述 + */ + protected void doImportName(EntityModel model, EntityDesc entityDesc) { + classModelSupport.addImportName(model, Entity.class); + classModelSupport.addImportName(model, Serializable.class); + classModelSupport.addImportName(model, Generated.class); + if (model.getCatalogName() != null || model.getSchemaName() != null || model.getTableName() != null) { + classModelSupport.addImportName(model, Table.class); + } + if (superclass != null) { + classModelSupport.addImportName(model, superclass); + } + for (AttributeModel attr : model.getAttributeModelList()) { + if (attr.isId()) { + classModelSupport.addImportName(model, Id.class); + if (attr.getGenerationType() != null) { + classModelSupport.addImportName(model, GeneratedValue.class); + classModelSupport.addImportName(model, GenerationType.class); + if (attr.getGenerationType() == GenerationType.SEQUENCE) { + classModelSupport.addImportName(model, SequenceGenerator.class); + } else if (attr.getGenerationType() == GenerationType.TABLE) { + classModelSupport.addImportName(model, TableGenerator.class); + } + } + } + if (attr.isLob()) { + classModelSupport.addImportName(model, Lob.class); + } + if (attr.getTemporalType() != null) { + classModelSupport.addImportName(model, Temporal.class); + classModelSupport.addImportName(model, TemporalType.class); + } + if (attr.isTransient()) { + classModelSupport.addImportName(model, Transient.class); + } else { + classModelSupport.addImportName(model, Column.class); + } + if (attr.isVersion()) { + classModelSupport.addImportName(model, Version.class); + } + classModelSupport.addImportName(model, attr.getAttributeClass()); + } + for (AssociationModel asso : model.getAssociationModelList()) { + AssociationType associationType = asso.getAssociationType(); + if (associationType == AssociationType.ONE_TO_MANY) { + classModelSupport.addImportName(model, List.class); + } + classModelSupport.addImportName(model, associationType.getAnnotation()); + if (asso.getJoinColumnModel() != null) { + classModelSupport.addImportName(model, JoinColumn.class); + } + if (asso.getJoinColumnsModel() != null) { + classModelSupport.addImportName(model, JoinColumn.class); + classModelSupport.addImportName(model, JoinColumns.class); + } + } + if (!model.getCompositeUniqueConstraintModelList().isEmpty()) { + classModelSupport.addImportName(model, Table.class); + classModelSupport.addImportName(model, UniqueConstraint.class); + } + } + + public EntityModel getEntityModel(EntityDesc entityDesc) { + EntityModel entityModel = new EntityModel(); + if (showCatalogName) { + entityModel.setCatalogName(entityDesc.getCatalogName()); + } + if (showSchemaName) { + entityModel.setSchemaName(entityDesc.getSchemaName()); + } + if (showTableName) { + entityModel.setTableName(entityDesc.getTableName()); + } + entityModel.setPackageName(packageName); + entityModel.setShortClassName(entityDesc.getName()); + if (superclass != null) { + entityModel.setShortSuperclassName(superclass.getSimpleName()); + } + entityModel.setCompositeId(entityDesc.hasCompositeId()); + entityModel.setUseAccessor(useAccessor); + entityModel.setComment(entityDesc.getComment()); + entityModel.setUseComment(useComment); + doAttributeModel(entityModel, entityDesc); + doAssociationModel(entityModel, entityDesc); + doCompositeUniqueConstraintModel(entityModel, entityDesc); + doImportName(entityModel, entityDesc); + doGeneratedInfo(entityModel, entityDesc); + return entityModel; + } +} Property changes on: leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/model/impl/EntityModelFactoryImpl.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/model/impl/GeneratedModelSupport.java =================================================================== --- leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/model/impl/GeneratedModelSupport.java (rev 0) +++ leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/model/impl/GeneratedModelSupport.java 2009-04-14 07:24:54 UTC (rev 3268) @@ -0,0 +1,42 @@ +/* + * Copyright 2007-2009 Jiemamy Project and the Others. + * + * This file is part of Jiemamy. + * + * 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.jiemamy.entity.io.gen.model.impl; + +import org.jiemamy.entity.io.ProductInfo; +import org.jiemamy.entity.io.gen.model.GeneratedModel; + +/** + * {@link GeneratedModel}のサポートクラス。 + * + * @author j5ik2o + */ +public class GeneratedModelSupport { + + /** + * 生成情報を設定する。 + * + * @param modelFactory モデルを作成したファクトリ + * @param model 生成されるモデル + */ + public void fillGeneratedInfo(Object modelFactory, GeneratedModel model) { + ProductInfo productInfo = ProductInfo.getInstance(); + model.addGeneratedInfo(productInfo.getName() + " " + productInfo.getVersion()); + model.addGeneratedInfo(modelFactory.getClass().getName()); + } + +} Property changes on: leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/gen/model/impl/GeneratedModelSupport.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/meta/DefaultEntityMetaWriterContext.java =================================================================== --- leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/meta/DefaultEntityMetaWriterContext.java (rev 0) +++ leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/meta/DefaultEntityMetaWriterContext.java 2009-04-14 07:24:54 UTC (rev 3268) @@ -0,0 +1,373 @@ +/* + * Copyright 2007-2009 Jiemamy Project and the Others. + * Created on Apr 14, 2009 + * + * This file is part of Jiemamy. + * + * 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.jiemamy.entity.io.meta; + +import java.io.File; +import java.util.regex.Pattern; + +import javax.persistence.GenerationType; + +/** + * TODO for kato + * + * @author kato + */ +public class DefaultEntityMetaWriterContext implements EntityMetaWriterContext { + + private Integer allocationSize; + + private GenerationType idGenerationType; + + private Integer initialValue; + + private File javaSrcFileDestDir; + + private String entityPackageName; + + private String javaSrcFileEncoding; + + private boolean overwrite; + + private String rootPackageName; + + private boolean applyDbCommentToJava; + + private boolean useTemporalType; + + private boolean useAccessor; + + private boolean showTableName; + + private String schemaName; + + private Pattern tableNamePattern; + + private String templateFileEncoding; + + private File templateFilePrimaryDir; + + private String templateName; + + private Pattern versionColumnNamePattern; + + private boolean showCatalogName; + + private boolean showColumnDefinition; + + private Pattern ignoreTableNamePattern; + + private boolean showColumnName; + + private boolean showJoinColumn; + + private boolean showSchemaName; + + private Class<?> entitySuperClass; + + + public Integer getAllocationSize() { + return allocationSize; + } + + public String getEntityPackageName() { + return entityPackageName; + } + + public Class<?> getEntitySuperClass() { + return entitySuperClass; + } + + public GenerationType getIdGenerationType() { + return idGenerationType; + } + + public Pattern getIgnoreTableNamePattern() { + return ignoreTableNamePattern; + } + + public Integer getInitialValue() { + return initialValue; + } + + public File getJavaSrcFileDestDir() { + return javaSrcFileDestDir; + } + + public String getJavaSrcFileEncoding() { + return javaSrcFileEncoding; + } + + public String getRootPackageName() { + return rootPackageName; + } + + public String getSchemaName() { + return schemaName; + } + + public Pattern getTableNamePattern() { + return tableNamePattern; + } + + public String getTemplateFileEncoding() { + return templateFileEncoding; + } + + public File getTemplateFilePrimaryDir() { + return templateFilePrimaryDir; + } + + public String getTemplateName() { + return templateName; + } + + public Pattern getVersionColumnNamePattern() { + return versionColumnNamePattern; + } + + public boolean isApplyDbCommentToJava() { + return applyDbCommentToJava; + } + + public boolean isOverwrite() { + return overwrite; + } + + public boolean isShowCatalogName() { + return showCatalogName; + } + + public boolean isShowColumnDefinition() { + return showColumnDefinition; + } + + public boolean isShowColumnName() { + return showColumnName; + } + + public boolean isShowJoinColumn() { + return showJoinColumn; + } + + public boolean isShowSchemaName() { + return showSchemaName; + } + + public boolean isShowTableName() { + return showTableName; + } + + public boolean isUseAccessor() { + return useAccessor; + } + + public boolean isUseTemporalType() { + return useTemporalType; + } + + /** + * TODO for kato + * + * @param allocationSize + */ + public void setAllocationSize(Integer allocationSize) { + this.allocationSize = allocationSize; + } + + /** + * TODO for kato + * + * @param applyDbCommentToJava + */ + public void setApplyDbCommentToJava(boolean applyDbCommentToJava) { + this.applyDbCommentToJava = applyDbCommentToJava; + } + + /** + * TODO for kato + * + * @param entityPackageName + */ + public void setEntityPackageName(String entityPackageName) { + this.entityPackageName = entityPackageName; + } + + /** + * TODO for kato + * + * @param idGenerationType + */ + public void setIdGenerationType(GenerationType idGenerationType) { + this.idGenerationType = idGenerationType; + } + + /** + * TODO for kato + * + * @param ignoreTableNamePattern + */ + public void setIgnoreTableNamePattern(Pattern ignoreTableNamePattern) { + this.ignoreTableNamePattern = ignoreTableNamePattern; + } + + /** + * TODO for kato + * + * @param initialValue + */ + public void setInitialValue(Integer initialValue) { + this.initialValue = initialValue; + } + + /** + * TODO for kato + * + * @param javaSrcFileDestDir + */ + public void setJavaSrcFileDestDir(File javaSrcFileDestDir) { + this.javaSrcFileDestDir = javaSrcFileDestDir; + } + + /** + * TODO for kato + * + * @param javaSrcFileEncoding + */ + public void setJavaSrcFileEncoding(String javaSrcFileEncoding) { + this.javaSrcFileEncoding = javaSrcFileEncoding; + } + + /** + * TODO for kato + * + * @param overwrite + */ + public void setOverwrite(boolean overwrite) { + this.overwrite = overwrite; + } + + /** + * TODO for kato + * + * @param rootPackageName + */ + public void setRootPackageName(String rootPackageName) { + this.rootPackageName = rootPackageName; + } + + /** + * TODO for kato + * + * @param schemaName + */ + public void setSchemaName(String schemaName) { + this.schemaName = schemaName; + } + + /** + * TODO for kato + * + * @param showCatalogName + */ + public void setShowCatalogName(boolean showCatalogName) { + this.showCatalogName = showCatalogName; + } + + /** + * TODO for kato + * + * @param showColumnDefinition + */ + public void setShowColumnDefinition(boolean showColumnDefinition) { + this.showColumnDefinition = showColumnDefinition; + } + + /** + * TODO for kato + * + * @param showTableName + */ + public void setShowTableName(boolean showTableName) { + this.showTableName = showTableName; + } + + /** + * TODO for kato + * + * @param tableNamePattern + */ + public void setTableNamePattern(Pattern tableNamePattern) { + this.tableNamePattern = tableNamePattern; + } + + /** + * TODO for kato + * + * @param templateFileEncoding + */ + public void setTemplateFileEncoding(String templateFileEncoding) { + this.templateFileEncoding = templateFileEncoding; + } + + /** + * TODO for kato + * + * @param templateFilePrimaryDir + */ + public void setTemplateFilePrimaryDir(File templateFilePrimaryDir) { + this.templateFilePrimaryDir = templateFilePrimaryDir; + } + + /** + * TODO for kato + * + * @param templateName + */ + public void setTemplateName(String templateName) { + this.templateName = templateName; + } + + /** + * TODO for kato + * + * @param useAccessor + */ + public void setUseAccessor(boolean useAccessor) { + this.useAccessor = useAccessor; + } + + /** + * TODO for kato + * + * @param useTemporalType + */ + public void setUseTemporalType(boolean useTemporalType) { + this.useTemporalType = useTemporalType; + } + + /** + * TODO for kato + * + * @param versionColumnNamePattern + */ + public void setVersionColumnNamePattern(Pattern versionColumnNamePattern) { + this.versionColumnNamePattern = versionColumnNamePattern; + } + +} Property changes on: leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/meta/DefaultEntityMetaWriterContext.java ___________________________________________________________________ Added: svn:mime-type + text/plain Copied: leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/meta/DefaultEntityMetaWriterFactory.java (from rev 3251, leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/meta/impl/EntityMetaWriterFactoryImpl.java) =================================================================== --- leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/meta/DefaultEntityMetaWriterFactory.java (rev 0) +++ leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/meta/DefaultEntityMetaWriterFactory.java 2009-04-14 07:24:54 UTC (rev 3268) @@ -0,0 +1,37 @@ +/* + * Copyright 2007-2009 Jiemamy Project and the Others. + * Created on Apr 13, 2009 + * + * This file is part of Jiemamy. + * + * 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.jiemamy.entity.io.meta; + +import org.apache.commons.lang.Validate; + +import org.jiemamy.entity.io.meta.impl.EntityMetaWriterImpl; + +/** + * {@link EntityMetaWriterFactory}の実装クラス。 + * + * @author j5ik2o + */ +public class DefaultEntityMetaWriterFactory implements EntityMetaWriterFactory { + + public EntityMetaWriter createEntityMetaWriter(EntityMetaWriterContext entityMetaWriterContext) { + Validate.notNull(entityMetaWriterContext); + return new EntityMetaWriterImpl(entityMetaWriterContext); + } + +} Property changes on: leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/meta/DefaultEntityMetaWriterFactory.java ___________________________________________________________________ Added: svn:mime-type + text/plain Modified: leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/meta/EntityMetaWriterContext.java =================================================================== --- leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/meta/EntityMetaWriterContext.java 2009-04-14 00:12:41 UTC (rev 3267) +++ leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/meta/EntityMetaWriterContext.java 2009-04-14 07:24:54 UTC (rev 3268) @@ -18,6 +18,11 @@ */ package org.jiemamy.entity.io.meta; +import java.io.File; +import java.util.regex.Pattern; + +import javax.persistence.GenerationType; + /** * {@link EntityMetaWriter}のコンテキストインターフェイス。 * @@ -26,24 +31,178 @@ public interface EntityMetaWriterContext { /** + * 識別子の割り当てサイズを取得する。 + * + * @return 識別子の割り当てサイズ + */ + Integer getAllocationSize(); + + /** + * エンティティクラスのパッケージ名を取得する。 + * + * @return エンティティクラス + */ + String getEntityPackageName(); + + /** + * エンティティクラスのスーパークラスを取得する。 + * + * @return エンティティクラス + */ + Class<?> getEntitySuperClass(); + + /** + * 識別子を生成する方法を取得する。 + * + * @return {@link GenerationType} + */ + GenerationType getIdGenerationType(); + + /** + * 対象としないテーブル名の正規表現を取得する。 + * + * @return {@link Pattern} + */ + Pattern getIgnoreTableNamePattern(); + + /** + * 識別子の初期値を取得する。 + * + * @return 識別子の初期値 + */ + Integer getInitialValue(); + + /** + * Javaソースファイルの出力先ディレクトリを取得する。 + * + * @return Javaソースファイルの出力先ディレクトリ + */ + File getJavaSrcFileDestDir(); + + /** * Javaファイルのエンコーディングを取得する。 * * @return Javaファイルのエンコーディング */ - String getJavaFileEncoding(); + String getJavaSrcFileEncoding(); /** - * 上書きフラグを取得する。 + * ルートパッケージ名を取得する。 * - * @return 上書きする場合は{@code true}、しない場合は{@code false} + * @return パッケージ名 */ - boolean getOverwrite(); + String getRootPackageName(); /** + * スキーマ名を取得する。 + * + * @return スキーマ名 + */ + String getSchemaName(); + + /** + * 対象とするテーブル名の正規表現を取得する。 + * + * @return {@link Pattern} + */ + Pattern getTableNamePattern(); + + /** + * テンプレートファイルのエンコーディングを取得する。 + * + * @return テンプレートファイルのエンコーディング + */ + String getTemplateFileEncoding(); + + /** + * テンプレートファイルを検索する際の優先ディレクトリを取得する。 + * + * @return テンプレートファイルを検索する際の優先ディレクトリ + */ + File getTemplateFilePrimaryDir(); + + /** * テンプレート名を取得する。 * * @return テンプレート名 */ String getTemplateName(); + /** + * エンティティのプロパティに@Versionを付与するカラム名の正規表現を取得する。 + * + * @return {@link Pattern} + */ + Pattern getVersionColumnNamePattern(); + + /** + * DB上のコメントをエンティティに適用するかどうかのフラグを取得する。 + * + * @return trueの場合適用する + */ + boolean isApplyDbCommentToJava(); + + /** + * 上書きフラグを取得する。 + * + * @return 上書きする場合は{@code true}、しない場合は{@code false} + */ + boolean isOverwrite(); + + /** + * Tableアノテーションのcatalog属性にカタログ名を明記するかどうかのフラグを取得する。 + * + * @return trueの場合明記する + */ + boolean isShowCatalogName(); + + /** + * ColumnアノテーションのcolumnDefinition属性にカラム定義を明記するかどうかのフラグを取得する。 + * + * @return trueの場合明記する + */ + boolean isShowColumnDefinition(); + + /** + * Columnアノテーションのname属性にカラム名を明記するかどうかのフラグを取得する。 + * + * @return trueの場合明記する + */ + boolean isShowColumnName(); + + /** + * JoinColumnアノテーションを明記するかどうかのフラグを取得する。 + * + * @return trueの場合明記する + */ + boolean isShowJoinColumn(); + + /** + * Tableアノテーションのschema属性にスキーマ名を明記するかどうかのフラグを取得する。 + * + * @return trueの場合明記する + */ + boolean isShowSchemaName(); + + /** + * Tableアノテーションのname属性にテーブル名を明記するかどうかのフラグを取得する。 + * + * @return trueの場合明記する + */ + boolean isShowTableName(); + + /** + * 生成するエンティティのアクセサメソッドを付与するかどうかのフラグを取得する。 + * + * @return trueの場合 + */ + boolean isUseAccessor(); + + /** + * 日付型カラムに対応するプロパティの型を@Temporalつきのjava.util.Dateとする。 + * + * @return trueの場合@Temporalつきのjava.util.Dateにする。 + */ + boolean isUseTemporalType(); + } Deleted: leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/meta/impl/EntityMetaWriterFactoryImpl.java =================================================================== --- leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/meta/impl/EntityMetaWriterFactoryImpl.java 2009-04-14 00:12:41 UTC (rev 3267) +++ leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/meta/impl/EntityMetaWriterFactoryImpl.java 2009-04-14 07:24:54 UTC (rev 3268) @@ -1,39 +0,0 @@ -/* - * Copyright 2007-2009 Jiemamy Project and the Others. - * Created on Apr 13, 2009 - * - * This file is part of Jiemamy. - * - * 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.jiemamy.entity.io.meta.impl; - -import org.apache.commons.lang.Validate; - -import org.jiemamy.entity.io.meta.EntityMetaWriter; -import org.jiemamy.entity.io.meta.EntityMetaWriterContext; -import org.jiemamy.entity.io.meta.EntityMetaWriterFactory; - -/** - * {@link EntityMetaWriterFactory}の実装クラス。 - * - * @author j5ik2o - */ -public class EntityMetaWriterFactoryImpl implements EntityMetaWriterFactory { - - public EntityMetaWriter createEntityMetaWriter(EntityMetaWriterContext entityMetaWriterContext) { - Validate.notNull(entityMetaWriterContext); - return new EntityMetaWriterImpl(entityMetaWriterContext); - } - -} Modified: leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/meta/impl/EntityMetaWriterImpl.java =================================================================== --- leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/meta/impl/EntityMetaWriterImpl.java 2009-04-14 00:12:41 UTC (rev 3267) +++ leto/jiemamy-entity-io/trunk/src/main/java/org/jiemamy/entity/io/meta/impl/EntityMetaWriterImpl.java 2009-04-14 07:24:54 UTC (rev 3268) @@ -18,19 +18,37 @@ */ package org.jiemamy.entity.io.meta.impl; +import java.io.File; import java.io.IOException; import java.util.List; import org.apache.commons.lang.Validate; +import org.jiemamy.entity.io.gen.desc.AttributeDescFactory; +import org.jiemamy.entity.io.gen.desc.CompositeUniqueConstraintDescFactory; +import org.jiemamy.entity.io.gen.desc.EntityDesc; +import org.jiemamy.entity.io.gen.desc.EntityDescFactory; +import org.jiemamy.entity.io.gen.desc.impl.AttributeDescFactoryImpl; +import org.jiemamy.entity.io.gen.desc.impl.CompositeUniqueConstraintDescFactoryImpl; +import org.jiemamy.entity.io.gen.desc.impl.EntityDescFactoryImpl; +import org.jiemamy.entity.io.gen.generator.GenerateException; import org.jiemamy.entity.io.gen.generator.Generator; +import org.jiemamy.entity.io.gen.generator.impl.GeneratorContextImpl; import org.jiemamy.entity.io.gen.generator.impl.GeneratorImpl; -import org.jiemamy.entity.io.gen.generator.impl.GeneratorContextImpl; import org.jiemamy.entity.io.gen.meta.DbTableMeta; +import org.jiemamy.entity.io.gen.model.AssociationModelFactory; +import org.jiemamy.entity.io.gen.model.AttributeModelFactory; +import org.jiemamy.entity.io.gen.model.CompositeUniqueConstraintModelFactory; import org.jiemamy.entity.io.gen.model.EntityModel; -import org.jiemamy.entity.io.meta.EntityMeta; +import org.jiemamy.entity.io.gen.model.EntityModelFactory; +import org.jiemamy.entity.io.gen.model.impl.AssociationModelFactoryImpl; +import org.jiemamy.entity.io.gen.model.impl.AttributeModelFactoryImpl; +import org.jiemamy.entity.io.gen.model.impl.CompositeUniqueConstraintModelFactoryImpl; +import org.jiemamy.entity.io.gen.model.impl.EntityModelFactoryImpl; import org.jiemamy.entity.io.meta.EntityMetaWriter; import org.jiemamy.entity.io.meta.EntityMetaWriterContext; +import org.jiemamy.utils.ClassUtil; +import org.jiemamy.utils.StringUtil; /** * EntityMetaWriterContextの実装クラス。 @@ -43,6 +61,10 @@ private EntityMetaWriterContext entityMetaWriterContext; + EntityModelFactory entityModelFactory; + + EntityDescFactory entityDescFactory; + /** * インスタンスを生成する。 @@ -51,38 +73,57 @@ */ public EntityMetaWriterImpl(EntityMetaWriterContext entityMetaWriterContext) { Validate.notNull(entityMetaWriterContext); - Validate.notNull(entityMetaWriterContext.getJavaFileEncoding()); + Validate.notNull(entityMetaWriterContext.getJavaSrcFileEncoding()); Validate.notNull(entityMetaWriterContext.getTemplateName()); this.entityMetaWriterContext = entityMetaWriterContext; + AttributeDescFactory attributeDescFactory = + new AttributeDescFactoryImpl(entityMetaWriterContext.getVersionColumnNamePattern(), + entityMetaWriterContext.getIdGenerationType(), entityMetaWriterContext.getInitialValue(), + entityMetaWriterContext.getAllocationSize()); + CompositeUniqueConstraintDescFactory compositeUniqueConstraintDescFactory = + new CompositeUniqueConstraintDescFactoryImpl(); + entityDescFactory = new EntityDescFactoryImpl(attributeDescFactory, compositeUniqueConstraintDescFactory); + AttributeModelFactory attributeModelFactory = + new AttributeModelFactoryImpl(entityMetaWriterContext.isShowColumnName(), entityMetaWriterContext + .isShowColumnDefinition(), entityMetaWriterContext.isUseTemporalType()); + AssociationModelFactory associationModelFactory = + new AssociationModelFactoryImpl(entityMetaWriterContext.isShowJoinColumn()); + CompositeUniqueConstraintModelFactory compositeUniqueConstraintModelFactory = + new CompositeUniqueConstraintModelFactoryImpl(); + entityModelFactory = + new EntityModelFactoryImpl(ClassUtil.concatName(entityMetaWriterContext.getRootPackageName(), + entityMetaWriterContext.getEntityPackageName()), entityMetaWriterContext.getEntitySuperClass(), + attributeModelFactory, associationModelFactory, compositeUniqueConstraintModelFactory, + entityMetaWriterContext.isUseAccessor(), entityMetaWriterContext.isApplyDbCommentToJava(), + entityMetaWriterContext.isShowCatalogName(), entityMetaWriterContext.isShowSchemaName(), + entityMetaWriterContext.isShowTableName()); } - private EntityModel convertModel(EntityMeta entityMeta) { - EntityModel entityModel = new EntityModel(); - entityModel.setTableName(entityMeta.getTableMeta().getName()); - entityModel.setCatalogName(entityMeta.getTableMeta().getCatalog()); - entityModel.setSchemaName(entityMeta.getTableMeta().getSchema()); - entityModel.setPackageName(entityMeta.getEntityClass().getPackage().getName()); - entityModel.setShortClassName(entityMeta.getEntityClass().getSimpleName()); - return null; + private EntityModel convertModel(DbTableMeta dbTableMeta) { + EntityDesc entityDesc = entityDescFactory.getEntityDesc(dbTableMeta); + EntityModel result = entityModelFactory.getEntityModel(entityDesc); + return result; } public void write(List<DbTableMeta> tableMetaList) throws IOException { Validate.notNull(tableMetaList); - generator = new GeneratorImpl("UTF-8", null); + generator = + new GeneratorImpl(entityMetaWriterContext.getTemplateFileEncoding(), entityMetaWriterContext + .getTemplateFilePrimaryDir()); GeneratorContextImpl context = new GeneratorContextImpl(); - context.setEncoding(entityMetaWriterContext.getJavaFileEncoding()); - context.setOverwrite(entityMetaWriterContext.getOverwrite()); + context.setEncoding(entityMetaWriterContext.getJavaSrcFileEncoding()); + context.setOverwrite(entityMetaWriterContext.isOverwrite()); context.setTemplateName(entityMetaWriterContext.getTemplateName()); for (DbTableMeta tableMeta : tableMetaList) { - ///String fileName = String.format("%s.java", StringUtil.capitalize(entityMeta.getName())); - //context.setFile(new File(fileName)); - ///Object model = convertModel(entityMeta); -// context.setModel(model); -// try { -// generator.generate(context); -// } catch (GenerateException e) { -// throw new IOException(); -// } + String fileName = String.format("%s.java", StringUtil.camelize(tableMeta.getName())); + context.setFile(new File(fileName)); + Object model = convertModel(tableMeta); + context.setModel(model); + try { + generator.generate(context); + } catch (GenerateException e) { + throw new IOException(); + } } } } Added: leto/jiemamy-entity-io/trunk/src/test/java/org/jiemamy/entity/io/meta/impl/EntityMetaWriterImplTest.java =================================================================== --- leto/jiemamy-entity-io/trunk/src/test/java/org/jiemamy/entity/io/meta/impl/EntityMetaWriterImplTest.java (rev 0) +++ leto/jiemamy-entity-io/trunk/src/test/java/org/jiemamy/entity/io/meta/impl/EntityMetaWriterImplTest.java 2009-04-14 07:24:54 UTC (rev 3268) @@ -0,0 +1,94 @@ +/* + * Copyright 2007-2009 Jiemamy Project and the Others. + * Created on Apr 14, 2009 + * + * This file is part of Jiemamy. + * + * 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.jiemamy.entity.io.meta.impl; + +import java.io.File; +import java.io.IOException; +import java.util.List; +import java.util.regex.Pattern; + +import org.junit.Ignore; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import org.jiemamy.entity.io.gen.meta.DbColumnMeta; +import org.jiemamy.entity.io.gen.meta.DbTableMeta; +import org.jiemamy.entity.io.meta.DefaultEntityMetaWriterContext; +import org.jiemamy.entity.io.meta.DefaultEntityMetaWriterFactory; +import org.jiemamy.entity.io.meta.EntityMetaWriter; +import org.jiemamy.utils.CollectionsUtil; +import org.jiemamy.utils.ResourceUtil; + +/** + * TODO for kato + * + * @author kato + */ +public class EntityMetaWriterImplTest { + + private EntityMetaWriter entityMetaWriter; + + private static final Logger LOG = LoggerFactory.getLogger(EntityMetaWriterImplTest.class); + + + /** + * Test method for {@link org.jiemamy.entity.io.meta.impl.EntityMetaWriterImpl#write(java.util.List)}. + * @throws IOException + */ + @Test + @Ignore + public void testWrite() throws IOException { + DefaultEntityMetaWriterContext context = new DefaultEntityMetaWriterContext(); + context.setJavaSrcFileEncoding("UTF-8"); + context.setRootPackageName("test"); + context.setEntityPackageName("entity"); + context.setTemplateName("entity.ftl"); + context.setTemplateFileEncoding("UTF-8"); + context.setVersionColumnNamePattern(Pattern.compile("VERSION([_]?NO)?")); + + File buildDir = ResourceUtil.getBuildDirNoException(example.entity.Employee.class); + String srcPath = String.format("%s/%s", buildDir.getCanonicalPath(), "src/test/java"); + + context.setJavaSrcFileDestDir(new File(srcPath)); + entityMetaWriter = new DefaultEntityMetaWriterFactory().createEntityMetaWriter(context); + List<DbTableMeta> dbTableMetaList = CollectionsUtil.newArrayList(); + DbTableMeta dbTableMeta = new DbTableMeta(); + dbTableMeta.setName("EMPLOYEE"); + + DbColumnMeta columnMeta = new DbColumnMeta(); + columnMeta.setName("EMPLOYEE_ID"); + columnMeta.setNullable(false); + columnMeta.setPrimaryKey(true); + dbTableMeta.addColumnMeta(columnMeta); + + columnMeta = new DbColumnMeta(); + columnMeta.setName("EMPLOYEE_NAME"); + columnMeta.setNullable(false); + dbTableMeta.addColumnMeta(columnMeta); + + columnMeta = new DbColumnMeta(); + columnMeta.setName("VERSION_NO"); + columnMeta.setNullable(false); + dbTableMeta.addColumnMeta(columnMeta); + + dbTableMetaList.add(dbTableMeta); + entityMetaWriter.write(dbTableMetaList); + } +} Property changes on: leto/jiemamy-entity-io/trunk/src/test/java/org/jiemamy/entity/io/meta/impl/EntityMetaWriterImplTest.java ___________________________________________________________________ Added: svn:mime-type + text/plain