use of org.hl7.fhir.r5.utils.EOperationOutcome in project org.hl7.fhir.core by hapifhir.
the class ProfileUtilitiesTests method testCardinalityChange.
/**
* Change one cardinality.
*
* @param context2
* @
* @throws EOperationOutcome
*/
private void testCardinalityChange() throws EOperationOutcome, Exception {
StructureDefinition focus = new StructureDefinition();
StructureDefinition base = context.fetchResource(StructureDefinition.class, "http://hl7.org/fhir/StructureDefinition/Patient").copy();
focus.setUrl(Utilities.makeUuidUrn());
focus.setBaseDefinition(base.getUrl());
focus.setType(base.getType());
focus.setDerivation(TypeDerivationRule.CONSTRAINT);
ElementDefinition id = focus.getDifferential().addElement();
id.setPath("Patient.identifier");
id.setMin(1);
List<ValidationMessage> messages = new ArrayList<ValidationMessage>();
new ProfileUtilities(context, messages, null).generateSnapshot(base, focus, focus.getUrl(), "Simple Test");
boolean ok = base.getSnapshot().getElement().size() == focus.getSnapshot().getElement().size();
for (int i = 0; i < base.getSnapshot().getElement().size(); i++) {
if (ok) {
ElementDefinition b = base.getSnapshot().getElement().get(i);
ElementDefinition f = focus.getSnapshot().getElement().get(i);
if (!f.hasBase() || !b.getPath().equals(f.getBase().getPath()))
ok = false;
else {
f.setBase(null);
if (f.getPath().equals("Patient.identifier")) {
ok = f.getMin() == 1;
if (ok)
f.setMin(0);
}
ok = ok && Base.compareDeep(b, f, true);
}
}
}
if (!ok) {
compareXml(base, focus);
throw new FHIRException("Snap shot generation chenge cardinality test failed");
} else
System.out.println("Snap shot generation chenge cardinality test passed");
}
use of org.hl7.fhir.r5.utils.EOperationOutcome in project org.hl7.fhir.core by hapifhir.
the class ProfileUtilitiesTests method testSlicingExtension.
/**
* we're going to slice Patient.extension and refer to extension by profile
*
* implicit: whether to rely on implicit extension slicing
*/
private void testSlicingExtension(boolean implicit) throws EOperationOutcome, Exception {
StructureDefinition focus = new StructureDefinition();
StructureDefinition base = context.fetchResource(StructureDefinition.class, "http://hl7.org/fhir/StructureDefinition/Patient").copy();
focus.setUrl(Utilities.makeUuidUrn());
focus.setBaseDefinition(base.getUrl());
focus.setType(base.getType());
focus.setDerivation(TypeDerivationRule.CONSTRAINT);
// set the slice up
ElementDefinition id;
if (!implicit) {
id = focus.getDifferential().addElement();
id.setPath("Patient.extension");
id.getSlicing().setOrdered(false).setRules(SlicingRules.OPEN).addDiscriminator().setPath("url").setType(DiscriminatorType.VALUE);
id.setMax("3");
}
// first slice:
id = focus.getDifferential().addElement();
id.setPath("Patient.extension");
id.setSliceName("name1");
id.addType().setCode("Extension").setProfile("http://hl7.org/fhir/StructureDefinition/patient-birthTime");
id.setMin(1);
// second slice:
id = focus.getDifferential().addElement();
id.setPath("Patient.extension");
id.setSliceName("name2");
id.addType().setCode("Extension").setProfile("http://hl7.org/fhir/StructureDefinition/patient-mothersMaidenName");
List<ValidationMessage> messages = new ArrayList<ValidationMessage>();
ProfileUtilities pu = new ProfileUtilities(context, messages, null);
pu.generateSnapshot(base, focus, focus.getUrl(), "Simple Test");
// 2 different: extension slices
boolean ok = base.getSnapshot().getElement().size() == focus.getSnapshot().getElement().size() - 2;
for (int i = 0; i < base.getSnapshot().getElement().size(); i++) {
if (ok) {
ElementDefinition b = base.getSnapshot().getElement().get(i);
ElementDefinition f = focus.getSnapshot().getElement().get(i <= 7 ? i : i + 2);
if (!f.hasBase() || !b.getPath().equals(f.getBase().getPath()))
ok = false;
else {
f.setBase(null);
if (f.getPath().equals("Patient.extension")) {
ok = f.hasSlicing() && (implicit || f.getMax().equals("3"));
if (ok) {
f.setSlicing(null);
f.setMaxElement(b.getMaxElement());
}
}
if (// no compare that because the definitions get overwritten
!f.getPath().equals("Patient.extension"))
ok = Base.compareDeep(b, f, true);
}
}
}
// now, check that the slices we skipped are correct:
if (ok) {
ElementDefinition d1 = focus.getSnapshot().getElement().get(8);
ElementDefinition d2 = focus.getSnapshot().getElement().get(9);
ok = d1.hasType() && d1.getType().get(0).hasProfile() && d2.hasType() && d2.getType().get(0).hasProfile() && !Base.compareDeep(d1.getType(), d2.getType(), true) && d1.getMin() == 1 && d2.getMin() == 0 && d1.getMax().equals("1") && d2.getMax().equals("1");
if (ok) {
d1.getType().clear();
d2.getType().clear();
d1.setSliceName("x");
d2.setSliceName("x");
d1.setMin(0);
}
ok = Base.compareDeep(d1, d2, true);
// for throughness, we could check against extension too, but this is not done now.
}
if (!ok) {
compareXml(base, focus);
throw new FHIRException("Snap shot generation slicing extensions simple (" + (implicit ? "implicit" : "not implicit") + ") failed");
} else
System.out.println("Snap shot generation slicing extensions simple (" + (implicit ? "implicit" : "not implicit") + ") passed");
}
use of org.hl7.fhir.r5.utils.EOperationOutcome in project org.hl7.fhir.core by hapifhir.
the class ProfileUtilitiesTests method testSlicingSimple.
/**
* we're going to slice Patient.identifier
*/
private void testSlicingSimple() throws EOperationOutcome, Exception {
StructureDefinition focus = new StructureDefinition();
StructureDefinition base = context.fetchResource(StructureDefinition.class, "http://hl7.org/fhir/StructureDefinition/Patient").copy();
focus.setUrl(Utilities.makeUuidUrn());
focus.setBaseDefinition(base.getUrl());
focus.setType(base.getType());
focus.setDerivation(TypeDerivationRule.CONSTRAINT);
// set the slice up
ElementDefinition id = focus.getDifferential().addElement();
id.setPath("Patient.identifier");
id.getSlicing().setOrdered(false).setRules(SlicingRules.OPEN).addDiscriminator().setPath("use").setType(DiscriminatorType.VALUE);
// first slice:
id = focus.getDifferential().addElement();
id.setPath("Patient.identifier");
id.setSliceName("name1");
id = focus.getDifferential().addElement();
id.setPath("Patient.identifier.use");
id.setFixed(new CodeType("usual"));
// second slice:
id = focus.getDifferential().addElement();
id.setPath("Patient.identifier");
id.setSliceName("name2");
id = focus.getDifferential().addElement();
id.setPath("Patient.identifier.use");
id.setFixed(new CodeType("official"));
List<ValidationMessage> messages = new ArrayList<ValidationMessage>();
new ProfileUtilities(context, messages, null).generateSnapshot(base, focus, focus.getUrl(), "Simple Test");
// 18 different: identifier + 8 inner children * 2
boolean ok = base.getSnapshot().getElement().size() == focus.getSnapshot().getElement().size() - 18;
for (int i = 0; i < base.getSnapshot().getElement().size(); i++) {
if (ok) {
ElementDefinition b = base.getSnapshot().getElement().get(i);
ElementDefinition f = focus.getSnapshot().getElement().get(i <= 9 ? i : i + 18);
if (!f.hasBase() || !b.getPath().equals(f.getBase().getPath()))
ok = false;
else {
f.setBase(null);
if (f.getPath().equals("Patient.identifier")) {
ok = f.hasSlicing();
if (ok)
f.setSlicing(null);
}
ok = Base.compareDeep(b, f, true);
}
}
}
// now, check that the slices we skipped are correct:
for (int i = 10; i <= 18; i++) {
if (ok) {
ElementDefinition d1 = focus.getSnapshot().getElement().get(i);
ElementDefinition d2 = focus.getSnapshot().getElement().get(i + 9);
if (d1.getPath().equals("Patient.identifier.use")) {
ok = d1.hasFixed() && d2.hasFixed() && !Base.compareDeep(d1.getFixed(), d2.getFixed(), true);
if (ok) {
d1.setFixed(null);
d2.setFixed(null);
}
}
if (d1.getPath().equals("Patient.identifier")) {
ok = d1.hasSliceName() && d2.hasSliceName() && !Base.compareDeep(d1.getSliceNameElement(), d2.getSliceNameElement(), true);
if (ok) {
d1.setSliceName(null);
d2.setSliceName(null);
}
}
ok = Base.compareDeep(d1, d2, true);
}
}
if (!ok) {
compareXml(base, focus);
throw new FHIRException("Snap shot generation slicing failed");
} else
System.out.println("Snap shot generation slicing passed");
}
use of org.hl7.fhir.r5.utils.EOperationOutcome in project org.hl7.fhir.core by hapifhir.
the class ProfileUtilitiesTests method testSlicingTask8742.
private void testSlicingTask8742() throws EOperationOutcome, Exception {
StructureDefinition focus = new StructureDefinition();
StructureDefinition base = context.fetchResource(StructureDefinition.class, "http://hl7.org/fhir/StructureDefinition/Organization").copy();
focus.setUrl(Utilities.makeUuidUrn());
focus.setBaseDefinition(base.getUrl());
focus.setType(base.getType());
focus.setDerivation(TypeDerivationRule.CONSTRAINT);
ElementDefinition id = focus.getDifferential().addElement();
id.setPath("Organization.address");
id.setMin(1);
id.setMax("1");
id.setMustSupport(true);
id = focus.getDifferential().addElement();
id.setPath("Organization.address.extension");
id.setSliceName("USLabCountycodes");
id.getSlicing().setOrdered(false).setRules(SlicingRules.OPEN).addDiscriminator().setPath("url").setType(DiscriminatorType.VALUE);
id.setShort("County/Parish FIPS codes");
id.setDefinition("County/Parish FIPS codes.");
id.setRequirements("County/Parish Code SHALL use FIPS 6-4 ( INCITS 31:2009).");
id.setMin(0);
id.setMax("1");
id.addType().setCode("Extension").setProfile("http://hl7.org/fhir/StructureDefinition/us-core-county");
id.setMustSupport(true);
id.getBinding().setStrength(BindingStrength.REQUIRED).setDescription("FIPS codes for US counties and county equivalent entities.").setValueSet(new Reference().setReference("http://hl7.org/fhir/ValueSet/fips-county"));
List<ValidationMessage> messages = new ArrayList<ValidationMessage>();
new ProfileUtilities(context, messages, null).generateSnapshot(base, focus, focus.getUrl(), "Simple Test");
// 14 for address with one sliced extension
boolean ok = base.getSnapshot().getElement().size() == focus.getSnapshot().getElement().size() - 13;
if (!ok) {
compareXml(base, focus);
throw new FHIRException("Snap shot generation test 8742 failed");
} else
System.out.println("Snap shot generation test 8742 passed");
}
use of org.hl7.fhir.r5.utils.EOperationOutcome in project org.hl7.fhir.core by hapifhir.
the class NarrativeGeneratorTests method process.
private void process(String path) throws FileNotFoundException, IOException, XmlPullParserException, EOperationOutcome, FHIRException {
XmlParser p = new XmlParser();
DomainResource r = (DomainResource) p.parse(new FileInputStream(path));
gen.generate(r);
FileOutputStream s = new FileOutputStream(Utilities.path("[tmp]", "gen.xml"));
new XmlParser().compose(s, r, true);
s.close();
}
Aggregations