package edu.harvard.med.screensaver.rest; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; 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.users.LabHead; /** * TODO: consider a class hierarchy of ScreensaverUserConverter<-ScreeningRoomUserConverter<-LabHeadConverter */ public class LabHeadConverter extends RestConverter { private static final Logger log = Logger.getLogger(LabHeadConverter.class); @Autowired private ScreeningRoomUserConverter screeningRoomUserConverter; public boolean canConvert(Class clazz) { return LabHead.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() { LabHead labHead = (LabHead) value; labHead = getDao().reloadEntity(labHead); screeningRoomUserConverter.write(util, labHead); util.writeNode(labHead.getLab().getLabAffiliationName(), "labAffiliationName"); util.writeNode(labHead.getLab().getLabAffiliation().getAffiliationCategory(), "labAffiliationCategory"); } }); } public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) { return null; } }