package se.cambio.openehr.util;
import se.cambio.cm.model.archetype.vo.ArchetypeElementVO;
import se.cambio.cm.model.archetype.vo.ArchetypeElementVOBuilder;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class OpenEHRRMUtil {
public static String EVENT_TIME_PATH = "/data/events/time";
public static String EXPIRY_TIME_PATH = "/expiry_time";
public static String NARRATIVE_PATH = "/narrative";
public static String TIME_PATH = "/time";
public static String ISM_TRANSITION_PATH = "/ism_transition/current_state";
public static String TEMPLATE_ID_PATH = "/archetype_details/template_id";
private static Collection<String> rmPaths;
static {
rmPaths = new ArrayList<String>();
rmPaths.add(EVENT_TIME_PATH);
rmPaths.add(EXPIRY_TIME_PATH);
rmPaths.add(NARRATIVE_PATH);
rmPaths.add(TIME_PATH);
rmPaths.add(ISM_TRANSITION_PATH);
rmPaths.add(TEMPLATE_ID_PATH);
}
public static Collection<ArchetypeElementVO> getRMElements(String idArchetype, String idTemplate, String entryType) {
return getRMElements(idArchetype, idTemplate, entryType, "");
}
public static Collection<ArchetypeElementVO> getRMElements(String idArchetype, String idTemplate, String entryType, String parentPath) {
Collection<ArchetypeElementVO> rmArchetypeElements = new ArrayList<ArchetypeElementVO>();
if (OpenEHRConst.OBSERVATION.equals(entryType)) {
//EventTime
rmArchetypeElements.add(
new ArchetypeElementVOBuilder()
.setName(OpenEHRLanguageManager.getMessage("EventTime"))
.setDescription(OpenEHRLanguageManager.getMessage("EventTimeDesc"))
.setType(OpenEHRDataValues.DV_DATE_TIME)
.setIdArchetype(idArchetype).setIdTemplate(idTemplate)
.setPath(parentPath + EVENT_TIME_PATH).createArchetypeElementVO());
}else if (OpenEHRConst.INSTRUCTION.equals(entryType)){
//Expiry Time
rmArchetypeElements.add(
new ArchetypeElementVOBuilder()
.setName(OpenEHRLanguageManager.getMessage("ExpireTime"))
.setDescription(OpenEHRLanguageManager.getMessage("ExpireTimeDesc"))
.setType(OpenEHRDataValues.DV_DATE_TIME)
.setIdArchetype(idArchetype)
.setIdTemplate(idTemplate)
.setPath(parentPath + EXPIRY_TIME_PATH).createArchetypeElementVO());
//Narrative Description
rmArchetypeElements.add(
new ArchetypeElementVOBuilder()
.setName(OpenEHRLanguageManager.getMessage("NarrativeDescription"))
.setDescription(OpenEHRLanguageManager.getMessage("NarrativeDescriptionDesc"))
.setType(OpenEHRDataValues.DV_TEXT)
.setIdArchetype(idArchetype)
.setIdTemplate(idTemplate)
.setPath(parentPath + NARRATIVE_PATH)
.createArchetypeElementVO());
}else if (OpenEHRConst.ACTION.equals(entryType)){
//Date and time Action step performed
rmArchetypeElements.add(
new ArchetypeElementVOBuilder()
.setName(OpenEHRLanguageManager.getMessage("DateTimeActionPerformed"))
.setDescription(OpenEHRLanguageManager.getMessage("DateTimeActionPerformedDesc"))
.setType(OpenEHRDataValues.DV_DATE_TIME)
.setIdArchetype(idArchetype)
.setIdTemplate(idTemplate)
.setPath(parentPath + TIME_PATH)
.createArchetypeElementVO());
//Current Action State
rmArchetypeElements.add(
new ArchetypeElementVOBuilder()
.setName(OpenEHRLanguageManager.getMessage("CurrentActionState"))
.setDescription(OpenEHRLanguageManager.getMessage("CurrentActionStateDesc"))
.setType(OpenEHRDataValues.DV_CODED_TEXT)
.setIdArchetype(idArchetype)
.setIdTemplate(idTemplate)
.setPath(parentPath + ISM_TRANSITION_PATH)
.createArchetypeElementVO());
}
if (parentPath.isEmpty()) { //TODO Check if this assumption is correct
//Template Id
rmArchetypeElements.add(
new ArchetypeElementVOBuilder()
.setName(OpenEHRLanguageManager.getMessage("TemplateId"))
.setDescription(OpenEHRLanguageManager.getMessage("TemplateIdDesc"))
.setType(OpenEHRDataValues.DV_TEXT)
.setIdArchetype(idArchetype)
.setIdTemplate(idTemplate)
.setPath(TEMPLATE_ID_PATH)
.createArchetypeElementVO());
}
return rmArchetypeElements;
}
public final static Collection<String> getRmPaths(){
return rmPaths;
}
public static boolean isRMPath(String path) {
Iterator<String> i = rmPaths.iterator();
while(i.hasNext()){
if (path.endsWith(i.next())){
return true;
}
}
return false;
}
}