package net.codjo.dataprocess.common.codec; import net.codjo.dataprocess.common.model.ResultTable; import net.codjo.dataprocess.common.model.TreatmentModel; import net.codjo.dataprocess.common.model.UserTreatment; import com.thoughtworks.xstream.converters.Converter; import com.thoughtworks.xstream.converters.MarshallingContext; import com.thoughtworks.xstream.converters.UnmarshallingContext; import com.thoughtworks.xstream.io.HierarchicalStreamReader; import com.thoughtworks.xstream.io.HierarchicalStreamWriter; /** * */ public class UserTreatmentConverter implements Converter { private boolean light; public UserTreatmentConverter(boolean light) { this.light = light; } public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) { UserTreatment userTreatment = (UserTreatment)source; write("id", userTreatment.getId(), writer); write("comment", userTreatment.getComment(), writer); write("title", userTreatment.getTitle(), writer); if (!light) { write("priority", userTreatment.getPriority(), writer); writer.startNode("resultTable"); write("table", userTreatment.getResultTable().getTable(), writer); write("selectAllHandler", userTreatment.getResultTable().getSelectAllHandler(), writer); writer.endNode(); } } public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) { TreatmentModel treatmentModel = new TreatmentModel(); UserTreatment userTreatment = new UserTreatment(treatmentModel); treatmentModel.setId(reader.getAttribute("id")); treatmentModel.setComment(reader.getAttribute("comment")); treatmentModel.setTitle(reader.getAttribute("title")); if (!light) { userTreatment.setPriority(getIntValue("priority", reader)); reader.moveDown(); treatmentModel.setResultTable(new ResultTable(reader.getAttribute("table"), reader.getAttribute("selectAllHandler"))); reader.moveUp(); } return userTreatment; } public boolean canConvert(Class type) { return type.equals(UserTreatment.class); } private static void write(String fieldName, Object value, HierarchicalStreamWriter writer) { if (value == null || "".equals(value)) { return; } writer.addAttribute(fieldName, String.valueOf(value)); } private static int getIntValue(String name, HierarchicalStreamReader reader) { String value = reader.getAttribute(name); if (value != null) { return Integer.parseInt(value); } else { return 0; } } }