001package org.hl7.fhir.r5.model;
002
003
004/*
005  Copyright (c) 2011+, HL7, Inc.
006  All rights reserved.
007  
008  Redistribution and use in source and binary forms, with or without modification, \
009  are permitted provided that the following conditions are met:
010  
011   * Redistributions of source code must retain the above copyright notice, this \
012     list of conditions and the following disclaimer.
013   * Redistributions in binary form must reproduce the above copyright notice, \
014     this list of conditions and the following disclaimer in the documentation \
015     and/or other materials provided with the distribution.
016   * Neither the name of HL7 nor the names of its contributors may be used to 
017     endorse or promote products derived from this software without specific 
018     prior written permission.
019  
020  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND \
021  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED \
022  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. \
023  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, \
024  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT \
025  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR \
026  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, \
027  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) \
028  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE \
029  POSSIBILITY OF SUCH DAMAGE.
030  */
031
032// Generated on Sat, Nov 5, 2022 10:47+1100 for FHIR v5.0.0-ballot
033
034import java.util.ArrayList;
035import java.util.Date;
036import java.util.List;
037import org.hl7.fhir.utilities.Utilities;
038import org.hl7.fhir.r5.model.Enumerations.*;
039import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
040import org.hl7.fhir.exceptions.FHIRException;
041import org.hl7.fhir.instance.model.api.ICompositeType;
042import ca.uhn.fhir.model.api.annotation.ResourceDef;
043import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
044import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
045import ca.uhn.fhir.model.api.annotation.Child;
046import ca.uhn.fhir.model.api.annotation.ChildOrder;
047import ca.uhn.fhir.model.api.annotation.Description;
048import ca.uhn.fhir.model.api.annotation.Block;
049
050/**
051 * A formal computable definition of an operation (on the RESTful interface) or a named query (using the search interaction).
052 */
053@ResourceDef(name="OperationDefinition", profile="http://hl7.org/fhir/StructureDefinition/OperationDefinition")
054public class OperationDefinition extends CanonicalResource {
055
056    public enum OperationKind {
057        /**
058         * This operation is invoked as an operation.
059         */
060        OPERATION, 
061        /**
062         * This operation is a named query, invoked using the search mechanism.
063         */
064        QUERY, 
065        /**
066         * added to help the parsers with the generic types
067         */
068        NULL;
069        public static OperationKind fromCode(String codeString) throws FHIRException {
070            if (codeString == null || "".equals(codeString))
071                return null;
072        if ("operation".equals(codeString))
073          return OPERATION;
074        if ("query".equals(codeString))
075          return QUERY;
076        if (Configuration.isAcceptInvalidEnums())
077          return null;
078        else
079          throw new FHIRException("Unknown OperationKind code '"+codeString+"'");
080        }
081        public String toCode() {
082          switch (this) {
083            case OPERATION: return "operation";
084            case QUERY: return "query";
085            case NULL: return null;
086            default: return "?";
087          }
088        }
089        public String getSystem() {
090          switch (this) {
091            case OPERATION: return "http://hl7.org/fhir/operation-kind";
092            case QUERY: return "http://hl7.org/fhir/operation-kind";
093            case NULL: return null;
094            default: return "?";
095          }
096        }
097        public String getDefinition() {
098          switch (this) {
099            case OPERATION: return "This operation is invoked as an operation.";
100            case QUERY: return "This operation is a named query, invoked using the search mechanism.";
101            case NULL: return null;
102            default: return "?";
103          }
104        }
105        public String getDisplay() {
106          switch (this) {
107            case OPERATION: return "Operation";
108            case QUERY: return "Query";
109            case NULL: return null;
110            default: return "?";
111          }
112        }
113    }
114
115  public static class OperationKindEnumFactory implements EnumFactory<OperationKind> {
116    public OperationKind fromCode(String codeString) throws IllegalArgumentException {
117      if (codeString == null || "".equals(codeString))
118            if (codeString == null || "".equals(codeString))
119                return null;
120        if ("operation".equals(codeString))
121          return OperationKind.OPERATION;
122        if ("query".equals(codeString))
123          return OperationKind.QUERY;
124        throw new IllegalArgumentException("Unknown OperationKind code '"+codeString+"'");
125        }
126        public Enumeration<OperationKind> fromType(Base code) throws FHIRException {
127          if (code == null)
128            return null;
129          if (code.isEmpty())
130            return new Enumeration<OperationKind>(this);
131          String codeString = ((PrimitiveType) code).asStringValue();
132          if (codeString == null || "".equals(codeString))
133            return null;
134        if ("operation".equals(codeString))
135          return new Enumeration<OperationKind>(this, OperationKind.OPERATION);
136        if ("query".equals(codeString))
137          return new Enumeration<OperationKind>(this, OperationKind.QUERY);
138        throw new FHIRException("Unknown OperationKind code '"+codeString+"'");
139        }
140    public String toCode(OperationKind code) {
141      if (code == OperationKind.OPERATION)
142        return "operation";
143      if (code == OperationKind.QUERY)
144        return "query";
145      return "?";
146      }
147    public String toSystem(OperationKind code) {
148      return code.getSystem();
149      }
150    }
151
152    public enum OperationParameterScope {
153        /**
154         * This is a parameter that can be used at the instance level.
155         */
156        INSTANCE, 
157        /**
158         * This is a parameter that can be used at the type level.
159         */
160        TYPE, 
161        /**
162         * This is a parameter that can be used at the system level.
163         */
164        SYSTEM, 
165        /**
166         * added to help the parsers with the generic types
167         */
168        NULL;
169        public static OperationParameterScope fromCode(String codeString) throws FHIRException {
170            if (codeString == null || "".equals(codeString))
171                return null;
172        if ("instance".equals(codeString))
173          return INSTANCE;
174        if ("type".equals(codeString))
175          return TYPE;
176        if ("system".equals(codeString))
177          return SYSTEM;
178        if (Configuration.isAcceptInvalidEnums())
179          return null;
180        else
181          throw new FHIRException("Unknown OperationParameterScope code '"+codeString+"'");
182        }
183        public String toCode() {
184          switch (this) {
185            case INSTANCE: return "instance";
186            case TYPE: return "type";
187            case SYSTEM: return "system";
188            case NULL: return null;
189            default: return "?";
190          }
191        }
192        public String getSystem() {
193          switch (this) {
194            case INSTANCE: return "http://hl7.org/fhir/operation-parameter-scope";
195            case TYPE: return "http://hl7.org/fhir/operation-parameter-scope";
196            case SYSTEM: return "http://hl7.org/fhir/operation-parameter-scope";
197            case NULL: return null;
198            default: return "?";
199          }
200        }
201        public String getDefinition() {
202          switch (this) {
203            case INSTANCE: return "This is a parameter that can be used at the instance level.";
204            case TYPE: return "This is a parameter that can be used at the type level.";
205            case SYSTEM: return "This is a parameter that can be used at the system level.";
206            case NULL: return null;
207            default: return "?";
208          }
209        }
210        public String getDisplay() {
211          switch (this) {
212            case INSTANCE: return "Instance";
213            case TYPE: return "Type";
214            case SYSTEM: return "System";
215            case NULL: return null;
216            default: return "?";
217          }
218        }
219    }
220
221  public static class OperationParameterScopeEnumFactory implements EnumFactory<OperationParameterScope> {
222    public OperationParameterScope fromCode(String codeString) throws IllegalArgumentException {
223      if (codeString == null || "".equals(codeString))
224            if (codeString == null || "".equals(codeString))
225                return null;
226        if ("instance".equals(codeString))
227          return OperationParameterScope.INSTANCE;
228        if ("type".equals(codeString))
229          return OperationParameterScope.TYPE;
230        if ("system".equals(codeString))
231          return OperationParameterScope.SYSTEM;
232        throw new IllegalArgumentException("Unknown OperationParameterScope code '"+codeString+"'");
233        }
234        public Enumeration<OperationParameterScope> fromType(Base code) throws FHIRException {
235          if (code == null)
236            return null;
237          if (code.isEmpty())
238            return new Enumeration<OperationParameterScope>(this);
239          String codeString = ((PrimitiveType) code).asStringValue();
240          if (codeString == null || "".equals(codeString))
241            return null;
242        if ("instance".equals(codeString))
243          return new Enumeration<OperationParameterScope>(this, OperationParameterScope.INSTANCE);
244        if ("type".equals(codeString))
245          return new Enumeration<OperationParameterScope>(this, OperationParameterScope.TYPE);
246        if ("system".equals(codeString))
247          return new Enumeration<OperationParameterScope>(this, OperationParameterScope.SYSTEM);
248        throw new FHIRException("Unknown OperationParameterScope code '"+codeString+"'");
249        }
250    public String toCode(OperationParameterScope code) {
251      if (code == OperationParameterScope.INSTANCE)
252        return "instance";
253      if (code == OperationParameterScope.TYPE)
254        return "type";
255      if (code == OperationParameterScope.SYSTEM)
256        return "system";
257      return "?";
258      }
259    public String toSystem(OperationParameterScope code) {
260      return code.getSystem();
261      }
262    }
263
264    @Block()
265    public static class OperationDefinitionParameterComponent extends BackboneElement implements IBaseBackboneElement {
266        /**
267         * The name of used to identify the parameter.
268         */
269        @Child(name = "name", type = {CodeType.class}, order=1, min=1, max=1, modifier=false, summary=false)
270        @Description(shortDefinition="Name in Parameters.parameter.name or in URL", formalDefinition="The name of used to identify the parameter." )
271        protected CodeType name;
272
273        /**
274         * Whether this is an input or an output parameter.
275         */
276        @Child(name = "use", type = {CodeType.class}, order=2, min=1, max=1, modifier=false, summary=false)
277        @Description(shortDefinition="in | out", formalDefinition="Whether this is an input or an output parameter." )
278        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/operation-parameter-use")
279        protected Enumeration<OperationParameterUse> use;
280
281        /**
282         * If present, indicates that the parameter applies when the operation is being invoked at the specified level.
283         */
284        @Child(name = "scope", type = {CodeType.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
285        @Description(shortDefinition="instance | type | system", formalDefinition="If present, indicates that the parameter applies when the operation is being invoked at the specified level." )
286        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/operation-parameter-scope")
287        protected List<Enumeration<OperationParameterScope>> scope;
288
289        /**
290         * The minimum number of times this parameter SHALL appear in the request or response.
291         */
292        @Child(name = "min", type = {IntegerType.class}, order=4, min=1, max=1, modifier=false, summary=false)
293        @Description(shortDefinition="Minimum Cardinality", formalDefinition="The minimum number of times this parameter SHALL appear in the request or response." )
294        protected IntegerType min;
295
296        /**
297         * The maximum number of times this element is permitted to appear in the request or response.
298         */
299        @Child(name = "max", type = {StringType.class}, order=5, min=1, max=1, modifier=false, summary=false)
300        @Description(shortDefinition="Maximum Cardinality (a number or *)", formalDefinition="The maximum number of times this element is permitted to appear in the request or response." )
301        protected StringType max;
302
303        /**
304         * Describes the meaning or use of this parameter.
305         */
306        @Child(name = "documentation", type = {MarkdownType.class}, order=6, min=0, max=1, modifier=false, summary=false)
307        @Description(shortDefinition="Description of meaning/use", formalDefinition="Describes the meaning or use of this parameter." )
308        protected MarkdownType documentation;
309
310        /**
311         * The type for this parameter.
312         */
313        @Child(name = "type", type = {CodeType.class}, order=7, min=0, max=1, modifier=false, summary=false)
314        @Description(shortDefinition="What type this parameter has", formalDefinition="The type for this parameter." )
315        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/fhir-types")
316        protected Enumeration<FHIRTypes> type;
317
318        /**
319         * Support for polymorphic types. If the parameter type is abstract, this element lists allowed sub-types for the parameter.
320         */
321        @Child(name = "allowedType", type = {CodeType.class}, order=8, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
322        @Description(shortDefinition="Allowed sub-type this parameter can have (if type is abstract)", formalDefinition="Support for polymorphic types. If the parameter type is abstract, this element lists allowed sub-types for the parameter." )
323        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/fhir-types")
324        protected List<Enumeration<FHIRTypes>> allowedType;
325
326        /**
327         * Used when the type is "Reference" or "canonical", and identifies a profile structure or implementation Guide that applies to the target of the reference this parameter refers to. If any profiles are specified, then the content must conform to at least one of them. The URL can be a local reference - to a contained StructureDefinition, or a reference to another StructureDefinition or Implementation Guide by a canonical URL. When an implementation guide is specified, the target resource SHALL conform to at least one profile defined in the implementation guide.
328         */
329        @Child(name = "targetProfile", type = {CanonicalType.class}, order=9, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
330        @Description(shortDefinition="If type is Reference | canonical, allowed targets. If type is 'Resource', then this constrains the allowed reosurce types", formalDefinition="Used when the type is \"Reference\" or \"canonical\", and identifies a profile structure or implementation Guide that applies to the target of the reference this parameter refers to. If any profiles are specified, then the content must conform to at least one of them. The URL can be a local reference - to a contained StructureDefinition, or a reference to another StructureDefinition or Implementation Guide by a canonical URL. When an implementation guide is specified, the target resource SHALL conform to at least one profile defined in the implementation guide." )
331        protected List<CanonicalType> targetProfile;
332
333        /**
334         * How the parameter is understood if/when it used as search parameter. This is only used if the parameter is a string.
335         */
336        @Child(name = "searchType", type = {CodeType.class}, order=10, min=0, max=1, modifier=false, summary=false)
337        @Description(shortDefinition="number | date | string | token | reference | composite | quantity | uri | special", formalDefinition="How the parameter is understood if/when it used as search parameter. This is only used if the parameter is a string." )
338        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/search-param-type")
339        protected Enumeration<SearchParamType> searchType;
340
341        /**
342         * Binds to a value set if this parameter is coded (code, Coding, CodeableConcept).
343         */
344        @Child(name = "binding", type = {}, order=11, min=0, max=1, modifier=false, summary=false)
345        @Description(shortDefinition="ValueSet details if this is coded", formalDefinition="Binds to a value set if this parameter is coded (code, Coding, CodeableConcept)." )
346        protected OperationDefinitionParameterBindingComponent binding;
347
348        /**
349         * Identifies other resource parameters within the operation invocation that are expected to resolve to this resource.
350         */
351        @Child(name = "referencedFrom", type = {}, order=12, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
352        @Description(shortDefinition="References to this parameter", formalDefinition="Identifies other resource parameters within the operation invocation that are expected to resolve to this resource." )
353        protected List<OperationDefinitionParameterReferencedFromComponent> referencedFrom;
354
355        /**
356         * The parts of a nested Parameter.
357         */
358        @Child(name = "part", type = {OperationDefinitionParameterComponent.class}, order=13, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
359        @Description(shortDefinition="Parts of a nested Parameter", formalDefinition="The parts of a nested Parameter." )
360        protected List<OperationDefinitionParameterComponent> part;
361
362        private static final long serialVersionUID = -395202201L;
363
364    /**
365     * Constructor
366     */
367      public OperationDefinitionParameterComponent() {
368        super();
369      }
370
371    /**
372     * Constructor
373     */
374      public OperationDefinitionParameterComponent(String name, OperationParameterUse use, int min, String max) {
375        super();
376        this.setName(name);
377        this.setUse(use);
378        this.setMin(min);
379        this.setMax(max);
380      }
381
382        /**
383         * @return {@link #name} (The name of used to identify the parameter.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
384         */
385        public CodeType getNameElement() { 
386          if (this.name == null)
387            if (Configuration.errorOnAutoCreate())
388              throw new Error("Attempt to auto-create OperationDefinitionParameterComponent.name");
389            else if (Configuration.doAutoCreate())
390              this.name = new CodeType(); // bb
391          return this.name;
392        }
393
394        public boolean hasNameElement() { 
395          return this.name != null && !this.name.isEmpty();
396        }
397
398        public boolean hasName() { 
399          return this.name != null && !this.name.isEmpty();
400        }
401
402        /**
403         * @param value {@link #name} (The name of used to identify the parameter.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
404         */
405        public OperationDefinitionParameterComponent setNameElement(CodeType value) { 
406          this.name = value;
407          return this;
408        }
409
410        /**
411         * @return The name of used to identify the parameter.
412         */
413        public String getName() { 
414          return this.name == null ? null : this.name.getValue();
415        }
416
417        /**
418         * @param value The name of used to identify the parameter.
419         */
420        public OperationDefinitionParameterComponent setName(String value) { 
421            if (this.name == null)
422              this.name = new CodeType();
423            this.name.setValue(value);
424          return this;
425        }
426
427        /**
428         * @return {@link #use} (Whether this is an input or an output parameter.). This is the underlying object with id, value and extensions. The accessor "getUse" gives direct access to the value
429         */
430        public Enumeration<OperationParameterUse> getUseElement() { 
431          if (this.use == null)
432            if (Configuration.errorOnAutoCreate())
433              throw new Error("Attempt to auto-create OperationDefinitionParameterComponent.use");
434            else if (Configuration.doAutoCreate())
435              this.use = new Enumeration<OperationParameterUse>(new OperationParameterUseEnumFactory()); // bb
436          return this.use;
437        }
438
439        public boolean hasUseElement() { 
440          return this.use != null && !this.use.isEmpty();
441        }
442
443        public boolean hasUse() { 
444          return this.use != null && !this.use.isEmpty();
445        }
446
447        /**
448         * @param value {@link #use} (Whether this is an input or an output parameter.). This is the underlying object with id, value and extensions. The accessor "getUse" gives direct access to the value
449         */
450        public OperationDefinitionParameterComponent setUseElement(Enumeration<OperationParameterUse> value) { 
451          this.use = value;
452          return this;
453        }
454
455        /**
456         * @return Whether this is an input or an output parameter.
457         */
458        public OperationParameterUse getUse() { 
459          return this.use == null ? null : this.use.getValue();
460        }
461
462        /**
463         * @param value Whether this is an input or an output parameter.
464         */
465        public OperationDefinitionParameterComponent setUse(OperationParameterUse value) { 
466            if (this.use == null)
467              this.use = new Enumeration<OperationParameterUse>(new OperationParameterUseEnumFactory());
468            this.use.setValue(value);
469          return this;
470        }
471
472        /**
473         * @return {@link #scope} (If present, indicates that the parameter applies when the operation is being invoked at the specified level.)
474         */
475        public List<Enumeration<OperationParameterScope>> getScope() { 
476          if (this.scope == null)
477            this.scope = new ArrayList<Enumeration<OperationParameterScope>>();
478          return this.scope;
479        }
480
481        /**
482         * @return Returns a reference to <code>this</code> for easy method chaining
483         */
484        public OperationDefinitionParameterComponent setScope(List<Enumeration<OperationParameterScope>> theScope) { 
485          this.scope = theScope;
486          return this;
487        }
488
489        public boolean hasScope() { 
490          if (this.scope == null)
491            return false;
492          for (Enumeration<OperationParameterScope> item : this.scope)
493            if (!item.isEmpty())
494              return true;
495          return false;
496        }
497
498        /**
499         * @return {@link #scope} (If present, indicates that the parameter applies when the operation is being invoked at the specified level.)
500         */
501        public Enumeration<OperationParameterScope> addScopeElement() {//2 
502          Enumeration<OperationParameterScope> t = new Enumeration<OperationParameterScope>(new OperationParameterScopeEnumFactory());
503          if (this.scope == null)
504            this.scope = new ArrayList<Enumeration<OperationParameterScope>>();
505          this.scope.add(t);
506          return t;
507        }
508
509        /**
510         * @param value {@link #scope} (If present, indicates that the parameter applies when the operation is being invoked at the specified level.)
511         */
512        public OperationDefinitionParameterComponent addScope(OperationParameterScope value) { //1
513          Enumeration<OperationParameterScope> t = new Enumeration<OperationParameterScope>(new OperationParameterScopeEnumFactory());
514          t.setValue(value);
515          if (this.scope == null)
516            this.scope = new ArrayList<Enumeration<OperationParameterScope>>();
517          this.scope.add(t);
518          return this;
519        }
520
521        /**
522         * @param value {@link #scope} (If present, indicates that the parameter applies when the operation is being invoked at the specified level.)
523         */
524        public boolean hasScope(OperationParameterScope value) { 
525          if (this.scope == null)
526            return false;
527          for (Enumeration<OperationParameterScope> v : this.scope)
528            if (v.getValue().equals(value)) // code
529              return true;
530          return false;
531        }
532
533        /**
534         * @return {@link #min} (The minimum number of times this parameter SHALL appear in the request or response.). This is the underlying object with id, value and extensions. The accessor "getMin" gives direct access to the value
535         */
536        public IntegerType getMinElement() { 
537          if (this.min == null)
538            if (Configuration.errorOnAutoCreate())
539              throw new Error("Attempt to auto-create OperationDefinitionParameterComponent.min");
540            else if (Configuration.doAutoCreate())
541              this.min = new IntegerType(); // bb
542          return this.min;
543        }
544
545        public boolean hasMinElement() { 
546          return this.min != null && !this.min.isEmpty();
547        }
548
549        public boolean hasMin() { 
550          return this.min != null && !this.min.isEmpty();
551        }
552
553        /**
554         * @param value {@link #min} (The minimum number of times this parameter SHALL appear in the request or response.). This is the underlying object with id, value and extensions. The accessor "getMin" gives direct access to the value
555         */
556        public OperationDefinitionParameterComponent setMinElement(IntegerType value) { 
557          this.min = value;
558          return this;
559        }
560
561        /**
562         * @return The minimum number of times this parameter SHALL appear in the request or response.
563         */
564        public int getMin() { 
565          return this.min == null || this.min.isEmpty() ? 0 : this.min.getValue();
566        }
567
568        /**
569         * @param value The minimum number of times this parameter SHALL appear in the request or response.
570         */
571        public OperationDefinitionParameterComponent setMin(int value) { 
572            if (this.min == null)
573              this.min = new IntegerType();
574            this.min.setValue(value);
575          return this;
576        }
577
578        /**
579         * @return {@link #max} (The maximum number of times this element is permitted to appear in the request or response.). This is the underlying object with id, value and extensions. The accessor "getMax" gives direct access to the value
580         */
581        public StringType getMaxElement() { 
582          if (this.max == null)
583            if (Configuration.errorOnAutoCreate())
584              throw new Error("Attempt to auto-create OperationDefinitionParameterComponent.max");
585            else if (Configuration.doAutoCreate())
586              this.max = new StringType(); // bb
587          return this.max;
588        }
589
590        public boolean hasMaxElement() { 
591          return this.max != null && !this.max.isEmpty();
592        }
593
594        public boolean hasMax() { 
595          return this.max != null && !this.max.isEmpty();
596        }
597
598        /**
599         * @param value {@link #max} (The maximum number of times this element is permitted to appear in the request or response.). This is the underlying object with id, value and extensions. The accessor "getMax" gives direct access to the value
600         */
601        public OperationDefinitionParameterComponent setMaxElement(StringType value) { 
602          this.max = value;
603          return this;
604        }
605
606        /**
607         * @return The maximum number of times this element is permitted to appear in the request or response.
608         */
609        public String getMax() { 
610          return this.max == null ? null : this.max.getValue();
611        }
612
613        /**
614         * @param value The maximum number of times this element is permitted to appear in the request or response.
615         */
616        public OperationDefinitionParameterComponent setMax(String value) { 
617            if (this.max == null)
618              this.max = new StringType();
619            this.max.setValue(value);
620          return this;
621        }
622
623        /**
624         * @return {@link #documentation} (Describes the meaning or use of this parameter.). This is the underlying object with id, value and extensions. The accessor "getDocumentation" gives direct access to the value
625         */
626        public MarkdownType getDocumentationElement() { 
627          if (this.documentation == null)
628            if (Configuration.errorOnAutoCreate())
629              throw new Error("Attempt to auto-create OperationDefinitionParameterComponent.documentation");
630            else if (Configuration.doAutoCreate())
631              this.documentation = new MarkdownType(); // bb
632          return this.documentation;
633        }
634
635        public boolean hasDocumentationElement() { 
636          return this.documentation != null && !this.documentation.isEmpty();
637        }
638
639        public boolean hasDocumentation() { 
640          return this.documentation != null && !this.documentation.isEmpty();
641        }
642
643        /**
644         * @param value {@link #documentation} (Describes the meaning or use of this parameter.). This is the underlying object with id, value and extensions. The accessor "getDocumentation" gives direct access to the value
645         */
646        public OperationDefinitionParameterComponent setDocumentationElement(MarkdownType value) { 
647          this.documentation = value;
648          return this;
649        }
650
651        /**
652         * @return Describes the meaning or use of this parameter.
653         */
654        public String getDocumentation() { 
655          return this.documentation == null ? null : this.documentation.getValue();
656        }
657
658        /**
659         * @param value Describes the meaning or use of this parameter.
660         */
661        public OperationDefinitionParameterComponent setDocumentation(String value) { 
662          if (value == null)
663            this.documentation = null;
664          else {
665            if (this.documentation == null)
666              this.documentation = new MarkdownType();
667            this.documentation.setValue(value);
668          }
669          return this;
670        }
671
672        /**
673         * @return {@link #type} (The type for this parameter.). This is the underlying object with id, value and extensions. The accessor "getType" gives direct access to the value
674         */
675        public Enumeration<FHIRTypes> getTypeElement() { 
676          if (this.type == null)
677            if (Configuration.errorOnAutoCreate())
678              throw new Error("Attempt to auto-create OperationDefinitionParameterComponent.type");
679            else if (Configuration.doAutoCreate())
680              this.type = new Enumeration<FHIRTypes>(new FHIRTypesEnumFactory()); // bb
681          return this.type;
682        }
683
684        public boolean hasTypeElement() { 
685          return this.type != null && !this.type.isEmpty();
686        }
687
688        public boolean hasType() { 
689          return this.type != null && !this.type.isEmpty();
690        }
691
692        /**
693         * @param value {@link #type} (The type for this parameter.). This is the underlying object with id, value and extensions. The accessor "getType" gives direct access to the value
694         */
695        public OperationDefinitionParameterComponent setTypeElement(Enumeration<FHIRTypes> value) { 
696          this.type = value;
697          return this;
698        }
699
700        /**
701         * @return The type for this parameter.
702         */
703        public FHIRTypes getType() { 
704          return this.type == null ? null : this.type.getValue();
705        }
706
707        /**
708         * @param value The type for this parameter.
709         */
710        public OperationDefinitionParameterComponent setType(FHIRTypes value) { 
711          if (value == null)
712            this.type = null;
713          else {
714            if (this.type == null)
715              this.type = new Enumeration<FHIRTypes>(new FHIRTypesEnumFactory());
716            this.type.setValue(value);
717          }
718          return this;
719        }
720
721        /**
722         * @return {@link #allowedType} (Support for polymorphic types. If the parameter type is abstract, this element lists allowed sub-types for the parameter.)
723         */
724        public List<Enumeration<FHIRTypes>> getAllowedType() { 
725          if (this.allowedType == null)
726            this.allowedType = new ArrayList<Enumeration<FHIRTypes>>();
727          return this.allowedType;
728        }
729
730        /**
731         * @return Returns a reference to <code>this</code> for easy method chaining
732         */
733        public OperationDefinitionParameterComponent setAllowedType(List<Enumeration<FHIRTypes>> theAllowedType) { 
734          this.allowedType = theAllowedType;
735          return this;
736        }
737
738        public boolean hasAllowedType() { 
739          if (this.allowedType == null)
740            return false;
741          for (Enumeration<FHIRTypes> item : this.allowedType)
742            if (!item.isEmpty())
743              return true;
744          return false;
745        }
746
747        /**
748         * @return {@link #allowedType} (Support for polymorphic types. If the parameter type is abstract, this element lists allowed sub-types for the parameter.)
749         */
750        public Enumeration<FHIRTypes> addAllowedTypeElement() {//2 
751          Enumeration<FHIRTypes> t = new Enumeration<FHIRTypes>(new FHIRTypesEnumFactory());
752          if (this.allowedType == null)
753            this.allowedType = new ArrayList<Enumeration<FHIRTypes>>();
754          this.allowedType.add(t);
755          return t;
756        }
757
758        /**
759         * @param value {@link #allowedType} (Support for polymorphic types. If the parameter type is abstract, this element lists allowed sub-types for the parameter.)
760         */
761        public OperationDefinitionParameterComponent addAllowedType(FHIRTypes value) { //1
762          Enumeration<FHIRTypes> t = new Enumeration<FHIRTypes>(new FHIRTypesEnumFactory());
763          t.setValue(value);
764          if (this.allowedType == null)
765            this.allowedType = new ArrayList<Enumeration<FHIRTypes>>();
766          this.allowedType.add(t);
767          return this;
768        }
769
770        /**
771         * @param value {@link #allowedType} (Support for polymorphic types. If the parameter type is abstract, this element lists allowed sub-types for the parameter.)
772         */
773        public boolean hasAllowedType(FHIRTypes value) { 
774          if (this.allowedType == null)
775            return false;
776          for (Enumeration<FHIRTypes> v : this.allowedType)
777            if (v.getValue().equals(value)) // code
778              return true;
779          return false;
780        }
781
782        /**
783         * @return {@link #targetProfile} (Used when the type is "Reference" or "canonical", and identifies a profile structure or implementation Guide that applies to the target of the reference this parameter refers to. If any profiles are specified, then the content must conform to at least one of them. The URL can be a local reference - to a contained StructureDefinition, or a reference to another StructureDefinition or Implementation Guide by a canonical URL. When an implementation guide is specified, the target resource SHALL conform to at least one profile defined in the implementation guide.)
784         */
785        public List<CanonicalType> getTargetProfile() { 
786          if (this.targetProfile == null)
787            this.targetProfile = new ArrayList<CanonicalType>();
788          return this.targetProfile;
789        }
790
791        /**
792         * @return Returns a reference to <code>this</code> for easy method chaining
793         */
794        public OperationDefinitionParameterComponent setTargetProfile(List<CanonicalType> theTargetProfile) { 
795          this.targetProfile = theTargetProfile;
796          return this;
797        }
798
799        public boolean hasTargetProfile() { 
800          if (this.targetProfile == null)
801            return false;
802          for (CanonicalType item : this.targetProfile)
803            if (!item.isEmpty())
804              return true;
805          return false;
806        }
807
808        /**
809         * @return {@link #targetProfile} (Used when the type is "Reference" or "canonical", and identifies a profile structure or implementation Guide that applies to the target of the reference this parameter refers to. If any profiles are specified, then the content must conform to at least one of them. The URL can be a local reference - to a contained StructureDefinition, or a reference to another StructureDefinition or Implementation Guide by a canonical URL. When an implementation guide is specified, the target resource SHALL conform to at least one profile defined in the implementation guide.)
810         */
811        public CanonicalType addTargetProfileElement() {//2 
812          CanonicalType t = new CanonicalType();
813          if (this.targetProfile == null)
814            this.targetProfile = new ArrayList<CanonicalType>();
815          this.targetProfile.add(t);
816          return t;
817        }
818
819        /**
820         * @param value {@link #targetProfile} (Used when the type is "Reference" or "canonical", and identifies a profile structure or implementation Guide that applies to the target of the reference this parameter refers to. If any profiles are specified, then the content must conform to at least one of them. The URL can be a local reference - to a contained StructureDefinition, or a reference to another StructureDefinition or Implementation Guide by a canonical URL. When an implementation guide is specified, the target resource SHALL conform to at least one profile defined in the implementation guide.)
821         */
822        public OperationDefinitionParameterComponent addTargetProfile(String value) { //1
823          CanonicalType t = new CanonicalType();
824          t.setValue(value);
825          if (this.targetProfile == null)
826            this.targetProfile = new ArrayList<CanonicalType>();
827          this.targetProfile.add(t);
828          return this;
829        }
830
831        /**
832         * @param value {@link #targetProfile} (Used when the type is "Reference" or "canonical", and identifies a profile structure or implementation Guide that applies to the target of the reference this parameter refers to. If any profiles are specified, then the content must conform to at least one of them. The URL can be a local reference - to a contained StructureDefinition, or a reference to another StructureDefinition or Implementation Guide by a canonical URL. When an implementation guide is specified, the target resource SHALL conform to at least one profile defined in the implementation guide.)
833         */
834        public boolean hasTargetProfile(String value) { 
835          if (this.targetProfile == null)
836            return false;
837          for (CanonicalType v : this.targetProfile)
838            if (v.getValue().equals(value)) // canonical
839              return true;
840          return false;
841        }
842
843        /**
844         * @return {@link #searchType} (How the parameter is understood if/when it used as search parameter. This is only used if the parameter is a string.). This is the underlying object with id, value and extensions. The accessor "getSearchType" gives direct access to the value
845         */
846        public Enumeration<SearchParamType> getSearchTypeElement() { 
847          if (this.searchType == null)
848            if (Configuration.errorOnAutoCreate())
849              throw new Error("Attempt to auto-create OperationDefinitionParameterComponent.searchType");
850            else if (Configuration.doAutoCreate())
851              this.searchType = new Enumeration<SearchParamType>(new SearchParamTypeEnumFactory()); // bb
852          return this.searchType;
853        }
854
855        public boolean hasSearchTypeElement() { 
856          return this.searchType != null && !this.searchType.isEmpty();
857        }
858
859        public boolean hasSearchType() { 
860          return this.searchType != null && !this.searchType.isEmpty();
861        }
862
863        /**
864         * @param value {@link #searchType} (How the parameter is understood if/when it used as search parameter. This is only used if the parameter is a string.). This is the underlying object with id, value and extensions. The accessor "getSearchType" gives direct access to the value
865         */
866        public OperationDefinitionParameterComponent setSearchTypeElement(Enumeration<SearchParamType> value) { 
867          this.searchType = value;
868          return this;
869        }
870
871        /**
872         * @return How the parameter is understood if/when it used as search parameter. This is only used if the parameter is a string.
873         */
874        public SearchParamType getSearchType() { 
875          return this.searchType == null ? null : this.searchType.getValue();
876        }
877
878        /**
879         * @param value How the parameter is understood if/when it used as search parameter. This is only used if the parameter is a string.
880         */
881        public OperationDefinitionParameterComponent setSearchType(SearchParamType value) { 
882          if (value == null)
883            this.searchType = null;
884          else {
885            if (this.searchType == null)
886              this.searchType = new Enumeration<SearchParamType>(new SearchParamTypeEnumFactory());
887            this.searchType.setValue(value);
888          }
889          return this;
890        }
891
892        /**
893         * @return {@link #binding} (Binds to a value set if this parameter is coded (code, Coding, CodeableConcept).)
894         */
895        public OperationDefinitionParameterBindingComponent getBinding() { 
896          if (this.binding == null)
897            if (Configuration.errorOnAutoCreate())
898              throw new Error("Attempt to auto-create OperationDefinitionParameterComponent.binding");
899            else if (Configuration.doAutoCreate())
900              this.binding = new OperationDefinitionParameterBindingComponent(); // cc
901          return this.binding;
902        }
903
904        public boolean hasBinding() { 
905          return this.binding != null && !this.binding.isEmpty();
906        }
907
908        /**
909         * @param value {@link #binding} (Binds to a value set if this parameter is coded (code, Coding, CodeableConcept).)
910         */
911        public OperationDefinitionParameterComponent setBinding(OperationDefinitionParameterBindingComponent value) { 
912          this.binding = value;
913          return this;
914        }
915
916        /**
917         * @return {@link #referencedFrom} (Identifies other resource parameters within the operation invocation that are expected to resolve to this resource.)
918         */
919        public List<OperationDefinitionParameterReferencedFromComponent> getReferencedFrom() { 
920          if (this.referencedFrom == null)
921            this.referencedFrom = new ArrayList<OperationDefinitionParameterReferencedFromComponent>();
922          return this.referencedFrom;
923        }
924
925        /**
926         * @return Returns a reference to <code>this</code> for easy method chaining
927         */
928        public OperationDefinitionParameterComponent setReferencedFrom(List<OperationDefinitionParameterReferencedFromComponent> theReferencedFrom) { 
929          this.referencedFrom = theReferencedFrom;
930          return this;
931        }
932
933        public boolean hasReferencedFrom() { 
934          if (this.referencedFrom == null)
935            return false;
936          for (OperationDefinitionParameterReferencedFromComponent item : this.referencedFrom)
937            if (!item.isEmpty())
938              return true;
939          return false;
940        }
941
942        public OperationDefinitionParameterReferencedFromComponent addReferencedFrom() { //3
943          OperationDefinitionParameterReferencedFromComponent t = new OperationDefinitionParameterReferencedFromComponent();
944          if (this.referencedFrom == null)
945            this.referencedFrom = new ArrayList<OperationDefinitionParameterReferencedFromComponent>();
946          this.referencedFrom.add(t);
947          return t;
948        }
949
950        public OperationDefinitionParameterComponent addReferencedFrom(OperationDefinitionParameterReferencedFromComponent t) { //3
951          if (t == null)
952            return this;
953          if (this.referencedFrom == null)
954            this.referencedFrom = new ArrayList<OperationDefinitionParameterReferencedFromComponent>();
955          this.referencedFrom.add(t);
956          return this;
957        }
958
959        /**
960         * @return The first repetition of repeating field {@link #referencedFrom}, creating it if it does not already exist {3}
961         */
962        public OperationDefinitionParameterReferencedFromComponent getReferencedFromFirstRep() { 
963          if (getReferencedFrom().isEmpty()) {
964            addReferencedFrom();
965          }
966          return getReferencedFrom().get(0);
967        }
968
969        /**
970         * @return {@link #part} (The parts of a nested Parameter.)
971         */
972        public List<OperationDefinitionParameterComponent> getPart() { 
973          if (this.part == null)
974            this.part = new ArrayList<OperationDefinitionParameterComponent>();
975          return this.part;
976        }
977
978        /**
979         * @return Returns a reference to <code>this</code> for easy method chaining
980         */
981        public OperationDefinitionParameterComponent setPart(List<OperationDefinitionParameterComponent> thePart) { 
982          this.part = thePart;
983          return this;
984        }
985
986        public boolean hasPart() { 
987          if (this.part == null)
988            return false;
989          for (OperationDefinitionParameterComponent item : this.part)
990            if (!item.isEmpty())
991              return true;
992          return false;
993        }
994
995        public OperationDefinitionParameterComponent addPart() { //3
996          OperationDefinitionParameterComponent t = new OperationDefinitionParameterComponent();
997          if (this.part == null)
998            this.part = new ArrayList<OperationDefinitionParameterComponent>();
999          this.part.add(t);
1000          return t;
1001        }
1002
1003        public OperationDefinitionParameterComponent addPart(OperationDefinitionParameterComponent t) { //3
1004          if (t == null)
1005            return this;
1006          if (this.part == null)
1007            this.part = new ArrayList<OperationDefinitionParameterComponent>();
1008          this.part.add(t);
1009          return this;
1010        }
1011
1012        /**
1013         * @return The first repetition of repeating field {@link #part}, creating it if it does not already exist {3}
1014         */
1015        public OperationDefinitionParameterComponent getPartFirstRep() { 
1016          if (getPart().isEmpty()) {
1017            addPart();
1018          }
1019          return getPart().get(0);
1020        }
1021
1022        protected void listChildren(List<Property> children) {
1023          super.listChildren(children);
1024          children.add(new Property("name", "code", "The name of used to identify the parameter.", 0, 1, name));
1025          children.add(new Property("use", "code", "Whether this is an input or an output parameter.", 0, 1, use));
1026          children.add(new Property("scope", "code", "If present, indicates that the parameter applies when the operation is being invoked at the specified level.", 0, java.lang.Integer.MAX_VALUE, scope));
1027          children.add(new Property("min", "integer", "The minimum number of times this parameter SHALL appear in the request or response.", 0, 1, min));
1028          children.add(new Property("max", "string", "The maximum number of times this element is permitted to appear in the request or response.", 0, 1, max));
1029          children.add(new Property("documentation", "markdown", "Describes the meaning or use of this parameter.", 0, 1, documentation));
1030          children.add(new Property("type", "code", "The type for this parameter.", 0, 1, type));
1031          children.add(new Property("allowedType", "code", "Support for polymorphic types. If the parameter type is abstract, this element lists allowed sub-types for the parameter.", 0, java.lang.Integer.MAX_VALUE, allowedType));
1032          children.add(new Property("targetProfile", "canonical(StructureDefinition)", "Used when the type is \"Reference\" or \"canonical\", and identifies a profile structure or implementation Guide that applies to the target of the reference this parameter refers to. If any profiles are specified, then the content must conform to at least one of them. The URL can be a local reference - to a contained StructureDefinition, or a reference to another StructureDefinition or Implementation Guide by a canonical URL. When an implementation guide is specified, the target resource SHALL conform to at least one profile defined in the implementation guide.", 0, java.lang.Integer.MAX_VALUE, targetProfile));
1033          children.add(new Property("searchType", "code", "How the parameter is understood if/when it used as search parameter. This is only used if the parameter is a string.", 0, 1, searchType));
1034          children.add(new Property("binding", "", "Binds to a value set if this parameter is coded (code, Coding, CodeableConcept).", 0, 1, binding));
1035          children.add(new Property("referencedFrom", "", "Identifies other resource parameters within the operation invocation that are expected to resolve to this resource.", 0, java.lang.Integer.MAX_VALUE, referencedFrom));
1036          children.add(new Property("part", "@OperationDefinition.parameter", "The parts of a nested Parameter.", 0, java.lang.Integer.MAX_VALUE, part));
1037        }
1038
1039        @Override
1040        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1041          switch (_hash) {
1042          case 3373707: /*name*/  return new Property("name", "code", "The name of used to identify the parameter.", 0, 1, name);
1043          case 116103: /*use*/  return new Property("use", "code", "Whether this is an input or an output parameter.", 0, 1, use);
1044          case 109264468: /*scope*/  return new Property("scope", "code", "If present, indicates that the parameter applies when the operation is being invoked at the specified level.", 0, java.lang.Integer.MAX_VALUE, scope);
1045          case 108114: /*min*/  return new Property("min", "integer", "The minimum number of times this parameter SHALL appear in the request or response.", 0, 1, min);
1046          case 107876: /*max*/  return new Property("max", "string", "The maximum number of times this element is permitted to appear in the request or response.", 0, 1, max);
1047          case 1587405498: /*documentation*/  return new Property("documentation", "markdown", "Describes the meaning or use of this parameter.", 0, 1, documentation);
1048          case 3575610: /*type*/  return new Property("type", "code", "The type for this parameter.", 0, 1, type);
1049          case 1512894722: /*allowedType*/  return new Property("allowedType", "code", "Support for polymorphic types. If the parameter type is abstract, this element lists allowed sub-types for the parameter.", 0, java.lang.Integer.MAX_VALUE, allowedType);
1050          case 1994521304: /*targetProfile*/  return new Property("targetProfile", "canonical(StructureDefinition)", "Used when the type is \"Reference\" or \"canonical\", and identifies a profile structure or implementation Guide that applies to the target of the reference this parameter refers to. If any profiles are specified, then the content must conform to at least one of them. The URL can be a local reference - to a contained StructureDefinition, or a reference to another StructureDefinition or Implementation Guide by a canonical URL. When an implementation guide is specified, the target resource SHALL conform to at least one profile defined in the implementation guide.", 0, java.lang.Integer.MAX_VALUE, targetProfile);
1051          case -710454014: /*searchType*/  return new Property("searchType", "code", "How the parameter is understood if/when it used as search parameter. This is only used if the parameter is a string.", 0, 1, searchType);
1052          case -108220795: /*binding*/  return new Property("binding", "", "Binds to a value set if this parameter is coded (code, Coding, CodeableConcept).", 0, 1, binding);
1053          case -1896721981: /*referencedFrom*/  return new Property("referencedFrom", "", "Identifies other resource parameters within the operation invocation that are expected to resolve to this resource.", 0, java.lang.Integer.MAX_VALUE, referencedFrom);
1054          case 3433459: /*part*/  return new Property("part", "@OperationDefinition.parameter", "The parts of a nested Parameter.", 0, java.lang.Integer.MAX_VALUE, part);
1055          default: return super.getNamedProperty(_hash, _name, _checkValid);
1056          }
1057
1058        }
1059
1060      @Override
1061      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1062        switch (hash) {
1063        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // CodeType
1064        case 116103: /*use*/ return this.use == null ? new Base[0] : new Base[] {this.use}; // Enumeration<OperationParameterUse>
1065        case 109264468: /*scope*/ return this.scope == null ? new Base[0] : this.scope.toArray(new Base[this.scope.size()]); // Enumeration<OperationParameterScope>
1066        case 108114: /*min*/ return this.min == null ? new Base[0] : new Base[] {this.min}; // IntegerType
1067        case 107876: /*max*/ return this.max == null ? new Base[0] : new Base[] {this.max}; // StringType
1068        case 1587405498: /*documentation*/ return this.documentation == null ? new Base[0] : new Base[] {this.documentation}; // MarkdownType
1069        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // Enumeration<FHIRTypes>
1070        case 1512894722: /*allowedType*/ return this.allowedType == null ? new Base[0] : this.allowedType.toArray(new Base[this.allowedType.size()]); // Enumeration<FHIRTypes>
1071        case 1994521304: /*targetProfile*/ return this.targetProfile == null ? new Base[0] : this.targetProfile.toArray(new Base[this.targetProfile.size()]); // CanonicalType
1072        case -710454014: /*searchType*/ return this.searchType == null ? new Base[0] : new Base[] {this.searchType}; // Enumeration<SearchParamType>
1073        case -108220795: /*binding*/ return this.binding == null ? new Base[0] : new Base[] {this.binding}; // OperationDefinitionParameterBindingComponent
1074        case -1896721981: /*referencedFrom*/ return this.referencedFrom == null ? new Base[0] : this.referencedFrom.toArray(new Base[this.referencedFrom.size()]); // OperationDefinitionParameterReferencedFromComponent
1075        case 3433459: /*part*/ return this.part == null ? new Base[0] : this.part.toArray(new Base[this.part.size()]); // OperationDefinitionParameterComponent
1076        default: return super.getProperty(hash, name, checkValid);
1077        }
1078
1079      }
1080
1081      @Override
1082      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1083        switch (hash) {
1084        case 3373707: // name
1085          this.name = TypeConvertor.castToCode(value); // CodeType
1086          return value;
1087        case 116103: // use
1088          value = new OperationParameterUseEnumFactory().fromType(TypeConvertor.castToCode(value));
1089          this.use = (Enumeration) value; // Enumeration<OperationParameterUse>
1090          return value;
1091        case 109264468: // scope
1092          value = new OperationParameterScopeEnumFactory().fromType(TypeConvertor.castToCode(value));
1093          this.getScope().add((Enumeration) value); // Enumeration<OperationParameterScope>
1094          return value;
1095        case 108114: // min
1096          this.min = TypeConvertor.castToInteger(value); // IntegerType
1097          return value;
1098        case 107876: // max
1099          this.max = TypeConvertor.castToString(value); // StringType
1100          return value;
1101        case 1587405498: // documentation
1102          this.documentation = TypeConvertor.castToMarkdown(value); // MarkdownType
1103          return value;
1104        case 3575610: // type
1105          value = new FHIRTypesEnumFactory().fromType(TypeConvertor.castToCode(value));
1106          this.type = (Enumeration) value; // Enumeration<FHIRTypes>
1107          return value;
1108        case 1512894722: // allowedType
1109          value = new FHIRTypesEnumFactory().fromType(TypeConvertor.castToCode(value));
1110          this.getAllowedType().add((Enumeration) value); // Enumeration<FHIRTypes>
1111          return value;
1112        case 1994521304: // targetProfile
1113          this.getTargetProfile().add(TypeConvertor.castToCanonical(value)); // CanonicalType
1114          return value;
1115        case -710454014: // searchType
1116          value = new SearchParamTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
1117          this.searchType = (Enumeration) value; // Enumeration<SearchParamType>
1118          return value;
1119        case -108220795: // binding
1120          this.binding = (OperationDefinitionParameterBindingComponent) value; // OperationDefinitionParameterBindingComponent
1121          return value;
1122        case -1896721981: // referencedFrom
1123          this.getReferencedFrom().add((OperationDefinitionParameterReferencedFromComponent) value); // OperationDefinitionParameterReferencedFromComponent
1124          return value;
1125        case 3433459: // part
1126          this.getPart().add((OperationDefinitionParameterComponent) value); // OperationDefinitionParameterComponent
1127          return value;
1128        default: return super.setProperty(hash, name, value);
1129        }
1130
1131      }
1132
1133      @Override
1134      public Base setProperty(String name, Base value) throws FHIRException {
1135        if (name.equals("name")) {
1136          this.name = TypeConvertor.castToCode(value); // CodeType
1137        } else if (name.equals("use")) {
1138          value = new OperationParameterUseEnumFactory().fromType(TypeConvertor.castToCode(value));
1139          this.use = (Enumeration) value; // Enumeration<OperationParameterUse>
1140        } else if (name.equals("scope")) {
1141          value = new OperationParameterScopeEnumFactory().fromType(TypeConvertor.castToCode(value));
1142          this.getScope().add((Enumeration) value);
1143        } else if (name.equals("min")) {
1144          this.min = TypeConvertor.castToInteger(value); // IntegerType
1145        } else if (name.equals("max")) {
1146          this.max = TypeConvertor.castToString(value); // StringType
1147        } else if (name.equals("documentation")) {
1148          this.documentation = TypeConvertor.castToMarkdown(value); // MarkdownType
1149        } else if (name.equals("type")) {
1150          value = new FHIRTypesEnumFactory().fromType(TypeConvertor.castToCode(value));
1151          this.type = (Enumeration) value; // Enumeration<FHIRTypes>
1152        } else if (name.equals("allowedType")) {
1153          value = new FHIRTypesEnumFactory().fromType(TypeConvertor.castToCode(value));
1154          this.getAllowedType().add((Enumeration) value);
1155        } else if (name.equals("targetProfile")) {
1156          this.getTargetProfile().add(TypeConvertor.castToCanonical(value));
1157        } else if (name.equals("searchType")) {
1158          value = new SearchParamTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
1159          this.searchType = (Enumeration) value; // Enumeration<SearchParamType>
1160        } else if (name.equals("binding")) {
1161          this.binding = (OperationDefinitionParameterBindingComponent) value; // OperationDefinitionParameterBindingComponent
1162        } else if (name.equals("referencedFrom")) {
1163          this.getReferencedFrom().add((OperationDefinitionParameterReferencedFromComponent) value);
1164        } else if (name.equals("part")) {
1165          this.getPart().add((OperationDefinitionParameterComponent) value);
1166        } else
1167          return super.setProperty(name, value);
1168        return value;
1169      }
1170
1171      @Override
1172      public Base makeProperty(int hash, String name) throws FHIRException {
1173        switch (hash) {
1174        case 3373707:  return getNameElement();
1175        case 116103:  return getUseElement();
1176        case 109264468:  return addScopeElement();
1177        case 108114:  return getMinElement();
1178        case 107876:  return getMaxElement();
1179        case 1587405498:  return getDocumentationElement();
1180        case 3575610:  return getTypeElement();
1181        case 1512894722:  return addAllowedTypeElement();
1182        case 1994521304:  return addTargetProfileElement();
1183        case -710454014:  return getSearchTypeElement();
1184        case -108220795:  return getBinding();
1185        case -1896721981:  return addReferencedFrom(); 
1186        case 3433459:  return addPart(); 
1187        default: return super.makeProperty(hash, name);
1188        }
1189
1190      }
1191
1192      @Override
1193      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1194        switch (hash) {
1195        case 3373707: /*name*/ return new String[] {"code"};
1196        case 116103: /*use*/ return new String[] {"code"};
1197        case 109264468: /*scope*/ return new String[] {"code"};
1198        case 108114: /*min*/ return new String[] {"integer"};
1199        case 107876: /*max*/ return new String[] {"string"};
1200        case 1587405498: /*documentation*/ return new String[] {"markdown"};
1201        case 3575610: /*type*/ return new String[] {"code"};
1202        case 1512894722: /*allowedType*/ return new String[] {"code"};
1203        case 1994521304: /*targetProfile*/ return new String[] {"canonical"};
1204        case -710454014: /*searchType*/ return new String[] {"code"};
1205        case -108220795: /*binding*/ return new String[] {};
1206        case -1896721981: /*referencedFrom*/ return new String[] {};
1207        case 3433459: /*part*/ return new String[] {"@OperationDefinition.parameter"};
1208        default: return super.getTypesForProperty(hash, name);
1209        }
1210
1211      }
1212
1213      @Override
1214      public Base addChild(String name) throws FHIRException {
1215        if (name.equals("name")) {
1216          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.parameter.name");
1217        }
1218        else if (name.equals("use")) {
1219          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.parameter.use");
1220        }
1221        else if (name.equals("scope")) {
1222          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.parameter.scope");
1223        }
1224        else if (name.equals("min")) {
1225          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.parameter.min");
1226        }
1227        else if (name.equals("max")) {
1228          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.parameter.max");
1229        }
1230        else if (name.equals("documentation")) {
1231          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.parameter.documentation");
1232        }
1233        else if (name.equals("type")) {
1234          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.parameter.type");
1235        }
1236        else if (name.equals("allowedType")) {
1237          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.parameter.allowedType");
1238        }
1239        else if (name.equals("targetProfile")) {
1240          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.parameter.targetProfile");
1241        }
1242        else if (name.equals("searchType")) {
1243          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.parameter.searchType");
1244        }
1245        else if (name.equals("binding")) {
1246          this.binding = new OperationDefinitionParameterBindingComponent();
1247          return this.binding;
1248        }
1249        else if (name.equals("referencedFrom")) {
1250          return addReferencedFrom();
1251        }
1252        else if (name.equals("part")) {
1253          return addPart();
1254        }
1255        else
1256          return super.addChild(name);
1257      }
1258
1259      public OperationDefinitionParameterComponent copy() {
1260        OperationDefinitionParameterComponent dst = new OperationDefinitionParameterComponent();
1261        copyValues(dst);
1262        return dst;
1263      }
1264
1265      public void copyValues(OperationDefinitionParameterComponent dst) {
1266        super.copyValues(dst);
1267        dst.name = name == null ? null : name.copy();
1268        dst.use = use == null ? null : use.copy();
1269        if (scope != null) {
1270          dst.scope = new ArrayList<Enumeration<OperationParameterScope>>();
1271          for (Enumeration<OperationParameterScope> i : scope)
1272            dst.scope.add(i.copy());
1273        };
1274        dst.min = min == null ? null : min.copy();
1275        dst.max = max == null ? null : max.copy();
1276        dst.documentation = documentation == null ? null : documentation.copy();
1277        dst.type = type == null ? null : type.copy();
1278        if (allowedType != null) {
1279          dst.allowedType = new ArrayList<Enumeration<FHIRTypes>>();
1280          for (Enumeration<FHIRTypes> i : allowedType)
1281            dst.allowedType.add(i.copy());
1282        };
1283        if (targetProfile != null) {
1284          dst.targetProfile = new ArrayList<CanonicalType>();
1285          for (CanonicalType i : targetProfile)
1286            dst.targetProfile.add(i.copy());
1287        };
1288        dst.searchType = searchType == null ? null : searchType.copy();
1289        dst.binding = binding == null ? null : binding.copy();
1290        if (referencedFrom != null) {
1291          dst.referencedFrom = new ArrayList<OperationDefinitionParameterReferencedFromComponent>();
1292          for (OperationDefinitionParameterReferencedFromComponent i : referencedFrom)
1293            dst.referencedFrom.add(i.copy());
1294        };
1295        if (part != null) {
1296          dst.part = new ArrayList<OperationDefinitionParameterComponent>();
1297          for (OperationDefinitionParameterComponent i : part)
1298            dst.part.add(i.copy());
1299        };
1300      }
1301
1302      @Override
1303      public boolean equalsDeep(Base other_) {
1304        if (!super.equalsDeep(other_))
1305          return false;
1306        if (!(other_ instanceof OperationDefinitionParameterComponent))
1307          return false;
1308        OperationDefinitionParameterComponent o = (OperationDefinitionParameterComponent) other_;
1309        return compareDeep(name, o.name, true) && compareDeep(use, o.use, true) && compareDeep(scope, o.scope, true)
1310           && compareDeep(min, o.min, true) && compareDeep(max, o.max, true) && compareDeep(documentation, o.documentation, true)
1311           && compareDeep(type, o.type, true) && compareDeep(allowedType, o.allowedType, true) && compareDeep(targetProfile, o.targetProfile, true)
1312           && compareDeep(searchType, o.searchType, true) && compareDeep(binding, o.binding, true) && compareDeep(referencedFrom, o.referencedFrom, true)
1313           && compareDeep(part, o.part, true);
1314      }
1315
1316      @Override
1317      public boolean equalsShallow(Base other_) {
1318        if (!super.equalsShallow(other_))
1319          return false;
1320        if (!(other_ instanceof OperationDefinitionParameterComponent))
1321          return false;
1322        OperationDefinitionParameterComponent o = (OperationDefinitionParameterComponent) other_;
1323        return compareValues(name, o.name, true) && compareValues(use, o.use, true) && compareValues(scope, o.scope, true)
1324           && compareValues(min, o.min, true) && compareValues(max, o.max, true) && compareValues(documentation, o.documentation, true)
1325           && compareValues(type, o.type, true) && compareValues(allowedType, o.allowedType, true) && compareValues(targetProfile, o.targetProfile, true)
1326           && compareValues(searchType, o.searchType, true);
1327      }
1328
1329      public boolean isEmpty() {
1330        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(name, use, scope, min
1331          , max, documentation, type, allowedType, targetProfile, searchType, binding, referencedFrom
1332          , part);
1333      }
1334
1335  public String fhirType() {
1336    return "OperationDefinition.parameter";
1337
1338  }
1339
1340  }
1341
1342    @Block()
1343    public static class OperationDefinitionParameterBindingComponent extends BackboneElement implements IBaseBackboneElement {
1344        /**
1345         * Indicates the degree of conformance expectations associated with this binding - that is, the degree to which the provided value set must be adhered to in the instances.
1346         */
1347        @Child(name = "strength", type = {CodeType.class}, order=1, min=1, max=1, modifier=false, summary=false)
1348        @Description(shortDefinition="required | extensible | preferred | example", formalDefinition="Indicates the degree of conformance expectations associated with this binding - that is, the degree to which the provided value set must be adhered to in the instances." )
1349        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/binding-strength")
1350        protected Enumeration<BindingStrength> strength;
1351
1352        /**
1353         * Points to the value set or external definition (e.g. implicit value set) that identifies the set of codes to be used.
1354         */
1355        @Child(name = "valueSet", type = {CanonicalType.class}, order=2, min=1, max=1, modifier=false, summary=false)
1356        @Description(shortDefinition="Source of value set", formalDefinition="Points to the value set or external definition (e.g. implicit value set) that identifies the set of codes to be used." )
1357        protected CanonicalType valueSet;
1358
1359        private static final long serialVersionUID = -2048653907L;
1360
1361    /**
1362     * Constructor
1363     */
1364      public OperationDefinitionParameterBindingComponent() {
1365        super();
1366      }
1367
1368    /**
1369     * Constructor
1370     */
1371      public OperationDefinitionParameterBindingComponent(BindingStrength strength, String valueSet) {
1372        super();
1373        this.setStrength(strength);
1374        this.setValueSet(valueSet);
1375      }
1376
1377        /**
1378         * @return {@link #strength} (Indicates the degree of conformance expectations associated with this binding - that is, the degree to which the provided value set must be adhered to in the instances.). This is the underlying object with id, value and extensions. The accessor "getStrength" gives direct access to the value
1379         */
1380        public Enumeration<BindingStrength> getStrengthElement() { 
1381          if (this.strength == null)
1382            if (Configuration.errorOnAutoCreate())
1383              throw new Error("Attempt to auto-create OperationDefinitionParameterBindingComponent.strength");
1384            else if (Configuration.doAutoCreate())
1385              this.strength = new Enumeration<BindingStrength>(new BindingStrengthEnumFactory()); // bb
1386          return this.strength;
1387        }
1388
1389        public boolean hasStrengthElement() { 
1390          return this.strength != null && !this.strength.isEmpty();
1391        }
1392
1393        public boolean hasStrength() { 
1394          return this.strength != null && !this.strength.isEmpty();
1395        }
1396
1397        /**
1398         * @param value {@link #strength} (Indicates the degree of conformance expectations associated with this binding - that is, the degree to which the provided value set must be adhered to in the instances.). This is the underlying object with id, value and extensions. The accessor "getStrength" gives direct access to the value
1399         */
1400        public OperationDefinitionParameterBindingComponent setStrengthElement(Enumeration<BindingStrength> value) { 
1401          this.strength = value;
1402          return this;
1403        }
1404
1405        /**
1406         * @return Indicates the degree of conformance expectations associated with this binding - that is, the degree to which the provided value set must be adhered to in the instances.
1407         */
1408        public BindingStrength getStrength() { 
1409          return this.strength == null ? null : this.strength.getValue();
1410        }
1411
1412        /**
1413         * @param value Indicates the degree of conformance expectations associated with this binding - that is, the degree to which the provided value set must be adhered to in the instances.
1414         */
1415        public OperationDefinitionParameterBindingComponent setStrength(BindingStrength value) { 
1416            if (this.strength == null)
1417              this.strength = new Enumeration<BindingStrength>(new BindingStrengthEnumFactory());
1418            this.strength.setValue(value);
1419          return this;
1420        }
1421
1422        /**
1423         * @return {@link #valueSet} (Points to the value set or external definition (e.g. implicit value set) that identifies the set of codes to be used.). This is the underlying object with id, value and extensions. The accessor "getValueSet" gives direct access to the value
1424         */
1425        public CanonicalType getValueSetElement() { 
1426          if (this.valueSet == null)
1427            if (Configuration.errorOnAutoCreate())
1428              throw new Error("Attempt to auto-create OperationDefinitionParameterBindingComponent.valueSet");
1429            else if (Configuration.doAutoCreate())
1430              this.valueSet = new CanonicalType(); // bb
1431          return this.valueSet;
1432        }
1433
1434        public boolean hasValueSetElement() { 
1435          return this.valueSet != null && !this.valueSet.isEmpty();
1436        }
1437
1438        public boolean hasValueSet() { 
1439          return this.valueSet != null && !this.valueSet.isEmpty();
1440        }
1441
1442        /**
1443         * @param value {@link #valueSet} (Points to the value set or external definition (e.g. implicit value set) that identifies the set of codes to be used.). This is the underlying object with id, value and extensions. The accessor "getValueSet" gives direct access to the value
1444         */
1445        public OperationDefinitionParameterBindingComponent setValueSetElement(CanonicalType value) { 
1446          this.valueSet = value;
1447          return this;
1448        }
1449
1450        /**
1451         * @return Points to the value set or external definition (e.g. implicit value set) that identifies the set of codes to be used.
1452         */
1453        public String getValueSet() { 
1454          return this.valueSet == null ? null : this.valueSet.getValue();
1455        }
1456
1457        /**
1458         * @param value Points to the value set or external definition (e.g. implicit value set) that identifies the set of codes to be used.
1459         */
1460        public OperationDefinitionParameterBindingComponent setValueSet(String value) { 
1461            if (this.valueSet == null)
1462              this.valueSet = new CanonicalType();
1463            this.valueSet.setValue(value);
1464          return this;
1465        }
1466
1467        protected void listChildren(List<Property> children) {
1468          super.listChildren(children);
1469          children.add(new Property("strength", "code", "Indicates the degree of conformance expectations associated with this binding - that is, the degree to which the provided value set must be adhered to in the instances.", 0, 1, strength));
1470          children.add(new Property("valueSet", "canonical(ValueSet)", "Points to the value set or external definition (e.g. implicit value set) that identifies the set of codes to be used.", 0, 1, valueSet));
1471        }
1472
1473        @Override
1474        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1475          switch (_hash) {
1476          case 1791316033: /*strength*/  return new Property("strength", "code", "Indicates the degree of conformance expectations associated with this binding - that is, the degree to which the provided value set must be adhered to in the instances.", 0, 1, strength);
1477          case -1410174671: /*valueSet*/  return new Property("valueSet", "canonical(ValueSet)", "Points to the value set or external definition (e.g. implicit value set) that identifies the set of codes to be used.", 0, 1, valueSet);
1478          default: return super.getNamedProperty(_hash, _name, _checkValid);
1479          }
1480
1481        }
1482
1483      @Override
1484      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1485        switch (hash) {
1486        case 1791316033: /*strength*/ return this.strength == null ? new Base[0] : new Base[] {this.strength}; // Enumeration<BindingStrength>
1487        case -1410174671: /*valueSet*/ return this.valueSet == null ? new Base[0] : new Base[] {this.valueSet}; // CanonicalType
1488        default: return super.getProperty(hash, name, checkValid);
1489        }
1490
1491      }
1492
1493      @Override
1494      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1495        switch (hash) {
1496        case 1791316033: // strength
1497          value = new BindingStrengthEnumFactory().fromType(TypeConvertor.castToCode(value));
1498          this.strength = (Enumeration) value; // Enumeration<BindingStrength>
1499          return value;
1500        case -1410174671: // valueSet
1501          this.valueSet = TypeConvertor.castToCanonical(value); // CanonicalType
1502          return value;
1503        default: return super.setProperty(hash, name, value);
1504        }
1505
1506      }
1507
1508      @Override
1509      public Base setProperty(String name, Base value) throws FHIRException {
1510        if (name.equals("strength")) {
1511          value = new BindingStrengthEnumFactory().fromType(TypeConvertor.castToCode(value));
1512          this.strength = (Enumeration) value; // Enumeration<BindingStrength>
1513        } else if (name.equals("valueSet")) {
1514          this.valueSet = TypeConvertor.castToCanonical(value); // CanonicalType
1515        } else
1516          return super.setProperty(name, value);
1517        return value;
1518      }
1519
1520      @Override
1521      public Base makeProperty(int hash, String name) throws FHIRException {
1522        switch (hash) {
1523        case 1791316033:  return getStrengthElement();
1524        case -1410174671:  return getValueSetElement();
1525        default: return super.makeProperty(hash, name);
1526        }
1527
1528      }
1529
1530      @Override
1531      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1532        switch (hash) {
1533        case 1791316033: /*strength*/ return new String[] {"code"};
1534        case -1410174671: /*valueSet*/ return new String[] {"canonical"};
1535        default: return super.getTypesForProperty(hash, name);
1536        }
1537
1538      }
1539
1540      @Override
1541      public Base addChild(String name) throws FHIRException {
1542        if (name.equals("strength")) {
1543          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.parameter.binding.strength");
1544        }
1545        else if (name.equals("valueSet")) {
1546          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.parameter.binding.valueSet");
1547        }
1548        else
1549          return super.addChild(name);
1550      }
1551
1552      public OperationDefinitionParameterBindingComponent copy() {
1553        OperationDefinitionParameterBindingComponent dst = new OperationDefinitionParameterBindingComponent();
1554        copyValues(dst);
1555        return dst;
1556      }
1557
1558      public void copyValues(OperationDefinitionParameterBindingComponent dst) {
1559        super.copyValues(dst);
1560        dst.strength = strength == null ? null : strength.copy();
1561        dst.valueSet = valueSet == null ? null : valueSet.copy();
1562      }
1563
1564      @Override
1565      public boolean equalsDeep(Base other_) {
1566        if (!super.equalsDeep(other_))
1567          return false;
1568        if (!(other_ instanceof OperationDefinitionParameterBindingComponent))
1569          return false;
1570        OperationDefinitionParameterBindingComponent o = (OperationDefinitionParameterBindingComponent) other_;
1571        return compareDeep(strength, o.strength, true) && compareDeep(valueSet, o.valueSet, true);
1572      }
1573
1574      @Override
1575      public boolean equalsShallow(Base other_) {
1576        if (!super.equalsShallow(other_))
1577          return false;
1578        if (!(other_ instanceof OperationDefinitionParameterBindingComponent))
1579          return false;
1580        OperationDefinitionParameterBindingComponent o = (OperationDefinitionParameterBindingComponent) other_;
1581        return compareValues(strength, o.strength, true) && compareValues(valueSet, o.valueSet, true);
1582      }
1583
1584      public boolean isEmpty() {
1585        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(strength, valueSet);
1586      }
1587
1588  public String fhirType() {
1589    return "OperationDefinition.parameter.binding";
1590
1591  }
1592
1593  }
1594
1595    @Block()
1596    public static class OperationDefinitionParameterReferencedFromComponent extends BackboneElement implements IBaseBackboneElement {
1597        /**
1598         * The name of the parameter or dot-separated path of parameter names pointing to the resource parameter that is expected to contain a reference to this resource.
1599         */
1600        @Child(name = "source", type = {StringType.class}, order=1, min=1, max=1, modifier=false, summary=false)
1601        @Description(shortDefinition="Referencing parameter", formalDefinition="The name of the parameter or dot-separated path of parameter names pointing to the resource parameter that is expected to contain a reference to this resource." )
1602        protected StringType source;
1603
1604        /**
1605         * The id of the element in the referencing resource that is expected to resolve to this resource.
1606         */
1607        @Child(name = "sourceId", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=false)
1608        @Description(shortDefinition="Element id of reference", formalDefinition="The id of the element in the referencing resource that is expected to resolve to this resource." )
1609        protected StringType sourceId;
1610
1611        private static final long serialVersionUID = -104239783L;
1612
1613    /**
1614     * Constructor
1615     */
1616      public OperationDefinitionParameterReferencedFromComponent() {
1617        super();
1618      }
1619
1620    /**
1621     * Constructor
1622     */
1623      public OperationDefinitionParameterReferencedFromComponent(String source) {
1624        super();
1625        this.setSource(source);
1626      }
1627
1628        /**
1629         * @return {@link #source} (The name of the parameter or dot-separated path of parameter names pointing to the resource parameter that is expected to contain a reference to this resource.). This is the underlying object with id, value and extensions. The accessor "getSource" gives direct access to the value
1630         */
1631        public StringType getSourceElement() { 
1632          if (this.source == null)
1633            if (Configuration.errorOnAutoCreate())
1634              throw new Error("Attempt to auto-create OperationDefinitionParameterReferencedFromComponent.source");
1635            else if (Configuration.doAutoCreate())
1636              this.source = new StringType(); // bb
1637          return this.source;
1638        }
1639
1640        public boolean hasSourceElement() { 
1641          return this.source != null && !this.source.isEmpty();
1642        }
1643
1644        public boolean hasSource() { 
1645          return this.source != null && !this.source.isEmpty();
1646        }
1647
1648        /**
1649         * @param value {@link #source} (The name of the parameter or dot-separated path of parameter names pointing to the resource parameter that is expected to contain a reference to this resource.). This is the underlying object with id, value and extensions. The accessor "getSource" gives direct access to the value
1650         */
1651        public OperationDefinitionParameterReferencedFromComponent setSourceElement(StringType value) { 
1652          this.source = value;
1653          return this;
1654        }
1655
1656        /**
1657         * @return The name of the parameter or dot-separated path of parameter names pointing to the resource parameter that is expected to contain a reference to this resource.
1658         */
1659        public String getSource() { 
1660          return this.source == null ? null : this.source.getValue();
1661        }
1662
1663        /**
1664         * @param value The name of the parameter or dot-separated path of parameter names pointing to the resource parameter that is expected to contain a reference to this resource.
1665         */
1666        public OperationDefinitionParameterReferencedFromComponent setSource(String value) { 
1667            if (this.source == null)
1668              this.source = new StringType();
1669            this.source.setValue(value);
1670          return this;
1671        }
1672
1673        /**
1674         * @return {@link #sourceId} (The id of the element in the referencing resource that is expected to resolve to this resource.). This is the underlying object with id, value and extensions. The accessor "getSourceId" gives direct access to the value
1675         */
1676        public StringType getSourceIdElement() { 
1677          if (this.sourceId == null)
1678            if (Configuration.errorOnAutoCreate())
1679              throw new Error("Attempt to auto-create OperationDefinitionParameterReferencedFromComponent.sourceId");
1680            else if (Configuration.doAutoCreate())
1681              this.sourceId = new StringType(); // bb
1682          return this.sourceId;
1683        }
1684
1685        public boolean hasSourceIdElement() { 
1686          return this.sourceId != null && !this.sourceId.isEmpty();
1687        }
1688
1689        public boolean hasSourceId() { 
1690          return this.sourceId != null && !this.sourceId.isEmpty();
1691        }
1692
1693        /**
1694         * @param value {@link #sourceId} (The id of the element in the referencing resource that is expected to resolve to this resource.). This is the underlying object with id, value and extensions. The accessor "getSourceId" gives direct access to the value
1695         */
1696        public OperationDefinitionParameterReferencedFromComponent setSourceIdElement(StringType value) { 
1697          this.sourceId = value;
1698          return this;
1699        }
1700
1701        /**
1702         * @return The id of the element in the referencing resource that is expected to resolve to this resource.
1703         */
1704        public String getSourceId() { 
1705          return this.sourceId == null ? null : this.sourceId.getValue();
1706        }
1707
1708        /**
1709         * @param value The id of the element in the referencing resource that is expected to resolve to this resource.
1710         */
1711        public OperationDefinitionParameterReferencedFromComponent setSourceId(String value) { 
1712          if (Utilities.noString(value))
1713            this.sourceId = null;
1714          else {
1715            if (this.sourceId == null)
1716              this.sourceId = new StringType();
1717            this.sourceId.setValue(value);
1718          }
1719          return this;
1720        }
1721
1722        protected void listChildren(List<Property> children) {
1723          super.listChildren(children);
1724          children.add(new Property("source", "string", "The name of the parameter or dot-separated path of parameter names pointing to the resource parameter that is expected to contain a reference to this resource.", 0, 1, source));
1725          children.add(new Property("sourceId", "string", "The id of the element in the referencing resource that is expected to resolve to this resource.", 0, 1, sourceId));
1726        }
1727
1728        @Override
1729        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1730          switch (_hash) {
1731          case -896505829: /*source*/  return new Property("source", "string", "The name of the parameter or dot-separated path of parameter names pointing to the resource parameter that is expected to contain a reference to this resource.", 0, 1, source);
1732          case 1746327190: /*sourceId*/  return new Property("sourceId", "string", "The id of the element in the referencing resource that is expected to resolve to this resource.", 0, 1, sourceId);
1733          default: return super.getNamedProperty(_hash, _name, _checkValid);
1734          }
1735
1736        }
1737
1738      @Override
1739      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1740        switch (hash) {
1741        case -896505829: /*source*/ return this.source == null ? new Base[0] : new Base[] {this.source}; // StringType
1742        case 1746327190: /*sourceId*/ return this.sourceId == null ? new Base[0] : new Base[] {this.sourceId}; // StringType
1743        default: return super.getProperty(hash, name, checkValid);
1744        }
1745
1746      }
1747
1748      @Override
1749      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1750        switch (hash) {
1751        case -896505829: // source
1752          this.source = TypeConvertor.castToString(value); // StringType
1753          return value;
1754        case 1746327190: // sourceId
1755          this.sourceId = TypeConvertor.castToString(value); // StringType
1756          return value;
1757        default: return super.setProperty(hash, name, value);
1758        }
1759
1760      }
1761
1762      @Override
1763      public Base setProperty(String name, Base value) throws FHIRException {
1764        if (name.equals("source")) {
1765          this.source = TypeConvertor.castToString(value); // StringType
1766        } else if (name.equals("sourceId")) {
1767          this.sourceId = TypeConvertor.castToString(value); // StringType
1768        } else
1769          return super.setProperty(name, value);
1770        return value;
1771      }
1772
1773      @Override
1774      public Base makeProperty(int hash, String name) throws FHIRException {
1775        switch (hash) {
1776        case -896505829:  return getSourceElement();
1777        case 1746327190:  return getSourceIdElement();
1778        default: return super.makeProperty(hash, name);
1779        }
1780
1781      }
1782
1783      @Override
1784      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1785        switch (hash) {
1786        case -896505829: /*source*/ return new String[] {"string"};
1787        case 1746327190: /*sourceId*/ return new String[] {"string"};
1788        default: return super.getTypesForProperty(hash, name);
1789        }
1790
1791      }
1792
1793      @Override
1794      public Base addChild(String name) throws FHIRException {
1795        if (name.equals("source")) {
1796          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.parameter.referencedFrom.source");
1797        }
1798        else if (name.equals("sourceId")) {
1799          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.parameter.referencedFrom.sourceId");
1800        }
1801        else
1802          return super.addChild(name);
1803      }
1804
1805      public OperationDefinitionParameterReferencedFromComponent copy() {
1806        OperationDefinitionParameterReferencedFromComponent dst = new OperationDefinitionParameterReferencedFromComponent();
1807        copyValues(dst);
1808        return dst;
1809      }
1810
1811      public void copyValues(OperationDefinitionParameterReferencedFromComponent dst) {
1812        super.copyValues(dst);
1813        dst.source = source == null ? null : source.copy();
1814        dst.sourceId = sourceId == null ? null : sourceId.copy();
1815      }
1816
1817      @Override
1818      public boolean equalsDeep(Base other_) {
1819        if (!super.equalsDeep(other_))
1820          return false;
1821        if (!(other_ instanceof OperationDefinitionParameterReferencedFromComponent))
1822          return false;
1823        OperationDefinitionParameterReferencedFromComponent o = (OperationDefinitionParameterReferencedFromComponent) other_;
1824        return compareDeep(source, o.source, true) && compareDeep(sourceId, o.sourceId, true);
1825      }
1826
1827      @Override
1828      public boolean equalsShallow(Base other_) {
1829        if (!super.equalsShallow(other_))
1830          return false;
1831        if (!(other_ instanceof OperationDefinitionParameterReferencedFromComponent))
1832          return false;
1833        OperationDefinitionParameterReferencedFromComponent o = (OperationDefinitionParameterReferencedFromComponent) other_;
1834        return compareValues(source, o.source, true) && compareValues(sourceId, o.sourceId, true);
1835      }
1836
1837      public boolean isEmpty() {
1838        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(source, sourceId);
1839      }
1840
1841  public String fhirType() {
1842    return "OperationDefinition.parameter.referencedFrom";
1843
1844  }
1845
1846  }
1847
1848    @Block()
1849    public static class OperationDefinitionOverloadComponent extends BackboneElement implements IBaseBackboneElement {
1850        /**
1851         * Name of parameter to include in overload.
1852         */
1853        @Child(name = "parameterName", type = {StringType.class}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1854        @Description(shortDefinition="Name of parameter to include in overload", formalDefinition="Name of parameter to include in overload." )
1855        protected List<StringType> parameterName;
1856
1857        /**
1858         * Comments to go on overload.
1859         */
1860        @Child(name = "comment", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=false)
1861        @Description(shortDefinition="Comments to go on overload", formalDefinition="Comments to go on overload." )
1862        protected StringType comment;
1863
1864        private static final long serialVersionUID = -907948545L;
1865
1866    /**
1867     * Constructor
1868     */
1869      public OperationDefinitionOverloadComponent() {
1870        super();
1871      }
1872
1873        /**
1874         * @return {@link #parameterName} (Name of parameter to include in overload.)
1875         */
1876        public List<StringType> getParameterName() { 
1877          if (this.parameterName == null)
1878            this.parameterName = new ArrayList<StringType>();
1879          return this.parameterName;
1880        }
1881
1882        /**
1883         * @return Returns a reference to <code>this</code> for easy method chaining
1884         */
1885        public OperationDefinitionOverloadComponent setParameterName(List<StringType> theParameterName) { 
1886          this.parameterName = theParameterName;
1887          return this;
1888        }
1889
1890        public boolean hasParameterName() { 
1891          if (this.parameterName == null)
1892            return false;
1893          for (StringType item : this.parameterName)
1894            if (!item.isEmpty())
1895              return true;
1896          return false;
1897        }
1898
1899        /**
1900         * @return {@link #parameterName} (Name of parameter to include in overload.)
1901         */
1902        public StringType addParameterNameElement() {//2 
1903          StringType t = new StringType();
1904          if (this.parameterName == null)
1905            this.parameterName = new ArrayList<StringType>();
1906          this.parameterName.add(t);
1907          return t;
1908        }
1909
1910        /**
1911         * @param value {@link #parameterName} (Name of parameter to include in overload.)
1912         */
1913        public OperationDefinitionOverloadComponent addParameterName(String value) { //1
1914          StringType t = new StringType();
1915          t.setValue(value);
1916          if (this.parameterName == null)
1917            this.parameterName = new ArrayList<StringType>();
1918          this.parameterName.add(t);
1919          return this;
1920        }
1921
1922        /**
1923         * @param value {@link #parameterName} (Name of parameter to include in overload.)
1924         */
1925        public boolean hasParameterName(String value) { 
1926          if (this.parameterName == null)
1927            return false;
1928          for (StringType v : this.parameterName)
1929            if (v.getValue().equals(value)) // string
1930              return true;
1931          return false;
1932        }
1933
1934        /**
1935         * @return {@link #comment} (Comments to go on overload.). This is the underlying object with id, value and extensions. The accessor "getComment" gives direct access to the value
1936         */
1937        public StringType getCommentElement() { 
1938          if (this.comment == null)
1939            if (Configuration.errorOnAutoCreate())
1940              throw new Error("Attempt to auto-create OperationDefinitionOverloadComponent.comment");
1941            else if (Configuration.doAutoCreate())
1942              this.comment = new StringType(); // bb
1943          return this.comment;
1944        }
1945
1946        public boolean hasCommentElement() { 
1947          return this.comment != null && !this.comment.isEmpty();
1948        }
1949
1950        public boolean hasComment() { 
1951          return this.comment != null && !this.comment.isEmpty();
1952        }
1953
1954        /**
1955         * @param value {@link #comment} (Comments to go on overload.). This is the underlying object with id, value and extensions. The accessor "getComment" gives direct access to the value
1956         */
1957        public OperationDefinitionOverloadComponent setCommentElement(StringType value) { 
1958          this.comment = value;
1959          return this;
1960        }
1961
1962        /**
1963         * @return Comments to go on overload.
1964         */
1965        public String getComment() { 
1966          return this.comment == null ? null : this.comment.getValue();
1967        }
1968
1969        /**
1970         * @param value Comments to go on overload.
1971         */
1972        public OperationDefinitionOverloadComponent setComment(String value) { 
1973          if (Utilities.noString(value))
1974            this.comment = null;
1975          else {
1976            if (this.comment == null)
1977              this.comment = new StringType();
1978            this.comment.setValue(value);
1979          }
1980          return this;
1981        }
1982
1983        protected void listChildren(List<Property> children) {
1984          super.listChildren(children);
1985          children.add(new Property("parameterName", "string", "Name of parameter to include in overload.", 0, java.lang.Integer.MAX_VALUE, parameterName));
1986          children.add(new Property("comment", "string", "Comments to go on overload.", 0, 1, comment));
1987        }
1988
1989        @Override
1990        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1991          switch (_hash) {
1992          case -379607596: /*parameterName*/  return new Property("parameterName", "string", "Name of parameter to include in overload.", 0, java.lang.Integer.MAX_VALUE, parameterName);
1993          case 950398559: /*comment*/  return new Property("comment", "string", "Comments to go on overload.", 0, 1, comment);
1994          default: return super.getNamedProperty(_hash, _name, _checkValid);
1995          }
1996
1997        }
1998
1999      @Override
2000      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2001        switch (hash) {
2002        case -379607596: /*parameterName*/ return this.parameterName == null ? new Base[0] : this.parameterName.toArray(new Base[this.parameterName.size()]); // StringType
2003        case 950398559: /*comment*/ return this.comment == null ? new Base[0] : new Base[] {this.comment}; // StringType
2004        default: return super.getProperty(hash, name, checkValid);
2005        }
2006
2007      }
2008
2009      @Override
2010      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2011        switch (hash) {
2012        case -379607596: // parameterName
2013          this.getParameterName().add(TypeConvertor.castToString(value)); // StringType
2014          return value;
2015        case 950398559: // comment
2016          this.comment = TypeConvertor.castToString(value); // StringType
2017          return value;
2018        default: return super.setProperty(hash, name, value);
2019        }
2020
2021      }
2022
2023      @Override
2024      public Base setProperty(String name, Base value) throws FHIRException {
2025        if (name.equals("parameterName")) {
2026          this.getParameterName().add(TypeConvertor.castToString(value));
2027        } else if (name.equals("comment")) {
2028          this.comment = TypeConvertor.castToString(value); // StringType
2029        } else
2030          return super.setProperty(name, value);
2031        return value;
2032      }
2033
2034      @Override
2035      public Base makeProperty(int hash, String name) throws FHIRException {
2036        switch (hash) {
2037        case -379607596:  return addParameterNameElement();
2038        case 950398559:  return getCommentElement();
2039        default: return super.makeProperty(hash, name);
2040        }
2041
2042      }
2043
2044      @Override
2045      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2046        switch (hash) {
2047        case -379607596: /*parameterName*/ return new String[] {"string"};
2048        case 950398559: /*comment*/ return new String[] {"string"};
2049        default: return super.getTypesForProperty(hash, name);
2050        }
2051
2052      }
2053
2054      @Override
2055      public Base addChild(String name) throws FHIRException {
2056        if (name.equals("parameterName")) {
2057          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.overload.parameterName");
2058        }
2059        else if (name.equals("comment")) {
2060          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.overload.comment");
2061        }
2062        else
2063          return super.addChild(name);
2064      }
2065
2066      public OperationDefinitionOverloadComponent copy() {
2067        OperationDefinitionOverloadComponent dst = new OperationDefinitionOverloadComponent();
2068        copyValues(dst);
2069        return dst;
2070      }
2071
2072      public void copyValues(OperationDefinitionOverloadComponent dst) {
2073        super.copyValues(dst);
2074        if (parameterName != null) {
2075          dst.parameterName = new ArrayList<StringType>();
2076          for (StringType i : parameterName)
2077            dst.parameterName.add(i.copy());
2078        };
2079        dst.comment = comment == null ? null : comment.copy();
2080      }
2081
2082      @Override
2083      public boolean equalsDeep(Base other_) {
2084        if (!super.equalsDeep(other_))
2085          return false;
2086        if (!(other_ instanceof OperationDefinitionOverloadComponent))
2087          return false;
2088        OperationDefinitionOverloadComponent o = (OperationDefinitionOverloadComponent) other_;
2089        return compareDeep(parameterName, o.parameterName, true) && compareDeep(comment, o.comment, true)
2090          ;
2091      }
2092
2093      @Override
2094      public boolean equalsShallow(Base other_) {
2095        if (!super.equalsShallow(other_))
2096          return false;
2097        if (!(other_ instanceof OperationDefinitionOverloadComponent))
2098          return false;
2099        OperationDefinitionOverloadComponent o = (OperationDefinitionOverloadComponent) other_;
2100        return compareValues(parameterName, o.parameterName, true) && compareValues(comment, o.comment, true)
2101          ;
2102      }
2103
2104      public boolean isEmpty() {
2105        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(parameterName, comment);
2106      }
2107
2108  public String fhirType() {
2109    return "OperationDefinition.overload";
2110
2111  }
2112
2113  }
2114
2115    /**
2116     * An absolute URI that is used to identify this operation definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which an authoritative instance of this operation definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the operation definition is stored on different servers.
2117     */
2118    @Child(name = "url", type = {UriType.class}, order=0, min=0, max=1, modifier=false, summary=true)
2119    @Description(shortDefinition="Canonical identifier for this operation definition, represented as a URI (globally unique)", formalDefinition="An absolute URI that is used to identify this operation definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which an authoritative instance of this operation definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the operation definition is stored on different servers." )
2120    protected UriType url;
2121
2122    /**
2123     * The identifier that is used to identify this version of the operation definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the operation definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.
2124     */
2125    @Child(name = "version", type = {StringType.class}, order=1, min=0, max=1, modifier=false, summary=true)
2126    @Description(shortDefinition="Business version of the operation definition", formalDefinition="The identifier that is used to identify this version of the operation definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the operation definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence." )
2127    protected StringType version;
2128
2129    /**
2130     * Indicates the mechanism used to compare versions to determine which is more current.
2131     */
2132    @Child(name = "versionAlgorithm", type = {StringType.class, Coding.class}, order=2, min=0, max=1, modifier=false, summary=true)
2133    @Description(shortDefinition="How to compare versions", formalDefinition="Indicates the mechanism used to compare versions to determine which is more current." )
2134    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/version-algorithm")
2135    protected DataType versionAlgorithm;
2136
2137    /**
2138     * A natural language name identifying the operation definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.
2139     */
2140    @Child(name = "name", type = {StringType.class}, order=3, min=1, max=1, modifier=false, summary=true)
2141    @Description(shortDefinition="Name for this operation definition (computer friendly)", formalDefinition="A natural language name identifying the operation definition. This name should be usable as an identifier for the module by machine processing applications such as code generation." )
2142    protected StringType name;
2143
2144    /**
2145     * A short, descriptive, user-friendly title for the operation definition.
2146     */
2147    @Child(name = "title", type = {StringType.class}, order=4, min=0, max=1, modifier=false, summary=true)
2148    @Description(shortDefinition="Name for this operation definition (human friendly)", formalDefinition="A short, descriptive, user-friendly title for the operation definition." )
2149    protected StringType title;
2150
2151    /**
2152     * The status of this operation definition. Enables tracking the life-cycle of the content.
2153     */
2154    @Child(name = "status", type = {CodeType.class}, order=5, min=1, max=1, modifier=true, summary=true)
2155    @Description(shortDefinition="draft | active | retired | unknown", formalDefinition="The status of this operation definition. Enables tracking the life-cycle of the content." )
2156    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/publication-status")
2157    protected Enumeration<PublicationStatus> status;
2158
2159    /**
2160     * Whether this is an operation or a named query.
2161     */
2162    @Child(name = "kind", type = {CodeType.class}, order=6, min=1, max=1, modifier=false, summary=true)
2163    @Description(shortDefinition="operation | query", formalDefinition="Whether this is an operation or a named query." )
2164    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/operation-kind")
2165    protected Enumeration<OperationKind> kind;
2166
2167    /**
2168     * A Boolean value to indicate that this operation definition is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.
2169     */
2170    @Child(name = "experimental", type = {BooleanType.class}, order=7, min=0, max=1, modifier=false, summary=true)
2171    @Description(shortDefinition="For testing purposes, not real usage", formalDefinition="A Boolean value to indicate that this operation definition is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage." )
2172    protected BooleanType experimental;
2173
2174    /**
2175     * The date  (and optionally time) when the operation definition was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the operation definition changes.
2176     */
2177    @Child(name = "date", type = {DateTimeType.class}, order=8, min=0, max=1, modifier=false, summary=true)
2178    @Description(shortDefinition="Date last changed", formalDefinition="The date  (and optionally time) when the operation definition was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the operation definition changes." )
2179    protected DateTimeType date;
2180
2181    /**
2182     * The name of the organization or individual responsible for the release and ongoing maintenance of the operation definition.
2183     */
2184    @Child(name = "publisher", type = {StringType.class}, order=9, min=0, max=1, modifier=false, summary=true)
2185    @Description(shortDefinition="Name of the publisher/steward (organization or individual)", formalDefinition="The name of the organization or individual responsible for the release and ongoing maintenance of the operation definition." )
2186    protected StringType publisher;
2187
2188    /**
2189     * Contact details to assist a user in finding and communicating with the publisher.
2190     */
2191    @Child(name = "contact", type = {ContactDetail.class}, order=10, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2192    @Description(shortDefinition="Contact details for the publisher", formalDefinition="Contact details to assist a user in finding and communicating with the publisher." )
2193    protected List<ContactDetail> contact;
2194
2195    /**
2196     * A free text natural language description of the operation definition from a consumer's perspective.
2197     */
2198    @Child(name = "description", type = {MarkdownType.class}, order=11, min=0, max=1, modifier=false, summary=false)
2199    @Description(shortDefinition="Natural language description of the operation definition", formalDefinition="A free text natural language description of the operation definition from a consumer's perspective." )
2200    protected MarkdownType description;
2201
2202    /**
2203     * The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate operation definition instances.
2204     */
2205    @Child(name = "useContext", type = {UsageContext.class}, order=12, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2206    @Description(shortDefinition="The context that the content is intended to support", formalDefinition="The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate operation definition instances." )
2207    protected List<UsageContext> useContext;
2208
2209    /**
2210     * A legal or geographic region in which the operation definition is intended to be used.
2211     */
2212    @Child(name = "jurisdiction", type = {CodeableConcept.class}, order=13, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2213    @Description(shortDefinition="Intended jurisdiction for operation definition (if applicable)", formalDefinition="A legal or geographic region in which the operation definition is intended to be used." )
2214    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/jurisdiction")
2215    protected List<CodeableConcept> jurisdiction;
2216
2217    /**
2218     * Explanation of why this operation definition is needed and why it has been designed as it has.
2219     */
2220    @Child(name = "purpose", type = {MarkdownType.class}, order=14, min=0, max=1, modifier=false, summary=false)
2221    @Description(shortDefinition="Why this operation definition is defined", formalDefinition="Explanation of why this operation definition is needed and why it has been designed as it has." )
2222    protected MarkdownType purpose;
2223
2224    /**
2225     * A copyright statement relating to the OperationDefinition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the OperationDefinition.
2226     */
2227    @Child(name = "copyright", type = {MarkdownType.class}, order=15, min=0, max=1, modifier=false, summary=false)
2228    @Description(shortDefinition="Use and/or publishing restrictions", formalDefinition="A copyright statement relating to the OperationDefinition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the OperationDefinition." )
2229    protected MarkdownType copyright;
2230
2231    /**
2232     * A short string (<50 characters), suitable for inclusion in a page footer that identifies the copyright holder, effective period, and optionally whether rights are resctricted. (e.g. 'All rights reserved', 'Some rights reserved').
2233     */
2234    @Child(name = "copyrightLabel", type = {StringType.class}, order=16, min=0, max=1, modifier=false, summary=false)
2235    @Description(shortDefinition="Copyright holder and year(s)", formalDefinition="A short string (<50 characters), suitable for inclusion in a page footer that identifies the copyright holder, effective period, and optionally whether rights are resctricted. (e.g. 'All rights reserved', 'Some rights reserved')." )
2236    protected StringType copyrightLabel;
2237
2238    /**
2239     * Whether the operation affects state. Side effects such as producing audit trail entries do not count as 'affecting  state'.
2240     */
2241    @Child(name = "affectsState", type = {BooleanType.class}, order=17, min=0, max=1, modifier=false, summary=true)
2242    @Description(shortDefinition="Whether content is changed by the operation", formalDefinition="Whether the operation affects state. Side effects such as producing audit trail entries do not count as 'affecting  state'." )
2243    protected BooleanType affectsState;
2244
2245    /**
2246     * The label that is recommended to be used in the URL for this operation. In some cases, servers may need to use a different CapabilityStatement operation.name to differentiate between multiple SearchParameters that happen to have the same code.
2247     */
2248    @Child(name = "code", type = {CodeType.class}, order=18, min=1, max=1, modifier=false, summary=true)
2249    @Description(shortDefinition="Recommended name for operation in search url", formalDefinition="The label that is recommended to be used in the URL for this operation. In some cases, servers may need to use a different CapabilityStatement operation.name to differentiate between multiple SearchParameters that happen to have the same code." )
2250    protected CodeType code;
2251
2252    /**
2253     * Additional information about how to use this operation or named query.
2254     */
2255    @Child(name = "comment", type = {MarkdownType.class}, order=19, min=0, max=1, modifier=false, summary=false)
2256    @Description(shortDefinition="Additional information about use", formalDefinition="Additional information about how to use this operation or named query." )
2257    protected MarkdownType comment;
2258
2259    /**
2260     * Indicates that this operation definition is a constraining profile on the base.
2261     */
2262    @Child(name = "base", type = {CanonicalType.class}, order=20, min=0, max=1, modifier=false, summary=true)
2263    @Description(shortDefinition="Marks this as a profile of the base", formalDefinition="Indicates that this operation definition is a constraining profile on the base." )
2264    protected CanonicalType base;
2265
2266    /**
2267     * The types on which this operation can be executed.
2268     */
2269    @Child(name = "resource", type = {CodeType.class}, order=21, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2270    @Description(shortDefinition="Types this operation applies to", formalDefinition="The types on which this operation can be executed." )
2271    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/resource-types")
2272    protected List<CodeType> resource;
2273
2274    /**
2275     * Indicates whether this operation or named query can be invoked at the system level (e.g. without needing to choose a resource type for the context).
2276     */
2277    @Child(name = "system", type = {BooleanType.class}, order=22, min=1, max=1, modifier=false, summary=true)
2278    @Description(shortDefinition="Invoke at the system level?", formalDefinition="Indicates whether this operation or named query can be invoked at the system level (e.g. without needing to choose a resource type for the context)." )
2279    protected BooleanType system;
2280
2281    /**
2282     * Indicates whether this operation or named query can be invoked at the resource type level for any given resource type level (e.g. without needing to choose a specific resource id for the context).
2283     */
2284    @Child(name = "type", type = {BooleanType.class}, order=23, min=1, max=1, modifier=false, summary=true)
2285    @Description(shortDefinition="Invoke at the type level?", formalDefinition="Indicates whether this operation or named query can be invoked at the resource type level for any given resource type level (e.g. without needing to choose a specific resource id for the context)." )
2286    protected BooleanType type;
2287
2288    /**
2289     * Indicates whether this operation can be invoked on a particular instance of one of the given types.
2290     */
2291    @Child(name = "instance", type = {BooleanType.class}, order=24, min=1, max=1, modifier=false, summary=true)
2292    @Description(shortDefinition="Invoke on an instance?", formalDefinition="Indicates whether this operation can be invoked on a particular instance of one of the given types." )
2293    protected BooleanType instance;
2294
2295    /**
2296     * Additional validation information for the in parameters - a single profile that covers all the parameters. The profile is a constraint on the parameters resource as a whole.
2297     */
2298    @Child(name = "inputProfile", type = {CanonicalType.class}, order=25, min=0, max=1, modifier=false, summary=false)
2299    @Description(shortDefinition="Validation information for in parameters", formalDefinition="Additional validation information for the in parameters - a single profile that covers all the parameters. The profile is a constraint on the parameters resource as a whole." )
2300    protected CanonicalType inputProfile;
2301
2302    /**
2303     * Additional validation information for the out parameters - a single profile that covers all the parameters. The profile is a constraint on the parameters resource.
2304     */
2305    @Child(name = "outputProfile", type = {CanonicalType.class}, order=26, min=0, max=1, modifier=false, summary=false)
2306    @Description(shortDefinition="Validation information for out parameters", formalDefinition="Additional validation information for the out parameters - a single profile that covers all the parameters. The profile is a constraint on the parameters resource." )
2307    protected CanonicalType outputProfile;
2308
2309    /**
2310     * The parameters for the operation/query.
2311     */
2312    @Child(name = "parameter", type = {}, order=27, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2313    @Description(shortDefinition="Parameters for the operation/query", formalDefinition="The parameters for the operation/query." )
2314    protected List<OperationDefinitionParameterComponent> parameter;
2315
2316    /**
2317     * Defines an appropriate combination of parameters to use when invoking this operation, to help code generators when generating overloaded parameter sets for this operation.
2318     */
2319    @Child(name = "overload", type = {}, order=28, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2320    @Description(shortDefinition="Define overloaded variants for when  generating code", formalDefinition="Defines an appropriate combination of parameters to use when invoking this operation, to help code generators when generating overloaded parameter sets for this operation." )
2321    protected List<OperationDefinitionOverloadComponent> overload;
2322
2323    private static final long serialVersionUID = 269077042L;
2324
2325  /**
2326   * Constructor
2327   */
2328    public OperationDefinition() {
2329      super();
2330    }
2331
2332  /**
2333   * Constructor
2334   */
2335    public OperationDefinition(String name, PublicationStatus status, OperationKind kind, String code, boolean system, boolean type, boolean instance) {
2336      super();
2337      this.setName(name);
2338      this.setStatus(status);
2339      this.setKind(kind);
2340      this.setCode(code);
2341      this.setSystem(system);
2342      this.setType(type);
2343      this.setInstance(instance);
2344    }
2345
2346    /**
2347     * @return {@link #url} (An absolute URI that is used to identify this operation definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which an authoritative instance of this operation definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the operation definition is stored on different servers.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
2348     */
2349    public UriType getUrlElement() { 
2350      if (this.url == null)
2351        if (Configuration.errorOnAutoCreate())
2352          throw new Error("Attempt to auto-create OperationDefinition.url");
2353        else if (Configuration.doAutoCreate())
2354          this.url = new UriType(); // bb
2355      return this.url;
2356    }
2357
2358    public boolean hasUrlElement() { 
2359      return this.url != null && !this.url.isEmpty();
2360    }
2361
2362    public boolean hasUrl() { 
2363      return this.url != null && !this.url.isEmpty();
2364    }
2365
2366    /**
2367     * @param value {@link #url} (An absolute URI that is used to identify this operation definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which an authoritative instance of this operation definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the operation definition is stored on different servers.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
2368     */
2369    public OperationDefinition setUrlElement(UriType value) { 
2370      this.url = value;
2371      return this;
2372    }
2373
2374    /**
2375     * @return An absolute URI that is used to identify this operation definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which an authoritative instance of this operation definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the operation definition is stored on different servers.
2376     */
2377    public String getUrl() { 
2378      return this.url == null ? null : this.url.getValue();
2379    }
2380
2381    /**
2382     * @param value An absolute URI that is used to identify this operation definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which an authoritative instance of this operation definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the operation definition is stored on different servers.
2383     */
2384    public OperationDefinition setUrl(String value) { 
2385      if (Utilities.noString(value))
2386        this.url = null;
2387      else {
2388        if (this.url == null)
2389          this.url = new UriType();
2390        this.url.setValue(value);
2391      }
2392      return this;
2393    }
2394
2395    /**
2396     * @return {@link #version} (The identifier that is used to identify this version of the operation definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the operation definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.). This is the underlying object with id, value and extensions. The accessor "getVersion" gives direct access to the value
2397     */
2398    public StringType getVersionElement() { 
2399      if (this.version == null)
2400        if (Configuration.errorOnAutoCreate())
2401          throw new Error("Attempt to auto-create OperationDefinition.version");
2402        else if (Configuration.doAutoCreate())
2403          this.version = new StringType(); // bb
2404      return this.version;
2405    }
2406
2407    public boolean hasVersionElement() { 
2408      return this.version != null && !this.version.isEmpty();
2409    }
2410
2411    public boolean hasVersion() { 
2412      return this.version != null && !this.version.isEmpty();
2413    }
2414
2415    /**
2416     * @param value {@link #version} (The identifier that is used to identify this version of the operation definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the operation definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.). This is the underlying object with id, value and extensions. The accessor "getVersion" gives direct access to the value
2417     */
2418    public OperationDefinition setVersionElement(StringType value) { 
2419      this.version = value;
2420      return this;
2421    }
2422
2423    /**
2424     * @return The identifier that is used to identify this version of the operation definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the operation definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.
2425     */
2426    public String getVersion() { 
2427      return this.version == null ? null : this.version.getValue();
2428    }
2429
2430    /**
2431     * @param value The identifier that is used to identify this version of the operation definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the operation definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.
2432     */
2433    public OperationDefinition setVersion(String value) { 
2434      if (Utilities.noString(value))
2435        this.version = null;
2436      else {
2437        if (this.version == null)
2438          this.version = new StringType();
2439        this.version.setValue(value);
2440      }
2441      return this;
2442    }
2443
2444    /**
2445     * @return {@link #versionAlgorithm} (Indicates the mechanism used to compare versions to determine which is more current.)
2446     */
2447    public DataType getVersionAlgorithm() { 
2448      return this.versionAlgorithm;
2449    }
2450
2451    /**
2452     * @return {@link #versionAlgorithm} (Indicates the mechanism used to compare versions to determine which is more current.)
2453     */
2454    public StringType getVersionAlgorithmStringType() throws FHIRException { 
2455      if (this.versionAlgorithm == null)
2456        this.versionAlgorithm = new StringType();
2457      if (!(this.versionAlgorithm instanceof StringType))
2458        throw new FHIRException("Type mismatch: the type StringType was expected, but "+this.versionAlgorithm.getClass().getName()+" was encountered");
2459      return (StringType) this.versionAlgorithm;
2460    }
2461
2462    public boolean hasVersionAlgorithmStringType() { 
2463      return this != null && this.versionAlgorithm instanceof StringType;
2464    }
2465
2466    /**
2467     * @return {@link #versionAlgorithm} (Indicates the mechanism used to compare versions to determine which is more current.)
2468     */
2469    public Coding getVersionAlgorithmCoding() throws FHIRException { 
2470      if (this.versionAlgorithm == null)
2471        this.versionAlgorithm = new Coding();
2472      if (!(this.versionAlgorithm instanceof Coding))
2473        throw new FHIRException("Type mismatch: the type Coding was expected, but "+this.versionAlgorithm.getClass().getName()+" was encountered");
2474      return (Coding) this.versionAlgorithm;
2475    }
2476
2477    public boolean hasVersionAlgorithmCoding() { 
2478      return this != null && this.versionAlgorithm instanceof Coding;
2479    }
2480
2481    public boolean hasVersionAlgorithm() { 
2482      return this.versionAlgorithm != null && !this.versionAlgorithm.isEmpty();
2483    }
2484
2485    /**
2486     * @param value {@link #versionAlgorithm} (Indicates the mechanism used to compare versions to determine which is more current.)
2487     */
2488    public OperationDefinition setVersionAlgorithm(DataType value) { 
2489      if (value != null && !(value instanceof StringType || value instanceof Coding))
2490        throw new Error("Not the right type for OperationDefinition.versionAlgorithm[x]: "+value.fhirType());
2491      this.versionAlgorithm = value;
2492      return this;
2493    }
2494
2495    /**
2496     * @return {@link #name} (A natural language name identifying the operation definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
2497     */
2498    public StringType getNameElement() { 
2499      if (this.name == null)
2500        if (Configuration.errorOnAutoCreate())
2501          throw new Error("Attempt to auto-create OperationDefinition.name");
2502        else if (Configuration.doAutoCreate())
2503          this.name = new StringType(); // bb
2504      return this.name;
2505    }
2506
2507    public boolean hasNameElement() { 
2508      return this.name != null && !this.name.isEmpty();
2509    }
2510
2511    public boolean hasName() { 
2512      return this.name != null && !this.name.isEmpty();
2513    }
2514
2515    /**
2516     * @param value {@link #name} (A natural language name identifying the operation definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
2517     */
2518    public OperationDefinition setNameElement(StringType value) { 
2519      this.name = value;
2520      return this;
2521    }
2522
2523    /**
2524     * @return A natural language name identifying the operation definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.
2525     */
2526    public String getName() { 
2527      return this.name == null ? null : this.name.getValue();
2528    }
2529
2530    /**
2531     * @param value A natural language name identifying the operation definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.
2532     */
2533    public OperationDefinition setName(String value) { 
2534        if (this.name == null)
2535          this.name = new StringType();
2536        this.name.setValue(value);
2537      return this;
2538    }
2539
2540    /**
2541     * @return {@link #title} (A short, descriptive, user-friendly title for the operation definition.). This is the underlying object with id, value and extensions. The accessor "getTitle" gives direct access to the value
2542     */
2543    public StringType getTitleElement() { 
2544      if (this.title == null)
2545        if (Configuration.errorOnAutoCreate())
2546          throw new Error("Attempt to auto-create OperationDefinition.title");
2547        else if (Configuration.doAutoCreate())
2548          this.title = new StringType(); // bb
2549      return this.title;
2550    }
2551
2552    public boolean hasTitleElement() { 
2553      return this.title != null && !this.title.isEmpty();
2554    }
2555
2556    public boolean hasTitle() { 
2557      return this.title != null && !this.title.isEmpty();
2558    }
2559
2560    /**
2561     * @param value {@link #title} (A short, descriptive, user-friendly title for the operation definition.). This is the underlying object with id, value and extensions. The accessor "getTitle" gives direct access to the value
2562     */
2563    public OperationDefinition setTitleElement(StringType value) { 
2564      this.title = value;
2565      return this;
2566    }
2567
2568    /**
2569     * @return A short, descriptive, user-friendly title for the operation definition.
2570     */
2571    public String getTitle() { 
2572      return this.title == null ? null : this.title.getValue();
2573    }
2574
2575    /**
2576     * @param value A short, descriptive, user-friendly title for the operation definition.
2577     */
2578    public OperationDefinition setTitle(String value) { 
2579      if (Utilities.noString(value))
2580        this.title = null;
2581      else {
2582        if (this.title == null)
2583          this.title = new StringType();
2584        this.title.setValue(value);
2585      }
2586      return this;
2587    }
2588
2589    /**
2590     * @return {@link #status} (The status of this operation definition. Enables tracking the life-cycle of the content.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
2591     */
2592    public Enumeration<PublicationStatus> getStatusElement() { 
2593      if (this.status == null)
2594        if (Configuration.errorOnAutoCreate())
2595          throw new Error("Attempt to auto-create OperationDefinition.status");
2596        else if (Configuration.doAutoCreate())
2597          this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory()); // bb
2598      return this.status;
2599    }
2600
2601    public boolean hasStatusElement() { 
2602      return this.status != null && !this.status.isEmpty();
2603    }
2604
2605    public boolean hasStatus() { 
2606      return this.status != null && !this.status.isEmpty();
2607    }
2608
2609    /**
2610     * @param value {@link #status} (The status of this operation definition. Enables tracking the life-cycle of the content.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
2611     */
2612    public OperationDefinition setStatusElement(Enumeration<PublicationStatus> value) { 
2613      this.status = value;
2614      return this;
2615    }
2616
2617    /**
2618     * @return The status of this operation definition. Enables tracking the life-cycle of the content.
2619     */
2620    public PublicationStatus getStatus() { 
2621      return this.status == null ? null : this.status.getValue();
2622    }
2623
2624    /**
2625     * @param value The status of this operation definition. Enables tracking the life-cycle of the content.
2626     */
2627    public OperationDefinition setStatus(PublicationStatus value) { 
2628        if (this.status == null)
2629          this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory());
2630        this.status.setValue(value);
2631      return this;
2632    }
2633
2634    /**
2635     * @return {@link #kind} (Whether this is an operation or a named query.). This is the underlying object with id, value and extensions. The accessor "getKind" gives direct access to the value
2636     */
2637    public Enumeration<OperationKind> getKindElement() { 
2638      if (this.kind == null)
2639        if (Configuration.errorOnAutoCreate())
2640          throw new Error("Attempt to auto-create OperationDefinition.kind");
2641        else if (Configuration.doAutoCreate())
2642          this.kind = new Enumeration<OperationKind>(new OperationKindEnumFactory()); // bb
2643      return this.kind;
2644    }
2645
2646    public boolean hasKindElement() { 
2647      return this.kind != null && !this.kind.isEmpty();
2648    }
2649
2650    public boolean hasKind() { 
2651      return this.kind != null && !this.kind.isEmpty();
2652    }
2653
2654    /**
2655     * @param value {@link #kind} (Whether this is an operation or a named query.). This is the underlying object with id, value and extensions. The accessor "getKind" gives direct access to the value
2656     */
2657    public OperationDefinition setKindElement(Enumeration<OperationKind> value) { 
2658      this.kind = value;
2659      return this;
2660    }
2661
2662    /**
2663     * @return Whether this is an operation or a named query.
2664     */
2665    public OperationKind getKind() { 
2666      return this.kind == null ? null : this.kind.getValue();
2667    }
2668
2669    /**
2670     * @param value Whether this is an operation or a named query.
2671     */
2672    public OperationDefinition setKind(OperationKind value) { 
2673        if (this.kind == null)
2674          this.kind = new Enumeration<OperationKind>(new OperationKindEnumFactory());
2675        this.kind.setValue(value);
2676      return this;
2677    }
2678
2679    /**
2680     * @return {@link #experimental} (A Boolean value to indicate that this operation definition is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.). This is the underlying object with id, value and extensions. The accessor "getExperimental" gives direct access to the value
2681     */
2682    public BooleanType getExperimentalElement() { 
2683      if (this.experimental == null)
2684        if (Configuration.errorOnAutoCreate())
2685          throw new Error("Attempt to auto-create OperationDefinition.experimental");
2686        else if (Configuration.doAutoCreate())
2687          this.experimental = new BooleanType(); // bb
2688      return this.experimental;
2689    }
2690
2691    public boolean hasExperimentalElement() { 
2692      return this.experimental != null && !this.experimental.isEmpty();
2693    }
2694
2695    public boolean hasExperimental() { 
2696      return this.experimental != null && !this.experimental.isEmpty();
2697    }
2698
2699    /**
2700     * @param value {@link #experimental} (A Boolean value to indicate that this operation definition is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.). This is the underlying object with id, value and extensions. The accessor "getExperimental" gives direct access to the value
2701     */
2702    public OperationDefinition setExperimentalElement(BooleanType value) { 
2703      this.experimental = value;
2704      return this;
2705    }
2706
2707    /**
2708     * @return A Boolean value to indicate that this operation definition is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.
2709     */
2710    public boolean getExperimental() { 
2711      return this.experimental == null || this.experimental.isEmpty() ? false : this.experimental.getValue();
2712    }
2713
2714    /**
2715     * @param value A Boolean value to indicate that this operation definition is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.
2716     */
2717    public OperationDefinition setExperimental(boolean value) { 
2718        if (this.experimental == null)
2719          this.experimental = new BooleanType();
2720        this.experimental.setValue(value);
2721      return this;
2722    }
2723
2724    /**
2725     * @return {@link #date} (The date  (and optionally time) when the operation definition was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the operation definition changes.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
2726     */
2727    public DateTimeType getDateElement() { 
2728      if (this.date == null)
2729        if (Configuration.errorOnAutoCreate())
2730          throw new Error("Attempt to auto-create OperationDefinition.date");
2731        else if (Configuration.doAutoCreate())
2732          this.date = new DateTimeType(); // bb
2733      return this.date;
2734    }
2735
2736    public boolean hasDateElement() { 
2737      return this.date != null && !this.date.isEmpty();
2738    }
2739
2740    public boolean hasDate() { 
2741      return this.date != null && !this.date.isEmpty();
2742    }
2743
2744    /**
2745     * @param value {@link #date} (The date  (and optionally time) when the operation definition was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the operation definition changes.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
2746     */
2747    public OperationDefinition setDateElement(DateTimeType value) { 
2748      this.date = value;
2749      return this;
2750    }
2751
2752    /**
2753     * @return The date  (and optionally time) when the operation definition was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the operation definition changes.
2754     */
2755    public Date getDate() { 
2756      return this.date == null ? null : this.date.getValue();
2757    }
2758
2759    /**
2760     * @param value The date  (and optionally time) when the operation definition was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the operation definition changes.
2761     */
2762    public OperationDefinition setDate(Date value) { 
2763      if (value == null)
2764        this.date = null;
2765      else {
2766        if (this.date == null)
2767          this.date = new DateTimeType();
2768        this.date.setValue(value);
2769      }
2770      return this;
2771    }
2772
2773    /**
2774     * @return {@link #publisher} (The name of the organization or individual responsible for the release and ongoing maintenance of the operation definition.). This is the underlying object with id, value and extensions. The accessor "getPublisher" gives direct access to the value
2775     */
2776    public StringType getPublisherElement() { 
2777      if (this.publisher == null)
2778        if (Configuration.errorOnAutoCreate())
2779          throw new Error("Attempt to auto-create OperationDefinition.publisher");
2780        else if (Configuration.doAutoCreate())
2781          this.publisher = new StringType(); // bb
2782      return this.publisher;
2783    }
2784
2785    public boolean hasPublisherElement() { 
2786      return this.publisher != null && !this.publisher.isEmpty();
2787    }
2788
2789    public boolean hasPublisher() { 
2790      return this.publisher != null && !this.publisher.isEmpty();
2791    }
2792
2793    /**
2794     * @param value {@link #publisher} (The name of the organization or individual responsible for the release and ongoing maintenance of the operation definition.). This is the underlying object with id, value and extensions. The accessor "getPublisher" gives direct access to the value
2795     */
2796    public OperationDefinition setPublisherElement(StringType value) { 
2797      this.publisher = value;
2798      return this;
2799    }
2800
2801    /**
2802     * @return The name of the organization or individual responsible for the release and ongoing maintenance of the operation definition.
2803     */
2804    public String getPublisher() { 
2805      return this.publisher == null ? null : this.publisher.getValue();
2806    }
2807
2808    /**
2809     * @param value The name of the organization or individual responsible for the release and ongoing maintenance of the operation definition.
2810     */
2811    public OperationDefinition setPublisher(String value) { 
2812      if (Utilities.noString(value))
2813        this.publisher = null;
2814      else {
2815        if (this.publisher == null)
2816          this.publisher = new StringType();
2817        this.publisher.setValue(value);
2818      }
2819      return this;
2820    }
2821
2822    /**
2823     * @return {@link #contact} (Contact details to assist a user in finding and communicating with the publisher.)
2824     */
2825    public List<ContactDetail> getContact() { 
2826      if (this.contact == null)
2827        this.contact = new ArrayList<ContactDetail>();
2828      return this.contact;
2829    }
2830
2831    /**
2832     * @return Returns a reference to <code>this</code> for easy method chaining
2833     */
2834    public OperationDefinition setContact(List<ContactDetail> theContact) { 
2835      this.contact = theContact;
2836      return this;
2837    }
2838
2839    public boolean hasContact() { 
2840      if (this.contact == null)
2841        return false;
2842      for (ContactDetail item : this.contact)
2843        if (!item.isEmpty())
2844          return true;
2845      return false;
2846    }
2847
2848    public ContactDetail addContact() { //3
2849      ContactDetail t = new ContactDetail();
2850      if (this.contact == null)
2851        this.contact = new ArrayList<ContactDetail>();
2852      this.contact.add(t);
2853      return t;
2854    }
2855
2856    public OperationDefinition addContact(ContactDetail t) { //3
2857      if (t == null)
2858        return this;
2859      if (this.contact == null)
2860        this.contact = new ArrayList<ContactDetail>();
2861      this.contact.add(t);
2862      return this;
2863    }
2864
2865    /**
2866     * @return The first repetition of repeating field {@link #contact}, creating it if it does not already exist {3}
2867     */
2868    public ContactDetail getContactFirstRep() { 
2869      if (getContact().isEmpty()) {
2870        addContact();
2871      }
2872      return getContact().get(0);
2873    }
2874
2875    /**
2876     * @return {@link #description} (A free text natural language description of the operation definition from a consumer's perspective.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
2877     */
2878    public MarkdownType getDescriptionElement() { 
2879      if (this.description == null)
2880        if (Configuration.errorOnAutoCreate())
2881          throw new Error("Attempt to auto-create OperationDefinition.description");
2882        else if (Configuration.doAutoCreate())
2883          this.description = new MarkdownType(); // bb
2884      return this.description;
2885    }
2886
2887    public boolean hasDescriptionElement() { 
2888      return this.description != null && !this.description.isEmpty();
2889    }
2890
2891    public boolean hasDescription() { 
2892      return this.description != null && !this.description.isEmpty();
2893    }
2894
2895    /**
2896     * @param value {@link #description} (A free text natural language description of the operation definition from a consumer's perspective.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
2897     */
2898    public OperationDefinition setDescriptionElement(MarkdownType value) { 
2899      this.description = value;
2900      return this;
2901    }
2902
2903    /**
2904     * @return A free text natural language description of the operation definition from a consumer's perspective.
2905     */
2906    public String getDescription() { 
2907      return this.description == null ? null : this.description.getValue();
2908    }
2909
2910    /**
2911     * @param value A free text natural language description of the operation definition from a consumer's perspective.
2912     */
2913    public OperationDefinition setDescription(String value) { 
2914      if (value == null)
2915        this.description = null;
2916      else {
2917        if (this.description == null)
2918          this.description = new MarkdownType();
2919        this.description.setValue(value);
2920      }
2921      return this;
2922    }
2923
2924    /**
2925     * @return {@link #useContext} (The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate operation definition instances.)
2926     */
2927    public List<UsageContext> getUseContext() { 
2928      if (this.useContext == null)
2929        this.useContext = new ArrayList<UsageContext>();
2930      return this.useContext;
2931    }
2932
2933    /**
2934     * @return Returns a reference to <code>this</code> for easy method chaining
2935     */
2936    public OperationDefinition setUseContext(List<UsageContext> theUseContext) { 
2937      this.useContext = theUseContext;
2938      return this;
2939    }
2940
2941    public boolean hasUseContext() { 
2942      if (this.useContext == null)
2943        return false;
2944      for (UsageContext item : this.useContext)
2945        if (!item.isEmpty())
2946          return true;
2947      return false;
2948    }
2949
2950    public UsageContext addUseContext() { //3
2951      UsageContext t = new UsageContext();
2952      if (this.useContext == null)
2953        this.useContext = new ArrayList<UsageContext>();
2954      this.useContext.add(t);
2955      return t;
2956    }
2957
2958    public OperationDefinition addUseContext(UsageContext t) { //3
2959      if (t == null)
2960        return this;
2961      if (this.useContext == null)
2962        this.useContext = new ArrayList<UsageContext>();
2963      this.useContext.add(t);
2964      return this;
2965    }
2966
2967    /**
2968     * @return The first repetition of repeating field {@link #useContext}, creating it if it does not already exist {3}
2969     */
2970    public UsageContext getUseContextFirstRep() { 
2971      if (getUseContext().isEmpty()) {
2972        addUseContext();
2973      }
2974      return getUseContext().get(0);
2975    }
2976
2977    /**
2978     * @return {@link #jurisdiction} (A legal or geographic region in which the operation definition is intended to be used.)
2979     */
2980    public List<CodeableConcept> getJurisdiction() { 
2981      if (this.jurisdiction == null)
2982        this.jurisdiction = new ArrayList<CodeableConcept>();
2983      return this.jurisdiction;
2984    }
2985
2986    /**
2987     * @return Returns a reference to <code>this</code> for easy method chaining
2988     */
2989    public OperationDefinition setJurisdiction(List<CodeableConcept> theJurisdiction) { 
2990      this.jurisdiction = theJurisdiction;
2991      return this;
2992    }
2993
2994    public boolean hasJurisdiction() { 
2995      if (this.jurisdiction == null)
2996        return false;
2997      for (CodeableConcept item : this.jurisdiction)
2998        if (!item.isEmpty())
2999          return true;
3000      return false;
3001    }
3002
3003    public CodeableConcept addJurisdiction() { //3
3004      CodeableConcept t = new CodeableConcept();
3005      if (this.jurisdiction == null)
3006        this.jurisdiction = new ArrayList<CodeableConcept>();
3007      this.jurisdiction.add(t);
3008      return t;
3009    }
3010
3011    public OperationDefinition addJurisdiction(CodeableConcept t) { //3
3012      if (t == null)
3013        return this;
3014      if (this.jurisdiction == null)
3015        this.jurisdiction = new ArrayList<CodeableConcept>();
3016      this.jurisdiction.add(t);
3017      return this;
3018    }
3019
3020    /**
3021     * @return The first repetition of repeating field {@link #jurisdiction}, creating it if it does not already exist {3}
3022     */
3023    public CodeableConcept getJurisdictionFirstRep() { 
3024      if (getJurisdiction().isEmpty()) {
3025        addJurisdiction();
3026      }
3027      return getJurisdiction().get(0);
3028    }
3029
3030    /**
3031     * @return {@link #purpose} (Explanation of why this operation definition is needed and why it has been designed as it has.). This is the underlying object with id, value and extensions. The accessor "getPurpose" gives direct access to the value
3032     */
3033    public MarkdownType getPurposeElement() { 
3034      if (this.purpose == null)
3035        if (Configuration.errorOnAutoCreate())
3036          throw new Error("Attempt to auto-create OperationDefinition.purpose");
3037        else if (Configuration.doAutoCreate())
3038          this.purpose = new MarkdownType(); // bb
3039      return this.purpose;
3040    }
3041
3042    public boolean hasPurposeElement() { 
3043      return this.purpose != null && !this.purpose.isEmpty();
3044    }
3045
3046    public boolean hasPurpose() { 
3047      return this.purpose != null && !this.purpose.isEmpty();
3048    }
3049
3050    /**
3051     * @param value {@link #purpose} (Explanation of why this operation definition is needed and why it has been designed as it has.). This is the underlying object with id, value and extensions. The accessor "getPurpose" gives direct access to the value
3052     */
3053    public OperationDefinition setPurposeElement(MarkdownType value) { 
3054      this.purpose = value;
3055      return this;
3056    }
3057
3058    /**
3059     * @return Explanation of why this operation definition is needed and why it has been designed as it has.
3060     */
3061    public String getPurpose() { 
3062      return this.purpose == null ? null : this.purpose.getValue();
3063    }
3064
3065    /**
3066     * @param value Explanation of why this operation definition is needed and why it has been designed as it has.
3067     */
3068    public OperationDefinition setPurpose(String value) { 
3069      if (value == null)
3070        this.purpose = null;
3071      else {
3072        if (this.purpose == null)
3073          this.purpose = new MarkdownType();
3074        this.purpose.setValue(value);
3075      }
3076      return this;
3077    }
3078
3079    /**
3080     * @return {@link #copyright} (A copyright statement relating to the OperationDefinition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the OperationDefinition.). This is the underlying object with id, value and extensions. The accessor "getCopyright" gives direct access to the value
3081     */
3082    public MarkdownType getCopyrightElement() { 
3083      if (this.copyright == null)
3084        if (Configuration.errorOnAutoCreate())
3085          throw new Error("Attempt to auto-create OperationDefinition.copyright");
3086        else if (Configuration.doAutoCreate())
3087          this.copyright = new MarkdownType(); // bb
3088      return this.copyright;
3089    }
3090
3091    public boolean hasCopyrightElement() { 
3092      return this.copyright != null && !this.copyright.isEmpty();
3093    }
3094
3095    public boolean hasCopyright() { 
3096      return this.copyright != null && !this.copyright.isEmpty();
3097    }
3098
3099    /**
3100     * @param value {@link #copyright} (A copyright statement relating to the OperationDefinition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the OperationDefinition.). This is the underlying object with id, value and extensions. The accessor "getCopyright" gives direct access to the value
3101     */
3102    public OperationDefinition setCopyrightElement(MarkdownType value) { 
3103      this.copyright = value;
3104      return this;
3105    }
3106
3107    /**
3108     * @return A copyright statement relating to the OperationDefinition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the OperationDefinition.
3109     */
3110    public String getCopyright() { 
3111      return this.copyright == null ? null : this.copyright.getValue();
3112    }
3113
3114    /**
3115     * @param value A copyright statement relating to the OperationDefinition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the OperationDefinition.
3116     */
3117    public OperationDefinition setCopyright(String value) { 
3118      if (value == null)
3119        this.copyright = null;
3120      else {
3121        if (this.copyright == null)
3122          this.copyright = new MarkdownType();
3123        this.copyright.setValue(value);
3124      }
3125      return this;
3126    }
3127
3128    /**
3129     * @return {@link #copyrightLabel} (A short string (<50 characters), suitable for inclusion in a page footer that identifies the copyright holder, effective period, and optionally whether rights are resctricted. (e.g. 'All rights reserved', 'Some rights reserved').). This is the underlying object with id, value and extensions. The accessor "getCopyrightLabel" gives direct access to the value
3130     */
3131    public StringType getCopyrightLabelElement() { 
3132      if (this.copyrightLabel == null)
3133        if (Configuration.errorOnAutoCreate())
3134          throw new Error("Attempt to auto-create OperationDefinition.copyrightLabel");
3135        else if (Configuration.doAutoCreate())
3136          this.copyrightLabel = new StringType(); // bb
3137      return this.copyrightLabel;
3138    }
3139
3140    public boolean hasCopyrightLabelElement() { 
3141      return this.copyrightLabel != null && !this.copyrightLabel.isEmpty();
3142    }
3143
3144    public boolean hasCopyrightLabel() { 
3145      return this.copyrightLabel != null && !this.copyrightLabel.isEmpty();
3146    }
3147
3148    /**
3149     * @param value {@link #copyrightLabel} (A short string (<50 characters), suitable for inclusion in a page footer that identifies the copyright holder, effective period, and optionally whether rights are resctricted. (e.g. 'All rights reserved', 'Some rights reserved').). This is the underlying object with id, value and extensions. The accessor "getCopyrightLabel" gives direct access to the value
3150     */
3151    public OperationDefinition setCopyrightLabelElement(StringType value) { 
3152      this.copyrightLabel = value;
3153      return this;
3154    }
3155
3156    /**
3157     * @return A short string (<50 characters), suitable for inclusion in a page footer that identifies the copyright holder, effective period, and optionally whether rights are resctricted. (e.g. 'All rights reserved', 'Some rights reserved').
3158     */
3159    public String getCopyrightLabel() { 
3160      return this.copyrightLabel == null ? null : this.copyrightLabel.getValue();
3161    }
3162
3163    /**
3164     * @param value A short string (<50 characters), suitable for inclusion in a page footer that identifies the copyright holder, effective period, and optionally whether rights are resctricted. (e.g. 'All rights reserved', 'Some rights reserved').
3165     */
3166    public OperationDefinition setCopyrightLabel(String value) { 
3167      if (Utilities.noString(value))
3168        this.copyrightLabel = null;
3169      else {
3170        if (this.copyrightLabel == null)
3171          this.copyrightLabel = new StringType();
3172        this.copyrightLabel.setValue(value);
3173      }
3174      return this;
3175    }
3176
3177    /**
3178     * @return {@link #affectsState} (Whether the operation affects state. Side effects such as producing audit trail entries do not count as 'affecting  state'.). This is the underlying object with id, value and extensions. The accessor "getAffectsState" gives direct access to the value
3179     */
3180    public BooleanType getAffectsStateElement() { 
3181      if (this.affectsState == null)
3182        if (Configuration.errorOnAutoCreate())
3183          throw new Error("Attempt to auto-create OperationDefinition.affectsState");
3184        else if (Configuration.doAutoCreate())
3185          this.affectsState = new BooleanType(); // bb
3186      return this.affectsState;
3187    }
3188
3189    public boolean hasAffectsStateElement() { 
3190      return this.affectsState != null && !this.affectsState.isEmpty();
3191    }
3192
3193    public boolean hasAffectsState() { 
3194      return this.affectsState != null && !this.affectsState.isEmpty();
3195    }
3196
3197    /**
3198     * @param value {@link #affectsState} (Whether the operation affects state. Side effects such as producing audit trail entries do not count as 'affecting  state'.). This is the underlying object with id, value and extensions. The accessor "getAffectsState" gives direct access to the value
3199     */
3200    public OperationDefinition setAffectsStateElement(BooleanType value) { 
3201      this.affectsState = value;
3202      return this;
3203    }
3204
3205    /**
3206     * @return Whether the operation affects state. Side effects such as producing audit trail entries do not count as 'affecting  state'.
3207     */
3208    public boolean getAffectsState() { 
3209      return this.affectsState == null || this.affectsState.isEmpty() ? false : this.affectsState.getValue();
3210    }
3211
3212    /**
3213     * @param value Whether the operation affects state. Side effects such as producing audit trail entries do not count as 'affecting  state'.
3214     */
3215    public OperationDefinition setAffectsState(boolean value) { 
3216        if (this.affectsState == null)
3217          this.affectsState = new BooleanType();
3218        this.affectsState.setValue(value);
3219      return this;
3220    }
3221
3222    /**
3223     * @return {@link #code} (The label that is recommended to be used in the URL for this operation. In some cases, servers may need to use a different CapabilityStatement operation.name to differentiate between multiple SearchParameters that happen to have the same code.). This is the underlying object with id, value and extensions. The accessor "getCode" gives direct access to the value
3224     */
3225    public CodeType getCodeElement() { 
3226      if (this.code == null)
3227        if (Configuration.errorOnAutoCreate())
3228          throw new Error("Attempt to auto-create OperationDefinition.code");
3229        else if (Configuration.doAutoCreate())
3230          this.code = new CodeType(); // bb
3231      return this.code;
3232    }
3233
3234    public boolean hasCodeElement() { 
3235      return this.code != null && !this.code.isEmpty();
3236    }
3237
3238    public boolean hasCode() { 
3239      return this.code != null && !this.code.isEmpty();
3240    }
3241
3242    /**
3243     * @param value {@link #code} (The label that is recommended to be used in the URL for this operation. In some cases, servers may need to use a different CapabilityStatement operation.name to differentiate between multiple SearchParameters that happen to have the same code.). This is the underlying object with id, value and extensions. The accessor "getCode" gives direct access to the value
3244     */
3245    public OperationDefinition setCodeElement(CodeType value) { 
3246      this.code = value;
3247      return this;
3248    }
3249
3250    /**
3251     * @return The label that is recommended to be used in the URL for this operation. In some cases, servers may need to use a different CapabilityStatement operation.name to differentiate between multiple SearchParameters that happen to have the same code.
3252     */
3253    public String getCode() { 
3254      return this.code == null ? null : this.code.getValue();
3255    }
3256
3257    /**
3258     * @param value The label that is recommended to be used in the URL for this operation. In some cases, servers may need to use a different CapabilityStatement operation.name to differentiate between multiple SearchParameters that happen to have the same code.
3259     */
3260    public OperationDefinition setCode(String value) { 
3261        if (this.code == null)
3262          this.code = new CodeType();
3263        this.code.setValue(value);
3264      return this;
3265    }
3266
3267    /**
3268     * @return {@link #comment} (Additional information about how to use this operation or named query.). This is the underlying object with id, value and extensions. The accessor "getComment" gives direct access to the value
3269     */
3270    public MarkdownType getCommentElement() { 
3271      if (this.comment == null)
3272        if (Configuration.errorOnAutoCreate())
3273          throw new Error("Attempt to auto-create OperationDefinition.comment");
3274        else if (Configuration.doAutoCreate())
3275          this.comment = new MarkdownType(); // bb
3276      return this.comment;
3277    }
3278
3279    public boolean hasCommentElement() { 
3280      return this.comment != null && !this.comment.isEmpty();
3281    }
3282
3283    public boolean hasComment() { 
3284      return this.comment != null && !this.comment.isEmpty();
3285    }
3286
3287    /**
3288     * @param value {@link #comment} (Additional information about how to use this operation or named query.). This is the underlying object with id, value and extensions. The accessor "getComment" gives direct access to the value
3289     */
3290    public OperationDefinition setCommentElement(MarkdownType value) { 
3291      this.comment = value;
3292      return this;
3293    }
3294
3295    /**
3296     * @return Additional information about how to use this operation or named query.
3297     */
3298    public String getComment() { 
3299      return this.comment == null ? null : this.comment.getValue();
3300    }
3301
3302    /**
3303     * @param value Additional information about how to use this operation or named query.
3304     */
3305    public OperationDefinition setComment(String value) { 
3306      if (value == null)
3307        this.comment = null;
3308      else {
3309        if (this.comment == null)
3310          this.comment = new MarkdownType();
3311        this.comment.setValue(value);
3312      }
3313      return this;
3314    }
3315
3316    /**
3317     * @return {@link #base} (Indicates that this operation definition is a constraining profile on the base.). This is the underlying object with id, value and extensions. The accessor "getBase" gives direct access to the value
3318     */
3319    public CanonicalType getBaseElement() { 
3320      if (this.base == null)
3321        if (Configuration.errorOnAutoCreate())
3322          throw new Error("Attempt to auto-create OperationDefinition.base");
3323        else if (Configuration.doAutoCreate())
3324          this.base = new CanonicalType(); // bb
3325      return this.base;
3326    }
3327
3328    public boolean hasBaseElement() { 
3329      return this.base != null && !this.base.isEmpty();
3330    }
3331
3332    public boolean hasBase() { 
3333      return this.base != null && !this.base.isEmpty();
3334    }
3335
3336    /**
3337     * @param value {@link #base} (Indicates that this operation definition is a constraining profile on the base.). This is the underlying object with id, value and extensions. The accessor "getBase" gives direct access to the value
3338     */
3339    public OperationDefinition setBaseElement(CanonicalType value) { 
3340      this.base = value;
3341      return this;
3342    }
3343
3344    /**
3345     * @return Indicates that this operation definition is a constraining profile on the base.
3346     */
3347    public String getBase() { 
3348      return this.base == null ? null : this.base.getValue();
3349    }
3350
3351    /**
3352     * @param value Indicates that this operation definition is a constraining profile on the base.
3353     */
3354    public OperationDefinition setBase(String value) { 
3355      if (Utilities.noString(value))
3356        this.base = null;
3357      else {
3358        if (this.base == null)
3359          this.base = new CanonicalType();
3360        this.base.setValue(value);
3361      }
3362      return this;
3363    }
3364
3365    /**
3366     * @return {@link #resource} (The types on which this operation can be executed.)
3367     */
3368    public List<CodeType> getResource() { 
3369      if (this.resource == null)
3370        this.resource = new ArrayList<CodeType>();
3371      return this.resource;
3372    }
3373
3374    /**
3375     * @return Returns a reference to <code>this</code> for easy method chaining
3376     */
3377    public OperationDefinition setResource(List<CodeType> theResource) { 
3378      this.resource = theResource;
3379      return this;
3380    }
3381
3382    public boolean hasResource() { 
3383      if (this.resource == null)
3384        return false;
3385      for (CodeType item : this.resource)
3386        if (!item.isEmpty())
3387          return true;
3388      return false;
3389    }
3390
3391    /**
3392     * @return {@link #resource} (The types on which this operation can be executed.)
3393     */
3394    public CodeType addResourceElement() {//2 
3395      CodeType t = new CodeType();
3396      if (this.resource == null)
3397        this.resource = new ArrayList<CodeType>();
3398      this.resource.add(t);
3399      return t;
3400    }
3401
3402    /**
3403     * @param value {@link #resource} (The types on which this operation can be executed.)
3404     */
3405    public OperationDefinition addResource(String value) { //1
3406      CodeType t = new CodeType();
3407      t.setValue(value);
3408      if (this.resource == null)
3409        this.resource = new ArrayList<CodeType>();
3410      this.resource.add(t);
3411      return this;
3412    }
3413
3414    /**
3415     * @param value {@link #resource} (The types on which this operation can be executed.)
3416     */
3417    public boolean hasResource(String value) { 
3418      if (this.resource == null)
3419        return false;
3420      for (CodeType v : this.resource)
3421        if (v.getValue().equals(value)) // code
3422          return true;
3423      return false;
3424    }
3425
3426    /**
3427     * @return {@link #system} (Indicates whether this operation or named query can be invoked at the system level (e.g. without needing to choose a resource type for the context).). This is the underlying object with id, value and extensions. The accessor "getSystem" gives direct access to the value
3428     */
3429    public BooleanType getSystemElement() { 
3430      if (this.system == null)
3431        if (Configuration.errorOnAutoCreate())
3432          throw new Error("Attempt to auto-create OperationDefinition.system");
3433        else if (Configuration.doAutoCreate())
3434          this.system = new BooleanType(); // bb
3435      return this.system;
3436    }
3437
3438    public boolean hasSystemElement() { 
3439      return this.system != null && !this.system.isEmpty();
3440    }
3441
3442    public boolean hasSystem() { 
3443      return this.system != null && !this.system.isEmpty();
3444    }
3445
3446    /**
3447     * @param value {@link #system} (Indicates whether this operation or named query can be invoked at the system level (e.g. without needing to choose a resource type for the context).). This is the underlying object with id, value and extensions. The accessor "getSystem" gives direct access to the value
3448     */
3449    public OperationDefinition setSystemElement(BooleanType value) { 
3450      this.system = value;
3451      return this;
3452    }
3453
3454    /**
3455     * @return Indicates whether this operation or named query can be invoked at the system level (e.g. without needing to choose a resource type for the context).
3456     */
3457    public boolean getSystem() { 
3458      return this.system == null || this.system.isEmpty() ? false : this.system.getValue();
3459    }
3460
3461    /**
3462     * @param value Indicates whether this operation or named query can be invoked at the system level (e.g. without needing to choose a resource type for the context).
3463     */
3464    public OperationDefinition setSystem(boolean value) { 
3465        if (this.system == null)
3466          this.system = new BooleanType();
3467        this.system.setValue(value);
3468      return this;
3469    }
3470
3471    /**
3472     * @return {@link #type} (Indicates whether this operation or named query can be invoked at the resource type level for any given resource type level (e.g. without needing to choose a specific resource id for the context).). This is the underlying object with id, value and extensions. The accessor "getType" gives direct access to the value
3473     */
3474    public BooleanType getTypeElement() { 
3475      if (this.type == null)
3476        if (Configuration.errorOnAutoCreate())
3477          throw new Error("Attempt to auto-create OperationDefinition.type");
3478        else if (Configuration.doAutoCreate())
3479          this.type = new BooleanType(); // bb
3480      return this.type;
3481    }
3482
3483    public boolean hasTypeElement() { 
3484      return this.type != null && !this.type.isEmpty();
3485    }
3486
3487    public boolean hasType() { 
3488      return this.type != null && !this.type.isEmpty();
3489    }
3490
3491    /**
3492     * @param value {@link #type} (Indicates whether this operation or named query can be invoked at the resource type level for any given resource type level (e.g. without needing to choose a specific resource id for the context).). This is the underlying object with id, value and extensions. The accessor "getType" gives direct access to the value
3493     */
3494    public OperationDefinition setTypeElement(BooleanType value) { 
3495      this.type = value;
3496      return this;
3497    }
3498
3499    /**
3500     * @return Indicates whether this operation or named query can be invoked at the resource type level for any given resource type level (e.g. without needing to choose a specific resource id for the context).
3501     */
3502    public boolean getType() { 
3503      return this.type == null || this.type.isEmpty() ? false : this.type.getValue();
3504    }
3505
3506    /**
3507     * @param value Indicates whether this operation or named query can be invoked at the resource type level for any given resource type level (e.g. without needing to choose a specific resource id for the context).
3508     */
3509    public OperationDefinition setType(boolean value) { 
3510        if (this.type == null)
3511          this.type = new BooleanType();
3512        this.type.setValue(value);
3513      return this;
3514    }
3515
3516    /**
3517     * @return {@link #instance} (Indicates whether this operation can be invoked on a particular instance of one of the given types.). This is the underlying object with id, value and extensions. The accessor "getInstance" gives direct access to the value
3518     */
3519    public BooleanType getInstanceElement() { 
3520      if (this.instance == null)
3521        if (Configuration.errorOnAutoCreate())
3522          throw new Error("Attempt to auto-create OperationDefinition.instance");
3523        else if (Configuration.doAutoCreate())
3524          this.instance = new BooleanType(); // bb
3525      return this.instance;
3526    }
3527
3528    public boolean hasInstanceElement() { 
3529      return this.instance != null && !this.instance.isEmpty();
3530    }
3531
3532    public boolean hasInstance() { 
3533      return this.instance != null && !this.instance.isEmpty();
3534    }
3535
3536    /**
3537     * @param value {@link #instance} (Indicates whether this operation can be invoked on a particular instance of one of the given types.). This is the underlying object with id, value and extensions. The accessor "getInstance" gives direct access to the value
3538     */
3539    public OperationDefinition setInstanceElement(BooleanType value) { 
3540      this.instance = value;
3541      return this;
3542    }
3543
3544    /**
3545     * @return Indicates whether this operation can be invoked on a particular instance of one of the given types.
3546     */
3547    public boolean getInstance() { 
3548      return this.instance == null || this.instance.isEmpty() ? false : this.instance.getValue();
3549    }
3550
3551    /**
3552     * @param value Indicates whether this operation can be invoked on a particular instance of one of the given types.
3553     */
3554    public OperationDefinition setInstance(boolean value) { 
3555        if (this.instance == null)
3556          this.instance = new BooleanType();
3557        this.instance.setValue(value);
3558      return this;
3559    }
3560
3561    /**
3562     * @return {@link #inputProfile} (Additional validation information for the in parameters - a single profile that covers all the parameters. The profile is a constraint on the parameters resource as a whole.). This is the underlying object with id, value and extensions. The accessor "getInputProfile" gives direct access to the value
3563     */
3564    public CanonicalType getInputProfileElement() { 
3565      if (this.inputProfile == null)
3566        if (Configuration.errorOnAutoCreate())
3567          throw new Error("Attempt to auto-create OperationDefinition.inputProfile");
3568        else if (Configuration.doAutoCreate())
3569          this.inputProfile = new CanonicalType(); // bb
3570      return this.inputProfile;
3571    }
3572
3573    public boolean hasInputProfileElement() { 
3574      return this.inputProfile != null && !this.inputProfile.isEmpty();
3575    }
3576
3577    public boolean hasInputProfile() { 
3578      return this.inputProfile != null && !this.inputProfile.isEmpty();
3579    }
3580
3581    /**
3582     * @param value {@link #inputProfile} (Additional validation information for the in parameters - a single profile that covers all the parameters. The profile is a constraint on the parameters resource as a whole.). This is the underlying object with id, value and extensions. The accessor "getInputProfile" gives direct access to the value
3583     */
3584    public OperationDefinition setInputProfileElement(CanonicalType value) { 
3585      this.inputProfile = value;
3586      return this;
3587    }
3588
3589    /**
3590     * @return Additional validation information for the in parameters - a single profile that covers all the parameters. The profile is a constraint on the parameters resource as a whole.
3591     */
3592    public String getInputProfile() { 
3593      return this.inputProfile == null ? null : this.inputProfile.getValue();
3594    }
3595
3596    /**
3597     * @param value Additional validation information for the in parameters - a single profile that covers all the parameters. The profile is a constraint on the parameters resource as a whole.
3598     */
3599    public OperationDefinition setInputProfile(String value) { 
3600      if (Utilities.noString(value))
3601        this.inputProfile = null;
3602      else {
3603        if (this.inputProfile == null)
3604          this.inputProfile = new CanonicalType();
3605        this.inputProfile.setValue(value);
3606      }
3607      return this;
3608    }
3609
3610    /**
3611     * @return {@link #outputProfile} (Additional validation information for the out parameters - a single profile that covers all the parameters. The profile is a constraint on the parameters resource.). This is the underlying object with id, value and extensions. The accessor "getOutputProfile" gives direct access to the value
3612     */
3613    public CanonicalType getOutputProfileElement() { 
3614      if (this.outputProfile == null)
3615        if (Configuration.errorOnAutoCreate())
3616          throw new Error("Attempt to auto-create OperationDefinition.outputProfile");
3617        else if (Configuration.doAutoCreate())
3618          this.outputProfile = new CanonicalType(); // bb
3619      return this.outputProfile;
3620    }
3621
3622    public boolean hasOutputProfileElement() { 
3623      return this.outputProfile != null && !this.outputProfile.isEmpty();
3624    }
3625
3626    public boolean hasOutputProfile() { 
3627      return this.outputProfile != null && !this.outputProfile.isEmpty();
3628    }
3629
3630    /**
3631     * @param value {@link #outputProfile} (Additional validation information for the out parameters - a single profile that covers all the parameters. The profile is a constraint on the parameters resource.). This is the underlying object with id, value and extensions. The accessor "getOutputProfile" gives direct access to the value
3632     */
3633    public OperationDefinition setOutputProfileElement(CanonicalType value) { 
3634      this.outputProfile = value;
3635      return this;
3636    }
3637
3638    /**
3639     * @return Additional validation information for the out parameters - a single profile that covers all the parameters. The profile is a constraint on the parameters resource.
3640     */
3641    public String getOutputProfile() { 
3642      return this.outputProfile == null ? null : this.outputProfile.getValue();
3643    }
3644
3645    /**
3646     * @param value Additional validation information for the out parameters - a single profile that covers all the parameters. The profile is a constraint on the parameters resource.
3647     */
3648    public OperationDefinition setOutputProfile(String value) { 
3649      if (Utilities.noString(value))
3650        this.outputProfile = null;
3651      else {
3652        if (this.outputProfile == null)
3653          this.outputProfile = new CanonicalType();
3654        this.outputProfile.setValue(value);
3655      }
3656      return this;
3657    }
3658
3659    /**
3660     * @return {@link #parameter} (The parameters for the operation/query.)
3661     */
3662    public List<OperationDefinitionParameterComponent> getParameter() { 
3663      if (this.parameter == null)
3664        this.parameter = new ArrayList<OperationDefinitionParameterComponent>();
3665      return this.parameter;
3666    }
3667
3668    /**
3669     * @return Returns a reference to <code>this</code> for easy method chaining
3670     */
3671    public OperationDefinition setParameter(List<OperationDefinitionParameterComponent> theParameter) { 
3672      this.parameter = theParameter;
3673      return this;
3674    }
3675
3676    public boolean hasParameter() { 
3677      if (this.parameter == null)
3678        return false;
3679      for (OperationDefinitionParameterComponent item : this.parameter)
3680        if (!item.isEmpty())
3681          return true;
3682      return false;
3683    }
3684
3685    public OperationDefinitionParameterComponent addParameter() { //3
3686      OperationDefinitionParameterComponent t = new OperationDefinitionParameterComponent();
3687      if (this.parameter == null)
3688        this.parameter = new ArrayList<OperationDefinitionParameterComponent>();
3689      this.parameter.add(t);
3690      return t;
3691    }
3692
3693    public OperationDefinition addParameter(OperationDefinitionParameterComponent t) { //3
3694      if (t == null)
3695        return this;
3696      if (this.parameter == null)
3697        this.parameter = new ArrayList<OperationDefinitionParameterComponent>();
3698      this.parameter.add(t);
3699      return this;
3700    }
3701
3702    /**
3703     * @return The first repetition of repeating field {@link #parameter}, creating it if it does not already exist {3}
3704     */
3705    public OperationDefinitionParameterComponent getParameterFirstRep() { 
3706      if (getParameter().isEmpty()) {
3707        addParameter();
3708      }
3709      return getParameter().get(0);
3710    }
3711
3712    /**
3713     * @return {@link #overload} (Defines an appropriate combination of parameters to use when invoking this operation, to help code generators when generating overloaded parameter sets for this operation.)
3714     */
3715    public List<OperationDefinitionOverloadComponent> getOverload() { 
3716      if (this.overload == null)
3717        this.overload = new ArrayList<OperationDefinitionOverloadComponent>();
3718      return this.overload;
3719    }
3720
3721    /**
3722     * @return Returns a reference to <code>this</code> for easy method chaining
3723     */
3724    public OperationDefinition setOverload(List<OperationDefinitionOverloadComponent> theOverload) { 
3725      this.overload = theOverload;
3726      return this;
3727    }
3728
3729    public boolean hasOverload() { 
3730      if (this.overload == null)
3731        return false;
3732      for (OperationDefinitionOverloadComponent item : this.overload)
3733        if (!item.isEmpty())
3734          return true;
3735      return false;
3736    }
3737
3738    public OperationDefinitionOverloadComponent addOverload() { //3
3739      OperationDefinitionOverloadComponent t = new OperationDefinitionOverloadComponent();
3740      if (this.overload == null)
3741        this.overload = new ArrayList<OperationDefinitionOverloadComponent>();
3742      this.overload.add(t);
3743      return t;
3744    }
3745
3746    public OperationDefinition addOverload(OperationDefinitionOverloadComponent t) { //3
3747      if (t == null)
3748        return this;
3749      if (this.overload == null)
3750        this.overload = new ArrayList<OperationDefinitionOverloadComponent>();
3751      this.overload.add(t);
3752      return this;
3753    }
3754
3755    /**
3756     * @return The first repetition of repeating field {@link #overload}, creating it if it does not already exist {3}
3757     */
3758    public OperationDefinitionOverloadComponent getOverloadFirstRep() { 
3759      if (getOverload().isEmpty()) {
3760        addOverload();
3761      }
3762      return getOverload().get(0);
3763    }
3764
3765    /**
3766     * not supported on this implementation
3767     */
3768    @Override
3769    public int getIdentifierMax() { 
3770      return 0;
3771    }
3772    /**
3773     * @return {@link #identifier} (A formal identifier that is used to identify this operation definition when it is represented in other formats, or referenced in a specification, model, design or an instance.)
3774     */
3775    public List<Identifier> getIdentifier() { 
3776      return new ArrayList<>();
3777    }
3778    /**
3779     * @return Returns a reference to <code>this</code> for easy method chaining
3780     */
3781    public OperationDefinition setIdentifier(List<Identifier> theIdentifier) { 
3782      throw new Error("The resource type \"OperationDefinition\" does not implement the property \"identifier\""); 
3783    }
3784    public boolean hasIdentifier() { 
3785      return false;
3786    }
3787
3788    public Identifier addIdentifier() { //3
3789      throw new Error("The resource type \"OperationDefinition\" does not implement the property \"identifier\""); 
3790    }
3791    public OperationDefinition addIdentifier(Identifier t) { //3
3792      throw new Error("The resource type \"OperationDefinition\" does not implement the property \"identifier\""); 
3793    }
3794    /**
3795     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist {2}
3796     */
3797    public Identifier getIdentifierFirstRep() { 
3798      throw new Error("The resource type \"OperationDefinition\" does not implement the property \"identifier\""); 
3799    }
3800      protected void listChildren(List<Property> children) {
3801        super.listChildren(children);
3802        children.add(new Property("url", "uri", "An absolute URI that is used to identify this operation definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which an authoritative instance of this operation definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the operation definition is stored on different servers.", 0, 1, url));
3803        children.add(new Property("version", "string", "The identifier that is used to identify this version of the operation definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the operation definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.", 0, 1, version));
3804        children.add(new Property("versionAlgorithm[x]", "string|Coding", "Indicates the mechanism used to compare versions to determine which is more current.", 0, 1, versionAlgorithm));
3805        children.add(new Property("name", "string", "A natural language name identifying the operation definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.", 0, 1, name));
3806        children.add(new Property("title", "string", "A short, descriptive, user-friendly title for the operation definition.", 0, 1, title));
3807        children.add(new Property("status", "code", "The status of this operation definition. Enables tracking the life-cycle of the content.", 0, 1, status));
3808        children.add(new Property("kind", "code", "Whether this is an operation or a named query.", 0, 1, kind));
3809        children.add(new Property("experimental", "boolean", "A Boolean value to indicate that this operation definition is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.", 0, 1, experimental));
3810        children.add(new Property("date", "dateTime", "The date  (and optionally time) when the operation definition was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the operation definition changes.", 0, 1, date));
3811        children.add(new Property("publisher", "string", "The name of the organization or individual responsible for the release and ongoing maintenance of the operation definition.", 0, 1, publisher));
3812        children.add(new Property("contact", "ContactDetail", "Contact details to assist a user in finding and communicating with the publisher.", 0, java.lang.Integer.MAX_VALUE, contact));
3813        children.add(new Property("description", "markdown", "A free text natural language description of the operation definition from a consumer's perspective.", 0, 1, description));
3814        children.add(new Property("useContext", "UsageContext", "The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate operation definition instances.", 0, java.lang.Integer.MAX_VALUE, useContext));
3815        children.add(new Property("jurisdiction", "CodeableConcept", "A legal or geographic region in which the operation definition is intended to be used.", 0, java.lang.Integer.MAX_VALUE, jurisdiction));
3816        children.add(new Property("purpose", "markdown", "Explanation of why this operation definition is needed and why it has been designed as it has.", 0, 1, purpose));
3817        children.add(new Property("copyright", "markdown", "A copyright statement relating to the OperationDefinition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the OperationDefinition.", 0, 1, copyright));
3818        children.add(new Property("copyrightLabel", "string", "A short string (<50 characters), suitable for inclusion in a page footer that identifies the copyright holder, effective period, and optionally whether rights are resctricted. (e.g. 'All rights reserved', 'Some rights reserved').", 0, 1, copyrightLabel));
3819        children.add(new Property("affectsState", "boolean", "Whether the operation affects state. Side effects such as producing audit trail entries do not count as 'affecting  state'.", 0, 1, affectsState));
3820        children.add(new Property("code", "code", "The label that is recommended to be used in the URL for this operation. In some cases, servers may need to use a different CapabilityStatement operation.name to differentiate between multiple SearchParameters that happen to have the same code.", 0, 1, code));
3821        children.add(new Property("comment", "markdown", "Additional information about how to use this operation or named query.", 0, 1, comment));
3822        children.add(new Property("base", "canonical(OperationDefinition)", "Indicates that this operation definition is a constraining profile on the base.", 0, 1, base));
3823        children.add(new Property("resource", "code", "The types on which this operation can be executed.", 0, java.lang.Integer.MAX_VALUE, resource));
3824        children.add(new Property("system", "boolean", "Indicates whether this operation or named query can be invoked at the system level (e.g. without needing to choose a resource type for the context).", 0, 1, system));
3825        children.add(new Property("type", "boolean", "Indicates whether this operation or named query can be invoked at the resource type level for any given resource type level (e.g. without needing to choose a specific resource id for the context).", 0, 1, type));
3826        children.add(new Property("instance", "boolean", "Indicates whether this operation can be invoked on a particular instance of one of the given types.", 0, 1, instance));
3827        children.add(new Property("inputProfile", "canonical(StructureDefinition)", "Additional validation information for the in parameters - a single profile that covers all the parameters. The profile is a constraint on the parameters resource as a whole.", 0, 1, inputProfile));
3828        children.add(new Property("outputProfile", "canonical(StructureDefinition)", "Additional validation information for the out parameters - a single profile that covers all the parameters. The profile is a constraint on the parameters resource.", 0, 1, outputProfile));
3829        children.add(new Property("parameter", "", "The parameters for the operation/query.", 0, java.lang.Integer.MAX_VALUE, parameter));
3830        children.add(new Property("overload", "", "Defines an appropriate combination of parameters to use when invoking this operation, to help code generators when generating overloaded parameter sets for this operation.", 0, java.lang.Integer.MAX_VALUE, overload));
3831      }
3832
3833      @Override
3834      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
3835        switch (_hash) {
3836        case 116079: /*url*/  return new Property("url", "uri", "An absolute URI that is used to identify this operation definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which an authoritative instance of this operation definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the operation definition is stored on different servers.", 0, 1, url);
3837        case 351608024: /*version*/  return new Property("version", "string", "The identifier that is used to identify this version of the operation definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the operation definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.", 0, 1, version);
3838        case -115699031: /*versionAlgorithm[x]*/  return new Property("versionAlgorithm[x]", "string|Coding", "Indicates the mechanism used to compare versions to determine which is more current.", 0, 1, versionAlgorithm);
3839        case 1508158071: /*versionAlgorithm*/  return new Property("versionAlgorithm[x]", "string|Coding", "Indicates the mechanism used to compare versions to determine which is more current.", 0, 1, versionAlgorithm);
3840        case 1836908904: /*versionAlgorithmString*/  return new Property("versionAlgorithm[x]", "string", "Indicates the mechanism used to compare versions to determine which is more current.", 0, 1, versionAlgorithm);
3841        case 1373807809: /*versionAlgorithmCoding*/  return new Property("versionAlgorithm[x]", "Coding", "Indicates the mechanism used to compare versions to determine which is more current.", 0, 1, versionAlgorithm);
3842        case 3373707: /*name*/  return new Property("name", "string", "A natural language name identifying the operation definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.", 0, 1, name);
3843        case 110371416: /*title*/  return new Property("title", "string", "A short, descriptive, user-friendly title for the operation definition.", 0, 1, title);
3844        case -892481550: /*status*/  return new Property("status", "code", "The status of this operation definition. Enables tracking the life-cycle of the content.", 0, 1, status);
3845        case 3292052: /*kind*/  return new Property("kind", "code", "Whether this is an operation or a named query.", 0, 1, kind);
3846        case -404562712: /*experimental*/  return new Property("experimental", "boolean", "A Boolean value to indicate that this operation definition is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.", 0, 1, experimental);
3847        case 3076014: /*date*/  return new Property("date", "dateTime", "The date  (and optionally time) when the operation definition was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the operation definition changes.", 0, 1, date);
3848        case 1447404028: /*publisher*/  return new Property("publisher", "string", "The name of the organization or individual responsible for the release and ongoing maintenance of the operation definition.", 0, 1, publisher);
3849        case 951526432: /*contact*/  return new Property("contact", "ContactDetail", "Contact details to assist a user in finding and communicating with the publisher.", 0, java.lang.Integer.MAX_VALUE, contact);
3850        case -1724546052: /*description*/  return new Property("description", "markdown", "A free text natural language description of the operation definition from a consumer's perspective.", 0, 1, description);
3851        case -669707736: /*useContext*/  return new Property("useContext", "UsageContext", "The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate operation definition instances.", 0, java.lang.Integer.MAX_VALUE, useContext);
3852        case -507075711: /*jurisdiction*/  return new Property("jurisdiction", "CodeableConcept", "A legal or geographic region in which the operation definition is intended to be used.", 0, java.lang.Integer.MAX_VALUE, jurisdiction);
3853        case -220463842: /*purpose*/  return new Property("purpose", "markdown", "Explanation of why this operation definition is needed and why it has been designed as it has.", 0, 1, purpose);
3854        case 1522889671: /*copyright*/  return new Property("copyright", "markdown", "A copyright statement relating to the OperationDefinition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the OperationDefinition.", 0, 1, copyright);
3855        case 765157229: /*copyrightLabel*/  return new Property("copyrightLabel", "string", "A short string (<50 characters), suitable for inclusion in a page footer that identifies the copyright holder, effective period, and optionally whether rights are resctricted. (e.g. 'All rights reserved', 'Some rights reserved').", 0, 1, copyrightLabel);
3856        case -14805197: /*affectsState*/  return new Property("affectsState", "boolean", "Whether the operation affects state. Side effects such as producing audit trail entries do not count as 'affecting  state'.", 0, 1, affectsState);
3857        case 3059181: /*code*/  return new Property("code", "code", "The label that is recommended to be used in the URL for this operation. In some cases, servers may need to use a different CapabilityStatement operation.name to differentiate between multiple SearchParameters that happen to have the same code.", 0, 1, code);
3858        case 950398559: /*comment*/  return new Property("comment", "markdown", "Additional information about how to use this operation or named query.", 0, 1, comment);
3859        case 3016401: /*base*/  return new Property("base", "canonical(OperationDefinition)", "Indicates that this operation definition is a constraining profile on the base.", 0, 1, base);
3860        case -341064690: /*resource*/  return new Property("resource", "code", "The types on which this operation can be executed.", 0, java.lang.Integer.MAX_VALUE, resource);
3861        case -887328209: /*system*/  return new Property("system", "boolean", "Indicates whether this operation or named query can be invoked at the system level (e.g. without needing to choose a resource type for the context).", 0, 1, system);
3862        case 3575610: /*type*/  return new Property("type", "boolean", "Indicates whether this operation or named query can be invoked at the resource type level for any given resource type level (e.g. without needing to choose a specific resource id for the context).", 0, 1, type);
3863        case 555127957: /*instance*/  return new Property("instance", "boolean", "Indicates whether this operation can be invoked on a particular instance of one of the given types.", 0, 1, instance);
3864        case 676942463: /*inputProfile*/  return new Property("inputProfile", "canonical(StructureDefinition)", "Additional validation information for the in parameters - a single profile that covers all the parameters. The profile is a constraint on the parameters resource as a whole.", 0, 1, inputProfile);
3865        case 1826166120: /*outputProfile*/  return new Property("outputProfile", "canonical(StructureDefinition)", "Additional validation information for the out parameters - a single profile that covers all the parameters. The profile is a constraint on the parameters resource.", 0, 1, outputProfile);
3866        case 1954460585: /*parameter*/  return new Property("parameter", "", "The parameters for the operation/query.", 0, java.lang.Integer.MAX_VALUE, parameter);
3867        case 529823674: /*overload*/  return new Property("overload", "", "Defines an appropriate combination of parameters to use when invoking this operation, to help code generators when generating overloaded parameter sets for this operation.", 0, java.lang.Integer.MAX_VALUE, overload);
3868        default: return super.getNamedProperty(_hash, _name, _checkValid);
3869        }
3870
3871      }
3872
3873      @Override
3874      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
3875        switch (hash) {
3876        case 116079: /*url*/ return this.url == null ? new Base[0] : new Base[] {this.url}; // UriType
3877        case 351608024: /*version*/ return this.version == null ? new Base[0] : new Base[] {this.version}; // StringType
3878        case 1508158071: /*versionAlgorithm*/ return this.versionAlgorithm == null ? new Base[0] : new Base[] {this.versionAlgorithm}; // DataType
3879        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // StringType
3880        case 110371416: /*title*/ return this.title == null ? new Base[0] : new Base[] {this.title}; // StringType
3881        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<PublicationStatus>
3882        case 3292052: /*kind*/ return this.kind == null ? new Base[0] : new Base[] {this.kind}; // Enumeration<OperationKind>
3883        case -404562712: /*experimental*/ return this.experimental == null ? new Base[0] : new Base[] {this.experimental}; // BooleanType
3884        case 3076014: /*date*/ return this.date == null ? new Base[0] : new Base[] {this.date}; // DateTimeType
3885        case 1447404028: /*publisher*/ return this.publisher == null ? new Base[0] : new Base[] {this.publisher}; // StringType
3886        case 951526432: /*contact*/ return this.contact == null ? new Base[0] : this.contact.toArray(new Base[this.contact.size()]); // ContactDetail
3887        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // MarkdownType
3888        case -669707736: /*useContext*/ return this.useContext == null ? new Base[0] : this.useContext.toArray(new Base[this.useContext.size()]); // UsageContext
3889        case -507075711: /*jurisdiction*/ return this.jurisdiction == null ? new Base[0] : this.jurisdiction.toArray(new Base[this.jurisdiction.size()]); // CodeableConcept
3890        case -220463842: /*purpose*/ return this.purpose == null ? new Base[0] : new Base[] {this.purpose}; // MarkdownType
3891        case 1522889671: /*copyright*/ return this.copyright == null ? new Base[0] : new Base[] {this.copyright}; // MarkdownType
3892        case 765157229: /*copyrightLabel*/ return this.copyrightLabel == null ? new Base[0] : new Base[] {this.copyrightLabel}; // StringType
3893        case -14805197: /*affectsState*/ return this.affectsState == null ? new Base[0] : new Base[] {this.affectsState}; // BooleanType
3894        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeType
3895        case 950398559: /*comment*/ return this.comment == null ? new Base[0] : new Base[] {this.comment}; // MarkdownType
3896        case 3016401: /*base*/ return this.base == null ? new Base[0] : new Base[] {this.base}; // CanonicalType
3897        case -341064690: /*resource*/ return this.resource == null ? new Base[0] : this.resource.toArray(new Base[this.resource.size()]); // CodeType
3898        case -887328209: /*system*/ return this.system == null ? new Base[0] : new Base[] {this.system}; // BooleanType
3899        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // BooleanType
3900        case 555127957: /*instance*/ return this.instance == null ? new Base[0] : new Base[] {this.instance}; // BooleanType
3901        case 676942463: /*inputProfile*/ return this.inputProfile == null ? new Base[0] : new Base[] {this.inputProfile}; // CanonicalType
3902        case 1826166120: /*outputProfile*/ return this.outputProfile == null ? new Base[0] : new Base[] {this.outputProfile}; // CanonicalType
3903        case 1954460585: /*parameter*/ return this.parameter == null ? new Base[0] : this.parameter.toArray(new Base[this.parameter.size()]); // OperationDefinitionParameterComponent
3904        case 529823674: /*overload*/ return this.overload == null ? new Base[0] : this.overload.toArray(new Base[this.overload.size()]); // OperationDefinitionOverloadComponent
3905        default: return super.getProperty(hash, name, checkValid);
3906        }
3907
3908      }
3909
3910      @Override
3911      public Base setProperty(int hash, String name, Base value) throws FHIRException {
3912        switch (hash) {
3913        case 116079: // url
3914          this.url = TypeConvertor.castToUri(value); // UriType
3915          return value;
3916        case 351608024: // version
3917          this.version = TypeConvertor.castToString(value); // StringType
3918          return value;
3919        case 1508158071: // versionAlgorithm
3920          this.versionAlgorithm = TypeConvertor.castToType(value); // DataType
3921          return value;
3922        case 3373707: // name
3923          this.name = TypeConvertor.castToString(value); // StringType
3924          return value;
3925        case 110371416: // title
3926          this.title = TypeConvertor.castToString(value); // StringType
3927          return value;
3928        case -892481550: // status
3929          value = new PublicationStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
3930          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
3931          return value;
3932        case 3292052: // kind
3933          value = new OperationKindEnumFactory().fromType(TypeConvertor.castToCode(value));
3934          this.kind = (Enumeration) value; // Enumeration<OperationKind>
3935          return value;
3936        case -404562712: // experimental
3937          this.experimental = TypeConvertor.castToBoolean(value); // BooleanType
3938          return value;
3939        case 3076014: // date
3940          this.date = TypeConvertor.castToDateTime(value); // DateTimeType
3941          return value;
3942        case 1447404028: // publisher
3943          this.publisher = TypeConvertor.castToString(value); // StringType
3944          return value;
3945        case 951526432: // contact
3946          this.getContact().add(TypeConvertor.castToContactDetail(value)); // ContactDetail
3947          return value;
3948        case -1724546052: // description
3949          this.description = TypeConvertor.castToMarkdown(value); // MarkdownType
3950          return value;
3951        case -669707736: // useContext
3952          this.getUseContext().add(TypeConvertor.castToUsageContext(value)); // UsageContext
3953          return value;
3954        case -507075711: // jurisdiction
3955          this.getJurisdiction().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
3956          return value;
3957        case -220463842: // purpose
3958          this.purpose = TypeConvertor.castToMarkdown(value); // MarkdownType
3959          return value;
3960        case 1522889671: // copyright
3961          this.copyright = TypeConvertor.castToMarkdown(value); // MarkdownType
3962          return value;
3963        case 765157229: // copyrightLabel
3964          this.copyrightLabel = TypeConvertor.castToString(value); // StringType
3965          return value;
3966        case -14805197: // affectsState
3967          this.affectsState = TypeConvertor.castToBoolean(value); // BooleanType
3968          return value;
3969        case 3059181: // code
3970          this.code = TypeConvertor.castToCode(value); // CodeType
3971          return value;
3972        case 950398559: // comment
3973          this.comment = TypeConvertor.castToMarkdown(value); // MarkdownType
3974          return value;
3975        case 3016401: // base
3976          this.base = TypeConvertor.castToCanonical(value); // CanonicalType
3977          return value;
3978        case -341064690: // resource
3979          this.getResource().add(TypeConvertor.castToCode(value)); // CodeType
3980          return value;
3981        case -887328209: // system
3982          this.system = TypeConvertor.castToBoolean(value); // BooleanType
3983          return value;
3984        case 3575610: // type
3985          this.type = TypeConvertor.castToBoolean(value); // BooleanType
3986          return value;
3987        case 555127957: // instance
3988          this.instance = TypeConvertor.castToBoolean(value); // BooleanType
3989          return value;
3990        case 676942463: // inputProfile
3991          this.inputProfile = TypeConvertor.castToCanonical(value); // CanonicalType
3992          return value;
3993        case 1826166120: // outputProfile
3994          this.outputProfile = TypeConvertor.castToCanonical(value); // CanonicalType
3995          return value;
3996        case 1954460585: // parameter
3997          this.getParameter().add((OperationDefinitionParameterComponent) value); // OperationDefinitionParameterComponent
3998          return value;
3999        case 529823674: // overload
4000          this.getOverload().add((OperationDefinitionOverloadComponent) value); // OperationDefinitionOverloadComponent
4001          return value;
4002        default: return super.setProperty(hash, name, value);
4003        }
4004
4005      }
4006
4007      @Override
4008      public Base setProperty(String name, Base value) throws FHIRException {
4009        if (name.equals("url")) {
4010          this.url = TypeConvertor.castToUri(value); // UriType
4011        } else if (name.equals("version")) {
4012          this.version = TypeConvertor.castToString(value); // StringType
4013        } else if (name.equals("versionAlgorithm[x]")) {
4014          this.versionAlgorithm = TypeConvertor.castToType(value); // DataType
4015        } else if (name.equals("name")) {
4016          this.name = TypeConvertor.castToString(value); // StringType
4017        } else if (name.equals("title")) {
4018          this.title = TypeConvertor.castToString(value); // StringType
4019        } else if (name.equals("status")) {
4020          value = new PublicationStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
4021          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
4022        } else if (name.equals("kind")) {
4023          value = new OperationKindEnumFactory().fromType(TypeConvertor.castToCode(value));
4024          this.kind = (Enumeration) value; // Enumeration<OperationKind>
4025        } else if (name.equals("experimental")) {
4026          this.experimental = TypeConvertor.castToBoolean(value); // BooleanType
4027        } else if (name.equals("date")) {
4028          this.date = TypeConvertor.castToDateTime(value); // DateTimeType
4029        } else if (name.equals("publisher")) {
4030          this.publisher = TypeConvertor.castToString(value); // StringType
4031        } else if (name.equals("contact")) {
4032          this.getContact().add(TypeConvertor.castToContactDetail(value));
4033        } else if (name.equals("description")) {
4034          this.description = TypeConvertor.castToMarkdown(value); // MarkdownType
4035        } else if (name.equals("useContext")) {
4036          this.getUseContext().add(TypeConvertor.castToUsageContext(value));
4037        } else if (name.equals("jurisdiction")) {
4038          this.getJurisdiction().add(TypeConvertor.castToCodeableConcept(value));
4039        } else if (name.equals("purpose")) {
4040          this.purpose = TypeConvertor.castToMarkdown(value); // MarkdownType
4041        } else if (name.equals("copyright")) {
4042          this.copyright = TypeConvertor.castToMarkdown(value); // MarkdownType
4043        } else if (name.equals("copyrightLabel")) {
4044          this.copyrightLabel = TypeConvertor.castToString(value); // StringType
4045        } else if (name.equals("affectsState")) {
4046          this.affectsState = TypeConvertor.castToBoolean(value); // BooleanType
4047        } else if (name.equals("code")) {
4048          this.code = TypeConvertor.castToCode(value); // CodeType
4049        } else if (name.equals("comment")) {
4050          this.comment = TypeConvertor.castToMarkdown(value); // MarkdownType
4051        } else if (name.equals("base")) {
4052          this.base = TypeConvertor.castToCanonical(value); // CanonicalType
4053        } else if (name.equals("resource")) {
4054          this.getResource().add(TypeConvertor.castToCode(value));
4055        } else if (name.equals("system")) {
4056          this.system = TypeConvertor.castToBoolean(value); // BooleanType
4057        } else if (name.equals("type")) {
4058          this.type = TypeConvertor.castToBoolean(value); // BooleanType
4059        } else if (name.equals("instance")) {
4060          this.instance = TypeConvertor.castToBoolean(value); // BooleanType
4061        } else if (name.equals("inputProfile")) {
4062          this.inputProfile = TypeConvertor.castToCanonical(value); // CanonicalType
4063        } else if (name.equals("outputProfile")) {
4064          this.outputProfile = TypeConvertor.castToCanonical(value); // CanonicalType
4065        } else if (name.equals("parameter")) {
4066          this.getParameter().add((OperationDefinitionParameterComponent) value);
4067        } else if (name.equals("overload")) {
4068          this.getOverload().add((OperationDefinitionOverloadComponent) value);
4069        } else
4070          return super.setProperty(name, value);
4071        return value;
4072      }
4073
4074      @Override
4075      public Base makeProperty(int hash, String name) throws FHIRException {
4076        switch (hash) {
4077        case 116079:  return getUrlElement();
4078        case 351608024:  return getVersionElement();
4079        case -115699031:  return getVersionAlgorithm();
4080        case 1508158071:  return getVersionAlgorithm();
4081        case 3373707:  return getNameElement();
4082        case 110371416:  return getTitleElement();
4083        case -892481550:  return getStatusElement();
4084        case 3292052:  return getKindElement();
4085        case -404562712:  return getExperimentalElement();
4086        case 3076014:  return getDateElement();
4087        case 1447404028:  return getPublisherElement();
4088        case 951526432:  return addContact(); 
4089        case -1724546052:  return getDescriptionElement();
4090        case -669707736:  return addUseContext(); 
4091        case -507075711:  return addJurisdiction(); 
4092        case -220463842:  return getPurposeElement();
4093        case 1522889671:  return getCopyrightElement();
4094        case 765157229:  return getCopyrightLabelElement();
4095        case -14805197:  return getAffectsStateElement();
4096        case 3059181:  return getCodeElement();
4097        case 950398559:  return getCommentElement();
4098        case 3016401:  return getBaseElement();
4099        case -341064690:  return addResourceElement();
4100        case -887328209:  return getSystemElement();
4101        case 3575610:  return getTypeElement();
4102        case 555127957:  return getInstanceElement();
4103        case 676942463:  return getInputProfileElement();
4104        case 1826166120:  return getOutputProfileElement();
4105        case 1954460585:  return addParameter(); 
4106        case 529823674:  return addOverload(); 
4107        default: return super.makeProperty(hash, name);
4108        }
4109
4110      }
4111
4112      @Override
4113      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
4114        switch (hash) {
4115        case 116079: /*url*/ return new String[] {"uri"};
4116        case 351608024: /*version*/ return new String[] {"string"};
4117        case 1508158071: /*versionAlgorithm*/ return new String[] {"string", "Coding"};
4118        case 3373707: /*name*/ return new String[] {"string"};
4119        case 110371416: /*title*/ return new String[] {"string"};
4120        case -892481550: /*status*/ return new String[] {"code"};
4121        case 3292052: /*kind*/ return new String[] {"code"};
4122        case -404562712: /*experimental*/ return new String[] {"boolean"};
4123        case 3076014: /*date*/ return new String[] {"dateTime"};
4124        case 1447404028: /*publisher*/ return new String[] {"string"};
4125        case 951526432: /*contact*/ return new String[] {"ContactDetail"};
4126        case -1724546052: /*description*/ return new String[] {"markdown"};
4127        case -669707736: /*useContext*/ return new String[] {"UsageContext"};
4128        case -507075711: /*jurisdiction*/ return new String[] {"CodeableConcept"};
4129        case -220463842: /*purpose*/ return new String[] {"markdown"};
4130        case 1522889671: /*copyright*/ return new String[] {"markdown"};
4131        case 765157229: /*copyrightLabel*/ return new String[] {"string"};
4132        case -14805197: /*affectsState*/ return new String[] {"boolean"};
4133        case 3059181: /*code*/ return new String[] {"code"};
4134        case 950398559: /*comment*/ return new String[] {"markdown"};
4135        case 3016401: /*base*/ return new String[] {"canonical"};
4136        case -341064690: /*resource*/ return new String[] {"code"};
4137        case -887328209: /*system*/ return new String[] {"boolean"};
4138        case 3575610: /*type*/ return new String[] {"boolean"};
4139        case 555127957: /*instance*/ return new String[] {"boolean"};
4140        case 676942463: /*inputProfile*/ return new String[] {"canonical"};
4141        case 1826166120: /*outputProfile*/ return new String[] {"canonical"};
4142        case 1954460585: /*parameter*/ return new String[] {};
4143        case 529823674: /*overload*/ return new String[] {};
4144        default: return super.getTypesForProperty(hash, name);
4145        }
4146
4147      }
4148
4149      @Override
4150      public Base addChild(String name) throws FHIRException {
4151        if (name.equals("url")) {
4152          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.url");
4153        }
4154        else if (name.equals("version")) {
4155          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.version");
4156        }
4157        else if (name.equals("versionAlgorithmString")) {
4158          this.versionAlgorithm = new StringType();
4159          return this.versionAlgorithm;
4160        }
4161        else if (name.equals("versionAlgorithmCoding")) {
4162          this.versionAlgorithm = new Coding();
4163          return this.versionAlgorithm;
4164        }
4165        else if (name.equals("name")) {
4166          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.name");
4167        }
4168        else if (name.equals("title")) {
4169          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.title");
4170        }
4171        else if (name.equals("status")) {
4172          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.status");
4173        }
4174        else if (name.equals("kind")) {
4175          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.kind");
4176        }
4177        else if (name.equals("experimental")) {
4178          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.experimental");
4179        }
4180        else if (name.equals("date")) {
4181          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.date");
4182        }
4183        else if (name.equals("publisher")) {
4184          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.publisher");
4185        }
4186        else if (name.equals("contact")) {
4187          return addContact();
4188        }
4189        else if (name.equals("description")) {
4190          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.description");
4191        }
4192        else if (name.equals("useContext")) {
4193          return addUseContext();
4194        }
4195        else if (name.equals("jurisdiction")) {
4196          return addJurisdiction();
4197        }
4198        else if (name.equals("purpose")) {
4199          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.purpose");
4200        }
4201        else if (name.equals("copyright")) {
4202          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.copyright");
4203        }
4204        else if (name.equals("copyrightLabel")) {
4205          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.copyrightLabel");
4206        }
4207        else if (name.equals("affectsState")) {
4208          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.affectsState");
4209        }
4210        else if (name.equals("code")) {
4211          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.code");
4212        }
4213        else if (name.equals("comment")) {
4214          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.comment");
4215        }
4216        else if (name.equals("base")) {
4217          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.base");
4218        }
4219        else if (name.equals("resource")) {
4220          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.resource");
4221        }
4222        else if (name.equals("system")) {
4223          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.system");
4224        }
4225        else if (name.equals("type")) {
4226          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.type");
4227        }
4228        else if (name.equals("instance")) {
4229          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.instance");
4230        }
4231        else if (name.equals("inputProfile")) {
4232          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.inputProfile");
4233        }
4234        else if (name.equals("outputProfile")) {
4235          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.outputProfile");
4236        }
4237        else if (name.equals("parameter")) {
4238          return addParameter();
4239        }
4240        else if (name.equals("overload")) {
4241          return addOverload();
4242        }
4243        else
4244          return super.addChild(name);
4245      }
4246
4247  public String fhirType() {
4248    return "OperationDefinition";
4249
4250  }
4251
4252      public OperationDefinition copy() {
4253        OperationDefinition dst = new OperationDefinition();
4254        copyValues(dst);
4255        return dst;
4256      }
4257
4258      public void copyValues(OperationDefinition dst) {
4259        super.copyValues(dst);
4260        dst.url = url == null ? null : url.copy();
4261        dst.version = version == null ? null : version.copy();
4262        dst.versionAlgorithm = versionAlgorithm == null ? null : versionAlgorithm.copy();
4263        dst.name = name == null ? null : name.copy();
4264        dst.title = title == null ? null : title.copy();
4265        dst.status = status == null ? null : status.copy();
4266        dst.kind = kind == null ? null : kind.copy();
4267        dst.experimental = experimental == null ? null : experimental.copy();
4268        dst.date = date == null ? null : date.copy();
4269        dst.publisher = publisher == null ? null : publisher.copy();
4270        if (contact != null) {
4271          dst.contact = new ArrayList<ContactDetail>();
4272          for (ContactDetail i : contact)
4273            dst.contact.add(i.copy());
4274        };
4275        dst.description = description == null ? null : description.copy();
4276        if (useContext != null) {
4277          dst.useContext = new ArrayList<UsageContext>();
4278          for (UsageContext i : useContext)
4279            dst.useContext.add(i.copy());
4280        };
4281        if (jurisdiction != null) {
4282          dst.jurisdiction = new ArrayList<CodeableConcept>();
4283          for (CodeableConcept i : jurisdiction)
4284            dst.jurisdiction.add(i.copy());
4285        };
4286        dst.purpose = purpose == null ? null : purpose.copy();
4287        dst.copyright = copyright == null ? null : copyright.copy();
4288        dst.copyrightLabel = copyrightLabel == null ? null : copyrightLabel.copy();
4289        dst.affectsState = affectsState == null ? null : affectsState.copy();
4290        dst.code = code == null ? null : code.copy();
4291        dst.comment = comment == null ? null : comment.copy();
4292        dst.base = base == null ? null : base.copy();
4293        if (resource != null) {
4294          dst.resource = new ArrayList<CodeType>();
4295          for (CodeType i : resource)
4296            dst.resource.add(i.copy());
4297        };
4298        dst.system = system == null ? null : system.copy();
4299        dst.type = type == null ? null : type.copy();
4300        dst.instance = instance == null ? null : instance.copy();
4301        dst.inputProfile = inputProfile == null ? null : inputProfile.copy();
4302        dst.outputProfile = outputProfile == null ? null : outputProfile.copy();
4303        if (parameter != null) {
4304          dst.parameter = new ArrayList<OperationDefinitionParameterComponent>();
4305          for (OperationDefinitionParameterComponent i : parameter)
4306            dst.parameter.add(i.copy());
4307        };
4308        if (overload != null) {
4309          dst.overload = new ArrayList<OperationDefinitionOverloadComponent>();
4310          for (OperationDefinitionOverloadComponent i : overload)
4311            dst.overload.add(i.copy());
4312        };
4313      }
4314
4315      protected OperationDefinition typedCopy() {
4316        return copy();
4317      }
4318
4319      @Override
4320      public boolean equalsDeep(Base other_) {
4321        if (!super.equalsDeep(other_))
4322          return false;
4323        if (!(other_ instanceof OperationDefinition))
4324          return false;
4325        OperationDefinition o = (OperationDefinition) other_;
4326        return compareDeep(url, o.url, true) && compareDeep(version, o.version, true) && compareDeep(versionAlgorithm, o.versionAlgorithm, true)
4327           && compareDeep(name, o.name, true) && compareDeep(title, o.title, true) && compareDeep(status, o.status, true)
4328           && compareDeep(kind, o.kind, true) && compareDeep(experimental, o.experimental, true) && compareDeep(date, o.date, true)
4329           && compareDeep(publisher, o.publisher, true) && compareDeep(contact, o.contact, true) && compareDeep(description, o.description, true)
4330           && compareDeep(useContext, o.useContext, true) && compareDeep(jurisdiction, o.jurisdiction, true)
4331           && compareDeep(purpose, o.purpose, true) && compareDeep(copyright, o.copyright, true) && compareDeep(copyrightLabel, o.copyrightLabel, true)
4332           && compareDeep(affectsState, o.affectsState, true) && compareDeep(code, o.code, true) && compareDeep(comment, o.comment, true)
4333           && compareDeep(base, o.base, true) && compareDeep(resource, o.resource, true) && compareDeep(system, o.system, true)
4334           && compareDeep(type, o.type, true) && compareDeep(instance, o.instance, true) && compareDeep(inputProfile, o.inputProfile, true)
4335           && compareDeep(outputProfile, o.outputProfile, true) && compareDeep(parameter, o.parameter, true)
4336           && compareDeep(overload, o.overload, true);
4337      }
4338
4339      @Override
4340      public boolean equalsShallow(Base other_) {
4341        if (!super.equalsShallow(other_))
4342          return false;
4343        if (!(other_ instanceof OperationDefinition))
4344          return false;
4345        OperationDefinition o = (OperationDefinition) other_;
4346        return compareValues(url, o.url, true) && compareValues(version, o.version, true) && compareValues(name, o.name, true)
4347           && compareValues(title, o.title, true) && compareValues(status, o.status, true) && compareValues(kind, o.kind, true)
4348           && compareValues(experimental, o.experimental, true) && compareValues(date, o.date, true) && compareValues(publisher, o.publisher, true)
4349           && compareValues(description, o.description, true) && compareValues(purpose, o.purpose, true) && compareValues(copyright, o.copyright, true)
4350           && compareValues(copyrightLabel, o.copyrightLabel, true) && compareValues(affectsState, o.affectsState, true)
4351           && compareValues(code, o.code, true) && compareValues(comment, o.comment, true) && compareValues(base, o.base, true)
4352           && compareValues(resource, o.resource, true) && compareValues(system, o.system, true) && compareValues(type, o.type, true)
4353           && compareValues(instance, o.instance, true) && compareValues(inputProfile, o.inputProfile, true) && compareValues(outputProfile, o.outputProfile, true)
4354          ;
4355      }
4356
4357      public boolean isEmpty() {
4358        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(url, version, versionAlgorithm
4359          , name, title, status, kind, experimental, date, publisher, contact, description
4360          , useContext, jurisdiction, purpose, copyright, copyrightLabel, affectsState, code
4361          , comment, base, resource, system, type, instance, inputProfile, outputProfile
4362          , parameter, overload);
4363      }
4364
4365  @Override
4366  public ResourceType getResourceType() {
4367    return ResourceType.OperationDefinition;
4368   }
4369
4370 /**
4371   * Search parameter: <b>base</b>
4372   * <p>
4373   * Description: <b>Marks this as a profile of the base</b><br>
4374   * Type: <b>reference</b><br>
4375   * Path: <b>OperationDefinition.base</b><br>
4376   * </p>
4377   */
4378  @SearchParamDefinition(name="base", path="OperationDefinition.base", description="Marks this as a profile of the base", type="reference", target={OperationDefinition.class } )
4379  public static final String SP_BASE = "base";
4380 /**
4381   * <b>Fluent Client</b> search parameter constant for <b>base</b>
4382   * <p>
4383   * Description: <b>Marks this as a profile of the base</b><br>
4384   * Type: <b>reference</b><br>
4385   * Path: <b>OperationDefinition.base</b><br>
4386   * </p>
4387   */
4388  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam BASE = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_BASE);
4389
4390/**
4391   * Constant for fluent queries to be used to add include statements. Specifies
4392   * the path value of "<b>OperationDefinition:base</b>".
4393   */
4394  public static final ca.uhn.fhir.model.api.Include INCLUDE_BASE = new ca.uhn.fhir.model.api.Include("OperationDefinition:base").toLocked();
4395
4396 /**
4397   * Search parameter: <b>code</b>
4398   * <p>
4399   * Description: <b>Name used to invoke the operation</b><br>
4400   * Type: <b>token</b><br>
4401   * Path: <b>OperationDefinition.code</b><br>
4402   * </p>
4403   */
4404  @SearchParamDefinition(name="code", path="OperationDefinition.code", description="Name used to invoke the operation", type="token" )
4405  public static final String SP_CODE = "code";
4406 /**
4407   * <b>Fluent Client</b> search parameter constant for <b>code</b>
4408   * <p>
4409   * Description: <b>Name used to invoke the operation</b><br>
4410   * Type: <b>token</b><br>
4411   * Path: <b>OperationDefinition.code</b><br>
4412   * </p>
4413   */
4414  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CODE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CODE);
4415
4416 /**
4417   * Search parameter: <b>input-profile</b>
4418   * <p>
4419   * Description: <b>Validation information for in parameters</b><br>
4420   * Type: <b>reference</b><br>
4421   * Path: <b>OperationDefinition.inputProfile</b><br>
4422   * </p>
4423   */
4424  @SearchParamDefinition(name="input-profile", path="OperationDefinition.inputProfile", description="Validation information for in parameters", type="reference", target={StructureDefinition.class } )
4425  public static final String SP_INPUT_PROFILE = "input-profile";
4426 /**
4427   * <b>Fluent Client</b> search parameter constant for <b>input-profile</b>
4428   * <p>
4429   * Description: <b>Validation information for in parameters</b><br>
4430   * Type: <b>reference</b><br>
4431   * Path: <b>OperationDefinition.inputProfile</b><br>
4432   * </p>
4433   */
4434  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam INPUT_PROFILE = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_INPUT_PROFILE);
4435
4436/**
4437   * Constant for fluent queries to be used to add include statements. Specifies
4438   * the path value of "<b>OperationDefinition:input-profile</b>".
4439   */
4440  public static final ca.uhn.fhir.model.api.Include INCLUDE_INPUT_PROFILE = new ca.uhn.fhir.model.api.Include("OperationDefinition:input-profile").toLocked();
4441
4442 /**
4443   * Search parameter: <b>instance</b>
4444   * <p>
4445   * Description: <b>Invoke on an instance?</b><br>
4446   * Type: <b>token</b><br>
4447   * Path: <b>OperationDefinition.instance</b><br>
4448   * </p>
4449   */
4450  @SearchParamDefinition(name="instance", path="OperationDefinition.instance", description="Invoke on an instance?", type="token" )
4451  public static final String SP_INSTANCE = "instance";
4452 /**
4453   * <b>Fluent Client</b> search parameter constant for <b>instance</b>
4454   * <p>
4455   * Description: <b>Invoke on an instance?</b><br>
4456   * Type: <b>token</b><br>
4457   * Path: <b>OperationDefinition.instance</b><br>
4458   * </p>
4459   */
4460  public static final ca.uhn.fhir.rest.gclient.TokenClientParam INSTANCE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_INSTANCE);
4461
4462 /**
4463   * Search parameter: <b>kind</b>
4464   * <p>
4465   * Description: <b>operation | query</b><br>
4466   * Type: <b>token</b><br>
4467   * Path: <b>OperationDefinition.kind</b><br>
4468   * </p>
4469   */
4470  @SearchParamDefinition(name="kind", path="OperationDefinition.kind", description="operation | query", type="token" )
4471  public static final String SP_KIND = "kind";
4472 /**
4473   * <b>Fluent Client</b> search parameter constant for <b>kind</b>
4474   * <p>
4475   * Description: <b>operation | query</b><br>
4476   * Type: <b>token</b><br>
4477   * Path: <b>OperationDefinition.kind</b><br>
4478   * </p>
4479   */
4480  public static final ca.uhn.fhir.rest.gclient.TokenClientParam KIND = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_KIND);
4481
4482 /**
4483   * Search parameter: <b>output-profile</b>
4484   * <p>
4485   * Description: <b>Validation information for out parameters</b><br>
4486   * Type: <b>reference</b><br>
4487   * Path: <b>OperationDefinition.outputProfile</b><br>
4488   * </p>
4489   */
4490  @SearchParamDefinition(name="output-profile", path="OperationDefinition.outputProfile", description="Validation information for out parameters", type="reference", target={StructureDefinition.class } )
4491  public static final String SP_OUTPUT_PROFILE = "output-profile";
4492 /**
4493   * <b>Fluent Client</b> search parameter constant for <b>output-profile</b>
4494   * <p>
4495   * Description: <b>Validation information for out parameters</b><br>
4496   * Type: <b>reference</b><br>
4497   * Path: <b>OperationDefinition.outputProfile</b><br>
4498   * </p>
4499   */
4500  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam OUTPUT_PROFILE = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_OUTPUT_PROFILE);
4501
4502/**
4503   * Constant for fluent queries to be used to add include statements. Specifies
4504   * the path value of "<b>OperationDefinition:output-profile</b>".
4505   */
4506  public static final ca.uhn.fhir.model.api.Include INCLUDE_OUTPUT_PROFILE = new ca.uhn.fhir.model.api.Include("OperationDefinition:output-profile").toLocked();
4507
4508 /**
4509   * Search parameter: <b>system</b>
4510   * <p>
4511   * Description: <b>Invoke at the system level?</b><br>
4512   * Type: <b>token</b><br>
4513   * Path: <b>OperationDefinition.system</b><br>
4514   * </p>
4515   */
4516  @SearchParamDefinition(name="system", path="OperationDefinition.system", description="Invoke at the system level?", type="token" )
4517  public static final String SP_SYSTEM = "system";
4518 /**
4519   * <b>Fluent Client</b> search parameter constant for <b>system</b>
4520   * <p>
4521   * Description: <b>Invoke at the system level?</b><br>
4522   * Type: <b>token</b><br>
4523   * Path: <b>OperationDefinition.system</b><br>
4524   * </p>
4525   */
4526  public static final ca.uhn.fhir.rest.gclient.TokenClientParam SYSTEM = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_SYSTEM);
4527
4528 /**
4529   * Search parameter: <b>type</b>
4530   * <p>
4531   * Description: <b>Invoke at the type level?</b><br>
4532   * Type: <b>token</b><br>
4533   * Path: <b>OperationDefinition.type</b><br>
4534   * </p>
4535   */
4536  @SearchParamDefinition(name="type", path="OperationDefinition.type", description="Invoke at the type level?", type="token" )
4537  public static final String SP_TYPE = "type";
4538 /**
4539   * <b>Fluent Client</b> search parameter constant for <b>type</b>
4540   * <p>
4541   * Description: <b>Invoke at the type level?</b><br>
4542   * Type: <b>token</b><br>
4543   * Path: <b>OperationDefinition.type</b><br>
4544   * </p>
4545   */
4546  public static final ca.uhn.fhir.rest.gclient.TokenClientParam TYPE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_TYPE);
4547
4548 /**
4549   * Search parameter: <b>context-quantity</b>
4550   * <p>
4551   * Description: <b>Multiple Resources: 
4552
4553* [CapabilityStatement](capabilitystatement.html): A quantity- or range-valued use context assigned to the capability statement
4554* [CodeSystem](codesystem.html): A quantity- or range-valued use context assigned to the code system
4555* [CompartmentDefinition](compartmentdefinition.html): A quantity- or range-valued use context assigned to the compartment definition
4556* [ConceptMap](conceptmap.html): A quantity- or range-valued use context assigned to the concept map
4557* [GraphDefinition](graphdefinition.html): A quantity- or range-valued use context assigned to the graph definition
4558* [ImplementationGuide](implementationguide.html): A quantity- or range-valued use context assigned to the implementation guide
4559* [MessageDefinition](messagedefinition.html): A quantity- or range-valued use context assigned to the message definition
4560* [NamingSystem](namingsystem.html): A quantity- or range-valued use context assigned to the naming system
4561* [OperationDefinition](operationdefinition.html): A quantity- or range-valued use context assigned to the operation definition
4562* [SearchParameter](searchparameter.html): A quantity- or range-valued use context assigned to the search parameter
4563* [StructureDefinition](structuredefinition.html): A quantity- or range-valued use context assigned to the structure definition
4564* [StructureMap](structuremap.html): A quantity- or range-valued use context assigned to the structure map
4565* [TerminologyCapabilities](terminologycapabilities.html): A quantity- or range-valued use context assigned to the terminology capabilities
4566* [ValueSet](valueset.html): A quantity- or range-valued use context assigned to the value set
4567</b><br>
4568   * Type: <b>quantity</b><br>
4569   * Path: <b>(CapabilityStatement.useContext.value as Quantity) | (CapabilityStatement.useContext.value as Range) | (CodeSystem.useContext.value as Quantity) | (CodeSystem.useContext.value as Range) | (CompartmentDefinition.useContext.value as Quantity) | (CompartmentDefinition.useContext.value as Range) | (ConceptMap.useContext.value as Quantity) | (ConceptMap.useContext.value as Range) | (GraphDefinition.useContext.value as Quantity) | (GraphDefinition.useContext.value as Range) | (ImplementationGuide.useContext.value as Quantity) | (ImplementationGuide.useContext.value as Range) | (MessageDefinition.useContext.value as Quantity) | (MessageDefinition.useContext.value as Range) | (NamingSystem.useContext.value as Quantity) | (NamingSystem.useContext.value as Range) | (OperationDefinition.useContext.value as Quantity) | (OperationDefinition.useContext.value as Range) | (SearchParameter.useContext.value as Quantity) | (SearchParameter.useContext.value as Range) | (StructureDefinition.useContext.value as Quantity) | (StructureDefinition.useContext.value as Range) | (StructureMap.useContext.value as Quantity) | (StructureMap.useContext.value as Range) | (TerminologyCapabilities.useContext.value as Quantity) | (TerminologyCapabilities.useContext.value as Range) | (ValueSet.useContext.value as Quantity) | (ValueSet.useContext.value as Range)</b><br>
4570   * </p>
4571   */
4572  @SearchParamDefinition(name="context-quantity", path="(CapabilityStatement.useContext.value as Quantity) | (CapabilityStatement.useContext.value as Range) | (CodeSystem.useContext.value as Quantity) | (CodeSystem.useContext.value as Range) | (CompartmentDefinition.useContext.value as Quantity) | (CompartmentDefinition.useContext.value as Range) | (ConceptMap.useContext.value as Quantity) | (ConceptMap.useContext.value as Range) | (GraphDefinition.useContext.value as Quantity) | (GraphDefinition.useContext.value as Range) | (ImplementationGuide.useContext.value as Quantity) | (ImplementationGuide.useContext.value as Range) | (MessageDefinition.useContext.value as Quantity) | (MessageDefinition.useContext.value as Range) | (NamingSystem.useContext.value as Quantity) | (NamingSystem.useContext.value as Range) | (OperationDefinition.useContext.value as Quantity) | (OperationDefinition.useContext.value as Range) | (SearchParameter.useContext.value as Quantity) | (SearchParameter.useContext.value as Range) | (StructureDefinition.useContext.value as Quantity) | (StructureDefinition.useContext.value as Range) | (StructureMap.useContext.value as Quantity) | (StructureMap.useContext.value as Range) | (TerminologyCapabilities.useContext.value as Quantity) | (TerminologyCapabilities.useContext.value as Range) | (ValueSet.useContext.value as Quantity) | (ValueSet.useContext.value as Range)", description="Multiple Resources: \r\n\r\n* [CapabilityStatement](capabilitystatement.html): A quantity- or range-valued use context assigned to the capability statement\r\n* [CodeSystem](codesystem.html): A quantity- or range-valued use context assigned to the code system\r\n* [CompartmentDefinition](compartmentdefinition.html): A quantity- or range-valued use context assigned to the compartment definition\r\n* [ConceptMap](conceptmap.html): A quantity- or range-valued use context assigned to the concept map\r\n* [GraphDefinition](graphdefinition.html): A quantity- or range-valued use context assigned to the graph definition\r\n* [ImplementationGuide](implementationguide.html): A quantity- or range-valued use context assigned to the implementation guide\r\n* [MessageDefinition](messagedefinition.html): A quantity- or range-valued use context assigned to the message definition\r\n* [NamingSystem](namingsystem.html): A quantity- or range-valued use context assigned to the naming system\r\n* [OperationDefinition](operationdefinition.html): A quantity- or range-valued use context assigned to the operation definition\r\n* [SearchParameter](searchparameter.html): A quantity- or range-valued use context assigned to the search parameter\r\n* [StructureDefinition](structuredefinition.html): A quantity- or range-valued use context assigned to the structure definition\r\n* [StructureMap](structuremap.html): A quantity- or range-valued use context assigned to the structure map\r\n* [TerminologyCapabilities](terminologycapabilities.html): A quantity- or range-valued use context assigned to the terminology capabilities\r\n* [ValueSet](valueset.html): A quantity- or range-valued use context assigned to the value set\r\n", type="quantity" )
4573  public static final String SP_CONTEXT_QUANTITY = "context-quantity";
4574 /**
4575   * <b>Fluent Client</b> search parameter constant for <b>context-quantity</b>
4576   * <p>
4577   * Description: <b>Multiple Resources: 
4578
4579* [CapabilityStatement](capabilitystatement.html): A quantity- or range-valued use context assigned to the capability statement
4580* [CodeSystem](codesystem.html): A quantity- or range-valued use context assigned to the code system
4581* [CompartmentDefinition](compartmentdefinition.html): A quantity- or range-valued use context assigned to the compartment definition
4582* [ConceptMap](conceptmap.html): A quantity- or range-valued use context assigned to the concept map
4583* [GraphDefinition](graphdefinition.html): A quantity- or range-valued use context assigned to the graph definition
4584* [ImplementationGuide](implementationguide.html): A quantity- or range-valued use context assigned to the implementation guide
4585* [MessageDefinition](messagedefinition.html): A quantity- or range-valued use context assigned to the message definition
4586* [NamingSystem](namingsystem.html): A quantity- or range-valued use context assigned to the naming system
4587* [OperationDefinition](operationdefinition.html): A quantity- or range-valued use context assigned to the operation definition
4588* [SearchParameter](searchparameter.html): A quantity- or range-valued use context assigned to the search parameter
4589* [StructureDefinition](structuredefinition.html): A quantity- or range-valued use context assigned to the structure definition
4590* [StructureMap](structuremap.html): A quantity- or range-valued use context assigned to the structure map
4591* [TerminologyCapabilities](terminologycapabilities.html): A quantity- or range-valued use context assigned to the terminology capabilities
4592* [ValueSet](valueset.html): A quantity- or range-valued use context assigned to the value set
4593</b><br>
4594   * Type: <b>quantity</b><br>
4595   * Path: <b>(CapabilityStatement.useContext.value as Quantity) | (CapabilityStatement.useContext.value as Range) | (CodeSystem.useContext.value as Quantity) | (CodeSystem.useContext.value as Range) | (CompartmentDefinition.useContext.value as Quantity) | (CompartmentDefinition.useContext.value as Range) | (ConceptMap.useContext.value as Quantity) | (ConceptMap.useContext.value as Range) | (GraphDefinition.useContext.value as Quantity) | (GraphDefinition.useContext.value as Range) | (ImplementationGuide.useContext.value as Quantity) | (ImplementationGuide.useContext.value as Range) | (MessageDefinition.useContext.value as Quantity) | (MessageDefinition.useContext.value as Range) | (NamingSystem.useContext.value as Quantity) | (NamingSystem.useContext.value as Range) | (OperationDefinition.useContext.value as Quantity) | (OperationDefinition.useContext.value as Range) | (SearchParameter.useContext.value as Quantity) | (SearchParameter.useContext.value as Range) | (StructureDefinition.useContext.value as Quantity) | (StructureDefinition.useContext.value as Range) | (StructureMap.useContext.value as Quantity) | (StructureMap.useContext.value as Range) | (TerminologyCapabilities.useContext.value as Quantity) | (TerminologyCapabilities.useContext.value as Range) | (ValueSet.useContext.value as Quantity) | (ValueSet.useContext.value as Range)</b><br>
4596   * </p>
4597   */
4598  public static final ca.uhn.fhir.rest.gclient.QuantityClientParam CONTEXT_QUANTITY = new ca.uhn.fhir.rest.gclient.QuantityClientParam(SP_CONTEXT_QUANTITY);
4599
4600 /**
4601   * Search parameter: <b>context-type-quantity</b>
4602   * <p>
4603   * Description: <b>Multiple Resources: 
4604
4605* [CapabilityStatement](capabilitystatement.html): A use context type and quantity- or range-based value assigned to the capability statement
4606* [CodeSystem](codesystem.html): A use context type and quantity- or range-based value assigned to the code system
4607* [CompartmentDefinition](compartmentdefinition.html): A use context type and quantity- or range-based value assigned to the compartment definition
4608* [ConceptMap](conceptmap.html): A use context type and quantity- or range-based value assigned to the concept map
4609* [GraphDefinition](graphdefinition.html): A use context type and quantity- or range-based value assigned to the graph definition
4610* [ImplementationGuide](implementationguide.html): A use context type and quantity- or range-based value assigned to the implementation guide
4611* [MessageDefinition](messagedefinition.html): A use context type and quantity- or range-based value assigned to the message definition
4612* [NamingSystem](namingsystem.html): A use context type and quantity- or range-based value assigned to the naming system
4613* [OperationDefinition](operationdefinition.html): A use context type and quantity- or range-based value assigned to the operation definition
4614* [SearchParameter](searchparameter.html): A use context type and quantity- or range-based value assigned to the search parameter
4615* [StructureDefinition](structuredefinition.html): A use context type and quantity- or range-based value assigned to the structure definition
4616* [StructureMap](structuremap.html): A use context type and quantity- or range-based value assigned to the structure map
4617* [TerminologyCapabilities](terminologycapabilities.html): A use context type and quantity- or range-based value assigned to the terminology capabilities
4618* [ValueSet](valueset.html): A use context type and quantity- or range-based value assigned to the value set
4619</b><br>
4620   * Type: <b>composite</b><br>
4621   * Path: <b>CapabilityStatement.useContext | CodeSystem.useContext | CompartmentDefinition.useContext | ConceptMap.useContext | GraphDefinition.useContext | ImplementationGuide.useContext | MessageDefinition.useContext | NamingSystem.useContext | OperationDefinition.useContext | SearchParameter.useContext | StructureDefinition.useContext | StructureMap.useContext | TerminologyCapabilities.useContext | ValueSet.useContext</b><br>
4622   * </p>
4623   */
4624  @SearchParamDefinition(name="context-type-quantity", path="CapabilityStatement.useContext | CodeSystem.useContext | CompartmentDefinition.useContext | ConceptMap.useContext | GraphDefinition.useContext | ImplementationGuide.useContext | MessageDefinition.useContext | NamingSystem.useContext | OperationDefinition.useContext | SearchParameter.useContext | StructureDefinition.useContext | StructureMap.useContext | TerminologyCapabilities.useContext | ValueSet.useContext", description="Multiple Resources: \r\n\r\n* [CapabilityStatement](capabilitystatement.html): A use context type and quantity- or range-based value assigned to the capability statement\r\n* [CodeSystem](codesystem.html): A use context type and quantity- or range-based value assigned to the code system\r\n* [CompartmentDefinition](compartmentdefinition.html): A use context type and quantity- or range-based value assigned to the compartment definition\r\n* [ConceptMap](conceptmap.html): A use context type and quantity- or range-based value assigned to the concept map\r\n* [GraphDefinition](graphdefinition.html): A use context type and quantity- or range-based value assigned to the graph definition\r\n* [ImplementationGuide](implementationguide.html): A use context type and quantity- or range-based value assigned to the implementation guide\r\n* [MessageDefinition](messagedefinition.html): A use context type and quantity- or range-based value assigned to the message definition\r\n* [NamingSystem](namingsystem.html): A use context type and quantity- or range-based value assigned to the naming system\r\n* [OperationDefinition](operationdefinition.html): A use context type and quantity- or range-based value assigned to the operation definition\r\n* [SearchParameter](searchparameter.html): A use context type and quantity- or range-based value assigned to the search parameter\r\n* [StructureDefinition](structuredefinition.html): A use context type and quantity- or range-based value assigned to the structure definition\r\n* [StructureMap](structuremap.html): A use context type and quantity- or range-based value assigned to the structure map\r\n* [TerminologyCapabilities](terminologycapabilities.html): A use context type and quantity- or range-based value assigned to the terminology capabilities\r\n* [ValueSet](valueset.html): A use context type and quantity- or range-based value assigned to the value set\r\n", type="composite", compositeOf={"context-type", "context-quantity"} )
4625  public static final String SP_CONTEXT_TYPE_QUANTITY = "context-type-quantity";
4626 /**
4627   * <b>Fluent Client</b> search parameter constant for <b>context-type-quantity</b>
4628   * <p>
4629   * Description: <b>Multiple Resources: 
4630
4631* [CapabilityStatement](capabilitystatement.html): A use context type and quantity- or range-based value assigned to the capability statement
4632* [CodeSystem](codesystem.html): A use context type and quantity- or range-based value assigned to the code system
4633* [CompartmentDefinition](compartmentdefinition.html): A use context type and quantity- or range-based value assigned to the compartment definition
4634* [ConceptMap](conceptmap.html): A use context type and quantity- or range-based value assigned to the concept map
4635* [GraphDefinition](graphdefinition.html): A use context type and quantity- or range-based value assigned to the graph definition
4636* [ImplementationGuide](implementationguide.html): A use context type and quantity- or range-based value assigned to the implementation guide
4637* [MessageDefinition](messagedefinition.html): A use context type and quantity- or range-based value assigned to the message definition
4638* [NamingSystem](namingsystem.html): A use context type and quantity- or range-based value assigned to the naming system
4639* [OperationDefinition](operationdefinition.html): A use context type and quantity- or range-based value assigned to the operation definition
4640* [SearchParameter](searchparameter.html): A use context type and quantity- or range-based value assigned to the search parameter
4641* [StructureDefinition](structuredefinition.html): A use context type and quantity- or range-based value assigned to the structure definition
4642* [StructureMap](structuremap.html): A use context type and quantity- or range-based value assigned to the structure map
4643* [TerminologyCapabilities](terminologycapabilities.html): A use context type and quantity- or range-based value assigned to the terminology capabilities
4644* [ValueSet](valueset.html): A use context type and quantity- or range-based value assigned to the value set
4645</b><br>
4646   * Type: <b>composite</b><br>
4647   * Path: <b>CapabilityStatement.useContext | CodeSystem.useContext | CompartmentDefinition.useContext | ConceptMap.useContext | GraphDefinition.useContext | ImplementationGuide.useContext | MessageDefinition.useContext | NamingSystem.useContext | OperationDefinition.useContext | SearchParameter.useContext | StructureDefinition.useContext | StructureMap.useContext | TerminologyCapabilities.useContext | ValueSet.useContext</b><br>
4648   * </p>
4649   */
4650  public static final ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.QuantityClientParam> CONTEXT_TYPE_QUANTITY = new ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.QuantityClientParam>(SP_CONTEXT_TYPE_QUANTITY);
4651
4652 /**
4653   * Search parameter: <b>context-type-value</b>
4654   * <p>
4655   * Description: <b>Multiple Resources: 
4656
4657* [CapabilityStatement](capabilitystatement.html): A use context type and value assigned to the capability statement
4658* [CodeSystem](codesystem.html): A use context type and value assigned to the code system
4659* [CompartmentDefinition](compartmentdefinition.html): A use context type and value assigned to the compartment definition
4660* [ConceptMap](conceptmap.html): A use context type and value assigned to the concept map
4661* [GraphDefinition](graphdefinition.html): A use context type and value assigned to the graph definition
4662* [ImplementationGuide](implementationguide.html): A use context type and value assigned to the implementation guide
4663* [MessageDefinition](messagedefinition.html): A use context type and value assigned to the message definition
4664* [NamingSystem](namingsystem.html): A use context type and value assigned to the naming system
4665* [OperationDefinition](operationdefinition.html): A use context type and value assigned to the operation definition
4666* [SearchParameter](searchparameter.html): A use context type and value assigned to the search parameter
4667* [StructureDefinition](structuredefinition.html): A use context type and value assigned to the structure definition
4668* [StructureMap](structuremap.html): A use context type and value assigned to the structure map
4669* [TerminologyCapabilities](terminologycapabilities.html): A use context type and value assigned to the terminology capabilities
4670* [ValueSet](valueset.html): A use context type and value assigned to the value set
4671</b><br>
4672   * Type: <b>composite</b><br>
4673   * Path: <b>CapabilityStatement.useContext | CodeSystem.useContext | CompartmentDefinition.useContext | ConceptMap.useContext | GraphDefinition.useContext | ImplementationGuide.useContext | MessageDefinition.useContext | NamingSystem.useContext | OperationDefinition.useContext | SearchParameter.useContext | StructureDefinition.useContext | StructureMap.useContext | TerminologyCapabilities.useContext | ValueSet.useContext</b><br>
4674   * </p>
4675   */
4676  @SearchParamDefinition(name="context-type-value", path="CapabilityStatement.useContext | CodeSystem.useContext | CompartmentDefinition.useContext | ConceptMap.useContext | GraphDefinition.useContext | ImplementationGuide.useContext | MessageDefinition.useContext | NamingSystem.useContext | OperationDefinition.useContext | SearchParameter.useContext | StructureDefinition.useContext | StructureMap.useContext | TerminologyCapabilities.useContext | ValueSet.useContext", description="Multiple Resources: \r\n\r\n* [CapabilityStatement](capabilitystatement.html): A use context type and value assigned to the capability statement\r\n* [CodeSystem](codesystem.html): A use context type and value assigned to the code system\r\n* [CompartmentDefinition](compartmentdefinition.html): A use context type and value assigned to the compartment definition\r\n* [ConceptMap](conceptmap.html): A use context type and value assigned to the concept map\r\n* [GraphDefinition](graphdefinition.html): A use context type and value assigned to the graph definition\r\n* [ImplementationGuide](implementationguide.html): A use context type and value assigned to the implementation guide\r\n* [MessageDefinition](messagedefinition.html): A use context type and value assigned to the message definition\r\n* [NamingSystem](namingsystem.html): A use context type and value assigned to the naming system\r\n* [OperationDefinition](operationdefinition.html): A use context type and value assigned to the operation definition\r\n* [SearchParameter](searchparameter.html): A use context type and value assigned to the search parameter\r\n* [StructureDefinition](structuredefinition.html): A use context type and value assigned to the structure definition\r\n* [StructureMap](structuremap.html): A use context type and value assigned to the structure map\r\n* [TerminologyCapabilities](terminologycapabilities.html): A use context type and value assigned to the terminology capabilities\r\n* [ValueSet](valueset.html): A use context type and value assigned to the value set\r\n", type="composite", compositeOf={"context-type", "context"} )
4677  public static final String SP_CONTEXT_TYPE_VALUE = "context-type-value";
4678 /**
4679   * <b>Fluent Client</b> search parameter constant for <b>context-type-value</b>
4680   * <p>
4681   * Description: <b>Multiple Resources: 
4682
4683* [CapabilityStatement](capabilitystatement.html): A use context type and value assigned to the capability statement
4684* [CodeSystem](codesystem.html): A use context type and value assigned to the code system
4685* [CompartmentDefinition](compartmentdefinition.html): A use context type and value assigned to the compartment definition
4686* [ConceptMap](conceptmap.html): A use context type and value assigned to the concept map
4687* [GraphDefinition](graphdefinition.html): A use context type and value assigned to the graph definition
4688* [ImplementationGuide](implementationguide.html): A use context type and value assigned to the implementation guide
4689* [MessageDefinition](messagedefinition.html): A use context type and value assigned to the message definition
4690* [NamingSystem](namingsystem.html): A use context type and value assigned to the naming system
4691* [OperationDefinition](operationdefinition.html): A use context type and value assigned to the operation definition
4692* [SearchParameter](searchparameter.html): A use context type and value assigned to the search parameter
4693* [StructureDefinition](structuredefinition.html): A use context type and value assigned to the structure definition
4694* [StructureMap](structuremap.html): A use context type and value assigned to the structure map
4695* [TerminologyCapabilities](terminologycapabilities.html): A use context type and value assigned to the terminology capabilities
4696* [ValueSet](valueset.html): A use context type and value assigned to the value set
4697</b><br>
4698   * Type: <b>composite</b><br>
4699   * Path: <b>CapabilityStatement.useContext | CodeSystem.useContext | CompartmentDefinition.useContext | ConceptMap.useContext | GraphDefinition.useContext | ImplementationGuide.useContext | MessageDefinition.useContext | NamingSystem.useContext | OperationDefinition.useContext | SearchParameter.useContext | StructureDefinition.useContext | StructureMap.useContext | TerminologyCapabilities.useContext | ValueSet.useContext</b><br>
4700   * </p>
4701   */
4702  public static final ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.TokenClientParam> CONTEXT_TYPE_VALUE = new ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.TokenClientParam>(SP_CONTEXT_TYPE_VALUE);
4703
4704 /**
4705   * Search parameter: <b>context-type</b>
4706   * <p>
4707   * Description: <b>Multiple Resources: 
4708
4709* [CapabilityStatement](capabilitystatement.html): A type of use context assigned to the capability statement
4710* [CodeSystem](codesystem.html): A type of use context assigned to the code system
4711* [CompartmentDefinition](compartmentdefinition.html): A type of use context assigned to the compartment definition
4712* [ConceptMap](conceptmap.html): A type of use context assigned to the concept map
4713* [GraphDefinition](graphdefinition.html): A type of use context assigned to the graph definition
4714* [ImplementationGuide](implementationguide.html): A type of use context assigned to the implementation guide
4715* [MessageDefinition](messagedefinition.html): A type of use context assigned to the message definition
4716* [NamingSystem](namingsystem.html): A type of use context assigned to the naming system
4717* [OperationDefinition](operationdefinition.html): A type of use context assigned to the operation definition
4718* [SearchParameter](searchparameter.html): A type of use context assigned to the search parameter
4719* [StructureDefinition](structuredefinition.html): A type of use context assigned to the structure definition
4720* [StructureMap](structuremap.html): A type of use context assigned to the structure map
4721* [TerminologyCapabilities](terminologycapabilities.html): A type of use context assigned to the terminology capabilities
4722* [ValueSet](valueset.html): A type of use context assigned to the value set
4723</b><br>
4724   * Type: <b>token</b><br>
4725   * Path: <b>CapabilityStatement.useContext.code | CodeSystem.useContext.code | CompartmentDefinition.useContext.code | ConceptMap.useContext.code | GraphDefinition.useContext.code | ImplementationGuide.useContext.code | MessageDefinition.useContext.code | NamingSystem.useContext.code | OperationDefinition.useContext.code | SearchParameter.useContext.code | StructureDefinition.useContext.code | StructureMap.useContext.code | TerminologyCapabilities.useContext.code | ValueSet.useContext.code</b><br>
4726   * </p>
4727   */
4728  @SearchParamDefinition(name="context-type", path="CapabilityStatement.useContext.code | CodeSystem.useContext.code | CompartmentDefinition.useContext.code | ConceptMap.useContext.code | GraphDefinition.useContext.code | ImplementationGuide.useContext.code | MessageDefinition.useContext.code | NamingSystem.useContext.code | OperationDefinition.useContext.code | SearchParameter.useContext.code | StructureDefinition.useContext.code | StructureMap.useContext.code | TerminologyCapabilities.useContext.code | ValueSet.useContext.code", description="Multiple Resources: \r\n\r\n* [CapabilityStatement](capabilitystatement.html): A type of use context assigned to the capability statement\r\n* [CodeSystem](codesystem.html): A type of use context assigned to the code system\r\n* [CompartmentDefinition](compartmentdefinition.html): A type of use context assigned to the compartment definition\r\n* [ConceptMap](conceptmap.html): A type of use context assigned to the concept map\r\n* [GraphDefinition](graphdefinition.html): A type of use context assigned to the graph definition\r\n* [ImplementationGuide](implementationguide.html): A type of use context assigned to the implementation guide\r\n* [MessageDefinition](messagedefinition.html): A type of use context assigned to the message definition\r\n* [NamingSystem](namingsystem.html): A type of use context assigned to the naming system\r\n* [OperationDefinition](operationdefinition.html): A type of use context assigned to the operation definition\r\n* [SearchParameter](searchparameter.html): A type of use context assigned to the search parameter\r\n* [StructureDefinition](structuredefinition.html): A type of use context assigned to the structure definition\r\n* [StructureMap](structuremap.html): A type of use context assigned to the structure map\r\n* [TerminologyCapabilities](terminologycapabilities.html): A type of use context assigned to the terminology capabilities\r\n* [ValueSet](valueset.html): A type of use context assigned to the value set\r\n", type="token" )
4729  public static final String SP_CONTEXT_TYPE = "context-type";
4730 /**
4731   * <b>Fluent Client</b> search parameter constant for <b>context-type</b>
4732   * <p>
4733   * Description: <b>Multiple Resources: 
4734
4735* [CapabilityStatement](capabilitystatement.html): A type of use context assigned to the capability statement
4736* [CodeSystem](codesystem.html): A type of use context assigned to the code system
4737* [CompartmentDefinition](compartmentdefinition.html): A type of use context assigned to the compartment definition
4738* [ConceptMap](conceptmap.html): A type of use context assigned to the concept map
4739* [GraphDefinition](graphdefinition.html): A type of use context assigned to the graph definition
4740* [ImplementationGuide](implementationguide.html): A type of use context assigned to the implementation guide
4741* [MessageDefinition](messagedefinition.html): A type of use context assigned to the message definition
4742* [NamingSystem](namingsystem.html): A type of use context assigned to the naming system
4743* [OperationDefinition](operationdefinition.html): A type of use context assigned to the operation definition
4744* [SearchParameter](searchparameter.html): A type of use context assigned to the search parameter
4745* [StructureDefinition](structuredefinition.html): A type of use context assigned to the structure definition
4746* [StructureMap](structuremap.html): A type of use context assigned to the structure map
4747* [TerminologyCapabilities](terminologycapabilities.html): A type of use context assigned to the terminology capabilities
4748* [ValueSet](valueset.html): A type of use context assigned to the value set
4749</b><br>
4750   * Type: <b>token</b><br>
4751   * Path: <b>CapabilityStatement.useContext.code | CodeSystem.useContext.code | CompartmentDefinition.useContext.code | ConceptMap.useContext.code | GraphDefinition.useContext.code | ImplementationGuide.useContext.code | MessageDefinition.useContext.code | NamingSystem.useContext.code | OperationDefinition.useContext.code | SearchParameter.useContext.code | StructureDefinition.useContext.code | StructureMap.useContext.code | TerminologyCapabilities.useContext.code | ValueSet.useContext.code</b><br>
4752   * </p>
4753   */
4754  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CONTEXT_TYPE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CONTEXT_TYPE);
4755
4756 /**
4757   * Search parameter: <b>context</b>
4758   * <p>
4759   * Description: <b>Multiple Resources: 
4760
4761* [CapabilityStatement](capabilitystatement.html): A use context assigned to the capability statement
4762* [CodeSystem](codesystem.html): A use context assigned to the code system
4763* [CompartmentDefinition](compartmentdefinition.html): A use context assigned to the compartment definition
4764* [ConceptMap](conceptmap.html): A use context assigned to the concept map
4765* [GraphDefinition](graphdefinition.html): A use context assigned to the graph definition
4766* [ImplementationGuide](implementationguide.html): A use context assigned to the implementation guide
4767* [MessageDefinition](messagedefinition.html): A use context assigned to the message definition
4768* [NamingSystem](namingsystem.html): A use context assigned to the naming system
4769* [OperationDefinition](operationdefinition.html): A use context assigned to the operation definition
4770* [SearchParameter](searchparameter.html): A use context assigned to the search parameter
4771* [StructureDefinition](structuredefinition.html): A use context assigned to the structure definition
4772* [StructureMap](structuremap.html): A use context assigned to the structure map
4773* [TerminologyCapabilities](terminologycapabilities.html): A use context assigned to the terminology capabilities
4774* [ValueSet](valueset.html): A use context assigned to the value set
4775</b><br>
4776   * Type: <b>token</b><br>
4777   * Path: <b>(CapabilityStatement.useContext.value as CodeableConcept) | (CodeSystem.useContext.value as CodeableConcept) | (CompartmentDefinition.useContext.value as CodeableConcept) | (ConceptMap.useContext.value as CodeableConcept) | (GraphDefinition.useContext.value as CodeableConcept) | (ImplementationGuide.useContext.value as CodeableConcept) | (MessageDefinition.useContext.value as CodeableConcept) | (NamingSystem.useContext.value as CodeableConcept) | (OperationDefinition.useContext.value as CodeableConcept) | (SearchParameter.useContext.value as CodeableConcept) | (StructureDefinition.useContext.value as CodeableConcept) | (StructureMap.useContext.value as CodeableConcept) | (TerminologyCapabilities.useContext.value as CodeableConcept) | (ValueSet.useContext.value as CodeableConcept)</b><br>
4778   * </p>
4779   */
4780  @SearchParamDefinition(name="context", path="(CapabilityStatement.useContext.value as CodeableConcept) | (CodeSystem.useContext.value as CodeableConcept) | (CompartmentDefinition.useContext.value as CodeableConcept) | (ConceptMap.useContext.value as CodeableConcept) | (GraphDefinition.useContext.value as CodeableConcept) | (ImplementationGuide.useContext.value as CodeableConcept) | (MessageDefinition.useContext.value as CodeableConcept) | (NamingSystem.useContext.value as CodeableConcept) | (OperationDefinition.useContext.value as CodeableConcept) | (SearchParameter.useContext.value as CodeableConcept) | (StructureDefinition.useContext.value as CodeableConcept) | (StructureMap.useContext.value as CodeableConcept) | (TerminologyCapabilities.useContext.value as CodeableConcept) | (ValueSet.useContext.value as CodeableConcept)", description="Multiple Resources: \r\n\r\n* [CapabilityStatement](capabilitystatement.html): A use context assigned to the capability statement\r\n* [CodeSystem](codesystem.html): A use context assigned to the code system\r\n* [CompartmentDefinition](compartmentdefinition.html): A use context assigned to the compartment definition\r\n* [ConceptMap](conceptmap.html): A use context assigned to the concept map\r\n* [GraphDefinition](graphdefinition.html): A use context assigned to the graph definition\r\n* [ImplementationGuide](implementationguide.html): A use context assigned to the implementation guide\r\n* [MessageDefinition](messagedefinition.html): A use context assigned to the message definition\r\n* [NamingSystem](namingsystem.html): A use context assigned to the naming system\r\n* [OperationDefinition](operationdefinition.html): A use context assigned to the operation definition\r\n* [SearchParameter](searchparameter.html): A use context assigned to the search parameter\r\n* [StructureDefinition](structuredefinition.html): A use context assigned to the structure definition\r\n* [StructureMap](structuremap.html): A use context assigned to the structure map\r\n* [TerminologyCapabilities](terminologycapabilities.html): A use context assigned to the terminology capabilities\r\n* [ValueSet](valueset.html): A use context assigned to the value set\r\n", type="token" )
4781  public static final String SP_CONTEXT = "context";
4782 /**
4783   * <b>Fluent Client</b> search parameter constant for <b>context</b>
4784   * <p>
4785   * Description: <b>Multiple Resources: 
4786
4787* [CapabilityStatement](capabilitystatement.html): A use context assigned to the capability statement
4788* [CodeSystem](codesystem.html): A use context assigned to the code system
4789* [CompartmentDefinition](compartmentdefinition.html): A use context assigned to the compartment definition
4790* [ConceptMap](conceptmap.html): A use context assigned to the concept map
4791* [GraphDefinition](graphdefinition.html): A use context assigned to the graph definition
4792* [ImplementationGuide](implementationguide.html): A use context assigned to the implementation guide
4793* [MessageDefinition](messagedefinition.html): A use context assigned to the message definition
4794* [NamingSystem](namingsystem.html): A use context assigned to the naming system
4795* [OperationDefinition](operationdefinition.html): A use context assigned to the operation definition
4796* [SearchParameter](searchparameter.html): A use context assigned to the search parameter
4797* [StructureDefinition](structuredefinition.html): A use context assigned to the structure definition
4798* [StructureMap](structuremap.html): A use context assigned to the structure map
4799* [TerminologyCapabilities](terminologycapabilities.html): A use context assigned to the terminology capabilities
4800* [ValueSet](valueset.html): A use context assigned to the value set
4801</b><br>
4802   * Type: <b>token</b><br>
4803   * Path: <b>(CapabilityStatement.useContext.value as CodeableConcept) | (CodeSystem.useContext.value as CodeableConcept) | (CompartmentDefinition.useContext.value as CodeableConcept) | (ConceptMap.useContext.value as CodeableConcept) | (GraphDefinition.useContext.value as CodeableConcept) | (ImplementationGuide.useContext.value as CodeableConcept) | (MessageDefinition.useContext.value as CodeableConcept) | (NamingSystem.useContext.value as CodeableConcept) | (OperationDefinition.useContext.value as CodeableConcept) | (SearchParameter.useContext.value as CodeableConcept) | (StructureDefinition.useContext.value as CodeableConcept) | (StructureMap.useContext.value as CodeableConcept) | (TerminologyCapabilities.useContext.value as CodeableConcept) | (ValueSet.useContext.value as CodeableConcept)</b><br>
4804   * </p>
4805   */
4806  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CONTEXT = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CONTEXT);
4807
4808 /**
4809   * Search parameter: <b>date</b>
4810   * <p>
4811   * Description: <b>Multiple Resources: 
4812
4813* [CapabilityStatement](capabilitystatement.html): The capability statement publication date
4814* [CodeSystem](codesystem.html): The code system publication date
4815* [CompartmentDefinition](compartmentdefinition.html): The compartment definition publication date
4816* [ConceptMap](conceptmap.html): The concept map publication date
4817* [GraphDefinition](graphdefinition.html): The graph definition publication date
4818* [ImplementationGuide](implementationguide.html): The implementation guide publication date
4819* [MessageDefinition](messagedefinition.html): The message definition publication date
4820* [NamingSystem](namingsystem.html): The naming system publication date
4821* [OperationDefinition](operationdefinition.html): The operation definition publication date
4822* [SearchParameter](searchparameter.html): The search parameter publication date
4823* [StructureDefinition](structuredefinition.html): The structure definition publication date
4824* [StructureMap](structuremap.html): The structure map publication date
4825* [TerminologyCapabilities](terminologycapabilities.html): The terminology capabilities publication date
4826* [ValueSet](valueset.html): The value set publication date
4827</b><br>
4828   * Type: <b>date</b><br>
4829   * Path: <b>CapabilityStatement.date | CodeSystem.date | CompartmentDefinition.date | ConceptMap.date | GraphDefinition.date | ImplementationGuide.date | MessageDefinition.date | NamingSystem.date | OperationDefinition.date | SearchParameter.date | StructureDefinition.date | StructureMap.date | TerminologyCapabilities.date | ValueSet.date</b><br>
4830   * </p>
4831   */
4832  @SearchParamDefinition(name="date", path="CapabilityStatement.date | CodeSystem.date | CompartmentDefinition.date | ConceptMap.date | GraphDefinition.date | ImplementationGuide.date | MessageDefinition.date | NamingSystem.date | OperationDefinition.date | SearchParameter.date | StructureDefinition.date | StructureMap.date | TerminologyCapabilities.date | ValueSet.date", description="Multiple Resources: \r\n\r\n* [CapabilityStatement](capabilitystatement.html): The capability statement publication date\r\n* [CodeSystem](codesystem.html): The code system publication date\r\n* [CompartmentDefinition](compartmentdefinition.html): The compartment definition publication date\r\n* [ConceptMap](conceptmap.html): The concept map publication date\r\n* [GraphDefinition](graphdefinition.html): The graph definition publication date\r\n* [ImplementationGuide](implementationguide.html): The implementation guide publication date\r\n* [MessageDefinition](messagedefinition.html): The message definition publication date\r\n* [NamingSystem](namingsystem.html): The naming system publication date\r\n* [OperationDefinition](operationdefinition.html): The operation definition publication date\r\n* [SearchParameter](searchparameter.html): The search parameter publication date\r\n* [StructureDefinition](structuredefinition.html): The structure definition publication date\r\n* [StructureMap](structuremap.html): The structure map publication date\r\n* [TerminologyCapabilities](terminologycapabilities.html): The terminology capabilities publication date\r\n* [ValueSet](valueset.html): The value set publication date\r\n", type="date" )
4833  public static final String SP_DATE = "date";
4834 /**
4835   * <b>Fluent Client</b> search parameter constant for <b>date</b>
4836   * <p>
4837   * Description: <b>Multiple Resources: 
4838
4839* [CapabilityStatement](capabilitystatement.html): The capability statement publication date
4840* [CodeSystem](codesystem.html): The code system publication date
4841* [CompartmentDefinition](compartmentdefinition.html): The compartment definition publication date
4842* [ConceptMap](conceptmap.html): The concept map publication date
4843* [GraphDefinition](graphdefinition.html): The graph definition publication date
4844* [ImplementationGuide](implementationguide.html): The implementation guide publication date
4845* [MessageDefinition](messagedefinition.html): The message definition publication date
4846* [NamingSystem](namingsystem.html): The naming system publication date
4847* [OperationDefinition](operationdefinition.html): The operation definition publication date
4848* [SearchParameter](searchparameter.html): The search parameter publication date
4849* [StructureDefinition](structuredefinition.html): The structure definition publication date
4850* [StructureMap](structuremap.html): The structure map publication date
4851* [TerminologyCapabilities](terminologycapabilities.html): The terminology capabilities publication date
4852* [ValueSet](valueset.html): The value set publication date
4853</b><br>
4854   * Type: <b>date</b><br>
4855   * Path: <b>CapabilityStatement.date | CodeSystem.date | CompartmentDefinition.date | ConceptMap.date | GraphDefinition.date | ImplementationGuide.date | MessageDefinition.date | NamingSystem.date | OperationDefinition.date | SearchParameter.date | StructureDefinition.date | StructureMap.date | TerminologyCapabilities.date | ValueSet.date</b><br>
4856   * </p>
4857   */
4858  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_DATE);
4859
4860 /**
4861   * Search parameter: <b>description</b>
4862   * <p>
4863   * Description: <b>Multiple Resources: 
4864
4865* [CapabilityStatement](capabilitystatement.html): The description of the capability statement
4866* [CodeSystem](codesystem.html): The description of the code system
4867* [CompartmentDefinition](compartmentdefinition.html): The description of the compartment definition
4868* [ConceptMap](conceptmap.html): The description of the concept map
4869* [GraphDefinition](graphdefinition.html): The description of the graph definition
4870* [ImplementationGuide](implementationguide.html): The description of the implementation guide
4871* [MessageDefinition](messagedefinition.html): The description of the message definition
4872* [NamingSystem](namingsystem.html): The description of the naming system
4873* [OperationDefinition](operationdefinition.html): The description of the operation definition
4874* [SearchParameter](searchparameter.html): The description of the search parameter
4875* [StructureDefinition](structuredefinition.html): The description of the structure definition
4876* [StructureMap](structuremap.html): The description of the structure map
4877* [TerminologyCapabilities](terminologycapabilities.html): The description of the terminology capabilities
4878* [ValueSet](valueset.html): The description of the value set
4879</b><br>
4880   * Type: <b>string</b><br>
4881   * Path: <b>CapabilityStatement.description | CodeSystem.description | CompartmentDefinition.description | ConceptMap.description | GraphDefinition.description | ImplementationGuide.description | MessageDefinition.description | NamingSystem.description | OperationDefinition.description | SearchParameter.description | StructureDefinition.description | StructureMap.description | TerminologyCapabilities.description | ValueSet.description</b><br>
4882   * </p>
4883   */
4884  @SearchParamDefinition(name="description", path="CapabilityStatement.description | CodeSystem.description | CompartmentDefinition.description | ConceptMap.description | GraphDefinition.description | ImplementationGuide.description | MessageDefinition.description | NamingSystem.description | OperationDefinition.description | SearchParameter.description | StructureDefinition.description | StructureMap.description | TerminologyCapabilities.description | ValueSet.description", description="Multiple Resources: \r\n\r\n* [CapabilityStatement](capabilitystatement.html): The description of the capability statement\r\n* [CodeSystem](codesystem.html): The description of the code system\r\n* [CompartmentDefinition](compartmentdefinition.html): The description of the compartment definition\r\n* [ConceptMap](conceptmap.html): The description of the concept map\r\n* [GraphDefinition](graphdefinition.html): The description of the graph definition\r\n* [ImplementationGuide](implementationguide.html): The description of the implementation guide\r\n* [MessageDefinition](messagedefinition.html): The description of the message definition\r\n* [NamingSystem](namingsystem.html): The description of the naming system\r\n* [OperationDefinition](operationdefinition.html): The description of the operation definition\r\n* [SearchParameter](searchparameter.html): The description of the search parameter\r\n* [StructureDefinition](structuredefinition.html): The description of the structure definition\r\n* [StructureMap](structuremap.html): The description of the structure map\r\n* [TerminologyCapabilities](terminologycapabilities.html): The description of the terminology capabilities\r\n* [ValueSet](valueset.html): The description of the value set\r\n", type="string" )
4885  public static final String SP_DESCRIPTION = "description";
4886 /**
4887   * <b>Fluent Client</b> search parameter constant for <b>description</b>
4888   * <p>
4889   * Description: <b>Multiple Resources: 
4890
4891* [CapabilityStatement](capabilitystatement.html): The description of the capability statement
4892* [CodeSystem](codesystem.html): The description of the code system
4893* [CompartmentDefinition](compartmentdefinition.html): The description of the compartment definition
4894* [ConceptMap](conceptmap.html): The description of the concept map
4895* [GraphDefinition](graphdefinition.html): The description of the graph definition
4896* [ImplementationGuide](implementationguide.html): The description of the implementation guide
4897* [MessageDefinition](messagedefinition.html): The description of the message definition
4898* [NamingSystem](namingsystem.html): The description of the naming system
4899* [OperationDefinition](operationdefinition.html): The description of the operation definition
4900* [SearchParameter](searchparameter.html): The description of the search parameter
4901* [StructureDefinition](structuredefinition.html): The description of the structure definition
4902* [StructureMap](structuremap.html): The description of the structure map
4903* [TerminologyCapabilities](terminologycapabilities.html): The description of the terminology capabilities
4904* [ValueSet](valueset.html): The description of the value set
4905</b><br>
4906   * Type: <b>string</b><br>
4907   * Path: <b>CapabilityStatement.description | CodeSystem.description | CompartmentDefinition.description | ConceptMap.description | GraphDefinition.description | ImplementationGuide.description | MessageDefinition.description | NamingSystem.description | OperationDefinition.description | SearchParameter.description | StructureDefinition.description | StructureMap.description | TerminologyCapabilities.description | ValueSet.description</b><br>
4908   * </p>
4909   */
4910  public static final ca.uhn.fhir.rest.gclient.StringClientParam DESCRIPTION = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_DESCRIPTION);
4911
4912 /**
4913   * Search parameter: <b>jurisdiction</b>
4914   * <p>
4915   * Description: <b>Multiple Resources: 
4916
4917* [CapabilityStatement](capabilitystatement.html): Intended jurisdiction for the capability statement
4918* [CodeSystem](codesystem.html): Intended jurisdiction for the code system
4919* [ConceptMap](conceptmap.html): Intended jurisdiction for the concept map
4920* [GraphDefinition](graphdefinition.html): Intended jurisdiction for the graph definition
4921* [ImplementationGuide](implementationguide.html): Intended jurisdiction for the implementation guide
4922* [MessageDefinition](messagedefinition.html): Intended jurisdiction for the message definition
4923* [NamingSystem](namingsystem.html): Intended jurisdiction for the naming system
4924* [OperationDefinition](operationdefinition.html): Intended jurisdiction for the operation definition
4925* [SearchParameter](searchparameter.html): Intended jurisdiction for the search parameter
4926* [StructureDefinition](structuredefinition.html): Intended jurisdiction for the structure definition
4927* [StructureMap](structuremap.html): Intended jurisdiction for the structure map
4928* [TerminologyCapabilities](terminologycapabilities.html): Intended jurisdiction for the terminology capabilities
4929* [ValueSet](valueset.html): Intended jurisdiction for the value set
4930</b><br>
4931   * Type: <b>token</b><br>
4932   * Path: <b>CapabilityStatement.jurisdiction | CodeSystem.jurisdiction | ConceptMap.jurisdiction | GraphDefinition.jurisdiction | ImplementationGuide.jurisdiction | MessageDefinition.jurisdiction | NamingSystem.jurisdiction | OperationDefinition.jurisdiction | SearchParameter.jurisdiction | StructureDefinition.jurisdiction | StructureMap.jurisdiction | TerminologyCapabilities.jurisdiction | ValueSet.jurisdiction</b><br>
4933   * </p>
4934   */
4935  @SearchParamDefinition(name="jurisdiction", path="CapabilityStatement.jurisdiction | CodeSystem.jurisdiction | ConceptMap.jurisdiction | GraphDefinition.jurisdiction | ImplementationGuide.jurisdiction | MessageDefinition.jurisdiction | NamingSystem.jurisdiction | OperationDefinition.jurisdiction | SearchParameter.jurisdiction | StructureDefinition.jurisdiction | StructureMap.jurisdiction | TerminologyCapabilities.jurisdiction | ValueSet.jurisdiction", description="Multiple Resources: \r\n\r\n* [CapabilityStatement](capabilitystatement.html): Intended jurisdiction for the capability statement\r\n* [CodeSystem](codesystem.html): Intended jurisdiction for the code system\r\n* [ConceptMap](conceptmap.html): Intended jurisdiction for the concept map\r\n* [GraphDefinition](graphdefinition.html): Intended jurisdiction for the graph definition\r\n* [ImplementationGuide](implementationguide.html): Intended jurisdiction for the implementation guide\r\n* [MessageDefinition](messagedefinition.html): Intended jurisdiction for the message definition\r\n* [NamingSystem](namingsystem.html): Intended jurisdiction for the naming system\r\n* [OperationDefinition](operationdefinition.html): Intended jurisdiction for the operation definition\r\n* [SearchParameter](searchparameter.html): Intended jurisdiction for the search parameter\r\n* [StructureDefinition](structuredefinition.html): Intended jurisdiction for the structure definition\r\n* [StructureMap](structuremap.html): Intended jurisdiction for the structure map\r\n* [TerminologyCapabilities](terminologycapabilities.html): Intended jurisdiction for the terminology capabilities\r\n* [ValueSet](valueset.html): Intended jurisdiction for the value set\r\n", type="token" )
4936  public static final String SP_JURISDICTION = "jurisdiction";
4937 /**
4938   * <b>Fluent Client</b> search parameter constant for <b>jurisdiction</b>
4939   * <p>
4940   * Description: <b>Multiple Resources: 
4941
4942* [CapabilityStatement](capabilitystatement.html): Intended jurisdiction for the capability statement
4943* [CodeSystem](codesystem.html): Intended jurisdiction for the code system
4944* [ConceptMap](conceptmap.html): Intended jurisdiction for the concept map
4945* [GraphDefinition](graphdefinition.html): Intended jurisdiction for the graph definition
4946* [ImplementationGuide](implementationguide.html): Intended jurisdiction for the implementation guide
4947* [MessageDefinition](messagedefinition.html): Intended jurisdiction for the message definition
4948* [NamingSystem](namingsystem.html): Intended jurisdiction for the naming system
4949* [OperationDefinition](operationdefinition.html): Intended jurisdiction for the operation definition
4950* [SearchParameter](searchparameter.html): Intended jurisdiction for the search parameter
4951* [StructureDefinition](structuredefinition.html): Intended jurisdiction for the structure definition
4952* [StructureMap](structuremap.html): Intended jurisdiction for the structure map
4953* [TerminologyCapabilities](terminologycapabilities.html): Intended jurisdiction for the terminology capabilities
4954* [ValueSet](valueset.html): Intended jurisdiction for the value set
4955</b><br>
4956   * Type: <b>token</b><br>
4957   * Path: <b>CapabilityStatement.jurisdiction | CodeSystem.jurisdiction | ConceptMap.jurisdiction | GraphDefinition.jurisdiction | ImplementationGuide.jurisdiction | MessageDefinition.jurisdiction | NamingSystem.jurisdiction | OperationDefinition.jurisdiction | SearchParameter.jurisdiction | StructureDefinition.jurisdiction | StructureMap.jurisdiction | TerminologyCapabilities.jurisdiction | ValueSet.jurisdiction</b><br>
4958   * </p>
4959   */
4960  public static final ca.uhn.fhir.rest.gclient.TokenClientParam JURISDICTION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_JURISDICTION);
4961
4962 /**
4963   * Search parameter: <b>name</b>
4964   * <p>
4965   * Description: <b>Multiple Resources: 
4966
4967* [CapabilityStatement](capabilitystatement.html): Computationally friendly name of the capability statement
4968* [CodeSystem](codesystem.html): Computationally friendly name of the code system
4969* [CompartmentDefinition](compartmentdefinition.html): Computationally friendly name of the compartment definition
4970* [ConceptMap](conceptmap.html): Computationally friendly name of the concept map
4971* [GraphDefinition](graphdefinition.html): Computationally friendly name of the graph definition
4972* [ImplementationGuide](implementationguide.html): Computationally friendly name of the implementation guide
4973* [MessageDefinition](messagedefinition.html): Computationally friendly name of the message definition
4974* [NamingSystem](namingsystem.html): Computationally friendly name of the naming system
4975* [OperationDefinition](operationdefinition.html): Computationally friendly name of the operation definition
4976* [SearchParameter](searchparameter.html): Computationally friendly name of the search parameter
4977* [StructureDefinition](structuredefinition.html): Computationally friendly name of the structure definition
4978* [StructureMap](structuremap.html): Computationally friendly name of the structure map
4979* [TerminologyCapabilities](terminologycapabilities.html): Computationally friendly name of the terminology capabilities
4980* [ValueSet](valueset.html): Computationally friendly name of the value set
4981</b><br>
4982   * Type: <b>string</b><br>
4983   * Path: <b>CapabilityStatement.name | CodeSystem.name | CompartmentDefinition.name | ConceptMap.name | GraphDefinition.name | ImplementationGuide.name | MessageDefinition.name | NamingSystem.name | OperationDefinition.name | SearchParameter.name | StructureDefinition.name | StructureMap.name | TerminologyCapabilities.name | ValueSet.name</b><br>
4984   * </p>
4985   */
4986  @SearchParamDefinition(name="name", path="CapabilityStatement.name | CodeSystem.name | CompartmentDefinition.name | ConceptMap.name | GraphDefinition.name | ImplementationGuide.name | MessageDefinition.name | NamingSystem.name | OperationDefinition.name | SearchParameter.name | StructureDefinition.name | StructureMap.name | TerminologyCapabilities.name | ValueSet.name", description="Multiple Resources: \r\n\r\n* [CapabilityStatement](capabilitystatement.html): Computationally friendly name of the capability statement\r\n* [CodeSystem](codesystem.html): Computationally friendly name of the code system\r\n* [CompartmentDefinition](compartmentdefinition.html): Computationally friendly name of the compartment definition\r\n* [ConceptMap](conceptmap.html): Computationally friendly name of the concept map\r\n* [GraphDefinition](graphdefinition.html): Computationally friendly name of the graph definition\r\n* [ImplementationGuide](implementationguide.html): Computationally friendly name of the implementation guide\r\n* [MessageDefinition](messagedefinition.html): Computationally friendly name of the message definition\r\n* [NamingSystem](namingsystem.html): Computationally friendly name of the naming system\r\n* [OperationDefinition](operationdefinition.html): Computationally friendly name of the operation definition\r\n* [SearchParameter](searchparameter.html): Computationally friendly name of the search parameter\r\n* [StructureDefinition](structuredefinition.html): Computationally friendly name of the structure definition\r\n* [StructureMap](structuremap.html): Computationally friendly name of the structure map\r\n* [TerminologyCapabilities](terminologycapabilities.html): Computationally friendly name of the terminology capabilities\r\n* [ValueSet](valueset.html): Computationally friendly name of the value set\r\n", type="string" )
4987  public static final String SP_NAME = "name";
4988 /**
4989   * <b>Fluent Client</b> search parameter constant for <b>name</b>
4990   * <p>
4991   * Description: <b>Multiple Resources: 
4992
4993* [CapabilityStatement](capabilitystatement.html): Computationally friendly name of the capability statement
4994* [CodeSystem](codesystem.html): Computationally friendly name of the code system
4995* [CompartmentDefinition](compartmentdefinition.html): Computationally friendly name of the compartment definition
4996* [ConceptMap](conceptmap.html): Computationally friendly name of the concept map
4997* [GraphDefinition](graphdefinition.html): Computationally friendly name of the graph definition
4998* [ImplementationGuide](implementationguide.html): Computationally friendly name of the implementation guide
4999* [MessageDefinition](messagedefinition.html): Computationally friendly name of the message definition
5000* [NamingSystem](namingsystem.html): Computationally friendly name of the naming system
5001* [OperationDefinition](operationdefinition.html): Computationally friendly name of the operation definition
5002* [SearchParameter](searchparameter.html): Computationally friendly name of the search parameter
5003* [StructureDefinition](structuredefinition.html): Computationally friendly name of the structure definition
5004* [StructureMap](structuremap.html): Computationally friendly name of the structure map
5005* [TerminologyCapabilities](terminologycapabilities.html): Computationally friendly name of the terminology capabilities
5006* [ValueSet](valueset.html): Computationally friendly name of the value set
5007</b><br>
5008   * Type: <b>string</b><br>
5009   * Path: <b>CapabilityStatement.name | CodeSystem.name | CompartmentDefinition.name | ConceptMap.name | GraphDefinition.name | ImplementationGuide.name | MessageDefinition.name | NamingSystem.name | OperationDefinition.name | SearchParameter.name | StructureDefinition.name | StructureMap.name | TerminologyCapabilities.name | ValueSet.name</b><br>
5010   * </p>
5011   */
5012  public static final ca.uhn.fhir.rest.gclient.StringClientParam NAME = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_NAME);
5013
5014 /**
5015   * Search parameter: <b>publisher</b>
5016   * <p>
5017   * Description: <b>Multiple Resources: 
5018
5019* [CapabilityStatement](capabilitystatement.html): Name of the publisher of the capability statement
5020* [CodeSystem](codesystem.html): Name of the publisher of the code system
5021* [CompartmentDefinition](compartmentdefinition.html): Name of the publisher of the compartment definition
5022* [ConceptMap](conceptmap.html): Name of the publisher of the concept map
5023* [GraphDefinition](graphdefinition.html): Name of the publisher of the graph definition
5024* [ImplementationGuide](implementationguide.html): Name of the publisher of the implementation guide
5025* [MessageDefinition](messagedefinition.html): Name of the publisher of the message definition
5026* [NamingSystem](namingsystem.html): Name of the publisher of the naming system
5027* [OperationDefinition](operationdefinition.html): Name of the publisher of the operation definition
5028* [SearchParameter](searchparameter.html): Name of the publisher of the search parameter
5029* [StructureDefinition](structuredefinition.html): Name of the publisher of the structure definition
5030* [StructureMap](structuremap.html): Name of the publisher of the structure map
5031* [TerminologyCapabilities](terminologycapabilities.html): Name of the publisher of the terminology capabilities
5032* [ValueSet](valueset.html): Name of the publisher of the value set
5033</b><br>
5034   * Type: <b>string</b><br>
5035   * Path: <b>CapabilityStatement.publisher | CodeSystem.publisher | CompartmentDefinition.publisher | ConceptMap.publisher | GraphDefinition.publisher | ImplementationGuide.publisher | MessageDefinition.publisher | NamingSystem.publisher | OperationDefinition.publisher | SearchParameter.publisher | StructureDefinition.publisher | StructureMap.publisher | TerminologyCapabilities.publisher | ValueSet.publisher</b><br>
5036   * </p>
5037   */
5038  @SearchParamDefinition(name="publisher", path="CapabilityStatement.publisher | CodeSystem.publisher | CompartmentDefinition.publisher | ConceptMap.publisher | GraphDefinition.publisher | ImplementationGuide.publisher | MessageDefinition.publisher | NamingSystem.publisher | OperationDefinition.publisher | SearchParameter.publisher | StructureDefinition.publisher | StructureMap.publisher | TerminologyCapabilities.publisher | ValueSet.publisher", description="Multiple Resources: \r\n\r\n* [CapabilityStatement](capabilitystatement.html): Name of the publisher of the capability statement\r\n* [CodeSystem](codesystem.html): Name of the publisher of the code system\r\n* [CompartmentDefinition](compartmentdefinition.html): Name of the publisher of the compartment definition\r\n* [ConceptMap](conceptmap.html): Name of the publisher of the concept map\r\n* [GraphDefinition](graphdefinition.html): Name of the publisher of the graph definition\r\n* [ImplementationGuide](implementationguide.html): Name of the publisher of the implementation guide\r\n* [MessageDefinition](messagedefinition.html): Name of the publisher of the message definition\r\n* [NamingSystem](namingsystem.html): Name of the publisher of the naming system\r\n* [OperationDefinition](operationdefinition.html): Name of the publisher of the operation definition\r\n* [SearchParameter](searchparameter.html): Name of the publisher of the search parameter\r\n* [StructureDefinition](structuredefinition.html): Name of the publisher of the structure definition\r\n* [StructureMap](structuremap.html): Name of the publisher of the structure map\r\n* [TerminologyCapabilities](terminologycapabilities.html): Name of the publisher of the terminology capabilities\r\n* [ValueSet](valueset.html): Name of the publisher of the value set\r\n", type="string" )
5039  public static final String SP_PUBLISHER = "publisher";
5040 /**
5041   * <b>Fluent Client</b> search parameter constant for <b>publisher</b>
5042   * <p>
5043   * Description: <b>Multiple Resources: 
5044
5045* [CapabilityStatement](capabilitystatement.html): Name of the publisher of the capability statement
5046* [CodeSystem](codesystem.html): Name of the publisher of the code system
5047* [CompartmentDefinition](compartmentdefinition.html): Name of the publisher of the compartment definition
5048* [ConceptMap](conceptmap.html): Name of the publisher of the concept map
5049* [GraphDefinition](graphdefinition.html): Name of the publisher of the graph definition
5050* [ImplementationGuide](implementationguide.html): Name of the publisher of the implementation guide
5051* [MessageDefinition](messagedefinition.html): Name of the publisher of the message definition
5052* [NamingSystem](namingsystem.html): Name of the publisher of the naming system
5053* [OperationDefinition](operationdefinition.html): Name of the publisher of the operation definition
5054* [SearchParameter](searchparameter.html): Name of the publisher of the search parameter
5055* [StructureDefinition](structuredefinition.html): Name of the publisher of the structure definition
5056* [StructureMap](structuremap.html): Name of the publisher of the structure map
5057* [TerminologyCapabilities](terminologycapabilities.html): Name of the publisher of the terminology capabilities
5058* [ValueSet](valueset.html): Name of the publisher of the value set
5059</b><br>
5060   * Type: <b>string</b><br>
5061   * Path: <b>CapabilityStatement.publisher | CodeSystem.publisher | CompartmentDefinition.publisher | ConceptMap.publisher | GraphDefinition.publisher | ImplementationGuide.publisher | MessageDefinition.publisher | NamingSystem.publisher | OperationDefinition.publisher | SearchParameter.publisher | StructureDefinition.publisher | StructureMap.publisher | TerminologyCapabilities.publisher | ValueSet.publisher</b><br>
5062   * </p>
5063   */
5064  public static final ca.uhn.fhir.rest.gclient.StringClientParam PUBLISHER = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_PUBLISHER);
5065
5066 /**
5067   * Search parameter: <b>status</b>
5068   * <p>
5069   * Description: <b>Multiple Resources: 
5070
5071* [CapabilityStatement](capabilitystatement.html): The current status of the capability statement
5072* [CodeSystem](codesystem.html): The current status of the code system
5073* [CompartmentDefinition](compartmentdefinition.html): The current status of the compartment definition
5074* [ConceptMap](conceptmap.html): The current status of the concept map
5075* [GraphDefinition](graphdefinition.html): The current status of the graph definition
5076* [ImplementationGuide](implementationguide.html): The current status of the implementation guide
5077* [MessageDefinition](messagedefinition.html): The current status of the message definition
5078* [NamingSystem](namingsystem.html): The current status of the naming system
5079* [OperationDefinition](operationdefinition.html): The current status of the operation definition
5080* [SearchParameter](searchparameter.html): The current status of the search parameter
5081* [StructureDefinition](structuredefinition.html): The current status of the structure definition
5082* [StructureMap](structuremap.html): The current status of the structure map
5083* [TerminologyCapabilities](terminologycapabilities.html): The current status of the terminology capabilities
5084* [ValueSet](valueset.html): The current status of the value set
5085</b><br>
5086   * Type: <b>token</b><br>
5087   * Path: <b>CapabilityStatement.status | CodeSystem.status | CompartmentDefinition.status | ConceptMap.status | GraphDefinition.status | ImplementationGuide.status | MessageDefinition.status | NamingSystem.status | OperationDefinition.status | SearchParameter.status | StructureDefinition.status | StructureMap.status | TerminologyCapabilities.status | ValueSet.status</b><br>
5088   * </p>
5089   */
5090  @SearchParamDefinition(name="status", path="CapabilityStatement.status | CodeSystem.status | CompartmentDefinition.status | ConceptMap.status | GraphDefinition.status | ImplementationGuide.status | MessageDefinition.status | NamingSystem.status | OperationDefinition.status | SearchParameter.status | StructureDefinition.status | StructureMap.status | TerminologyCapabilities.status | ValueSet.status", description="Multiple Resources: \r\n\r\n* [CapabilityStatement](capabilitystatement.html): The current status of the capability statement\r\n* [CodeSystem](codesystem.html): The current status of the code system\r\n* [CompartmentDefinition](compartmentdefinition.html): The current status of the compartment definition\r\n* [ConceptMap](conceptmap.html): The current status of the concept map\r\n* [GraphDefinition](graphdefinition.html): The current status of the graph definition\r\n* [ImplementationGuide](implementationguide.html): The current status of the implementation guide\r\n* [MessageDefinition](messagedefinition.html): The current status of the message definition\r\n* [NamingSystem](namingsystem.html): The current status of the naming system\r\n* [OperationDefinition](operationdefinition.html): The current status of the operation definition\r\n* [SearchParameter](searchparameter.html): The current status of the search parameter\r\n* [StructureDefinition](structuredefinition.html): The current status of the structure definition\r\n* [StructureMap](structuremap.html): The current status of the structure map\r\n* [TerminologyCapabilities](terminologycapabilities.html): The current status of the terminology capabilities\r\n* [ValueSet](valueset.html): The current status of the value set\r\n", type="token" )
5091  public static final String SP_STATUS = "status";
5092 /**
5093   * <b>Fluent Client</b> search parameter constant for <b>status</b>
5094   * <p>
5095   * Description: <b>Multiple Resources: 
5096
5097* [CapabilityStatement](capabilitystatement.html): The current status of the capability statement
5098* [CodeSystem](codesystem.html): The current status of the code system
5099* [CompartmentDefinition](compartmentdefinition.html): The current status of the compartment definition
5100* [ConceptMap](conceptmap.html): The current status of the concept map
5101* [GraphDefinition](graphdefinition.html): The current status of the graph definition
5102* [ImplementationGuide](implementationguide.html): The current status of the implementation guide
5103* [MessageDefinition](messagedefinition.html): The current status of the message definition
5104* [NamingSystem](namingsystem.html): The current status of the naming system
5105* [OperationDefinition](operationdefinition.html): The current status of the operation definition
5106* [SearchParameter](searchparameter.html): The current status of the search parameter
5107* [StructureDefinition](structuredefinition.html): The current status of the structure definition
5108* [StructureMap](structuremap.html): The current status of the structure map
5109* [TerminologyCapabilities](terminologycapabilities.html): The current status of the terminology capabilities
5110* [ValueSet](valueset.html): The current status of the value set
5111</b><br>
5112   * Type: <b>token</b><br>
5113   * Path: <b>CapabilityStatement.status | CodeSystem.status | CompartmentDefinition.status | ConceptMap.status | GraphDefinition.status | ImplementationGuide.status | MessageDefinition.status | NamingSystem.status | OperationDefinition.status | SearchParameter.status | StructureDefinition.status | StructureMap.status | TerminologyCapabilities.status | ValueSet.status</b><br>
5114   * </p>
5115   */
5116  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
5117
5118 /**
5119   * Search parameter: <b>title</b>
5120   * <p>
5121   * Description: <b>Multiple Resources: 
5122
5123* [CapabilityStatement](capabilitystatement.html): The human-friendly name of the capability statement
5124* [CodeSystem](codesystem.html): The human-friendly name of the code system
5125* [ConceptMap](conceptmap.html): The human-friendly name of the concept map
5126* [ImplementationGuide](implementationguide.html): The human-friendly name of the implementation guide
5127* [MessageDefinition](messagedefinition.html): The human-friendly name of the message definition
5128* [OperationDefinition](operationdefinition.html): The human-friendly name of the operation definition
5129* [StructureDefinition](structuredefinition.html): The human-friendly name of the structure definition
5130* [StructureMap](structuremap.html): The human-friendly name of the structure map
5131* [TerminologyCapabilities](terminologycapabilities.html): The human-friendly name of the terminology capabilities
5132* [ValueSet](valueset.html): The human-friendly name of the value set
5133</b><br>
5134   * Type: <b>string</b><br>
5135   * Path: <b>CapabilityStatement.title | CodeSystem.title | ConceptMap.title | ImplementationGuide.title | MessageDefinition.title | OperationDefinition.title | StructureDefinition.title | StructureMap.title | TerminologyCapabilities.title | ValueSet.title</b><br>
5136   * </p>
5137   */
5138  @SearchParamDefinition(name="title", path="CapabilityStatement.title | CodeSystem.title | ConceptMap.title | ImplementationGuide.title | MessageDefinition.title | OperationDefinition.title | StructureDefinition.title | StructureMap.title | TerminologyCapabilities.title | ValueSet.title", description="Multiple Resources: \r\n\r\n* [CapabilityStatement](capabilitystatement.html): The human-friendly name of the capability statement\r\n* [CodeSystem](codesystem.html): The human-friendly name of the code system\r\n* [ConceptMap](conceptmap.html): The human-friendly name of the concept map\r\n* [ImplementationGuide](implementationguide.html): The human-friendly name of the implementation guide\r\n* [MessageDefinition](messagedefinition.html): The human-friendly name of the message definition\r\n* [OperationDefinition](operationdefinition.html): The human-friendly name of the operation definition\r\n* [StructureDefinition](structuredefinition.html): The human-friendly name of the structure definition\r\n* [StructureMap](structuremap.html): The human-friendly name of the structure map\r\n* [TerminologyCapabilities](terminologycapabilities.html): The human-friendly name of the terminology capabilities\r\n* [ValueSet](valueset.html): The human-friendly name of the value set\r\n", type="string" )
5139  public static final String SP_TITLE = "title";
5140 /**
5141   * <b>Fluent Client</b> search parameter constant for <b>title</b>
5142   * <p>
5143   * Description: <b>Multiple Resources: 
5144
5145* [CapabilityStatement](capabilitystatement.html): The human-friendly name of the capability statement
5146* [CodeSystem](codesystem.html): The human-friendly name of the code system
5147* [ConceptMap](conceptmap.html): The human-friendly name of the concept map
5148* [ImplementationGuide](implementationguide.html): The human-friendly name of the implementation guide
5149* [MessageDefinition](messagedefinition.html): The human-friendly name of the message definition
5150* [OperationDefinition](operationdefinition.html): The human-friendly name of the operation definition
5151* [StructureDefinition](structuredefinition.html): The human-friendly name of the structure definition
5152* [StructureMap](structuremap.html): The human-friendly name of the structure map
5153* [TerminologyCapabilities](terminologycapabilities.html): The human-friendly name of the terminology capabilities
5154* [ValueSet](valueset.html): The human-friendly name of the value set
5155</b><br>
5156   * Type: <b>string</b><br>
5157   * Path: <b>CapabilityStatement.title | CodeSystem.title | ConceptMap.title | ImplementationGuide.title | MessageDefinition.title | OperationDefinition.title | StructureDefinition.title | StructureMap.title | TerminologyCapabilities.title | ValueSet.title</b><br>
5158   * </p>
5159   */
5160  public static final ca.uhn.fhir.rest.gclient.StringClientParam TITLE = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_TITLE);
5161
5162 /**
5163   * Search parameter: <b>url</b>
5164   * <p>
5165   * Description: <b>Multiple Resources: 
5166
5167* [CapabilityStatement](capabilitystatement.html): The uri that identifies the capability statement
5168* [CodeSystem](codesystem.html): The uri that identifies the code system
5169* [CompartmentDefinition](compartmentdefinition.html): The uri that identifies the compartment definition
5170* [ConceptMap](conceptmap.html): The URI that identifies the concept map
5171* [GraphDefinition](graphdefinition.html): The uri that identifies the graph definition
5172* [ImplementationGuide](implementationguide.html): The uri that identifies the implementation guide
5173* [MessageDefinition](messagedefinition.html): The uri that identifies the message definition
5174* [NamingSystem](namingsystem.html): The uri that identifies the naming system
5175* [OperationDefinition](operationdefinition.html): The uri that identifies the operation definition
5176* [SearchParameter](searchparameter.html): The uri that identifies the search parameter
5177* [StructureDefinition](structuredefinition.html): The uri that identifies the structure definition
5178* [StructureMap](structuremap.html): The uri that identifies the structure map
5179* [TerminologyCapabilities](terminologycapabilities.html): The uri that identifies the terminology capabilities
5180* [ValueSet](valueset.html): The uri that identifies the value set
5181</b><br>
5182   * Type: <b>uri</b><br>
5183   * Path: <b>CapabilityStatement.url | CodeSystem.url | CompartmentDefinition.url | ConceptMap.url | GraphDefinition.url | ImplementationGuide.url | MessageDefinition.url | NamingSystem.url | OperationDefinition.url | SearchParameter.url | StructureDefinition.url | StructureMap.url | TerminologyCapabilities.url | ValueSet.url</b><br>
5184   * </p>
5185   */
5186  @SearchParamDefinition(name="url", path="CapabilityStatement.url | CodeSystem.url | CompartmentDefinition.url | ConceptMap.url | GraphDefinition.url | ImplementationGuide.url | MessageDefinition.url | NamingSystem.url | OperationDefinition.url | SearchParameter.url | StructureDefinition.url | StructureMap.url | TerminologyCapabilities.url | ValueSet.url", description="Multiple Resources: \r\n\r\n* [CapabilityStatement](capabilitystatement.html): The uri that identifies the capability statement\r\n* [CodeSystem](codesystem.html): The uri that identifies the code system\r\n* [CompartmentDefinition](compartmentdefinition.html): The uri that identifies the compartment definition\r\n* [ConceptMap](conceptmap.html): The URI that identifies the concept map\r\n* [GraphDefinition](graphdefinition.html): The uri that identifies the graph definition\r\n* [ImplementationGuide](implementationguide.html): The uri that identifies the implementation guide\r\n* [MessageDefinition](messagedefinition.html): The uri that identifies the message definition\r\n* [NamingSystem](namingsystem.html): The uri that identifies the naming system\r\n* [OperationDefinition](operationdefinition.html): The uri that identifies the operation definition\r\n* [SearchParameter](searchparameter.html): The uri that identifies the search parameter\r\n* [StructureDefinition](structuredefinition.html): The uri that identifies the structure definition\r\n* [StructureMap](structuremap.html): The uri that identifies the structure map\r\n* [TerminologyCapabilities](terminologycapabilities.html): The uri that identifies the terminology capabilities\r\n* [ValueSet](valueset.html): The uri that identifies the value set\r\n", type="uri" )
5187  public static final String SP_URL = "url";
5188 /**
5189   * <b>Fluent Client</b> search parameter constant for <b>url</b>
5190   * <p>
5191   * Description: <b>Multiple Resources: 
5192
5193* [CapabilityStatement](capabilitystatement.html): The uri that identifies the capability statement
5194* [CodeSystem](codesystem.html): The uri that identifies the code system
5195* [CompartmentDefinition](compartmentdefinition.html): The uri that identifies the compartment definition
5196* [ConceptMap](conceptmap.html): The URI that identifies the concept map
5197* [GraphDefinition](graphdefinition.html): The uri that identifies the graph definition
5198* [ImplementationGuide](implementationguide.html): The uri that identifies the implementation guide
5199* [MessageDefinition](messagedefinition.html): The uri that identifies the message definition
5200* [NamingSystem](namingsystem.html): The uri that identifies the naming system
5201* [OperationDefinition](operationdefinition.html): The uri that identifies the operation definition
5202* [SearchParameter](searchparameter.html): The uri that identifies the search parameter
5203* [StructureDefinition](structuredefinition.html): The uri that identifies the structure definition
5204* [StructureMap](structuremap.html): The uri that identifies the structure map
5205* [TerminologyCapabilities](terminologycapabilities.html): The uri that identifies the terminology capabilities
5206* [ValueSet](valueset.html): The uri that identifies the value set
5207</b><br>
5208   * Type: <b>uri</b><br>
5209   * Path: <b>CapabilityStatement.url | CodeSystem.url | CompartmentDefinition.url | ConceptMap.url | GraphDefinition.url | ImplementationGuide.url | MessageDefinition.url | NamingSystem.url | OperationDefinition.url | SearchParameter.url | StructureDefinition.url | StructureMap.url | TerminologyCapabilities.url | ValueSet.url</b><br>
5210   * </p>
5211   */
5212  public static final ca.uhn.fhir.rest.gclient.UriClientParam URL = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_URL);
5213
5214 /**
5215   * Search parameter: <b>version</b>
5216   * <p>
5217   * Description: <b>Multiple Resources: 
5218
5219* [CapabilityStatement](capabilitystatement.html): The business version of the capability statement
5220* [CodeSystem](codesystem.html): The business version of the code system
5221* [CompartmentDefinition](compartmentdefinition.html): The business version of the compartment definition
5222* [ConceptMap](conceptmap.html): The business version of the concept map
5223* [GraphDefinition](graphdefinition.html): The business version of the graph definition
5224* [ImplementationGuide](implementationguide.html): The business version of the implementation guide
5225* [MessageDefinition](messagedefinition.html): The business version of the message definition
5226* [NamingSystem](namingsystem.html): The business version of the naming system
5227* [OperationDefinition](operationdefinition.html): The business version of the operation definition
5228* [SearchParameter](searchparameter.html): The business version of the search parameter
5229* [StructureDefinition](structuredefinition.html): The business version of the structure definition
5230* [StructureMap](structuremap.html): The business version of the structure map
5231* [TerminologyCapabilities](terminologycapabilities.html): The business version of the terminology capabilities
5232* [ValueSet](valueset.html): The business version of the value set
5233</b><br>
5234   * Type: <b>token</b><br>
5235   * Path: <b>CapabilityStatement.version | CodeSystem.version | CompartmentDefinition.version | ConceptMap.version | GraphDefinition.version | ImplementationGuide.version | MessageDefinition.version | NamingSystem.version | OperationDefinition.version | SearchParameter.version | StructureDefinition.version | StructureMap.version | TerminologyCapabilities.version | ValueSet.version</b><br>
5236   * </p>
5237   */
5238  @SearchParamDefinition(name="version", path="CapabilityStatement.version | CodeSystem.version | CompartmentDefinition.version | ConceptMap.version | GraphDefinition.version | ImplementationGuide.version | MessageDefinition.version | NamingSystem.version | OperationDefinition.version | SearchParameter.version | StructureDefinition.version | StructureMap.version | TerminologyCapabilities.version | ValueSet.version", description="Multiple Resources: \r\n\r\n* [CapabilityStatement](capabilitystatement.html): The business version of the capability statement\r\n* [CodeSystem](codesystem.html): The business version of the code system\r\n* [CompartmentDefinition](compartmentdefinition.html): The business version of the compartment definition\r\n* [ConceptMap](conceptmap.html): The business version of the concept map\r\n* [GraphDefinition](graphdefinition.html): The business version of the graph definition\r\n* [ImplementationGuide](implementationguide.html): The business version of the implementation guide\r\n* [MessageDefinition](messagedefinition.html): The business version of the message definition\r\n* [NamingSystem](namingsystem.html): The business version of the naming system\r\n* [OperationDefinition](operationdefinition.html): The business version of the operation definition\r\n* [SearchParameter](searchparameter.html): The business version of the search parameter\r\n* [StructureDefinition](structuredefinition.html): The business version of the structure definition\r\n* [StructureMap](structuremap.html): The business version of the structure map\r\n* [TerminologyCapabilities](terminologycapabilities.html): The business version of the terminology capabilities\r\n* [ValueSet](valueset.html): The business version of the value set\r\n", type="token" )
5239  public static final String SP_VERSION = "version";
5240 /**
5241   * <b>Fluent Client</b> search parameter constant for <b>version</b>
5242   * <p>
5243   * Description: <b>Multiple Resources: 
5244
5245* [CapabilityStatement](capabilitystatement.html): The business version of the capability statement
5246* [CodeSystem](codesystem.html): The business version of the code system
5247* [CompartmentDefinition](compartmentdefinition.html): The business version of the compartment definition
5248* [ConceptMap](conceptmap.html): The business version of the concept map
5249* [GraphDefinition](graphdefinition.html): The business version of the graph definition
5250* [ImplementationGuide](implementationguide.html): The business version of the implementation guide
5251* [MessageDefinition](messagedefinition.html): The business version of the message definition
5252* [NamingSystem](namingsystem.html): The business version of the naming system
5253* [OperationDefinition](operationdefinition.html): The business version of the operation definition
5254* [SearchParameter](searchparameter.html): The business version of the search parameter
5255* [StructureDefinition](structuredefinition.html): The business version of the structure definition
5256* [StructureMap](structuremap.html): The business version of the structure map
5257* [TerminologyCapabilities](terminologycapabilities.html): The business version of the terminology capabilities
5258* [ValueSet](valueset.html): The business version of the value set
5259</b><br>
5260   * Type: <b>token</b><br>
5261   * Path: <b>CapabilityStatement.version | CodeSystem.version | CompartmentDefinition.version | ConceptMap.version | GraphDefinition.version | ImplementationGuide.version | MessageDefinition.version | NamingSystem.version | OperationDefinition.version | SearchParameter.version | StructureDefinition.version | StructureMap.version | TerminologyCapabilities.version | ValueSet.version</b><br>
5262   * </p>
5263   */
5264  public static final ca.uhn.fhir.rest.gclient.TokenClientParam VERSION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_VERSION);
5265
5266// Manual code (from Configuration.txt):
5267  public boolean supportsCopyright() {
5268    return false;
5269  }
5270
5271// end addition
5272
5273}
5274