Work around issue with R5 path in extensions pack
This commit is contained in:
parent
1b6137967f
commit
76c96a53d6
|
@ -0,0 +1,69 @@
|
||||||
|
package org.hl7.fhir.r4b.utils;
|
||||||
|
|
||||||
|
import org.hl7.fhir.r4b.model.Base;
|
||||||
|
import org.hl7.fhir.r4b.model.DataType;
|
||||||
|
import org.hl7.fhir.r4b.model.Property;
|
||||||
|
import org.hl7.fhir.r4b.model.Resource;
|
||||||
|
import org.hl7.fhir.utilities.Utilities;
|
||||||
|
|
||||||
|
public class DataTypeVisitor {
|
||||||
|
|
||||||
|
public interface IDatatypeVisitor<T extends DataType> {
|
||||||
|
Class<T> classT();
|
||||||
|
boolean visit(String path, T node);
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean anyFalse;
|
||||||
|
private boolean anyTrue;
|
||||||
|
private int nodeCount;
|
||||||
|
private int selectedCount;
|
||||||
|
|
||||||
|
public <T extends DataType> void visit(Resource resource, IDatatypeVisitor<T> visitor) {
|
||||||
|
visitNode(resource.fhirType(), resource, visitor);
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
private <T extends DataType> void visitNode(String path, Base node, IDatatypeVisitor<T> visitor) {
|
||||||
|
nodeCount++;
|
||||||
|
if (node instanceof DataType && visitor.classT().isInstance(node)) {
|
||||||
|
selectedCount++;
|
||||||
|
boolean ok = visitor.visit(path, (T) node);
|
||||||
|
if (ok) {
|
||||||
|
anyTrue = true;
|
||||||
|
} else {
|
||||||
|
anyFalse = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (Property p : node.children()) {
|
||||||
|
if (p.isList()) {
|
||||||
|
int i = 0;
|
||||||
|
for (Base b : p.getValues()) {
|
||||||
|
visitNode(path+"."+p.getName()+"["+i+"]", b, visitor);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (Base b : p.getValues()) {
|
||||||
|
visitNode(path+"."+p.getName(), b, visitor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isAnyFalse() {
|
||||||
|
return anyFalse;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isAnyTrue() {
|
||||||
|
return anyTrue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getNodeCount() {
|
||||||
|
return nodeCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getSelectedCount() {
|
||||||
|
return selectedCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -68,6 +68,11 @@ public class Extension extends BaseExtension implements IBaseExtension<Extension
|
||||||
@Description(shortDefinition="Value of extension", formalDefinition="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list)." )
|
@Description(shortDefinition="Value of extension", formalDefinition="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list)." )
|
||||||
protected DataType value;
|
protected DataType value;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return url + "=" + value.toString();
|
||||||
|
}
|
||||||
|
|
||||||
private static final long serialVersionUID = 465890108L;
|
private static final long serialVersionUID = 465890108L;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -7159,6 +7159,12 @@ public class ImplementationGuide extends CanonicalResource {
|
||||||
@Description(shortDefinition="Location of the resource", formalDefinition="Where this resource is found." )
|
@Description(shortDefinition="Location of the resource", formalDefinition="Where this resource is found." )
|
||||||
protected Reference reference;
|
protected Reference reference;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "ImplementationGuideDefinitionResourceComponent [name=" + name + ", reference=" + reference
|
||||||
|
+ ", profile=" + profile + "]";
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Indicates the FHIR Version(s) this artifact is intended to apply to. If no versions are specified, the resource is assumed to apply to all the versions stated in ImplementationGuide.fhirVersion.
|
* Indicates the FHIR Version(s) this artifact is intended to apply to. If no versions are specified, the resource is assumed to apply to all the versions stated in ImplementationGuide.fhirVersion.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -146,8 +146,13 @@ public class DataRenderer extends Renderer implements CodeResolver {
|
||||||
String left = text.substring(0, text.indexOf("[[["));
|
String left = text.substring(0, text.indexOf("[[["));
|
||||||
String link = text.substring(text.indexOf("[[[")+3, text.indexOf("]]]"));
|
String link = text.substring(text.indexOf("[[[")+3, text.indexOf("]]]"));
|
||||||
String right = text.substring(text.indexOf("]]]")+3);
|
String right = text.substring(text.indexOf("]]]")+3);
|
||||||
|
String path = null;
|
||||||
String url = link;
|
String url = link;
|
||||||
String[] parts = link.split("\\#");
|
String[] parts = link.split("\\#");
|
||||||
|
if (parts[0].contains(".")) {
|
||||||
|
path = parts[0];
|
||||||
|
parts[0] = parts[0].substring(0, parts[0].indexOf("."));
|
||||||
|
}
|
||||||
StructureDefinition p = getContext().getWorker().fetchResource(StructureDefinition.class, parts[0]);
|
StructureDefinition p = getContext().getWorker().fetchResource(StructureDefinition.class, parts[0]);
|
||||||
if (p == null)
|
if (p == null)
|
||||||
p = getContext().getWorker().fetchTypeDefinition(parts[0]);
|
p = getContext().getWorker().fetchTypeDefinition(parts[0]);
|
||||||
|
@ -160,7 +165,7 @@ public class DataRenderer extends Renderer implements CodeResolver {
|
||||||
} else
|
} else
|
||||||
throw new DefinitionException("Unable to resolve markdown link "+link);
|
throw new DefinitionException("Unable to resolve markdown link "+link);
|
||||||
|
|
||||||
text = left+"["+link+"]("+url+")"+right;
|
text = left+"["+link+"]("+url+(path == null ? "" : "#"+path)+")"+right;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2. markdown
|
// 2. markdown
|
||||||
|
|
|
@ -0,0 +1,68 @@
|
||||||
|
package org.hl7.fhir.r5.utils;
|
||||||
|
|
||||||
|
import org.hl7.fhir.r5.model.Base;
|
||||||
|
import org.hl7.fhir.r5.model.DataType;
|
||||||
|
import org.hl7.fhir.r5.model.Property;
|
||||||
|
import org.hl7.fhir.r5.model.Resource;
|
||||||
|
|
||||||
|
public class DataTypeVisitor {
|
||||||
|
|
||||||
|
public interface IDatatypeVisitor<T extends DataType> {
|
||||||
|
Class<T> classT();
|
||||||
|
boolean visit(String path, T node);
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean anyFalse;
|
||||||
|
private boolean anyTrue;
|
||||||
|
private int nodeCount;
|
||||||
|
private int selectedCount;
|
||||||
|
|
||||||
|
public <T extends DataType> void visit(Resource resource, IDatatypeVisitor<T> visitor) {
|
||||||
|
visitNode(resource.fhirType(), resource, visitor);
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
private <T extends DataType> void visitNode(String path, Base node, IDatatypeVisitor<T> visitor) {
|
||||||
|
nodeCount++;
|
||||||
|
if (node instanceof DataType && visitor.classT().isInstance(node)) {
|
||||||
|
selectedCount++;
|
||||||
|
boolean ok = visitor.visit(path, (T) node);
|
||||||
|
if (ok) {
|
||||||
|
anyTrue = true;
|
||||||
|
} else {
|
||||||
|
anyFalse = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (Property p : node.children()) {
|
||||||
|
if (p.isList()) {
|
||||||
|
int i = 0;
|
||||||
|
for (Base b : p.getValues()) {
|
||||||
|
visitNode(path+"."+p.getName()+"["+i+"]", b, visitor);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (Base b : p.getValues()) {
|
||||||
|
visitNode(path+"."+p.getName(), b, visitor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isAnyFalse() {
|
||||||
|
return anyFalse;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isAnyTrue() {
|
||||||
|
return anyTrue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getNodeCount() {
|
||||||
|
return nodeCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getSelectedCount() {
|
||||||
|
return selectedCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue