Search in sources :

Example 56 with ImplementationGuideDefn

use of org.hl7.fhir.definitions.model.ImplementationGuideDefn in project kindling by HL7.

the class Publisher method produceConformancePackage.

private void produceConformancePackage(ResourceDefn res, Profile pack, SectionTracker st) throws Exception {
    String resourceName = res == null ? "" : res.getName();
    if (Utilities.noString(resourceName)) {
        if (pack.getProfiles().size() == 1)
            if (pack.getProfiles().get(0).getDefn() != null)
                resourceName = pack.getProfiles().get(0).getDefn().getName();
            else
                resourceName = pack.getProfiles().get(0).getResource().getType();
        else if (pack.getProfiles().size() == 0) {
        // throw new Exception("Unable to determine resource name - no profiles"); no, we don't complain
        } else if (pack.getProfiles().get(0).getDefn() != null) {
            resourceName = pack.getProfiles().get(0).getDefn().getName();
            for (int i = 1; i < pack.getProfiles().size(); i++) if (!pack.getProfiles().get(i).getDefn().getName().equals(resourceName))
                throw new Exception("Unable to determine resource name - profile mismatch " + resourceName + "/" + pack.getProfiles().get(i).getDefn().getName());
        }
    }
    ImplementationGuideDefn ig = page.getDefinitions().getIgs().get(pack.getCategory());
    String prefix = (ig == null || ig.isCore()) ? "" : ig.getCode() + File.separator;
    String intro = pack.getIntroduction() != null ? page.loadXmlNotesFromFile(pack.getIntroduction(), false, null, null, null, null, res == null ? wg("fhir") : res.getWg()) : null;
    String notes = pack.getNotes() != null ? page.loadXmlNotesFromFile(pack.getNotes(), false, null, null, null, null, res == null ? wg("fhir") : res.getWg()) : null;
    if (!("profile".equals(pack.metadata("navigation")) && pack.getProfiles().size() == 1)) {
        String src = TextFile.fileToString(page.getFolders().templateDir + "template-conformance-pack.html");
        src = page.processConformancePackageIncludes(pack, src, intro, notes, resourceName, ig);
        if (st != null)
            src = insertSectionNumbers(src, st, pack.getId().toLowerCase() + ".html", 0, null);
        else if (ig != null && !ig.isCore())
            src = addSectionNumbers(pack.getId() + ".html", pack.getId().toLowerCase(), src, null, 1, null, ig);
        page.getHTMLChecker().registerFile(prefix + pack.getId().toLowerCase() + ".html", "Profile " + pack.getId(), HTMLLinkChecker.XHTML_TYPE, true);
        TextFile.stringToFile(src, page.getFolders().dstDir + prefix + pack.getId().toLowerCase() + ".html");
    }
    // now, we produce each profile
    for (ConstraintStructure profile : pack.getProfiles()) produceProfile(res, pack, profile, st, intro, notes, prefix, ig);
    for (SearchParameter sp : pack.getSearchParameters()) producePackSearchParameter(res, pack, sp, st, ig);
    for (Example ex : pack.getExamples()) {
        StructureDefinition sd = null;
        boolean ambiguous = false;
        for (ConstraintStructure sdt : pack.getProfiles()) {
            if (sdt.getResource().getSnapshot().getElement().get(0).getPath().equals(resourceName))
                if (sd == null)
                    sd = sdt.getResource();
                else
                    ambiguous = true;
        }
        if (ambiguous)
            processExample(ex, res, null, null, ig);
        else
            processExample(ex, res, sd, pack, ig);
    }
// create examples here
// if (examples != null) {
// for (String en : examples.keySet()) {
// processExample(examples.get(en), null, profile.getSource());
}
Also used : StructureDefinition(org.hl7.fhir.r5.model.StructureDefinition) Example(org.hl7.fhir.definitions.model.Example) ImplementationGuideDefn(org.hl7.fhir.definitions.model.ImplementationGuideDefn) ConstraintStructure(org.hl7.fhir.definitions.model.ConstraintStructure) SearchParameter(org.hl7.fhir.r5.model.SearchParameter) ContactPoint(org.hl7.fhir.r5.model.ContactPoint) TransformerException(javax.xml.transform.TransformerException) IOException(java.io.IOException) FHIRException(org.hl7.fhir.exceptions.FHIRException) FileNotFoundException(java.io.FileNotFoundException) UnsupportedEncodingException(java.io.UnsupportedEncodingException)

Example 57 with ImplementationGuideDefn

use of org.hl7.fhir.definitions.model.ImplementationGuideDefn in project kindling by HL7.

the class Publisher method produceSpec.

