Search in sources :

Example 41 with PrimitiveType

use of org.hl7.fhir.r4b.model.PrimitiveType in project kindling by HL7.

the class XSDBaseGenerator method genPrimitives.

private void genPrimitives() throws Exception {
    for (DefinedCode cd : definitions.getPrimitives().values()) {
        if (cd instanceof PrimitiveType) {
            PrimitiveType pt = (PrimitiveType) cd;
            // two very special cases due to schema weirdness
            if (cd.getCode().equals("date")) {
                write("  <xs:simpleType name=\"date-primitive\">\r\n");
                write("    <xs:restriction>\r\n");
                write("      <xs:simpleType>\r\n");
                write("        <xs:union memberTypes=\"xs:gYear xs:gYearMonth xs:date\"/>\r\n");
                write("      </xs:simpleType>\r\n");
                write("      <xs:pattern value=\"([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[0-9]|[1-2][0-9]|3[0-1]))?)?\"/>\r\n");
                write("    </xs:restriction>\r\n");
                write("  </xs:simpleType>\r\n");
            } else if (cd.getCode().equals("dateTime")) {
                write("  <xs:simpleType name=\"dateTime-primitive\">\r\n");
                write("    <xs:restriction>\r\n");
                write("      <xs:simpleType>\r\n");
                write("        <xs:union memberTypes=\"xs:gYear xs:gYearMonth xs:date xs:dateTime\"/>\r\n");
                write("      </xs:simpleType>\r\n");
                write("      <xs:pattern value=\"([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[0-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?\"/>\r\n");
                write("    </xs:restriction>\r\n");
                write("  </xs:simpleType>\r\n");
            } else if (cd.getCode().equals("time")) {
                write("  <xs:simpleType name=\"time-primitive\">\r\n");
                write("    <xs:restriction base=\"xs:time\">\r\n");
                write("      <xs:pattern value=\"([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?\"/>\r\n");
                write("    </xs:restriction>\r\n");
                write("  </xs:simpleType>\r\n");
            } else {
                write("  <xs:simpleType name=\"" + pt.getCode() + "-primitive\">\r\n");
                if (pt.getSchemaType().contains(",")) {
                    write("    <xs:union memberTypes=\"" + pt.getSchemaType().replace(",", "") + "\"/>\r\n");
                } else if (pt.getSchemaType().equals("string")) {
                    write("    <xs:restriction base=\"xs:" + pt.getSchemaType() + "\">\r\n");
                    write("      <xs:minLength value=\"1\"/>\r\n");
                    write("    </xs:restriction>\r\n");
                } else if (!Utilities.noString(pt.getRegex())) {
                    write("    <xs:restriction base=\"xs:" + pt.getSchemaType() + "\">\r\n");
                    write("      <xs:pattern value=\"" + pt.getRegex() + "\"/>\r\n");
                    write("    </xs:restriction>\r\n");
                } else {
                    write("    <xs:restriction base=\"xs:" + pt.getSchemaType() + "\"/>\r\n");
                }
                write("  </xs:simpleType>\r\n");
            }
            write("  <xs:complexType name=\"" + pt.getCode() + "\">\r\n");
            write("    <xs:annotation>\r\n");
            write("      <xs:documentation xml:lang=\"en\">" + Utilities.escapeXml(pt.getDefinition()) + "</xs:documentation>\r\n");
            if (!Utilities.noString(pt.getComment()))
                write("      <xs:documentation xml:lang=\"en\">" + Utilities.escapeXml(pt.getComment()) + "</xs:documentation>\r\n");
            write("      <xs:documentation xml:lang=\"en\">If the element is present, it must have either a @value, an @id, or extensions</xs:documentation>\r\n");
            write("    </xs:annotation>\r\n");
            write("    <xs:complexContent>\r\n");
            write("      <xs:extension base=\"Element\">\r\n");
            write("        <xs:attribute name=\"value\" type=\"" + pt.getCode() + "-primitive\" use=\"optional\"/>\r\n");
            write("      </xs:extension>\r\n");
            write("    </xs:complexContent>\r\n");
            write("  </xs:complexType>\r\n");
        } else {
            DefinedStringPattern sp = (DefinedStringPattern) cd;
            write("  <xs:simpleType name=\"" + sp.getCode() + "-primitive\">\r\n");
            if (sp.getSchema().endsWith("+")) {
                write("    <xs:restriction base=\"" + sp.getSchema().substring(0, sp.getSchema().length() - 1) + "\">\r\n");
                write("      <xs:pattern value=\"" + sp.getRegex() + "\"/>\r\n");
                write("      <xs:minLength value=\"1\"/>\r\n");
                if (sp.getCode().equals("id"))
                    write("      <xs:maxLength value=\"64\"/>\r\n");
                write("    </xs:restriction>\r\n");
                write("  </xs:simpleType>\r\n");
            } else {
                write("    <xs:restriction base=\"" + sp.getSchema() + "\">\r\n");
                if (!sp.getSchema().contains("Integer")) {
                    write("      <xs:minLength value=\"1\"/>\r\n");
                }
                if (!Utilities.noString(sp.getRegex())) {
                    write("      <xs:pattern value=\"" + sp.getRegex() + "\"/>\r\n");
                }
                write("    </xs:restriction>\r\n");
                write("  </xs:simpleType>\r\n");
            }
            write("  <xs:complexType name=\"" + sp.getCode() + "\">\r\n");
            write("    <xs:annotation>\r\n");
            write("      <xs:documentation xml:lang=\"en\">" + Utilities.escapeXml(sp.getDefinition()) + "</xs:documentation>\r\n");
            if (!Utilities.noString(sp.getComment()))
                write("      <xs:documentation xml:lang=\"en\">" + Utilities.escapeXml(sp.getComment()) + "</xs:documentation>\r\n");
            write("      <xs:documentation xml:lang=\"en\">If the element is present, it must have either a @value, an @id referenced from the Narrative, or extensions</xs:documentation>\r\n");
            write("    </xs:annotation>\r\n");
            write("    <xs:complexContent>\r\n");
            write("      <xs:extension base=\"Element\">\r\n");
            write("        <xs:attribute name=\"value\" type=\"" + sp.getCode() + "-primitive\"/>\r\n");
            write("      </xs:extension>\r\n");
            write("    </xs:complexContent>\r\n");
            write("  </xs:complexType>\r\n");
        }
    }
}
Also used : DefinedStringPattern(org.hl7.fhir.definitions.model.DefinedStringPattern) DefinedCode(org.hl7.fhir.definitions.model.DefinedCode) PrimitiveType(org.hl7.fhir.definitions.model.PrimitiveType)

