You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2008/04/13 19:52:15 UTC

svn commit: r647596 - in /cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src: main/java/org/apache/cayenne/ main/java/org/apache/cayenne/access/ main/java/org/apache/cayenne/access/jdbc/ main/java/org/apache/cayenne/access/types/ main/java/org...

Author: aadamchik
Date: Sun Apr 13 10:52:03 2008
New Revision: 647596

URL: http://svn.apache.org/viewvc?rev=647596&view=rev
Log:
CAY-1026  Drop commons-lang dependency
(replacing ToStringBuilder)

Added:
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/util/ToStringBuilder.java
Modified:
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/DataRow.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomain.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/ColumnDescriptor.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/types/AbstractType.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/Attribute.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/DataMap.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/DbJoin.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/Entity.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/ObjRelationship.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/Relationship.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/AbstractQuery.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/FieldResult.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/remote/ClientChannel.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/remote/RemoteSession.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/map/DbJoinTest.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/xml/TestObject.java

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/DataRow.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/DataRow.java?rev=647596&r1=647595&r2=647596&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/DataRow.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/DataRow.java Sun Apr 13 10:52:03 2008
@@ -27,8 +27,8 @@
 import org.apache.cayenne.map.DbEntity;
 import org.apache.cayenne.map.DbRelationship;
 import org.apache.cayenne.map.ObjEntity;
+import org.apache.cayenne.util.ToStringBuilder;
 import org.apache.cayenne.util.Util;
-import org.apache.commons.lang.builder.ToStringBuilder;
 
 /**
  * DataRow a map that holds values retrieved from the database for a given query row.

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomain.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomain.java?rev=647596&r1=647595&r2=647596&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomain.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomain.java Sun Apr 13 10:52:03 2008
@@ -42,9 +42,9 @@
 import org.apache.cayenne.map.EntitySorter;
 import org.apache.cayenne.query.Query;
 import org.apache.cayenne.query.QueryChain;
+import org.apache.cayenne.util.ToStringBuilder;
 import org.apache.cayenne.util.Util;
 import org.apache.commons.collections.Transformer;
-import org.apache.commons.lang.builder.ToStringBuilder;
 
 /**
  * DataDomain performs query routing functions in Cayenne. DataDomain creates single data
@@ -172,8 +172,7 @@
                     // backwards compatibility mode... only possible in a single-node case
                     // see TODO above
                     if (nodes.size() == 1) {
-                        entitySorter = nodes.values().iterator().next()
-                                .getEntitySorter();
+                        entitySorter = nodes.values().iterator().next().getEntitySorter();
                     }
                     else {
                         entitySorter = new AshwoodEntitySorter(getDataMaps());
@@ -256,8 +255,9 @@
         if (queryCacheFactory != null
                 && dataContextFactory != null
                 && !Util.isEmptyString(dataContextFactory.toString())) {
-            queryCacheFactory = createInstance(queryCacheFactory
-                    .toString(), QueryCacheFactory.class);
+            queryCacheFactory = createInstance(
+                    queryCacheFactory.toString(),
+                    QueryCacheFactory.class);
         }
         else {
             queryCacheFactory = null;

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/ColumnDescriptor.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/ColumnDescriptor.java?rev=647596&r1=647595&r2=647596&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/ColumnDescriptor.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/ColumnDescriptor.java Sun Apr 13 10:52:03 2008
@@ -27,9 +27,9 @@
 import org.apache.cayenne.map.DbAttribute;
 import org.apache.cayenne.map.ObjAttribute;
 import org.apache.cayenne.map.ProcedureParameter;
+import org.apache.cayenne.util.ToStringBuilder;
 import org.apache.commons.lang.builder.EqualsBuilder;
 import org.apache.commons.lang.builder.HashCodeBuilder;
-import org.apache.commons.lang.builder.ToStringBuilder;
 
 /**
  * A descriptor of a ResultSet column.

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/types/AbstractType.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/types/AbstractType.java?rev=647596&r1=647595&r2=647596&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/types/AbstractType.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/types/AbstractType.java Sun Apr 13 10:52:03 2008
@@ -23,8 +23,8 @@
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 
-import org.apache.commons.lang.builder.ToStringBuilder;
 import org.apache.cayenne.map.DbAttribute;
+import org.apache.cayenne.util.ToStringBuilder;
 import org.apache.cayenne.validation.BeanValidationFailure;
 import org.apache.cayenne.validation.ValidationResult;
 

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/Attribute.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/Attribute.java?rev=647596&r1=647595&r2=647596&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/Attribute.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/Attribute.java Sun Apr 13 10:52:03 2008
@@ -17,15 +17,14 @@
  *  under the License.
  ****************************************************************/
 
-
 package org.apache.cayenne.map;
 
 import java.io.Serializable;
 
 import org.apache.cayenne.util.CayenneMapEntry;
+import org.apache.cayenne.util.ToStringBuilder;
 import org.apache.cayenne.util.XMLEncoder;
 import org.apache.cayenne.util.XMLSerializable;
-import org.apache.commons.lang.builder.ToStringBuilder;
 
 /**
  * Defines a property descriptor that is a part of an Entity. Two examples of things that
@@ -50,12 +49,12 @@
     public Attribute(String name) {
         this.name = name;
     }
-    
+
     @Override
     public String toString() {
         return new ToStringBuilder(this).append("name", getName()).toString();
     }
-    
+
     public abstract void encodeAsXML(XMLEncoder encoder);
 
     /**

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/DataMap.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/DataMap.java?rev=647596&r1=647595&r2=647596&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/DataMap.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/DataMap.java Sun Apr 13 10:52:03 2008
@@ -39,10 +39,10 @@
 import org.apache.cayenne.query.NamedQuery;
 import org.apache.cayenne.query.Query;
 import org.apache.cayenne.query.SQLResultSetMapping;
+import org.apache.cayenne.util.ToStringBuilder;
 import org.apache.cayenne.util.Util;
 import org.apache.cayenne.util.XMLEncoder;
 import org.apache.cayenne.util.XMLSerializable;
-import org.apache.commons.lang.builder.ToStringBuilder;
 
 /**
  * Stores a collection of related mapping objects that describe database and object layers

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/DbJoin.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/DbJoin.java?rev=647596&r1=647595&r2=647596&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/DbJoin.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/DbJoin.java Sun Apr 13 10:52:03 2008
@@ -20,9 +20,9 @@
 package org.apache.cayenne.map;
 
 import org.apache.cayenne.CayenneRuntimeException;
+import org.apache.cayenne.util.ToStringBuilder;
 import org.apache.cayenne.util.XMLEncoder;
 import org.apache.cayenne.util.XMLSerializable;
-import org.apache.commons.lang.builder.ToStringBuilder;
 
 /**
  * Defines a join between two attributes of a given relationship.

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/Entity.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/Entity.java?rev=647596&r1=647595&r2=647596&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/Entity.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/Entity.java Sun Apr 13 10:52:03 2008
@@ -31,8 +31,8 @@
 import org.apache.cayenne.exp.Expression;
 import org.apache.cayenne.exp.ExpressionException;
 import org.apache.cayenne.util.CayenneMapEntry;
+import org.apache.cayenne.util.ToStringBuilder;
 import org.apache.cayenne.util.XMLSerializable;
-import org.apache.commons.lang.builder.ToStringBuilder;
 
 /**
  * An Entity is an abstract descriptor for an entity mapping concept. Entity can represent

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/ObjRelationship.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/ObjRelationship.java?rev=647596&r1=647595&r2=647596&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/ObjRelationship.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/ObjRelationship.java Sun Apr 13 10:52:03 2008
@@ -30,9 +30,9 @@
 import org.apache.cayenne.exp.parser.ASTDbPath;
 import org.apache.cayenne.map.event.RelationshipEvent;
 import org.apache.cayenne.util.CayenneMapEntry;
+import org.apache.cayenne.util.ToStringBuilder;
 import org.apache.cayenne.util.Util;
 import org.apache.cayenne.util.XMLEncoder;
-import org.apache.commons.lang.builder.ToStringBuilder;
 
 /**
  * Describes an association between two Java classes mapped as source and target

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/Relationship.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/Relationship.java?rev=647596&r1=647595&r2=647596&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/Relationship.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/Relationship.java Sun Apr 13 10:52:03 2008
@@ -23,8 +23,8 @@
 
 import org.apache.cayenne.CayenneRuntimeException;
 import org.apache.cayenne.util.CayenneMapEntry;
+import org.apache.cayenne.util.ToStringBuilder;
 import org.apache.cayenne.util.XMLSerializable;
-import org.apache.commons.lang.builder.ToStringBuilder;
 
 /**
  * Defines a relationship between two entities. In a DataMap graph relationships represent

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/AbstractQuery.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/AbstractQuery.java?rev=647596&r1=647595&r2=647596&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/AbstractQuery.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/AbstractQuery.java Sun Apr 13 10:52:03 2008
@@ -19,13 +19,13 @@
 
 package org.apache.cayenne.query;
 
-import org.apache.commons.lang.builder.ToStringBuilder;
 import org.apache.cayenne.CayenneRuntimeException;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.map.DbEntity;
 import org.apache.cayenne.map.EntityResolver;
 import org.apache.cayenne.map.ObjEntity;
 import org.apache.cayenne.map.Procedure;
+import org.apache.cayenne.util.ToStringBuilder;
 
 /**
  * A common superclass of Cayenne queries.

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/FieldResult.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/FieldResult.java?rev=647596&r1=647595&r2=647596&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/FieldResult.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/FieldResult.java Sun Apr 13 10:52:03 2008
@@ -18,7 +18,7 @@
  ****************************************************************/
 package org.apache.cayenne.query;
 
