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.screens.Publication; /** * TODO: consider a class hierarchy of ScreensaverUserConverter<-ScreeningRoomUserConverter<-LabHeadConverter */ public class PublicationConverter extends RestConverter { private static final Logger log = Logger.getLogger(PublicationConverter.class); public boolean canConvert(Class clazz) { return Publication.class.isAssignableFrom(clazz); } public void marshal(final Object value, final HierarchicalStreamWriter writer, MarshallingContext context) { final XStreamUtil util = new XStreamUtil(writer, context, getEntityUriGenerator()); getDao().doInTransaction(new DAOTransaction() { @Override public void runTransaction() { Publication p = (Publication) value; p = getDao().reloadEntity(p); if (p.getPubmedId() != null) writer.addAttribute("pubmedId", p.getPubmedId().toString()); if (p.getPubmedCentralId() != null) writer.addAttribute("pubmedCentralId", p.getPubmedCentralId().toString()); if (p.getAttachedFile() != null) writeAttachedFile(p.getAttachedFile(), writer); util.writeNode(p.getYearPublished(), "yearPublished"); util.writeNode(p.getAuthors(), "authors"); util.writeNode(p.getTitle(), "title"); util.writeNode(p.getJournal(), "journal"); util.writeNode(p.getVolume(), "volume"); util.writeNode(p.getPages(), "pages"); } }); } public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) { return null; } }