Search in sources :

Example 71 with Questionnaire

use of org.hl7.fhir.r4.model.Questionnaire in project kindling by HL7.

the class BreadCrumbManager method makelist.

public String makelist(String name, String type, String prefix, String title) throws Exception {
    StringBuilder b = new StringBuilder();
    if (name.equals("index")) {
        b.append("        <li><b>Home</b></li>\r\n");
    } else {
        // b.append("        <li><a href=\""+prefix+"index.html\">"+translations.getMessage("HOME", "Home")+"</a></li>\r\n");
        if (!name.endsWith(".html"))
            name = name + ".html";
        String nt = Utilities.changeFileExt(name, "");
        if (map.containsKey(nt) && Utilities.noString(type)) {
            String[] path = map.get(nt).split("\\.");
            Page focus = home;
            for (int i = 0; i < path.length - 1; i++) {
                focus = getChild(focus, path[i]);
                if (focus.getFilename() != null)
                    b.append("        <li><a href=\"" + prefix + focus.getFilename() + "\">" + imgLink(prefix, focus) + Utilities.escapeXml(focus.getTitle()) + "</a></li>\r\n");
            }
            focus = getChild(focus, path[path.length - 1]);
            b.append("        <li><b>" + imgLink(prefix, focus) + Utilities.escapeXml(focus.resource) + "</b></li>");
        } else if (map.containsKey(name)) {
            String[] path = map.get(name).split("\\.");
            Page focus = home;
            for (int i = 0; i < path.length - 1; i++) {
                focus = getChild(focus, path[i]);
                if (focus.getFilename() != null)
                    b.append("        <li><a href=\"" + prefix + focus.getFilename() + "\">" + imgLink(prefix, focus) + Utilities.escapeXml(focus.getTitle()) + "</a></li>\r\n");
            }
            focus = getChild(focus, path[path.length - 1]);
            b.append("        <li><b>" + imgLink(prefix, focus) + Utilities.escapeXml(focus.getTitle()) + "</b></li>");
        } else if (map.containsKey(type) && !type.equals("resource")) {
            String[] path = map.get(type).split("\\.");
            Page focus = home;
            for (int i = 0; i < path.length - 1; i++) {
                focus = getChild(focus, path[i]);
                b.append("        <li><a href=\"" + prefix + focus.getFilename() + "\">" + imgLink(prefix, focus) + Utilities.escapeXml(focus.getTitle()) + "</a></li>");
            }
            b.append("        <li><b>" + imgLink(prefix, focus) + Utilities.escapeXml(title) + "</b></li>");
        } else if (type.equals("example") && name.contains("-") && map.containsKey(name.substring(0, name.indexOf("-")))) {
            String[] path = map.get(name.substring(0, name.indexOf("-"))).split("\\.");
            Page focus = home;
            for (int i = 0; i < path.length; i++) {
                focus = getChild(focus, path[i]);
                if (focus.type == PageType.resource)
                    b.append("        <li><a href=\"" + prefix + focus.getReference().toLowerCase() + ".html\">" + imgLink(prefix, focus) + Utilities.escapeXml(focus.getReference()) + "</a></li>");
                else
                    b.append("        <li><a href=\"" + prefix + focus.getFilename() + "\">" + imgLink(prefix, focus) + Utilities.escapeXml(focus.getTitle()) + "</a></li>");
            }
            b.append("        <li><b>Example</b></li>");
        } else {
            String s = map.get(type.substring(type.indexOf(":") + 1).toLowerCase());
            if (type.startsWith("resource-instance") && type.contains(":")) {
                if (s == null)
                    throw new Exception("Unable to find map for " + type);
                String[] path = s.split("\\.");
                Page focus = home;
                for (int i = 0; i < path.length; i++) {
                    focus = getChild(focus, path[i]);
                    if (focus.type == PageType.resource)
                        b.append("        <li><a href=\"" + prefix + focus.getReference().toLowerCase() + ".html\">" + imgLink(prefix, focus) + Utilities.escapeXml(focus.getReference()) + "</a></li>");
                    else
                        b.append("        <li><a href=\"" + prefix + focus.getFilename() + "\">" + imgLink(prefix, focus) + Utilities.escapeXml(Utilities.escapeXml(focus.getTitle())) + "</a></li>");
                }
                if (type.startsWith("resource-instance"))
                    b.append("        <li><b>Example Instance</b></li>");
                else
                    b.append("        <li><b>Profile Instance</b></li>");
            } else if (type.startsWith("resource-questionnaire") && type.contains(":")) {
                if (s == null)
                    throw new Exception("Unable to find map for " + type);
                String[] path = s.split("\\.");
                Page focus = home;
                for (int i = 0; i < path.length; i++) {
                    focus = getChild(focus, path[i]);
                    if (focus.type == PageType.resource)
                        b.append("        <li><a href=\"" + prefix + focus.getReference().toLowerCase() + ".html\">" + imgLink(prefix, focus) + Utilities.escapeXml(focus.getReference()) + "</a></li>");
                    else
                        b.append("        <li><a href=\"" + prefix + focus.getFilename() + "\">" + imgLink(prefix, focus) + Utilities.escapeXml(focus.getTitle()) + "</a></li>");
                }
                b.append("        <li><b>Generated Questionnaire</b></li>");
            } else if (type.equals("valueset-instance") && name.contains(".")) {
                String[] path = map.get("terminologies-valuesets.html").split("\\.");
                Page focus = home;
                for (int i = 0; i < path.length; i++) {
                    focus = getChild(focus, path[i]);
                    if (focus.type == PageType.resource)
                        b.append("        <li><a href=\"" + prefix + focus.getReference().toLowerCase() + ".html\">" + imgLink(prefix, focus) + Utilities.escapeXml(focus.getReference()) + "</a></li>");
                    else
                        b.append("        <li><a href=\"" + prefix + focus.getFilename() + "\">" + imgLink(prefix, focus) + Utilities.escapeXml(focus.getTitle()) + "</a></li>");
                }
                b.append("        <li><a href=\"" + prefix + name.substring(0, name.indexOf(".")) + ".html\">" + Utilities.escapeXml(name.substring(0, name.indexOf("."))) + "</a></li>");
                b.append("        <li><b>Instance</b></li>");
            } else if (type.equals("conceptmap-instance") && name.contains(".")) {
                String[] path = map.get("terminologies-conceptmaps.html").split("\\.");
                Page focus = home;
                for (int i = 0; i < path.length; i++) {
                    focus = getChild(focus, path[i]);
                    if (focus.type == PageType.resource)
                        b.append("        <li><a href=\"" + prefix + focus.getReference().toLowerCase() + ".html\">" + imgLink(prefix, focus) + Utilities.escapeXml(focus.getReference()) + "</a></li>");
                    else
                        b.append("        <li><a href=\"" + prefix + focus.getFilename() + "\">" + imgLink(prefix, focus) + Utilities.escapeXml(focus.getTitle()) + "</a></li>");
                }
                b.append("        <li><b>Example</b></li>");
            } else if (type.startsWith("res") && map.containsKey(Utilities.fileTitle(name))) {
                String[] path = map.get(Utilities.fileTitle(name)).split("\\.");
                Page focus = home;
                for (int i = 0; i < path.length - 1; i++) {
                    focus = getChild(focus, path[i]);
                    b.append("        <li><a href=\"" + prefix + focus.getFilename() + "\">" + imgLink(prefix, focus) + Utilities.escapeXml(focus.getTitle()) + "</a></li>");
                }
                focus = getChild(focus, path[path.length - 1]);
                if (type.equals("resource")) {
                    b.append("        <li><b>" + Utilities.escapeXml(focus.getReference()) + "</b></li>");
                } else {
                    b.append("        <li><a href=\"" + focus.getReference().toLowerCase() + ".html\">" + imgLink(prefix, focus) + Utilities.escapeXml(focus.getReference()) + "</a></li>");
                    b.append("        <li><b>" + Utilities.escapeXml(type.substring(4)) + "</b></li>");
                }
            } else if (type.startsWith("profile:")) {
                String p = s;
                if (p == null) {
                    // the bit after profile is resource.pack.profile
                    String[] path = type.substring(type.indexOf(":") + 1).split("\\/");
                    if (map.containsKey(path[0].toLowerCase())) {
                        String[] path2 = map.get(path[0].toLowerCase()).split("\\.");
                        Page focus = home;
                        for (int i = 0; i < path2.length - 1; i++) {
                            focus = getChild(focus, path2[i]);
                            b.append("        <li><a href=\"" + prefix + focus.getFilename() + "\">" + imgLink(prefix, focus) + Utilities.escapeXml(focus.getTitle()) + "</a></li>");
                        }
                        focus = getChild(focus, path2[path2.length - 1]);
                        b.append("        <li><a href=\"" + focus.getReference().toLowerCase() + ".html\">" + imgLink(prefix, focus) + Utilities.escapeXml(focus.getReference()) + "</a></li>");
                    } else {
                        if (!Utilities.noString(path[0]))
                            b.append("        <li><a href=\"" + prefix + path[0].toLowerCase() + ".html\">" + Utilities.escapeXml(path[0]) + "</a></li>");
                        if (Utilities.noString(path[0]) || definitions.hasResource(path[0]))
                            b.append("        <li><a href=\"" + prefix + (Utilities.noString(path[0]) ? "profilelist" : path[0].toLowerCase() + "-profiles") + ".html\">Profiles</a></li>");
                    }
                    Profile pack = definitions.hasResource(path[0]) ? definitions.getResourceByName(path[0]).getConformancePackage(path[1]) : null;
                    if (pack == null || !("profile".equals(pack.metadata("navigation")) && pack.getProfiles().size() == 1))
                        b.append("        <li><a href=\"" + prefix + path[1].toLowerCase() + ".html\">Profile</a></li>");
                // b.append("        <li><a href=\""+prefix+path[0].toLowerCase()+".html\">"+path[0]+"</a></li>");
                } else {
                    String[] path = p.split("\\.");
                    Page focus = home;
                    for (int i = 0; i < path.length; i++) {
                        focus = getChild(focus, path[i]);
                        if (focus.type == PageType.resource)
                            b.append("        <li><a href=\"" + prefix + focus.getReference().toLowerCase() + ".html\">" + imgLink(prefix, focus) + Utilities.escapeXml(focus.getReference()) + "</a></li>");
                        else
                            b.append("        <li><a href=\"" + prefix + focus.getFilename() + "\">" + imgLink(prefix, focus) + Utilities.escapeXml(focus.getTitle()) + "</a></li>");
                    }
                }
                b.append("        <li><b>" + Utilities.escapeXml(title) + "</b></li>");
            } else if (type.startsWith("profile-instance:type")) {
                String[] path = map.get("datatypes.html").split("\\.");
                Page focus = home;
                for (int i = 0; i < path.length; i++) {
                    focus = getChild(focus, path[i]);
                    if (focus.type == PageType.resource)
                        b.append("        <li><a href=\"" + prefix + focus.getReference().toLowerCase() + ".html\">" + imgLink(prefix, focus) + Utilities.escapeXml(focus.getReference()) + "</a></li>");
                    else
                        b.append("        <li><a href=\"" + prefix + focus.getFilename() + "\">" + imgLink(prefix, focus) + Utilities.escapeXml(focus.getTitle()) + "</a></li>");
                }
                b.append("        <li><b>Profile</b></li>");
            } else if (type.startsWith("profile-instance:resource")) {
                // TODO: profile-questionnaire:
                String t = type.substring(type.lastIndexOf(":") + 1);
                if (t == null)
                    throw new Exception("Unable to read type " + type);
                String obj = map.get(t.toLowerCase());
                if (obj == null)
                    throw new Exception("Unable to find type " + t);
                if (type.startsWith("profile-instance:resource")) {
                    String[] path = obj.split("\\.");
                    Page focus = home;
                    for (int i = 0; i < path.length; i++) {
                        focus = getChild(focus, path[i]);
                        if (focus.type == PageType.resource)
                            b.append("          <li><a href=\"" + prefix + focus.getReference().toLowerCase() + ".html\">" + imgLink(prefix, focus) + Utilities.escapeXml(focus.getReference()) + "</a></li>");
                        else
                            b.append("        <li><a href=\"" + prefix + focus.getFilename() + "\">" + imgLink(prefix, focus) + Utilities.escapeXml(focus.getTitle()) + "</a></li>");
                    }
                    b.append("        <li><b>Profile Instance</b></li>");
                } else if (type.startsWith("profile-instance:res:")) {
                    String[] path = obj.split("\\.");
                    Page focus = home;
                    for (int i = 0; i < path.length; i++) {
                        focus = getChild(focus, path[i]);
                        if (focus.type == PageType.resource)
                            b.append("        <li><a href=\"" + prefix + focus.getReference().toLowerCase() + ".html\">" + imgLink(prefix, focus) + Utilities.escapeXml(focus.getReference()) + "</a></li>");
                        else
                            b.append("        <li><a href=\"" + prefix + focus.getFilename() + "\">" + imgLink(prefix, focus) + Utilities.escapeXml(focus.getTitle()) + "</a></li>");
                    }
                    b.append("        <li><a href=\"" + prefix + Utilities.fileTitle(name) + ".html\">" + Utilities.escapeXml(title) + "</a></li>");
                    b.append("        <li><b>Profile Instance</b></li>");
                }
            } else if (type.startsWith("profile-instance") || type.startsWith("profile-questionnaire")) {
                String[] path = map.get("profilelist.html").split("\\.");
                Page focus = home;
                for (int i = 0; i < path.length; i++) {
                    focus = getChild(focus, path[i]);
                    if (focus.type == PageType.resource)
                        b.append("        <li><a href=\"" + prefix + focus.getReference().toLowerCase() + ".html\">" + imgLink(prefix, focus) + Utilities.escapeXml(focus.getReference()) + "</a></li>");
                    else
                        b.append("        <li><a href=\"" + prefix + focus.getFilename() + "\">" + imgLink(prefix, focus) + Utilities.escapeXml(focus.getTitle()) + "</a></li>");
                }
                b.append("        <li><b>Profile</b></li>");
            } else if (type.startsWith("v2:")) {
                String[] path = map.get("v2Vocab").split("\\.");
                Page focus = home;
                for (int i = 0; i < path.length - 1; i++) {
                    focus = getChild(focus, path[i]);
                    b.append("        <li><a href=\"" + prefix + focus.getFilename() + "\">" + imgLink(prefix, focus) + Utilities.escapeXml(focus.getTitle()) + "</a></li>");
                }
                b.append("        <li><a href=\"index.html\">" + Utilities.escapeXml(title) + "</a></li>");
                b.append("        <li><b>Instance</b></li>");
            } else if (type.startsWith("v3:")) {
                String[] path = map.get("v3Vocab").split("\\.");
                Page focus = home;
                for (int i = 0; i < path.length - 1; i++) {
                    focus = getChild(focus, path[i]);
                    b.append("        <li><a href=\"" + prefix + focus.getFilename() + "\">" + imgLink(prefix, focus) + Utilities.escapeXml(focus.getTitle()) + "</a></li>");
                }
                b.append("        <li><a href=\"index.html\">" + Utilities.escapeXml(Utilities.fileTitle(name.substring(3))) + "</a></li>");
                b.append("        <li><b>Instance</b></li>");
            } else if (type.startsWith("sid:")) {
                String[] path = map.get("terminologies.html").split("\\.");
                Page focus = home;
                for (int i = 0; i < path.length - 1; i++) {
                    focus = getChild(focus, path[i]);
                    b.append("        <li><a href=\"" + prefix + focus.getFilename() + "\">" + imgLink(prefix, focus) + Utilities.escapeXml(focus.getTitle()) + "</a></li>");
                }
                b.append("        <li><a href=\"" + prefix + "terminologies.html\">Terminologies</a></li>");
                b.append("        <li><a href=\"" + prefix + "terminologies-systems.html\">Systems</a></li>");
                b.append("        <li><b>SID: " + Utilities.escapeXml(type.substring(4)) + "</b></li>");
            } else if ((name.startsWith("extension-") || name.startsWith("cqif\\extension-")) && name.endsWith(".html")) {
                String url = title;
                StructureDefinition ext = context.fetchResource(StructureDefinition.class, url);
                if (!ext.hasContext() || ext.getContextFirstRep().getType() != ExtensionContextType.ELEMENT) {
                    b.append("        <li>??? " + Utilities.escapeXml(name) + " / " + Utilities.escapeXml(type) + "</li>\r\n");
                    System.out.println("no breadcrumb: name = " + name + ", type = " + type + ", prefix = " + prefix + ", title = '" + title + "'");
                } else {
                    String[] path;
                    String ttl;
                    String fn;
                    String[] p = ext.getContextFirstRep().getExpression().split("\\.");
                    if (definitions.hasType(p[0])) {
                        path = map.get("datatypes.html").split("\\.");
                        ttl = "Data Types";
                        fn = "datatypes";
                    } else {
                        String rn = p[0];
                        ttl = rn;
                        if (ttl.equals("*"))
                            ttl = "Resource";
                        fn = ttl.toLowerCase();
                        String m = map.get(fn);
                        if (m == null)
                            path = new String[] { "??" };
                        else
                            path = m.split("\\.");
                    }
                    Page focus = home;
                    for (int i = 0; i < path.length; i++) {
                        focus = getChild(focus, path[i]);
                        if (focus.getFilename() != null)
                            b.append("        <li><a href=\"" + prefix + focus.getFilename() + "\">" + imgLink(prefix, focus) + Utilities.escapeXml(focus.getTitle()) + "</a></li>\r\n");
                    }
                    b.append("        <li><a href=\"" + fn + ".html\">" + Utilities.escapeXml(ttl) + "</a></li>");
                    b.append("        <li><b>Extension</b></li>");
                }
            } else if (type.equals("logical-model")) {
                String m = map.get(head(name).toLowerCase() + ".html");
                if (m != null) {
                    String[] path = m.split("\\.");
                    Page focus = home;
                    for (int i = 0; i < path.length; i++) {
                        focus = getChild(focus, path[i]);
                        if (focus.type == PageType.resource)
                            b.append("        <li><a href=\"" + prefix + focus.getReference().toLowerCase() + ".html\">" + imgLink(prefix, focus) + Utilities.escapeXml(focus.getReference()) + "</a></li>");
                        else
                            b.append("        <li><a href=\"" + prefix + focus.getFilename() + "\">" + imgLink(prefix, focus) + Utilities.escapeXml(focus.getTitle()) + "</a></li>");
                    }
                } else
                    System.out.println("no breadcrumb: name = " + name + ", type = " + type + ", prefix = " + prefix + ", title = '" + title + "'");
                b.append("        <li><b>Logical Model</b></li>");
            } else if (type.startsWith("search-parameter:") || type.equals("searchparam-instance")) {
                b.append("                  <li><a href=\"foundation-module.html\"><img src=\"foundation.png\"/> Foundation</a></li>\r\n");
                b.append("                  <li><a href=\"http.html\">RESTful API</a></li>\r\n");
                b.append("                  <li><a href=\"search.html\">Search</a></li>\r\n");
                b.append("                  <li><b>Search Parameter</b></li>\r\n");
            } else if (name.startsWith("codesystem-")) {
                b.append("                  <li><a href=\"terminology-module.html\"><img src=\"terminology.png\"/> Terminology</a></li>\r\n");
                b.append("                  <li><a href=\"terminologies-systems.html\">Code Systems</a></li>\r\n");
                b.append("                  <li><b>Code System</b></li>\r\n");
            } else if (name.equals("qa.html")) {
                b.append("                  <li><b>QA Page</b></li>\r\n");
            } else {
                System.out.println("no breadcrumb: name = " + name + ", type = " + type + ", prefix = " + prefix + ", title = '" + title + "'");
            }
        }
    }
    b.append("        <!-- " + Utilities.escapeXml(name) + " / " + Utilities.escapeXml(type) + " / " + Utilities.escapeXml(title) + "-->\r\n");
    return b.toString();
}
Also used : StructureDefinition(org.hl7.fhir.r5.model.StructureDefinition) Profile(org.hl7.fhir.definitions.model.Profile)

