fix problem creating CDA type discriminators

This commit is contained in:
Grahame Grieve 2023-11-14 12:00:29 +11:00
parent b898cfe59f
commit f2dc77272b
2 changed files with 32 additions and 7 deletions

View File

@ -34,6 +34,8 @@ package org.hl7.fhir.r5.model;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
@ -42,12 +44,21 @@ import org.hl7.fhir.exceptions.DefinitionException;
import org.hl7.fhir.r5.context.IWorkerContext; import org.hl7.fhir.r5.context.IWorkerContext;
import org.hl7.fhir.r5.model.ElementDefinition.ElementDefinitionBindingComponent; import org.hl7.fhir.r5.model.ElementDefinition.ElementDefinitionBindingComponent;
import org.hl7.fhir.r5.model.ExpressionNode.CollectionStatus; import org.hl7.fhir.r5.model.ExpressionNode.CollectionStatus;
import org.hl7.fhir.r5.model.TypeDetails.ProfiledTypeSorter;
import org.hl7.fhir.utilities.CommaSeparatedStringBuilder; import org.hl7.fhir.utilities.CommaSeparatedStringBuilder;
import org.hl7.fhir.utilities.Utilities; import org.hl7.fhir.utilities.Utilities;
public class TypeDetails { public class TypeDetails {
public class ProfiledTypeSorter implements Comparator<ProfiledType> {
@Override
public int compare(ProfiledType o1, ProfiledType o2) {
return o1.uri.compareTo(o2.uri);
}
}
public static final String FHIR_NS = "http://hl7.org/fhir/StructureDefinition/"; public static final String FHIR_NS = "http://hl7.org/fhir/StructureDefinition/";
public static final String FP_NS = "http://hl7.org/fhirpath/"; public static final String FP_NS = "http://hl7.org/fhirpath/";
public static final String FP_String = "http://hl7.org/fhirpath/System.String"; public static final String FP_String = "http://hl7.org/fhirpath/System.String";
@ -419,20 +430,30 @@ public class TypeDetails {
} }
return false; return false;
} }
public String describe() { public String describe() {
return getTypes().toString(); return Utilities.sorted(getTypes()).toString();
} }
public String describeMin() { public String describeMin() {
CommaSeparatedStringBuilder b = new CommaSeparatedStringBuilder(); CommaSeparatedStringBuilder b = new CommaSeparatedStringBuilder();
for (ProfiledType pt : types) for (ProfiledType pt : sortedTypes(types))
b.append(pt.describeMin()); b.append(pt.describeMin());
return b.toString(); return b.toString();
} }
private List<ProfiledType> sortedTypes(List<ProfiledType> types2) {
List<ProfiledType> list = new ArrayList<>();
Collections.sort(list, new ProfiledTypeSorter());
return list;
}
public String getType() { public String getType() {
for (ProfiledType pt : types) for (ProfiledType pt : types)
return pt.uri; return pt.uri;
return null; return null;
} }
@Override @Override
public String toString() { public String toString() {
return (collectionStatus == null ? collectionStatus.SINGLETON.toString() : collectionStatus.toString()) + getTypes().toString(); return (collectionStatus == null ? collectionStatus.SINGLETON.toString() : collectionStatus.toString()) + getTypes().toString();

View File

@ -4830,11 +4830,11 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
private String makeTypeForFHIRPath(String type) { private String makeTypeForFHIRPath(String type) {
if (Utilities.isAbsoluteUrl(type)) { if (Utilities.isAbsoluteUrl(type)) {
if (type.startsWith("http://hl7.org/fhir/StructureDefinition/")) { if (type.startsWith("http://hl7.org/fhir/StructureDefinition/")) {
return tail(type); return typeTail(type);
} else if (type.startsWith("http://hl7.org/cda/stds/core/StructureDefinition/")) { } else if (type.startsWith("http://hl7.org/cda/stds/core/StructureDefinition/")) {
return "CDA."+tail(type); return "CDA."+typeTail(type);
} else { } else {
return tail(type); // todo? return typeTail(type); // todo?
} }
} else { } else {
String ptype = type.substring(0, 1).toLowerCase() + type.substring(1); String ptype = type.substring(0, 1).toLowerCase() + type.substring(1);
@ -4846,6 +4846,10 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
} }
} }
private String typeTail(String type) {
return type.contains("/") ? type.substring(type.lastIndexOf("/")+1) : type;
}
private boolean isBaseDefinition(String url) { private boolean isBaseDefinition(String url) {
boolean b = url.startsWith("http://hl7.org/fhir/") && !url.substring(40).contains("/"); boolean b = url.startsWith("http://hl7.org/fhir/") && !url.substring(40).contains("/");
return b; return b;