-import org.apache.commons.lang.builder.ToStringBuilder;
+import org.apache.cayenne.util.ToStringBuilder;
 
 /**
  * A metadata object that maps a result set column to an ObjAttribute or DbAttribute. Used
@@ -36,7 +36,7 @@
 
     FieldResult(String entityName, String attributeName, String column,
             boolean dbAttribute) {
-        
+
         this.entityName = entityName;
         this.attributeName = attributeName;
         this.column = column;
@@ -46,7 +46,7 @@
     public String getEntityName() {
         return entityName;
     }
-    
+
     public String getAttributeName() {
         return attributeName;
     }

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/remote/ClientChannel.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/remote/ClientChannel.java?rev=647596&r1=647595&r2=647596&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/remote/ClientChannel.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/remote/ClientChannel.java Sun Apr 13 10:52:03 2008
@@ -22,7 +22,6 @@
 import java.util.List;
 import java.util.ListIterator;
 
-import org.apache.commons.lang.builder.ToStringBuilder;
 import org.apache.cayenne.CayenneRuntimeException;
 import org.apache.cayenne.DataChannel;
 import org.apache.cayenne.ObjectContext;
@@ -41,6 +40,7 @@
 import org.apache.cayenne.query.QueryMetadata;
 import org.apache.cayenne.reflect.ClassDescriptor;
 import org.apache.cayenne.util.DeepMergeOperation;
+import org.apache.cayenne.util.ToStringBuilder;
 
 /**
  * A {@link org.apache.cayenne.DataChannel} implementation that accesses a remote server
@@ -170,7 +170,7 @@
             ObjectContext originatingContext,
             GraphDiff changes,
             int syncType) {
-        
+
         changes = diffCompressor.compress(changes);
 
         GraphDiff replyDiff = (GraphDiff) send(new SyncMessage(

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/remote/RemoteSession.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/remote/RemoteSession.java?rev=647596&r1=647595&r2=647596&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/remote/RemoteSession.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/remote/RemoteSession.java Sun Apr 13 10:52:03 2008
@@ -25,13 +25,13 @@
 import java.util.Collections;
 import java.util.Map;
 
-import org.apache.commons.lang.builder.HashCodeBuilder;
-import org.apache.commons.lang.builder.ToStringBuilder;
 import org.apache.cayenne.CayenneRuntimeException;
 import org.apache.cayenne.DataChannel;
 import org.apache.cayenne.event.EventBridge;
 import org.apache.cayenne.event.EventBridgeFactory;
 import org.apache.cayenne.event.EventSubject;
+import org.apache.cayenne.util.ToStringBuilder;
+import org.apache.commons.lang.builder.HashCodeBuilder;
 
 /**
  * A descriptor used by default service implementation to pass session parameters to the

Added: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/util/ToStringBuilder.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/util/ToStringBuilder.java?rev=647596&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/util/ToStringBuilder.java (added)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/util/ToStringBuilder.java Sun Apr 13 10:52:03 2008
@@ -0,0 +1,224 @@
+/*****************************************************************
+ *   Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.apache.cayenne.util;
+
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * A utility class to simplify implementation of Object toString methods. This
+ * implementation is a trimmed version of commons-lang ToStringBuilder.
+ * 
+ * @since 3.0
+ * @author Andrus Adamchik
+ */
+public class ToStringBuilder {
+
+    protected StringBuilder buffer;
+    protected Object object;
+    protected int fieldCount;
+
+    public ToStringBuilder(Object object) {
+        this.object = object;
+        this.buffer = new StringBuilder(128);
+
+        appendClassName();
+        appendIdentityHashCode();
+        buffer.append('[');
+    }
+
+    public ToStringBuilder append(String fieldName, Object value) {
+
+        if (fieldCount++ > 0) {
+            buffer.append(',');
+        }
+
+        buffer.append(fieldName).append('=');
+
+        if (value == null) {
+            buffer.append("<null>");
+        }
+        else {
+            appendDetail(value);
+        }
+
+        return this;
+    }
+
+    protected void appendDetail(Object value) {
+
+        if (value instanceof Collection) {
+            buffer.append(value);
+        }
+        else if (value instanceof Map) {
+            buffer.append(value);
+        }
+        else if (value instanceof long[]) {
+            appendArray((long[]) value);
+        }
+        else if (value instanceof int[]) {
+            appendArray((int[]) value);
+        }
+        else if (value instanceof short[]) {
+            appendArray((short[]) value);
+        }
+        else if (value instanceof byte[]) {
+            appendArray((byte[]) value);
+        }
+        else if (value instanceof char[]) {
+            appendArray((char[]) value);
+        }
+        else if (value instanceof double[]) {
+            appendArray((double[]) value);
+        }
+        else if (value instanceof float[]) {
+            appendArray((float[]) value);
+        }
+        else if (value instanceof boolean[]) {
+            appendArray((boolean[]) value);
+        }
+        else if (value.getClass().isArray()) {
+            appendArray((Object[]) value);
+        }
+        else {
+            buffer.append(value);
+        }
+    }
+
+    protected void appendArray(short[] array) {
+        buffer.append('{');
+        for (int i = 0; i < array.length; i++) {
+            if (i > 0) {
+                buffer.append(',');
+            }
+            buffer.append(array[i]);
+        }
+        buffer.append('}');
+    }
+
+    protected void appendArray(int[] array) {
+        buffer.append('{');
+        for (int i = 0; i < array.length; i++) {
+            if (i > 0) {
+                buffer.append(',');
+            }
+            buffer.append(array[i]);
+        }
+        buffer.append('}');
+    }
+
+    protected void appendArray(float[] array) {
+        buffer.append('{');
+        for (int i = 0; i < array.length; i++) {
+            if (i > 0) {
+                buffer.append(',');
+            }
+            buffer.append(array[i]);
+        }
+        buffer.append('}');
+    }
+
+    protected void appendArray(long[] array) {
+        buffer.append('{');
+        for (int i = 0; i < array.length; i++) {
+            if (i > 0) {
+                buffer.append(',');
+            }
+            buffer.append(array[i]);
+        }
+        buffer.append('}');
+    }
+
+    protected void appendArray(byte[] array) {
+        buffer.append('{');
+        for (int i = 0; i < array.length; i++) {
+            if (i > 0) {
+                buffer.append(',');
+            }
+            buffer.append(array[i]);
+        }
+        buffer.append('}');
+    }
+
+    protected void appendArray(double[] array) {
+        buffer.append('{');
+        for (int i = 0; i < array.length; i++) {
+            if (i > 0) {
+                buffer.append(',');
+            }
+            buffer.append(array[i]);
+        }
+        buffer.append('}');
+    }
+
+    protected void appendArray(char[] array) {
+        buffer.append('{');
+        for (int i = 0; i < array.length; i++) {
+            if (i > 0) {
+                buffer.append(',');
+            }
+            buffer.append(array[i]);
+        }
+        buffer.append('}');
+    }
+
+    protected void appendArray(boolean[] array) {
+        buffer.append('{');
+        for (int i = 0; i < array.length; i++) {
+            if (i > 0) {
+                buffer.append(',');
+            }
+            buffer.append(array[i]);
+        }
+        buffer.append('}');
+    }
+
+    protected void appendArray(Object[] array) {
+        buffer.append('{');
+        for (int i = 0; i < array.length; i++) {
+            if (i > 0) {
+                buffer.append(',');
+            }
+            appendDetail(array[i]);
+        }
+        buffer.append('}');
+    }
+
+    protected void appendClassName() {
+        if (object != null) {
+            buffer.append(object.getClass().getName());
+        }
+    }
+
+    protected void appendIdentityHashCode() {
+        if (object != null) {
+            buffer.append('@');
+            buffer.append(Integer.toHexString(System.identityHashCode(object)));
+        }
+    }
+
+    /**
+     * Returns a String built by the earlier invocations.
+     */
+    @Override
+    public String toString() {
+        buffer.append(']');
+        return buffer.toString();
+    }
+}

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/map/DbJoinTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/map/DbJoinTest.java?rev=647596&r1=647595&r2=647596&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/map/DbJoinTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/map/DbJoinTest.java Sun Apr 13 10:52:03 2008
@@ -17,7 +17,6 @@
  *  under the License.
  ****************************************************************/
 
