Search in sources :

Example 56 with ConceptDefinitionComponent

use of org.hl7.fhir.r5.model.CodeSystem.ConceptDefinitionComponent in project org.hl7.fhir.core by hapifhir.

the class CodeSystemUtilities method setStatus.

public static void setStatus(CodeSystem cs, ConceptDefinitionComponent concept, ConceptStatus status) throws FHIRFormatError {
    defineStatusProperty(cs);
    ConceptPropertyComponent p = getProperty(concept, "status");
    if (p != null)
        p.setValue(new CodeType(status.toCode()));
    else
        concept.addProperty().setCode("status").setValue(new CodeType(status.toCode()));
}
Also used : ConceptPropertyComponent(org.hl7.fhir.r4b.model.CodeSystem.ConceptPropertyComponent) CodeType(org.hl7.fhir.r4b.model.CodeType)

Example 57 with ConceptDefinitionComponent

use of org.hl7.fhir.r5.model.CodeSystem.ConceptDefinitionComponent in project org.hl7.fhir.core by hapifhir.

the class CodeSystemComparer method intersect.

private ConceptDefinitionComponent intersect(ConceptDefinitionComponent l, ConceptDefinitionComponent r, CodeSystemComparison res) {
    ConceptDefinitionComponent cd = l.copy();
    if (l.hasDisplay() && !r.hasDisplay()) {
        cd.setDisplay(null);
    }
    if (l.hasDefinition() && !r.hasDefinition()) {
        cd.setDefinition(null);
    }
    intersectProps(cd, l, r, res);
    // mergeDesignations(cd, l, r);
    return cd;
}
Also used : ConceptDefinitionComponent(org.hl7.fhir.r5.model.CodeSystem.ConceptDefinitionComponent)

Example 58 with ConceptDefinitionComponent

use of org.hl7.fhir.r5.model.CodeSystem.ConceptDefinitionComponent in project org.hl7.fhir.core by hapifhir.

the class CodeSystemComparer method compareConcepts.

private void compareConcepts(List<ConceptDefinitionComponent> left, List<ConceptDefinitionComponent> right, StructuralMatch<ConceptDefinitionComponent> combined, List<ConceptDefinitionComponent> union, List<ConceptDefinitionComponent> intersection, CodeSystem csU, CodeSystem csI, CodeSystemComparison res, String path) {
    List<ConceptDefinitionComponent> matchR = new ArrayList<>();
    for (ConceptDefinitionComponent l : left) {
        ConceptDefinitionComponent r = findInList(right, l);
        if (r == null) {
            union.add(l);
            combined.getChildren().add(new StructuralMatch<CodeSystem.ConceptDefinitionComponent>(l, vmI(IssueSeverity.INFORMATION, "Removed this concept", path)));
        } else {
            matchR.add(r);
            ConceptDefinitionComponent cdM = merge(l, r, csU.getProperty(), res);
            ConceptDefinitionComponent cdI = intersect(l, r, res);
            union.add(cdM);
            intersection.add(cdI);
            StructuralMatch<ConceptDefinitionComponent> sm = new StructuralMatch<CodeSystem.ConceptDefinitionComponent>(l, r);
            compare(sm.getMessages(), l, r, path + ".where(code='" + l.getCode() + "')", res);
            combined.getChildren().add(sm);
            compareConcepts(l.getConcept(), r.getConcept(), sm, cdM.getConcept(), cdI.getConcept(), csU, csI, res, path + ".where(code='" + l.getCode() + "').concept");
        }
    }
    for (ConceptDefinitionComponent r : right) {
        if (!matchR.contains(r)) {
            union.add(r);
            combined.getChildren().add(new StructuralMatch<CodeSystem.ConceptDefinitionComponent>(vmI(IssueSeverity.INFORMATION, "Added this concept", path), r));
        }
    }
}
Also used : ConceptDefinitionComponent(org.hl7.fhir.r5.model.CodeSystem.ConceptDefinitionComponent) ArrayList(java.util.ArrayList) CodeSystem(org.hl7.fhir.r5.model.CodeSystem)

Example 59 with ConceptDefinitionComponent

use of org.hl7.fhir.r5.model.CodeSystem.ConceptDefinitionComponent in project org.hl7.fhir.core by hapifhir.

