
001/*- 002 * #%L 003 * HAPI FHIR - Core Library 004 * %% 005 * Copyright (C) 2014 - 2026 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.repository; 021 022import ca.uhn.fhir.model.api.IQueryParameterType; 023import ca.uhn.fhir.rest.param.NumberParam; 024import com.google.common.collect.Multimap; 025 026import java.util.List; 027import java.util.Map; 028 029/** 030 * Abstract interface for building a repository rest query. 031 */ 032public interface IRepositoryRestQueryBuilder { 033 034 /** 035 * The main method for implementations to add a parameter to the query. 036 * @param theParamName the search parameter name, without modifiers. E.g. "name", or "_sort" 037 * @param theParameters a list of parameters - this is the comma-separated list after the "=" in a rest query. 038 * @return this for chaining 039 */ 040 IRepositoryRestQueryBuilder addOrList(String theParamName, List<IQueryParameterType> theParameters); 041 042 default IRepositoryRestQueryBuilder addOrList(String theParamName, IQueryParameterType... theParameterValues) { 043 return addOrList(theParamName, List.of(theParameterValues)); 044 } 045 046 default IRepositoryRestQueryBuilder addNumericParameter(String theParamName, int theValue) { 047 return addOrList(theParamName, new NumberParam(theValue)); 048 } 049 050 default IRepositoryRestQueryBuilder addAll(Multimap<String, List<IQueryParameterType>> theSearchParameters) { 051 theSearchParameters.entries().forEach(e -> this.addOrList(e.getKey(), e.getValue())); 052 return this; 053 } 054 055 default IRepositoryRestQueryBuilder addAll(Map<String, List<IQueryParameterType>> theSearchParameters) { 056 theSearchParameters.forEach(this::addOrList); 057 return this; 058 } 059}