
001package ca.uhn.fhir.rest.param; 002 003/* 004 * #%L 005 * HAPI FHIR - Core Library 006 * %% 007 * Copyright (C) 2014 - 2023 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.context.FhirContext; 024import ca.uhn.fhir.model.api.IQueryParameterOr; 025import ca.uhn.fhir.model.api.IQueryParameterType; 026import ca.uhn.fhir.rest.api.QualifiedParamList; 027 028import java.util.ArrayList; 029import java.util.List; 030 031public abstract class BaseOrListParam<MT extends BaseOrListParam<?, ?>, PT extends IQueryParameterType> implements IQueryParameterOr<PT> { 032 033 private List<PT> myList = new ArrayList<>(); 034 035 @SuppressWarnings("unchecked") 036 public MT add(PT theParameter) { 037 if (theParameter != null) { 038 myList.add(theParameter); 039 } 040 return (MT) this; 041 } 042 043 public abstract MT addOr(PT theParameter); 044 045 @Override 046 public List<PT> getValuesAsQueryTokens() { 047 return myList; 048 } 049 050 abstract PT newInstance(); 051 052 @Override 053 public void setValuesAsQueryTokens(FhirContext theContext, String theParamName, QualifiedParamList theParameters) { 054 myList.clear(); 055 for (String next : theParameters) { 056 PT nextParam = newInstance(); 057 nextParam.setValueAsQueryToken(theContext, theParamName, theParameters.getQualifier(), next); 058 myList.add(nextParam); 059 } 060 } 061 062 @Override 063 public String toString() { 064 return myList.toString(); 065 } 066 067 public int size() { 068 return myList.size(); 069 } 070}