Date: 2005-01-13T14:29:50
   Editor: MichelleCaisse
   Wiki: Apache JDO Wiki
   Page: XMLMetadata
   URL: http://wiki.apache.org/jdo/XMLMetadata

   Added email "Comparing objects in Company package"

Change Log:

------------------------------------------------------------------------------
@@ -88,7 +88,54 @@
 
 This will be the last meeting this year, as the following Friday is Christmas 
Eve.
 
-Craig 
+Craig
+
+December 16
+
+Hi,
+
+Michael is experimenting with a BeanFactory package available as part of the 
springframework [sic]. It allows you to define a graph of JavaBeans via an 
external xml file.
+
+We're considering using this package as part of the TCK, as we discussed, to 
implement the Chapter 18 Completeness Test. The idea is to construct a graph of 
objects, persist them, and then make sure they are stored and retrieved 
correctly. Using a tool like BeanFactory will simplify the test.
+
+In order to exploit this package, we need to make some adjustments to the 
Company model that we have discussed as part of the tck. These changes allow us 
to implement a graph compare function that verifies that the object graph 
created and committed is able to be retrieved correctly.
+
+We need to define an interface DeepEquality in org.apache.jdo.tck.util that is 
implemented by all the classes in the company model that defines a method 
called deepEquals that does a deep comparison of "Collection of another 
DeepEquality". The signature of the methods are boolean deepEquals(DeepEquality 
other). We also want a convenience method that "deepEquals" two collections of 
DeepEquality.
+
+The model for this pattern is interface Comparable that defines a method int 
compareTo(Object other).
+
+The idea is that to compare deep collections, the deepEquals method does:
+
+boolean deepEquals(DeepEquality other) {
+Company c = (Company) other;
+this.name.equals(other.name);
+...
+DeepEqualityHelper.deepEquals(this.depts, other.depts);
+...
+}
+
+class DeepEqualityHelper  {
+boolean deepEquals(Collection mine, Collection other) {
+List myList = new ArrayList(mine);
+Collections.sort(myList);
+List otherList = new ArrayList(other);
+Collections.sort(otherList);
+for (i = 0; i < myList.size()) {
+ if (!(DeepEquality)myList.get(i).deepEquals(otherlist.get(i)) return false;
+}
+return true;
+}
+
+boolean shallowEquals(Collection mine, Collection other) {
+List myList = new ArrayList(mine);
+Collections.sort(myList);
+List otherList = new ArrayList(other);
+Collections.sort(otherList);
+return myList.equals(otherList);
+}
+All classes in Company must define equals to delegate to compare and must 
implement Comparable and DeepEquality.
+
+Craig Russell 
 
 December 17:
 

Reply via email to