Don't make a column for definitions in a code system if there are none

This commit is contained in:
Grahame Grieve 2020-09-17 15:40:06 +10:00
parent 25cac32326
commit 54d320bb7b
1 changed files with 52 additions and 31 deletions

View File

@ -134,6 +134,7 @@ public class CodeSystemRenderer extends TerminologyRenderer {
return false; return false;
} }
XhtmlNode t = x.table( "codes"); XhtmlNode t = x.table( "codes");
boolean definitions = false;
boolean commentS = false; boolean commentS = false;
boolean deprecated = false; boolean deprecated = false;
boolean display = false; boolean display = false;
@ -161,14 +162,15 @@ public class CodeSystemRenderer extends TerminologyRenderer {
display = display || conceptsHaveDisplay(c); display = display || conceptsHaveDisplay(c);
version = version || conceptsHaveVersion(c); version = version || conceptsHaveVersion(c);
hierarchy = hierarchy || c.hasConcept(); hierarchy = hierarchy || c.hasConcept();
definitions = definitions || conceptsHaveDefinition(c);
} }
CodeSystemNavigator csNav = new CodeSystemNavigator(cs); CodeSystemNavigator csNav = new CodeSystemNavigator(cs);
hierarchy = hierarchy || csNav.isRestructure(); hierarchy = hierarchy || csNav.isRestructure();
List<String> langs = new ArrayList<>(); List<String> langs = new ArrayList<>();
addMapHeaders(addTableHeaderRowStandard(t, hierarchy, display, true, commentS, version, deprecated, properties, null, false), maps); addMapHeaders(addTableHeaderRowStandard(t, hierarchy, display, definitions, commentS, version, deprecated, properties, null, false), maps);
for (ConceptDefinitionComponent c : csNav.getConcepts(null)) { for (ConceptDefinitionComponent c : csNav.getConcepts(null)) {
hasExtensions = addDefineRowToTable(t, c, 0, hierarchy, display, commentS, version, deprecated, maps, cs.getUrl(), cs, properties, csNav, langs) || hasExtensions; hasExtensions = addDefineRowToTable(t, c, 0, hierarchy, display, definitions, commentS, version, deprecated, maps, cs.getUrl(), cs, properties, csNav, langs) || hasExtensions;
} }
if (langs.size() > 0) { if (langs.size() > 0) {
Collections.sort(langs); Collections.sort(langs);
@ -185,6 +187,23 @@ public class CodeSystemRenderer extends TerminologyRenderer {
return hasExtensions; return hasExtensions;
} }
private boolean conceptsHaveDefinition(ConceptDefinitionComponent c) {
if (c.hasDefinition()) {
return true;
}
for (ConceptDefinitionDesignationComponent cd : c.getDesignation()) {
if (cd.getUse().is("http://terminology.hl7.org/CodeSystem/designation-usage", "definition") && cd.hasLanguage() && !c.getDefinition().equalsIgnoreCase(cd.getValue())) {
return true;
}
}
for (ConceptDefinitionComponent g : c.getConcept()) {
if (conceptsHaveDefinition(g)) {
return true;
}
}
return false;
}
private boolean conceptsHaveProperty(ConceptDefinitionComponent c, PropertyComponent cp) { private boolean conceptsHaveProperty(ConceptDefinitionComponent c, PropertyComponent cp) {
if (CodeSystemUtilities.hasProperty(c, cp.getCode())) if (CodeSystemUtilities.hasProperty(c, cp.getCode()))
return true; return true;
@ -271,7 +290,7 @@ public class CodeSystemRenderer extends TerminologyRenderer {
private boolean addDefineRowToTable(XhtmlNode t, ConceptDefinitionComponent c, int level, boolean hasHierarchy, boolean hasDisplay, boolean comment, boolean version, boolean deprecated, List<UsedConceptMap> maps, String system, CodeSystem cs, List<PropertyComponent> properties, CodeSystemNavigator csNav, List<String> langs) throws FHIRFormatError, DefinitionException, IOException { private boolean addDefineRowToTable(XhtmlNode t, ConceptDefinitionComponent c, int level, boolean hasHierarchy, boolean hasDisplay, boolean hasDefinitions, boolean comment, boolean version, boolean deprecated, List<UsedConceptMap> maps, String system, CodeSystem cs, List<PropertyComponent> properties, CodeSystemNavigator csNav, List<String> langs) throws FHIRFormatError, DefinitionException, IOException {
boolean hasExtensions = false; boolean hasExtensions = false;
XhtmlNode tr = t.tr(); XhtmlNode tr = t.tr();
XhtmlNode td = tr.td(); XhtmlNode td = tr.td();
@ -298,35 +317,37 @@ public class CodeSystemRenderer extends TerminologyRenderer {
td = tr.td(); td = tr.td();
renderDisplayName(c, cs, td); renderDisplayName(c, cs, td);
} }
td = tr.td(); if (hasDefinitions) {
if (c != null && td = tr.td();
c.hasDefinitionElement()) { if (c != null &&
if (getContext().getLang() == null) { c.hasDefinitionElement()) {
if (hasMarkdownInDefinitions(cs)) if (getContext().getLang() == null) {
addMarkdown(td, c.getDefinition()); if (hasMarkdownInDefinitions(cs))
else addMarkdown(td, c.getDefinition());
else
td.addText(c.getDefinition());
} else if (getContext().getLang().equals("*")) {
boolean sl = false;
for (ConceptDefinitionDesignationComponent cd : c.getDesignation())
if (cd.getUse().is("http://terminology.hl7.org/CodeSystem/designation-usage", "definition") && cd.hasLanguage() && !c.getDefinition().equalsIgnoreCase(cd.getValue()))
sl = true;
td.addText((sl ? cs.getLanguage("en")+": " : "")+c.getDefinition());
for (ConceptDefinitionDesignationComponent cd : c.getDesignation()) {
if (cd.getUse().is("http://terminology.hl7.org/CodeSystem/designation-usage", "definition") && cd.hasLanguage() && !c.getDefinition().equalsIgnoreCase(cd.getValue())) {
td.br();
td.addText(cd.getLanguage()+": "+cd.getValue());
}
}
} else if (getContext().getLang().equals(cs.getLanguage()) || (getContext().getLang().equals("en") && !cs.hasLanguage())) {
td.addText(c.getDefinition()); td.addText(c.getDefinition());
} else if (getContext().getLang().equals("*")) { } else {
boolean sl = false; for (ConceptDefinitionDesignationComponent cd : c.getDesignation()) {
for (ConceptDefinitionDesignationComponent cd : c.getDesignation()) if (cd.getUse().is("http://terminology.hl7.org/CodeSystem/designation-usage", "definition") && cd.hasLanguage() && cd.getLanguage().equals(getContext().getLang())) {
if (cd.getUse().is("http://terminology.hl7.org/CodeSystem/designation-usage", "definition") && cd.hasLanguage() && !c.getDefinition().equalsIgnoreCase(cd.getValue())) td.addText(cd.getValue());
sl = true; }
td.addText((sl ? cs.getLanguage("en")+": " : "")+c.getDefinition());
for (ConceptDefinitionDesignationComponent cd : c.getDesignation()) {
if (cd.getUse().is("http://terminology.hl7.org/CodeSystem/designation-usage", "definition") && cd.hasLanguage() && !c.getDefinition().equalsIgnoreCase(cd.getValue())) {
td.br();
td.addText(cd.getLanguage()+": "+cd.getValue());
} }
} }
} else if (getContext().getLang().equals(cs.getLanguage()) || (getContext().getLang().equals("en") && !cs.hasLanguage())) { }
td.addText(c.getDefinition());
} else {
for (ConceptDefinitionDesignationComponent cd : c.getDesignation()) {
if (cd.getUse().is("http://terminology.hl7.org/CodeSystem/designation-usage", "definition") && cd.hasLanguage() && cd.getLanguage().equals(getContext().getLang())) {
td.addText(cd.getValue());
}
}
}
} }
if (deprecated) { if (deprecated) {
td = tr.td(); td = tr.td();
@ -427,7 +448,7 @@ public class CodeSystemRenderer extends TerminologyRenderer {
} }
List<ConceptDefinitionComponent> ocl = csNav.getOtherChildren(c); List<ConceptDefinitionComponent> ocl = csNav.getOtherChildren(c);
for (ConceptDefinitionComponent cc : csNav.getConcepts(c)) { for (ConceptDefinitionComponent cc : csNav.getConcepts(c)) {
hasExtensions = addDefineRowToTable(t, cc, level+1, hasHierarchy, hasDisplay, comment, version, deprecated, maps, system, cs, properties, csNav, langs) || hasExtensions; hasExtensions = addDefineRowToTable(t, cc, level+1, hasHierarchy, hasDisplay, hasDefinitions, comment, version, deprecated, maps, system, cs, properties, csNav, langs) || hasExtensions;
} }
for (ConceptDefinitionComponent cc : ocl) { for (ConceptDefinitionComponent cc : ocl) {
tr = t.tr(); tr = t.tr();