package se.cambio.openehr.util; import org.openehr.jaxb.am.ArchetypeTerm; import org.openehr.jaxb.am.CodeDefinitionSet; import org.openehr.jaxb.rm.StringDictionaryItem; import se.cambio.openehr.util.exceptions.ArchetypeProcessingException; import java.util.HashMap; import java.util.List; import java.util.Map; public class ArchetypeTermMapGenerator { private final String language; private List<CodeDefinitionSet> termDefinitions; public ArchetypeTermMapGenerator(List<CodeDefinitionSet> termDefinitions, String language) { super(); this.termDefinitions = termDefinitions; this.language = language; } public Map<String, Map<String, String>> generateTermDefinitionsArchetypeTermMap() throws ArchetypeProcessingException { Map<String, Map<String, String>> archetypeTermMap = new HashMap<String, Map<String, String>>(); List<ArchetypeTerm> archetypeTerms = getTermDefinitionsArchetypeTerms(language); for(ArchetypeTerm archetypeTerm: archetypeTerms) { Map<String, String> dictionaryItemsMap = generateStringDictionaryMap(archetypeTerm); archetypeTermMap.put(archetypeTerm.getCode(), dictionaryItemsMap); } return archetypeTermMap; } private Map<String, String> generateStringDictionaryMap(ArchetypeTerm archetypeTerm) { Map<String, String> dictionaryItemsMap = new HashMap<String, String>(); for(StringDictionaryItem stringDictionaryItem: archetypeTerm.getItems()) { dictionaryItemsMap.put(stringDictionaryItem.getId(), stringDictionaryItem.getValue()); } return dictionaryItemsMap; } private List<ArchetypeTerm> getTermDefinitionsArchetypeTerms(String language) throws ArchetypeProcessingException { for (CodeDefinitionSet termDefinition: termDefinitions) { if (language.equals(termDefinition.getLanguage())) { return termDefinition.getItems(); } } throw new ArchetypeProcessingException("No term definitions found for language '" + language + "'"); } }