Example 72 with Questionnaire

use of org.hl7.fhir.r4.model.Questionnaire in project kindling by HL7.

the class ProfileGenerator method generateElementDefinition.

private void generateElementDefinition(StructureDefinition source, ElementDefinition ed, ElementDefinition parent) throws Exception {
    String id = ed.getPath().replace("[x]", "X");
    if (id.length() > 64)
        id = id.substring(0, 64);
    if (!id.contains("."))
        // throw new Exception("Don't generate data element for root of resources or types");
        return;
    if (!ed.hasType())
        // throw new Exception("Don't generate data element for reference elements");
        return;
    if (Utilities.existsInList(ed.getType().get(0).getCode(), "Element", "BackboneElement"))
        // throw new Exception("Don't generate data element for elements that are not leaves");
        return;
    StructureDefinition de;
    if (des.containsKey(id)) {
        de = des.get("de-" + id);
        // do it again because we now have more information to generate with
        de.getSnapshot().getElement().clear();
        de.getExtension().clear();
    } else {
        de = new StructureDefinition();
        de.setId("de-" + id);
        des.put(id, de);
        de.setUrl("http://hl7.org/fhir/StructureDefinition/" + de.getId());
        if (de.getId().contains("."))
            definitions.addNs(de.getUrl(), "Data Element " + ed.getPath(), definitions.getSrcFile(id.substring(0, id.indexOf("."))) + "-definitions.html#" + id);
        if (dataElements != null)
            dataElements.addEntry().setResource(de).setFullUrl(de.getUrl());
    }
    if (!de.hasMeta())
        de.setMeta(new Meta());
    de.getMeta().setLastUpdatedElement(new InstantType(genDate));
    de.setVersion(version.toCode());
    de.setName(ed.getPath());
    de.setStatus(PublicationStatus.DRAFT);
    de.setExperimental(true);
    de.setTitle(de.getName());
    de.setDate(genDate.getTime());
    de.setPublisher("HL7 FHIR Standard");
    de.addContact().getTelecom().add(Factory.newContactPoint(ContactPointSystem.URL, "http://hl7.org/fhir"));
    de.setDescription("Data Element for " + ed.getPath());
    de.setPurpose("Data Elements are defined for each element to assist in questionnaire construction etc");
    de.setFhirVersion(version);
    de.setKind(StructureDefinitionKind.LOGICAL);
    de.setType("DataElement");
    de.setAbstract(false);
    de.setType(de.getName());
    de.setBaseDefinition("http://hl7.org/fhir/StructureDefinition/Element");
    de.setDerivation(TypeDerivationRule.SPECIALIZATION);
    de.getMapping().addAll(source.getMapping());
    ElementDefinition ted = ed.copy();
    de.getSnapshot().addElement(ted);
    ted.makeBase();
}
Also used : Meta(org.hl7.fhir.r5.model.Meta) StructureDefinition(org.hl7.fhir.r5.model.StructureDefinition) ElementDefinition(org.hl7.fhir.r5.model.ElementDefinition) InstantType(org.hl7.fhir.r5.model.InstantType)

