ca.uhn.fhir.rest.annotation.OptionalParam Maven / Gradle / Ivy
/*
* #%L
* HAPI FHIR - Core Library
* %%
* Copyright (C) 2014 - 2024 Smile CDR, Inc.
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/
package ca.uhn.fhir.rest.annotation;
import ca.uhn.fhir.model.api.IQueryParameterType;
import ca.uhn.fhir.rest.param.CompositeParam;
import ca.uhn.fhir.rest.param.ReferenceParam;
import org.hl7.fhir.instance.model.api.IBaseResource;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Parameter annotation which specifies a search parameter for a {@link Search} method.
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(value = ElementType.PARAMETER)
public @interface OptionalParam {
public static final String ALLOW_CHAIN_ANY = "*";
public static final String ALLOW_CHAIN_NOTCHAINED = "";
/**
* For reference parameters ({@link ReferenceParam}) this value may be
* used to indicate which chain values (if any) are not valid
* for the given parameter. Values here will supercede any values specified
* in {@link #chainWhitelist()}
*
* If the parameter annotated with this annotation is not a {@link ReferenceParam},
* this value must not be populated.
*
*/
String[] chainBlacklist() default {};
/**
* For reference parameters ({@link ReferenceParam}) this value may be
* used to indicate which chain values (if any) are valid for the given
* parameter. If the list contains the value {@link #ALLOW_CHAIN_ANY}, all values are valid. (this is the default)
* If the list contains the value {@link #ALLOW_CHAIN_NOTCHAINED}
* then the reference param only supports the empty chain (i.e. the resource
* ID).
*
* Valid values for this parameter include:
*
*
* chainWhitelist={ OptionalParam.ALLOW_CHAIN_NOTCHAINED }
- Only allow resource reference (no chaining allowed for this parameter)
* chainWhitelist={ OptionalParam.ALLOW_CHAIN_ANY }
- Allow any chaining at all (including a non chained value, this is the default)
* chainWhitelist={ "foo", "bar" }
- Allow property.foo and property.bar
*
*
* Any values specified in
* {@link #chainBlacklist()} will supercede (have priority over) values
* here.
*
*
* If the parameter annotated with this annotation is not a {@link ReferenceParam},
* this value must not be populated.
*
*/
String[] chainWhitelist() default {ALLOW_CHAIN_ANY};
/**
* For composite parameters ({@link CompositeParam}) this value may be
* used to indicate the parameter type(s) which may be referenced by this param.
*
* If the parameter annotated with this annotation is not a {@link CompositeParam},
* this value must not be populated.
*
*/
Class extends IQueryParameterType>[] compositeTypes() default {};
/**
* This is the name for the parameter. Generally this should be a
* simple string (e.g. "name", or "identifier") which will be the name
* of the URL parameter used to populate this method parameter.
*
* Most resource model classes have constants which may be used to
* supply values for this field, e.g. Patient.SP_NAME
or
* Observation.SP_DATE
*
*
* If you wish to specify a parameter for a resource reference which
* only accepts a specific chained value, it is also valid to supply
* a chained name here, such as "patient.name". It is recommended to
* supply this using constants where possible, e.g.
* Observation.SP_SUBJECT + '.' + Patient.SP_IDENTIFIER
*
*/
String name();
/**
* For resource reference parameters ({@link ReferenceParam}) this value may be
* used to indicate the resource type(s) which may be referenced by this param.
*
* If the parameter annotated with this annotation is not a {@link ReferenceParam},
* this value must not be populated.
*
*/
Class extends IBaseResource>[] targetTypes() default {};
}