[Jiemamy-notify:2302] commit [3334] 使用頻度の高いユーティリティメソッドをモデルのインターフェイスに定義。

Back to archive index

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();
 }



Jiemamy-notify メーリングリストの案内
Back to archive index