Example 73 with Questionnaire

use of org.hl7.fhir.r4.model.Questionnaire in project kindling by HL7.

the class PageProcessor method resHeader.

private String resHeader(String n, String title, String mode) throws Exception {
    StringBuilder b = new StringBuilder();
    if (n.contains("-"))
        n = n.substring(0, n.indexOf('-'));
    ResourceDefn res = definitions.getResourceByName(title);
    boolean hasOps = !res.getOperations().isEmpty();
    boolean isAbstract = res.isAbstract();
    b.append("<ul class=\"nav nav-tabs\">");
    b.append(makeHeaderTab("Content", n + ".html", mode == null || "content".equals(mode)));
    if (!isAbstract)
        b.append(makeHeaderTab("Examples", n + "-examples.html", "examples".equals(mode)));
    b.append(makeHeaderTab("Detailed Descriptions", n + "-definitions.html", "definitions".equals(mode)));
    if (!isAbstract)
        b.append(makeHeaderTab("Mappings", n + "-mappings.html", "mappings".equals(mode)));
    if (!isAbstract)
        b.append(makeHeaderTab("Profiles &amp; Extensions", n + "-profiles.html", "profiles".equals(mode)));
    // b.append(makeHeaderTab("HTML Form", n+"-questionnaire.html", "questionnaire".equals(mode)));
    if (hasOps)
        b.append(makeHeaderTab("Operations", n + "-operations.html", "operations".equals(mode)));
    if (new File(Utilities.path(folders.rootDir, "implementations", "r3maps", "R4toR3", title + ".map")).exists())
        b.append(makeHeaderTab("R3 Conversions", n + "-version-maps.html", "conversion".equals(mode)));
    b.append("</ul>\r\n");
    return b.toString();
}
Also used : CommaSeparatedStringBuilder(org.hl7.fhir.utilities.CommaSeparatedStringBuilder) ResourceDefn(org.hl7.fhir.definitions.model.ResourceDefn) IniFile(org.hl7.fhir.utilities.IniFile) File(java.io.File) CSFile(org.hl7.fhir.utilities.CSFile) TextFile(org.hl7.fhir.utilities.TextFile)

