[Jiemamy-notify] commit [1929] JiemamyModel extends Adaptableとした。 /

Zurück zum Archiv-Index

svnno****@sourc***** svnno****@sourc*****
2008年 9月 18日 (木) 01:32:37 JST


Revision: 1929
          http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=jiemamy&view=rev&rev=1929
Author:   daisuke_m
Date:     2008-09-18 01:32:37 +0900 (Thu, 18 Sep 2008)

Log Message:
-----------
JiemamyModel extends Adaptableとした。 /
ChageSupport系サービスは、getAdapterで取得する。

Modified Paths:
--------------
    artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/core/extension/dialect/mapping/SpecialDataTypeMapping.java
    artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/core/model/AbstractModel.java
    artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/core/model/JiemamyModel.java
    artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/core/model/node/TableModel.java
    artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/core/model/typedef/datatype/AbstractDataType.java
    artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/core/model/typedef/datatype/DataType.java
    artemis/trunk/org.jiemamy.core/src/test/java/org/jiemamy/core/model/node/TableModelTest.java


-------------- next part --------------
Modified: artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/core/extension/dialect/mapping/SpecialDataTypeMapping.java
===================================================================
--- artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/core/extension/dialect/mapping/SpecialDataTypeMapping.java	2008-09-17 16:02:38 UTC (rev 1928)
+++ artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/core/extension/dialect/mapping/SpecialDataTypeMapping.java	2008-09-17 16:32:37 UTC (rev 1929)
@@ -158,12 +158,13 @@
 	 * @param adapters コピー元アダプタのコレクション
 	 * @param dataType コピー先のデータ型
 	 */