-
 package org.apache.cayenne.map;
 
 import junit.framework.TestCase;
@@ -34,6 +33,17 @@
         DbRelationship relationship = new DbRelationship("abc");
         join.setRelationship(relationship);
         assertSame(relationship, join.getRelationship());
+    }
+
+    public void testToString() {
+        DbJoin join = new DbJoin();
+        join.setSourceName("X");
+        join.setTargetName("Y");
+
+        String string = join.toString();
+
+        assertTrue(string, string.startsWith("org.apache.cayenne.map.DbJoin@"));
+        assertTrue(string, string.endsWith("[source=X,target=Y]"));
     }
 
 }

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/xml/TestObject.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/xml/TestObject.java?rev=647596&r1=647595&r2=647596&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/xml/TestObject.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/xml/TestObject.java Sun Apr 13 10:52:03 2008
@@ -22,8 +22,8 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.commons.lang.builder.ToStringBuilder;
 import org.apache.cayenne.CayenneDataObject;
+import org.apache.cayenne.util.ToStringBuilder;
 import org.apache.cayenne.util.Util;
 
 /**
@@ -34,7 +34,7 @@
     protected String name = "";
     protected int age;
     protected boolean open;
-    protected List children = new ArrayList();
+    protected List<TestObject> children = new ArrayList<TestObject>();
     protected TestObject parent = null;
 
     public TestObject() {
@@ -70,16 +70,16 @@
     public void setOpen(boolean open) {
         this.open = open;
     }
-    
+
     public TestObject getParent() {
         return parent;
     }
-    
+
     public void setParent(TestObject parent) {
         this.parent = parent;
     }
 
-    public void setChildren(List children) {
+    public void setChildren(List<TestObject> children) {
         this.children = children;
     }
 
@@ -91,7 +91,7 @@
         children.remove(child);
     }
 
-    public List getChildren() {
+    public List<TestObject> getChildren() {
         return children;
     }
 
@@ -106,7 +106,7 @@
         if (!Util.nullSafeEquals(name, test.getName())) {
             return false;
         }
-        
+
         if (!Util.nullSafeEquals(parent, test.getParent())) {
             return false;
         }
@@ -117,7 +117,7 @@
     @Override
     public void encodeAsXML(XMLEncoder encoder) {
         encoder.setRoot("Test", this.getClass().getName());
-        
+
         // "parent" must come first to fully test 1-to-1 relationships, per CAY-597.
         encoder.encodeProperty("parent", parent);
         encoder.encodeProperty("name", name);
@@ -128,11 +128,11 @@
 
     @Override
     public void decodeFromXML(XMLDecoder decoder) {
-        
+
         if (null != decoder.decodeObject("parent")) {
             parent = (TestObject) decoder.decodeObject("parent");
         }
-        
+
         if (null != decoder.decodeInteger("age")) {
             age = decoder.decodeInteger("age").intValue();
         }
@@ -140,9 +140,9 @@
         if (null != decoder.decodeBoolean("open")) {
             open = decoder.decodeBoolean("open").booleanValue();
         }
-        
+
         name = decoder.decodeString("name");
-        children = (List) decoder.decodeObject("children");
+        children = (List<TestObject>) decoder.decodeObject("children");
     }
 
     @Override