Example 42 with PrimitiveType

use of org.hl7.fhir.r4b.model.PrimitiveType in project kindling by HL7.

the class SvgGenerator method determineMetrics.

private Point determineMetrics(ElementDefn e, ClassItem source, String path, boolean isRoot, DefinedCode primitive) throws Exception {
    String t = e.getName();
    if (isRoot) {
        t = t + " {" + e.typeCodeNoParams() + ")";
    }
    if (definitions.getBaseResources().containsKey(e.getName()) && definitions.getBaseResources().get(e.getName()).isInterface()) {
        t = t + " «Interface»";
    }
    double width = textWidth(t) * 1.8;
    // double width = textWidth(e.getName()) * 1.8 + (isRoot ? textWidth(" (Resource)") : 0);
    double height;
    if (attributes) {
        if (primitive != null) {
            if (primitive instanceof PrimitiveType) {
                height = HEADER_HEIGHT + GAP_HEIGHT * 2 + LINE_HEIGHT + GAP_HEIGHT * 2;
                width = textWidth("value : " + getXsi(primitive) + " 0..1");
            } else
                height = HEADER_HEIGHT + GAP_HEIGHT * 2;
        } else {
            int i = 0;
            for (ElementDefn c : e.getElements()) if (isAttribute(c)) {
                String[] texts = textForAttribute(c);
                i = i + texts.length;
                double w = textWidth(texts[0]);
                for (int j = 1; j < texts.length; j++) w = Math.max(w, textWidth(texts[j]));
                if (w > width)
                    width = w;
            }
            height = HEADER_HEIGHT + GAP_HEIGHT * 2 + LINE_HEIGHT * i + GAP_HEIGHT * 2;
        }
    } else
        height = HEADER_HEIGHT + GAP_HEIGHT * 2;
    if (ini != null) {
        String uml = ini.getStringProperty("directions", path);
        if (!Utilities.noString(uml) && uml.contains(";")) {
            String[] svg = uml.split("\\;");
            e.setSvgLeft(Integer.parseInt(svg[0]));
            e.setSvgTop(Integer.parseInt(svg[1]));
        } else if (!Utilities.noString(uml) && uml.contains(",")) {
            String[] svg = uml.split("\\,");
            e.setSvgLeft(Integer.parseInt(svg[0]));
            e.setSvgTop(Integer.parseInt(svg[1]));
        } else {
            e.setUmlDir(uml);
        }
    }
    Point p = new Point(e.getSvgLeft(), e.getSvgTop(), PointKind.unknown);
    if (p.y == ElementDefn.MAX_NEG || p.x == ElementDefn.MAX_NEG) {
        if ("left".equals(e.getUmlDir())) {
            p.x = source.left - 120 - width;
            p.y = source.centerV() - height / 2;
            p = findEmptyPlace(p, width, height, 0, 80);
        } else if ("right".equals(e.getUmlDir())) {
            p.x = source.right() + 120;
            p.y = source.centerV() - height / 2;
            p = findEmptyPlace(p, width, height, 0, 80);
        } else if ("up".equals(e.getUmlDir())) {
            p.x = source.centerH() - width / 2;
            p.y = source.top - height - 80;
            p = findEmptyPlace(p, width, height, 80, 0);
        } else if ("down".equals(e.getUmlDir())) {
            p.x = source.centerH() - width / 2;
            p.y = source.bottom() + 80;
            p = findEmptyPlace(p, width, height, +80, 0);
        } else {
            p.y = 0;
            p.x = 0;
            p = findEmptyPlace(p, width, height, 80, 0);
        }
    }
    miny = Math.min(miny, p.y);
    minx = Math.min(minx, p.x);
    ClassItem item = new ClassItem(p.x, p.y, width, height, e.getPath());
    classes.put(e, item);
    double x = item.right() + MARGIN_X;
    double y = item.bottom() + MARGIN_Y;
    if (attributes) {
        for (ElementDefn c : e.getElements()) {
            if (!isAttribute(c) && (Utilities.noString(c.typeCode()) || !c.typeCode().startsWith("@"))) {
                p = determineMetrics(c, item, path + "." + c.getName(), false, null);
                x = Math.max(x, p.x + MARGIN_X);
                y = Math.max(y, p.y + MARGIN_Y);
            }
        }
    }
    return new Point(x, y, PointKind.unknown);
}
Also used : ElementDefn(org.hl7.fhir.definitions.model.ElementDefn) PrimitiveType(org.hl7.fhir.definitions.model.PrimitiveType)

