fix renderers - don't make nonvalid URLs into html links + fix NPE +

This commit is contained in:
Grahame Grieve 2021-10-08 08:04:21 +11:00
parent d427295ee6
commit a75ac22c91
7 changed files with 27 additions and 6 deletions

View File

@ -634,7 +634,14 @@ public class Element extends Base {
@Override @Override
public String toString() { public String toString() {
return name+"="+fhirType() + "["+(children == null || hasValue() ? value : Integer.toString(children.size())+" children")+"]"; if (name.equals(fhirType()) && isResource()) {
return fhirType()+"/"+getIdBase() + "["+(children == null || hasValue() ? value : Integer.toString(children.size())+" children")+"]";
} else if (isResource()) {
return name+"="+fhirType()+"/"+getIdBase()+ "["+(children == null || hasValue() ? value : Integer.toString(children.size())+" children")+"]";
} else {
return name+"="+fhirType() + "["+(children == null || hasValue() ? value : Integer.toString(children.size())+" children")+"]";
}
} }
@Override @Override

View File

@ -62,6 +62,8 @@ public class Manager {
return "txt"; return "txt";
case VBAR: case VBAR:
return "hl7"; return "hl7";
case SHC:
return "shc";
} }
return null; return null;
} }

View File

@ -422,7 +422,7 @@ public class CodeSystemRenderer extends TerminologyRenderer {
if (first) first = false; else td.addText(", "); if (first) first = false; else td.addText(", ");
if (pcv.hasValueCoding()) { if (pcv.hasValueCoding()) {
td.addText(pcv.getValueCoding().getCode()); td.addText(pcv.getValueCoding().getCode());
} else if (pcv.hasValueStringType() && Utilities.isAbsoluteUrl(pcv.getValue().primitiveValue())) { } else if (pcv.hasValueStringType() && Utilities.isAbsoluteUrlLinkable(pcv.getValue().primitiveValue())) {
td.ah(pcv.getValue().primitiveValue()).tx(pcv.getValue().primitiveValue()); td.ah(pcv.getValue().primitiveValue()).tx(pcv.getValue().primitiveValue());
} else { } else {
td.addText(pcv.getValue().primitiveValue()); td.addText(pcv.getValue().primitiveValue());

View File

@ -450,8 +450,10 @@ public class ProfileDrivenRenderer extends ResourceRenderer {
x.addText(((Enumeration<?>) e).getValue().toString()); // todo: look up a display name if there is one x.addText(((Enumeration<?>) e).getValue().toString()); // todo: look up a display name if there is one
return true; return true;
} else if (e instanceof BooleanType) { } else if (e instanceof BooleanType) {
if (((BooleanType) e).getValue()) { if (((BooleanType) e).hasValue()) {
x.addText(name); x.addText(name);
x.addText(": ");
x.addText(((BooleanType) e).getValueAsString());
return true; return true;
} }
} else if (e instanceof CodeableReference) { } else if (e instanceof CodeableReference) {

View File

@ -1013,7 +1013,7 @@ public class QuestionnaireRenderer extends TerminologyRenderer {
private void defn(XhtmlNode tbl, String name, String url, Resource res) throws UnsupportedEncodingException, IOException { private void defn(XhtmlNode tbl, String name, String url, Resource res) throws UnsupportedEncodingException, IOException {
if (res != null && res.hasUserData("path")) { if (res != null && res.hasUserData("path")) {
defn(tbl, "Definition", RendererFactory.factory(res, context).display(res), res.getUserString("path")); defn(tbl, "Definition", RendererFactory.factory(res, context).display(res), res.getUserString("path"));
} else if (Utilities.isAbsoluteUrl(url)) { } else if (Utilities.isAbsoluteUrlLinkable(url)) {
defn(tbl, "Definition", url, url); defn(tbl, "Definition", url, url);
} { } {
defn(tbl, "Definition", url); defn(tbl, "Definition", url);

View File

@ -1098,7 +1098,17 @@ public class Utilities {
if (ref != null && ref.contains(":")) { if (ref != null && ref.contains(":")) {
String scheme = ref.substring(0, ref.indexOf(":")); String scheme = ref.substring(0, ref.indexOf(":"));
String details = ref.substring(ref.indexOf(":")+1); String details = ref.substring(ref.indexOf(":")+1);
return (existsInList(scheme, "http", "https", "urn") || isToken(scheme) || Utilities.startsWithInList(ref, "urn:iso:", "urn:iso-iec:", "urn:iso-cie:", "urn:iso-astm:", "urn:iso-ieee:", "urn:iec:")) return (existsInList(scheme, "http", "https", "urn") || (isToken(scheme) && scheme.equals(scheme.toLowerCase())) || Utilities.startsWithInList(ref, "urn:iso:", "urn:iso-iec:", "urn:iso-cie:", "urn:iso-astm:", "urn:iso-ieee:", "urn:iec:"))
&& details != null && details.length() > 0 && !details.contains(" "); // rfc5141
}
return false;
}
public static boolean isAbsoluteUrlLinkable(String ref) {
if (ref != null && ref.contains(":")) {
String scheme = ref.substring(0, ref.indexOf(":"));
String details = ref.substring(ref.indexOf(":")+1);
return (existsInList(scheme, "http", "https", "ftp"))
&& details != null && details.length() > 0 && !details.contains(" "); // rfc5141 && details != null && details.length() > 0 && !details.contains(" "); // rfc5141
} }
return false; return false;

View File

@ -135,7 +135,7 @@ public class VersionUtilities {
} }
public static boolean isR5Ver(String ver) { public static boolean isR5Ver(String ver) {
return ver != null && ver.startsWith(CURRENT_VERSION); return ver != null && (ver.startsWith(CURRENT_VERSION) || ver.equals("current"));
} }
public static boolean isR4BVer(String ver) { public static boolean isR4BVer(String ver) {