1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.logging.log4j.core.pattern;
19
20
21
22
23 public final class FormattingInfo {
24
25
26
27 private static final char[] SPACES = new char[] { ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' };
28
29
30
31
32 private static final FormattingInfo DEFAULT = new FormattingInfo(false, 0, Integer.MAX_VALUE, true);
33
34
35
36
37 private final int minLength;
38
39
40
41
42 private final int maxLength;
43
44
45
46
47 private final boolean leftAlign;
48
49
50
51
52 private final boolean leftTruncate;
53
54
55
56
57
58
59
60
61
62
63
64
65
66 public FormattingInfo(final boolean leftAlign, final int minLength, final int maxLength, final boolean leftTruncate) {
67 this.leftAlign = leftAlign;
68 this.minLength = minLength;
69 this.maxLength = maxLength;
70 this.leftTruncate = leftTruncate;
71 }
72
73
74
75
76
77
78 public static FormattingInfo getDefault() {
79 return DEFAULT;
80 }
81
82
83
84
85
86
87 public boolean isLeftAligned() {
88 return leftAlign;
89 }
90
91
92
93
94
95
96 public boolean isLeftTruncate() {
97 return leftTruncate;
98 }
99
100
101
102
103
104
105 public int getMinLength() {
106 return minLength;
107 }
108
109
110
111
112
113
114 public int getMaxLength() {
115 return maxLength;
116 }
117
118
119
120
121
122
123
124
125
126 public void format(final int fieldStart, final StringBuilder buffer) {
127 final int rawLength = buffer.length() - fieldStart;
128
129 if (rawLength > maxLength) {
130 if (leftTruncate) {
131 buffer.delete(fieldStart, buffer.length() - maxLength);
132 } else {
133 buffer.delete(fieldStart + maxLength, fieldStart + buffer.length());
134 }
135 } else if (rawLength < minLength) {
136 if (leftAlign) {
137 final int fieldEnd = buffer.length();
138 buffer.setLength(fieldStart + minLength);
139
140 for (int i = fieldEnd; i < buffer.length(); i++) {
141 buffer.setCharAt(i, ' ');
142 }
143 } else {
144 int padLength = minLength - rawLength;
145
146 for (; padLength > SPACES.length; padLength -= SPACES.length) {
147 buffer.insert(fieldStart, SPACES);
148 }
149
150 buffer.insert(fieldStart, SPACES, 0, padLength);
151 }
152 }
153 }
154
155
156
157
158
159
160 @Override
161 public String toString() {
162 final StringBuilder sb = new StringBuilder();
163 sb.append(super.toString());
164 sb.append("[leftAlign=");
165 sb.append(leftAlign);
166 sb.append(", maxLength=");
167 sb.append(maxLength);
168 sb.append(", minLength=");
169 sb.append(minLength);
170 sb.append(", leftTruncate=");
171 sb.append(leftTruncate);
172 sb.append(']');
173 return sb.toString();
174 }
175
176 }