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