All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ca.uhn.fhir.rest.annotation.OptionalParam Maven / Gradle / Ivy

There is a newer version: 7.4.5
Show newest version
/*
 * #%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[] 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[] targetTypes() default {}; }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy