[Jiemamy-notify] commit [1990] Collectionの要素がObservableを実装しているか?の判断で、直接 instanceof Observableとなっていた。

Zurück zum Archiv-Index

svnno****@sourc***** svnno****@sourc*****
2008年 10月 5日 (日) 02:31:33 JST


Revision: 1990
          http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=jiemamy&view=rev&rev=1990
Author:   shin1
Date:     2008-10-05 02:31:32 +0900 (Sun, 05 Oct 2008)

Log Message:
-----------
Collectionの要素がObservableを実装しているか?の判断で、直接 instanceof Observableとなっていた。
これの判断方法を、getAdapter(Observable.class)がnull以外を返す、と変更した。

Modified Paths:
--------------
    zeus/trunk/org.jiemamy.spec.event/src/main/java/org/jiemamy/spec/event/collectionimpl/ObservableList.java
    zeus/trunk/org.jiemamy.spec.event/src/main/java/org/jiemamy/spec/event/collectionimpl/ObservableMap.java
    zeus/trunk/org.jiemamy.spec.event/src/main/java/org/jiemamy/spec/event/collectionimpl/ObservableSet.java


-------------- next part --------------
Modified: zeus/trunk/org.jiemamy.spec.event/src/main/java/org/jiemamy/spec/event/collectionimpl/ObservableList.java
===================================================================
--- zeus/trunk/org.jiemamy.spec.event/src/main/java/org/jiemamy/spec/event/collectionimpl/ObservableList.java	2008-10-04 16:07:52 UTC (rev 1989)
+++ zeus/trunk/org.jiemamy.spec.event/src/main/java/org/jiemamy/spec/event/collectionimpl/ObservableList.java	2008-10-04 17:31:32 UTC (rev 1990)
@@ -1,20 +1,16 @@
 /*
- * Copyright 2007-2008 MIYAMOTO Daisuke, jiemamy.org and the Others.
- * Created on 2008/06/29
- *
+ * Copyright 2007-2008 MIYAMOTO Daisuke, jiemamy.org and the Others. Created on 2008/06/29
+ * 
  * This file is part of Jiemamy.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
- * either express or implied. See the License for the specific language
- * governing permissions and limitations under the License.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
  */
 package org.jiemamy.spec.event.collectionimpl;
 
@@ -25,6 +21,7 @@
 import java.util.List;
 import java.util.ListIterator;
 
+import org.jiemamy.spec.Adaptable;
 import org.jiemamy.spec.event.ModelChangeEvent;
 import org.jiemamy.spec.event.ModelChangeListener;
 import org.jiemamy.spec.event.Observable;
@@ -90,8 +87,8 @@
 				this, index, element));
 		list.add(index, element);
 		// 要素に対する監視を開始する。
