Add support for SubscriptionTopic in R4 IGs

This commit is contained in:
Grahame Grieve 2023-05-24 16:57:09 +10:00
parent e724c9d58b
commit 0ec2dfab78
10 changed files with 864 additions and 29 deletions

View File

@ -59,6 +59,8 @@ public class Resource40_50 {
return Requirements40_50.convertRequirements((org.hl7.fhir.r4.model.Basic) src);
} else if (basic.getCode().hasCoding("http://hl7.org/fhir/fhir-types", "TestPlan")) {
return TestPlan40_50.convertTestPlan((org.hl7.fhir.r4.model.Basic) src);
} else if (basic.getCode().hasCoding("http://hl7.org/fhir/fhir-types", "SubscriptionTopic")) {
return SubscriptionTopic40_50.convertSubscriptionTopic((org.hl7.fhir.r4.model.Basic) src);
} else {
return Basic40_50.convertBasic((org.hl7.fhir.r4.model.Basic) src);
}
@ -493,6 +495,8 @@ public class Resource40_50 {
return StructureDefinition40_50.convertStructureDefinition((org.hl7.fhir.r5.model.StructureDefinition) src);
if (src instanceof org.hl7.fhir.r5.model.StructureMap)
return StructureMap40_50.convertStructureMap((org.hl7.fhir.r5.model.StructureMap) src);
if (src instanceof org.hl7.fhir.r5.model.SubscriptionTopic)
return SubscriptionTopic40_50.convertSubscriptionTopic((org.hl7.fhir.r5.model.SubscriptionTopic) src);
if (src instanceof org.hl7.fhir.r5.model.Substance)
return Substance40_50.convertSubstance((org.hl7.fhir.r5.model.Substance) src);
if (src instanceof org.hl7.fhir.r5.model.SubstanceNucleicAcid)

View File

@ -0,0 +1,476 @@
package org.hl7.fhir.convertors.conv40_50.resources40_50;
import org.hl7.fhir.convertors.context.ConversionContext40_50;
import org.hl7.fhir.convertors.conv40_50.datatypes40_50.general40_50.CodeableConcept40_50;
import org.hl7.fhir.convertors.conv40_50.datatypes40_50.general40_50.Identifier40_50;
import org.hl7.fhir.convertors.conv40_50.datatypes40_50.metadata40_50.ContactDetail40_50;
import org.hl7.fhir.convertors.conv40_50.datatypes40_50.metadata40_50.UsageContext40_50;
import org.hl7.fhir.convertors.conv40_50.datatypes40_50.primitive40_50.Boolean40_50;
import org.hl7.fhir.convertors.conv40_50.datatypes40_50.primitive40_50.Canonical40_50;
import org.hl7.fhir.convertors.conv40_50.datatypes40_50.primitive40_50.DateTime40_50;
import org.hl7.fhir.convertors.conv40_50.datatypes40_50.primitive40_50.MarkDown40_50;
import org.hl7.fhir.convertors.conv40_50.datatypes40_50.primitive40_50.String40_50;
import org.hl7.fhir.convertors.conv40_50.datatypes40_50.primitive40_50.Uri40_50;
import org.hl7.fhir.exceptions.FHIRException;
import org.hl7.fhir.r4.model.BooleanType;
import org.hl7.fhir.r4.model.Extension;
import org.hl7.fhir.r4.model.MarkdownType;
import org.hl7.fhir.r4.model.UriType;
import org.hl7.fhir.r5.model.CanonicalType;
import org.hl7.fhir.r5.model.CodeableConcept;
import org.hl7.fhir.r5.model.ContactDetail;
import org.hl7.fhir.r5.model.Enumeration;
import org.hl7.fhir.r5.model.Enumerations.PublicationStatus;
import org.hl7.fhir.r5.model.Enumerations.SearchComparator;
import org.hl7.fhir.r5.model.Enumerations.SearchModifierCode;
import org.hl7.fhir.r5.model.StringType;
import org.hl7.fhir.r5.model.SubscriptionTopic.InteractionTrigger;
import org.hl7.fhir.r5.model.SubscriptionTopic.SubscriptionTopicCanFilterByComponent;
import org.hl7.fhir.r5.model.SubscriptionTopic.SubscriptionTopicEventTriggerComponent;
import org.hl7.fhir.r5.model.SubscriptionTopic.SubscriptionTopicNotificationShapeComponent;
import org.hl7.fhir.r5.model.SubscriptionTopic.SubscriptionTopicResourceTriggerComponent;
import org.hl7.fhir.r5.model.SubscriptionTopic.SubscriptionTopicResourceTriggerQueryCriteriaComponent;
import org.hl7.fhir.r5.model.UsageContext;
/*
Copyright (c) 2011+, HL7, Inc.
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of HL7 nor the names of its contributors may be used to
endorse or promote products derived from this software without specific
prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
*/
// Generated on Sun, Feb 24, 2019 11:37+1100 for FHIR v4.0.0
public class SubscriptionTopic40_50 {
public static final String URL_EXTENSION_URL = "http://hl7.org/fhir/5.0/StructureDefinition/extension-SubscriptionTopic.url";
public static final String VERSION_EXTENSION_URL = "http://hl7.org/fhir/5.0/StructureDefinition/extension-SubscriptionTopic.version";
public static final String NAME_EXTENSION_URL = "http://hl7.org/fhir/5.0/StructureDefinition/extension-SubscriptionTopic.name";
public static final String TITLE_EXTENSION_URL = "http://hl7.org/fhir/5.0/StructureDefinition/extension-SubscriptionTopic.title";
public static final String STATUS_EXTENSION_URL = "http://hl7.org/fhir/5.0/StructureDefinition/extension-SubscriptionTopic.status";
public static final String EXPERIMENTAL_EXTENSION_URL = "http://hl7.org/fhir/5.0/StructureDefinition/extension-SubscriptionTopic.experimental";
public static final String DATE_EXTENSION_URL = "http://hl7.org/fhir/5.0/StructureDefinition/extension-SubscriptionTopic.date";
public static final String PUBLISHER_EXTENSION_URL = "http://hl7.org/fhir/5.0/StructureDefinition/extension-SubscriptionTopic.publisher";
public static final String CONTACT_EXTENSION_URL = "http://hl7.org/fhir/5.0/StructureDefinition/extension-SubscriptionTopic.contact";
public static final String DESCRIPTION_EXTENSION_URL = "http://hl7.org/fhir/5.0/StructureDefinition/extension-SubscriptionTopic.description";
public static final String USE_CONTEXT_EXTENSION_URL = "http://hl7.org/fhir/5.0/StructureDefinition/extension-SubscriptionTopic.useContext";
public static final String JURISDICTION_EXTENSION_URL = "http://hl7.org/fhir/5.0/StructureDefinition/extension-SubscriptionTopic.jurisdiction";
public static final String PURPOSE_EXTENSION_URL = "http://hl7.org/fhir/5.0/StructureDefinition/extension-SubscriptionTopic.purpose";
public static final String COPYRIGHT_EXTENSION_URL = "http://hl7.org/fhir/5.0/StructureDefinition/extension-SubscriptionTopic.copyright";
public static final String COPYRIGHT_LABEL_EXTENSION_URL = "http://hl7.org/fhir/5.0/StructureDefinition/extension-SubscriptionTopic.copyrightLabel";
public static final String APPROVAL_DATE_EXTENSION_URL = "http://hl7.org/fhir/5.0/StructureDefinition/extension-SubscriptionTopic.approvalDate";
public static final String LAST_REVIEW_EXTENSION_URL = "http://hl7.org/fhir/5.0/StructureDefinition/extension-SubscriptionTopic.lastReviewDate";
public static final String EFFECTIVE_PERIOD_EXTENSION_URL = "http://hl7.org/fhir/5.0/StructureDefinition/extension-SubscriptionTopic.effectivePeriod";
public static final String DERIVED_FROM_EXTENSION_URL = "http://hl7.org/fhir/5.0/StructureDefinition/extension-SubscriptionTopic.derivedFrom";
public static final String RESOURCE_TRIGGER_EXTENSION_URL = "http://hl7.org/fhir/5.0/StructureDefinition/extension-SubscriptionTopic.resourceTrigger";
public static final String RESOURCE_TRIGGER_DESCRIPTION_EXTENSION_URL = /*http://hl7.org/fhir/5.0/StructureDefinition/extension-SubscriptionTopic.resourceTrigger.*/"description";
public static final String RESOURCE_TRIGGER_RESOURCE_EXTENSION_URL = /*http://hl7.org/fhir/5.0/StructureDefinition/extension-SubscriptionTopic.resourceTrigger.*/"resource";
public static final String RESOURCE_TRIGGER_SUPPORTED_INTERACTION_EXTENSION_URL = /*http://hl7.org/fhir/5.0/StructureDefinition/extension-SubscriptionTopic.resourceTrigger.*/"supportedInteraction";
public static final String RESOURCE_TRIGGER_QUERY_CRITERIA_EXTENSION_URL = /*http://hl7.org/fhir/5.0/StructureDefinition/extension-SubscriptionTopic.resourceTrigger.*/"queryCriteria";
public static final String RESOURCE_TRIGGER_QUERY_CRITERIA_PREVIOUS_EXTENSION_URL = /*http://hl7.org/fhir/5.0/StructureDefinition/extension-SubscriptionTopic.resourceTrigger.queryCriteria.*/"previous";
public static final String RESOURCE_TRIGGER_QUERY_CRITERIA_RESULT_FOR_CREATE_EXTENSION_URL = /*http://hl7.org/fhir/5.0/StructureDefinition/extension-SubscriptionTopic.resourceTrigger.queryCriteria.*/"resultForCreate";
public static final String RESOURCE_TRIGGER_QUERY_CRITERIA_CURRENT_EXTENSION_URL = /*http://hl7.org/fhir/5.0/StructureDefinition/extension-SubscriptionTopic.resourceTrigger.queryCriteria.*/"current";
public static final String RESOURCE_TRIGGER_QUERY_CRITERIA_RESULT_FOR_DELETE_EXTENSION_URL = /*http://hl7.org/fhir/5.0/StructureDefinition/extension-SubscriptionTopic.resourceTrigger.queryCriteria.*/"resultForDelete";
public static final String RESOURCE_TRIGGER_QUERY_CRITERIA_REQUIRE_BOTH_EXTENSION_URL = /*http://hl7.org/fhir/5.0/StructureDefinition/extension-SubscriptionTopic.resourceTrigger.queryCriteria.*/"requireBoth";
public static final String RESOURCE_TRIGGER_FHIRPATH_CRITERIA_EXTENSION_URL = /*http://hl7.org/fhir/5.0/StructureDefinition/extension-SubscriptionTopic.resourceTrigger.*/"fhirPathCriteria";
public static final String EVENT_TRIGGER_EXTENSION_URL = "http://hl7.org/fhir/5.0/StructureDefinition/extension-SubscriptionTopic.eventTrigger";
public static final String EVENT_TRIGGER_DESCRIPTION_EXTENSION_URL = /*"http://hl7.org/fhir/5.0/StructureDefinition/extension-SubscriptionTopic.eventTrigger.*/"description";
public static final String EVENT_TRIGGER_EVENT_EXTENSION_URL = /*"http://hl7.org/fhir/5.0/StructureDefinition/extension-SubscriptionTopic.eventTrigger.*/"event";
public static final String EVENT_TRIGGER_RESOURCE_EXTENSION_URL = /*"http://hl7.org/fhir/5.0/StructureDefinition/extension-SubscriptionTopic.eventTrigger.*/"resource";
public static final String CAN_FILTER_BY_EXTENSION_URL = "http://hl7.org/fhir/5.0/StructureDefinition/extension-SubscriptionTopic.canFilterBy";
public static final String CAN_FILTER_BY_DESCRIPTION_EXTENSION_URL = /*http://hl7.org/fhir/5.0/StructureDefinition/extension-SubscriptionTopic.canFilterBy.*/"description";
public static final String CAN_FILTER_BY_RESOURCE_EXTENSION_URL = /*http://hl7.org/fhir/5.0/StructureDefinition/extension-SubscriptionTopic.canFilterBy.*/"resource";
public static final String CAN_FILTER_BY_FILTER_PARMETER_EXTENSION_URL = /*http://hl7.org/fhir/5.0/StructureDefinition/extension-SubscriptionTopic.canFilterBy.*/"filterParameter";
public static final String CAN_FILTER_BY_FILTER_DEFINITION_EXTENSION_URL = /*http://hl7.org/fhir/5.0/StructureDefinition/extension-SubscriptionTopic.canFilterBy.*/"filterDefinition";
public static final String CAN_FILTER_BY_COMPARATOR_EXTENSION_URL = /*http://hl7.org/fhir/5.0/StructureDefinition/extension-SubscriptionTopic.canFilterBy.*/"comparator";
public static final String CAN_FILTER_BY_MODIFIER_EXTENSION_URL = /*http://hl7.org/fhir/5.0/StructureDefinition/extension-SubscriptionTopic.canFilterBy.*/"modifier";
public static final String NOTIFICATION_SHAPE_EXTENSION_URL = "http://hl7.org/fhir/5.0/StructureDefinition/extension-SubscriptionTopic.notificationShape";
public static final String NOTIFICATION_SHAPE_RESOURCE_EXTENSION_URL = /*http://hl7.org/fhir/5.0/StructureDefinition/extension-SubscriptionTopic.notificationShape.*/"resource";
public static final String NOTIFICATION_SHAPE_INCLUDE_EXTENSION_URL = /*http://hl7.org/fhir/5.0/StructureDefinition/extension-SubscriptionTopic.notificationShape.*/"include";
public static final String NOTIFICATION_SHAPE_REV_INCLUDE_EXTENSION_URL = /*http://hl7.org/fhir/5.0/StructureDefinition/extension-SubscriptionTopic.notificationShape.*/"revInclude";
private static final String[] IGNORED_EXTENSION_URLS = new String[]{
URL_EXTENSION_URL,
VERSION_EXTENSION_URL,
NAME_EXTENSION_URL,
TITLE_EXTENSION_URL,
STATUS_EXTENSION_URL,
EXPERIMENTAL_EXTENSION_URL,
DATE_EXTENSION_URL,
PUBLISHER_EXTENSION_URL,
CONTACT_EXTENSION_URL,
DESCRIPTION_EXTENSION_URL,
USE_CONTEXT_EXTENSION_URL,
JURISDICTION_EXTENSION_URL,
PURPOSE_EXTENSION_URL,
COPYRIGHT_EXTENSION_URL,
COPYRIGHT_LABEL_EXTENSION_URL,
RESOURCE_TRIGGER_EXTENSION_URL,
EVENT_TRIGGER_EXTENSION_URL,
CAN_FILTER_BY_EXTENSION_URL,
NOTIFICATION_SHAPE_EXTENSION_URL
};
public static org.hl7.fhir.r5.model.SubscriptionTopic convertSubscriptionTopic(org.hl7.fhir.r4.model.Basic src) throws FHIRException {
if (src == null)
return null;
if (!src.getCode().hasCoding("http://hl7.org/fhir/fhir-types", "SubscriptionTopic")) {
throw new FHIRException("Error in logic: this basic resource is not an SubscriptionTopic");
}
org.hl7.fhir.r5.model.SubscriptionTopic tgt = new org.hl7.fhir.r5.model.SubscriptionTopic();
ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyDomainResource(src, tgt, IGNORED_EXTENSION_URLS);
for (org.hl7.fhir.r4.model.Identifier t : src.getIdentifier())
tgt.addIdentifier(Identifier40_50.convertIdentifier(t));
if (src.hasExtension(URL_EXTENSION_URL)) {
tgt.setUrlElement(Uri40_50.convertUri((org.hl7.fhir.r4.model.UriType) src.getExtensionByUrl(URL_EXTENSION_URL).getValue()));
}
if (src.hasExtension(VERSION_EXTENSION_URL)) {
tgt.setVersionElement(String40_50.convertString((org.hl7.fhir.r4.model.StringType) src.getExtensionByUrl(VERSION_EXTENSION_URL).getValue()));
}
if (src.hasExtension(NAME_EXTENSION_URL)) {
tgt.setNameElement(String40_50.convertString((org.hl7.fhir.r4.model.StringType) src.getExtensionByUrl(NAME_EXTENSION_URL).getValue()));
}
if (src.hasExtension(TITLE_EXTENSION_URL)) {
tgt.setTitleElement(String40_50.convertString((org.hl7.fhir.r4.model.StringType) src.getExtensionByUrl(TITLE_EXTENSION_URL).getValue()));
}
if (src.hasExtension(STATUS_EXTENSION_URL)) {
tgt.setStatus(PublicationStatus.fromCode(src.getExtensionByUrl(STATUS_EXTENSION_URL).getValue().primitiveValue()));
}
if (src.hasExtension(EXPERIMENTAL_EXTENSION_URL)) {
tgt.setExperimentalElement(Boolean40_50.convertBoolean((org.hl7.fhir.r4.model.BooleanType) src.getExtensionByUrl(EXPERIMENTAL_EXTENSION_URL).getValue()));
}
if (src.hasExtension(DATE_EXTENSION_URL)) {
tgt.setDateElement(DateTime40_50.convertDateTime((org.hl7.fhir.r4.model.DateTimeType) src.getExtensionByUrl(DATE_EXTENSION_URL).getValue()));
}
if (src.hasExtension(PUBLISHER_EXTENSION_URL)) {
tgt.setPublisherElement(String40_50.convertString((org.hl7.fhir.r4.model.StringType) src.getExtensionByUrl(PUBLISHER_EXTENSION_URL).getValue()));
}
for (org.hl7.fhir.r4.model.Extension ext : src.getExtensionsByUrl(CONTACT_EXTENSION_URL)) {
tgt.addContact(ContactDetail40_50.convertContactDetail((org.hl7.fhir.r4.model.ContactDetail) ext.getValue()));
}
if (src.hasExtension(DESCRIPTION_EXTENSION_URL)) {
tgt.setDescriptionElement(MarkDown40_50.convertMarkdown((org.hl7.fhir.r4.model.MarkdownType) src.getExtensionByUrl(DESCRIPTION_EXTENSION_URL).getValue()));
}
for (org.hl7.fhir.r4.model.Extension ext : src.getExtensionsByUrl(USE_CONTEXT_EXTENSION_URL)) {
tgt.addUseContext(UsageContext40_50.convertUsageContext((org.hl7.fhir.r4.model.UsageContext) ext.getValue()));
}
for (org.hl7.fhir.r4.model.Extension ext : src.getExtensionsByUrl(JURISDICTION_EXTENSION_URL)) {
tgt.addJurisdiction(CodeableConcept40_50.convertCodeableConcept((org.hl7.fhir.r4.model.CodeableConcept) ext.getValue()));
}
if (src.hasExtension(PURPOSE_EXTENSION_URL)) {
tgt.setPurposeElement(MarkDown40_50.convertMarkdown((org.hl7.fhir.r4.model.MarkdownType) src.getExtensionByUrl(PURPOSE_EXTENSION_URL).getValue()));
}
if (src.hasExtension(COPYRIGHT_EXTENSION_URL)) {
tgt.setCopyrightElement(MarkDown40_50.convertMarkdown((org.hl7.fhir.r4.model.MarkdownType) src.getExtensionByUrl(COPYRIGHT_EXTENSION_URL).getValue()));
}
if (src.hasExtension(COPYRIGHT_LABEL_EXTENSION_URL)) {
tgt.setCopyrightLabelElement(String40_50.convertString((org.hl7.fhir.r4.model.StringType) src.getExtensionByUrl(COPYRIGHT_LABEL_EXTENSION_URL).getValue()));
}
for (org.hl7.fhir.r4.model.Extension ext : src.getExtensionsByUrl(DERIVED_FROM_EXTENSION_URL)) {
tgt.getDerivedFrom().add(Canonical40_50.convertCanonical((org.hl7.fhir.r4.model.CanonicalType) ext.getValue()));
}
for (org.hl7.fhir.r4.model.Extension ext : src.getExtensionsByUrl(RESOURCE_TRIGGER_EXTENSION_URL)) {
convertSubscriptionResourceTrigger(ext, tgt.addResourceTrigger());
}
for (org.hl7.fhir.r4.model.Extension ext : src.getExtensionsByUrl(EVENT_TRIGGER_EXTENSION_URL)) {
convertSubscriptionEventTrigger(ext, tgt.addEventTrigger());
}
for (org.hl7.fhir.r4.model.Extension ext : src.getExtensionsByUrl(CAN_FILTER_BY_EXTENSION_URL)) {
convertSubscriptionCanFilterBy(ext, tgt.addCanFilterBy());
}
for (org.hl7.fhir.r4.model.Extension ext : src.getExtensionsByUrl(NOTIFICATION_SHAPE_EXTENSION_URL)) {
convertSubscriptionNotificationShape(ext, tgt.addNotificationShape());
}
return tgt;
}
public static org.hl7.fhir.r4.model.Basic convertSubscriptionTopic(org.hl7.fhir.r5.model.SubscriptionTopic src) throws FHIRException {
if (src == null)
return null;
org.hl7.fhir.r4.model.Basic tgt = new org.hl7.fhir.r4.model.Basic();
ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyDomainResource(src, tgt);
tgt.getCode().getCodingFirstRep().setSystem("http://hl7.org/fhir/fhir-types").setCode("SubscriptionTopic"); // note use of R5 type system
for (org.hl7.fhir.r5.model.Identifier t : src.getIdentifier())
tgt.addIdentifier(Identifier40_50.convertIdentifier(t));
if (src.hasUrl()) {
tgt.addExtension(URL_EXTENSION_URL, Uri40_50.convertUri(src.getUrlElement()));
}
if (src.hasVersion()) {
tgt.addExtension(VERSION_EXTENSION_URL, String40_50.convertString(src.getVersionElement()));
}
if (src.hasName()) {
tgt.addExtension(NAME_EXTENSION_URL, String40_50.convertString(src.getNameElement()));
}
if (src.hasTitle()) {
tgt.addExtension(TITLE_EXTENSION_URL, String40_50.convertString(src.getTitleElement()));
}
if (src.hasStatus()) {
tgt.addExtension(STATUS_EXTENSION_URL, new org.hl7.fhir.r4.model.CodeType(src.getStatus().toCode()));
}
if (src.hasExperimental()) {
tgt.addExtension(EXPERIMENTAL_EXTENSION_URL, Boolean40_50.convertBoolean(src.getExperimentalElement()));
}
if (src.hasDate()) {
tgt.addExtension(DATE_EXTENSION_URL, DateTime40_50.convertDateTime(src.getDateElement()));
}
if (src.hasPublisher()) {
tgt.addExtension(PUBLISHER_EXTENSION_URL, String40_50.convertString(src.getPublisherElement()));
}
for (ContactDetail cd : src.getContact()) {
tgt.addExtension(CONTACT_EXTENSION_URL, ContactDetail40_50.convertContactDetail(cd));
}
if (src.hasDescription()) {
tgt.addExtension(DESCRIPTION_EXTENSION_URL, MarkDown40_50.convertMarkdown(src.getDescriptionElement()));
}
for (UsageContext cd : src.getUseContext()) {
tgt.addExtension(USE_CONTEXT_EXTENSION_URL, UsageContext40_50.convertUsageContext(cd));
}
for (CodeableConcept cd : src.getJurisdiction()) {
tgt.addExtension(JURISDICTION_EXTENSION_URL, CodeableConcept40_50.convertCodeableConcept(cd));
}
if (src.hasPurpose()) {
tgt.addExtension(PURPOSE_EXTENSION_URL, MarkDown40_50.convertMarkdown(src.getPurposeElement()));
}
if (src.hasCopyright()) {
tgt.addExtension(COPYRIGHT_EXTENSION_URL, MarkDown40_50.convertMarkdown(src.getCopyrightElement()));
}
if (src.hasCopyrightLabel()) {
tgt.addExtension(COPYRIGHT_LABEL_EXTENSION_URL, String40_50.convertString(src.getCopyrightLabelElement()));
}
for (CanonicalType ref : src.getDerivedFrom()) {
tgt.addExtension(DERIVED_FROM_EXTENSION_URL, Canonical40_50.convertCanonical(ref));
}
for (SubscriptionTopicResourceTriggerComponent ref : src.getResourceTrigger()) {
org.hl7.fhir.r4.model.Extension tgte = new org.hl7.fhir.r4.model.Extension(RESOURCE_TRIGGER_EXTENSION_URL);
tgt.addExtension(tgte);
convertSubscriptionResourceTrigger(ref, tgte);
}
for (SubscriptionTopicEventTriggerComponent ref : src.getEventTrigger()) {
org.hl7.fhir.r4.model.Extension tgte = new org.hl7.fhir.r4.model.Extension(EVENT_TRIGGER_EXTENSION_URL);
tgt.addExtension(tgte);
convertSubscriptionEventTrigger(ref, tgte);
}
for (SubscriptionTopicCanFilterByComponent ref : src.getCanFilterBy()) {
org.hl7.fhir.r4.model.Extension tgte = new org.hl7.fhir.r4.model.Extension(CAN_FILTER_BY_EXTENSION_URL);
tgt.addExtension(tgte);
convertSubscriptionCanFilterBy(ref, tgte);
}
for (SubscriptionTopicNotificationShapeComponent ref : src.getNotificationShape()) {
org.hl7.fhir.r4.model.Extension tgte = new org.hl7.fhir.r4.model.Extension(NOTIFICATION_SHAPE_EXTENSION_URL);
tgt.addExtension(tgte);
convertSubscriptionNotificationShape(ref, tgte);
}
return tgt;
}
private static void convertSubscriptionResourceTrigger(SubscriptionTopicResourceTriggerComponent src, Extension tgt) {
ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyElement(src, tgt);
if (src.hasDescription()) {
tgt.addExtension(RESOURCE_TRIGGER_DESCRIPTION_EXTENSION_URL, MarkDown40_50.convertMarkdown(src.getDescriptionElement()));
}
if (src.hasResource()) {
tgt.addExtension(RESOURCE_TRIGGER_RESOURCE_EXTENSION_URL, Uri40_50.convertUri(src.getResourceElement()));
}
for (Enumeration<InteractionTrigger> t : src.getSupportedInteraction()) {
tgt.addExtension(RESOURCE_TRIGGER_SUPPORTED_INTERACTION_EXTENSION_URL, new org.hl7.fhir.r4.model.CodeType(t.getCode()));
}
if (src.hasQueryCriteria()) {
Extension tgtQF = new Extension(RESOURCE_TRIGGER_QUERY_CRITERIA_EXTENSION_URL);
tgt.addExtension(tgtQF);
if (src.getQueryCriteria().hasPrevious()) {
tgtQF.addExtension(RESOURCE_TRIGGER_QUERY_CRITERIA_PREVIOUS_EXTENSION_URL, String40_50.convertString(src.getQueryCriteria().getPreviousElement()));
}
if (src.getQueryCriteria().hasResultForCreate()) {
tgtQF.addExtension(RESOURCE_TRIGGER_QUERY_CRITERIA_RESULT_FOR_CREATE_EXTENSION_URL, new org.hl7.fhir.r4.model.CodeType(src.getQueryCriteria().getResultForCreate().toCode()));
}
if (src.getQueryCriteria().hasCurrent()) {
tgtQF.addExtension(RESOURCE_TRIGGER_QUERY_CRITERIA_CURRENT_EXTENSION_URL, String40_50.convertString(src.getQueryCriteria().getCurrentElement()));
}
if (src.getQueryCriteria().hasResultForDelete()) {
tgtQF.addExtension(RESOURCE_TRIGGER_QUERY_CRITERIA_RESULT_FOR_DELETE_EXTENSION_URL, new org.hl7.fhir.r4.model.CodeType(src.getQueryCriteria().getResultForDelete().toCode()));
}
if (src.getQueryCriteria().hasRequireBoth()) {
tgtQF.addExtension(RESOURCE_TRIGGER_QUERY_CRITERIA_REQUIRE_BOTH_EXTENSION_URL, Boolean40_50.convertBoolean(src.getQueryCriteria().getRequireBothElement()));
}
}
if (src.hasFhirPathCriteria()) {
tgt.addExtension(RESOURCE_TRIGGER_FHIRPATH_CRITERIA_EXTENSION_URL, String40_50.convertString(src.getFhirPathCriteriaElement()));
}
}
private static void convertSubscriptionResourceTrigger(Extension src, SubscriptionTopicResourceTriggerComponent tgt) {
ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyElement(src, tgt,
RESOURCE_TRIGGER_DESCRIPTION_EXTENSION_URL, RESOURCE_TRIGGER_RESOURCE_EXTENSION_URL, RESOURCE_TRIGGER_QUERY_CRITERIA_EXTENSION_URL,
RESOURCE_TRIGGER_SUPPORTED_INTERACTION_EXTENSION_URL, RESOURCE_TRIGGER_FHIRPATH_CRITERIA_EXTENSION_URL);
if (src.hasExtension(RESOURCE_TRIGGER_DESCRIPTION_EXTENSION_URL)) {
tgt.setDescriptionElement(MarkDown40_50.convertMarkdown((MarkdownType) src.getExtensionByUrl(RESOURCE_TRIGGER_DESCRIPTION_EXTENSION_URL).getValue()));
}
if (src.hasExtension(RESOURCE_TRIGGER_RESOURCE_EXTENSION_URL)) {
tgt.setResourceElement(Uri40_50.convertUri((UriType) src.getExtensionByUrl(RESOURCE_TRIGGER_RESOURCE_EXTENSION_URL).getValue()));
}
for (Extension ext : src.getExtensionsByUrl(RESOURCE_TRIGGER_SUPPORTED_INTERACTION_EXTENSION_URL)) {
tgt.addSupportedInteractionElement().setValueAsString(ext.getValue().primitiveValue());
}
if (src.hasExtension(RESOURCE_TRIGGER_QUERY_CRITERIA_EXTENSION_URL)) {
Extension srcQF = src.getExtensionByUrl(RESOURCE_TRIGGER_QUERY_CRITERIA_EXTENSION_URL);
SubscriptionTopicResourceTriggerQueryCriteriaComponent tgtQF = tgt.getQueryCriteria();
if (srcQF.hasExtension(RESOURCE_TRIGGER_QUERY_CRITERIA_PREVIOUS_EXTENSION_URL)) {
tgtQF.setPreviousElement(String40_50.convertString((org.hl7.fhir.r4.model.StringType) srcQF.getExtensionByUrl(RESOURCE_TRIGGER_QUERY_CRITERIA_PREVIOUS_EXTENSION_URL).getValue()));
}
if (srcQF.hasExtension(RESOURCE_TRIGGER_QUERY_CRITERIA_RESULT_FOR_CREATE_EXTENSION_URL)) {
tgtQF.getResultForCreateElement().setValueAsString(srcQF.getExtensionByUrl(RESOURCE_TRIGGER_QUERY_CRITERIA_RESULT_FOR_CREATE_EXTENSION_URL).getValue().primitiveValue());
}
if (srcQF.hasExtension(RESOURCE_TRIGGER_QUERY_CRITERIA_CURRENT_EXTENSION_URL)) {
tgtQF.setCurrentElement(String40_50.convertString((org.hl7.fhir.r4.model.StringType) srcQF.getExtensionByUrl(RESOURCE_TRIGGER_QUERY_CRITERIA_CURRENT_EXTENSION_URL).getValue()));
}
if (srcQF.hasExtension(RESOURCE_TRIGGER_QUERY_CRITERIA_RESULT_FOR_DELETE_EXTENSION_URL)) {
tgtQF.getResultForDeleteElement().setValueAsString(srcQF.getExtensionByUrl(RESOURCE_TRIGGER_QUERY_CRITERIA_RESULT_FOR_DELETE_EXTENSION_URL).getValue().primitiveValue());
}
if (srcQF.hasExtension(RESOURCE_TRIGGER_QUERY_CRITERIA_REQUIRE_BOTH_EXTENSION_URL)) {
tgtQF.setRequireBothElement(Boolean40_50.convertBoolean((BooleanType) srcQF.getExtensionByUrl(RESOURCE_TRIGGER_QUERY_CRITERIA_REQUIRE_BOTH_EXTENSION_URL).getValue()));
}
}
if (src.hasExtension(RESOURCE_TRIGGER_FHIRPATH_CRITERIA_EXTENSION_URL)) {
tgt.setFhirPathCriteriaElement(String40_50.convertString((org.hl7.fhir.r4.model.StringType) src.getExtensionByUrl(RESOURCE_TRIGGER_FHIRPATH_CRITERIA_EXTENSION_URL).getValue()));
}
}
private static void convertSubscriptionEventTrigger(SubscriptionTopicEventTriggerComponent src, Extension tgt) {
ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyElement(src, tgt);
if (src.hasDescription()) {
tgt.addExtension(EVENT_TRIGGER_DESCRIPTION_EXTENSION_URL, MarkDown40_50.convertMarkdown(src.getDescriptionElement()));
}
if (src.hasResource()) {
tgt.addExtension(EVENT_TRIGGER_RESOURCE_EXTENSION_URL, Uri40_50.convertUri(src.getResourceElement()));
}
if (src.hasEvent()) {
tgt.addExtension(EVENT_TRIGGER_EVENT_EXTENSION_URL, CodeableConcept40_50.convertCodeableConcept(src.getEvent()));
}
}
private static void convertSubscriptionEventTrigger(Extension src, SubscriptionTopicEventTriggerComponent tgt) {
ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyElement(src, tgt, EVENT_TRIGGER_DESCRIPTION_EXTENSION_URL, EVENT_TRIGGER_RESOURCE_EXTENSION_URL, EVENT_TRIGGER_EVENT_EXTENSION_URL);
if (src.hasExtension(EVENT_TRIGGER_DESCRIPTION_EXTENSION_URL)) {
tgt.setDescriptionElement(MarkDown40_50.convertMarkdown((MarkdownType) src.getExtensionByUrl(EVENT_TRIGGER_DESCRIPTION_EXTENSION_URL).getValue()));
}
if (src.hasExtension(EVENT_TRIGGER_RESOURCE_EXTENSION_URL)) {
tgt.setResourceElement(Uri40_50.convertUri((UriType) src.getExtensionByUrl(EVENT_TRIGGER_RESOURCE_EXTENSION_URL).getValue()));
}
if (src.hasExtension(EVENT_TRIGGER_EVENT_EXTENSION_URL)) {
tgt.setEvent(CodeableConcept40_50.convertCodeableConcept((org.hl7.fhir.r4.model.CodeableConcept) src.getExtensionByUrl(EVENT_TRIGGER_EVENT_EXTENSION_URL).getValue()));
}
}
private static void convertSubscriptionCanFilterBy(SubscriptionTopicCanFilterByComponent src, Extension tgt) {
ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyElement(src, tgt);
if (src.hasDescription()) {
tgt.addExtension(CAN_FILTER_BY_DESCRIPTION_EXTENSION_URL, MarkDown40_50.convertMarkdown(src.getDescriptionElement()));
}
if (src.hasResource()) {
tgt.addExtension(CAN_FILTER_BY_RESOURCE_EXTENSION_URL, Uri40_50.convertUri(src.getResourceElement()));
}
if (src.hasFilterParameter()) {
tgt.addExtension(CAN_FILTER_BY_FILTER_PARMETER_EXTENSION_URL, String40_50.convertString(src.getFilterParameterElement()));
}
if (src.hasFilterDefinition()) {
tgt.addExtension(CAN_FILTER_BY_FILTER_DEFINITION_EXTENSION_URL, Uri40_50.convertUri(src.getFilterDefinitionElement()));
}
for (Enumeration<SearchComparator> t : src.getComparator()) {
tgt.addExtension(CAN_FILTER_BY_COMPARATOR_EXTENSION_URL, new org.hl7.fhir.r4.model.CodeType(t.getCode()));
}
for (Enumeration<SearchModifierCode> t : src.getModifier()) {
tgt.addExtension(CAN_FILTER_BY_MODIFIER_EXTENSION_URL, new org.hl7.fhir.r4.model.CodeType(t.getCode()));
}
}
private static void convertSubscriptionCanFilterBy(Extension src, SubscriptionTopicCanFilterByComponent tgt) {
ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyElement(src, tgt,
CAN_FILTER_BY_DESCRIPTION_EXTENSION_URL, CAN_FILTER_BY_RESOURCE_EXTENSION_URL, CAN_FILTER_BY_FILTER_PARMETER_EXTENSION_URL,
CAN_FILTER_BY_FILTER_DEFINITION_EXTENSION_URL, CAN_FILTER_BY_COMPARATOR_EXTENSION_URL, CAN_FILTER_BY_MODIFIER_EXTENSION_URL);
if (src.hasExtension(CAN_FILTER_BY_DESCRIPTION_EXTENSION_URL)) {
tgt.setDescriptionElement(MarkDown40_50.convertMarkdown((MarkdownType) src.getExtensionByUrl(CAN_FILTER_BY_DESCRIPTION_EXTENSION_URL).getValue()));
}
if (src.hasExtension(CAN_FILTER_BY_RESOURCE_EXTENSION_URL)) {
tgt.setResourceElement(Uri40_50.convertUri((UriType) src.getExtensionByUrl(CAN_FILTER_BY_RESOURCE_EXTENSION_URL).getValue()));
}
if (src.hasExtension(CAN_FILTER_BY_FILTER_PARMETER_EXTENSION_URL)) {
tgt.setFilterParameterElement(String40_50.convertString((org.hl7.fhir.r4.model.StringType) src.getExtensionByUrl(CAN_FILTER_BY_FILTER_PARMETER_EXTENSION_URL).getValue()));
}
if (src.hasExtension(CAN_FILTER_BY_FILTER_DEFINITION_EXTENSION_URL)) {
tgt.setFilterDefinitionElement(Uri40_50.convertUri((UriType) src.getExtensionByUrl(CAN_FILTER_BY_FILTER_DEFINITION_EXTENSION_URL).getValue()));
}
for (Extension ext : src.getExtensionsByUrl(CAN_FILTER_BY_COMPARATOR_EXTENSION_URL)) {
tgt.addComparatorElement().setValueAsString(ext.getValue().primitiveValue());
}
for (Extension ext : src.getExtensionsByUrl(CAN_FILTER_BY_MODIFIER_EXTENSION_URL)) {
tgt.addModifierElement().setValueAsString(ext.getValue().primitiveValue());
}
}
private static void convertSubscriptionNotificationShape(SubscriptionTopicNotificationShapeComponent src, Extension tgt) {
ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyElement(src, tgt);
if (src.hasResource()) {
tgt.addExtension(NOTIFICATION_SHAPE_RESOURCE_EXTENSION_URL, Uri40_50.convertUri(src.getResourceElement()));
}
for (StringType t : src.getInclude()) {
tgt.addExtension(NOTIFICATION_SHAPE_INCLUDE_EXTENSION_URL, String40_50.convertString(t));
}
for (StringType t : src.getRevInclude()) {
tgt.addExtension(NOTIFICATION_SHAPE_REV_INCLUDE_EXTENSION_URL, String40_50.convertString(t));
}
}
private static void convertSubscriptionNotificationShape(Extension src, SubscriptionTopicNotificationShapeComponent tgt) {
ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyElement(src, tgt, NOTIFICATION_SHAPE_RESOURCE_EXTENSION_URL, NOTIFICATION_SHAPE_INCLUDE_EXTENSION_URL, NOTIFICATION_SHAPE_REV_INCLUDE_EXTENSION_URL);
if (src.hasExtension(NOTIFICATION_SHAPE_RESOURCE_EXTENSION_URL)) {
tgt.setResourceElement(Uri40_50.convertUri((UriType) src.getExtensionByUrl(NOTIFICATION_SHAPE_RESOURCE_EXTENSION_URL).getValue()));
}
for (Extension ext : src.getExtensionsByUrl(NOTIFICATION_SHAPE_INCLUDE_EXTENSION_URL)) {
tgt.addIncludeElement().setValueAsString(ext.getValue().primitiveValue());
}
for (Extension ext : src.getExtensionsByUrl(NOTIFICATION_SHAPE_REV_INCLUDE_EXTENSION_URL)) {
tgt.addRevIncludeElement().setValueAsString(ext.getValue().primitiveValue());
}
}
}

View File

@ -0,0 +1,42 @@
package org.hl7.fhir.convertors.conv40_50;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.io.FileOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import org.hl7.fhir.convertors.factory.VersionConvertorFactory_40_50;
import org.hl7.fhir.r5.formats.IParser.OutputStyle;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
public class SubscriptionTopic40_50Test {
@Test
@DisplayName("Test r5 -> r4 SubscriptionTopic conversion.")
public void testR5_R4() throws IOException {
InputStream r5_input = this.getClass().getResourceAsStream("/subscription_topic_50.json");
org.hl7.fhir.r5.model.SubscriptionTopic r5_actual = (org.hl7.fhir.r5.model.SubscriptionTopic) new org.hl7.fhir.r5.formats.JsonParser().parse(r5_input);
org.hl7.fhir.r4.model.Resource r4_conv = VersionConvertorFactory_40_50.convertResource(r5_actual);
org.hl7.fhir.r4.formats.XmlParser r4_parser = new org.hl7.fhir.r4.formats.XmlParser();
ByteArrayOutputStream stream = new ByteArrayOutputStream();
r4_parser.compose(stream, r4_conv);
org.hl7.fhir.r4.model.Resource r4_streamed = (org.hl7.fhir.r4.model.Basic) new org.hl7.fhir.r4.formats.XmlParser().parse(new ByteArrayInputStream(stream.toByteArray()));
org.hl7.fhir.r5.model.Resource r5_conv = VersionConvertorFactory_40_50.convertResource(r4_streamed);
org.hl7.fhir.r5.formats.JsonParser r5_parser = new org.hl7.fhir.r5.formats.JsonParser();
r5_parser.setOutputStyle(OutputStyle.PRETTY).compose(new FileOutputStream("/tmp/source.json"), r5_actual);
r5_parser.setOutputStyle(OutputStyle.PRETTY).compose(new FileOutputStream("/tmp/output.json"), r5_conv);
assertTrue(r5_actual.equalsDeep(r5_conv), "should be the same");
}
}

View File

@ -62,7 +62,6 @@ public class R5ExtensionsLoader {
private BasePackageCacheManager pcm;
private int count;
private NpmPackage pckCore;
private NpmPackage pckExt;
private Map<String, Loadable<ValueSet>> valueSets;
private Map<String, Loadable<CodeSystem>> codeSystems;
private List<Loadable<StructureDefinition>> structures;
@ -82,8 +81,6 @@ public class R5ExtensionsLoader {
public void load() throws FHIRException, IOException {
pckCore = pcm.loadPackage("hl7.fhir.r5.core", "5.0.0");
loadDetails(pckCore);
pckExt = pcm.loadPackage("hl7.fhir.uv.extensions", "1.0.0");
loadDetails(pckExt);
}
private void loadDetails(NpmPackage pck) throws IOException {
@ -103,35 +100,71 @@ public class R5ExtensionsLoader {
}
}
public void loadR5Extensions() throws FHIRException, IOException {
count = 0;
List<String> typeNames = new ContextUtilities(context).getTypeNames();
for (Loadable<StructureDefinition> lsd : structures) {
if (lsd.info.getStatedType().equals("Extension") && !context.hasResource(StructureDefinition.class, lsd.info.getUrl())) {
StructureDefinition sd = lsd.getResource();
if (sd.getDerivation() == TypeDerivationRule.CONSTRAINT) {
if (survivesStrippingTypes(sd, context, typeNames)) {
count++;
sd.setWebPath(Utilities.pathURL(pckExt.getWebLocation(), "extension-"+sd.getId().toLowerCase()+".html"));
registerTerminologies(sd);
context.cacheResourceFromPackage(sd, new PackageInformation(lsd.source));
}
}
}
}
}
// public void loadR5Extensions() throws FHIRException, IOException {
// count = 0;
// List<String> typeNames = new ContextUtilities(context).getTypeNames();
// for (Loadable<StructureDefinition> lsd : structures) {
// if (lsd.info.getStatedType().equals("Extension") && !context.hasResource(StructureDefinition.class, lsd.info.getUrl())) {
// StructureDefinition sd = lsd.getResource();
// if (sd.getDerivation() == TypeDerivationRule.CONSTRAINT) {
// if (survivesStrippingTypes(sd, context, typeNames)) {
// count++;
// sd.setWebPath(Utilities.pathURL(pckExt.getWebLocation(), "extension-"+sd.getId().toLowerCase()+".html"));
// registerTerminologies(sd);
// context.cacheResourceFromPackage(sd, new PackageInformation(lsd.source));
// }
// }
// }
// }
// }
public void loadR5SpecialTypes(List<String> types) throws FHIRException, IOException {
for (Loadable<StructureDefinition> lsd : structures) {
StructureDefinition sd = lsd.getResource();
if (Utilities.existsInList(sd.getType(), types)) {
if (Utilities.existsInList(lsd.info.getId(), types)) {
StructureDefinition sd = lsd.getResource();
count++;
for (ElementDefinition ed : sd.getDifferential().getElement()) {
if (!stripTypes(ed, sd, types)) {
System.out.println("A problem...");
}
}
for (ElementDefinition ed : sd.getSnapshot().getElement()) {
if (!stripTypes(ed, sd, types)) {
System.out.println("A problem...");
}
}
sd.setWebPath(Utilities.pathURL(lsd.source.getWebLocation(), sd.getId().toLowerCase()+".html"));
registerTerminologies(sd);
context.cacheResourceFromPackage(sd, new PackageInformation(lsd.source));
}
}
}
private boolean stripTypes(ElementDefinition ed, StructureDefinition sd, List<String> types) {
if (!ed.getPath().contains(".") || !ed.hasType()) {
return true;
}
ed.getType().removeIf(tr -> context.fetchTypeDefinition(tr.getWorkingCode()) == null);
if (!ed.hasType()) {
return false;
}
for (TypeRefComponent tr : ed.getType()) {
if (tr.hasTargetProfile()) {
tr.getTargetProfile().removeIf(n -> !context.hasResource(StructureDefinition.class, n.asStringValue()) && !n.asStringValue().equals(sd.getUrl()) && !types.contains(tail(n.asStringValue())));
if (!tr.hasTargetProfile()) {
return false;
}
}
}
return true;
}
private Object tail(String s) {
if (s == null || !s.contains("/")) {
return s;
}
return s.substring(s.lastIndexOf("/")+1);
}
private void registerTerminologies(StructureDefinition sd) throws FHIRFormatError, FileNotFoundException, IOException {
for (ElementDefinition ed : sd.getSnapshot().getElement()) {
@ -217,9 +250,6 @@ public class R5ExtensionsLoader {
return pckCore;
}
public NpmPackage getPckExt() {
return pckExt;
}

View File

@ -244,7 +244,8 @@ public class SimpleWorkerContext extends BaseWorkerContext implements IWorkerCon
public SimpleWorkerContext fromPackage(NpmPackage pi, IContextResourceLoader loader) throws IOException, FHIRException {
SimpleWorkerContext context = getSimpleWorkerContextInstance();
context.setAllowLoadingDuplicates(allowLoadingDuplicates); context.version = pi.getNpm().asString("version");
context.setAllowLoadingDuplicates(allowLoadingDuplicates);
context.version = pi.getNpm().asString("version");
context.loadFromPackage(pi, loader);
context.finishLoading();
return build(context);

View File

@ -765,10 +765,19 @@ public class DataRenderer extends Renderer implements CodeResolver {
protected void renderUri(XhtmlNode x, UriType uri) {
if (uri.getValue().startsWith("mailto:")) {
x.ah(uri.getValue()).addText(uri.getValue().substring(7));
} else if (Utilities.isAbsoluteUrlLinkable(uri.getValue()) && !(uri instanceof IdType)) {
x.ah(uri.getValue()).addText(uri.getValue());
} else {
x.addText(uri.getValue());
Resource r = context.getContext().fetchResource(Resource.class, uri.getValue());
if (r != null) {
if (r instanceof CanonicalResource) {
x.ah(r.getWebPath()).addText(((CanonicalResource) r).present());
} else {
x.ah(r.getWebPath()).addText(uri.getValue());
}
} else if (Utilities.isAbsoluteUrlLinkable(uri.getValue()) && !(uri instanceof IdType)) {
x.ah(uri.getValue()).addText(uri.getValue());
} else {
x.addText(uri.getValue());
}
}
}

View File

@ -91,6 +91,9 @@ public class RendererFactory {
if ("Requirements".equals(resourceName)) {
return new RequirementsRenderer(context);
}
if ("SubscriptionTopic".equals(resourceName)) {
return new SubscriptionTopicRenderer(context);
}
if ("StructureMap".equals(resourceName)) {
return new StructureMapRenderer(context);
}

View File

@ -1,5 +1,9 @@
package org.hl7.fhir.r5.renderers;
import java.util.List;
import java.util.Map;
import java.util.HashMap;
import java.util.ArrayList;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
@ -577,4 +581,95 @@ public abstract class ResourceRenderer extends DataRenderer {
public RendererType getRendererType() {
return RendererType.NATIVE;
}
public class TableRowData {
private Map<String, List<DataType>> cols = new HashMap<>();
private TableData data;
public void value(String name, DataType value) {
if (!cols.containsKey(name)) {
cols.put(name, new ArrayList<>());
}
if (!data.columns.contains(name)) {
data.columns.add(name);
}
cols.get(name).add(value);
}
public boolean hasCol(String name) {
return cols.containsKey(name);
}
public List<DataType> get(String name) {
return cols.get(name);
}
}
public class TableData {
private String title;
private List<String> columns = new ArrayList<>();
private List<TableRowData> rows = new ArrayList<>();
public TableData(String title) {
this.title = title;
}
public String getTitle() {
return title;
}
public List<String> getColumns() {
return columns;
}
public List<TableRowData> getRows() {
return rows;
}
public void addColumn(String name) {
columns.add(name);
}
public TableRowData addRow() {
TableRowData res = new TableRowData();
rows.add(res);
res.data = this;
return res;
}
}
public void renderTable(TableData provider, XhtmlNode x) throws FHIRFormatError, DefinitionException, IOException {
List<String> columns = new ArrayList<>();
for (String name : provider.getColumns()) {
boolean hasData = false;
for (TableRowData row : provider.getRows()) {
if (row.hasCol(name)) {
hasData = true;
}
}
if (hasData) {
columns.add(name);
}
}
if (columns.size() > 0) {
XhtmlNode table = x.table("grid");
if (provider.getTitle() != null) {
table.tr().td().colspan(columns.size()).b().tx(provider.getTitle());
}
XhtmlNode tr = table.tr();
for (String col : columns) {
tr.th().b().tx(col);
}
for (TableRowData row : provider.getRows()) {
tr = table.tr();
for (String col : columns) {
XhtmlNode td = tr.td();
boolean first = true;
List<DataType> list = row.get(col);
if (list != null) {
for (DataType value : list) {
if (first) first = false; else td.tx(", ");
render(td, value);
}
}
}
}
}
}
}

View File

@ -0,0 +1,171 @@
package org.hl7.fhir.r5.renderers;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import org.hl7.fhir.exceptions.DefinitionException;
import org.hl7.fhir.exceptions.FHIRFormatError;
import org.hl7.fhir.r5.model.Enumeration;
import org.hl7.fhir.r5.model.Enumerations.SearchComparator;
import org.hl7.fhir.r5.model.Enumerations.SearchModifierCode;
import org.hl7.fhir.r5.model.Library;
import org.hl7.fhir.r5.model.MarkdownType;
import org.hl7.fhir.r5.model.Requirements;
import org.hl7.fhir.r5.model.Resource;
import org.hl7.fhir.r5.model.StringType;
import org.hl7.fhir.r5.model.SubscriptionTopic;
import org.hl7.fhir.r5.model.SubscriptionTopic.InteractionTrigger;
import org.hl7.fhir.r5.model.SubscriptionTopic.SubscriptionTopicCanFilterByComponent;
import org.hl7.fhir.r5.model.SubscriptionTopic.SubscriptionTopicEventTriggerComponent;
import org.hl7.fhir.r5.model.SubscriptionTopic.SubscriptionTopicNotificationShapeComponent;
import org.hl7.fhir.r5.model.SubscriptionTopic.SubscriptionTopicResourceTriggerComponent;
import org.hl7.fhir.r5.renderers.utils.BaseWrappers.ResourceWrapper;
import org.hl7.fhir.r5.renderers.utils.RenderingContext;
import org.hl7.fhir.r5.renderers.utils.Resolver.ResourceContext;
import org.hl7.fhir.utilities.xhtml.XhtmlNode;
public class SubscriptionTopicRenderer extends ResourceRenderer {
public SubscriptionTopicRenderer(RenderingContext context) {
super(context);
}
public SubscriptionTopicRenderer(RenderingContext context, ResourceContext rcontext) {
super(context, rcontext);
}
public boolean render(XhtmlNode x, Resource dr) throws FHIRFormatError, DefinitionException, IOException {
return render(x, (SubscriptionTopic) dr);
}
public boolean render(XhtmlNode x, SubscriptionTopic st) throws FHIRFormatError, DefinitionException, IOException {
if (context.isHeader()) {
XhtmlNode h = x.h2();
h.addText(st.hasTitle() ? st.getTitle() : st.getName());
addMarkdown(x, st.getDescription());
if (st.hasCopyright())
generateCopyright(x, st);
}
if (st.hasResourceTrigger()) {
TableData td = new TableData("Resource Triggers");
for (SubscriptionTopicResourceTriggerComponent rt : st.getResourceTrigger()) {
TableRowData tr = td.addRow();
if (rt.hasResource()) {
tr.value("Resource", rt.getResourceElement());
}
for (Enumeration<InteractionTrigger> t : rt.getSupportedInteraction()) {
tr.value("Interactions", t);
}
if (rt.hasQueryCriteria()) {
StringBuilder md = new StringBuilder();
if (rt.getQueryCriteria().hasPrevious()) {
md.append("* previous = "+rt.getQueryCriteria().getPrevious()+"\r\n");
}
if (rt.getQueryCriteria().hasResultForCreate()) {
md.append("* create result = "+rt.getQueryCriteria().getResultForCreate()+"\r\n");
}
if (rt.getQueryCriteria().hasCurrent()) {
md.append("* create result = "+rt.getQueryCriteria().getCurrent()+"\r\n");
}
if (rt.getQueryCriteria().hasPrevious()) {
md.append("* delete result = "+rt.getQueryCriteria().getResultForDelete()+"\r\n");
}
if (rt.getQueryCriteria().hasRequireBoth()) {
md.append("* require both = "+rt.getQueryCriteria().getRequireBoth()+"\r\n");
}
tr.value("Criteria", new MarkdownType(md.toString()));
}
if (rt.hasFhirPathCriteriaElement()) {
tr.value("FHIR Path", rt.getFhirPathCriteriaElement());
}
if (rt.hasDescription()) {
tr.value("Description", rt.getDescriptionElement());
}
}
renderTable(td, x);
}
if (st.hasResourceTrigger()) {
TableData td = new TableData("Event Triggers");
for (SubscriptionTopicEventTriggerComponent rt : st.getEventTrigger()) {
TableRowData tr = td.addRow();
if (rt.hasResource()) {
tr.value("Resource", rt.getResourceElement());
}
if (rt.hasEvent()) {
tr.value("Event", rt.getEvent());
}
if (rt.hasDescription()) {
tr.value("Description", rt.getDescriptionElement());
}
}
renderTable(td, x);
}
if (st.hasCanFilterBy()) {
TableData td = new TableData("Can Filter By");
for (SubscriptionTopicCanFilterByComponent rt : st.getCanFilterBy()) {
TableRowData tr = td.addRow();
if (rt.hasResource()) {
tr.value("Resource", rt.getResourceElement());
}
if (rt.hasFilterParameter()) {
tr.value("Filter Parameter", rt.getFilterParameterElement());
}
if (rt.hasFilterDefinition()) {
tr.value("Filter Definition", rt.getFilterDefinitionElement());
}
for (Enumeration<SearchComparator> t : rt.getComparator()) {
tr.value("Comparators", t);
}
for (Enumeration<SearchModifierCode> t : rt.getModifier()) {
tr.value("Modifiers", t);
}
}
renderTable(td, x);
}
if (st.hasNotificationShape()) {
TableData td = new TableData("Notification Shapes");
for (SubscriptionTopicNotificationShapeComponent rt : st.getNotificationShape()) {
TableRowData tr = td.addRow();
if (rt.hasResource()) {
tr.value("Resource", rt.getResourceElement());
}
for (StringType t : rt.getInclude()) {
tr.value("Includes", t);
}
for (StringType t : rt.getRevInclude()) {
tr.value("Reverse Includes", t);
}
}
renderTable(td, x);
}
return false;
}
public void describe(XhtmlNode x, Library lib) {
x.tx(display(lib));
}
public String display(Library lib) {
return lib.present();
}
@Override
public String display(Resource r) throws UnsupportedEncodingException, IOException {
return ((Library) r).present();
}
@Override
public String display(ResourceWrapper r) throws UnsupportedEncodingException, IOException {
if (r.has("title")) {
return r.children("title").get(0).getBase().primitiveValue();
}
return "??";
}
}

View File

@ -754,6 +754,10 @@ public class XhtmlNode extends XhtmlFluent implements IBaseXhtml {
return setAttribute("colspan", n);
}
public XhtmlNode colspan(int n) {
return setAttribute("colspan", Integer.toString(n));
}
// differs from tx because it returns the owner node, not the created text
public XhtmlNode txN(String cnt) {
addText(cnt);