Example 74 with Questionnaire

use of org.hl7.fhir.r4.model.Questionnaire in project kindling by HL7.

the class Publisher method produceResource2.

private void produceResource2(ResourceDefn resource, boolean isAbstract, String extraTypeForDefn, boolean logicalOnly) throws Exception {
    File tmp = Utilities.createTempFile("tmp", ".tmp");
    String n = resource.getName().toLowerCase();
    String xml = xmls.get(n);
    String json = jsons.get(n);
    String ttl = ttls.get(n);
    TerminologyNotesGenerator tgen = new TerminologyNotesGenerator(new FileOutputStream(tmp), page);
    tgen.generate("", resource.getRoot());
    tgen.close();
    String tx = TextFile.fileToString(tmp.getAbsolutePath());
    DictHTMLGenerator dgen = new DictHTMLGenerator(new FileOutputStream(tmp), page, "");
    dgen.generate(resource.getRoot());
    dgen.close();
    String dict = TextFile.fileToString(tmp.getAbsolutePath());
    if (extraTypeForDefn != null) {
        dgen = new DictHTMLGenerator(new FileOutputStream(tmp), page, "");
        dgen.generate(page.getDefinitions().getElementDefn(extraTypeForDefn));
        dgen.close();
        dict = dict + "\r\n" + TextFile.fileToString(tmp.getAbsolutePath());
    }
    Map<String, String> values = new HashMap<String, String>();
    MappingsGenerator mgen = new MappingsGenerator(page.getDefinitions());
    mgen.generate(resource);
    String mappings = mgen.getMappings();
    String mappingsList = mgen.getMappingsList();
    if (!logicalOnly) {
        SvgGenerator svg = new SvgGenerator(page, "", resource.getLayout(), true, false, page.getVersion());
        svg.generate(resource, page.getFolders().dstDir + n + ".svg", "1");
        svg.generate(resource, Utilities.path(page.getFolders().srcDir, n, n + ".gen.svg"), "1");
        String prefix = page.getBreadCrumbManager().getIndexPrefixForReference(resource.getName());
        SectionTracker st = new SectionTracker(prefix, false);
        st.start("");
        page.getSectionTrackerCache().put(n, st);
        String template = isAbstract ? "template-abstract" : "template";
        String src = TextFile.fileToString(page.getFolders().templateDir + template + ".html");
        src = insertSectionNumbers(page.processResourceIncludes(n, resource, xml, json, ttl, tx, dict, src, mappings, mappingsList, "resource", n + ".html", null, values, resource.getWg(), null), st, n + ".html", 0, null);
        TextFile.stringToFile(src, page.getFolders().dstDir + n + ".html");
        scanForFragments(n + ".html", new XhtmlParser().parseFragment(src));
        page.getHTMLChecker().registerFile(n + ".html", "Base Page for " + resource.getName(), HTMLLinkChecker.XHTML_TYPE, true);
        StructureDefinition profile = (StructureDefinition) ResourceUtilities.getById(page.getResourceBundle(), ResourceType.StructureDefinition, resource.getName());
        String pages = page.getIni().getStringProperty("resource-pages", n);
        if (!Utilities.noString(pages)) {
            for (String p : pages.split(",")) {
                producePage(p, n);
            }
        }
        try {
            if (!isAbstract)
                processQuestionnaire(resource, profile, st, true, "", null);
        } catch (Exception e) {
            // e.printStackTrace();
            page.log("Questionnaire Generation Failed: " + e.getMessage(), LogMessageType.Error);
        }
        if (!isAbstract || !resource.getExamples().isEmpty()) {
            src = TextFile.fileToString(page.getFolders().templateDir + template + "-examples.html");
            TextFile.stringToFile(insertSectionNumbers(page.processResourceIncludes(n, resource, xml, json, ttl, tx, dict, src, mappings, mappingsList, "res-Examples", n + "-examples.html", null, values, resource.getWg(), null), st, n + "-examples.html", 0, null), page.getFolders().dstDir + n + "-examples.html");
            page.getHTMLChecker().registerFile(n + "-examples.html", "Examples for " + resource.getName(), HTMLLinkChecker.XHTML_TYPE, true);
            for (Example e : resource.getExamples()) {
                try {
                    processExample(e, resource, profile, null, e.getIg() == null ? null : page.getDefinitions().getIgs().get(e.getIg()));
                } catch (Exception ex) {
                    throw new Exception("processing " + e.getTitle(), ex);
                // throw new Exception(ex.getMessage()+" processing "+e.getFileTitle());
                }
            }
        }
        src = TextFile.fileToString(page.getFolders().templateDir + template + "-definitions.html");
        TextFile.stringToFile(insertSectionNumbers(page.processResourceIncludes(n, resource, xml, json, ttl, tx, dict, src, mappings, mappingsList, "res-Detailed Descriptions", n + "-definitions.html", null, values, resource.getWg(), null), st, n + "-definitions.html", 0, null), page.getFolders().dstDir + n + "-definitions.html");
        page.getHTMLChecker().registerFile(n + "-definitions.html", "Detailed Descriptions for " + resource.getName(), HTMLLinkChecker.XHTML_TYPE, true);
        if (!isAbstract) {
            src = TextFile.fileToString(page.getFolders().templateDir + "template-mappings.html");
            TextFile.stringToFile(insertSectionNumbers(page.processResourceIncludes(n, resource, xml, json, ttl, tx, dict, src, mappings, mappingsList, "res-Mappings", n + "-mappings.html", null, values, resource.getWg(), null), st, n + "-mappings.html", 0, null), page.getFolders().dstDir + n + "-mappings.html");
            page.getHTMLChecker().registerFile(n + "-mappings.html", "Formal Mappings for " + resource.getName(), HTMLLinkChecker.XHTML_TYPE, true);
            src = TextFile.fileToString(page.getFolders().templateDir + "template-profiles.html");
            TextFile.stringToFile(insertSectionNumbers(page.processResourceIncludes(n, resource, xml, json, ttl, tx, dict, src, mappings, mappingsList, "res-Profiles", n + "-profiles.html", null, values, resource.getWg(), null), st, n + "-profiles.html", 0, null), page.getFolders().dstDir + n + "-profiles.html");
            page.getHTMLChecker().registerFile(n + "-profiles.html", "Profiles for " + resource.getName(), HTMLLinkChecker.XHTML_TYPE, true);
        }
        if (!resource.getOperations().isEmpty()) {
            src = TextFile.fileToString(page.getFolders().templateDir + "template-operations.html");
            TextFile.stringToFile(insertSectionNumbers(page.processResourceIncludes(n, resource, xml, json, ttl, tx, dict, src, mappings, mappingsList, "res-Operations", n + "-operations.html", null, values, resource.getWg(), null), st, n + "-operations.html", 0, null), page.getFolders().dstDir + n + "-operations.html");
            page.getHTMLChecker().registerFile(n + "-operations.html", "Operations for " + resource.getName(), HTMLLinkChecker.XHTML_TYPE, true);
            for (Operation t : resource.getOperations()) {
                produceOperation(null, resource.getName().toLowerCase() + "-" + t.getName(), resource.getName() + "-" + t.getName(), resource, t, st);
            }
        }
        produceMap(resource.getName(), st, resource);
        for (Profile ap : resource.getConformancePackages()) produceConformancePackage(resource, ap, st);
        src = TextFile.fileToString(page.getFolders().templateDir + "template-json-schema.html");
        TextFile.stringToFile(insertSectionNumbers(page.processResourceIncludes(n, resource, xml, json, ttl, tx, dict, src, mappings, mappingsList, "res-schema", n + ".schema.json.html", null, values, resource.getWg(), null), st, n + ".schema.json.html", 0, null), page.getFolders().dstDir + n + ".schema.json.html");
        page.getHTMLChecker().registerFile(n + ".schema.json.html", "Json Schema for " + resource.getName(), HTMLLinkChecker.XHTML_TYPE, true);
        src = TextFile.fileToString(page.getFolders().templateDir + "template-dependencies.html");
        TextFile.stringToFile(insertSectionNumbers(page.processResourceIncludes(n, resource, xml, json, ttl, tx, dict, src, mappings, mappingsList, "res-Dependencies", n + "-dependencies.html", null, values, resource.getWg(), null), st, n + "-dependencies.html", 0, null), page.getFolders().dstDir + n + "-dependencies.html");
        page.getHTMLChecker().registerFile(n + "-dependencies.html", "Dependency graph for " + resource.getName(), HTMLLinkChecker.XHTML_TYPE, true);
        for (ConceptMap cm : statusCodeConceptMaps) if (cm.getUserData("resource-definition") == resource)
            produceConceptMap(cm, resource, st);
    // xml to json
    // todo - fix this up
    // JsonGenerator jsongen = new JsonGenerator();
    // jsongen.generate(new CSFile(page.getFolders().dstDir+n+".xml"), new
    // File(page.getFolders().dstDir+n+".json"));
    }
    tmp.delete();
    new ProfileUtilities(page.getWorkerContext(), page.getValidationErrors(), page).generateXlsx(new FileOutputStream(Utilities.path(page.getFolders().dstDir, n + ".xlsx")), resource.getProfile(), false, false);
    // because we'll pick up a little more information as we process the
    // resource
    StructureDefinition p = generateProfile(resource, n, xml, json, ttl, !logicalOnly);
    com.google.gson.JsonObject diff = new com.google.gson.JsonObject();
    page.getDiffEngine().getDiffAsJson(diff, p);
    Gson gson = new GsonBuilder().setPrettyPrinting().create();
    json = gson.toJson(diff);
    TextFile.stringToFile(json, Utilities.path(page.getFolders().dstDir, resource.getName().toLowerCase() + ".diff.json"));
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = dbf.newDocumentBuilder();
    Document doc = builder.newDocument();
    Element element = doc.createElement("difference");
    doc.appendChild(element);
    page.getDiffEngine().getDiffAsXml(doc, element, p);
    prettyPrint(doc, Utilities.path(page.getFolders().dstDir, resource.getName().toLowerCase() + ".diff.xml"));
}
Also used : JsonObject(com.google.gson.JsonObject) DocumentBuilderFactory(javax.xml.parsers.DocumentBuilderFactory) XhtmlParser(org.hl7.fhir.utilities.xhtml.XhtmlParser) LinkedHashMap(java.util.LinkedHashMap) HashMap(java.util.HashMap) DictHTMLGenerator(org.hl7.fhir.definitions.generators.specification.DictHTMLGenerator) Element(org.w3c.dom.Element) JsonObject(com.google.gson.JsonObject) Gson(com.google.gson.Gson) MappingsGenerator(org.hl7.fhir.definitions.generators.specification.MappingsGenerator) Operation(org.hl7.fhir.definitions.model.Operation) Document(org.w3c.dom.Document) XhtmlDocument(org.hl7.fhir.utilities.xhtml.XhtmlDocument) Profile(org.hl7.fhir.definitions.model.Profile) StructureDefinition(org.hl7.fhir.r5.model.StructureDefinition) Example(org.hl7.fhir.definitions.model.Example) ConceptMap(org.hl7.fhir.r5.model.ConceptMap) GsonBuilder(com.google.gson.GsonBuilder) TerminologyNotesGenerator(org.hl7.fhir.definitions.generators.specification.TerminologyNotesGenerator) TransformerException(javax.xml.transform.TransformerException) IOException(java.io.IOException) FHIRException(org.hl7.fhir.exceptions.FHIRException) FileNotFoundException(java.io.FileNotFoundException) UnsupportedEncodingException(java.io.UnsupportedEncodingException) SvgGenerator(org.hl7.fhir.definitions.generators.specification.SvgGenerator) ProfileUtilities(org.hl7.fhir.r5.conformance.ProfileUtilities) DocumentBuilder(javax.xml.parsers.DocumentBuilder) FileOutputStream(java.io.FileOutputStream) IniFile(org.hl7.fhir.utilities.IniFile) File(java.io.File) CSFile(org.hl7.fhir.utilities.CSFile) TextFile(org.hl7.fhir.utilities.TextFile)

