package nl.ipo.cds.etl.operations.transform;
import nl.ipo.cds.attributemapping.operations.annotation.Input;
import nl.ipo.cds.attributemapping.operations.annotation.MappingOperation;
@MappingOperation (propertiesClass = TrimStringTransform.Settings.class)
public class TrimStringTransform {
public String execute (final @Input ("value") String value, final Settings settings) {
if (value == null || value.length () == 0) {
return value;
}
final String additionalCharacters = settings.getAdditionalCharacters ();
if (additionalCharacters == null || additionalCharacters.length () == 0) {
return value.trim ();
}
final StringBuffer buffer = new StringBuffer (value);
final char[] chars = additionalCharacters.toCharArray ();
// Trim leading characters:
leadingLoop: while (buffer.length () > 0) {
final char c = buffer.charAt (0);
// Strip whitespace:
if (Character.isWhitespace (c)) {
buffer.deleteCharAt (0);
continue;
}
for (int i = 0; i < chars.length; ++ i) {
if (c == chars[i]) {
buffer.deleteCharAt (0);
continue leadingLoop;
}
}
break;
}
// Trim trailing characters:
trailingLoop: while (buffer.length () > 0) {
final int lastIndex = buffer.length () - 1;
final char c = buffer.charAt (lastIndex);
if (Character.isWhitespace (c)) {
buffer.deleteCharAt (lastIndex);
continue;
}
for (int i = 0; i < chars.length; ++ i) {
if (c == chars[i]) {
buffer.deleteCharAt (lastIndex);
continue trailingLoop;
}
}
break;
}
return buffer.toString ();
}
public final static class Settings {
private String additionalCharacters = "";
public String getAdditionalCharacters () {
return additionalCharacters;
}
public void setAdditionalCharacters (final String additionalCharacters) {
this.additionalCharacters = additionalCharacters;
}
}
}