svnno****@sourc*****
svnno****@sourc*****
2009年 4月 28日 (火) 02:16:25 JST
Revision: 3334 http://svn.sourceforge.jp/view?root=jiemamy&view=rev&rev=3334 Author: daisuke_m Date: 2009-04-28 02:16:25 +0900 (Tue, 28 Apr 2009) Log Message: ----------- 使用頻度の高いユーティリティメソッドをモデルのインターフェイスに定義。 Modified Paths: -------------- artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/model/RootModelImpl.java artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/model/attribute/AbstractAttributeModel.java artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/model/attribute/ColumnModelImpl.java artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/model/attribute/constraint/ForeignKeyImpl.java artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/model/datatype/BuiltinDataTypeImpl.java artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/model/datatype/DomainRefImpl.java artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/model/entity/AbstractEntityModel.java artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/model/entity/TableModelImpl.java artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/utils/model/AttributeUtil.java artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/utils/model/ColumnUtil.java artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/utils/model/DataTypeUtil.java artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/utils/model/EntityUtil.java artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/utils/model/ForeignKeyUtil.java artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/utils/model/RootModelUtil.java artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/utils/model/TableUtil.java zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/RootModel.java zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/attribute/AttributeModel.java zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/attribute/ColumnModel.java zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/attribute/constraint/ForeignKey.java zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/datatype/DataType.java zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/entity/EntityModel.java zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/entity/TableModel.java -------------- next part -------------- Modified: artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/model/RootModelImpl.java =================================================================== --- artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/model/RootModelImpl.java 2009-04-24 17:20:28 UTC (rev 3333) +++ artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/model/RootModelImpl.java 2009-04-27 17:16:25 UTC (rev 3334) @@ -18,6 +18,7 @@ */ package org.jiemamy.internal.model; +import java.util.Collection; import java.util.List; import java.util.SortedSet; import java.util.UUID; @@ -25,11 +26,13 @@ import org.apache.commons.lang.Validate; import org.jiemamy.Jiemamy; +import org.jiemamy.dialect.Dialect; import org.jiemamy.model.RootModel; import org.jiemamy.model.dataset.DataSetModel; import org.jiemamy.model.datatype.DomainModel; import org.jiemamy.model.entity.EntityModel; import org.jiemamy.utils.ValidateUtil; +import org.jiemamy.utils.model.RootModelUtil; /** * 1つのDBスキーマ・データ全体を表す。 @@ -102,6 +105,11 @@ return description; } + public Dialect getDialect() throws ClassNotFoundException { + // TODO インライン展開 + return RootModelUtil.getDialect(this); + } + public String getDialectClassName() { return dialectClassName; } @@ -120,10 +128,25 @@ return entities; } + public <T extends EntityModel>Collection<T> getEntities(Class<T> clazz) { + // TODO インライン展開 + return RootModelUtil.getEntities(this, clazz); + } + + public <T extends EntityModel>T getEntity(Class<T> clazz, String entityName) { + // TODO インライン展開 + return RootModelUtil.getEntity(this, clazz, entityName); + } + public String getSchemaName() { return schemaName; } + public void normalize() { + // TODO インライン展開 + RootModelUtil.normalize(this); + } + public void setBeginScript(String beginScript) { this.beginScript = beginScript; } Modified: artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/model/attribute/AbstractAttributeModel.java =================================================================== --- artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/model/attribute/AbstractAttributeModel.java 2009-04-24 17:20:28 UTC (rev 3333) +++ artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/model/attribute/AbstractAttributeModel.java 2009-04-27 17:16:25 UTC (rev 3334) @@ -23,6 +23,8 @@ import org.jiemamy.Jiemamy; import org.jiemamy.internal.model.AbstractJiemamyElement; import org.jiemamy.model.attribute.AttributeModel; +import org.jiemamy.model.entity.TableModel; +import org.jiemamy.utils.model.AttributeUtil; /** * {@link AttributeModel}の骨格実装。 @@ -37,6 +39,7 @@ /** 論理名 */ private String logicalName; + /** 説明 */ private String description; @@ -51,6 +54,11 @@ super(jiemamy, id); } + public TableModel getDeclaringTable() { + // TODO インライン展開 + return AttributeUtil.getDefinedTable(this); + } + public String getDescription() { return description; } Modified: artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/model/attribute/ColumnModelImpl.java =================================================================== --- artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/model/attribute/ColumnModelImpl.java 2009-04-24 17:20:28 UTC (rev 3333) +++ artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/model/attribute/ColumnModelImpl.java 2009-04-27 17:16:25 UTC (rev 3334) @@ -27,6 +27,7 @@ import org.jiemamy.model.attribute.constraint.PrimaryKey; import org.jiemamy.model.attribute.constraint.UniqueKey; import org.jiemamy.model.datatype.DataType; +import org.jiemamy.utils.model.ColumnUtil; /** * カラム定義モデル。Artemisにおける{@link ColumnModel}の実装クラス。 @@ -86,6 +87,11 @@ return uniqueKey; } + public boolean isPrimaryKeyColumn() { + // TODO インライン展開 + return ColumnUtil.isPartOfPrimaryKeyColumns(this); + } + public void setCheckConstraint(ColumnCheckConstraint checkConstraint) { this.checkConstraint = checkConstraint; } Modified: artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/model/attribute/constraint/ForeignKeyImpl.java =================================================================== --- artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/model/attribute/constraint/ForeignKeyImpl.java 2009-04-24 17:20:28 UTC (rev 3333) +++ artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/model/attribute/constraint/ForeignKeyImpl.java 2009-04-27 17:16:25 UTC (rev 3334) @@ -24,6 +24,9 @@ import org.jiemamy.Jiemamy; import org.jiemamy.model.attribute.ColumnRef; import org.jiemamy.model.attribute.constraint.ForeignKey; +import org.jiemamy.model.attribute.constraint.KeyConstraint; +import org.jiemamy.model.entity.EntityModel; +import org.jiemamy.utils.model.ForeignKeyUtil; /** * 外部キーモデル。 @@ -72,6 +75,16 @@ return referenceColumns; } + public EntityModel getReferencedEntity() { + // TODO インライン展開 + return ForeignKeyUtil.getReferenceEntity(this); + } + + public KeyConstraint getReferencedKeyConstraint() { + // TODO インライン展開 + return ForeignKeyUtil.getReferenceKeyConstraint(this); + } + public void setMatchType(MatchType matchType) { this.matchType = matchType; } Modified: artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/model/datatype/BuiltinDataTypeImpl.java =================================================================== --- artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/model/datatype/BuiltinDataTypeImpl.java 2009-04-24 17:20:28 UTC (rev 3333) +++ artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/model/datatype/BuiltinDataTypeImpl.java 2009-04-27 17:16:25 UTC (rev 3334) @@ -22,9 +22,11 @@ import org.apache.commons.lang.builder.ReflectionToStringBuilder; import org.apache.commons.lang.builder.ToStringStyle; +import org.jiemamy.ReferenceResolver; import org.jiemamy.internal.model.AbstractAdaptable; import org.jiemamy.model.datatype.BuiltinDataType; import org.jiemamy.model.datatype.DataTypeCategory; +import org.jiemamy.utils.model.DataTypeUtil; /** * {@link BuiltinDataType}の実装クラス。 @@ -69,6 +71,11 @@ this.typeName = typeName; } + public BuiltinDataType toBuiltinDataType(ReferenceResolver resolver) { + // TODO インライン展開 + return DataTypeUtil.toBuiltinDataType(this, resolver); + } + @Override public String toString() { ReflectionToStringBuilder toStringBuilder = Modified: artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/model/datatype/DomainRefImpl.java =================================================================== --- artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/model/datatype/DomainRefImpl.java 2009-04-24 17:20:28 UTC (rev 3333) +++ artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/model/datatype/DomainRefImpl.java 2009-04-27 17:16:25 UTC (rev 3334) @@ -21,9 +21,12 @@ import java.util.UUID; import org.jiemamy.Jiemamy; +import org.jiemamy.ReferenceResolver; import org.jiemamy.internal.model.AbstractElementReference; +import org.jiemamy.model.datatype.BuiltinDataType; import org.jiemamy.model.datatype.DomainModel; import org.jiemamy.model.datatype.DomainRef; +import org.jiemamy.utils.model.DataTypeUtil; /** * {@link DomainModel}に対する参照オブジェクトの実装。Artemisにおける{@link DomainRef}の実装クラス。 @@ -53,4 +56,9 @@ super(jiemamy, referenceId); } + public BuiltinDataType toBuiltinDataType(ReferenceResolver resolver) { + // TODO インライン展開 + return DataTypeUtil.toBuiltinDataType(this, resolver); + } + } Modified: artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/model/entity/AbstractEntityModel.java =================================================================== --- artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/model/entity/AbstractEntityModel.java 2009-04-24 17:20:28 UTC (rev 3333) +++ artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/model/entity/AbstractEntityModel.java 2009-04-27 17:16:25 UTC (rev 3334) @@ -18,11 +18,13 @@ */ package org.jiemamy.internal.model.entity; +import java.util.Collection; import java.util.UUID; import org.jiemamy.Jiemamy; import org.jiemamy.internal.model.AbstractJiemamyElement; import org.jiemamy.model.entity.EntityModel; +import org.jiemamy.utils.model.EntityUtil; /** * エンティティ(TableやView)の抽象モデルクラス。 @@ -78,6 +80,16 @@ return name; } + public Collection<EntityModel> getSubEntities(boolean recursive) { + // TODO インライン展開 + return EntityUtil.getDependentEntities(this, recursive); + } + + public Collection<EntityModel> getSuperEntities(boolean recursive) { + // TODO インライン展開 + return EntityUtil.getReferenceEntities(this, recursive); + } + public void setBeginScript(String beginScript) { this.beginScript = beginScript; } Modified: artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/model/entity/TableModelImpl.java =================================================================== --- artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/model/entity/TableModelImpl.java 2009-04-24 17:20:28 UTC (rev 3333) +++ artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/model/entity/TableModelImpl.java 2009-04-27 17:16:25 UTC (rev 3334) @@ -25,8 +25,12 @@ import org.jiemamy.Jiemamy; import org.jiemamy.model.attribute.AttributeModel; +import org.jiemamy.model.attribute.ColumnModel; +import org.jiemamy.model.attribute.constraint.ForeignKey; +import org.jiemamy.model.attribute.constraint.PrimaryKey; import org.jiemamy.model.entity.TableModel; import org.jiemamy.model.index.IndexModel; +import org.jiemamy.utils.model.TableUtil; /** * テーブルモデル。 @@ -53,16 +57,50 @@ super(jiemamy, id); } + public <T extends AttributeModel>T getAttribute(Class<T> clazz) { + // TODO インライン展開 + return TableUtil.getAttribute(this, clazz); + } + + public <T extends AttributeModel>T getAttribute(Class<T> clazz, boolean columnAttr) { + // TODO インライン展開 + return TableUtil.getAttribute(this, clazz, columnAttr); + } + public List<AttributeModel> getAttributes() { assert attributes != null; return attributes; } + public <T extends AttributeModel>List<T> getAttributes(Class<T> clazz) { + // TODO インライン展開 + return TableUtil.getAttributes(this, clazz); + } + + public ColumnModel getColumn(String columnName) { + // TODO インライン展開 + return TableUtil.getColumn(this, columnName); + } + + public List<ColumnModel> getColumns() { + // TODO インライン展開 + return TableUtil.getColumns(this); + } + + public List<ForeignKey> getForeignKeys() { + return getAttributes(ForeignKey.class); + } + public List<IndexModel> getIndexes() { assert indexes != null; return indexes; } + public PrimaryKey getPrimaryKey() { + // TODO インライン展開 + return TableUtil.getPrimaryKey(this); + } + /** * 属性のリストを設定する。 * Modified: artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/utils/model/AttributeUtil.java =================================================================== --- artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/utils/model/AttributeUtil.java 2009-04-24 17:20:28 UTC (rev 3333) +++ artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/utils/model/AttributeUtil.java 2009-04-27 17:16:25 UTC (rev 3334) @@ -90,7 +90,9 @@ * @param attribute 対象属性モデル * @return この属性が所属するテーブル. どのテーブルにも所属していない場合は{@code null} * @throws IllegalArgumentException 引数に{@code null}を与えた場合 + * @deprecated use {@link AttributeModel#getDeclaringTable()} */ + @Deprecated public static TableModel getDefinedTable(AttributeModel attribute) { Validate.notNull(attribute); Modified: artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/utils/model/ColumnUtil.java =================================================================== --- artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/utils/model/ColumnUtil.java 2009-04-24 17:20:28 UTC (rev 3333) +++ artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/utils/model/ColumnUtil.java 2009-04-27 17:16:25 UTC (rev 3334) @@ -45,10 +45,25 @@ * @param columnModel 対象カラム * @return 主キー制約構成カラムである場合は{@code true}、そうでない場合は{@code false} * @throws IllegalArgumentException 引数に{@code null}を与えた場合 + * @deprecated use {@link ColumnModel#isPrimaryKeyColumn()} */ + @Deprecated public static boolean isPartOfPrimaryKeyColumns(ColumnModel columnModel) { Validate.notNull(columnModel); - return isPartOfPrimaryKeyColumns(columnModel, true); + TableModel tableModel = AttributeUtil.getDefinedTable(columnModel); + PrimaryKey primaryKey; + try { + primaryKey = TableUtil.getAttribute(tableModel, PrimaryKey.class, true); + } catch (ElementNotFoundException e) { + return false; + } + List<ColumnRef> keyColumns = primaryKey.getKeyColumns(); + for (ColumnRef columnRef : keyColumns) { + if (columnRef.getReferenceId().equals(columnModel.getId())) { + return true; + } + } + return false; } /** @@ -67,32 +82,6 @@ columnModel.setDataType(ref); } - /** - * カラムが主キー制約を構成するカラムであるかどうか調べる。 - * - * @param columnModel 対象カラム - * @param columnAttr カラムに設定された主キーも調査対象とする場合は{@code true}、そうでない場合は{@code false} - * @return 主キー制約構成カラムである場合は{@code true}、そうでない場合は{@code false} - * @throws IllegalArgumentException 引数に{@code null}を与えた場合 - */ - private static boolean isPartOfPrimaryKeyColumns(ColumnModel columnModel, boolean columnAttr) { - Validate.notNull(columnModel); - TableModel tableModel = AttributeUtil.getDefinedTable(columnModel); - PrimaryKey primaryKey; - try { - primaryKey = TableUtil.getAttribute(tableModel, PrimaryKey.class, columnAttr); - } catch (ElementNotFoundException e) { - return false; - } - List<ColumnRef> keyColumns = primaryKey.getKeyColumns(); - for (ColumnRef columnRef : keyColumns) { - if (columnRef.getReferenceId().equals(columnModel.getId())) { - return true; - } - } - return false; - } - private ColumnUtil() { throw new UnexpectedConditionError("不到達ポイント"); } Modified: artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/utils/model/DataTypeUtil.java =================================================================== --- artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/utils/model/DataTypeUtil.java 2009-04-24 17:20:28 UTC (rev 3333) +++ artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/utils/model/DataTypeUtil.java 2009-04-27 17:16:25 UTC (rev 3334) @@ -35,25 +35,15 @@ public final class DataTypeUtil { /** - * データ型名を取得する。 - * - * @param dataType 対象 - * @param resolver 参照リゾルバ - * @return データ型名 - * @throws IllegalArgumentException 引数に{@code null}を与えた場合 - */ - public static String getTypeName(DataType dataType, ReferenceResolver resolver) { - return toBuiltinDataType(dataType, resolver).getTypeName(); - } - - /** * {@link DataType}を{@link BuiltinDataType}に変換する。 * * @param dataType 変換対象 * @param resolver リゾルバ * @return 変換結果 * @throws IllegalArgumentException 引数に{@code null}を与えた場合 + * @deprecated use {@link DataType#toBuiltinDataType(ReferenceResolver)} */ + @Deprecated public static BuiltinDataType toBuiltinDataType(DataType dataType, ReferenceResolver resolver) { Validate.notNull(dataType); Validate.notNull(resolver); Modified: artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/utils/model/EntityUtil.java =================================================================== --- artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/utils/model/EntityUtil.java 2009-04-24 17:20:28 UTC (rev 3333) +++ artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/utils/model/EntityUtil.java 2009-04-27 17:16:25 UTC (rev 3334) @@ -88,7 +88,9 @@ * @param recursive 再帰的に検索する場合は{@code true}、そうでない場合は{@code false} * @return エンティティの集合 * @throws IllegalArgumentException 引数に{@code null}を与えた場合 + * @deprecated use {@link EntityModel#getSubEntities(boolean)} */ + @Deprecated public static Collection<EntityModel> getDependentEntities(EntityModel entityModel, boolean recursive) { Validate.notNull(entityModel); return recursive ? getDependentEntitiesRecursive(entityModel) : getDependentEntitiesNonRecursive(entityModel); @@ -101,7 +103,9 @@ * @param recursive 再帰的に検索する場合は{@code true}、そうでない場合は{@code false} * @return エンティティの集合 * @throws IllegalArgumentException 引数に{@code null}を与えた場合 + * @deprecated use {@link EntityModel#getSuperEntities(boolean)} */ + @Deprecated public static Collection<EntityModel> getReferenceEntities(EntityModel entityModel, boolean recursive) { Validate.notNull(entityModel); return recursive ? getReferenceEntitiesRecursive(entityModel) : getReferenceEntitiesNonRecursive(entityModel); Modified: artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/utils/model/ForeignKeyUtil.java =================================================================== --- artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/utils/model/ForeignKeyUtil.java 2009-04-24 17:20:28 UTC (rev 3333) +++ artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/utils/model/ForeignKeyUtil.java 2009-04-27 17:16:25 UTC (rev 3334) @@ -96,7 +96,9 @@ * @return この外部キーが参照するエンティティ. 参照エンティティが見つからない場合は{@code null} * @throws ModelConsistenceException 参照カラムが1つもない場合 * @throws IllegalArgumentException 引数に{@code null}を与えた場合 + * @deprecated use {@link ForeignKey#getReferencedEntity()} */ + @Deprecated public static EntityModel getReferenceEntity(ForeignKey foreignKey) { Validate.notNull(foreignKey); @@ -127,7 +129,9 @@ * @return この外部キーが参照するキー * @see ForeignKeyValidator * @throws IllegalArgumentException 引数に{@code null}を与えた場合 + * @deprecated use {@link ForeignKey#getReferencedKeyConstraint()} */ + @Deprecated public static KeyConstraint getReferenceKeyConstraint(ForeignKey foreignKey) { Validate.notNull(foreignKey); Modified: artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/utils/model/RootModelUtil.java =================================================================== --- artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/utils/model/RootModelUtil.java 2009-04-24 17:20:28 UTC (rev 3333) +++ artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/utils/model/RootModelUtil.java 2009-04-27 17:16:25 UTC (rev 3334) @@ -188,7 +188,9 @@ * @return SQL方言 * @throws ClassNotFoundException 設定されたクラスが見つからなかった場合 * @throws IllegalArgumentException 引数に{@code null}を与えた場合 + * @deprecated use {@link RootModel#getDialect()} */ + @Deprecated public static Dialect getDialect(RootModel rootModel) throws ClassNotFoundException { Validate.notNull(rootModel); Jiemamy jiemamy = rootModel.getJiemamy(); @@ -203,7 +205,9 @@ * @param clazz 取得したいノードのクラス * @return ノードのリスト * @throws IllegalArgumentException 引数に{@code null}を与えた場合 + * @deprecated use {@link RootModel#getEntities(Class)} */ + @Deprecated public static <T extends EntityModel>Collection<T> getEntities(RootModel rootModel, Class<T> clazz) { Validate.notNull(rootModel); Validate.notNull(clazz); @@ -233,7 +237,9 @@ * @throws TooManyElementsException 同名のエンティティが複数見つかった場合 * @throws ElementNotFoundException エンティティが見つからなかった場合 * @throws IllegalArgumentException 引数rootModel, entityNameに{@code null}を与えた場合 + * @deprecated use {@link RootModel#getEntity(Class, String)} */ + @Deprecated @SuppressWarnings("unchecked") public static <T extends EntityModel>T getEntity(RootModel rootModel, Class<T> clazz, String entityName) { Validate.notNull(rootModel); @@ -259,7 +265,9 @@ * * @param rootModel 操作対象{@link RootModel} * @throws IllegalArgumentException 引数に{@code null}を与えた場合 + * @deprecated use {@link RootModel#normalize()} */ + @Deprecated public static void normalize(RootModel rootModel) { Validate.notNull(rootModel); ReferenceResolver resolver = rootModel.getJiemamy().getReferenceResolver(); Modified: artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/utils/model/TableUtil.java =================================================================== --- artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/utils/model/TableUtil.java 2009-04-24 17:20:28 UTC (rev 3333) +++ artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/utils/model/TableUtil.java 2009-04-27 17:16:25 UTC (rev 3334) @@ -53,7 +53,9 @@ * @throws TooManyElementsException 複数の属性が見つかった場合 * @throws ElementNotFoundException 属性が見つからなかった場合 * @throws IllegalArgumentException 引数に{@code null}を与えた場合 + * @deprecated use {@link TableModel#getAttribute(Class)} */ + @Deprecated public static <T extends AttributeModel>T getAttribute(TableModel tableModel, Class<T> clazz) { return getAttribute(tableModel, clazz, false); } @@ -69,7 +71,9 @@ * @throws TooManyElementsException 複数の属性が見つかった場合 * @throws ElementNotFoundException 属性が見つからなかった場合 * @throws IllegalArgumentException 引数に{@code null}を与えた場合 + * @deprecated use {@link TableModel#getAttribute(Class, boolean)} */ + @Deprecated public static <T extends AttributeModel>T getAttribute(TableModel tableModel, Class<T> clazz, boolean columnAttr) { List<T> attributes = getAttributes(tableModel, clazz, columnAttr); if (attributes.size() == 0) { @@ -88,7 +92,9 @@ * @param clazz 検索する型 * @return 属性のリスト * @throws IllegalArgumentException 引数に{@code null}を与えた場合 + * @deprecated use {@link TableModel#getAttributes(Class)} */ + @Deprecated public static <T extends AttributeModel>List<T> getAttributes(TableModel tableModel, Class<T> clazz) { return getAttributes(tableModel, clazz, false); } @@ -102,7 +108,9 @@ * @param columnAttr カラムに付随するモデルも対象とする場合は{@code true}、そうでない場合は{@code false} * @return 属性のリスト * @throws IllegalArgumentException 引数に{@code null}を与えた場合 + * @deprecated use {@link TableModel#getAttributes(Class, boolean)} */ + @Deprecated public static <T extends AttributeModel>List<T> getAttributes(TableModel tableModel, Class<T> clazz, boolean columnAttr) { Validate.notNull(tableModel); @@ -138,7 +146,9 @@ * @throws TooManyElementsException 同名のカラムが複数見つかった場合 * @throws ElementNotFoundException カラムが見つからなかった場合 * @throws IllegalArgumentException 引数に{@code null}を与えた場合 + * @deprecated use {@link TableModel#getColumn(String)} */ + @Deprecated public static ColumnModel getColumn(TableModel tableModel, String columnName) { Validate.notNull(tableModel); Validate.notNull(columnName); @@ -188,7 +198,9 @@ * @param tableModel 対象のテーブル * @return カラムのリスト * @throws IllegalArgumentException 引数に{@code null}を与えた場合 + * @deprecated use {@link TableModel#getColumns()} */ + @Deprecated public static List<ColumnModel> getColumns(TableModel tableModel) { return getAttributes(tableModel, ColumnModel.class); } @@ -244,7 +256,9 @@ * @throws TooManyElementsException 複数の主キーが見つかった場合 * @throws ElementNotFoundException 主キーが存在しない場合 * @throws IllegalArgumentException 引数に{@code null}を与えた場合 + * @deprecated use {@link TableModel#getPrimaryKey()} */ + @Deprecated public static PrimaryKey getPrimaryKey(TableModel tableModel) { return getAttribute(tableModel, PrimaryKey.class, true); } Modified: zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/RootModel.java =================================================================== --- zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/RootModel.java 2009-04-24 17:20:28 UTC (rev 3333) +++ zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/RootModel.java 2009-04-27 17:16:25 UTC (rev 3334) @@ -18,9 +18,13 @@ */ package org.jiemamy.model; +import java.util.Collection; import java.util.List; import java.util.SortedSet; +import org.jiemamy.dialect.Dialect; +import org.jiemamy.exception.ElementNotFoundException; +import org.jiemamy.exception.TooManyElementsException; import org.jiemamy.model.dataset.DataSetModel; import org.jiemamy.model.datatype.DomainModel; import org.jiemamy.model.entity.EntityModel; @@ -63,6 +67,16 @@ String getDescription(); /** + * SQL方言を取得する。 + * + * @return SQL方言 + * @throws ClassNotFoundException 設定されたクラスが見つからなかった場合 + * @throws IllegalArgumentException 引数に{@code null}を与えた場合 + * @throws UnsupportedOperationException 実装がこのメソッドをサポートしない場合 + */ + Dialect getDialect() throws ClassNotFoundException; + + /** * SQL方言IDを取得する。 * * @return SQL方言クラスのFQCN. 未設定の場合は{@code null} @@ -104,6 +118,35 @@ SortedSet<EntityModel> getEntities(); /** + * 特定の種類のエンティティのリストを取得する。 + * + * <p>返される{@link Collection}は他に影響を及ぼさない独立したインスタンスである。</p> + * + * @param <T> 取得したいエンティティのクラス + * @param clazz 取得したいエンティティのクラス + * @return ノードのリスト + * @throws IllegalArgumentException 引数に{@code null}を与えた場合 + * @throws UnsupportedOperationException 実装がこのメソッドをサポートしない場合 + */ + <T extends EntityModel>Collection<T> getEntities(Class<T> clazz); + + /** + * 指定した名前を持つエンティティを取得する。 + * + * <p>エンティティ名の大文字・小文字は区別されない。</p> + * + * @param <T> エンティティの種類を表すクラス + * @param clazz エンティティの種類を表すクラス. {@code null}の場合、エンティティの種類を限定しないことを表す + * @param entityName エンティティ名 + * @return 見つかったエンティティ + * @throws TooManyElementsException 同名のエンティティが複数見つかった場合 + * @throws ElementNotFoundException エンティティが見つからなかった場合 + * @throws IllegalArgumentException 引数rootModel, entityNameに{@code null}を与えた場合 + * @throws UnsupportedOperationException 実装がこのメソッドをサポートしない場合 + */ + <T extends EntityModel>T getEntity(Class<T> clazz, String entityName); + + /** * スキーマ名を取得する。 * * @return スキーマ名. 未設定の場合は{@code null} @@ -112,6 +155,16 @@ String getSchemaName(); /** + * モデルの正規化を行う。 + * + * TODO もっと説明 + * + * @throws IllegalArgumentException 引数に{@code null}を与えた場合 + * @throws UnsupportedOperationException 実装がこのメソッドをサポートしない場合 + */ + void normalize(); + + /** * 開始スクリプトを設定する。 * * <p>未設定とする場合は{@code null}を与える。</p> Modified: zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/attribute/AttributeModel.java =================================================================== --- zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/attribute/AttributeModel.java 2009-04-24 17:20:28 UTC (rev 3333) +++ zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/attribute/AttributeModel.java 2009-04-27 17:16:25 UTC (rev 3334) @@ -19,6 +19,7 @@ package org.jiemamy.model.attribute; import org.jiemamy.model.JiemamyElement; +import org.jiemamy.model.entity.TableModel; /** * リレーショナルデータベースモデルにおける「属性」を表すモデルインターフェイス。 @@ -31,6 +32,14 @@ public interface AttributeModel extends JiemamyElement { /** + * この属性が所属するテーブルを取得する。 + * + * @return この属性が所属するテーブル. どのテーブルにも所属していない場合は{@code null} + * @throws IllegalArgumentException 引数に{@code null}を与えた場合 + */ + TableModel getDeclaringTable(); + + /** * 説明文を取得する。 * * @return 説明文. 未設定の場合は{@code null} Modified: zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/attribute/ColumnModel.java =================================================================== --- zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/attribute/ColumnModel.java 2009-04-24 17:20:28 UTC (rev 3333) +++ zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/attribute/ColumnModel.java 2009-04-27 17:16:25 UTC (rev 3334) @@ -82,6 +82,15 @@ UniqueKey getUniqueKey(); /** + * カラムが主キー制約を構成するカラムであるかどうか調べる。 + * + * @return 主キー制約構成カラムである場合は{@code true}、そうでない場合は{@code false} + * @throws IllegalArgumentException 引数に{@code null}を与えた場合 + * @throws UnsupportedOperationException 実装がこのメソッドをサポートしない場合 + */ + boolean isPrimaryKeyColumn(); + + /** * チェック制約を設定する。 * * <p>未設定とする場合は{@code null}を与える。</p> Modified: zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/attribute/constraint/ForeignKey.java =================================================================== --- zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/attribute/constraint/ForeignKey.java 2009-04-24 17:20:28 UTC (rev 3333) +++ zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/attribute/constraint/ForeignKey.java 2009-04-27 17:16:25 UTC (rev 3334) @@ -20,7 +20,9 @@ import java.util.List; +import org.jiemamy.exception.ModelConsistenceException; import org.jiemamy.model.attribute.ColumnRef; +import org.jiemamy.model.entity.EntityModel; /** * リレーショナルデータベースにおける「外部キー」を表すモデルインターフェイス。 @@ -66,6 +68,26 @@ List<ColumnRef> getReferenceColumns(); /** + * この外部キーが参照するエンティティを取得する。 + * + * @return この外部キーが参照するエンティティ. 参照エンティティが見つからない場合は{@code null} + * @throws ModelConsistenceException 参照カラムが1つもない場合 + * @throws IllegalArgumentException 引数に{@code null}を与えた場合 + * @throws UnsupportedOperationException 実装がこのメソッドをサポートしない場合 + */ + EntityModel getReferencedEntity(); + + /** + * この外部キーが参照するキー制約を取得する。該当するキーが存在しなかった場合、{@code null}を返す。 + * + * <p>該当するキー制約が存在しない、という状況はモデル不整合を表す。</p> + * + * @return この外部キーが参照するキー + * @throws IllegalArgumentException 引数に{@code null}を与えた場合 + */ + KeyConstraint getReferencedKeyConstraint(); + + /** * 参照先カラムのリストを設定する。 * * <p>このメソッドは、インスタンスの持つフィールドをそのまま返す。返される{@link List}を直接操作することで、 Modified: zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/datatype/DataType.java =================================================================== --- zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/datatype/DataType.java 2009-04-24 17:20:28 UTC (rev 3333) +++ zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/datatype/DataType.java 2009-04-27 17:16:25 UTC (rev 3334) @@ -18,6 +18,8 @@ */ package org.jiemamy.model.datatype; +import org.jiemamy.ReferenceResolver; + /** * 型記述子。 * @@ -25,4 +27,13 @@ */ public interface DataType { + /** + * {@link DataType}を{@link BuiltinDataType}に変換する。 + * + * @param resolver リゾルバ + * @return 変換結果 + * @throws IllegalArgumentException 引数に{@code null}を与えた場合 + */ + BuiltinDataType toBuiltinDataType(ReferenceResolver resolver); + } Modified: zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/entity/EntityModel.java =================================================================== --- zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/entity/EntityModel.java 2009-04-24 17:20:28 UTC (rev 3333) +++ zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/entity/EntityModel.java 2009-04-27 17:16:25 UTC (rev 3334) @@ -18,6 +18,8 @@ */ package org.jiemamy.model.entity; +import java.util.Collection; + import org.jiemamy.model.JiemamyElement; /** @@ -69,6 +71,36 @@ String getName(); /** + * このエンティティ<b>に</b>依存しているエンティティ(A → {@code this})の集合を取得する。 + * + * <ul> + * <li>外部キー制約によってこのエンティティを参照しているテーブル</li> + * <li>このエンティティに依存したビュー</li> + * </ul> + * + * @param recursive 再帰的に検索する場合は{@code true}、そうでない場合は{@code false} + * @return エンティティの集合 + * @throws IllegalArgumentException 引数に{@code null}を与えた場合 + * @throws UnsupportedOperationException 実装がこのメソッドをサポートしない場合 + */ + Collection<EntityModel> getSubEntities(boolean recursive); + + /** + * このエンティティ<b>が</b>依存している({@code this} → A)エンティティの集合を取得する。 + * + * <ul> + * <li>このテーブルの外部キー制約が参照しているテーブル</li> + * <li>このビューが参照しているテーブル</li> + * </ul> + * + * @param recursive 再帰的に検索する場合は{@code true}、そうでない場合は{@code false} + * @return エンティティの集合 + * @throws IllegalArgumentException 引数に{@code null}を与えた場合 + * @throws UnsupportedOperationException 実装がこのメソッドをサポートしない場合 + */ + Collection<EntityModel> getSuperEntities(boolean recursive); + + /** * 開始スクリプトを設定する。 * * <p>未設定とする場合は{@code null}を与える。</p> Modified: zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/entity/TableModel.java =================================================================== --- zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/entity/TableModel.java 2009-04-24 17:20:28 UTC (rev 3333) +++ zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/entity/TableModel.java 2009-04-27 17:16:25 UTC (rev 3334) @@ -20,7 +20,12 @@ import java.util.List; +import org.jiemamy.exception.ElementNotFoundException; +import org.jiemamy.exception.TooManyElementsException; import org.jiemamy.model.attribute.AttributeModel; +import org.jiemamy.model.attribute.ColumnModel; +import org.jiemamy.model.attribute.constraint.ForeignKey; +import org.jiemamy.model.attribute.constraint.PrimaryKey; import org.jiemamy.model.index.IndexModel; /** @@ -31,6 +36,33 @@ public interface TableModel extends EntityModel { /** + * 指定した型を持つ属性を取得する。 + * + * @param <T> 属性の型 + * @param clazz 属性の型 + * @return 属性 + * @throws TooManyElementsException 複数の属性が見つかった場合 + * @throws ElementNotFoundException 属性が見つからなかった場合 + * @throws IllegalArgumentException 引数に{@code null}を与えた場合 + * @throws UnsupportedOperationException 実装がこのメソッドをサポートしない場合 + */ + <T extends AttributeModel>T getAttribute(Class<T> clazz); + + /** + * 指定した型を持つ属性を取得する。 + * + * @param <T> 属性の型 + * @param clazz 属性の型 + * @param columnAttr カラム属性も検索対象とする場合は{@code true}、そうでない場合は{@code false} + * @return 属性 + * @throws TooManyElementsException 複数の属性が見つかった場合 + * @throws ElementNotFoundException 属性が見つからなかった場合 + * @throws IllegalArgumentException 引数に{@code null}を与えた場合 + * @throws UnsupportedOperationException 実装がこのメソッドをサポートしない場合 + */ + <T extends AttributeModel>T getAttribute(Class<T> clazz, boolean columnAttr); + + /** * 属性のリストを取得する。 * * <p>このメソッドは、インスタンスの持つフィールドをそのまま返す。返される{@link List}を直接操作することで、 @@ -42,6 +74,53 @@ List<AttributeModel> getAttributes(); /** + * 指定した型を持つ属性のリストを取得する。 + * + * <p>返される{@link List}は他に影響を及ぼさない独立したインスタンスである。</p> + * + * @param <T> 属性の型 + * @param clazz 検索する型 + * @return 属性のリスト + * @throws IllegalArgumentException 引数に{@code null}を与えた場合 + * @throws UnsupportedOperationException 実装がこのメソッドをサポートしない場合 + */ + <T extends AttributeModel>List<T> getAttributes(Class<T> clazz); + + /** + * 指定した名前を持つカラムを取得する。 + * + * @param columnName カラム名 + * @return 見つかったカラム + * @throws TooManyElementsException 同名のカラムが複数見つかった場合 + * @throws ElementNotFoundException カラムが見つからなかった場合 + * @throws IllegalArgumentException 引数に{@code null}を与えた場合 + * @throws UnsupportedOperationException 実装がこのメソッドをサポートしない場合 + */ + ColumnModel getColumn(String columnName); + + /** + * カラムのリストを取得する。 + * + * <p>返される{@link List}は他に影響を及ぼさない独立したインスタンスである。</p> + * + * @return カラムのリスト + * @throws IllegalArgumentException 引数に{@code null}を与えた場合 + * @throws UnsupportedOperationException 実装がこのメソッドをサポートしない場合 + */ + List<ColumnModel> getColumns(); + + /** + * 外部キー制約のリストを取得する。 + * + * <p>返される{@link List}は他に影響を及ぼさない独立したインスタンスである。</p> + * + * @return 外部キー制約のリスト + * @throws IllegalArgumentException 引数に{@code null}を与えた場合 + * @throws UnsupportedOperationException 実装がこのメソッドをサポートしない場合 + */ + List<ForeignKey> getForeignKeys(); + + /** * インデックスのリストを取得する。 * * <p>このメソッドは、インスタンスの持つフィールドをそのまま返す。返される{@link List}を直接操作することで、 @@ -52,4 +131,16 @@ */ List<IndexModel> getIndexes(); + /** + * このテーブルの主キーを取得する。 + * + * <p>テーブルに対して設定された主キーだけではなく、カラムに対して設定された主キーも検索対象となる。</p> + * + * @return 主キー + * @throws TooManyElementsException 複数の主キーが見つかった場合 + * @throws ElementNotFoundException 主キーが存在しない場合 + * @throws IllegalArgumentException 引数に{@code null}を与えた場合 + * @throws UnsupportedOperationException 実装がこのメソッドをサポートしない場合 + */ + PrimaryKey getPrimaryKey(); }