AlignPolicy.java
package org.cyclopsgroup.caff.format;
/**
* Defines should field value align left or right
*
* @author <a href="mailto:jiaqi@cyclopsgroup.org">Jiaqi Guo</a>
*/
public enum AlignPolicy {
/** Left is default value, truncate right. */
LEFT {
@Override
CharSequence trim(CharSequence input, char empty) {
int lengthToKeep = input.length();
while (lengthToKeep > 0 && input.charAt(lengthToKeep - 1) == empty) {
lengthToKeep--;
}
return input.subSequence(0, lengthToKeep);
}
@Override
void fill(CharSequence src, char[] dest, int start, int length, char empty) {
for (int i = 0; i < length; i++) {
char c;
if (i < src.length()) {
c = src.charAt(i);
} else {
c = empty;
}
dest[start + i] = c;
}
}
},
/** Align right, truncate left. */
RIGHT {
@Override
CharSequence trim(CharSequence input, char empty) {
int start = 0;
while (start < input.length() && input.charAt(start) == empty) {
start++;
}
return input.subSequence(start, input.length());
}
@Override
void fill(CharSequence src, char[] dest, int start, int length, char empty) {
for (int i = 0; i < length; i++) {
char c;
if (i < src.length()) {
c = src.charAt(src.length() - i - 1);
} else {
c = empty;
}
dest[start + length - i - 1] = c;
}
}
};
/**
* Trim the leading or trailing empty characters based on alignment
*
* @param input Content that possibly has empty character
* @param empty Character that stands for empty
* @return Trimmed result
*/
abstract CharSequence trim(CharSequence input, char empty);
/**
* Fill content into given char array
*
* @param src Content to fill
* @param dest Char array that content is filled into
* @param start Zero based start position of char array
* @param length Length of slot to fill in char array
* @param empty Empty character to fill
*/
abstract void fill(CharSequence src, char[] dest, int start, int length, char empty);
}