package se.cambio.cds.gdl.editor;
import junit.framework.TestCase;
import org.apache.log4j.Logger;
import org.openehr.am.archetype.Archetype;
import se.cambio.cds.controller.guide.GuideUtil;
import se.cambio.cds.gdl.model.Guide;
import se.cambio.cds.gdl.parser.GDLParser;
import se.cambio.openehr.controller.session.data.ArchetypeManager;
import se.cambio.openehr.util.ExceptionHandler;
import se.cambio.openehr.util.IOUtils;
import se.cambio.openehr.util.UserConfigurationManager;
import java.io.*;
public class GDLEditorMainTest extends TestCase {
protected static String MAIN_GUIDE_REPOSITORY_PATH = UserConfigurationManager.getGuidesFolder().getPath()+File.separator;
private static boolean setUpIsDone = false;
public void setUp() {
if (!setUpIsDone){
//Load archetypes and templates
try{
UserConfigurationManager.setParameter(UserConfigurationManager.TERMINOLOGIES_FOLDER_KW, GDLEditorMainTest.class.getClassLoader().getResource("terminologies").toURI().getPath());
UserConfigurationManager.setParameter(UserConfigurationManager.ARCHETYPES_FOLDER_KW, GDLEditorMainTest.class.getClassLoader().getResource("archetypes").toURI().getPath());
UserConfigurationManager.setParameter(UserConfigurationManager.TEMPLATES_FOLDER_KW, GDLEditorMainTest.class.getClassLoader().getResource("templates").toURI().getPath());
}catch(Exception e){
ExceptionHandler.handle(e);
fail("Exception caught loading archetypes and templates");
}
setUpIsDone = true;
}
}
public void testCompareSerializedGuides() throws Exception {
Archetype ar = ArchetypeManager.getInstance().getArchetypes().getArchetypeAOMById("openEHR-EHR-EVALUATION.cha2ds2vasc_compliance.v1");
UserConfigurationManager.setParameter(UserConfigurationManager.LANGUAGE,"en");
File mainGuideDir = new File(GDLEditorMainTest.class.getClassLoader().getResource("guidelines").getPath());
for (File file : mainGuideDir.listFiles()) {
if (file.getName().endsWith(".gdl")){
Logger.getLogger(GDLEditorMainTest.class).info("Testing guideline '"+file.getName()+"'");
String originalGuideStr = readGuideFile(file);
String output = parseAndReserializeGuide(originalGuideStr);
assertEquals(originalGuideStr, output);
}
}
}
private static String readGuideFile(File file) throws IOException {
FileInputStream fis = new FileInputStream(file);
InputStreamReader in = new InputStreamReader(fis, "UTF-8");
return IOUtils.toString(in).replaceAll("\\r\\n", "\n");
}
private static String parseAndReserializeGuide(String guideStr) throws Exception {
Guide guide = new GDLParser().parse(new ByteArrayInputStream(guideStr.getBytes()));
return GuideUtil.serializeGuide(guide);
}
}