001package ca.uhn.fhir.jpa.subscription.match.matcher.matching; 002 003/*- 004 * #%L 005 * HAPI FHIR Subscription Server 006 * %% 007 * Copyright (C) 2014 - 2022 Smile CDR, Inc. 008 * %% 009 * Licensed under the Apache License, Version 2.0 (the "License"); 010 * you may not use this file except in compliance with the License. 011 * You may obtain a copy of the License at 012 * 013 * http://www.apache.org/licenses/LICENSE-2.0 014 * 015 * Unless required by applicable law or agreed to in writing, software 016 * distributed under the License is distributed on an "AS IS" BASIS, 017 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 018 * See the License for the specific language governing permissions and 019 * limitations under the License. 020 * #L% 021 */ 022 023import ca.uhn.fhir.jpa.api.config.DaoConfig; 024import ca.uhn.fhir.jpa.searchparam.matcher.InMemoryMatchResult; 025import ca.uhn.fhir.jpa.subscription.model.CanonicalSubscription; 026import ca.uhn.fhir.jpa.subscription.model.ResourceModifiedMessage; 027import org.slf4j.Logger; 028import org.slf4j.LoggerFactory; 029import org.springframework.beans.factory.annotation.Autowired; 030 031public class CompositeInMemoryDaoSubscriptionMatcher implements ISubscriptionMatcher { 032 private Logger ourLog = LoggerFactory.getLogger(CompositeInMemoryDaoSubscriptionMatcher.class); 033 034 private final DaoSubscriptionMatcher myDaoSubscriptionMatcher; 035 private final InMemorySubscriptionMatcher myInMemorySubscriptionMatcher; 036 @Autowired 037 DaoConfig myDaoConfig; 038 039 public CompositeInMemoryDaoSubscriptionMatcher(DaoSubscriptionMatcher theDaoSubscriptionMatcher, InMemorySubscriptionMatcher theInMemorySubscriptionMatcher) { 040 myDaoSubscriptionMatcher = theDaoSubscriptionMatcher; 041 myInMemorySubscriptionMatcher = theInMemorySubscriptionMatcher; 042 } 043 044 @Override 045 public InMemoryMatchResult match(CanonicalSubscription theSubscription, ResourceModifiedMessage theMsg) { 046 InMemoryMatchResult result; 047 if (myDaoConfig.isEnableInMemorySubscriptionMatching()) { 048 result = myInMemorySubscriptionMatcher.match(theSubscription, theMsg); 049 if (result.supported()) { 050 result.setInMemory(true); 051 } else { 052 ourLog.info("Criteria {} for Subscription {} not supported by InMemoryMatcher: {}. Reverting to DatabaseMatcher", theSubscription.getCriteriaString(), theSubscription.getIdElementString(), result.getUnsupportedReason()); 053 result = myDaoSubscriptionMatcher.match(theSubscription, theMsg); 054 } 055 } else { 056 result = myDaoSubscriptionMatcher.match(theSubscription, theMsg); 057 } 058 return result; 059 } 060}