
001/*- 002 * #%L 003 * HAPI FHIR JPA Server 004 * %% 005 * Copyright (C) 2014 - 2025 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.search.builder.sql; 021 022import ca.uhn.fhir.jpa.search.builder.QueryStack; 023import ca.uhn.fhir.jpa.search.builder.predicate.ComboNonUniqueSearchParameterPredicateBuilder; 024import ca.uhn.fhir.jpa.search.builder.predicate.ComboUniqueSearchParameterPredicateBuilder; 025import ca.uhn.fhir.jpa.search.builder.predicate.CoordsPredicateBuilder; 026import ca.uhn.fhir.jpa.search.builder.predicate.DatePredicateBuilder; 027import ca.uhn.fhir.jpa.search.builder.predicate.NumberPredicateBuilder; 028import ca.uhn.fhir.jpa.search.builder.predicate.QuantityNormalizedPredicateBuilder; 029import ca.uhn.fhir.jpa.search.builder.predicate.QuantityPredicateBuilder; 030import ca.uhn.fhir.jpa.search.builder.predicate.ResourceHistoryPredicateBuilder; 031import ca.uhn.fhir.jpa.search.builder.predicate.ResourceHistoryProvenancePredicateBuilder; 032import ca.uhn.fhir.jpa.search.builder.predicate.ResourceIdPredicateBuilder; 033import ca.uhn.fhir.jpa.search.builder.predicate.ResourceLinkPredicateBuilder; 034import ca.uhn.fhir.jpa.search.builder.predicate.ResourceTablePredicateBuilder; 035import ca.uhn.fhir.jpa.search.builder.predicate.SearchParamPresentPredicateBuilder; 036import ca.uhn.fhir.jpa.search.builder.predicate.StringPredicateBuilder; 037import ca.uhn.fhir.jpa.search.builder.predicate.TagPredicateBuilder; 038import ca.uhn.fhir.jpa.search.builder.predicate.TokenPredicateBuilder; 039import ca.uhn.fhir.jpa.search.builder.predicate.UriPredicateBuilder; 040import ca.uhn.fhir.rest.api.SearchIncludeDeletedEnum; 041import org.springframework.beans.factory.annotation.Autowired; 042import org.springframework.context.ApplicationContext; 043 044import java.util.Objects; 045 046public class SqlObjectFactory { 047 048 @Autowired 049 private ApplicationContext myApplicationContext; 050 051 public ComboUniqueSearchParameterPredicateBuilder newComboUniqueSearchParameterPredicateBuilder( 052 SearchQueryBuilder theSearchSqlBuilder) { 053 return myApplicationContext.getBean(ComboUniqueSearchParameterPredicateBuilder.class, theSearchSqlBuilder); 054 } 055 056 public ComboNonUniqueSearchParameterPredicateBuilder newComboNonUniqueSearchParameterPredicateBuilder( 057 SearchQueryBuilder theSearchSqlBuilder) { 058 return myApplicationContext.getBean(ComboNonUniqueSearchParameterPredicateBuilder.class, theSearchSqlBuilder); 059 } 060 061 public CoordsPredicateBuilder coordsPredicateBuilder(SearchQueryBuilder theSearchSqlBuilder) { 062 return myApplicationContext.getBean(CoordsPredicateBuilder.class, theSearchSqlBuilder); 063 } 064 065 public DatePredicateBuilder dateIndexTable(SearchQueryBuilder theSearchSqlBuilder) { 066 return myApplicationContext.getBean(DatePredicateBuilder.class, theSearchSqlBuilder); 067 } 068 069 public NumberPredicateBuilder numberIndexTable(SearchQueryBuilder theSearchSqlBuilder) { 070 return myApplicationContext.getBean(NumberPredicateBuilder.class, theSearchSqlBuilder); 071 } 072 073 public QuantityPredicateBuilder quantityIndexTable(SearchQueryBuilder theSearchSqlBuilder) { 074 return myApplicationContext.getBean(QuantityPredicateBuilder.class, theSearchSqlBuilder); 075 } 076 077 public QuantityNormalizedPredicateBuilder quantityNormalizedIndexTable(SearchQueryBuilder theSearchSqlBuilder) { 078 return myApplicationContext.getBean(QuantityNormalizedPredicateBuilder.class, theSearchSqlBuilder); 079 } 080 081 public ResourceLinkPredicateBuilder referenceIndexTable( 082 QueryStack theQueryStack, SearchQueryBuilder theSearchSqlBuilder, boolean theReversed) { 083 return myApplicationContext.getBean( 084 ResourceLinkPredicateBuilder.class, theQueryStack, theSearchSqlBuilder, theReversed); 085 } 086 087 public ResourceTablePredicateBuilder resourceTable( 088 SearchQueryBuilder theSearchSqlBuilder, SearchIncludeDeletedEnum theSearchIncludeDeleted) { 089 // the default is searching non-deleted resources 090 return myApplicationContext.getBean( 091 ResourceTablePredicateBuilder.class, 092 theSearchSqlBuilder, 093 Objects.requireNonNullElse(theSearchIncludeDeleted, SearchIncludeDeletedEnum.NEVER)); 094 } 095 096 public ResourceIdPredicateBuilder resourceId(SearchQueryBuilder theSearchSqlBuilder) { 097 return myApplicationContext.getBean(ResourceIdPredicateBuilder.class, theSearchSqlBuilder); 098 } 099 100 public SearchParamPresentPredicateBuilder searchParamPresentPredicateBuilder( 101 SearchQueryBuilder theSearchSqlBuilder) { 102 return myApplicationContext.getBean(SearchParamPresentPredicateBuilder.class, theSearchSqlBuilder); 103 } 104 105 public StringPredicateBuilder stringIndexTable(SearchQueryBuilder theSearchSqlBuilder) { 106 return myApplicationContext.getBean(StringPredicateBuilder.class, theSearchSqlBuilder); 107 } 108 109 public TokenPredicateBuilder tokenIndexTable(SearchQueryBuilder theSearchSqlBuilder) { 110 return myApplicationContext.getBean(TokenPredicateBuilder.class, theSearchSqlBuilder); 111 } 112 113 public UriPredicateBuilder uriIndexTable(SearchQueryBuilder theSearchSqlBuilder) { 114 return myApplicationContext.getBean(UriPredicateBuilder.class, theSearchSqlBuilder); 115 } 116 117 public TagPredicateBuilder newTagPredicateBuilder(SearchQueryBuilder theSearchSqlBuilder) { 118 return myApplicationContext.getBean(TagPredicateBuilder.class, theSearchSqlBuilder); 119 } 120 121 public ResourceHistoryPredicateBuilder newResourceHistoryPredicateBuilder(SearchQueryBuilder theSearchSqlBuilder) { 122 return myApplicationContext.getBean(ResourceHistoryPredicateBuilder.class, theSearchSqlBuilder); 123 } 124 125 public ResourceHistoryProvenancePredicateBuilder newResourceHistoryProvenancePredicateBuilder( 126 SearchQueryBuilder theSearchSqlBuilder) { 127 return myApplicationContext.getBean(ResourceHistoryProvenancePredicateBuilder.class, theSearchSqlBuilder); 128 } 129 130 public SearchQueryExecutor newSearchQueryExecutor(GeneratedSql theGeneratedSql, Integer theMaxResultsToFetch) { 131 return myApplicationContext.getBean(SearchQueryExecutor.class, theGeneratedSql, theMaxResultsToFetch); 132 } 133}