package org.richfaces.tests.metamer.converter;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;
import org.richfaces.convert.SequenceRowKeyConverter;
import org.richfaces.tests.metamer.model.CompactDisc;
import org.richfaces.tests.metamer.model.Company;
import org.richfaces.tests.metamer.model.Labeled;
import org.richfaces.tests.metamer.model.State;
import org.richfaces.tests.metamer.model.tree.TreeNodeWithContent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@FacesConverter("treeRowKeyConverter")
public class TreeRowKeyConverter extends SequenceRowKeyConverter {
private static final Logger LOGGER = LoggerFactory.getLogger(TreeRowKeyConverter.class);
public TreeRowKeyConverter() {
super(TreeNodeWithContent.class, new Delegated());
}
private static class Delegated implements Converter {
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
LOGGER.debug("converting <" + value + "> to object");
if (value.startsWith("[converted] company: ")) {
return new Company(value.replace("[converted] company: ", ""));
} else if (value.startsWith("[converted] state: ")) {
State state = new State();
state.setName(value.replace("[converted] state: ", ""));
return state;
} else if (value.startsWith("[converted] cd: ")) {
String[] cd = value.replace("[converted] cd: ", "").split(" - ");
return new CompactDisc(cd[1], cd[0]);
} else {
return Integer.parseInt(value);
}
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
LOGGER.debug("converting <" + value + "> to String");
if (value instanceof Integer) {
return value.toString();
} else if (value instanceof Company) {
return "[converted] company: " + ((Labeled) value).getLabel();
} else if (value instanceof State) {
return "[converted] state: " + ((Labeled) value).getLabel();
} else if (value instanceof CompactDisc) {
return "[converted] cd: " + ((Labeled) value).getLabel();
} else if (value instanceof String) {
return (String) value;
} else {
throw new UnsupportedOperationException("Can't convert " + value + " of type " + value.getClass().getName());
}
}
}
}