public CanonicalSubscription canonicalize(S theSubscription) { switch (myFhirContext.getVersion().getVersion()) { case DSTU2: return canonicalizeDstu2(theSubscription); case DSTU3: return canonicalizeDstu3(theSubscription); case R4: return canonicalizeR4(theSubscription); default: throw new ConfigurationException("Subscription not supported for version: " + myFhirContext.getVersion().getVersion()); } }
private Map<String, String> convertChannelExtensionsDstu3(org.hl7.fhir.dstu3.model.Subscription theSubscription) { Map<String, String> retval = new HashMap<>(); for (org.hl7.fhir.dstu3.model.Extension extension : theSubscription.getChannel().getExtension()) { String url = extension.getUrl(); if (isNotBlank(url)) { String value = extractExtension(theSubscription, url); if (isNotBlank(value)) { retval.put(url, value); } } } return retval; }
public void validateCriteriaAndAddStrategy(final IBaseResource theResource) { String criteria = mySubscriptionCanonicalizer.getCriteria(theResource); try { SubscriptionMatchingStrategy strategy = mySubscriptionStrategyEvaluator.determineStrategy(criteria); mySubscriptionCanonicalizer.setMatchingStrategyTag(myFhirContext, theResource, strategy); } catch (InvalidRequestException | DataFormatException e) { throw new UnprocessableEntityException("Invalid subscription criteria submitted: " + criteria + " " + e.getMessage()); } }
@SuppressWarnings("UnusedReturnValue") private CanonicalSubscription registerSubscription(IIdType theId, IBaseResource theSubscription) { Validate.notNull(theId); String subscriptionId = theId.getIdPart(); Validate.notBlank(subscriptionId); Validate.notNull(theSubscription); CanonicalSubscription canonicalized = mySubscriptionCanonicalizer.canonicalize(theSubscription); SubscribableChannel deliveryChannel; Optional<MessageHandler> deliveryHandler; if (myModelConfig.isSubscriptionMatchingEnabled()) { deliveryChannel = mySubscriptionDeliveryChannelFactory.newDeliveryChannel(subscriptionId, canonicalized.getChannelType().toCode().toLowerCase()); deliveryHandler = mySubscriptionDeliveryHandlerFactory.createDeliveryHandler(canonicalized); } else { deliveryChannel = null; deliveryHandler = Optional.empty(); } ActiveSubscription activeSubscription = new ActiveSubscription(canonicalized, deliveryChannel); deliveryHandler.ifPresent(activeSubscription::register); myActiveSubscriptionCache.put(subscriptionId, activeSubscription); // Interceptor call: SUBSCRIPTION_AFTER_ACTIVE_SUBSCRIPTION_REGISTERED myInterceptorBroadcaster.callHooks(Pointcut.SUBSCRIPTION_AFTER_ACTIVE_SUBSCRIPTION_REGISTERED, canonicalized); return canonicalized; }
retVal.setEndpointUrl(subscription.getChannel().getEndpoint()); retVal.setHeaders(subscription.getChannel().getHeader()); retVal.setChannelExtensions(convertChannelExtensionsR4(subscription)); retVal.setIdElement(subscription.getIdElement()); retVal.setPayloadString(subscription.getChannel().getPayload());
private CanonicalSubscription canonicalizeDstu2(IBaseResource theSubscription) { ca.uhn.fhir.model.dstu2.resource.Subscription subscription = (ca.uhn.fhir.model.dstu2.resource.Subscription) theSubscription; CanonicalSubscription retVal = new CanonicalSubscription(); try { retVal.setStatus(org.hl7.fhir.r4.model.Subscription.SubscriptionStatus.fromCode(subscription.getStatus())); retVal.setChannelType(CanonicalSubscriptionChannelType.fromCode(subscription.getChannel().getType())); retVal.setCriteriaString(subscription.getCriteria()); retVal.setEndpointUrl(subscription.getChannel().getEndpoint()); retVal.setHeaders(subscription.getChannel().getHeader()); retVal.setChannelExtensions(convertChannelExtensionsDstu2(subscription)); retVal.setIdElement(subscription.getIdElement()); retVal.setPayloadString(subscription.getChannel().getPayload()); } catch (FHIRException theE) { throw new InternalErrorException(theE); } return retVal; }
retVal.setEndpointUrl(subscription.getChannel().getEndpoint()); retVal.setHeaders(subscription.getChannel().getHeader()); retVal.setChannelExtensions(convertChannelExtensionsDstu3(subscription)); retVal.setIdElement(subscription.getIdElement()); retVal.setPayloadString(subscription.getChannel().getPayload());
String statusString = mySubscriptionCanonicalizer.getSubscriptionStatus(theSubscription);
public synchronized boolean registerSubscriptionUnlessAlreadyRegistered(IBaseResource theSubscription) { Optional<CanonicalSubscription> existingSubscription = hasSubscription(theSubscription.getIdElement()); CanonicalSubscription newSubscription = mySubscriptionCanonicalizer.canonicalize(theSubscription); if (existingSubscription.isPresent()) { if (newSubscription.equals(existingSubscription.get())) { // No changes return false; } ourLog.info("Updating already-registered active subscription {}", theSubscription.getIdElement().toUnqualified().getValue()); unregisterSubscription(theSubscription.getIdElement()); } else { ourLog.info("Registering active subscription {}", theSubscription.getIdElement().toUnqualified().getValue()); } if (Subscription.SubscriptionStatus.ACTIVE.equals(newSubscription.getStatus())) { registerSubscription(theSubscription.getIdElement(), theSubscription); return true; } else { return false; } }
public void validateCriteriaAndAddStrategy(final IBaseResource theResource) { String criteria = mySubscriptionCanonicalizer.getCriteria(theResource); try { SubscriptionMatchingStrategy strategy = mySubscriptionStrategyEvaluator.determineStrategy(criteria); mySubscriptionCanonicalizer.setMatchingStrategyTag(myFhirContext, theResource, strategy); } catch (InvalidRequestException | DataFormatException e) { throw new UnprocessableEntityException("Invalid subscription criteria submitted: " + criteria + " " + e.getMessage()); } }
private Map<String, String> convertChannelExtensionsR4(org.hl7.fhir.r4.model.Subscription theSubscription) { Map<String, String> retval = new HashMap<>(); for (org.hl7.fhir.r4.model.Extension extension : theSubscription.getChannel().getExtension()) { String url = extension.getUrl(); if (isNotBlank(url)) { String value = extractExtension(theSubscription, url); if (isNotBlank(value)) { retval.put(url, value); } } } return retval; }
private Map<String, String> convertChannelExtensionsDstu2(ca.uhn.fhir.model.dstu2.resource.Subscription theSubscription) { Map<String, String> retval = new HashMap<>(); for (ExtensionDt extension : theSubscription.getChannel().getUndeclaredExtensions()) { String url = extension.getUrl(); if (isNotBlank(url)) { String value = extractExtension(theSubscription, url); if (isNotBlank(value)) { retval.put(url, value); } } } return retval; }