public DeliveryProvider getProvider(Optional<DeliveryDefinition> deliveryDefinition) { if (deliveryDefinition.isPresent() && providers != null) { String id = deliveryDefinition.get().getIdentifier(); for (DeliveryProvider provider : providers) { if (provider.supportsDeliveryIdentifier(id)) { return provider; } } } return null; }
@Override public DeliveryEndpoint createDeliveryEndpoint(DeliveryDefinition def) throws UnsupportedDeliveryDefinitionException { return new EmailDeliveryEndpoint(def.getLocation()); }
@Override public DeliveryEndpoint createDeliveryEndpoint(DeliveryDefinition def) throws UnsupportedDeliveryDefinitionException { Optional<String> topicOpt = def.getParameters().stream() .filter(t -> t.getElementName().equals("topic")) .findFirst() .map(dp -> dp.getValue()); return new MqttDeliveryEndpoint(topicOpt.orElse(UUID.randomUUID().toString().substring(0, 8))); }
@Override public DeliveryEndpoint createDeliveryEndpoint(DeliveryMethodInstance deliveryMethod, String pubId) throws InvalidSubscriptionException { try { DeliveryDefinition definition = new DeliveryDefinition(deliveryMethod.getId(), null, pubId, false); DeliveryProvider provider = deliveryProviderRepository.getProvider(Optional.of(definition)); DeliveryParameter[] providerParams = provider.getParameters(); deliveryMethod.getParameters().forEach((String s, ParameterInstance pi) -> { for (DeliveryParameter providerParam : providerParams) { if (providerParam.getElementName().equals(s)) { definition.addParameter(new DeliveryParameter(pi.getDataType(), null, s, pi.getValue().toString())); return; } } }); if (provider == null) { throw new InvalidSubscriptionException("No delivery provider found for delivery: "+deliveryMethod.getId()); } return provider.createDeliveryEndpoint(definition); } catch (UnsupportedDeliveryDefinitionException ex) { throw new InvalidSubscriptionException(ex.getMessage(), ex); } }
@Override public synchronized void register(Subscription result, DeliveryEndpoint deliveryEndpoint) throws SubscriptionRegistrationException { try { boolean useRaw = false; Optional<DeliveryDefinition> delDef = result.getOptions().getDeliveryDefinition(); if (delDef.isPresent()) { useRaw = delDef.get().isUseRaw(); } Optional<XmlObject> filter = result.getOptions().getFilter(); Rule rule = createRule(filter, deliveryEndpoint, result.getOptions().getPublicationIdentifier(), useRaw); this.engine.registerRule(rule); this.rules.put(result.getId(), rule); } catch (FilterInstantiationException ex) { LOG.warn("Could not instantiate rule: {}", ex.getMessage()); throw new SubscriptionRegistrationException("Could not instantiate rule", ex); } }