1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.commons.lang3.builder;
19
20 import org.apache.commons.lang3.ClassUtils;
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64 public class MultilineRecursiveToStringStyle extends RecursiveToStringStyle {
65
66
67
68
69
70 private static final long serialVersionUID = 1L;
71
72
73 private static final int INDENT = 2;
74
75
76 private int spaces = 2;
77
78
79
80
81 public MultilineRecursiveToStringStyle() {
82 resetIndent();
83 }
84
85 @Override
86 protected void appendDetail(final StringBuffer buffer, final String fieldName, final boolean[] array) {
87 spaces += INDENT;
88 resetIndent();
89 super.appendDetail(buffer, fieldName, array);
90 spaces -= INDENT;
91 resetIndent();
92 }
93
94 @Override
95 protected void appendDetail(final StringBuffer buffer, final String fieldName, final byte[] array) {
96 spaces += INDENT;
97 resetIndent();
98 super.appendDetail(buffer, fieldName, array);
99 spaces -= INDENT;
100 resetIndent();
101 }
102
103 @Override
104 protected void appendDetail(final StringBuffer buffer, final String fieldName, final char[] array) {
105 spaces += INDENT;
106 resetIndent();
107 super.appendDetail(buffer, fieldName, array);
108 spaces -= INDENT;
109 resetIndent();
110 }
111
112 @Override
113 protected void appendDetail(final StringBuffer buffer, final String fieldName, final double[] array) {
114 spaces += INDENT;
115 resetIndent();
116 super.appendDetail(buffer, fieldName, array);
117 spaces -= INDENT;
118 resetIndent();
119 }
120
121 @Override
122 protected void appendDetail(final StringBuffer buffer, final String fieldName, final float[] array) {
123 spaces += INDENT;
124 resetIndent();
125 super.appendDetail(buffer, fieldName, array);
126 spaces -= INDENT;
127 resetIndent();
128 }
129
130 @Override
131 protected void appendDetail(final StringBuffer buffer, final String fieldName, final int[] array) {
132 spaces += INDENT;
133 resetIndent();
134 super.appendDetail(buffer, fieldName, array);
135 spaces -= INDENT;
136 resetIndent();
137 }
138
139 @Override
140 protected void appendDetail(final StringBuffer buffer, final String fieldName, final long[] array) {
141 spaces += INDENT;
142 resetIndent();
143 super.appendDetail(buffer, fieldName, array);
144 spaces -= INDENT;
145 resetIndent();
146 }
147
148 @Override
149 public void appendDetail(final StringBuffer buffer, final String fieldName, final Object value) {
150 if (!ClassUtils.isPrimitiveWrapper(value.getClass()) && !String.class.equals(value.getClass())
151 && accept(value.getClass())) {
152 spaces += INDENT;
153 resetIndent();
154 buffer.append(ReflectionToStringBuilder.toString(value, this));
155 spaces -= INDENT;
156 resetIndent();
157 } else {
158 super.appendDetail(buffer, fieldName, value);
159 }
160 }
161
162 @Override
163 protected void appendDetail(final StringBuffer buffer, final String fieldName, final Object[] array) {
164 spaces += INDENT;
165 resetIndent();
166 super.appendDetail(buffer, fieldName, array);
167 spaces -= INDENT;
168 resetIndent();
169 }
170
171 @Override
172 protected void appendDetail(final StringBuffer buffer, final String fieldName, final short[] array) {
173 spaces += INDENT;
174 resetIndent();
175 super.appendDetail(buffer, fieldName, array);
176 spaces -= INDENT;
177 resetIndent();
178 }
179
180 @Override
181 protected void reflectionAppendArrayDetail(final StringBuffer buffer, final String fieldName, final Object array) {
182 spaces += INDENT;
183 resetIndent();
184 super.reflectionAppendArrayDetail(buffer, fieldName, array);
185 spaces -= INDENT;
186 resetIndent();
187 }
188
189
190
191
192
193 private void resetIndent() {
194 setArrayStart("{" + System.lineSeparator() + spacer(spaces));
195 setArraySeparator("," + System.lineSeparator() + spacer(spaces));
196 setArrayEnd(System.lineSeparator() + spacer(spaces - INDENT) + "}");
197
198 setContentStart("[" + System.lineSeparator() + spacer(spaces));
199 setFieldSeparator("," + System.lineSeparator() + spacer(spaces));
200 setContentEnd(System.lineSeparator() + spacer(spaces - INDENT) + "]");
201 }
202
203
204
205
206
207
208
209 private StringBuilder spacer(final int spaces) {
210 final StringBuilder sb = new StringBuilder();
211 for (int i = 0; i < spaces; i++) {
212 sb.append(" ");
213 }
214 return sb;
215 }
216
217 }