package org.openehr.rm.util; import java.io.File; import java.io.InputStream; import java.util.HashMap; import java.util.Map; import openEHR.v1.template.TEMPLATE; import org.apache.xmlbeans.XmlObject; import org.apache.xmlbeans.XmlOptions; import org.openehr.am.archetype.Archetype; import org.openehr.am.parser.ContentObject; import org.openehr.am.parser.DADLParser; import org.openehr.am.serialize.ADLSerializer; import org.openehr.am.template.Flattener; import org.openehr.am.template.OETParser; import org.openehr.binding.XMLBinding; import org.openehr.rm.binding.DADLBinding; import org.openehr.rm.composition.Composition; import org.openehr.rm.support.measurement.MeasurementService; import org.openehr.rm.support.measurement.SimpleMeasurementService; import org.openehr.schemas.v1.COMPOSITION; import org.openehr.schemas.v1.CompositionDocument; import com.thoughtworks.xstream.XStream; import se.acode.openehr.parser.ADLParser; import junit.framework.TestCase; public class SkeletonGeneratorTestBase extends TestCase { public SkeletonGeneratorTestBase() throws Exception { dadlBinding = new DADLBinding(); xmlBinding = new XMLBinding(); generator = SkeletonGenerator.getInstance(); oetParser = new OETParser(); flattener = new Flattener(); adlSerializer = new ADLSerializer(); measurementService = SimpleMeasurementService.getInstance(); setXmlOptions(); loadArchetypeMap(); } private void setXmlOptions() { xmlOptions = new XmlOptions(); xmlOptions.setSavePrettyPrint(); xmlOptions.setSaveAggressiveNamespaces(); xmlOptions.setSaveOuter(); xmlOptions.setSaveInner(); } public void tearDown() { instance = null; expected = null; } protected Archetype loadArchetype(String id) throws Exception { ADLParser adlParser = new ADLParser(fromClasspath(ARCHETYPE_PATH + id)); archetype = adlParser.parse(); return archetype; } protected InputStream loadXML(String filename) throws Exception { return fromClasspath(XML_PATH + filename); } /* load a test composition in xml format */ protected Composition loadXMLComposition(String filename) throws Exception { COMPOSITION comp = CompositionDocument.Factory.parse( loadXML(filename)).getComposition(); assertTrue("expected composition, but got: " + (comp == null ? null : comp.getClass()), comp instanceof COMPOSITION); Object rmObj = xmlBinding.bindToRM(comp); assertTrue("rmObj not a Composition, got " + (rmObj == null ? null : rmObj.getClass()), rmObj instanceof Composition); return (Composition) rmObj; } protected InputStream fromClasspath(String filename) throws Exception { return this.getClass().getClassLoader().getResourceAsStream(filename); } protected Archetype flattenTemplate(String templateFilename) throws Exception { TEMPLATE template = loadTemplate(templateFilename); Archetype flattened = flattener.toFlattenedArchetype(template, archetypeMap, null); return flattened; } protected TEMPLATE loadTemplate(String name) throws Exception { String path = TEMPLATE_PATH + name + ".oet"; TEMPLATE template = oetParser.parseTemplate( fromClasspath(path)).getTemplate(); return template; } /* * Loads dadl from file and binds data to RM object */ protected Object loadData(String filename) throws Exception { DADLParser parser = new DADLParser(fromClasspath(DATA_PATH + filename)); ContentObject contentObj = parser.parse(); return dadlBinding.bind(contentObj); } protected void loadArchetypeMap() throws Exception { String[] ids = { "openEHR-EHR-ITEM_TREE.medication_test_one.v1", "openEHR-EHR-SECTION.medications.v1", "openEHR-EHR-INSTRUCTION.medication.v1", "openEHR-EHR-ITEM_TREE.medication.v1", "openEHR-EHR-SECTION.ad_hoc_heading.v1" }; archetypeMap = new HashMap<String, Archetype>(); for(String id : ids) { Archetype archetype = loadArchetype(id + ".adl"); archetypeMap.put(archetype.getArchetypeId().toString(), archetype); } } protected void printXML(Object obj) throws Exception { Object value = xmlBinding.bindToXML(obj); XmlObject xmlObj = (XmlObject) value; xmlObj.save(System.out, xmlOptions); } protected void saveXML(Object obj, String filename) throws Exception { Object value = xmlBinding.bindToXML(obj); XmlObject xmlObj = (XmlObject) value; xmlObj.save(new File(filename), xmlOptions); } protected void printStreamXML(Object toPrint) throws Exception { XStream xstream = new XStream(); String xml = xstream.toXML(toPrint); System.out.println(xml); } /** * Print out given archetype in ADL for debugging purpose * * @param toPrint * @throws Exception */ protected void printADL(Archetype toPrint) throws Exception { adlSerializer.output(toPrint, System.out); } protected DADLBinding dadlBinding; private XMLBinding xmlBinding; private OETParser oetParser; private Flattener flattener; private ADLSerializer adlSerializer; private XmlOptions xmlOptions; private MeasurementService measurementService; protected Map<String, Archetype> archetypeMap; protected SkeletonGenerator generator; protected Object instance; protected Object expected; protected Archetype archetype; /* path for test fixtures */ private static final String ARCHETYPE_PATH = "adl/"; private static final String DATA_PATH = "dadl/"; private static final String TEMPLATE_PATH = "oet/"; private static final String XML_PATH = "xml/"; }