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 import org.apache.commons.lang3.StringUtils;
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
65 public class MultilineRecursiveToStringStyle extends RecursiveToStringStyle {
66
67
68
69
70
71 private static final long serialVersionUID = 1L;
72
73
74 private static final int INDENT = 2;
75
76
77 private int spaces = 2;
78
79
80
81
82 public MultilineRecursiveToStringStyle() {
83 resetIndent();
84 }
85
86 @Override
87 protected void appendDetail(final StringBuffer buffer, final String fieldName, final boolean[] array) {
88 spaces += INDENT;
89 resetIndent();
90 super.appendDetail(buffer, fieldName, array);
91 spaces -= INDENT;
92 resetIndent();
93 }
94
95 @Override
96 protected void appendDetail(final StringBuffer buffer, final String fieldName, final byte[] array) {
97 spaces += INDENT;
98 resetIndent();
99 super.appendDetail(buffer, fieldName, array);
100 spaces -= INDENT;
101 resetIndent();
102 }
103
104 @Override
105 protected void appendDetail(final StringBuffer buffer, final String fieldName, final char[] array) {
106 spaces += INDENT;
107 resetIndent();
108 super.appendDetail(buffer, fieldName, array);
109 spaces -= INDENT;
110 resetIndent();
111 }
112
113 @Override
114 protected void appendDetail(final StringBuffer buffer, final String fieldName, final double[] array) {
115 spaces += INDENT;
116 resetIndent();
117 super.appendDetail(buffer, fieldName, array);
118 spaces -= INDENT;
119 resetIndent();
120 }
121
122 @Override
123 protected void appendDetail(final StringBuffer buffer, final String fieldName, final float[] array) {
124 spaces += INDENT;
125 resetIndent();
126 super.appendDetail(buffer, fieldName, array);
127 spaces -= INDENT;
128 resetIndent();
129 }
130
131 @Override
132 protected void appendDetail(final StringBuffer buffer, final String fieldName, final int[] array) {
133 spaces += INDENT;
134 resetIndent();
135 super.appendDetail(buffer, fieldName, array);
136 spaces -= INDENT;
137 resetIndent();
138 }
139
140 @Override
141 protected void appendDetail(final StringBuffer buffer, final String fieldName, final long[] array) {
142 spaces += INDENT;
143 resetIndent();
144 super.appendDetail(buffer, fieldName, array);
145 spaces -= INDENT;
146 resetIndent();
147 }
148
149 @Override
150 public void appendDetail(final StringBuffer buffer, final String fieldName, final Object value) {
151 if (!ClassUtils.isPrimitiveWrapper(value.getClass()) && !String.class.equals(value.getClass())
152 && accept(value.getClass())) {
153 spaces += INDENT;
154 resetIndent();
155 buffer.append(ReflectionToStringBuilder.toString(value, this));
156 spaces -= INDENT;
157 resetIndent();
158 } else {
159 super.appendDetail(buffer, fieldName, value);
160 }
161 }
162
163 @Override
164 protected void appendDetail(final StringBuffer buffer, final String fieldName, final Object[] array) {
165 spaces += INDENT;
166 resetIndent();
167 super.appendDetail(buffer, fieldName, array);
168 spaces -= INDENT;
169 resetIndent();
170 }
171
172 @Override
173 protected void appendDetail(final StringBuffer buffer, final String fieldName, final short[] array) {
174 spaces += INDENT;
175 resetIndent();
176 super.appendDetail(buffer, fieldName, array);
177 spaces -= INDENT;
178 resetIndent();
179 }
180
181 @Override
182 protected void reflectionAppendArrayDetail(final StringBuffer buffer, final String fieldName, final Object array) {
183 spaces += INDENT;
184 resetIndent();
185 super.reflectionAppendArrayDetail(buffer, fieldName, array);
186 spaces -= INDENT;
187 resetIndent();
188 }
189
190
191
192
193
194 private void resetIndent() {
195 setArrayStart("{" + System.lineSeparator() + spacer(spaces));
196 setArraySeparator("," + System.lineSeparator() + spacer(spaces));
197 setArrayEnd(System.lineSeparator() + spacer(spaces - INDENT) + "}");
198
199 setContentStart("[" + System.lineSeparator() + spacer(spaces));
200 setFieldSeparator("," + System.lineSeparator() + spacer(spaces));
201 setContentEnd(System.lineSeparator() + spacer(spaces - INDENT) + "]");
202 }
203
204
205
206
207
208
209
210 private String spacer(final int spaces) {
211 return StringUtils.repeat(' ', spaces);
212 }
213
214 }