Return-Path: X-Original-To: apmail-sling-commits-archive@www.apache.org Delivered-To: apmail-sling-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 853FA10B26 for ; Tue, 18 Jun 2013 17:11:28 +0000 (UTC) Received: (qmail 28162 invoked by uid 500); 18 Jun 2013 17:11:28 -0000 Delivered-To: apmail-sling-commits-archive@sling.apache.org Received: (qmail 28096 invoked by uid 500); 18 Jun 2013 17:11:27 -0000 Mailing-List: contact commits-help@sling.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@sling.apache.org Delivered-To: mailing list commits@sling.apache.org Received: (qmail 28089 invoked by uid 99); 18 Jun 2013 17:11:26 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 18 Jun 2013 17:11:26 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 18 Jun 2013 17:11:25 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 3615823889BB; Tue, 18 Jun 2013 17:11:05 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: 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 Date: Tue, 18 Jun 2013 17:11:05 -0000 To: commits@sling.apache.org From: dklco@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20130618171105.3615823889BB@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org 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(); } + }