Example 75 with Questionnaire

use of org.hl7.fhir.r4.model.Questionnaire in project kindling by HL7.

the class Publisher method processQuestionnaire.

private void processQuestionnaire(ResourceDefn res, StructureDefinition profile, SectionTracker st, boolean isResource, String prefix, ImplementationGuideDefn ig) throws Exception {
    QuestionnaireBuilder qb = new QuestionnaireBuilder(page.getWorkerContext());
    qb.setProfile(profile);
    qb.build();
    Questionnaire q = qb.getQuestionnaire();
    FileOutputStream s = new FileOutputStream(page.getFolders().dstDir + prefix + profile.getId().toLowerCase() + "-questionnaire.json");
    new JsonParser().setOutputStyle(OutputStyle.PRETTY).compose(s, q);
    s.close();
    s = new FileOutputStream(page.getFolders().dstDir + prefix + profile.getId().toLowerCase() + "-questionnaire.canonical.json");
    new JsonParser().setOutputStyle(OutputStyle.CANONICAL).compose(s, q);
    s.close();
    s = new FileOutputStream(page.getFolders().dstDir + prefix + profile.getId().toLowerCase() + "-questionnaire.xml");
    new XmlParser().setOutputStyle(OutputStyle.PRETTY).compose(s, q);
    s.close();
    s = new FileOutputStream(page.getFolders().dstDir + prefix + profile.getId().toLowerCase() + "-questionnaire.canonical.xml");
    new XmlParser().setOutputStyle(OutputStyle.CANONICAL).compose(s, q);
    s.close();
    String json = "<div class=\"example\">\r\n<p>Generated Questionnaire for " + profile.getId() + "</p>\r\n<pre class=\"json\">\r\n" + Utilities.escapeXml(new JsonParser().setOutputStyle(OutputStyle.PRETTY).composeString(q)) + "\r\n</pre>\r\n</div>\r\n";
    String html = TextFile.fileToString(page.getFolders().templateDir + "template-example-json.html").replace("<%example%>", json);
    html = page.processPageIncludes(prefix + profile.getId().toLowerCase() + "-questionnaire.json.html", html, (isResource ? "resource-questionnaire:" : "profile-questionnaire:") + profile.getId(), null, null, null, "Questionnaire", ig, res, res == null ? wg("fhir") : res.getWg());
    TextFile.stringToFile(html, page.getFolders().dstDir + prefix + profile.getId().toLowerCase() + "-questionnaire.json.html");
    String xml = "<div class=\"example\">\r\n<p>Generated Questionnaire for " + profile.getId() + "</p>\r\n<pre class=\"json\">\r\n" + Utilities.escapeXml(new XmlParser().setOutputStyle(OutputStyle.PRETTY).composeString(q)) + "\r\n</pre>\r\n</div>\r\n";
    html = TextFile.fileToString(page.getFolders().templateDir + "template-example-xml.html").replace("<%example%>", xml);
    html = page.processPageIncludes(prefix + profile.getId().toLowerCase() + "-questionnaire.xml.html", html, (isResource ? "resource-questionnaire:" : "profile-questionnaire:") + profile.getId(), null, null, null, "Questionnaire", ig, res, res == null ? wg("fhir") : res.getWg());
    TextFile.stringToFile(html, page.getFolders().dstDir + prefix + profile.getId().toLowerCase() + "-questionnaire.xml.html");
    if (false) {
        File tmpTransform = Utilities.createTempFile("tmp", ".html");
        // if (web) {
        HashMap<String, String> params = new HashMap<String, String>();
        params.put("suppressWarnings", "true");
        XsltUtilities.saxonTransform(// directory for xslt references
        Utilities.path(page.getFolders().rootDir, "implementations", "xmltools"), // source to run xslt on
        page.getFolders().dstDir + prefix + profile.getId().toLowerCase() + "-questionnaire.xml", // xslt file to run
        Utilities.path(page.getFolders().rootDir, "implementations", "xmltools", "QuestionnaireToHTML.xslt"), // file to produce
        tmpTransform.getAbsolutePath(), // handle to self to implement URI resolver for terminology fetching
        this, params);
        // } else
        // TextFile.stringToFile("test", tmpTransform.getAbsolutePath());
        // now, generate the form
        html = TextFile.fileToString(page.getFolders().templateDir + (isResource ? "template-questionnaire.html" : "template-profile-questionnaire.html")).replace("<%questionnaire%>", loadHtmlForm(tmpTransform.getAbsolutePath()));
    } else
        html = "<html><p>Not generated in this build</p></html>";
    html = page.processPageIncludes(profile.getId().toLowerCase() + "-questionnaire.html", html, (isResource ? "resource-questionnaire:" : "profile-questionnaire:") + profile.getId(), null, profile, null, "Questionnaire", ig, res, res == null ? wg("fhir") : res.getWg());
    int level = (ig == null || ig.isCore()) ? 0 : 1;
    if (st != null)
        html = insertSectionNumbers(html, st, profile.getId().toLowerCase() + "-questionnaire.html", level, null);
    TextFile.stringToFile(html, page.getFolders().dstDir + prefix + profile.getId().toLowerCase() + "-questionnaire.html");
    page.getHTMLChecker().registerExternal(prefix + profile.getId().toLowerCase() + "-questionnaire.html");
    page.getHTMLChecker().registerExternal(prefix + profile.getId().toLowerCase() + "-questionnaire.json.html");
    page.getHTMLChecker().registerExternal(prefix + profile.getId().toLowerCase() + "-questionnaire.xml.html");
}
Also used : XmlParser(org.hl7.fhir.r5.formats.XmlParser) Questionnaire(org.hl7.fhir.r5.model.Questionnaire) LinkedHashMap(java.util.LinkedHashMap) HashMap(java.util.HashMap) FileOutputStream(java.io.FileOutputStream) IniFile(org.hl7.fhir.utilities.IniFile) File(java.io.File) CSFile(org.hl7.fhir.utilities.CSFile) TextFile(org.hl7.fhir.utilities.TextFile) ContactPoint(org.hl7.fhir.r5.model.ContactPoint) QuestionnaireBuilder(org.hl7.fhir.r5.utils.QuestionnaireBuilder) JsonParser(org.hl7.fhir.r5.formats.JsonParser)

