001/* 002 * #%L 003 * HAPI FHIR - Core Library 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.rest.param; 021 022import ca.uhn.fhir.context.FhirContext; 023import ca.uhn.fhir.model.api.IQueryParameterOr; 024import ca.uhn.fhir.model.api.IQueryParameterType; 025import ca.uhn.fhir.rest.api.QualifiedParamList; 026 027import java.util.ArrayList; 028import java.util.List; 029 030public abstract class BaseOrListParam<MT extends BaseOrListParam<?, ?>, PT extends IQueryParameterType> 031 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}