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 public FormattingInfo(final boolean leftAlign, final int minLength, final int maxLength, final boolean leftTruncate) {
65 this.leftAlign = leftAlign;
66 this.minLength = minLength;
67 this.maxLength = maxLength;
68 this.leftTruncate = leftTruncate;
69 }
70
71
72
73
74
75
76 public static FormattingInfo getDefault() {
77 return DEFAULT;
78 }
79
80
81
82
83
84
85 public boolean isLeftAligned() {
86 return leftAlign;
87 }
88
89
90
91
92
93
94 public boolean isLeftTruncate() {
95 return leftTruncate;
96 }
97
98
99
100
101
102
103 public int getMinLength() {
104 return minLength;
105 }
106
107
108
109
110
111
112 public int getMaxLength() {
113 return maxLength;
114 }
115
116
117
118
119
120
121
122
123
124 public void format(final int fieldStart, final StringBuilder buffer) {
125 final int rawLength = buffer.length() - fieldStart;
126
127 if (rawLength > maxLength) {
128 if (leftTruncate) {
129 buffer.delete(fieldStart, buffer.length() - maxLength);
130 } else {
131 buffer.delete(fieldStart + maxLength, fieldStart + buffer.length());
132 }
133 } else if (rawLength < minLength) {
134 if (leftAlign) {
135 final int fieldEnd = buffer.length();
136 buffer.setLength(fieldStart + minLength);
137
138 for (int i = fieldEnd; i < buffer.length(); i++) {
139 buffer.setCharAt(i, ' ');
140 }
141 } else {
142 int padLength = minLength - rawLength;
143
144 for (; padLength > SPACES.length; padLength -= SPACES.length) {
145 buffer.insert(fieldStart, SPACES);
146 }
147
148 buffer.insert(fieldStart, SPACES, 0, padLength);
149 }
150 }
151 }
152
153
154
155
156
157
158 @Override
159 public String toString() {
160 final StringBuilder sb = new StringBuilder();
161 sb.append(super.toString());
162 sb.append("[leftAlign=");
163 sb.append(leftAlign);
164 sb.append(", maxLength=");
165 sb.append(maxLength);
166 sb.append(", minLength=");
167 sb.append(minLength);
168 sb.append(", leftTruncate=");
169 sb.append(leftTruncate);
170 sb.append(']');
171 return sb.toString();
172 }
173
174 }