You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by dk...@apache.org on 2013/06/18 19:11:05 UTC

svn commit: r1494206 - in /sling/whiteboard/dklco/sling-proxy/src/main/java/org/apache/sling/commons/proxy/impl: SlingInvocationHandler.java lang/GetMethodToStringImpl.java lang/JDPToStringImpl.java

Author: dklco
Date: Tue Jun 18 17:11:04 2013
New Revision: 1494206

URL: http://svn.apache.org/r1494206
Log:
Cleaned up the toString implementation to combine the two classes and cleaning up the method naming

Added:
    sling/whiteboard/dklco/sling-proxy/src/main/java/org/apache/sling/commons/proxy/impl/lang/JDPToStringImpl.java
      - copied, changed from r1494195, sling/whiteboard/dklco/sling-proxy/src/main/java/org/apache/sling/commons/proxy/impl/lang/GetMethodToStringImpl.java
Removed:
    sling/whiteboard/dklco/sling-proxy/src/main/java/org/apache/sling/commons/proxy/impl/lang/GetMethodToStringImpl.java
Modified:
    sling/whiteboard/dklco/sling-proxy/src/main/java/org/apache/sling/commons/proxy/impl/SlingInvocationHandler.java

Modified: sling/whiteboard/dklco/sling-proxy/src/main/java/org/apache/sling/commons/proxy/impl/SlingInvocationHandler.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/dklco/sling-proxy/src/main/java/org/apache/sling/commons/proxy/impl/SlingInvocationHandler.java?rev=1494206&r1=1494205&r2=1494206&view=diff
==============================================================================
--- sling/whiteboard/dklco/sling-proxy/src/main/java/org/apache/sling/commons/proxy/impl/SlingInvocationHandler.java (original)
+++ sling/whiteboard/dklco/sling-proxy/src/main/java/org/apache/sling/commons/proxy/impl/SlingInvocationHandler.java Tue Jun 18 17:11:04 2013
@@ -35,7 +35,7 @@ import org.apache.sling.api.resource.Val
 import org.apache.sling.commons.proxy.SlingProxyService;
 import org.apache.sling.commons.proxy.annotations.SlingChildren;
 import org.apache.sling.commons.proxy.annotations.SlingReference;
-import org.apache.sling.commons.proxy.impl.lang.GetMethodToStringImpl;
+import org.apache.sling.commons.proxy.impl.lang.JDPToStringImpl;
 import org.apache.sling.commons.proxy.impl.lang.JDPEqualsImpl;
 import org.apache.sling.commons.proxy.impl.lang.JDPHashCodeImpl;
 import org.apache.sling.commons.proxy.impl.lang.MethodType;
