| /* |
| * 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.geronimo.gshell.yarn; |
| |
| // |
| // NOTE: Copied and massaged from commons-lang 2.3 |
| // |
| |
| import java.io.Serializable; |
| import java.lang.reflect.Array; |
| import java.util.Collection; |
| import java.util.HashSet; |
| import java.util.Map; |
| import java.util.Set; |
| |
| /** |
| * Porting/adapting commons-land muck to GShell Yarn. |
| * |
| * @version $Id$ |
| */ |
| abstract class ToStringStyle |
| implements Serializable |
| { |
| /** |
| * The default toString style. |
| */ |
| public static final ToStringStyle DEFAULT_STYLE = new DefaultToStringStyle(); |
| |
| /** |
| * The multi line toString style. |
| */ |
| public static final ToStringStyle MULTI_LINE_STYLE = new MultiLineToStringStyle(); |
| |
| /** |
| * The no field names toString style. |
| */ |
| public static final ToStringStyle NO_FIELD_NAMES_STYLE = new NoFieldNameToStringStyle(); |
| |
| /** |
| * The short prefix toString style. |
| * @since 2.1 |
| */ |
| public static final ToStringStyle SHORT_PREFIX_STYLE = new ShortPrefixToStringStyle(); |
| |
| /** |
| * The simple toString style. |
| */ |
| public static final ToStringStyle SIMPLE_STYLE = new SimpleToStringStyle(); |
| |
| private static ThreadLocal registry = new ThreadLocal() { |
| protected Object initialValue() { |
| // The HashSet implementation is not synchronized, |
| // which is just what we need here. |
| return new HashSet(); |
| } |
| }; |
| |
| static Set getRegistry() { |
| return (Set) registry.get(); |
| } |
| |
| static boolean isRegistered(Object value) { |
| return getRegistry().contains(value); |
| } |
| |
| static void register(Object value) { |
| if (value != null) { |
| getRegistry().add(value); |
| } |
| } |
| |
| |
| static void unregister(Object value) { |
| getRegistry().remove(value); |
| } |
| |
| private boolean useFieldNames = true; |
| |
| private boolean useClassName = true; |
| |
| private boolean useShortClassName = false; |
| |
| private boolean useIdentityHashCode = true; |
| |
| private String contentStart = "{ "; |
| |
| private String contentEnd = " }"; |
| |
| private String fieldNameValueSeparator = "="; |
| |
| private boolean fieldSeparatorAtStart = false; |
| |
| private boolean fieldSeparatorAtEnd = false; |
| |
| private String fieldSeparator = ", "; |
| |
| private String arrayStart = "[ "; |
| |
| private String arraySeparator = ", "; |
| |
| private boolean arrayContentDetail = true; |
| |
| private String arrayEnd = " ]"; |
| |
| private boolean defaultFullDetail = true; |
| |
| private String nullText = "<null>"; |
| |
| private String sizeStartText = "<size="; |
| |
| private String sizeEndText = ">"; |
| |
| private String summaryObjectStartText = "<"; |
| |
| private String summaryObjectEndText = ">"; |
| |
| protected ToStringStyle() { |
| super(); |
| } |
| |
| public void appendSuper(StringBuilder buffer, String superToString) { |
| appendToString(buffer, superToString); |
| } |
| |
| public void appendToString(StringBuilder buffer, String toString) { |
| if (toString != null) { |
| int pos1 = toString.indexOf(contentStart) + contentStart.length(); |
| int pos2 = toString.lastIndexOf(contentEnd); |
| if (pos1 != pos2 && pos1 >= 0 && pos2 >= 0) { |
| String data = toString.substring(pos1, pos2); |
| if (fieldSeparatorAtStart) { |
| removeLastFieldSeparator(buffer); |
| } |
| buffer.append(data); |
| appendFieldSeparator(buffer); |
| } |
| } |
| } |
| |
| public void appendStart(StringBuilder buffer, Object object) { |
| if (object != null) { |
| appendClassName(buffer, object); |
| appendIdentityHashCode(buffer, object); |
| appendContentStart(buffer); |
| if (fieldSeparatorAtStart) { |
| appendFieldSeparator(buffer); |
| } |
| } |
| } |
| |
| public void appendEnd(StringBuilder buffer, Object object) { |
| if (this.fieldSeparatorAtEnd == false) { |
| removeLastFieldSeparator(buffer); |
| } |
| appendContentEnd(buffer); |
| unregister(object); |
| } |
| |
| protected void removeLastFieldSeparator(StringBuilder buffer) { |
| int len = buffer.length(); |
| int sepLen = fieldSeparator.length(); |
| if (len > 0 && sepLen > 0 && len >= sepLen) { |
| boolean match = true; |
| for (int i = 0; i < sepLen; i++) { |
| if (buffer.charAt(len - 1 - i) != fieldSeparator.charAt(sepLen - 1 - i)) { |
| match = false; |
| break; |
| } |
| } |
| if (match) { |
| buffer.setLength(len - sepLen); |
| } |
| } |
| } |
| |
| public void append(StringBuilder buffer, String fieldName, Object value, Boolean fullDetail) { |
| appendFieldStart(buffer, fieldName); |
| |
| if (value == null) { |
| appendNullText(buffer, fieldName); |
| |
| } else { |
| appendInternal(buffer, fieldName, value, isFullDetail(fullDetail)); |
| } |
| |
| appendFieldEnd(buffer, fieldName); |
| } |
| |
| protected void appendInternal(StringBuilder buffer, String fieldName, Object value, boolean detail) { |
| if (isRegistered(value) |
| && !(value instanceof Number || value instanceof Boolean || value instanceof Character)) { |
| appendCyclicObject(buffer, fieldName, value); |
| return; |
| } |
| |
| register(value); |
| |
| try { |
| if (value instanceof Collection) { |
| if (detail) { |
| appendDetail(buffer, fieldName, (Collection) value); |
| } else { |
| appendSummarySize(buffer, fieldName, ((Collection) value).size()); |
| } |
| |
| } else if (value instanceof Map) { |
| if (detail) { |
| appendDetail(buffer, fieldName, (Map) value); |
| } else { |
| appendSummarySize(buffer, fieldName, ((Map) value).size()); |
| } |
| |
| } else if (value instanceof long[]) { |
| if (detail) { |
| appendDetail(buffer, fieldName, (long[]) value); |
| } else { |
| appendSummary(buffer, fieldName, (long[]) value); |
| } |
| |
| } else if (value instanceof int[]) { |
| if (detail) { |
| appendDetail(buffer, fieldName, (int[]) value); |
| } else { |
| appendSummary(buffer, fieldName, (int[]) value); |
| } |
| |
| } else if (value instanceof short[]) { |
| if (detail) { |
| appendDetail(buffer, fieldName, (short[]) value); |
| } else { |
| appendSummary(buffer, fieldName, (short[]) value); |
| } |
| |
| } else if (value instanceof byte[]) { |
| if (detail) { |
| appendDetail(buffer, fieldName, (byte[]) value); |
| } else { |
| appendSummary(buffer, fieldName, (byte[]) value); |
| } |
| |
| } else if (value instanceof char[]) { |
| if (detail) { |
| appendDetail(buffer, fieldName, (char[]) value); |
| } else { |
| appendSummary(buffer, fieldName, (char[]) value); |
| } |
| |
| } else if (value instanceof double[]) { |
| if (detail) { |
| appendDetail(buffer, fieldName, (double[]) value); |
| } else { |
| appendSummary(buffer, fieldName, (double[]) value); |
| } |
| |
| } else if (value instanceof float[]) { |
| if (detail) { |
| appendDetail(buffer, fieldName, (float[]) value); |
| } else { |
| appendSummary(buffer, fieldName, (float[]) value); |
| } |
| |
| } else if (value instanceof boolean[]) { |
| if (detail) { |
| appendDetail(buffer, fieldName, (boolean[]) value); |
| } else { |
| appendSummary(buffer, fieldName, (boolean[]) value); |
| } |
| |
| } else if (value.getClass().isArray()) { |
| if (detail) { |
| appendDetail(buffer, fieldName, (Object[]) value); |
| } else { |
| appendSummary(buffer, fieldName, (Object[]) value); |
| } |
| |
| } else { |
| if (detail) { |
| appendDetail(buffer, fieldName, value); |
| } else { |
| appendSummary(buffer, fieldName, value); |
| } |
| } |
| } finally { |
| unregister(value); |
| } |
| } |
| |
| protected void appendCyclicObject(StringBuilder buffer, String fieldName, Object value) { |
| ObjectUtils_appendIdentityToString(buffer, value); |
| } |
| |
| protected void appendDetail(StringBuilder buffer, String fieldName, Object value) { |
| buffer.append(value); |
| } |
| |
| protected void appendDetail(StringBuilder buffer, String fieldName, Collection coll) { |
| buffer.append(coll); |
| } |
| |
| protected void appendDetail(StringBuilder buffer, String fieldName, Map map) { |
| buffer.append(map); |
| } |
| |
| protected void appendSummary(StringBuilder buffer, String fieldName, Object value) { |
| buffer.append(summaryObjectStartText); |
| buffer.append(getShortClassName(value.getClass())); |
| buffer.append(summaryObjectEndText); |
| } |
| |
| public void append(StringBuilder buffer, String fieldName, long value) { |
| appendFieldStart(buffer, fieldName); |
| appendDetail(buffer, fieldName, value); |
| appendFieldEnd(buffer, fieldName); |
| } |
| |
| protected void appendDetail(StringBuilder buffer, String fieldName, long value) { |
| buffer.append(value); |
| } |
| |
| public void append(StringBuilder buffer, String fieldName, int value) { |
| appendFieldStart(buffer, fieldName); |
| appendDetail(buffer, fieldName, value); |
| appendFieldEnd(buffer, fieldName); |
| } |
| |
| protected void appendDetail(StringBuilder buffer, String fieldName, int value) { |
| buffer.append(value); |
| } |
| |
| public void append(StringBuilder buffer, String fieldName, short value) { |
| appendFieldStart(buffer, fieldName); |
| appendDetail(buffer, fieldName, value); |
| appendFieldEnd(buffer, fieldName); |
| } |
| |
| protected void appendDetail(StringBuilder buffer, String fieldName, short value) { |
| buffer.append(value); |
| } |
| |
| public void append(StringBuilder buffer, String fieldName, byte value) { |
| appendFieldStart(buffer, fieldName); |
| appendDetail(buffer, fieldName, value); |
| appendFieldEnd(buffer, fieldName); |
| } |
| |
| protected void appendDetail(StringBuilder buffer, String fieldName, byte value) { |
| buffer.append(value); |
| } |
| |
| public void append(StringBuilder buffer, String fieldName, char value) { |
| appendFieldStart(buffer, fieldName); |
| appendDetail(buffer, fieldName, value); |
| appendFieldEnd(buffer, fieldName); |
| } |
| |
| protected void appendDetail(StringBuilder buffer, String fieldName, char value) { |
| buffer.append(value); |
| } |
| |
| public void append(StringBuilder buffer, String fieldName, double value) { |
| appendFieldStart(buffer, fieldName); |
| appendDetail(buffer, fieldName, value); |
| appendFieldEnd(buffer, fieldName); |
| } |
| |
| protected void appendDetail(StringBuilder buffer, String fieldName, double value) { |
| buffer.append(value); |
| } |
| |
| public void append(StringBuilder buffer, String fieldName, float value) { |
| appendFieldStart(buffer, fieldName); |
| appendDetail(buffer, fieldName, value); |
| appendFieldEnd(buffer, fieldName); |
| } |
| |
| protected void appendDetail(StringBuilder buffer, String fieldName, float value) { |
| buffer.append(value); |
| } |
| |
| public void append(StringBuilder buffer, String fieldName, boolean value) { |
| appendFieldStart(buffer, fieldName); |
| appendDetail(buffer, fieldName, value); |
| appendFieldEnd(buffer, fieldName); |
| } |
| |
| protected void appendDetail(StringBuilder buffer, String fieldName, boolean value) { |
| buffer.append(value); |
| } |
| |
| public void append(StringBuilder buffer, String fieldName, Object[] array, Boolean fullDetail) { |
| appendFieldStart(buffer, fieldName); |
| |
| if (array == null) { |
| appendNullText(buffer, fieldName); |
| |
| } else if (isFullDetail(fullDetail)) { |
| appendDetail(buffer, fieldName, array); |
| |
| } else { |
| appendSummary(buffer, fieldName, array); |
| } |
| |
| appendFieldEnd(buffer, fieldName); |
| } |
| |
| protected void appendDetail(StringBuilder buffer, String fieldName, Object[] array) { |
| buffer.append(arrayStart); |
| for (int i = 0; i < array.length; i++) { |
| Object item = array[i]; |
| if (i > 0) { |
| buffer.append(arraySeparator); |
| } |
| if (item == null) { |
| appendNullText(buffer, fieldName); |
| |
| } else { |
| appendInternal(buffer, fieldName, item, arrayContentDetail); |
| } |
| } |
| buffer.append(arrayEnd); |
| } |
| |
| protected void reflectionAppendArrayDetail(StringBuilder buffer, String fieldName, Object array) { |
| buffer.append(arrayStart); |
| int length = Array.getLength(array); |
| for (int i = 0; i < length; i++) { |
| Object item = Array.get(array, i); |
| if (i > 0) { |
| buffer.append(arraySeparator); |
| } |
| if (item == null) { |
| appendNullText(buffer, fieldName); |
| |
| } else { |
| appendInternal(buffer, fieldName, item, arrayContentDetail); |
| } |
| } |
| buffer.append(arrayEnd); |
| } |
| |
| protected void appendSummary(StringBuilder buffer, String fieldName, Object[] array) { |
| appendSummarySize(buffer, fieldName, array.length); |
| } |
| |
| public void append(StringBuilder buffer, String fieldName, long[] array, Boolean fullDetail) { |
| appendFieldStart(buffer, fieldName); |
| |
| if (array == null) { |
| appendNullText(buffer, fieldName); |
| |
| } else if (isFullDetail(fullDetail)) { |
| appendDetail(buffer, fieldName, array); |
| |
| } else { |
| appendSummary(buffer, fieldName, array); |
| } |
| |
| appendFieldEnd(buffer, fieldName); |
| } |
| |
| protected void appendDetail(StringBuilder buffer, String fieldName, long[] array) { |
| buffer.append(arrayStart); |
| for (int i = 0; i < array.length; i++) { |
| if (i > 0) { |
| buffer.append(arraySeparator); |
| } |
| appendDetail(buffer, fieldName, array[i]); |
| } |
| buffer.append(arrayEnd); |
| } |
| |
| protected void appendSummary(StringBuilder buffer, String fieldName, long[] array) { |
| appendSummarySize(buffer, fieldName, array.length); |
| } |
| |
| public void append(StringBuilder buffer, String fieldName, int[] array, Boolean fullDetail) { |
| appendFieldStart(buffer, fieldName); |
| |
| if (array == null) { |
| appendNullText(buffer, fieldName); |
| |
| } else if (isFullDetail(fullDetail)) { |
| appendDetail(buffer, fieldName, array); |
| |
| } else { |
| appendSummary(buffer, fieldName, array); |
| } |
| |
| appendFieldEnd(buffer, fieldName); |
| } |
| |
| protected void appendDetail(StringBuilder buffer, String fieldName, int[] array) { |
| buffer.append(arrayStart); |
| for (int i = 0; i < array.length; i++) { |
| if (i > 0) { |
| buffer.append(arraySeparator); |
| } |
| appendDetail(buffer, fieldName, array[i]); |
| } |
| buffer.append(arrayEnd); |
| } |
| |
| protected void appendSummary(StringBuilder buffer, String fieldName, int[] array) { |
| appendSummarySize(buffer, fieldName, array.length); |
| } |
| |
| public void append(StringBuilder buffer, String fieldName, short[] array, Boolean fullDetail) { |
| appendFieldStart(buffer, fieldName); |
| |
| if (array == null) { |
| appendNullText(buffer, fieldName); |
| |
| } else if (isFullDetail(fullDetail)) { |
| appendDetail(buffer, fieldName, array); |
| |
| } else { |
| appendSummary(buffer, fieldName, array); |
| } |
| |
| appendFieldEnd(buffer, fieldName); |
| } |
| |
| protected void appendDetail(StringBuilder buffer, String fieldName, short[] array) { |
| buffer.append(arrayStart); |
| for (int i = 0; i < array.length; i++) { |
| if (i > 0) { |
| buffer.append(arraySeparator); |
| } |
| appendDetail(buffer, fieldName, array[i]); |
| } |
| buffer.append(arrayEnd); |
| } |
| |
| protected void appendSummary(StringBuilder buffer, String fieldName, short[] array) { |
| appendSummarySize(buffer, fieldName, array.length); |
| } |
| |
| public void append(StringBuilder buffer, String fieldName, byte[] array, Boolean fullDetail) { |
| appendFieldStart(buffer, fieldName); |
| |
| if (array == null) { |
| appendNullText(buffer, fieldName); |
| |
| } else if (isFullDetail(fullDetail)) { |
| appendDetail(buffer, fieldName, array); |
| |
| } else { |
| appendSummary(buffer, fieldName, array); |
| } |
| |
| appendFieldEnd(buffer, fieldName); |
| } |
| |
| protected void appendDetail(StringBuilder buffer, String fieldName, byte[] array) { |
| buffer.append(arrayStart); |
| for (int i = 0; i < array.length; i++) { |
| if (i > 0) { |
| buffer.append(arraySeparator); |
| } |
| appendDetail(buffer, fieldName, array[i]); |
| } |
| buffer.append(arrayEnd); |
| } |
| |
| protected void appendSummary(StringBuilder buffer, String fieldName, byte[] array) { |
| appendSummarySize(buffer, fieldName, array.length); |
| } |
| |
| public void append(StringBuilder buffer, String fieldName, char[] array, Boolean fullDetail) { |
| appendFieldStart(buffer, fieldName); |
| |
| if (array == null) { |
| appendNullText(buffer, fieldName); |
| |
| } else if (isFullDetail(fullDetail)) { |
| appendDetail(buffer, fieldName, array); |
| |
| } else { |
| appendSummary(buffer, fieldName, array); |
| } |
| |
| appendFieldEnd(buffer, fieldName); |
| } |
| |
| protected void appendDetail(StringBuilder buffer, String fieldName, char[] array) { |
| buffer.append(arrayStart); |
| for (int i = 0; i < array.length; i++) { |
| if (i > 0) { |
| buffer.append(arraySeparator); |
| } |
| appendDetail(buffer, fieldName, array[i]); |
| } |
| buffer.append(arrayEnd); |
| } |
| |
| protected void appendSummary(StringBuilder buffer, String fieldName, char[] array) { |
| appendSummarySize(buffer, fieldName, array.length); |
| } |
| |
| public void append(StringBuilder buffer, String fieldName, double[] array, Boolean fullDetail) { |
| appendFieldStart(buffer, fieldName); |
| |
| if (array == null) { |
| appendNullText(buffer, fieldName); |
| |
| } else if (isFullDetail(fullDetail)) { |
| appendDetail(buffer, fieldName, array); |
| |
| } else { |
| appendSummary(buffer, fieldName, array); |
| } |
| |
| appendFieldEnd(buffer, fieldName); |
| } |
| |
| protected void appendDetail(StringBuilder buffer, String fieldName, double[] array) { |
| buffer.append(arrayStart); |
| for (int i = 0; i < array.length; i++) { |
| if (i > 0) { |
| buffer.append(arraySeparator); |
| } |
| appendDetail(buffer, fieldName, array[i]); |
| } |
| buffer.append(arrayEnd); |
| } |
| |
| protected void appendSummary(StringBuilder buffer, String fieldName, double[] array) { |
| appendSummarySize(buffer, fieldName, array.length); |
| } |
| |
| public void append(StringBuilder buffer, String fieldName, float[] array, Boolean fullDetail) { |
| appendFieldStart(buffer, fieldName); |
| |
| if (array == null) { |
| appendNullText(buffer, fieldName); |
| |
| } else if (isFullDetail(fullDetail)) { |
| appendDetail(buffer, fieldName, array); |
| |
| } else { |
| appendSummary(buffer, fieldName, array); |
| } |
| |
| appendFieldEnd(buffer, fieldName); |
| } |
| |
| protected void appendDetail(StringBuilder buffer, String fieldName, float[] array) { |
| buffer.append(arrayStart); |
| for (int i = 0; i < array.length; i++) { |
| if (i > 0) { |
| buffer.append(arraySeparator); |
| } |
| appendDetail(buffer, fieldName, array[i]); |
| } |
| buffer.append(arrayEnd); |
| } |
| |
| protected void appendSummary(StringBuilder buffer, String fieldName, float[] array) { |
| appendSummarySize(buffer, fieldName, array.length); |
| } |
| |
| public void append(StringBuilder buffer, String fieldName, boolean[] array, Boolean fullDetail) { |
| appendFieldStart(buffer, fieldName); |
| |
| if (array == null) { |
| appendNullText(buffer, fieldName); |
| |
| } else if (isFullDetail(fullDetail)) { |
| appendDetail(buffer, fieldName, array); |
| |
| } else { |
| appendSummary(buffer, fieldName, array); |
| } |
| |
| appendFieldEnd(buffer, fieldName); |
| } |
| |
| protected void appendDetail(StringBuilder buffer, String fieldName, boolean[] array) { |
| buffer.append(arrayStart); |
| for (int i = 0; i < array.length; i++) { |
| if (i > 0) { |
| buffer.append(arraySeparator); |
| } |
| appendDetail(buffer, fieldName, array[i]); |
| } |
| buffer.append(arrayEnd); |
| } |
| |
| protected void appendSummary(StringBuilder buffer, String fieldName, boolean[] array) { |
| appendSummarySize(buffer, fieldName, array.length); |
| } |
| |
| protected void appendClassName(StringBuilder buffer, Object object) { |
| if (useClassName && object != null) { |
| register(object); |
| if (useShortClassName) { |
| buffer.append(getShortClassName(object.getClass())); |
| } else { |
| buffer.append(object.getClass().getName()); |
| } |
| } |
| } |
| |
| protected void appendIdentityHashCode(StringBuilder buffer, Object object) { |
| if (this.isUseIdentityHashCode() && object!=null) { |
| register(object); |
| buffer.append('@'); |
| buffer.append(Integer.toHexString(System.identityHashCode(object))); |
| } |
| } |
| |
| protected void appendContentStart(StringBuilder buffer) { |
| buffer.append(contentStart); |
| } |
| |
| protected void appendContentEnd(StringBuilder buffer) { |
| buffer.append(contentEnd); |
| } |
| |
| protected void appendNullText(StringBuilder buffer, String fieldName) { |
| buffer.append(nullText); |
| } |
| |
| protected void appendFieldSeparator(StringBuilder buffer) { |
| buffer.append(fieldSeparator); |
| } |
| |
| protected void appendFieldStart(StringBuilder buffer, String fieldName) { |
| if (useFieldNames && fieldName != null) { |
| buffer.append(fieldName); |
| buffer.append(fieldNameValueSeparator); |
| } |
| } |
| |
| protected void appendFieldEnd(StringBuilder buffer, String fieldName) { |
| appendFieldSeparator(buffer); |
| } |
| |
| protected void appendSummarySize(StringBuilder buffer, String fieldName, int size) { |
| buffer.append(sizeStartText); |
| buffer.append(size); |
| buffer.append(sizeEndText); |
| } |
| |
| protected boolean isFullDetail(Boolean fullDetailRequest) { |
| if (fullDetailRequest == null) { |
| return defaultFullDetail; |
| } |
| return fullDetailRequest; |
| } |
| |
| protected String getShortClassName(Class cls) { |
| return cls.getSimpleName(); |
| } |
| |
| protected boolean isUseClassName() { |
| return useClassName; |
| } |
| |
| protected void setUseClassName(boolean useClassName) { |
| this.useClassName = useClassName; |
| } |
| |
| protected boolean isUseShortClassName() { |
| return useShortClassName; |
| } |
| |
| protected boolean isShortClassName() { |
| return useShortClassName; |
| } |
| |
| protected void setUseShortClassName(boolean useShortClassName) { |
| this.useShortClassName = useShortClassName; |
| } |
| |
| protected void setShortClassName(boolean shortClassName) { |
| this.useShortClassName = shortClassName; |
| } |
| |
| protected boolean isUseIdentityHashCode() { |
| return useIdentityHashCode; |
| } |
| |
| protected void setUseIdentityHashCode(boolean useIdentityHashCode) { |
| this.useIdentityHashCode = useIdentityHashCode; |
| } |
| |
| protected boolean isUseFieldNames() { |
| return useFieldNames; |
| } |
| |
| protected void setUseFieldNames(boolean useFieldNames) { |
| this.useFieldNames = useFieldNames; |
| } |
| |
| protected boolean isDefaultFullDetail() { |
| return defaultFullDetail; |
| } |
| |
| protected void setDefaultFullDetail(boolean defaultFullDetail) { |
| this.defaultFullDetail = defaultFullDetail; |
| } |
| |
| protected boolean isArrayContentDetail() { |
| return arrayContentDetail; |
| } |
| |
| protected void setArrayContentDetail(boolean arrayContentDetail) { |
| this.arrayContentDetail = arrayContentDetail; |
| } |
| |
| protected String getArrayStart() { |
| return arrayStart; |
| } |
| |
| protected void setArrayStart(String arrayStart) { |
| if (arrayStart == null) { |
| arrayStart = ""; |
| } |
| this.arrayStart = arrayStart; |
| } |
| |
| protected String getArrayEnd() { |
| return arrayEnd; |
| } |
| |
| protected void setArrayEnd(String arrayEnd) { |
| if (arrayEnd == null) { |
| arrayEnd = ""; |
| } |
| this.arrayEnd = arrayEnd; |
| } |
| |
| protected String getArraySeparator() { |
| return arraySeparator; |
| } |
| |
| protected void setArraySeparator(String arraySeparator) { |
| if (arraySeparator == null) { |
| arraySeparator = ""; |
| } |
| this.arraySeparator = arraySeparator; |
| } |
| |
| protected String getContentStart() { |
| return contentStart; |
| } |
| |
| protected void setContentStart(String contentStart) { |
| if (contentStart == null) { |
| contentStart = ""; |
| } |
| this.contentStart = contentStart; |
| } |
| |
| protected String getContentEnd() { |
| return contentEnd; |
| } |
| |
| protected void setContentEnd(String contentEnd) { |
| if (contentEnd == null) { |
| contentEnd = ""; |
| } |
| this.contentEnd = contentEnd; |
| } |
| |
| protected String getFieldNameValueSeparator() { |
| return fieldNameValueSeparator; |
| } |
| |
| protected void setFieldNameValueSeparator(String fieldNameValueSeparator) { |
| if (fieldNameValueSeparator == null) { |
| fieldNameValueSeparator = ""; |
| } |
| this.fieldNameValueSeparator = fieldNameValueSeparator; |
| } |
| |
| protected String getFieldSeparator() { |
| return fieldSeparator; |
| } |
| |
| protected void setFieldSeparator(String fieldSeparator) { |
| if (fieldSeparator == null) { |
| fieldSeparator = ""; |
| } |
| this.fieldSeparator = fieldSeparator; |
| } |
| |
| protected boolean isFieldSeparatorAtStart() { |
| return fieldSeparatorAtStart; |
| } |
| |
| protected void setFieldSeparatorAtStart(boolean fieldSeparatorAtStart) { |
| this.fieldSeparatorAtStart = fieldSeparatorAtStart; |
| } |
| |
| protected boolean isFieldSeparatorAtEnd() { |
| return fieldSeparatorAtEnd; |
| } |
| |
| protected void setFieldSeparatorAtEnd(boolean fieldSeparatorAtEnd) { |
| this.fieldSeparatorAtEnd = fieldSeparatorAtEnd; |
| } |
| |
| protected String getNullText() { |
| return nullText; |
| } |
| |
| protected void setNullText(String nullText) { |
| if (nullText == null) { |
| nullText = ""; |
| } |
| this.nullText = nullText; |
| } |
| |
| protected String getSizeStartText() { |
| return sizeStartText; |
| } |
| |
| protected void setSizeStartText(String sizeStartText) { |
| if (sizeStartText == null) { |
| sizeStartText = ""; |
| } |
| this.sizeStartText = sizeStartText; |
| } |
| |
| protected String getSizeEndText() { |
| return sizeEndText; |
| } |
| |
| protected void setSizeEndText(String sizeEndText) { |
| if (sizeEndText == null) { |
| sizeEndText = ""; |
| } |
| this.sizeEndText = sizeEndText; |
| } |
| |
| protected String getSummaryObjectStartText() { |
| return summaryObjectStartText; |
| } |
| |
| protected void setSummaryObjectStartText(String summaryObjectStartText) { |
| if (summaryObjectStartText == null) { |
| summaryObjectStartText = ""; |
| } |
| this.summaryObjectStartText = summaryObjectStartText; |
| } |
| |
| protected String getSummaryObjectEndText() { |
| return summaryObjectEndText; |
| } |
| |
| protected void setSummaryObjectEndText(String summaryObjectEndText) { |
| if (summaryObjectEndText == null) { |
| summaryObjectEndText = ""; |
| } |
| this.summaryObjectEndText = summaryObjectEndText; |
| } |
| |
| private static final class DefaultToStringStyle extends ToStringStyle { |
| |
| /** |
| * Required for serialization support. |
| * |
| * @see java.io.Serializable |
| */ |
| private static final long serialVersionUID = 1L; |
| |
| /** |
| * <p>Constructor.</p> |
| * |
| * <p>Use the static constant rather than instantiating.</p> |
| */ |
| DefaultToStringStyle() { |
| super(); |
| } |
| |
| /** |
| * <p>Ensure <code>Singleton</code> after serialization.</p> |
| * |
| * @return the singleton |
| */ |
| private Object readResolve() { |
| return ToStringStyle.DEFAULT_STYLE; |
| } |
| |
| } |
| |
| private static final class NoFieldNameToStringStyle extends ToStringStyle { |
| |
| private static final long serialVersionUID = 1L; |
| |
| NoFieldNameToStringStyle() { |
| super(); |
| this.setUseFieldNames(false); |
| } |
| |
| private Object readResolve() { |
| return ToStringStyle.NO_FIELD_NAMES_STYLE; |
| } |
| } |
| |
| private static final class ShortPrefixToStringStyle extends ToStringStyle { |
| |
| private static final long serialVersionUID = 1L; |
| |
| ShortPrefixToStringStyle() { |
| super(); |
| this.setUseShortClassName(true); |
| this.setUseIdentityHashCode(false); |
| } |
| |
| private Object readResolve() { |
| return ToStringStyle.SHORT_PREFIX_STYLE; |
| } |
| } |
| |
| private static final class SimpleToStringStyle extends ToStringStyle { |
| |
| private static final long serialVersionUID = 1L; |
| |
| SimpleToStringStyle() { |
| super(); |
| this.setUseClassName(false); |
| this.setUseIdentityHashCode(false); |
| this.setUseFieldNames(false); |
| this.setContentStart(""); |
| this.setContentEnd(""); |
| } |
| private Object readResolve() { |
| return ToStringStyle.SIMPLE_STYLE; |
| } |
| |
| } |
| |
| private static final class MultiLineToStringStyle extends ToStringStyle { |
| |
| private static final long serialVersionUID = 1L; |
| |
| MultiLineToStringStyle() { |
| super(); |
| this.setContentStart("["); |
| this.setFieldSeparator(SystemUtils_LINE_SEPARATOR + " "); |
| this.setFieldSeparatorAtStart(true); |
| this.setContentEnd(SystemUtils_LINE_SEPARATOR + "]"); |
| } |
| |
| private Object readResolve() { |
| return ToStringStyle.MULTI_LINE_STYLE; |
| } |
| } |
| |
| // |
| // NOTE: Unrolled from commons-lang bits |
| // |
| |
| private static final String SystemUtils_LINE_SEPARATOR = System.getProperty("line.separator"); |
| |
| private static StringBuilder ObjectUtils_appendIdentityToString(StringBuilder buffer, Object object) { |
| if (object == null) { |
| return null; |
| } |
| if (buffer == null) { |
| buffer = new StringBuilder(); |
| } |
| return buffer |
| .append(object.getClass().getName()) |
| .append('@') |
| .append(Integer.toHexString(System.identityHashCode(object))); |
| } |
| |
| } |