Aggregations

XhtmlNode (org.hl7.fhir.utilities.xhtml.XhtmlNode)18 ArrayList (java.util.ArrayList)15 Questionnaire (org.hl7.fhir.r4.model.Questionnaire)14 DefinitionException (org.hl7.fhir.exceptions.DefinitionException)13 QuestionnaireResponse (org.hl7.fhir.r4.model.QuestionnaireResponse)12 QuestionnaireItemComponent (org.hl7.fhir.r4b.model.Questionnaire.QuestionnaireItemComponent)11 QuestionnaireItemComponent (org.hl7.fhir.r5.model.Questionnaire.QuestionnaireItemComponent)11 File (java.io.File)10 TextFile (org.hl7.fhir.utilities.TextFile)10 Test (org.junit.jupiter.api.Test)10 FileOutputStream (java.io.FileOutputStream)9 Questionnaire (org.hl7.fhir.dstu3.model.Questionnaire)9 FHIRException (org.hl7.fhir.exceptions.FHIRException)8 QuestionnaireItemComponent (org.hl7.fhir.r4.model.Questionnaire.QuestionnaireItemComponent)8 IOException (java.io.IOException)7 Bundle (org.hl7.fhir.r4.model.Bundle)7 CanonicalType (org.hl7.fhir.r4.model.CanonicalType)7 ValueSet (org.hl7.fhir.r5.model.ValueSet)7 FileNotFoundException (java.io.FileNotFoundException)6 Extension (org.hl7.fhir.r4.model.Extension)6