the class CodeSystemComparer method merge.

private ConceptDefinitionComponent merge(ConceptDefinitionComponent l, ConceptDefinitionComponent r, List<PropertyComponent> destProps, CodeSystemComparison res) {
    ConceptDefinitionComponent cd = l.copy();
    if (!l.hasDisplay() && r.hasDisplay()) {
        cd.setDisplay(r.getDisplay());
    }
    if (!l.hasDefinition() && r.hasDefinition()) {
        cd.setDefinition(r.getDefinition());
    }
    mergeProps(cd, l, r, destProps, res);
    mergeDesignations(cd, l, r);
    return cd;
}
Also used : ConceptDefinitionComponent(org.hl7.fhir.r5.model.CodeSystem.ConceptDefinitionComponent)

Example 60 with ConceptDefinitionComponent

use of org.hl7.fhir.r5.model.CodeSystem.ConceptDefinitionComponent in project org.hl7.fhir.core by hapifhir.

the class CodeSystemRenderer method addDefineRowToTable.

private boolean addDefineRowToTable(XhtmlNode t, ConceptDefinitionComponent c, int level, boolean hasHierarchy, boolean hasDisplay, boolean hasDefinitions, boolean comment, boolean version, boolean deprecated, List<UsedConceptMap> maps, String system, CodeSystem cs, List<PropertyComponent> properties, CodeSystemNavigator csNav, List<String> langs, boolean isSupplement) throws FHIRFormatError, DefinitionException, IOException {
    boolean hasExtensions = false;
    XhtmlNode tr = t.tr();
    XhtmlNode td = tr.td();
    if (hasHierarchy) {
        td.addText(Integer.toString(level + 1));
        td = tr.td();
        String s = Utilities.padLeft("", '\u00A0', level * 2);
        td.addText(s);
    }
    String link = isSupplement ? getLinkForCode(cs.getSupplements(), null, c.getCode()) : null;
    if (link != null) {
        td.ah(link).attribute("style", "white-space:nowrap").addText(c.getCode());
    } else {
        td.attribute("style", "white-space:nowrap").addText(c.getCode());
    }
    XhtmlNode a;
    if (c.hasCodeElement()) {
        td.an(cs.getId() + "-" + Utilities.nmtokenize(c.getCode()));
    }
    for (ConceptDefinitionDesignationComponent cd : c.getDesignation()) {
        if (cd.hasLanguage() && !langs.contains(cd.getLanguage()) && (!cs.hasLanguage() || !cs.getLanguage().equals(cd.getLanguage()))) {
            langs.add(cd.getLanguage());
        }
    }
    if (hasDisplay) {
        td = tr.td();
        renderDisplayName(c, cs, td);
    }
    if (hasDefinitions) {
        td = tr.td();
        if (c != null && c.hasDefinitionElement()) {
            if (getContext().getLang() == null) {
                if (hasMarkdownInDefinitions(cs))
                    addMarkdown(td, c.getDefinition());
                else
                    td.addText(c.getDefinition());
            } else if (getContext().getLang().equals("*")) {
                boolean sl = false;
                for (ConceptDefinitionDesignationComponent cd : c.getDesignation()) if (cd.getUse().is("http://terminology.hl7.org/CodeSystem/designation-usage", "definition") && cd.hasLanguage() && !c.getDefinition().equalsIgnoreCase(cd.getValue()))
                    sl = true;
                td.addText((sl ? cs.getLanguage("en") + ": " : "") + c.getDefinition());
                for (ConceptDefinitionDesignationComponent cd : c.getDesignation()) {
                    if (cd.getUse().is("http://terminology.hl7.org/CodeSystem/designation-usage", "definition") && cd.hasLanguage() && !c.getDefinition().equalsIgnoreCase(cd.getValue())) {
                        td.br();
                        td.addText(cd.getLanguage() + ": " + cd.getValue());
                    }
                }
            } else if (getContext().getLang().equals(cs.getLanguage()) || (getContext().getLang().equals("en") && !cs.hasLanguage())) {
                td.addText(c.getDefinition());
            } else {
                for (ConceptDefinitionDesignationComponent cd : c.getDesignation()) {
                    if (cd.getUse().is("http://terminology.hl7.org/CodeSystem/designation-usage", "definition") && cd.hasLanguage() && cd.getLanguage().equals(getContext().getLang())) {
                        td.addText(cd.getValue());
                    }
                }
            }
        }
    }
    if (deprecated) {
        td = tr.td();
        Boolean b = CodeSystemUtilities.isDeprecated(cs, c, false);
        if (b != null && b) {
            smartAddText(td, getContext().getWorker().translator().translate("xhtml-gen-cs", "Deprecated", getContext().getLang()));
            hasExtensions = true;
            if (ToolingExtensions.hasExtension(c, ToolingExtensions.EXT_REPLACED_BY)) {
                Coding cc = (Coding) ToolingExtensions.getExtension(c, ToolingExtensions.EXT_REPLACED_BY).getValue();
                td.tx(" (replaced by ");
                String url = getCodingReference(cc, system);
                if (url != null) {
                    td.ah(url).addText(cc.getCode());
                    td.tx(": " + cc.getDisplay() + ")");
                } else
                    td.addText(cc.getCode() + " '" + cc.getDisplay() + "' in " + cc.getSystem() + ")");
            }
        }
    }
    if (comment) {
        td = tr.td();
        Extension ext = c.getExtensionByUrl(ToolingExtensions.EXT_CS_COMMENT);
        if (ext != null) {
            hasExtensions = true;
            String bc = ext.hasValue() ? ext.getValue().primitiveValue() : null;
            Map<String, String> translations = ToolingExtensions.getLanguageTranslations(ext.getValue());
            if (getContext().getLang() == null) {
                if (bc != null)
                    td.addText(bc);
            } else if (getContext().getLang().equals("*")) {
                boolean sl = false;
                for (String l : translations.keySet()) if (bc == null || !bc.equalsIgnoreCase(translations.get(l)))
                    sl = true;
                if (bc != null) {
                    td.addText((sl ? cs.getLanguage("en") + ": " : "") + bc);
                }
                for (String l : translations.keySet()) {
                    if (bc == null || !bc.equalsIgnoreCase(translations.get(l))) {
                        if (!td.getChildNodes().isEmpty())
                            td.br();
                        td.addText(l + ": " + translations.get(l));
                    }
                }
            } else if (getContext().getLang().equals(cs.getLanguage()) || (getContext().getLang().equals("en") && !cs.hasLanguage())) {
                if (bc != null)
                    td.addText(bc);
            } else {
                if (bc != null)
                    translations.put(cs.getLanguage("en"), bc);
                for (String l : translations.keySet()) {
                    if (l.equals(getContext().getLang())) {
                        td.addText(translations.get(l));
                    }
                }
            }
        }
    }
    if (version) {
        td = tr.td();
        if (c.hasUserData("cs.version.notes"))
            td.addText(c.getUserString("cs.version.notes"));
    }
    if (properties != null) {
        for (PropertyComponent pc : properties) {
            td = tr.td();
            boolean first = true;
            List<ConceptPropertyComponent> pcvl = CodeSystemUtilities.getPropertyValues(c, pc.getCode());
            for (ConceptPropertyComponent pcv : pcvl) {
                if (pcv.hasValue()) {
                    if (first)
                        first = false;
                    else
                        td.addText(", ");
                    if (pcv.hasValueCoding()) {
                        td.addText(pcv.getValueCoding().getCode());
                    } else if (pcv.hasValueStringType() && Utilities.isAbsoluteUrlLinkable(pcv.getValue().primitiveValue())) {
                        td.ah(pcv.getValue().primitiveValue()).tx(pcv.getValue().primitiveValue());
                    } else {
                        td.addText(pcv.getValue().primitiveValue());
                    }
                }
            }
        }
    }
    for (UsedConceptMap m : maps) {
        td = tr.td();
        List<TargetElementComponentWrapper> mappings = findMappingsForCode(c.getCode(), m.getMap());
        boolean first = true;
        for (TargetElementComponentWrapper mapping : mappings) {
            if (!first)
                td.br();
            first = false;
            XhtmlNode span = td.span(null, mapping.comp.hasRelationship() ? mapping.comp.getRelationship().toCode() : "");
            span.addText(getCharForRelationship(mapping.comp));
            a = td.ah(getContext().getSpecificationLink() + m.getLink() + "#" + makeAnchor(mapping.group.getTarget(), mapping.comp.getCode()));
            a.addText(mapping.comp.getCode());
            if (!Utilities.noString(mapping.comp.getComment()))
                td.i().tx("(" + mapping.comp.getComment() + ")");
        }
    }
    List<ConceptDefinitionComponent> ocl = csNav.getOtherChildren(c);
    for (ConceptDefinitionComponent cc : csNav.getConcepts(c)) {
        hasExtensions = addDefineRowToTable(t, cc, level + 1, hasHierarchy, hasDisplay, hasDefinitions, comment, version, deprecated, maps, system, cs, properties, csNav, langs, isSupplement) || hasExtensions;
    }
    for (ConceptDefinitionComponent cc : ocl) {
        tr = t.tr();
        td = tr.td();
        td.addText(Integer.toString(level + 2));
        td = tr.td();
        String s = Utilities.padLeft("", '\u00A0', (level + 1) * 2);
        td.addText(s);
        td.attribute("style", "white-space:nowrap");
        a = td.ah("#" + cs.getId() + "-" + Utilities.nmtokenize(cc.getCode()));
        a.addText(cc.getCode());
        if (hasDisplay) {
            td = tr.td();
            renderDisplayName(cc, cs, td);
        }
        int w = 1 + (deprecated ? 1 : 0) + (comment ? 1 : 0) + (version ? 1 : 0) + maps.size();
        if (properties != null) {
            w = w + properties.size();
        }
        td = tr.td().colspan(Integer.toString(w));
    }
    return hasExtensions;
}
Also used : ConceptPropertyComponent(org.hl7.fhir.r5.model.CodeSystem.ConceptPropertyComponent) XhtmlNode(org.hl7.fhir.utilities.xhtml.XhtmlNode) Extension(org.hl7.fhir.r5.model.Extension) PropertyComponent(org.hl7.fhir.r5.model.CodeSystem.PropertyComponent) ConceptPropertyComponent(org.hl7.fhir.r5.model.CodeSystem.ConceptPropertyComponent) ConceptDefinitionComponent(org.hl7.fhir.r5.model.CodeSystem.ConceptDefinitionComponent) ConceptDefinitionDesignationComponent(org.hl7.fhir.r5.model.CodeSystem.ConceptDefinitionDesignationComponent) Coding(org.hl7.fhir.r5.model.Coding)

