001/*-
002 * #%L
003 * HAPI FHIR Subscription Server
004 * %%
005 * Copyright (C) 2014 - 2024 Smile CDR, Inc.
006 * %%
007 * Licensed under the Apache License, Version 2.0 (the "License");
008 * you may not use this file except in compliance with the License.
009 * You may obtain a copy of the License at
010 *
011 *      http://www.apache.org/licenses/LICENSE-2.0
012 *
013 * Unless required by applicable law or agreed to in writing, software
014 * distributed under the License is distributed on an "AS IS" BASIS,
015 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
016 * See the License for the specific language governing permissions and
017 * limitations under the License.
018 * #L%
019 */
020package ca.uhn.fhir.jpa.subscription.channel.subscription;
021
022import ca.uhn.fhir.jpa.subscription.match.deliver.email.IEmailSender;
023import ca.uhn.fhir.jpa.subscription.match.deliver.email.SubscriptionDeliveringEmailSubscriber;
024import ca.uhn.fhir.jpa.subscription.match.deliver.message.SubscriptionDeliveringMessageSubscriber;
025import ca.uhn.fhir.jpa.subscription.match.deliver.resthook.SubscriptionDeliveringRestHookSubscriber;
026import ca.uhn.fhir.jpa.subscription.model.CanonicalSubscriptionChannelType;
027import org.springframework.context.ApplicationContext;
028import org.springframework.messaging.MessageHandler;
029
030import java.util.Optional;
031
032public class SubscriptionDeliveryHandlerFactory {
033
034        protected ApplicationContext myApplicationContext;
035
036        private IEmailSender myEmailSender;
037
038        public SubscriptionDeliveryHandlerFactory(ApplicationContext theApplicationContext, IEmailSender theEmailSender) {
039                myApplicationContext = theApplicationContext;
040                myEmailSender = theEmailSender;
041        }
042
043        protected SubscriptionDeliveringEmailSubscriber newSubscriptionDeliveringEmailSubscriber(
044                        IEmailSender theEmailSender) {
045                return myApplicationContext.getBean(SubscriptionDeliveringEmailSubscriber.class, theEmailSender);
046        }
047
048        protected SubscriptionDeliveringRestHookSubscriber newSubscriptionDeliveringRestHookSubscriber() {
049                return myApplicationContext.getBean(SubscriptionDeliveringRestHookSubscriber.class);
050        }
051
052        protected SubscriptionDeliveringMessageSubscriber newSubscriptionDeliveringMessageSubscriber() {
053                return myApplicationContext.getBean(SubscriptionDeliveringMessageSubscriber.class);
054        }
055
056        public Optional<MessageHandler> createDeliveryHandler(CanonicalSubscriptionChannelType theChannelType) {
057                if (theChannelType == CanonicalSubscriptionChannelType.EMAIL) {
058                        return Optional.of(newSubscriptionDeliveringEmailSubscriber(myEmailSender));
059                } else if (theChannelType == CanonicalSubscriptionChannelType.RESTHOOK) {
060                        return Optional.of(newSubscriptionDeliveringRestHookSubscriber());
061                } else if (theChannelType == CanonicalSubscriptionChannelType.MESSAGE) {
062                        return Optional.of(newSubscriptionDeliveringMessageSubscriber());
063                } else {
064                        return Optional.empty();
065                }
066        }
067}