/apache-log4j-1.2.17/src/main/java/org/apache/log4j/pattern/FormattingInfo.java
Java | 134 lines | 48 code | 17 blank | 69 comment | 7 complexity | 213ad30e6a427e409ef70fe6742a95b7 MD5 | raw file
Possible License(s): Apache-2.0
1/*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18package org.apache.log4j.pattern;
19
20
21/**
22 * Modifies the output of a pattern converter for a specified minimum
23 * and maximum width and alignment.
24 *
25 *
26 * @author <a href=mailto:jim_cakalic@na.biomerieux.com>Jim Cakalic</a>
27 * @author Ceki Gülcü
28 * @author Curt Arnold
29 *
30 */
31public final class FormattingInfo {
32 /**
33 * Array of spaces.
34 */
35 private static final char[] SPACES =
36 new char[] { ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' };
37
38 /**
39 * Default instance.
40 */
41 private static final FormattingInfo DEFAULT =
42 new FormattingInfo(false, 0, Integer.MAX_VALUE);
43
44 /**
45 * Minimum length.
46 */
47 private final int minLength;
48
49 /**
50 * Maximum length.
51 */
52 private final int maxLength;
53
54 /**
55 * Alignment.
56 */
57 private final boolean leftAlign;
58
59 /**
60 * Creates new instance.
61 * @param leftAlign left align if true.
62 * @param minLength minimum length.
63 * @param maxLength maximum length.
64 */
65 public FormattingInfo(
66 final boolean leftAlign, final int minLength, final int maxLength) {
67 this.leftAlign = leftAlign;
68 this.minLength = minLength;
69 this.maxLength = maxLength;
70 }
71
72 /**
73 * Gets default instance.
74 * @return default instance.
75 */
76 public static FormattingInfo getDefault() {
77 return DEFAULT;
78 }
79
80 /**
81 * Determine if left aligned.
82 * @return true if left aligned.
83 */
84 public boolean isLeftAligned() {
85 return leftAlign;
86 }
87
88 /**
89 * Get minimum length.
90 * @return minimum length.
91 */
92 public int getMinLength() {
93 return minLength;
94 }
95
96 /**
97 * Get maximum length.
98 * @return maximum length.
99 */
100 public int getMaxLength() {
101 return maxLength;
102 }
103
104 /**
105 * Adjust the content of the buffer based on the specified lengths and alignment.
106 *
107 * @param fieldStart start of field in buffer.
108 * @param buffer buffer to be modified.
109 */
110 public void format(final int fieldStart, final StringBuffer buffer) {
111 final int rawLength = buffer.length() - fieldStart;
112
113 if (rawLength > maxLength) {
114 buffer.delete(fieldStart, buffer.length() - maxLength);
115 } else if (rawLength < minLength) {
116 if (leftAlign) {
117 final int fieldEnd = buffer.length();
118 buffer.setLength(fieldStart + minLength);
119
120 for (int i = fieldEnd; i < buffer.length(); i++) {
121 buffer.setCharAt(i, ' ');
122 }
123 } else {
124 int padLength = minLength - rawLength;
125
126 for (; padLength > 8; padLength -= 8) {
127 buffer.insert(fieldStart, SPACES);
128 }
129
130 buffer.insert(fieldStart, SPACES, 0, padLength);
131 }
132 }
133 }
134}