@@ -307,7 +307,7 @@ public class SlingInvocationHandler impl
 			throw new UnsupportedOperationException(
 					"Setter methods not yet implemented.");
 		} else if (to.isType(MethodType.ToString)) {
-			return new GetMethodToStringImpl().toString(proxy);
+			return new JDPToStringImpl().toString(proxy);
 		} else if (to.isType(MethodType.HashCode)) {
 			return new JDPHashCodeImpl().hashCode(proxy);
 		} else if (to.isType(MethodType.Equals)) {

Copied: sling/whiteboard/dklco/sling-proxy/src/main/java/org/apache/sling/commons/proxy/impl/lang/JDPToStringImpl.java (from r1494195, sling/whiteboard/dklco/sling-proxy/src/main/java/org/apache/sling/commons/proxy/impl/lang/GetMethodToStringImpl.java)
URL: http://svn.apache.org/viewvc/sling/whiteboard/dklco/sling-proxy/src/main/java/org/apache/sling/commons/proxy/impl/lang/JDPToStringImpl.java?p2=sling/whiteboard/dklco/sling-proxy/src/main/java/org/apache/sling/commons/proxy/impl/lang/JDPToStringImpl.java&p1=sling/whiteboard/dklco/sling-proxy/src/main/java/org/apache/sling/commons/proxy/impl/lang/GetMethodToStringImpl.java&r1=1494195&r2=1494206&rev=1494206&view=diff
==============================================================================
--- sling/whiteboard/dklco/sling-proxy/src/main/java/org/apache/sling/commons/proxy/impl/lang/GetMethodToStringImpl.java (original)
+++ sling/whiteboard/dklco/sling-proxy/src/main/java/org/apache/sling/commons/proxy/impl/lang/JDPToStringImpl.java Tue Jun 18 17:11:04 2013
@@ -28,9 +28,7 @@ import org.apache.sling.commons.proxy.im
  * 'get' methods on the provided Object.
  * 
  */
-public final class GetMethodToStringImpl {
-
-	private final JDPToStringImpl tostring = new JDPToStringImpl();
+public final class JDPToStringImpl {
 
 	/**
 	 * Adding the interface information to the string representation.
@@ -76,7 +74,7 @@ public final class GetMethodToStringImpl
 				sb.append(m.getName()).append(": ");
 				try {
 					final Object rtnObj = m.invoke(obj, (Object[]) null);
-					sb.append(this.tostring.toString(rtnObj));
+					sb.append(getValueString(rtnObj));
 					if (i < (list.size() - 1)) {
 						sb.append(", ");
 					}
@@ -92,6 +90,81 @@ public final class GetMethodToStringImpl
 	}
 
 	/**
+	 * Generates a toString based on the objects classes and methods.
+	 * 
+	 * @param obj
+	 *            the object to generate the string for
+	 * @param sb
+	 *            the string builder to write to
+	 */
+	private void handleByType(Object obj, StringBuilder sb) {
+		if (obj.getClass().isArray()) {
+			Object[] oa = (Object[]) obj;
+			sb.append("[ ");
+			for (int ndx = 0, max = oa.length; ndx < max; ndx++) {
+				sb.append(getValueString(oa[ndx]));
+				if (ndx + 1 < max) {
+					sb.append(" , ");
+				}
+			}
+			sb.append(" ]");
+		} else {
+			sb.append(obj);
+		}
+	}
+
+	/**
+	 * Generates a String representation of a value object. Limits the length
+	 * and handles null.
+	 * 
+	 * @param obj
+	 *            the object to generate a string of
+	 * @return the string representation
+	 */
+	public String getValueString(Object obj) {
+		StringBuilder sb = new StringBuilder(256);
+
+		if (obj != null) {
+			if (!supportsToString(obj, sb)) {
+				handleByType(obj, sb);
+			}
+		} else {
+			sb.append("null");
+		}
+
+		return sb.toString();
+	}
+
+	/**
+	 * Checks to see if the specified object contains a dedicated toString
+	 * method.
+	 * 
+	 * @param obj
+	 *            the object to check
+	 * @param sb
+	 *            container for the results
+	 * @return whether or not the object has a dedicated toString method
+	 */
+	private boolean supportsToString(Object obj, StringBuilder sb) {
+		try {
+			Method m = obj.getClass().getDeclaredMethod("toString",
+					(Class[]) null);
+			try {
+				Object result = m.invoke(obj, (Object[]) null);
+				sb.append(result);
+			} catch (Exception ex) {
+				sb.append("caused - ").append(ex.getClass().getName())
+						.append(" - Message = ").append(ex.getMessage());
+			}
+			return true;
+		} catch (SecurityException ex) {
+		} catch (NoSuchMethodException ex) {
+		}
+
+		return false;
+	}
+
+	/**
 	 * Generates a String representation of an object.
 	 * 
 	 * @param obj
@@ -103,11 +176,13 @@ public final class GetMethodToStringImpl
 
 		if (obj != null) {
 			this.addInterfaceInfo(obj, sb);
-			this.addMethodReturnValues(obj, Methods.getBeanGetterMethods(obj), sb);
+			this.addMethodReturnValues(obj, Methods.getBeanGetterMethods(obj),
+					sb);
 		} else {
 			sb.append("null");
 		}
 
 		return sb.toString();
 	}
+
 }