Add Additional Bindings rendering
This commit is contained in:
parent
4927d23273
commit
c3281340a0
|
@ -988,12 +988,12 @@ public class ProfileComparer extends CanonicalResourceComparer {
|
||||||
nc = utilsRight.genElementNameCell(gen, combined.getRight().getDef(), "??", true, corePath, prefix, root, false, false, combined.getRight().getSrc(), typesRow, row, false, ext, used , ref, sName);
|
nc = utilsRight.genElementNameCell(gen, combined.getRight().getDef(), "??", true, corePath, prefix, root, false, false, combined.getRight().getSrc(), typesRow, row, false, ext, used , ref, sName);
|
||||||
}
|
}
|
||||||
if (combined.hasLeft()) {
|
if (combined.hasLeft()) {
|
||||||
frame(utilsRight.genElementCells(gen, combined.getLeft().getDef(), "??", true, corePath, prefix, root, false, false, combined.getLeft().getSrc(), typesRow, row, true, ext, used , ref, sName, nc, false, false), leftColor);
|
frame(utilsRight.genElementCells(gen, combined.getLeft().getDef(), "??", true, corePath, prefix, root, false, false, combined.getLeft().getSrc(), typesRow, row, true, ext, used , ref, sName, nc, false, false, null), leftColor);
|
||||||
} else {
|
} else {
|
||||||
frame(spacers(row, 4, gen), leftColor);
|
frame(spacers(row, 4, gen), leftColor);
|
||||||
}
|
}
|
||||||
if (combined.hasRight()) {
|
if (combined.hasRight()) {
|
||||||
frame(utilsRight.genElementCells(gen, combined.getRight().getDef(), "??", true, corePath, prefix, root, false, false, combined.getRight().getSrc(), typesRow, row, true, ext, used, ref, sName, nc, false, false), rightColor);
|
frame(utilsRight.genElementCells(gen, combined.getRight().getDef(), "??", true, corePath, prefix, root, false, false, combined.getRight().getSrc(), typesRow, row, true, ext, used, ref, sName, nc, false, false, null), rightColor);
|
||||||
} else {
|
} else {
|
||||||
frame(spacers(row, 4, gen), rightColor);
|
frame(spacers(row, 4, gen), rightColor);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,178 @@
|
||||||
|
package org.hl7.fhir.r5.conformance;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.hl7.fhir.exceptions.DefinitionException;
|
||||||
|
import org.hl7.fhir.exceptions.FHIRFormatError;
|
||||||
|
import org.hl7.fhir.r5.conformance.AdditionalBindingsRenderer.AdditionalBindingDetail;
|
||||||
|
import org.hl7.fhir.r5.conformance.ProfileUtilities.ProfileKnowledgeProvider;
|
||||||
|
import org.hl7.fhir.r5.conformance.ProfileUtilities.ProfileKnowledgeProvider.BindingResolution;
|
||||||
|
import org.hl7.fhir.r5.model.Extension;
|
||||||
|
import org.hl7.fhir.r5.model.StructureDefinition;
|
||||||
|
import org.hl7.fhir.r5.model.UsageContext;
|
||||||
|
import org.hl7.fhir.r5.renderers.DataRenderer;
|
||||||
|
import org.hl7.fhir.r5.renderers.utils.RenderingContext;
|
||||||
|
import org.hl7.fhir.r5.model.ElementDefinition.ElementDefinitionBindingComponent;
|
||||||
|
import org.hl7.fhir.utilities.Utilities;
|
||||||
|
import org.hl7.fhir.utilities.xhtml.HierarchicalTableGenerator;
|
||||||
|
import org.hl7.fhir.utilities.xhtml.HierarchicalTableGenerator.Cell;
|
||||||
|
import org.hl7.fhir.utilities.xhtml.HierarchicalTableGenerator.Piece;
|
||||||
|
import org.hl7.fhir.utilities.xhtml.NodeType;
|
||||||
|
import org.hl7.fhir.utilities.xhtml.XhtmlNode;
|
||||||
|
|
||||||
|
public class AdditionalBindingsRenderer {
|
||||||
|
public class AdditionalBindingDetail {
|
||||||
|
private String purpose;
|
||||||
|
private String valueSet;
|
||||||
|
private String doco;
|
||||||
|
private UsageContext usage;
|
||||||
|
private boolean any;
|
||||||
|
private boolean unchanged;
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<AdditionalBindingDetail> bindings = new ArrayList<>();
|
||||||
|
private ProfileKnowledgeProvider pkp;
|
||||||
|
private HierarchicalTableGenerator gen;
|
||||||
|
private Cell c;
|
||||||
|
private String corePath;
|
||||||
|
private StructureDefinition profile;
|
||||||
|
private String path;
|
||||||
|
private RenderingContext context;
|
||||||
|
|
||||||
|
public AdditionalBindingsRenderer(ProfileKnowledgeProvider pkp, HierarchicalTableGenerator gen, Cell c, String corePath, StructureDefinition profile, String path, RenderingContext context) {
|
||||||
|
this.pkp = pkp;
|
||||||
|
this.gen = gen;
|
||||||
|
this.c = c;
|
||||||
|
this.corePath = corePath;
|
||||||
|
this.profile = profile;
|
||||||
|
this.path = path;
|
||||||
|
this.context = context;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void seeMaxBinding(Extension ext) {
|
||||||
|
AdditionalBindingDetail abr = new AdditionalBindingDetail();
|
||||||
|
abr.purpose = "maximum";
|
||||||
|
abr.valueSet = ext.getValue().primitiveValue();
|
||||||
|
abr.unchanged = ext.hasUserData(ProfileUtilities.DERIVATION_EQUALS);
|
||||||
|
bindings.add(abr);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void seeMinBinding(Extension ext) {
|
||||||
|
AdditionalBindingDetail abr = new AdditionalBindingDetail();
|
||||||
|
abr.purpose = "minimum";
|
||||||
|
abr.valueSet = ext.getValue().primitiveValue();
|
||||||
|
abr.unchanged = ext.hasUserData(ProfileUtilities.DERIVATION_EQUALS);
|
||||||
|
bindings.add(abr);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void seeAdditionalBindings(List<Extension> list) {
|
||||||
|
for (Extension ext : list) {
|
||||||
|
AdditionalBindingDetail abr = new AdditionalBindingDetail();
|
||||||
|
abr.purpose = ext.getExtensionString("purpose");
|
||||||
|
abr.valueSet = ext.getExtensionString("valueSet");
|
||||||
|
abr.doco = ext.getExtensionString("documentation");
|
||||||
|
abr.usage = (ext.hasExtension("usage")) && ext.getExtensionByUrl("usage").hasValueUsageContext() ? ext.getExtensionByUrl("usage").getValueUsageContext() : null;
|
||||||
|
abr.any = "any".equals(ext.getExtensionString("scope"));
|
||||||
|
abr.unchanged = ext.hasUserData(ProfileUtilities.DERIVATION_EQUALS);
|
||||||
|
bindings.add(abr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void render() throws FHIRFormatError, DefinitionException, IOException {
|
||||||
|
if (bindings.isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// boolean doco = false;
|
||||||
|
boolean usage = false;
|
||||||
|
boolean any = false;
|
||||||
|
for (AdditionalBindingDetail binding : bindings) {
|
||||||
|
// doco = doco || binding.doco != null;
|
||||||
|
usage = usage || binding.usage != null;
|
||||||
|
any = any || binding.any;
|
||||||
|
}
|
||||||
|
|
||||||
|
Piece piece = gen.new Piece("table").attr("class", "grid");
|
||||||
|
c.getPieces().add(piece);
|
||||||
|
|
||||||
|
XhtmlNode tr = new XhtmlNode(NodeType.Element, "tr");
|
||||||
|
piece.getChildren().add(tr);
|
||||||
|
tr.td().style("font-size: 11px").b().tx("Additional Bindings");
|
||||||
|
tr.td().style("font-size: 11px").tx("Purpose");
|
||||||
|
if (usage) {
|
||||||
|
tr.td().style("font-size: 11px").tx("Usage");
|
||||||
|
}
|
||||||
|
if (any) {
|
||||||
|
tr.td().style("font-size: 11px").tx("Any");
|
||||||
|
}
|
||||||
|
for (AdditionalBindingDetail binding : bindings) {
|
||||||
|
tr = new XhtmlNode(NodeType.Element, "tr");
|
||||||
|
if (binding.unchanged) {
|
||||||
|
tr.style("opacity: 0.5");
|
||||||
|
}
|
||||||
|
piece.getChildren().add(tr);
|
||||||
|
BindingResolution br = pkp == null ? makeNullBr(binding) : pkp.resolveBinding(profile, binding.valueSet, path);
|
||||||
|
|
||||||
|
if (br.url != null) {
|
||||||
|
tr.td().style("font-size: 11px").ah(Utilities.isAbsoluteUrl(br.url) || !pkp.prependLinks() ? br.url : corePath+br.url, binding.valueSet).tx(br.display);
|
||||||
|
} else {
|
||||||
|
tr.td().style("font-size: 11px").span(null, binding.valueSet).tx(br.display);
|
||||||
|
}
|
||||||
|
renderPurpose(tr.td().style("font-size: 11px"), binding.purpose);
|
||||||
|
if (usage) {
|
||||||
|
if (binding.usage != null) {
|
||||||
|
new DataRenderer(context).render(tr.td(), binding.usage);
|
||||||
|
} else {
|
||||||
|
tr.td();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (any) {
|
||||||
|
if (binding.any) {
|
||||||
|
tr.td().style("font-size: 11px").tx("Any repeat");
|
||||||
|
} else {
|
||||||
|
tr.td().style("font-size: 11px").tx("All repeats");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void renderPurpose(XhtmlNode td, String purpose) {
|
||||||
|
switch (purpose) {
|
||||||
|
case "maximum":
|
||||||
|
td.ah(corePath+"extension-elementdefinition-maxvalueset.html", "A required binding, for use when the binding strength is 'extensible' or 'preferred'").tx("Max Binding");
|
||||||
|
break;
|
||||||
|
case "minimum":
|
||||||
|
td.ah(corePath+"extension-elementdefinition-minvalueset.html", "The minimum allowable value set - any conformant system SHALL support all these codes").tx("Min Binding");
|
||||||
|
break;
|
||||||
|
case "conformance" :
|
||||||
|
td.ah(corePath+"terminologies.html#strength", "Validators will check this binding (strength = required)").tx("Validation Criteria");
|
||||||
|
break;
|
||||||
|
case "required" :
|
||||||
|
td.span(null, "New records are required to use this value set, but legacy records may use other codes").tx("Required");
|
||||||
|
break;
|
||||||
|
case "recommended" :
|
||||||
|
td.span(null, "This is the value set that is recommended (documentation should explain why)").tx("Recommended");
|
||||||
|
break;
|
||||||
|
case "ui" :
|
||||||
|
td.span(null, "This value set is provided to user look up in a given context").tx("UI");
|
||||||
|
break;
|
||||||
|
case "starter" :
|
||||||
|
td.span(null, "This value set is a good set of codes to start with when designing your system").tx("Starter");
|
||||||
|
break;
|
||||||
|
case "component" :
|
||||||
|
td.span(null, "This value set is a component of the base value set").tx("Component");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
td.span(null, "Unknown code for purpose").tx(purpose);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private BindingResolution makeNullBr(AdditionalBindingDetail binding) {
|
||||||
|
BindingResolution br = new BindingResolution();
|
||||||
|
br.url = "http://none.none/none";
|
||||||
|
br.display = "todo";
|
||||||
|
return br;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -110,6 +110,7 @@ import org.hl7.fhir.r5.model.ValueSet.ValueSetExpansionComponent;
|
||||||
import org.hl7.fhir.r5.model.ValueSet.ValueSetExpansionContainsComponent;
|
import org.hl7.fhir.r5.model.ValueSet.ValueSetExpansionContainsComponent;
|
||||||
import org.hl7.fhir.r5.renderers.TerminologyRenderer;
|
import org.hl7.fhir.r5.renderers.TerminologyRenderer;
|
||||||
import org.hl7.fhir.r5.renderers.spreadsheets.SpreadsheetGenerator;
|
import org.hl7.fhir.r5.renderers.spreadsheets.SpreadsheetGenerator;
|
||||||
|
import org.hl7.fhir.r5.renderers.utils.RenderingContext;
|
||||||
import org.hl7.fhir.r5.terminologies.ValueSetExpander.ValueSetExpansionOutcome;
|
import org.hl7.fhir.r5.terminologies.ValueSetExpander.ValueSetExpansionOutcome;
|
||||||
import org.hl7.fhir.r5.utils.FHIRLexer;
|
import org.hl7.fhir.r5.utils.FHIRLexer;
|
||||||
import org.hl7.fhir.r5.utils.FHIRPathEngine;
|
import org.hl7.fhir.r5.utils.FHIRPathEngine;
|
||||||
|
@ -313,7 +314,7 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
public static final int STATUS_FATAL = 4;
|
public static final int STATUS_FATAL = 4;
|
||||||
|
|
||||||
|
|
||||||
private static final String DERIVATION_EQUALS = "derivation.equals";
|
public static final String DERIVATION_EQUALS = "derivation.equals";
|
||||||
public static final String DERIVATION_POINTER = "derived.pointer";
|
public static final String DERIVATION_POINTER = "derived.pointer";
|
||||||
public static final String IS_DERIVED = "derived.fact";
|
public static final String IS_DERIVED = "derived.fact";
|
||||||
public static final String UD_ERROR_STATUS = "error-status";
|
public static final String UD_ERROR_STATUS = "error-status";
|
||||||
|
@ -3436,7 +3437,7 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
return !p.contains(".");
|
return !p.contains(".");
|
||||||
}
|
}
|
||||||
|
|
||||||
public XhtmlNode generateExtensionTable(String defFile, StructureDefinition ed, String imageFolder, boolean inlineGraphics, boolean full, String corePath, String imagePath, Set<String> outputTracker) throws IOException, FHIRException {
|
public XhtmlNode generateExtensionTable(String defFile, StructureDefinition ed, String imageFolder, boolean inlineGraphics, boolean full, String corePath, String imagePath, Set<String> outputTracker, RenderingContext rc) throws IOException, FHIRException {
|
||||||
HierarchicalTableGenerator gen = new HierarchicalTableGenerator(imageFolder, inlineGraphics, true);
|
HierarchicalTableGenerator gen = new HierarchicalTableGenerator(imageFolder, inlineGraphics, true);
|
||||||
gen.setTranslator(getTranslator());
|
gen.setTranslator(getTranslator());
|
||||||
TableModel model = gen.initNormalTable(corePath, false, true, ed.getId()+(full ? "f" : "n"), true);
|
TableModel model = gen.initNormalTable(corePath, false, true, ed.getId()+(full ? "f" : "n"), true);
|
||||||
|
@ -3474,7 +3475,7 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
if (!child.getPath().endsWith(".id")) {
|
if (!child.getPath().endsWith(".id")) {
|
||||||
List<StructureDefinition> sdl = new ArrayList<>();
|
List<StructureDefinition> sdl = new ArrayList<>();
|
||||||
sdl.add(ed);
|
sdl.add(ed);
|
||||||
genElement(defFile == null ? "" : defFile+"-definitions.html#extension.", gen, r.getSubRows(), child, ed.getSnapshot().getElement(), sdl, true, defFile, true, full, corePath, imagePath, true, false, false, false, null, false);
|
genElement(defFile == null ? "" : defFile+"-definitions.html#extension.", gen, r.getSubRows(), child, ed.getSnapshot().getElement(), sdl, true, defFile, true, full, corePath, imagePath, true, false, false, false, null, false, rc);
|
||||||
}
|
}
|
||||||
} else if (deep) {
|
} else if (deep) {
|
||||||
List<ElementDefinition> children = new ArrayList<ElementDefinition>();
|
List<ElementDefinition> children = new ArrayList<ElementDefinition>();
|
||||||
|
@ -3949,7 +3950,7 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
}
|
}
|
||||||
|
|
||||||
public XhtmlNode generateTable(String defFile, StructureDefinition profile, boolean diff, String imageFolder, boolean inlineGraphics, String profileBaseFileName, boolean snapshot, String corePath, String imagePath,
|
public XhtmlNode generateTable(String defFile, StructureDefinition profile, boolean diff, String imageFolder, boolean inlineGraphics, String profileBaseFileName, boolean snapshot, String corePath, String imagePath,
|
||||||
boolean logicalModel, boolean allInvariants, Set<String> outputTracker, boolean active, boolean mustSupport) throws IOException, FHIRException {
|
boolean logicalModel, boolean allInvariants, Set<String> outputTracker, boolean active, boolean mustSupport, RenderingContext rc) throws IOException, FHIRException {
|
||||||
assert(diff != snapshot);// check it's ok to get rid of one of these
|
assert(diff != snapshot);// check it's ok to get rid of one of these
|
||||||
HierarchicalTableGenerator gen = new HierarchicalTableGenerator(imageFolder, inlineGraphics, true);
|
HierarchicalTableGenerator gen = new HierarchicalTableGenerator(imageFolder, inlineGraphics, true);
|
||||||
gen.setTranslator(getTranslator());
|
gen.setTranslator(getTranslator());
|
||||||
|
@ -3975,7 +3976,7 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
if (diff) {
|
if (diff) {
|
||||||
insertMissingSparseElements(list);
|
insertMissingSparseElements(list);
|
||||||
}
|
}
|
||||||
genElement(defFile == null ? null : defFile+"#", gen, model.getRows(), list.get(0), list, profiles, diff, profileBaseFileName, null, snapshot, corePath, imagePath, true, logicalModel, profile.getDerivation() == TypeDerivationRule.CONSTRAINT && usesMustSupport(list), allInvariants, null, mustSupport);
|
genElement(defFile == null ? null : defFile+"#", gen, model.getRows(), list.get(0), list, profiles, diff, profileBaseFileName, null, snapshot, corePath, imagePath, true, logicalModel, profile.getDerivation() == TypeDerivationRule.CONSTRAINT && usesMustSupport(list), allInvariants, null, mustSupport, rc);
|
||||||
try {
|
try {
|
||||||
return gen.generate(model, imagePath, 0, outputTracker);
|
return gen.generate(model, imagePath, 0, outputTracker);
|
||||||
} catch (org.hl7.fhir.exceptions.FHIRException e) {
|
} catch (org.hl7.fhir.exceptions.FHIRException e) {
|
||||||
|
@ -4071,7 +4072,7 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
|
|
||||||
|
|
||||||
private Row genElement(String defPath, HierarchicalTableGenerator gen, List<Row> rows, ElementDefinition element, List<ElementDefinition> all, List<StructureDefinition> profiles, boolean showMissing, String profileBaseFileName, Boolean extensions,
|
private Row genElement(String defPath, HierarchicalTableGenerator gen, List<Row> rows, ElementDefinition element, List<ElementDefinition> all, List<StructureDefinition> profiles, boolean showMissing, String profileBaseFileName, Boolean extensions,
|
||||||
boolean snapshot, String corePath, String imagePath, boolean root, boolean logicalModel, boolean isConstraintMode, boolean allInvariants, Row slicingRow, boolean mustSupport) throws IOException, FHIRException {
|
boolean snapshot, String corePath, String imagePath, boolean root, boolean logicalModel, boolean isConstraintMode, boolean allInvariants, Row slicingRow, boolean mustSupport, RenderingContext rc) throws IOException, FHIRException {
|
||||||
Row originalRow = slicingRow;
|
Row originalRow = slicingRow;
|
||||||
StructureDefinition profile = profiles == null ? null : profiles.get(profiles.size()-1);
|
StructureDefinition profile = profiles == null ? null : profiles.get(profiles.size()-1);
|
||||||
Row typesRow = null;
|
Row typesRow = null;
|
||||||
|
@ -4141,7 +4142,7 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
if (logicalModel && element.hasRepresentation(PropertyRepresentation.XMLATTR))
|
if (logicalModel && element.hasRepresentation(PropertyRepresentation.XMLATTR))
|
||||||
sName = "@"+sName;
|
sName = "@"+sName;
|
||||||
Cell nc = genElementNameCell(gen, element, profileBaseFileName, snapshot, corePath, imagePath, root, logicalModel, allInvariants, profile, typesRow, row, hasDef, ext, used, ref, sName);
|
Cell nc = genElementNameCell(gen, element, profileBaseFileName, snapshot, corePath, imagePath, root, logicalModel, allInvariants, profile, typesRow, row, hasDef, ext, used, ref, sName);
|
||||||
genElementCells(gen, element, profileBaseFileName, snapshot, corePath, imagePath, root, logicalModel, allInvariants, profile, typesRow, row, hasDef, ext, used, ref, sName, nc, mustSupport, true);
|
genElementCells(gen, element, profileBaseFileName, snapshot, corePath, imagePath, root, logicalModel, allInvariants, profile, typesRow, row, hasDef, ext, used, ref, sName, nc, mustSupport, true, rc);
|
||||||
if (element.hasSlicing()) {
|
if (element.hasSlicing()) {
|
||||||
if (standardExtensionSlicing(element)) {
|
if (standardExtensionSlicing(element)) {
|
||||||
used.used = true; // doesn't matter whether we have a type, we're used if we're setting up slicing ... element.hasType() && element.getType().get(0).hasProfile();
|
used.used = true; // doesn't matter whether we have a type, we're used if we're setting up slicing ... element.hasType() && element.getType().get(0).hasProfile();
|
||||||
|
@ -4207,7 +4208,7 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
Row childRow = chooseChildRowByGroup(gen, currRow, groups, child, element, isConstraintMode);
|
Row childRow = chooseChildRowByGroup(gen, currRow, groups, child, element, isConstraintMode);
|
||||||
|
|
||||||
if (logicalModel || !child.getPath().endsWith(".id") || (child.getPath().endsWith(".id") && (profile != null) && (profile.getDerivation() == TypeDerivationRule.CONSTRAINT))) {
|
if (logicalModel || !child.getPath().endsWith(".id") || (child.getPath().endsWith(".id") && (profile != null) && (profile.getDerivation() == TypeDerivationRule.CONSTRAINT))) {
|
||||||
currRow = genElement(defPath, gen, childRow.getSubRows(), child, all, profiles, showMissing, profileBaseFileName, isExtension, snapshot, corePath, imagePath, false, logicalModel, isConstraintMode, allInvariants, currRow, mustSupport);
|
currRow = genElement(defPath, gen, childRow.getSubRows(), child, all, profiles, showMissing, profileBaseFileName, isExtension, snapshot, corePath, imagePath, false, logicalModel, isConstraintMode, allInvariants, currRow, mustSupport, rc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// if (!snapshot && (extensions == null || !extensions))
|
// if (!snapshot && (extensions == null || !extensions))
|
||||||
|
@ -4269,7 +4270,7 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
|
|
||||||
public List<Cell> genElementCells(HierarchicalTableGenerator gen, ElementDefinition element, String profileBaseFileName, boolean snapshot, String corePath,
|
public List<Cell> genElementCells(HierarchicalTableGenerator gen, ElementDefinition element, String profileBaseFileName, boolean snapshot, String corePath,
|
||||||
String imagePath, boolean root, boolean logicalModel, boolean allInvariants, StructureDefinition profile, Row typesRow, Row row, boolean hasDef,
|
String imagePath, boolean root, boolean logicalModel, boolean allInvariants, StructureDefinition profile, Row typesRow, Row row, boolean hasDef,
|
||||||
boolean ext, UnusedTracker used, String ref, String sName, Cell nameCell, boolean mustSupport, boolean allowSubRows) throws IOException {
|
boolean ext, UnusedTracker used, String ref, String sName, Cell nameCell, boolean mustSupport, boolean allowSubRows, RenderingContext rc) throws IOException {
|
||||||
List<Cell> res = new ArrayList<>();
|
List<Cell> res = new ArrayList<>();
|
||||||
Cell gc = gen.new Cell();
|
Cell gc = gen.new Cell();
|
||||||
row.getCells().add(gc);
|
row.getCells().add(gc);
|
||||||
|
@ -4295,7 +4296,7 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
if (extDefn == null) {
|
if (extDefn == null) {
|
||||||
res.add(genCardinality(gen, element, row, hasDef, used, null));
|
res.add(genCardinality(gen, element, row, hasDef, used, null));
|
||||||
res.add(addCell(row, gen.new Cell(null, null, "?gen-e1? "+element.getType().get(0).getProfile(), null, null)));
|
res.add(addCell(row, gen.new Cell(null, null, "?gen-e1? "+element.getType().get(0).getProfile(), null, null)));
|
||||||
res.add(generateDescription(gen, row, element, (ElementDefinition) element.getUserData(DERIVATION_POINTER), used.used, profile == null ? "" : profile.getUrl(), eurl, profile, corePath, imagePath, root, logicalModel, allInvariants, snapshot, mustSupport, allowSubRows));
|
res.add(generateDescription(gen, row, element, (ElementDefinition) element.getUserData(DERIVATION_POINTER), used.used, profile == null ? "" : profile.getUrl(), eurl, profile, corePath, imagePath, root, logicalModel, allInvariants, snapshot, mustSupport, allowSubRows, rc));
|
||||||
} else {
|
} else {
|
||||||
String name = urltail(eurl);
|
String name = urltail(eurl);
|
||||||
nameCell.getPieces().get(0).setText(name);
|
nameCell.getPieces().get(0).setText(name);
|
||||||
|
@ -4308,7 +4309,7 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
else // if it's complex, we just call it nothing
|
else // if it's complex, we just call it nothing
|
||||||
// genTypes(gen, row, extDefn.getSnapshot().getElement().get(0), profileBaseFileName, profile);
|
// genTypes(gen, row, extDefn.getSnapshot().getElement().get(0), profileBaseFileName, profile);
|
||||||
res.add(addCell(row, gen.new Cell(null, null, "("+translate("sd.table", "Complex")+")", null, null)));
|
res.add(addCell(row, gen.new Cell(null, null, "("+translate("sd.table", "Complex")+")", null, null)));
|
||||||
res.add(generateDescription(gen, row, element, extDefn.getElement(), used.used, null, extDefn.getUrl(), profile, corePath, imagePath, root, logicalModel, allInvariants, valueDefn, snapshot, mustSupport, allowSubRows));
|
res.add(generateDescription(gen, row, element, extDefn.getElement(), used.used, null, extDefn.getUrl(), profile, corePath, imagePath, root, logicalModel, allInvariants, valueDefn, snapshot, mustSupport, allowSubRows, rc));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
res.add(genCardinality(gen, element, row, hasDef, used, null));
|
res.add(genCardinality(gen, element, row, hasDef, used, null));
|
||||||
|
@ -4316,7 +4317,7 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
res.add(addCell(row, gen.new Cell()));
|
res.add(addCell(row, gen.new Cell()));
|
||||||
else
|
else
|
||||||
res.add(genTypes(gen, row, element, profileBaseFileName, profile, corePath, imagePath, root, mustSupport));
|
res.add(genTypes(gen, row, element, profileBaseFileName, profile, corePath, imagePath, root, mustSupport));
|
||||||
res.add(generateDescription(gen, row, element, (ElementDefinition) element.getUserData(DERIVATION_POINTER), used.used, null, null, profile, corePath, imagePath, root, logicalModel, allInvariants, snapshot, mustSupport, allowSubRows));
|
res.add(generateDescription(gen, row, element, (ElementDefinition) element.getUserData(DERIVATION_POINTER), used.used, null, null, profile, corePath, imagePath, root, logicalModel, allInvariants, snapshot, mustSupport, allowSubRows, rc));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
res.add(genCardinality(gen, element, row, hasDef, used, null));
|
res.add(genCardinality(gen, element, row, hasDef, used, null));
|
||||||
|
@ -4324,7 +4325,7 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
res.add(genTypes(gen, row, element, profileBaseFileName, profile, corePath, imagePath, root, mustSupport));
|
res.add(genTypes(gen, row, element, profileBaseFileName, profile, corePath, imagePath, root, mustSupport));
|
||||||
else
|
else
|
||||||
res.add(addCell(row, gen.new Cell()));
|
res.add(addCell(row, gen.new Cell()));
|
||||||
res.add(generateDescription(gen, row, element, (ElementDefinition) element.getUserData(DERIVATION_POINTER), used.used, null, null, profile, corePath, imagePath, root, logicalModel, allInvariants, snapshot, mustSupport, allowSubRows));
|
res.add(generateDescription(gen, row, element, (ElementDefinition) element.getUserData(DERIVATION_POINTER), used.used, null, null, profile, corePath, imagePath, root, logicalModel, allInvariants, snapshot, mustSupport, allowSubRows, rc));
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
@ -4630,11 +4631,11 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
&& element.getSlicing().getRules() != SlicingRules.CLOSED && element.getSlicing().getDiscriminator().size() == 1 && element.getSlicing().getDiscriminator().get(0).getPath().equals("url") && element.getSlicing().getDiscriminator().get(0).getType().equals(DiscriminatorType.VALUE);
|
&& element.getSlicing().getRules() != SlicingRules.CLOSED && element.getSlicing().getDiscriminator().size() == 1 && element.getSlicing().getDiscriminator().get(0).getPath().equals("url") && element.getSlicing().getDiscriminator().get(0).getType().equals(DiscriminatorType.VALUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Cell generateDescription(HierarchicalTableGenerator gen, Row row, ElementDefinition definition, ElementDefinition fallback, boolean used, String baseURL, String url, StructureDefinition profile, String corePath, String imagePath, boolean root, boolean logicalModel, boolean allInvariants, boolean snapshot, boolean mustSupportOnly, boolean allowSubRows) throws IOException, FHIRException {
|
private Cell generateDescription(HierarchicalTableGenerator gen, Row row, ElementDefinition definition, ElementDefinition fallback, boolean used, String baseURL, String url, StructureDefinition profile, String corePath, String imagePath, boolean root, boolean logicalModel, boolean allInvariants, boolean snapshot, boolean mustSupportOnly, boolean allowSubRows, RenderingContext rc) throws IOException, FHIRException {
|
||||||
return generateDescription(gen, row, definition, fallback, used, baseURL, url, profile, corePath, imagePath, root, logicalModel, allInvariants, null, snapshot, mustSupportOnly, allowSubRows);
|
return generateDescription(gen, row, definition, fallback, used, baseURL, url, profile, corePath, imagePath, root, logicalModel, allInvariants, null, snapshot, mustSupportOnly, allowSubRows, rc);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Cell generateDescription(HierarchicalTableGenerator gen, Row row, ElementDefinition definition, ElementDefinition fallback, boolean used, String baseURL, String url, StructureDefinition profile, String corePath, String imagePath, boolean root, boolean logicalModel, boolean allInvariants, ElementDefinition valueDefn, boolean snapshot, boolean mustSupportOnly, boolean allowSubRows) throws IOException, FHIRException {
|
private Cell generateDescription(HierarchicalTableGenerator gen, Row row, ElementDefinition definition, ElementDefinition fallback, boolean used, String baseURL, String url, StructureDefinition profile, String corePath, String imagePath, boolean root, boolean logicalModel, boolean allInvariants, ElementDefinition valueDefn, boolean snapshot, boolean mustSupportOnly, boolean allowSubRows, RenderingContext rc) throws IOException, FHIRException {
|
||||||
Cell c = gen.new Cell();
|
Cell c = gen.new Cell();
|
||||||
row.getCells().add(c);
|
row.getCells().add(c);
|
||||||
|
|
||||||
|
@ -4753,29 +4754,22 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
c.getPieces().add(checkForNoChange(binding.getStrengthElement(), gen.new Piece(corePath+"terminologies.html#"+binding.getStrength().toCode(), egt(binding.getStrengthElement()), binding.getStrength().getDefinition())));
|
c.getPieces().add(checkForNoChange(binding.getStrengthElement(), gen.new Piece(corePath+"terminologies.html#"+binding.getStrength().toCode(), egt(binding.getStrengthElement()), binding.getStrength().getDefinition())));
|
||||||
c.getPieces().add(checkForNoChange(binding.getStrengthElement(), gen.new Piece(null, ")", null)));
|
c.getPieces().add(checkForNoChange(binding.getStrengthElement(), gen.new Piece(null, ")", null)));
|
||||||
}
|
}
|
||||||
if (binding.hasExtension(ToolingExtensions.EXT_MAX_VALUESET)) {
|
|
||||||
br = pkp == null ? makeNullBr(binding) : pkp.resolveBinding(profile, ToolingExtensions.readStringExtension(binding, ToolingExtensions.EXT_MAX_VALUESET), definition.getPath());
|
|
||||||
c.addPiece(gen.new Piece("br"));
|
|
||||||
c.getPieces().add(checkForNoChange(binding, gen.new Piece(corePath+"extension-elementdefinition-maxvalueset.html", translate("sd.table", "Max Binding")+": ", "Max Value Set Extension").addStyle("font-weight:bold")));
|
|
||||||
c.getPieces().add(checkForNoChange(binding, gen.new Piece(br.url == null ? null : Utilities.isAbsoluteUrl(br.url) || !pkp.prependLinks() ? br.url : corePath+br.url, br.display, null)));
|
|
||||||
}
|
|
||||||
if (binding.hasExtension(ToolingExtensions.EXT_MIN_VALUESET)) {
|
|
||||||
br = pkp.resolveBinding(profile, ToolingExtensions.readStringExtension(binding, ToolingExtensions.EXT_MIN_VALUESET), definition.getPath());
|
|
||||||
c.addPiece(gen.new Piece("br"));
|
|
||||||
c.getPieces().add(checkForNoChange(binding, gen.new Piece(corePath+"extension-elementdefinition-minvalueset.html", translate("sd.table", "Min Binding")+": ", "Min Value Set Extension").addStyle("font-weight:bold")));
|
|
||||||
c.getPieces().add(checkForNoChange(binding, gen.new Piece(br.url == null ? null : Utilities.isAbsoluteUrl(br.url) || !pkp.prependLinks() ? br.url : corePath+br.url, br.display, null)));
|
|
||||||
}
|
|
||||||
if (binding.hasDescription() && MarkDownProcessor.isSimpleMarkdown(binding.getDescription())) {
|
if (binding.hasDescription() && MarkDownProcessor.isSimpleMarkdown(binding.getDescription())) {
|
||||||
c.getPieces().add(gen.new Piece(null, ": ", null));
|
c.getPieces().add(gen.new Piece(null, ": ", null));
|
||||||
c.addMarkdownNoPara(PublicationHacker.fixBindingDescriptions(context, binding.getDescriptionElement()).asStringValue(), checkForNoChange(PublicationHacker.fixBindingDescriptions(context, binding.getDescriptionElement())));
|
c.addMarkdownNoPara(PublicationHacker.fixBindingDescriptions(context, binding.getDescriptionElement()).asStringValue(), checkForNoChange(PublicationHacker.fixBindingDescriptions(context, binding.getDescriptionElement())));
|
||||||
}
|
}
|
||||||
if (binding.hasExtension(ToolingExtensions.EXT_BINDING_ADDITIONAL)) {
|
|
||||||
c.addPiece(gen.new Piece("br"));
|
AdditionalBindingsRenderer abr = new AdditionalBindingsRenderer(pkp, gen, c, corePath, profile, definition.getPath(), rc);
|
||||||
c.getPieces().add(checkForNoChange(binding, gen.new Piece(null, translate("sd.table", "Additional Bindings")+": ", null).addStyle("font-weight:bold")));
|
if (binding.hasExtension(ToolingExtensions.EXT_MAX_VALUESET)) {
|
||||||
for (Extension ext : binding.getExtensionsByUrl(ToolingExtensions.EXT_BINDING_ADDITIONAL)) {
|
abr.seeMaxBinding(ToolingExtensions.getExtension(binding, ToolingExtensions.EXT_MAX_VALUESET));
|
||||||
renderAdditionalBinding(gen, c, ext);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
if (binding.hasExtension(ToolingExtensions.EXT_MIN_VALUESET)) {
|
||||||
|
abr.seeMinBinding(ToolingExtensions.getExtension(binding, ToolingExtensions.EXT_MIN_VALUESET));
|
||||||
|
}
|
||||||
|
if (binding.hasExtension(ToolingExtensions.EXT_BINDING_ADDITIONAL)) {
|
||||||
|
abr.seeAdditionalBindings(binding.getExtensionsByUrl(ToolingExtensions.EXT_BINDING_ADDITIONAL));
|
||||||
|
}
|
||||||
|
abr.render();
|
||||||
}
|
}
|
||||||
for (ElementDefinitionConstraintComponent inv : definition.getConstraint()) {
|
for (ElementDefinitionConstraintComponent inv : definition.getConstraint()) {
|
||||||
if (!inv.hasSource() || profile == null || inv.getSource().equals(profile.getUrl()) || allInvariants) {
|
if (!inv.hasSource() || profile == null || inv.getSource().equals(profile.getUrl()) || allInvariants) {
|
||||||
|
@ -4855,25 +4849,6 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void renderAdditionalBinding(HierarchicalTableGenerator gen, Cell c, Extension ext) {
|
|
||||||
// <nsbp>2 <sp> purpose <sp> value-set-link ([context]) {documentation}
|
|
||||||
String purpose = ext.getExtensionString("purpose");
|
|
||||||
String valueSet = ext.getExtensionString("valueSet");
|
|
||||||
String doco = ext.getExtensionString("documentation");
|
|
||||||
UsageContext usage = (ext.hasExtension("usage")) ? ext.getExtensionByUrl("usage").getValueUsageContext() : null;
|
|
||||||
boolean any = "any".equals(ext.getExtensionString("scope"));
|
|
||||||
|
|
||||||
//
|
|
||||||
// purpose: code - defines how the binding is used
|
|
||||||
// usage : UsageContext - defines the contexts in which this binding is used for it's purpose
|
|
||||||
// valueSet : canonical(ValueSet)
|
|
||||||
// documentation : markdown
|
|
||||||
// !!
|
|
||||||
// c.getPieces().add(checkForNoChange(inv, gen.new Piece(null, inv.getKey()+": ", null).addStyle("font-weight:bold")));
|
|
||||||
// c.getPieces().add(checkForNoChange(inv, gen.new Piece(null, gt(inv.getHumanElement()), null)));
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private BindingResolution makeNullBr(ElementDefinitionBindingComponent binding) {
|
private BindingResolution makeNullBr(ElementDefinitionBindingComponent binding) {
|
||||||
BindingResolution br = new BindingResolution();
|
BindingResolution br = new BindingResolution();
|
||||||
br.url = "http://none.none/none";
|
br.url = "http://none.none/none";
|
||||||
|
@ -6820,6 +6795,5 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
public void setMasterSourceFileNames(Set<String> masterSourceFileNames) {
|
public void setMasterSourceFileNames(Set<String> masterSourceFileNames) {
|
||||||
this.masterSourceFileNames = masterSourceFileNames;
|
this.masterSourceFileNames = masterSourceFileNames;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
|
|
@ -28,7 +28,7 @@ public class StructureDefinitionRenderer extends ResourceRenderer {
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean render(XhtmlNode x, StructureDefinition sd) throws FHIRFormatError, DefinitionException, IOException {
|
public boolean render(XhtmlNode x, StructureDefinition sd) throws FHIRFormatError, DefinitionException, IOException {
|
||||||
x.getChildNodes().add(context.getProfileUtilities().generateTable(context.getDefinitionsTarget(), sd, true, context.getDestDir(), false, sd.getId(), false, context.getSpecificationLink(), "", false, false, null, false, false));
|
x.getChildNodes().add(context.getProfileUtilities().generateTable(context.getDefinitionsTarget(), sd, true, context.getDestDir(), false, sd.getId(), false, context.getSpecificationLink(), "", false, false, null, false, false, context));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -214,6 +214,13 @@ public class HierarchicalTableGenerator extends TranslatingUtilities {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Piece attr(String name, String value) {
|
||||||
|
if (attributes == null) {
|
||||||
|
attributes = new HashMap<>();
|
||||||
|
}
|
||||||
|
attributes.put(name, value);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Cell {
|
public class Cell {
|
||||||
|
|
Loading…
Reference in New Issue