package edu.harvard.med.screensaver.rest; import org.apache.log4j.Logger; import com.thoughtworks.xstream.converters.MarshallingContext; import com.thoughtworks.xstream.converters.UnmarshallingContext; import com.thoughtworks.xstream.io.HierarchicalStreamReader; import com.thoughtworks.xstream.io.HierarchicalStreamWriter; import edu.harvard.med.screensaver.db.DAOTransaction; import edu.harvard.med.screensaver.model.screenresults.AssayWell; import edu.harvard.med.screensaver.model.screenresults.DataColumn; import edu.harvard.med.screensaver.model.screenresults.ResultValue; public class AssayWellValuesConverter extends RestConverter { public static class AssayWellValuesRequest { public AssayWell aw; public AssayWellValuesRequest(AssayWell aw) { this.aw = aw; } } private static final Logger log = Logger.getLogger(AssayWellValuesConverter.class); public boolean canConvert(Class clazz) { return AssayWellValuesConverter.AssayWellValuesRequest.class.isAssignableFrom(clazz); } public void marshal(final Object value, final HierarchicalStreamWriter writer, MarshallingContext context) { getDao().doInTransaction(new DAOTransaction() { @Override public void runTransaction() { AssayWell aw = getDao().reloadEntity(((AssayWellValuesConverter.AssayWellValuesRequest) value).aw); write(writer, aw); } }); } protected static void write(final HierarchicalStreamWriter writer, AssayWell aw) { for (DataColumn dc : aw.getScreenResult().getDataColumns()) { for (ResultValue rv : dc.getResultValues()) { if (rv.getWell().equals(aw.getLibraryWell())) { writer.startNode("value"); writer.addAttribute("ordinal", dc.getOrdinal().toString()); writer.setValue("" + rv.getTypedValue()); writer.endNode(); } } } } public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) { return null; } }