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