Aggregations

ConceptDefinitionComponent (org.hl7.fhir.r5.model.CodeSystem.ConceptDefinitionComponent)54 ArrayList (java.util.ArrayList)26 XhtmlNode (org.hl7.fhir.utilities.xhtml.XhtmlNode)26 ConceptDefinitionComponent (org.hl7.fhir.r4b.model.CodeSystem.ConceptDefinitionComponent)22 CodeSystem (org.hl7.fhir.r5.model.CodeSystem)21 ConceptDefinitionComponent (org.hl7.fhir.dstu3.model.CodeSystem.ConceptDefinitionComponent)17 ConceptDefinitionComponent (org.hl7.fhir.r4.model.CodeSystem.ConceptDefinitionComponent)16 ValueSet (org.hl7.fhir.dstu2.model.ValueSet)15 FHIRException (org.hl7.fhir.exceptions.FHIRException)14 CommaSeparatedStringBuilder (org.hl7.fhir.utilities.CommaSeparatedStringBuilder)12 ConceptPropertyComponent (org.hl7.fhir.r4b.model.CodeSystem.ConceptPropertyComponent)10 ConceptPropertyComponent (org.hl7.fhir.r5.model.CodeSystem.ConceptPropertyComponent)10 IOException (java.io.IOException)9 HashMap (java.util.HashMap)9 NotImplementedException (org.apache.commons.lang3.NotImplementedException)9 TerminologyServiceException (org.hl7.fhir.exceptions.TerminologyServiceException)9 FileNotFoundException (java.io.FileNotFoundException)8 ConceptDefinitionComponent (org.hl7.fhir.dstu2016may.model.CodeSystem.ConceptDefinitionComponent)8 ValidationResult (org.hl7.fhir.r5.context.IWorkerContext.ValidationResult)8 ConceptDefinitionDesignationComponent (org.hl7.fhir.r5.model.CodeSystem.ConceptDefinitionDesignationComponent)8