001/*-
002 * #%L
003 * HAPI FHIR JPA 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.search.builder.models;
021
022import ca.uhn.fhir.i18n.Msg;
023import ca.uhn.fhir.interceptor.model.RequestPartitionId;
024import ca.uhn.fhir.jpa.search.builder.sql.SearchQueryBuilder;
025import ca.uhn.fhir.model.api.IQueryParameterType;
026import ca.uhn.fhir.rest.api.RestSearchParameterTypeEnum;
027import com.healthmarketscience.sqlbuilder.dbspec.basic.DbColumn;
028
029import java.security.InvalidParameterException;
030import java.util.List;
031
032public class MissingParameterQueryParams {
033        /**
034         * The sql builder
035         */
036        private final SearchQueryBuilder mySqlBuilder;
037
038        /**
039         * The parameter type
040         */
041        private final RestSearchParameterTypeEnum myParamType;
042
043        /**
044         * The list of query parameter types (only needed for validation)
045         */
046        private final List<? extends IQueryParameterType> myQueryParameterTypes;
047
048        /**
049         * The missing boolean value from :missing=true/false
050         */
051        private final boolean myIsMissing;
052
053        /**
054         * The name of the parameter.
055         */
056        private final String myParamName;
057
058        /**
059         * The resource type
060         */
061        private final String myResourceType;
062
063        /**
064         * The column on which to join.
065         */
066        private final DbColumn mySourceJoinColumn;
067
068        /**
069         * The partition id
070         */
071        private final RequestPartitionId myRequestPartitionId;
072
073        public MissingParameterQueryParams(
074                        SearchQueryBuilder theSqlBuilder,
075                        RestSearchParameterTypeEnum theParamType,
076                        List<? extends IQueryParameterType> theList,
077                        String theParamName,
078                        String theResourceType,
079                        DbColumn theSourceJoinColumn,
080                        RequestPartitionId theRequestPartitionId) {
081                mySqlBuilder = theSqlBuilder;
082                myParamType = theParamType;
083                myQueryParameterTypes = theList;
084                if (theList.isEmpty()) {
085                        // this will never happen
086                        throw new InvalidParameterException(Msg.code(2140) + " Invalid search parameter list. Cannot be empty!");
087                }
088                myIsMissing = theList.get(0).getMissing();
089                myParamName = theParamName;
090                myResourceType = theResourceType;
091                mySourceJoinColumn = theSourceJoinColumn;
092                myRequestPartitionId = theRequestPartitionId;
093        }
094
095        public SearchQueryBuilder getSqlBuilder() {
096                return mySqlBuilder;
097        }
098
099        public RestSearchParameterTypeEnum getParamType() {
100                return myParamType;
101        }
102
103        public List<? extends IQueryParameterType> getQueryParameterTypes() {
104                return myQueryParameterTypes;
105        }
106
107        public boolean isMissing() {
108                return myIsMissing;
109        }
110
111        public String getParamName() {
112                return myParamName;
113        }
114
115        public String getResourceType() {
116                return myResourceType;
117        }
118
119        public DbColumn getSourceJoinColumn() {
120                return mySourceJoinColumn;
121        }
122
123        public ca.uhn.fhir.interceptor.model.RequestPartitionId getRequestPartitionId() {
124                return myRequestPartitionId;
125        }
126}