private void produceSpec() throws Exception {
    for (ImplementationGuideDefn ig : page.getDefinitions().getSortedIgs()) {
        for (LogicalModel lm : ig.getLogicalModels()) {
            page.log(" ...logical model " + lm.getId(), LogMessageType.Process);
            produceLogicalModel(lm, ig);
        }
    }
    for (StructureDefinition ed : page.getWorkerContext().getExtensionDefinitions()) {
        String filename = "extension-" + (ed.getUrl().startsWith("http://fhir-registry.smarthealthit.org/StructureDefinition/") ? ed.getUrl().substring(59).toLowerCase() : ed.getUrl().substring(40).toLowerCase());
        ed.setUserData("filename", filename);
        ImplementationGuideDefn ig = page.getDefinitions().getIgs().get(ed.getUserString(ToolResourceUtilities.NAME_RES_IG));
        if (ig == null) {
            ig = page.getDefinitions().getIgs().get("core");
        }
        ed.setUserData("path", (ig.isCore() ? "" : ig.getCode() + File.separator) + filename + ".html");
    }
    page.updateDiffEngineDefinitions();
    loadValueSets2();
    page.log(" ...extensions", LogMessageType.Process);
    for (StructureDefinition ae : page.getWorkerContext().getExtensionDefinitions()) produceExtensionDefinition(ae);
    checkAllOk();
    page.log(" ...resource identities", LogMessageType.Process);
    for (String rname : page.getDefinitions().getBaseResources().keySet()) {
        ResourceDefn r = page.getDefinitions().getBaseResources().get(rname);
        produceResource1(r, r.isAbstract());
    }
    for (String rname : page.getDefinitions().sortedResourceNames()) {
        if (!rname.equals("ValueSet") && !rname.equals("CodeSystem") && wantBuild(rname)) {
            ResourceDefn r = page.getDefinitions().getResources().get(rname);
            produceResource1(r, false);
        }
    }
    if (buildFlags.get("all")) {
        page.log(" ...base profiles", LogMessageType.Process);
        produceBaseProfile();
    }
    for (String rname : page.getDefinitions().getBaseResources().keySet()) {
        ResourceDefn r = page.getDefinitions().getBaseResources().get(rname);
        page.log(" ...resource " + r.getName(), LogMessageType.Process);
        produceResource2(r, !rname.equals("Parameters"), rname.equals("Resource") ? "Meta" : null, false);
    }
    for (String rname : page.getDefinitions().sortedResourceNames()) {
        if (!rname.equals("ValueSet") && !rname.equals("CodeSystem") && wantBuild(rname)) {
            ResourceDefn r = page.getDefinitions().getResources().get(rname);
            page.log(" ...resource " + r.getName(), LogMessageType.Process);
            produceResource2(r, false, null, false);
        }
    }
    for (Compartment c : page.getDefinitions().getCompartments()) {
        if (buildFlags.get("all")) {
            page.log(" ...compartment " + c.getName(), LogMessageType.Process);
            produceCompartment(c);
        }
    }
    Regenerator regen = new Regenerator(page.getFolders().srcDir, page.getDefinitions(), page.getWorkerContext());
    regen.generate();
    Bundle searchParamsFeed = new Bundle();
    searchParamsFeed.setId("searchParams");
    searchParamsFeed.setType(BundleType.COLLECTION);
    searchParamsFeed.setMeta(new Meta().setLastUpdated(page.getResourceBundle().getMeta().getLastUpdated()));
    Set<String> uris = new HashSet<String>();
    for (ResourceDefn rd : page.getDefinitions().getBaseResources().values()) addSearchParams(uris, searchParamsFeed, rd);
    for (String n : page.getDefinitions().sortedResourceNames()) {
        ResourceDefn rd = page.getDefinitions().getResources().get(n);
        addSearchParams(uris, searchParamsFeed, rd);
    }
    for (Profile cp : page.getDefinitions().getPackList()) {
        addSearchParams(uris, searchParamsFeed, cp);
    }
    checkBundleURLs(searchParamsFeed);
    for (String n : page.getIni().getPropertyNames("pages")) {
        if (buildFlags.get("all") || buildFlags.get("page-" + n.toLowerCase())) {
            page.log(" ...page " + n, LogMessageType.Process);
            producePage(n, page.getIni().getStringProperty("pages", n));
        }
    }
    for (ImplementationGuideDefn ig : page.getDefinitions().getSortedIgs()) {
        for (String n : ig.getPageList()) {
            page.log(" ...ig page " + n, LogMessageType.Process);
            produceIgPage(n, ig);
        }
        for (ImplementationGuideDefinitionPageComponent page : ig.getSpecialPages()) {
            produceIgPage(ig, page);
        }
        for (Profile p : ig.getProfiles()) {
            if (!p.getOperations().isEmpty()) {
                produceIgOperations(ig, p);
            }
        }
    }
    if (page.getIni().getPropertyNames("ig-pages") != null) {
        for (String n : page.getIni().getPropertyNames("ig-pages")) {
            page.log(" ...page " + n, LogMessageType.Process);
            for (ImplementationGuideDefn ig : page.getDefinitions().getSortedIgs()) {
                if (!ig.isCore())
                    produceIgPage(n, ig, page.getIni().getStringProperty("ig-pages", n));
            }
        }
    }
    for (String n : page.getDefinitions().getDictionaries().keySet()) {
        if (buildFlags.get("all")) {
            // || buildFlags.get("dict-" + n.toLowerCase())) {
            page.log(" ...dictionary " + n, LogMessageType.Process);
            produceDictionary(page.getDefinitions().getDictionaries().get(n));
        }
    }
    int i = 0;
    for (String n : page.getIni().getPropertyNames("sid")) {
        page.log(" ...sid " + n, LogMessageType.Process);
        produceSid(i, n, page.getIni().getStringProperty("sid", n));
        i++;
    }
    if (buildFlags.get("all")) {
        page.log(" ...check Fragments", LogMessageType.Process);
        checkFragments();
        for (Profile p : page.getDefinitions().getPackList()) {
            // if (!n.startsWith("http://")) {
            page.log(" ...Profile " + p.getId(), LogMessageType.Process);
            produceConformancePackage(null, p, null);
        // }
        }
        produceUml();
        page.getVsValidator().checkDuplicates(page.getValidationErrors());
        if (buildFlags.get("all")) {
            // if (page.getToc().containsKey("1.1"))
            // throw new Exception("Duplicate DOC Entry "+"1.1");
            page.getToc().put("1.1", new TocEntry("1.1", "Table Of Contents", "toc.html", false));
            page.log(" ...page toc.html", LogMessageType.Process);
            producePage("toc.html", null);
        }
        checkAllOk();
        page.log(" ...collections ", LogMessageType.Process);
        com.google.gson.JsonObject diff = new com.google.gson.JsonObject();
        page.getDiffEngine().getDiffAsJson(diff);
        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        String json = gson.toJson(diff);
        TextFile.stringToFile(json, Utilities.path(page.getFolders().dstDir, "fhir.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);
        prettyPrint(doc, Utilities.path(page.getFolders().dstDir, "fhir.diff.xml"));
        checkBundleURLs(page.getResourceBundle());
        checkStructureDefinitions(page.getResourceBundle());
        page.getResourceBundle().getEntry().sort(new ProfileBundleSorter());
        FileOutputStream s = new FileOutputStream(page.getFolders().dstDir + "profiles-resources.xml");
        new XmlParser().setOutputStyle(OutputStyle.PRETTY).compose(s, page.getResourceBundle());
        s.close();
        s = new FileOutputStream(page.getFolders().dstDir + "profiles-resources.json");
        new JsonParser().setOutputStyle(OutputStyle.PRETTY).compose(s, page.getResourceBundle());
        s.close();
        checkBundleURLs(page.getTypeBundle());
        checkStructureDefinitions(page.getTypeBundle());
        page.getTypeBundle().getEntry().sort(new ProfileBundleSorter());
        s = new FileOutputStream(page.getFolders().dstDir + "profiles-types.xml");
        new XmlParser().setOutputStyle(OutputStyle.PRETTY).compose(s, page.getTypeBundle());
        s.close();
        s = new FileOutputStream(page.getFolders().dstDir + "profiles-types.json");
        new JsonParser().setOutputStyle(OutputStyle.PRETTY).compose(s, page.getTypeBundle());
        s.close();
        Bundle extensionsFeed = new Bundle();
        extensionsFeed.setId("extensions");
        extensionsFeed.setType(BundleType.COLLECTION);
        extensionsFeed.setMeta(new Meta().setLastUpdated(page.getResourceBundle().getMeta().getLastUpdated()));
        Set<String> urls = new HashSet<String>();
        for (StructureDefinition ed : page.getWorkerContext().getExtensionDefinitions()) {
            if (!urls.contains(ed.getUrl())) {
                urls.add(ed.getUrl());
                extensionsFeed.getEntry().add(new BundleEntryComponent().setResource(ed).setFullUrl("http://hl7.org/fhir/" + ed.fhirType() + "/" + ed.getId()));
            }
        }
        checkBundleURLs(extensionsFeed);
        checkStructureDefinitions(extensionsFeed);
        s = new FileOutputStream(page.getFolders().dstDir + "extension-definitions.xml");
        new XmlParser().setOutputStyle(OutputStyle.PRETTY).compose(s, extensionsFeed);
        s.close();
        s = new FileOutputStream(page.getFolders().dstDir + "extension-definitions.json");
        new JsonParser().setOutputStyle(OutputStyle.PRETTY).compose(s, extensionsFeed);
        s.close();
        Utilities.copyFile(page.getFolders().dstDir + "extension-definitions.xml", page.getFolders().dstDir + "examples" + File.separator + "extension-definitions.xml");
        s = new FileOutputStream(page.getFolders().dstDir + "search-parameters.xml");
        new XmlParser().setOutputStyle(OutputStyle.PRETTY).compose(s, searchParamsFeed);
        s.close();
        s = new FileOutputStream(page.getFolders().dstDir + "search-parameters.json");
        new JsonParser().setOutputStyle(OutputStyle.PRETTY).compose(s, searchParamsFeed);
        s.close();
        Utilities.copyFile(page.getFolders().dstDir + "search-parameters.xml", page.getFolders().dstDir + "examples" + File.separator + "search-parameters.xml");
        for (ResourceDefn rd : page.getDefinitions().getResources().values()) addOtherProfiles(profileBundle, rd);
        for (Profile cp : page.getDefinitions().getPackList()) {
            addOtherProfiles(profileBundle, cp);
        }
        checkBundleURLs(profileBundle);
        checkStructureDefinitions(profileBundle);
        s = new FileOutputStream(page.getFolders().dstDir + "profiles-others.xml");
        new XmlParser().setOutputStyle(OutputStyle.PRETTY).compose(s, profileBundle);
        s.close();
        s = new FileOutputStream(page.getFolders().dstDir + "profiles-others.json");
        new JsonParser().setOutputStyle(OutputStyle.PRETTY).compose(s, profileBundle);
        s.close();
        Utilities.copyFile(page.getFolders().dstDir + "profiles-others.xml", page.getFolders().dstDir + "examples" + File.separator + "profiles-others.xml");
        // todo-bundle - should this be checked?
        // int ec = 0;
        // for (Resource e : valueSetsFeed.getItem()) {
        // ValueSet vs = (ValueSet) e;
        // if (!vs.getUrl().equals(e.getId())) {
        // ec++;
        // page.log("Valueset id mismatch: atom entry has '"+e.getId()+"', but value set is '"+vs.getUrl()+"'", LogMessageType.Error);
        // }
        // }
        // if (ec > 0)
        // throw new Exception("Cannot continue due to value set mis-identification");
        checkBundleURLs(dataElements);
        s = new FileOutputStream(page.getFolders().dstDir + "dataelements.xml");
        new XmlParser().setOutputStyle(OutputStyle.PRETTY).compose(s, dataElements);
        s.close();
        Utilities.copyFile(page.getFolders().dstDir + "dataelements.xml", page.getFolders().dstDir + "examples" + File.separator + "dataelements.xml");
        s = new FileOutputStream(page.getFolders().dstDir + "dataelements.json");
        new JsonParser().setOutputStyle(OutputStyle.PRETTY).compose(s, dataElements);
        s.close();
        checkBundleURLs(valueSetsFeed);
        s = new FileOutputStream(page.getFolders().dstDir + "valuesets.xml");
        new XmlParser().setOutputStyle(OutputStyle.PRETTY).compose(s, valueSetsFeed);
        s.close();
        Utilities.copyFile(page.getFolders().dstDir + "valuesets.xml", page.getFolders().dstDir + "examples" + File.separator + "valuesets.xml");
        s = new FileOutputStream(page.getFolders().dstDir + "valuesets.json");
        new JsonParser().setOutputStyle(OutputStyle.PRETTY).compose(s, valueSetsFeed);
        s.close();
        checkBundleURLs(conceptMapsFeed);
        s = new FileOutputStream(page.getFolders().dstDir + "conceptmaps.xml");
        new XmlParser().setOutputStyle(OutputStyle.PRETTY).compose(s, conceptMapsFeed);
        s.close();
        Utilities.copyFile(page.getFolders().dstDir + "conceptmaps.xml", page.getFolders().dstDir + "examples" + File.separator + "conceptmaps.xml");
        s = new FileOutputStream(page.getFolders().dstDir + "conceptmaps.json");
        new JsonParser().setOutputStyle(OutputStyle.PRETTY).compose(s, conceptMapsFeed);
        s.close();
        checkBundleURLs(externals);
        s = new FileOutputStream(page.getFolders().dstDir + "external-resources.xml");
        new XmlParser().setOutputStyle(OutputStyle.PRETTY).compose(s, externals);
        s.close();
        Utilities.copyFile(page.getFolders().dstDir + "external-resources.xml", page.getFolders().dstDir + "examples" + File.separator + "external-resources.xml");
        s = new FileOutputStream(page.getFolders().dstDir + "external-resources.json");
        new JsonParser().setOutputStyle(OutputStyle.PRETTY).compose(s, externals);
        s.close();
        ImplementationGuide expIg = new ImplementationGuide();
        expIg.addFhirVersion(page.getVersion());
        expIg.setPackageId(pidRoot() + ".expansions");
        expIg.setVersion(page.getVersion().toCode());
        expIg.setLicense(ImplementationGuide.SPDXLicense.CC01_0);
        expIg.setTitle("FHIR " + page.getVersion().getDisplay() + " package : Expansions");
        expIg.setDescription("Expansions for the " + page.getVersion().getDisplay() + " version of the FHIR standard");
        NPMPackageGenerator npm = new NPMPackageGenerator(Utilities.path(page.getFolders().dstDir, pidRoot() + ".expansions.tgz"), "http://hl7.org/fhir", "http://hl7.org/fhir", PackageType.CORE, expIg, page.getGenDate().getTime(), true);
        Bundle expansionFeed = new Bundle();
        Set<String> urlset = new HashSet<>();
        expansionFeed.setId("valueset-expansions");
        expansionFeed.setType(BundleType.COLLECTION);
        expansionFeed.setMeta(new Meta().setLastUpdated(page.getGenDate().getTime()));
        expansionFeed.getFormatCommentsPre().add("This collection contains expansions for all the value sets that are used on an element of type \r\n" + "'code', to help with code generation (saves the code generator having to figure out how to \r\n" + "do the expansions or find a terminology server that supports the same version of the value sets");
        for (ValueSet vs : page.getValueSets().getList()) {
            if (!urlset.contains(vs.getUrl())) {
                urlset.add(vs.getUrl());
                if (vs.getUserData(ToolResourceUtilities.NAME_VS_USE_MARKER) != null) {
                    ValueSet evs = null;
                    if (vs.hasUserData("expansion"))
                        evs = (ValueSet) vs.getUserData("expansion");
                    else {
                        ValueSetExpansionOutcome vse = page.getWorkerContext().expandVS(vs, true, false);
                        if (vse.getValueset() != null) {
                            evs = vse.getValueset();
                            vs.setUserData("expansion", evs);
                        }
                    }
                    if (evs != null) {
                        ValueSet vsc = vs.copy();
                        vsc.setText(null);
                        vsc.setExpansion(evs.getExpansion());
                        expansionFeed.addEntry().setFullUrl("http://hl7.org/fhir/" + vsc.fhirType() + "/" + vsc.getId()).setResource(vsc);
                        npm.addFile(Category.RESOURCE, "ValueSet-" + vsc.getId() + ".json", new JsonParser().composeBytes(vsc));
                    }
                }
            }
        }
        npm.finish();
        if (!isCIBuild) {
            String id = pidRoot() + ".expansions";
            new FilesystemPackageCacheManager(true, ToolsVersion.TOOLS_VERSION).addPackageToCache(id, "current", new FileInputStream(Utilities.path(page.getFolders().dstDir, id + ".tgz")), Utilities.path(page.getFolders().dstDir, id + ".tgz"));
        }
        s = new FileOutputStream(page.getFolders().dstDir + "expansions.xml");
        new XmlParser().setOutputStyle(OutputStyle.PRETTY).compose(s, expansionFeed);
        s.close();
        s = new FileOutputStream(page.getFolders().dstDir + "expansions.json");
        new JsonParser().setOutputStyle(OutputStyle.PRETTY).compose(s, expansionFeed);
        s.close();
        produceComparisons();
        produceSpecMap();
        processRDF();
        page.log("....version maps", LogMessageType.Process);
        ZipGenerator zip = new ZipGenerator(page.getFolders().dstDir + "r3r4maps.zip");
        zip.addFiles(Utilities.path(page.getFolders().rootDir, "implementations", "r3maps", "R3toR4", ""), "r3/", null, null);
        zip.addFiles(Utilities.path(page.getFolders().rootDir, "implementations", "r3maps", "R4toR3", ""), "r4/", null, null);
        zip.close();
        page.log("....definitions", LogMessageType.Process);
        zip = new ZipGenerator(page.getFolders().dstDir + "definitions.xml.zip");
        zip.addFileName("version.info", page.getFolders().dstDir + "version.info", false);
        zip.addFileName("profiles-types.xml", page.getFolders().dstDir + "profiles-types.xml", false);
        zip.addFileName("profiles-resources.xml", page.getFolders().dstDir + "profiles-resources.xml", false);
        zip.addFileName("profiles-others.xml", page.getFolders().dstDir + "profiles-others.xml", false);
        zip.addFileName("extension-definitions.xml", page.getFolders().dstDir + "extension-definitions.xml", false);
        zip.addFileName("search-parameters.xml", page.getFolders().dstDir + "search-parameters.xml", false);
        zip.addFileName("valuesets.xml", page.getFolders().dstDir + "valuesets.xml", false);
        zip.addFileName("conceptmaps.xml", page.getFolders().dstDir + "conceptmaps.xml", false);
        zip.addFileName("dataelements.xml", page.getFolders().dstDir + "dataelements.xml", false);
        zip.addFileName("fhir-all-xsd.zip", page.getFolders().dstDir + "fhir-all-xsd.zip", false);
        zip.close();
        zip = new ZipGenerator(page.getFolders().dstDir + "definitions.json.zip");
        zip.addFileName("version.info", page.getFolders().dstDir + "version.info", false);
        zip.addFileName("profiles-types.json", page.getFolders().dstDir + "profiles-types.json", false);
        zip.addFileName("profiles-resources.json", page.getFolders().dstDir + "profiles-resources.json", false);
        zip.addFileName("profiles-others.json", page.getFolders().dstDir + "profiles-others.json", false);
        zip.addFileName("extension-definitions.json", page.getFolders().dstDir + "extension-definitions.json", false);
        zip.addFileName("search-parameters.json", page.getFolders().dstDir + "search-parameters.json", false);
        zip.addFileName("valuesets.json", page.getFolders().dstDir + "valuesets.json", false);
        zip.addFileName("conceptmaps.json", page.getFolders().dstDir + "conceptmaps.json", false);
        zip.addFileName("dataelements.json", page.getFolders().dstDir + "dataelements.json", false);
        zip.addFileName("fhir.schema.json.zip", page.getFolders().dstDir + "fhir.schema.json.zip", false);
        zip.close();
        zip = new ZipGenerator(page.getFolders().dstDir + "definitions.xlsx.zip");
        for (String rn : page.getDefinitions().sortedResourceNames()) {
            zip.addFileName(rn.toLowerCase() + ".xlsx", page.getFolders().dstDir + rn.toLowerCase() + ".xlsx", false);
        }
        zip.close();
        // this is the actual package used by the validator.
        zip = new ZipGenerator(page.getFolders().dstDir + "validator.pack");
        // conformance resources
        zip.addFileName("profiles-types.json", page.getFolders().dstDir + "profiles-types.json", false);
        zip.addFileName("profiles-resources.json", page.getFolders().dstDir + "profiles-resources.json", false);
        zip.addFileName("profiles-others.json", page.getFolders().dstDir + "profiles-others.json", false);
        zip.addFileName("extension-definitions.json", page.getFolders().dstDir + "extension-definitions.json", false);
        zip.addFileName("valuesets.json", page.getFolders().dstDir + "valuesets.json", false);
        zip.addFileName("conceptmaps.json", page.getFolders().dstDir + "conceptmaps.json", false);
        // native schema
        zip.addFileName("fhir-all-xsd.zip", page.getFolders().dstDir + "fhir-all-xsd.zip", false);
        zip.addFileName("fhir.schema.json.zip", page.getFolders().dstDir + "fhir.schema.json.zip", false);
        zip.addFileName("fhir.shex", page.getFolders().dstDir + "fhir.shex", false);
        zip.close();
        page.log("....dstu3 format (xml)", LogMessageType.Process);
        DSTU3ValidationConvertor dstu3 = new DSTU3ValidationConvertor();
        dstu3.convert(page.getFolders().dstDir + "profiles-types.xml", page.getFolders().tmpDir + "profiles-types-r3.xml");
        dstu3.convert(page.getFolders().dstDir + "profiles-resources.xml", page.getFolders().tmpDir + "profiles-resources-r3.xml");
        dstu3.convert(page.getFolders().dstDir + "profiles-others.xml", page.getFolders().tmpDir + "profiles-others-r3.xml");
        dstu3.convert(page.getFolders().dstDir + "extension-definitions.xml", page.getFolders().tmpDir + "extension-definitions-r3.xml");
        dstu3.convert(page.getFolders().dstDir + "search-parameters.xml", page.getFolders().tmpDir + "search-parameters-r3.xml");
        dstu3.convert(page.getFolders().dstDir + "valuesets.xml", page.getFolders().tmpDir + "valuesets-r3.xml");
        dstu3.convert(page.getFolders().dstDir + "conceptmaps.xml", page.getFolders().tmpDir + "conceptmaps-r3.xml");
        dstu3.convert(page.getFolders().dstDir + "dataelements.xml", page.getFolders().tmpDir + "dataelements-r3.xml");
        zip = new ZipGenerator(page.getFolders().dstDir + "definitions-r3.xml.zip");
        zip.addFileName("profiles-types.xml", page.getFolders().tmpDir + "profiles-types-r3.xml", false);
        zip.addFileName("profiles-resources.xml", page.getFolders().tmpDir + "profiles-resources-r3.xml", false);
        zip.addFileName("profiles-others.xml", page.getFolders().tmpDir + "profiles-others-r3.xml", false);
        zip.addFileName("extension-definitions.xml", page.getFolders().tmpDir + "extension-definitions-r3.xml", false);
        zip.addFileName("search-parameters.xml", page.getFolders().tmpDir + "search-parameters-r3.xml", false);
        zip.addFileName("valuesets.xml", page.getFolders().tmpDir + "valuesets-r3.xml", false);
        zip.addFileName("conceptmaps.xml", page.getFolders().tmpDir + "conceptmaps-r3.xml", false);
        zip.addFileName("dataelements.xml", page.getFolders().tmpDir + "dataelements-r3.xml", false);
        zip.close();
        page.log("....dstu3 format (json)", LogMessageType.Process);
        dstu3.convertJ(page.getFolders().dstDir + "profiles-types.xml", page.getFolders().tmpDir + "profiles-types-r3.json");
        dstu3.convertJ(page.getFolders().dstDir + "profiles-resources.xml", page.getFolders().tmpDir + "profiles-resources-r3.json");
        dstu3.convertJ(page.getFolders().dstDir + "profiles-others.xml", page.getFolders().tmpDir + "profiles-others-r3.json");
        dstu3.convertJ(page.getFolders().dstDir + "extension-definitions.xml", page.getFolders().tmpDir + "extension-definitions-r3.json");
        dstu3.convertJ(page.getFolders().dstDir + "search-parameters.xml", page.getFolders().tmpDir + "search-parameters-r3.json");
        dstu3.convertJ(page.getFolders().dstDir + "valuesets.xml", page.getFolders().tmpDir + "valuesets-r3.json");
        dstu3.convertJ(page.getFolders().dstDir + "conceptmaps.xml", page.getFolders().tmpDir + "conceptmaps-r3.json");
        dstu3.convertJ(page.getFolders().dstDir + "dataelements.xml", page.getFolders().tmpDir + "dataelements-r3.json");
        zip = new ZipGenerator(page.getFolders().dstDir + "definitions-r3.json.zip");
        zip.addFileName("profiles-types.json", page.getFolders().tmpDir + "profiles-types-r3.json", false);
        zip.addFileName("profiles-resources.json", page.getFolders().tmpDir + "profiles-resources-r3.json", false);
        zip.addFileName("profiles-others.json", page.getFolders().tmpDir + "profiles-others-r3.json", false);
        zip.addFileName("extension-definitions.json", page.getFolders().tmpDir + "extension-definitions-r3.json", false);
        zip.addFileName("search-parameters.json", page.getFolders().tmpDir + "search-parameters-r3.json", false);
        zip.addFileName("valuesets.json", page.getFolders().tmpDir + "valuesets-r3.json", false);
        zip.addFileName("conceptmaps.json", page.getFolders().tmpDir + "conceptmaps-r3.json", false);
        zip.addFileName("dataelements.json", page.getFolders().tmpDir + "dataelements-r3.json", false);
        zip.close();
        System.gc();
        page.log("....r4 in r5 format", LogMessageType.Process);
        zip = new ZipGenerator(page.getFolders().dstDir + "definitions-r2asr3.xml.zip");
        page.getDiffEngine().saveR4AsR5(zip, FhirFormat.XML);
        zip.close();
        zip = new ZipGenerator(page.getFolders().dstDir + "definitions-r2asr3.json.zip");
        page.getDiffEngine().saveR4AsR5(zip, FhirFormat.JSON);
        zip.close();
        zip = new ZipGenerator(page.getFolders().dstDir + "all-valuesets.zip");
        zip.addFileName("valuesets.xml", page.getFolders().dstDir + "valuesets.xml", false);
        zip.addFileName("valuesets.json", page.getFolders().dstDir + "valuesets.json", false);
        zip.addFileName("conceptmaps.xml", page.getFolders().dstDir + "conceptmaps.xml", false);
        zip.addFileName("conceptmaps.json", page.getFolders().dstDir + "conceptmaps.json", false);
        zip.close();
        page.log("....IG Builder Resources", LogMessageType.Process);
        zip = new ZipGenerator(page.getFolders().tmpDir + "ig-template.zip");
        zip.addFolder(Utilities.path(page.getFolders().rootDir, "tools", "ig"), "", false, null);
        zip.close();
        zip = new ZipGenerator(page.getFolders().dstDir + "igpack.zip");
        zip.addFileName("fhir.css", page.getFolders().dstDir + "fhir.css", false);
        zip.addFileName("spec.internals", page.getFolders().dstDir + "spec.internals", false);
        zip.addFileName("profiles-types.xml", page.getFolders().dstDir + "profiles-types.xml", false);
        zip.addFileName("profiles-resources.xml", page.getFolders().dstDir + "profiles-resources.xml", false);
        zip.addFileName("profiles-others.xml", page.getFolders().dstDir + "profiles-others.xml", false);
        zip.addFileName("extension-definitions.xml", page.getFolders().dstDir + "extension-definitions.xml", false);
        zip.addFileName("search-parameters.xml", page.getFolders().dstDir + "search-parameters.xml", false);
        zip.addFileName("valuesets.xml", page.getFolders().dstDir + "valuesets.xml", false);
        zip.addFileName("conceptmaps.xml", page.getFolders().dstDir + "conceptmaps.xml", false);
        zip.addFileName("dataelements.xml", page.getFolders().dstDir + "dataelements.xml", false);
        zip.addFileName("version.info", page.getFolders().dstDir + "version.info", false);
        zip.addFileName("mappingSpaces.details", page.getFolders().srcDir + "mappingSpaces.xml", false);
        zip.addFileName("redirect.asp.template", page.getFolders().srcDir + "redirect.asp", false);
        zip.addFileName("redirect.cgi.template", page.getFolders().srcDir + "redirect.cgi", false);
        zip.addFileName("redirect.php.template", page.getFolders().srcDir + "redirect.php", false);
        zip.addFileName("ig-template.zip", Utilities.path(page.getFolders().tmpDir, "ig-template.zip"), false);
        zip.addFiles(Utilities.path(page.getFolders().rootDir, "publish", ""), "", ".png", null);
        zip.addFiles(Utilities.path(page.getFolders().rootDir, "publish", ""), "", ".gif", null);
        zip.close();
        page.log("....IG Builder (2)", LogMessageType.Process);
        SpecNPMPackageGenerator self = new SpecNPMPackageGenerator();
        self.generate(page.getFolders().dstDir, page.getBaseURL(), false, page.getGenDate().getTime(), pidRoot());
        if (!isCIBuild) {
            new FilesystemPackageCacheManager(true, ToolsVersion.TOOLS_VERSION).addPackageToCache(pidRoot() + ".core", "current", new FileInputStream(Utilities.path(page.getFolders().dstDir, pidRoot() + ".core.tgz")), Utilities.path(page.getFolders().dstDir, pidRoot() + ".core.tgz"));
        }
        page.log(" ...zips", LogMessageType.Process);
        zip = new ZipGenerator(page.getFolders().dstDir + "examples.zip");
        zip.addFiles(page.getFolders().dstDir + "examples" + File.separator, "", null, "expansions.xml");
        zip.close();
        zip = new ZipGenerator(page.getFolders().dstDir + "examples-json.zip");
        gson = new GsonBuilder().setPrettyPrinting().create();
        File f = new CSFile(page.getFolders().dstDir);
        File[] files = f.listFiles();
        String[] noExt = new String[] { ".schema.json", ".canonical.json", ".diff.json", "expansions.json", "package.json", "choice-elements.json", "backbone-elements.json" };
        for (int fi = 0; fi < files.length; fi++) {
            if (files[fi].isFile() && (files[fi].getName().endsWith(".json"))) {
                boolean ok = true;
                for (String n : noExt) {
                    ok = ok && !files[fi].getName().endsWith(n);
                }
                if (ok) {
                    JsonObject jr = JSONUtil.parse(TextFile.fileToString(files[fi]));
                    if (!jr.has("url")) {
                        JsonObject meta = JSONUtil.forceObject(jr, "meta");
                        JsonArray labels = JSONUtil.forceArray(meta, "tag");
                        JsonObject label = JSONUtil.addObj(labels);
                        label.addProperty("system", "http://terminology.hl7.org/CodeSystem/v3-ActReason");
                        label.addProperty("code", "HTEST");
                        label.addProperty("display", "test health data");
                    }
                    String jrs = gson.toJson(jr);
                    zip.addBytes(files[fi].getName(), jrs.getBytes(Charsets.UTF_8), true);
                }
            }
        }
        zip.close();
        NDJsonWriter ndjson = new NDJsonWriter(page.getFolders().dstDir + "examples-ndjson.zip", page.getFolders().tmpDir);
        ndjson.addFilesFiltered(page.getFolders().dstDir, ".json", new String[] { ".schema.json", ".canonical.json", ".diff.json", "expansions.json", "package.json" });
        ndjson.close();
        zip = new ZipGenerator(page.getFolders().dstDir + "examples-ttl.zip");
        zip.addFilesFiltered(page.getFolders().dstDir, "", ".ttl", new String[0]);
        zip.close();
        page.log("Check HTML Links", LogMessageType.Process);
        page.getHTMLChecker().produce();
        checkAllOk();
    } else
        page.log("Partial Build - terminating now", LogMessageType.Error);
}
Also used : Meta(org.hl7.fhir.r5.model.Meta) JsonObject(com.google.gson.JsonObject) DocumentBuilderFactory(javax.xml.parsers.DocumentBuilderFactory) ImplementationGuide(org.hl7.fhir.r5.model.ImplementationGuide) NDJsonWriter(org.hl7.fhir.utilities.NDJsonWriter) Compartment(org.hl7.fhir.definitions.model.Compartment) Element(org.w3c.dom.Element) JsonObject(com.google.gson.JsonObject) Gson(com.google.gson.Gson) CSFile(org.hl7.fhir.utilities.CSFile) Document(org.w3c.dom.Document) XhtmlDocument(org.hl7.fhir.utilities.xhtml.XhtmlDocument) ResourceDefn(org.hl7.fhir.definitions.model.ResourceDefn) Profile(org.hl7.fhir.definitions.model.Profile) DSTU3ValidationConvertor(org.hl7.fhir.tools.converters.DSTU3ValidationConvertor) LogicalModel(org.hl7.fhir.definitions.model.LogicalModel) StructureDefinition(org.hl7.fhir.r5.model.StructureDefinition) ValueSet(org.hl7.fhir.r5.model.ValueSet) HashSet(java.util.HashSet) JsonParser(org.hl7.fhir.r5.formats.JsonParser) XmlParser(org.hl7.fhir.r5.formats.XmlParser) FilesystemPackageCacheManager(org.hl7.fhir.utilities.npm.FilesystemPackageCacheManager) GsonBuilder(com.google.gson.GsonBuilder) SpecNPMPackageGenerator(org.hl7.fhir.tools.converters.SpecNPMPackageGenerator) Bundle(org.hl7.fhir.r5.model.Bundle) NPMPackageGenerator(org.hl7.fhir.r5.utils.NPMPackageGenerator) SpecNPMPackageGenerator(org.hl7.fhir.tools.converters.SpecNPMPackageGenerator) ImplementationGuideDefn(org.hl7.fhir.definitions.model.ImplementationGuideDefn) ContactPoint(org.hl7.fhir.r5.model.ContactPoint) CSFileInputStream(org.hl7.fhir.utilities.CSFileInputStream) FileInputStream(java.io.FileInputStream) JsonArray(com.google.gson.JsonArray) BundleEntryComponent(org.hl7.fhir.r5.model.Bundle.BundleEntryComponent) Regenerator(org.hl7.fhir.definitions.parsers.Regenerator) DocumentBuilder(javax.xml.parsers.DocumentBuilder) FileOutputStream(java.io.FileOutputStream) ValueSetExpansionOutcome(org.hl7.fhir.r5.terminologies.ValueSetExpander.ValueSetExpansionOutcome) ImplementationGuideDefinitionPageComponent(org.hl7.fhir.r5.model.ImplementationGuide.ImplementationGuideDefinitionPageComponent) ZipGenerator(org.hl7.fhir.utilities.ZipGenerator) IniFile(org.hl7.fhir.utilities.IniFile) File(java.io.File) CSFile(org.hl7.fhir.utilities.CSFile) TextFile(org.hl7.fhir.utilities.TextFile)

Example 58 with ImplementationGuideDefn

use of org.hl7.fhir.definitions.model.ImplementationGuideDefn 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)

Example 59 with ImplementationGuideDefn

use of org.hl7.fhir.definitions.model.ImplementationGuideDefn in project kindling by HL7.

the class Publisher method produceExtensionDefinition.

private void produceExtensionDefinition(StructureDefinition ed) throws FileNotFoundException, Exception {
    if (!ped.contains(ed)) {
        ped.add(ed);
        ImplementationGuideDefn ig = page.getDefinitions().getIgs().get(ed.getUserString(ToolResourceUtilities.NAME_RES_IG));
        String prefix = ig.isCore() ? "" : ig.getCode() + File.separator;
        String filename = ed.getUserString("filename");
        FileOutputStream s = new FileOutputStream(page.getFolders().dstDir + prefix + filename + ".xml");
        new XmlParser().setOutputStyle(OutputStyle.PRETTY).compose(s, ed);
        s.close();
        s = new FileOutputStream(page.getFolders().dstDir + prefix + filename + ".canonical.xml");
        new XmlParser().setOutputStyle(OutputStyle.CANONICAL).compose(s, ed);
        s.close();
        s = new FileOutputStream(page.getFolders().dstDir + prefix + filename + ".json");
        new JsonParser().setOutputStyle(OutputStyle.PRETTY).compose(s, ed);
        s.close();
        s = new FileOutputStream(page.getFolders().dstDir + prefix + filename + ".canonical.json");
        new JsonParser().setOutputStyle(OutputStyle.CANONICAL).compose(s, ed);
        s.close();
        cloneToXhtml(prefix + filename, ed.getName(), false, "summary-instance", ed.getUrl(), null, wg(ed));
        jsonToXhtml(prefix + filename, ed.getName(), resource2Json(ed), "extension", ed.getUrl(), null, wg(ed));
        ttlToXhtml(prefix + filename, ed.getName(), resource2Ttl(ed), "extension", ed.getUrl(), null, wg(ed));
        ByteArrayOutputStream bytes = new ByteArrayOutputStream();
        XmlSpecGenerator gen = new XmlSpecGenerator(bytes, filename + "-definitions.html", null, /*"http://hl7.org/fhir/"*/
        page, page.genlevel(ig.isCore() ? 0 : 1));
        gen.generateExtension(ed);
        gen.close();
        String xml = bytes.toString();
        bytes = new ByteArrayOutputStream();
        JsonSpecGenerator genj = new JsonSpecGenerator(bytes, filename + "-definitions.html", null, /*"http://hl7.org/fhir/"*/
        page, page.genlevel(ig.isCore() ? 0 : 1), page.getVersion().toCode());
        genj.generateExtension(ed);
        genj.close();
        String json = bytes.toString();
        bytes = new ByteArrayOutputStream();
        TurtleSpecGenerator gent = new TurtleSpecGenerator(bytes, filename + "-definitions.html", null, /*"http://hl7.org/fhir/"*/
        page, page.genlevel(ig.isCore() ? 0 : 1), page.getVersion().toCode());
        gent.generateExtension(ed);
        gent.close();
        String ttl = bytes.toString();
        bytes = new ByteArrayOutputStream();
        TerminologyNotesGenerator tgen = new TerminologyNotesGenerator(bytes, page);
        tgen.generateExtension("", ed);
        tgen.close();
        String tx = bytes.toString();
        String src = TextFile.fileToString(page.getFolders().templateDir + "template-extension-mappings.html");
        src = page.processExtensionIncludes(filename, ed, xml, json, ttl, tx, src, filename + ".html", ig);
        page.getHTMLChecker().registerFile(prefix + filename + "-mappings.html", "Mappings for Extension " + ed.getName(), HTMLLinkChecker.XHTML_TYPE, true);
        TextFile.stringToFile(src, page.getFolders().dstDir + prefix + filename + "-mappings.html");
        src = TextFile.fileToString(page.getFolders().templateDir + "template-extension-definitions.html");
        src = page.processExtensionIncludes(filename, ed, xml, json, ttl, tx, src, filename + ".html", ig);
        page.getHTMLChecker().registerFile(prefix + filename + "-definitions.html", "Definitions for Extension " + ed.getName(), HTMLLinkChecker.XHTML_TYPE, true);
        TextFile.stringToFile(src, page.getFolders().dstDir + prefix + filename + "-definitions.html");
        src = TextFile.fileToString(page.getFolders().templateDir + "template-extension.html");
        src = page.processExtensionIncludes(filename, ed, xml, json, ttl, tx, src, filename + ".html", ig);
        page.getHTMLChecker().registerFile(prefix + filename + ".html", "Extension " + ed.getName(), HTMLLinkChecker.XHTML_TYPE, true);
        TextFile.stringToFile(src, page.getFolders().dstDir + prefix + filename + ".html");
    }
}
Also used : XmlParser(org.hl7.fhir.r5.formats.XmlParser) XmlSpecGenerator(org.hl7.fhir.definitions.generators.specification.XmlSpecGenerator) JsonSpecGenerator(org.hl7.fhir.definitions.generators.specification.JsonSpecGenerator) TerminologyNotesGenerator(org.hl7.fhir.definitions.generators.specification.TerminologyNotesGenerator) FileOutputStream(java.io.FileOutputStream) TurtleSpecGenerator(org.hl7.fhir.definitions.generators.specification.TurtleSpecGenerator) ByteArrayOutputStream(java.io.ByteArrayOutputStream) ImplementationGuideDefn(org.hl7.fhir.definitions.model.ImplementationGuideDefn) JsonParser(org.hl7.fhir.r5.formats.JsonParser)

Example 60 with ImplementationGuideDefn

use of org.hl7.fhir.definitions.model.ImplementationGuideDefn in project kindling by HL7.

the class Publisher method generateValueSetPart2.

private void generateValueSetPart2(ValueSet vs) throws Exception {
    String n = vs.getUserString("filename");
    if (n == null)
        n = "valueset-" + vs.getId();
    ImplementationGuideDefn ig = (ImplementationGuideDefn) vs.getUserData(ToolResourceUtilities.NAME_RES_IG);
    if (ig != null)
        n = ig.getCode() + File.separator + n;
    if (!vs.hasText() || (vs.getText().getDiv().allChildrenAreText() && (Utilities.noString(vs.getText().getDiv().allText()) || !vs.getText().getDiv().allText().matches(".*\\w.*")))) {
        RenderingContext lrc = page.getRc().copy().setLocalPrefix(ig != null ? "../" : "").setTooCostlyNoteEmpty(PageProcessor.TOO_MANY_CODES_TEXT_EMPTY).setTooCostlyNoteNotEmpty(PageProcessor.TOO_MANY_CODES_TEXT_NOT_EMPTY);
        RendererFactory.factory(vs, lrc).render(vs);
    }
    page.getVsValidator().validate(page.getValidationErrors(), n, vs, true, false);
    if (isGenerate) {
        // page.log(" ... "+n, LogMessageType.Process);
        addToResourceFeed(vs, valueSetsFeed, null);
        if (vs.getUserData("path") == null)
            vs.setUserData("path", n + ".html");
        page.setId(vs.getId());
        String sf;
        try {
            sf = page.processPageIncludes(n + ".html", TextFile.fileToString(page.getFolders().templateDir + "template-vs.html"), "valueSet", null, n + ".html", vs, null, "Value Set", ig, null, wg(vs, "vocab"));
        } catch (Exception e) {
            throw new Exception("Error processing " + n + ".html: " + e.getMessage(), e);
        }
        sf = addSectionNumbers(n + ".html", "template-valueset", sf, vsCounter(), ig == null ? 0 : 1, null, ig);
        TextFile.stringToFile(sf, page.getFolders().dstDir + n + ".html");
        try {
            String src = page.processPageIncludesForBook(n + ".html", TextFile.fileToString(page.getFolders().templateDir + "template-vs-book.html"), "valueSet", vs, ig, null);
            cachePage(n + ".html", src, "Value Set " + n, false);
            page.setId(null);
        } catch (Exception e) {
            throw new Exception("Error processing " + n + ".html: " + e.getMessage(), e);
        }
        IParser json = new JsonParser().setOutputStyle(OutputStyle.PRETTY);
        FileOutputStream s = new FileOutputStream(page.getFolders().dstDir + n + ".json");
        json.compose(s, vs);
        s.close();
        json = new JsonParser().setOutputStyle(OutputStyle.CANONICAL);
        s = new FileOutputStream(page.getFolders().dstDir + n + ".canonical.json");
        json.compose(s, vs);
        s.close();
        IParser xml = new XmlParser().setOutputStyle(OutputStyle.PRETTY);
        s = new FileOutputStream(page.getFolders().dstDir + n + ".xml");
        xml.compose(s, vs);
        s.close();
        xml = new XmlParser().setOutputStyle(OutputStyle.CANONICAL);
        s = new FileOutputStream(page.getFolders().dstDir + n + ".canonical.xml");
        xml.compose(s, vs);
        s.close();
        // System.out.println(vs.getUrl());
        cloneToXhtml(n, "Definition for Value Set" + vs.present(), false, "valueset-instance", "Value Set", null, wg("vocab"));
        jsonToXhtml(n, "Definition for Value Set" + vs.present(), resource2Json(vs), "valueset-instance", "Value Set", null, wg("vocab"));
        ttlToXhtml(n, "Definition for Value Set" + vs.present(), resource2Ttl(vs), "valueset-instance", "Value Set", null, wg("vocab"));
    }
}
Also used : RenderingContext(org.hl7.fhir.r5.renderers.utils.RenderingContext) XmlParser(org.hl7.fhir.r5.formats.XmlParser) FileOutputStream(java.io.FileOutputStream) ImplementationGuideDefn(org.hl7.fhir.definitions.model.ImplementationGuideDefn) TransformerException(javax.xml.transform.TransformerException) IOException(java.io.IOException) FHIRException(org.hl7.fhir.exceptions.FHIRException) FileNotFoundException(java.io.FileNotFoundException) UnsupportedEncodingException(java.io.UnsupportedEncodingException) IParser(org.hl7.fhir.r5.formats.IParser) JsonParser(org.hl7.fhir.r5.formats.JsonParser)

Aggregations

ImplementationGuideDefn (org.hl7.fhir.definitions.model.ImplementationGuideDefn)34 FHIRException (org.hl7.fhir.exceptions.FHIRException)25 FileNotFoundException (java.io.FileNotFoundException)22 IOException (java.io.IOException)22 TransformerException (javax.xml.transform.TransformerException)21 CSFile (org.hl7.fhir.utilities.CSFile)21 StructureDefinition (org.hl7.fhir.r5.model.StructureDefinition)19 CommaSeparatedStringBuilder (org.hl7.fhir.utilities.CommaSeparatedStringBuilder)18 ContactPoint (org.hl7.fhir.r5.model.ContactPoint)17 File (java.io.File)16 ArrayList (java.util.ArrayList)16 Profile (org.hl7.fhir.definitions.model.Profile)16 ValueSet (org.hl7.fhir.r5.model.ValueSet)15 IniFile (org.hl7.fhir.utilities.IniFile)15 TextFile (org.hl7.fhir.utilities.TextFile)15 Example (org.hl7.fhir.definitions.model.Example)14 UnsupportedEncodingException (java.io.UnsupportedEncodingException)11 URISyntaxException (java.net.URISyntaxException)11 HashMap (java.util.HashMap)10 TransformerConfigurationException (javax.xml.transform.TransformerConfigurationException)10