package jpaoletti.jpm.struts.converter;
import jpaoletti.jpm.converter.ConverterException;
import jpaoletti.jpm.core.PMContext;
import jpaoletti.jpm.struts.PMStrutsContext;
public class EditStringConverter extends StrutsEditConverter {
@Override
public Object build(PMContext ctx) throws ConverterException {
final PMStrutsContext c = (PMStrutsContext) ctx;
final Object value = ctx.getFieldValue();
if (withNull() && (value == null || value.equals(""))) {
return null;
} else {
return (value != null) ? value.toString() : null;
}
}
@Override
public String visualize(PMContext ctx) throws ConverterException {
Object p = ctx.getFieldValue();
if (p == null) {
p = getValue(ctx.getEntityInstance(), ctx.getField());
}
final String value = normalize((p == null) ? "" : p.toString());
ctx.setFieldValue(value);
return super.visualize("string_converter.jsp?ml=" + getConfig("max-length"));
}
public String normalize(String s) {
StringBuilder str = new StringBuilder();
int len = (s != null) ? s.length() : 0;
for (int i = 0; i < len; i++) {
char ch = s.charAt(i);
switch (ch) {
case '<':
str.append("<");
break;
case '>':
str.append(">");
break;
case '&':
str.append("&");
break;
/*
case '"':
str.append(""");
break;
*/
case '\'':
str.append("'");
break;
case '\r':
case '\n':
str.append("");
str.append(Integer.toHexString((int) (ch & 0xFF)));
str.append(';');
break;
default:
if (ch < 0x20) {
str.append("");
str.append(Integer.toHexString((int) (ch & 0xFF)));
str.append(';');
} else if (ch > 0xff00) {
str.append((char) (ch & 0xFF));
} else {
str.append(ch);
}
}
}
return (str.toString());
}
protected boolean withNull() {
return getConfig("with-null", "false").equalsIgnoreCase("true");
}
}