-	private void copyAdapter(Collection<DataTypeAdapter> adapters, DataType dataType) {
-		for (DataTypeAdapter adapter : adapters) {
-			if (dataType.hasAdapter(adapter.getClass())) {
-				dataType.getAdapter(adapter.getClass()).copy(adapter);
+	private void copyAdapter(Collection<Object> adapters, DataType dataType) {
+		for (Object adapter : adapters) {
+			if (adapter instanceof DataTypeAdapter && dataType.hasAdapter(adapter.getClass())) {
+				DataTypeAdapter source = (DataTypeAdapter) adapter;
+				DataTypeAdapter dest = (DataTypeAdapter) dataType.getAdapter(adapter.getClass());
+				dest.copy(source);
 			}
 		}
 	}
-	
 }

Modified: artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/core/model/AbstractModel.java
===================================================================
--- artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/core/model/AbstractModel.java	2008-09-17 16:02:38 UTC (rev 1928)
+++ artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/core/model/AbstractModel.java	2008-09-17 16:32:37 UTC (rev 1929)
@@ -14,8 +14,12 @@
  */
 package org.jiemamy.core.model;
 
+import java.util.List;
 import java.util.UUID;
 
+import org.apache.commons.collections15.list.UnmodifiableList;
+import org.seasar.framework.util.tiger.CollectionsUtil;
+
 import org.jiemamy.core.event.AbstractObservable;
 import org.jiemamy.core.utils.Processor;
 
@@ -32,6 +36,9 @@
 	 */
 	private UUID id;
 	
+	/** 適用可能なアダプタのリスト */
+	private List<Object> adapters = CollectionsUtil.newArrayList();
+	
 
 	/**
 	 * コンストラクタ。
@@ -78,6 +85,19 @@
 	/**
 	 * {@inheritDoc}
 	 */
+	@SuppressWarnings("unchecked")
+	public <T>T getAdapter(Class<T> adapter) {
+		for (Object myAdapter : adapters) {
+			if (myAdapter.getClass().isAssignableFrom(adapter)) {
+				return (T) myAdapter;
+			}
+		}
+		return null;
+	}
+	
+	/**
+	 * {@inheritDoc}
+	 */
 	public UUID getId() {
 		return id;
 	}
@@ -85,6 +105,18 @@
 	/**
 	 * {@inheritDoc}
 	 */
+	public boolean hasAdapter(Class<?> adapter) {
+		for (Object myAdapter : adapters) {
+			if (myAdapter.getClass().isAssignableFrom(adapter)) {
+				return true;
+			}
+		}
+		return false;
+	}
+	
+	/**
+	 * {@inheritDoc}
+	 */
 	@Override
 	public int hashCode() {
 		final int prime = 31;
@@ -101,7 +133,19 @@
 		return processor.process((T) this);
 	}
 	
+	protected void addAdapter(Object adapter) {
+		adapters.add(adapter);
+	}
+	
 	/**
+	 * 適用可能なアダプタのリストを取得する。
+	 * @return 適用可能なアダプタのリスト
+	 */
+	protected List<Object> getAdapters() {
+		return UnmodifiableList.decorate(adapters);
+	}
+	
+	/**
 	 * モデルIDを設定する。
 	 * 
 	 * <p>モデルIDは、このモデルのライフサイクル(生成から削除まで)を通して一貫しているべきであり、通常このメソッドは

Modified: artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/core/model/JiemamyModel.java
===================================================================
--- artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/core/model/JiemamyModel.java	2008-09-17 16:02:38 UTC (rev 1928)
+++ artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/core/model/JiemamyModel.java	2008-09-17 16:32:37 UTC (rev 1929)
@@ -23,6 +23,7 @@
 
 import org.seasar.framework.util.Disposable;
 
+import org.jiemamy.core.adapter.Adaptable;
 import org.jiemamy.core.event.Observable;
 import org.jiemamy.core.utils.Processor;
 
@@ -30,7 +31,7 @@
  * Jiemamyが扱う、ユーザが定義するDB設計に関わるデータ(モデル)インターフェイス。
  * @author daisuke
  */
-public interface JiemamyModel extends Serializable, Disposable, Observable {
+public interface JiemamyModel extends Serializable, Disposable, Observable, Adaptable {
 	
 	/**
 	 * モデルIDを取得する。

Modified: artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/core/model/node/TableModel.java
===================================================================
--- artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/core/model/node/TableModel.java	2008-09-17 16:02:38 UTC (rev 1928)
+++ artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/core/model/node/TableModel.java	2008-09-17 16:32:37 UTC (rev 1929)
@@ -44,16 +44,13 @@
 	/** テーブルCHECK制約のリスト */
 	private List<CheckConstraintModel> checks = ObservableList.decorate(new ArrayList<CheckConstraintModel>());
 	
-	/** Event通知系の処理を代行させるためのChangeSupport */
-	private TableModelChangeSupport changeSupport = new TableModelChangeSupport(this);
-	
 
-	
 	/**
 	 * コンストラクタ。
 	 * @category instance creation
 	 */
 	public TableModel() {
+		this(null);
 	}
 	
 	/**
@@ -63,6 +60,7 @@
 	 */
 	public TableModel(String name) {
 		super(name);
+		addAdapter(new TableModelChangeSupport(this));
 	}
 	
 	/**
@@ -137,21 +135,4 @@
 	void setIndexes(List<IndexModel> indexes) {
 		this.indexes = indexes;
 	}
-
-
-	/**
-	 * Event通知系の処理を代行させるためのChangeSupportを取得します。
-	 * @return Event通知系の処理を代行させるためのChangeSupport
-	 */
-	public TableModelChangeSupport getChangeSupport() {
-		return changeSupport;
-	}
-
-	/**
-	 * Event通知系の処理を代行させるためのChangeSupportを設定します。
-	 * @param changeSupport Event通知系の処理を代行させるためのChangeSupport
-	 */
-	public void setChangeSupport(TableModelChangeSupport changeSupport) {
-		this.changeSupport = changeSupport;
-	}
 }

Modified: artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/core/model/typedef/datatype/AbstractDataType.java
===================================================================
--- artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/core/model/typedef/datatype/AbstractDataType.java	2008-09-17 16:02:38 UTC (rev 1928)
+++ artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/core/model/typedef/datatype/AbstractDataType.java	2008-09-17 16:32:37 UTC (rev 1929)
@@ -20,9 +20,6 @@
 
 import java.util.List;
 
-import org.apache.commons.collections15.list.UnmodifiableList;
-import org.seasar.framework.util.tiger.CollectionsUtil;
-
 import org.jiemamy.core.model.AbstractModel;
 import org.jiemamy.core.model.typedef.datatype.adapter.DataTypeAdapter;
 
@@ -32,46 +29,18 @@
  */
 public abstract class AbstractDataType extends AbstractModel implements DataType {
 	
-	/** 適用可能なアダプタのリスト */
-	private List<DataTypeAdapter> adapters = CollectionsUtil.newArrayList();
-	
-
 	/**
 	 * {@inheritDoc}
+	 * publicとして公開。
 	 */
-	@SuppressWarnings("unchecked")
-	public <T>T getAdapter(Class<T> adapter) {
-		for (DataTypeAdapter myAdapter : adapters) {
-			if (myAdapter.getClass().isAssignableFrom(adapter)) {
-				return (T) myAdapter;
-			}
-		}
-		return null;
+	@Override
+	public List<Object> getAdapters() {
+		return super.getAdapters();
 	}
 	
 	/**
-	 * 適用可能なアダプタのリストを取得する。
-	 * @return 適用可能なアダプタのリスト
-	 */
-	public List<DataTypeAdapter> getAdapters() {
-		return UnmodifiableList.decorate(adapters);
-	}
-	
-	/**
 	 * {@inheritDoc}
 	 */
-	public boolean hasAdapter(Class<?> adapter) {
-		for (DataTypeAdapter myAdapter : adapters) {
-			if (myAdapter.getClass().isAssignableFrom(adapter)) {
-				return true;
-			}
-		}
-		return false;
-	}
-	
-	/**
-	 * {@inheritDoc}
-	 */
 	public AbstractDataType removeAdapter() {
 		return this;
 	}
@@ -86,9 +55,10 @@
 	
 	/**
 	 * 自身に適用可能なアダプタを登録する。
-	 * @param adapter アダプタのインスタンス
+	 * @param adapter   アダプタのインスタンス
 	 */
 	protected void register(DataTypeAdapter adapter) {
-		adapters.add(adapter);
+		addAdapter(adapter);
 	}
+	
 }

Modified: artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/core/model/typedef/datatype/DataType.java
===================================================================
--- artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/core/model/typedef/datatype/DataType.java	2008-09-17 16:02:38 UTC (rev 1928)
+++ artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/core/model/typedef/datatype/DataType.java	2008-09-17 16:32:37 UTC (rev 1929)
@@ -26,18 +26,9 @@
  * 
  * @author daisuke
  */
-public interface DataType extends Adaptable, JiemamyModel {
+public interface DataType extends JiemamyModel {
 	
 	/**
-	 * 指定したアダプタを適用したインスタンスを取得する。
-	 * 既に何らかのアダプタが適用されていた場合は、そのアダプタを取り外した上で、要求されたアダプタを適用する。
-	 * @param <T> アダプタが持つ型
-	 * @param adapter アダプタクラス
-	 * @return アダプタのインスタンス
-	 */
-	<T>T getAdapter(Class<T> adapter);
-	
-	/**
 	 * アダプタが適用されていた場合は、取り除く。
 	 * 適用されていなかった場合は何もせず、自分自身を返す。
 	 * @return アダプタが何も適用されていない状態のAdaptable

Modified: artemis/trunk/org.jiemamy.core/src/test/java/org/jiemamy/core/model/node/TableModelTest.java
===================================================================
--- artemis/trunk/org.jiemamy.core/src/test/java/org/jiemamy/core/model/node/TableModelTest.java	2008-09-17 16:02:38 UTC (rev 1928)
+++ artemis/trunk/org.jiemamy.core/src/test/java/org/jiemamy/core/model/node/TableModelTest.java	2008-09-17 16:32:37 UTC (rev 1929)
@@ -23,7 +23,6 @@
 import org.junit.After;
 import org.junit.Before;
 import org.junit.BeforeClass;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.seasar.framework.container.S2Container;
 import org.seasar.framework.container.factory.S2ContainerFactory;
@@ -33,6 +32,7 @@
 import org.jiemamy.core.event.SetterInterceptor;
 import org.jiemamy.core.event.collectionimpl.ObservableListTest;
 import org.jiemamy.core.event.model.node.TableModelChangeListener;
+import org.jiemamy.core.event.model.node.TableModelChangeSupport;
 import org.jiemamy.core.model.RootModel;
 import org.jiemamy.core.model.node.index.IndexModel;
 import org.jiemamy.core.model.typedef.ColumnModel;
@@ -78,18 +78,15 @@
 		listener = null;
 	}
 	
+	/**
+	 * Componentの自動登録機能を確認する。
+	 */
 	@Test
-	@Ignore("")
 	public void test00_Componentの自動登録機能を確認する() {
-		System.out.println("0");
 		assertNotNull(s2container.getComponent(RootModel.class));
-		System.out.println("1");
 		assertNotNull(s2container.getComponent(TableModel.class));
-		System.out.println("2");
 		assertNotNull(s2container.getComponent(ColumnModel.class));
-		System.out.println("3");
 		assertNotNull(s2container.getComponent(SetterInterceptor.class));
-		System.out.println("4");
 	}
 	
 	/**
@@ -101,7 +98,7 @@
 		List<ColumnModel> columns = tableModel01.getColumns();
 		List<CheckConstraintModel> checks = tableModel01.getChecks();
 		List<IndexModel> indexes = tableModel01.getIndexes();
-		tableModel01.getChangeSupport().addTableModelChangeListener(listener);
+		tableModel01.getAdapter(TableModelChangeSupport.class).addTableModelChangeListener(listener);
 		ColumnModel[] columnModels = ObservableListTest.newTestColumnModels(s2container);
 		// TableModelより取得したColumnModel用のCollectionに要素の追加を行う。
 		listener.clear();


Jiemamy-notify メーリングリストの案内
Zurück zum Archiv-Index