Merge pull request #73 from lmckenzi/Conversion-issues

Fixed issues with version-conversion differentiating profile and targ…
This commit is contained in:
Grahame Grieve 2019-09-06 10:14:36 +10:00 committed by GitHub
commit 6dbca158f7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 63 additions and 40 deletions

View File

@ -28,6 +28,7 @@ public class VersionConvertorConstants {
public final static String MODIFIER_REASON_EXTENSION = "http://hl7.org/fhir/4.0/StructureDefinition/extension-ElementDefinition.isModifierReason";
public final static String MODIFIER_TAKEN = "http://hl7.org/fhir/4.0/StructureDefinition/extension-MedicationStatment.taken";
public final static String MODIFIER_REASON_LEGACY = "No Modifier Reason provideed in previous versions of FHIR";
public final static String PROFILE_EXTENSION = "http://hl7.org/fhir/4.0/StructureDefinition/extension-ElementDefinition.type.profile";
public static String refToVS(String url) {
if (url == null)

View File

@ -1421,17 +1421,15 @@ public class VersionConvertor_14_30 {
org.hl7.fhir.dstu3.model.ElementDefinition.TypeRefComponent tgt = new org.hl7.fhir.dstu3.model.ElementDefinition.TypeRefComponent();
copyElement(src, tgt);
tgt.setCode(src.getCode());
for (org.hl7.fhir.dstu2016may.model.UriType t : src.getProfile()) {
if (src.hasTarget()) {
// We don't have a good way to distinguish resources that have both 'profile' and 'targetProfile' when the type is reference, so the best we can do is by name.
String baseName = t.getValue().toLowerCase();
if (baseName.contains("reference") && !baseName.contains("documentreference"))
tgt.setProfile(t.getValueAsString());
else
tgt.setTargetProfile(t.getValueAsString());
}
for (org.hl7.fhir.dstu2016may.model.UriType u : src.getProfile()) {
if (src.getCode().equals("Reference"))
tgt.setTargetProfile(u.getValue());
else
tgt.setProfile(t.getValueAsString());
tgt.setProfile(u.getValue());
}
for (org.hl7.fhir.dstu2016may.model.Extension t : src.getExtensionsByUrl(VersionConvertorConstants.PROFILE_EXTENSION)) {
// We don't have a good way to distinguish resources that have both 'profile' and 'targetProfile' when the type is reference, so the best we can do is by name.
tgt.setProfile(t.getValue().toString());
}
for (org.hl7.fhir.dstu2016may.model.Enumeration<org.hl7.fhir.dstu2016may.model.ElementDefinition.AggregationMode> t : src.getAggregation())
tgt.addAggregation(convertAggregationMode(t.getValue()));
@ -1448,14 +1446,16 @@ public class VersionConvertor_14_30 {
if (src.hasTarget()) {
if (src.hasTargetProfile()) {
tgt.addProfile(src.getTargetProfile());
String baseName = src.getTargetProfile().toLowerCase();
if (baseName.contains("reference") && !baseName.contains("documentreference"))
throw new Error("2016May Target profile contains the word 'reference':" + src.getTargetProfile());
}
if (src.hasProfile()) {
tgt.addProfile(src.getProfile());
if (!src.getProfile().toLowerCase().contains("reference"))
throw new Error("2016May profile doesn't contain the word 'reference':" + src.getTargetProfile());
if (src.getCode().equals("Reference")) {
org.hl7.fhir.dstu2016may.model.Extension t = new org.hl7.fhir.dstu2016may.model.Extension(VersionConvertorConstants.PROFILE_EXTENSION);
t.setValue(new org.hl7.fhir.dstu2016may.model.StringType(src.getProfile()));
tgt.addExtension(t);
} else
tgt.addProfile(src.getProfile());
// if (!u.toString().toLowerCase().contains("reference"))
// throw new Error("2016May profile doesn't contain the word 'reference':" + u);
}
} else
tgt.addProfile(src.getProfile());

View File

@ -1506,12 +1506,14 @@ public class VersionConvertor_14_40 {
}
if (tgt.hasTarget()) {
for (org.hl7.fhir.dstu2016may.model.UriType u : src.getProfile()) {
// We don't have a good way to distinguish resources that have both 'profile' and 'targetProfile' when the type is reference, so the best we can do is by name.
String baseName = u.getValue().toLowerCase();
if (baseName.contains("reference") && !baseName.contains("documentreference"))
tgt.addProfile(u.getValue());
else
if (src.getCode().equals("Reference"))
tgt.addTargetProfile(u.getValue());
else
tgt.addProfile(u.getValue());
}
for (org.hl7.fhir.dstu2016may.model.Extension t : src.getExtensionsByUrl(VersionConvertorConstants.PROFILE_EXTENSION)) {
// We don't have a good way to distinguish resources that have both 'profile' and 'targetProfile' when the type is reference, so the best we can do is by name.
tgt.addProfile(t.getValue().toString());
}
} else {
for (org.hl7.fhir.dstu2016may.model.UriType u : src.getProfile())
@ -1541,9 +1543,14 @@ public class VersionConvertor_14_40 {
throw new Error("2016May Target profile contains the word 'reference':" + u);
}
for (org.hl7.fhir.r4.model.UriType u : src.getProfile()) {
tgt.addProfile(u.getValue());
if (!u.toString().toLowerCase().contains("reference"))
throw new Error("2016May profile doesn't contain the word 'reference':" + u);
if (src.getCode().equals("Reference")) {
org.hl7.fhir.dstu2016may.model.Extension t = new org.hl7.fhir.dstu2016may.model.Extension(VersionConvertorConstants.PROFILE_EXTENSION);
t.setValue(convertType(u));
tgt.addExtension(t);
} else
tgt.addProfile(u.getValue());
// if (!u.toString().toLowerCase().contains("reference"))
// throw new Error("2016May profile doesn't contain the word 'reference':" + u);
}
} else {
for (org.hl7.fhir.r4.model.UriType u : src.getProfile()) {

View File

@ -1507,11 +1507,14 @@ public class VersionConvertor_14_50 {
if (tgt.hasTarget()) {
for (org.hl7.fhir.dstu2016may.model.UriType u : src.getProfile()) {
// We don't have a good way to distinguish resources that have both 'profile' and 'targetProfile' when the type is reference, so the best we can do is by name.
String baseName = u.getValue().toLowerCase();
if (baseName.contains("reference") && !baseName.contains("documentreference"))
tgt.addProfile(u.getValue());
else
if (src.getCode().equals("Reference"))
tgt.addTargetProfile(u.getValue());
else
tgt.addProfile(u.getValue());
}
for (org.hl7.fhir.dstu2016may.model.Extension t : src.getExtensionsByUrl(VersionConvertorConstants.PROFILE_EXTENSION)) {
// We don't have a good way to distinguish resources that have both 'profile' and 'targetProfile' when the type is reference, so the best we can do is by name.
tgt.addProfile(t.getValue().toString());
}
} else {
for (org.hl7.fhir.dstu2016may.model.UriType u : src.getProfile())
@ -1534,16 +1537,18 @@ public class VersionConvertor_14_50 {
tgt.setCode(src.getCode());
list.add(tgt);
if (src.hasTarget()) {
for (org.hl7.fhir.r5.model.UriType u : src.getTargetProfile()) {
tgt.addProfile(u.getValue());
String baseName = u.getValue().toLowerCase();
if (baseName.contains("reference") && !baseName.contains("documentreference"))
throw new Error("2016May Target profile contains the word 'reference':" + u);
}
for (org.hl7.fhir.r5.model.UriType u : src.getProfile()) {
org.hl7.fhir.dstu2016may.model.Extension t = new org.hl7.fhir.dstu2016may.model.Extension(VersionConvertorConstants.PROFILE_EXTENSION);
t.setValue(convertType(u));
tgt.addExtension(t);
}
for (org.hl7.fhir.r5.model.UriType u : src.getTargetProfile()) {
if (!u.equals(src.getTargetProfile().get(0))) {
tgt = tgt.copy();
tgt.getProfile().clear();
list.add(tgt);
}
tgt.addProfile(u.getValue());
if (!u.toString().toLowerCase().contains("reference"))
throw new Error("2016May profile doesn't contain the word 'reference':" + u);
}
} else {
for (org.hl7.fhir.r5.model.UriType u : src.getProfile()) {

View File

@ -33,6 +33,7 @@ import org.hl7.fhir.dstu3.model.Parameters;
import org.hl7.fhir.dstu3.model.Parameters.ParametersParameterComponent;
import org.hl7.fhir.exceptions.FHIRException;
import org.hl7.fhir.r5.model.BooleanType;
import org.hl7.fhir.r5.model.CanonicalType;
import org.hl7.fhir.r5.model.Questionnaire;
import org.hl7.fhir.r5.model.CodeableConcept;
import org.hl7.fhir.r5.model.Enumeration;
@ -1736,8 +1737,15 @@ public class VersionConvertor_30_50 {
copyElement(src, tgt);
tgt.setCodeElement(convertUri(src.getCodeElement()));
}
if (src.hasProfile())
tgt.addProfile(src.getProfile());
if (src.hasProfile()) {
boolean found = false;
for (CanonicalType p: tgt.getProfile()) {
if (p.equals(src.getProfile()))
found = true;
}
if (!found)
tgt.addProfile(src.getProfile());
}
if (src.hasTargetProfile())
tgt.addTargetProfile(src.getTargetProfile());
for (org.hl7.fhir.dstu3.model.Enumeration<org.hl7.fhir.dstu3.model.ElementDefinition.AggregationMode> t : src.getAggregation()) {

View File

@ -285,9 +285,11 @@ public abstract class XmlParserBase extends ParserBase implements IParser {
}
protected void unknownContent(XmlPullParser xpp) throws FHIRFormatError {
protected void unknownContent(XmlPullParser xpp) throws FHIRFormatError, XmlPullParserException, IOException {
if (!isAllowUnknownContent())
throw new FHIRFormatError("Unknown Content "+xpp.getName()+" @ "+pathForLocation(xpp));
else if (xpp.getEventType()==XmlPullParser.START_TAG)
skipElementWithContent(xpp);
}
protected XhtmlNode parseXhtml(XmlPullParser xpp) throws XmlPullParserException, IOException, FHIRFormatError {

View File

@ -1511,7 +1511,7 @@ public class ProfileUtilities extends TranslatingUtilities {
j++;
if (j < markdown.length()) {
String url = markdown.substring(i+2, j);
if (!Utilities.isAbsoluteUrl(url)) {
if (!Utilities.isAbsoluteUrl(url) && !url.startsWith("..")) {
b.append("](");
b.append(webUrl);
i = i + 1;