Example 43 with PrimitiveType

use of org.hl7.fhir.r4b.model.PrimitiveType in project kindling by HL7.

the class ProfileGenerator method genUml.

public void genUml(PrimitiveType type) {
    UMLClass c = uml.getClassByNameCreate(type.getCode());
    c.setDocumentation(type.getDefinition());
    c.setSpecialises(uml.getClassByName("PrimitiveType"));
    String t = type.getSchemaType();
    if (!t.startsWith("xs:"))
        t = "xs:" + t;
    if (!uml.hasPrimitive(t)) {
        UMLPrimitive p = new UMLPrimitive(t);
        uml.getTypes().put(t, p);
    }
    c.getAttributes().add(new UMLAttribute("value", "0", "1", uml.getTypes().get(t)));
}
Also used : UMLClass(org.hl7.fhir.definitions.uml.UMLClass) UMLAttribute(org.hl7.fhir.definitions.uml.UMLAttribute) UMLPrimitive(org.hl7.fhir.definitions.uml.UMLPrimitive)

Example 44 with PrimitiveType

use of org.hl7.fhir.r4b.model.PrimitiveType in project kindling by HL7.

the class SourceParser method processImport.

private void processImport(Sheet sheet, int row) throws Exception {
    PrimitiveType prim = new PrimitiveType();
    prim.setCode(sheet.getColumn(row, "Data Type"));
    prim.setDefinition(sheet.getColumn(row, "Definition"));
    prim.setComment(sheet.getColumn(row, "Comments"));
    prim.setSchemaType(sheet.getColumn(row, "Schema"));
    prim.setJsonType(sheet.getColumn(row, "Json"));
    prim.setRegex(sheet.getColumn(row, "RegEx"));
    prim.setV2(sheet.getColumn(row, "v2"));
    prim.setV3(sheet.getColumn(row, "v3"));
    TypeRef td = new TypeRef();
    td.setName(prim.getCode());
    definitions.getKnownTypes().add(td);
    definitions.getPrimitives().put(prim.getCode(), prim);
}
Also used : TypeRef(org.hl7.fhir.definitions.model.TypeRef) PrimitiveType(org.hl7.fhir.definitions.model.PrimitiveType)

Example 45 with PrimitiveType

use of org.hl7.fhir.r4b.model.PrimitiveType in project org.hl7.fhir.core by hapifhir.

the class PrimitiveType method equalsDeep.

@Override
public boolean equalsDeep(Base obj) {
    if (!super.equalsDeep(obj))
        return false;
    if (obj == null) {
        return false;
    }
    if (!(obj.getClass() == getClass())) {
        return false;
    }
    PrimitiveType<?> o = (PrimitiveType<?>) obj;
    EqualsBuilder b = new EqualsBuilder();
    b.append(getValue(), o.getValue());
    return b.isEquals();
}
Also used : IPrimitiveType(org.hl7.fhir.instance.model.api.IPrimitiveType) EqualsBuilder(org.apache.commons.lang3.builder.EqualsBuilder)

Aggregations

FHIRException (org.hl7.fhir.exceptions.FHIRException)18 EqualsBuilder (org.apache.commons.lang3.builder.EqualsBuilder)12 IPrimitiveType (org.hl7.fhir.instance.model.api.IPrimitiveType)12 IOException (java.io.IOException)10 NotImplementedException (org.apache.commons.lang3.NotImplementedException)10 ParameterizedTest (org.junit.jupiter.params.ParameterizedTest)9 MethodSource (org.junit.jupiter.params.provider.MethodSource)9 PrimitiveType (org.hl7.fhir.r5.model.PrimitiveType)8 CommaSeparatedStringBuilder (org.hl7.fhir.utilities.CommaSeparatedStringBuilder)8 URISyntaxException (java.net.URISyntaxException)6 PrimitiveType (org.hl7.fhir.definitions.model.PrimitiveType)6 FileNotFoundException (java.io.FileNotFoundException)5 ArrayList (java.util.ArrayList)5 PrimitiveType (org.hl7.fhir.dstu3.model.PrimitiveType)5 PrimitiveType (org.hl7.fhir.r4b.model.PrimitiveType)5 XhtmlNode (org.hl7.fhir.utilities.xhtml.XhtmlNode)5 URI (java.net.URI)4 ElementDefn (org.hl7.fhir.definitions.model.ElementDefn)4 StringType (org.hl7.fhir.dstu3.model.StringType)4 ParserConfigurationException (javax.xml.parsers.ParserConfigurationException)3