-		if (element instanceof Observable) {
-			Observable observable = (Observable) element;
+		Observable observable = getObservableAdapter(element);
+		if (observable != null) {
 			observable.addModelChangeListener(modelChangeListener);
 		}
 		fireChange(new ObservableCollectionChangeEvent<List<T>, T>(ObservableCollectionChangeEvent.Timing.AFTER_ADD,
@@ -108,8 +105,8 @@
 				this, index, o));
 		boolean result = list.add(o);
 		// 要素に対する監視を開始する。
-		if (o instanceof Observable) {
-			Observable observable = (Observable) o;
+		Observable observable = getObservableAdapter(o);
+		if (observable != null) {
 			observable.addModelChangeListener(modelChangeListener);
 		}
 		fireChange(new ObservableCollectionChangeEvent<List<T>, T>(ObservableCollectionChangeEvent.Timing.AFTER_ADD,
@@ -271,7 +268,8 @@
 				ObservableCollectionChangeEvent.Timing.BEFORE_REMOVE, this, index, element));
 		T result = list.remove(index);
 		// 要素に対する監視をやめる。
-		if (element instanceof Observable) {
+		Observable observable = getObservableAdapter(element);
+		if (observable != null) {
 			((Observable) element).removeModelChangeListener(modelChangeListener);
 		}
 		fireChange(new ObservableCollectionChangeEvent<List<T>, T>(ObservableCollectionChangeEvent.Timing.AFTER_REMOVE,
@@ -291,7 +289,8 @@
 				ObservableCollectionChangeEvent.Timing.BEFORE_REMOVE, this, index, (T) o));
 		boolean result = list.remove(o);
 		// 要素に対する監視をやめる。
-		if (o instanceof Observable) {
+		Observable observable = getObservableAdapter((T) o);
+		if (observable != null) {
 			((Observable) o).removeModelChangeListener(modelChangeListener);
 		}
 		fireChange(new ObservableCollectionChangeEvent<List<T>, T>(ObservableCollectionChangeEvent.Timing.AFTER_REMOVE,
@@ -416,6 +415,19 @@
 		}
 	}
 	
+	/**
+	 * valueが{@link Observable}の実装を持っていれば、そのインタスンスを返す。
+	 * @param value
+	 * @return valueが{@link Observable}の実装を持っていない場合はnullを返す。
+	 */
+	private Observable getObservableAdapter(T value) {
+		if (value instanceof Adaptable) {
+			return ((Adaptable) value).getAdapter(Observable.class);
+		} else {
+			return null;
+		}
+	}
+	
 
 	/**
 	 * 要素に対する変更を監視する。

Modified: zeus/trunk/org.jiemamy.spec.event/src/main/java/org/jiemamy/spec/event/collectionimpl/ObservableMap.java
===================================================================
--- zeus/trunk/org.jiemamy.spec.event/src/main/java/org/jiemamy/spec/event/collectionimpl/ObservableMap.java	2008-10-04 16:07:52 UTC (rev 1989)
+++ zeus/trunk/org.jiemamy.spec.event/src/main/java/org/jiemamy/spec/event/collectionimpl/ObservableMap.java	2008-10-04 17:31:32 UTC (rev 1990)
@@ -25,6 +25,7 @@
 import java.util.Map;
 import java.util.Set;
 
+import org.jiemamy.spec.Adaptable;
 import org.jiemamy.spec.event.ModelChangeEvent;
 import org.jiemamy.spec.event.ModelChangeListener;
 import org.jiemamy.spec.event.Observable;
@@ -111,9 +112,9 @@
 		for (V value : removedList) {
 			fireChange(new ObservableCollectionChangeEvent<Map<K, V>, V>(
 					ObservableCollectionChangeEvent.Timing.AFTER_REMOVE, this, index++, value));
-			if (value instanceof Observable) {
-				Observable abstractModel = (Observable) value;
-				abstractModel.removeModelChangeListener(modelChangeListener);
+			Observable observable = getObservableAdapter(value);
+			if (observable != null) {
+				observable.removeModelChangeListener(modelChangeListener);
 			}
 		}
 		removedList.clear();
@@ -169,9 +170,9 @@
 		fireChange(new ObservableCollectionChangeEvent<Map<K, V>, V>(ObservableCollectionChangeEvent.Timing.BEFORE_ADD,
 				this, index, value));
 		V result = map.put(key, value);
-		if (value instanceof Observable) {
-			Observable abstractModel = (Observable) value;
-			abstractModel.addModelChangeListener(modelChangeListener);
+		Observable observable = getObservableAdapter(value);
+		if (observable != null) {
+			observable.addModelChangeListener(modelChangeListener);
 		}
 		fireChange(new ObservableCollectionChangeEvent<Map<K, V>, V>(ObservableCollectionChangeEvent.Timing.AFTER_ADD,
 				this, index, value));
@@ -201,9 +202,9 @@
 		V result = map.remove(key);
 		fireChange(new ObservableCollectionChangeEvent<Map<K, V>, V>(
 				ObservableCollectionChangeEvent.Timing.AFTER_REMOVE, this, index, result));
-		if (result instanceof Observable) {
-			Observable abstractModel = (Observable) result;
-			abstractModel.removeModelChangeListener(modelChangeListener);
+		Observable observable = getObservableAdapter(result);
+		if (observable != null) {
+			observable.removeModelChangeListener(modelChangeListener);
 		}
 		return result;
 	}
@@ -237,6 +238,19 @@
 		}
 	}
 	
+	/**
+	 * valueが{@link Observable}の実装を持っていれば、そのインタスンスを返す。
+	 * @param value
+	 * @return valueが{@link Observable}の実装を持っていない場合はnullを返す。
+	 */
+	private Observable getObservableAdapter(V value) {
+		if (value instanceof Adaptable) {
+			return ((Adaptable) value).getAdapter(Observable.class);
+		} else {
+			return null;
+		}
+	}
+	
 
 	/**
 	 * 要素に対する変更を監視する。
@@ -265,6 +279,7 @@
 		@SuppressWarnings("unchecked")
 		public void modelChanged(ModelChangeEvent e) {
 //			int index = indexOf(e.getSource());
+			System.out.println(getClass().getSimpleName() + "#modelChanged");
 			int index = -1;
 			fireChange(new ObservableCollectionChangeEvent<Map<K, V>, V>(
 					ObservableCollectionChangeEvent.Timing.COLLECTION_CHANGED, list, index, (V) e.getSource()));

Modified: zeus/trunk/org.jiemamy.spec.event/src/main/java/org/jiemamy/spec/event/collectionimpl/ObservableSet.java
===================================================================
--- zeus/trunk/org.jiemamy.spec.event/src/main/java/org/jiemamy/spec/event/collectionimpl/ObservableSet.java	2008-10-04 16:07:52 UTC (rev 1989)
+++ zeus/trunk/org.jiemamy.spec.event/src/main/java/org/jiemamy/spec/event/collectionimpl/ObservableSet.java	2008-10-04 17:31:32 UTC (rev 1990)
@@ -25,6 +25,7 @@
 import java.util.List;
 import java.util.Set;
 
+import org.jiemamy.spec.Adaptable;
 import org.jiemamy.spec.event.ModelChangeEvent;
 import org.jiemamy.spec.event.ModelChangeListener;
 import org.jiemamy.spec.event.Observable;
@@ -90,8 +91,8 @@
 				this, index, o));
 		// 要素に対する監視を開始する。
 		boolean result = set.add(o);
-		if (o instanceof Observable) {
-			Observable observable = (Observable) o;
+		Observable observable = getObservableAdapter(o);
+		if (observable != null) {
 			observable.addModelChangeListener(modelChangeListener);
 		}
 		fireChange(new ObservableCollectionChangeEvent<Set<T>, T>(ObservableCollectionChangeEvent.Timing.AFTER_ADD,
@@ -186,8 +187,8 @@
 				this, index, (T) o));
 		boolean result = set.remove(o);
 		// 要素に対する監視をやめる。
-		if (o instanceof Observable) {
-			Observable observable = (Observable) o;
+		Observable observable = getObservableAdapter((T) o);
+		if (observable != null) {
 			observable.removeModelChangeListener(modelChangeListener);
 		}
 		fireChange(new ObservableCollectionChangeEvent<Set<T>, T>(ObservableCollectionChangeEvent.Timing.AFTER_REMOVE,
@@ -264,6 +265,19 @@
 		}
 	}
 	
+	/**
+	 * valueが{@link Observable}の実装を持っていれば、そのインタスンスを返す。
+	 * @param value
+	 * @return valueが{@link Observable}の実装を持っていない場合はnullを返す。
+	 */
+	private Observable getObservableAdapter(T value) {
+		if (value instanceof Adaptable) {
+			return ((Adaptable) value).getAdapter(Observable.class);
+		} else {
+			return null;
+		}
+	}
+	
 
 	/**
 	 * 要素に対する変更を監視する。


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