001package org.hl7.fhir.r4.model;
002
003/*-
004 * #%L
005 * org.hl7.fhir.r4
006 * %%
007 * Copyright (C) 2014 - 2019 Health Level 7
008 * %%
009 * Licensed under the Apache License, Version 2.0 (the "License");
010 * you may not use this file except in compliance with the License.
011 * You may obtain a copy of the License at
012 * 
013 *      http://www.apache.org/licenses/LICENSE-2.0
014 * 
015 * Unless required by applicable law or agreed to in writing, software
016 * distributed under the License is distributed on an "AS IS" BASIS,
017 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
018 * See the License for the specific language governing permissions and
019 * limitations under the License.
020 * #L%
021 */
022
023/*
024  Copyright (c) 2011+, HL7, Inc.
025  All rights reserved.
026  
027  Redistribution and use in source and binary forms, with or without modification, 
028  are permitted provided that the following conditions are met:
029  
030   * Redistributions of source code must retain the above copyright notice, this 
031     list of conditions and the following disclaimer.
032   * Redistributions in binary form must reproduce the above copyright notice, 
033     this list of conditions and the following disclaimer in the documentation 
034     and/or other materials provided with the distribution.
035   * Neither the name of HL7 nor the names of its contributors may be used to 
036     endorse or promote products derived from this software without specific 
037     prior written permission.
038  
039  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
040  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
041  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
042  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
043  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
044  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
045  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
046  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
047  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
048  POSSIBILITY OF SUCH DAMAGE.
049  
050*/
051
052// Generated on Thu, Dec 13, 2018 14:07+1100 for FHIR v4.0.0
053import java.util.ArrayList;
054import java.util.Date;
055import java.util.List;
056
057import org.hl7.fhir.exceptions.FHIRException;
058import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
059import org.hl7.fhir.r4.model.Enumerations.BindingStrength;
060import org.hl7.fhir.r4.model.Enumerations.BindingStrengthEnumFactory;
061import org.hl7.fhir.r4.model.Enumerations.PublicationStatus;
062import org.hl7.fhir.r4.model.Enumerations.PublicationStatusEnumFactory;
063import org.hl7.fhir.r4.model.Enumerations.SearchParamType;
064import org.hl7.fhir.r4.model.Enumerations.SearchParamTypeEnumFactory;
065import org.hl7.fhir.utilities.Utilities;
066
067import ca.uhn.fhir.model.api.annotation.Block;
068import ca.uhn.fhir.model.api.annotation.Child;
069import ca.uhn.fhir.model.api.annotation.ChildOrder;
070import ca.uhn.fhir.model.api.annotation.Description;
071import ca.uhn.fhir.model.api.annotation.ResourceDef;
072import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
073/**
074 * A formal computable definition of an operation (on the RESTful interface) or a named query (using the search interaction).
075 */
076@ResourceDef(name="OperationDefinition", profile="http://hl7.org/fhir/StructureDefinition/OperationDefinition")
077@ChildOrder(names={"url", "version", "name", "title", "status", "kind", "experimental", "date", "publisher", "contact", "description", "useContext", "jurisdiction", "purpose", "affectsState", "code", "comment", "base", "resource", "system", "type", "instance", "inputProfile", "outputProfile", "parameter", "overload"})
078public class OperationDefinition extends MetadataResource {
079
080    public enum OperationKind {
081        /**
082         * This operation is invoked as an operation.
083         */
084        OPERATION, 
085        /**
086         * This operation is a named query, invoked using the search mechanism.
087         */
088        QUERY, 
089        /**
090         * added to help the parsers with the generic types
091         */
092        NULL;
093        public static OperationKind fromCode(String codeString) throws FHIRException {
094            if (codeString == null || "".equals(codeString))
095                return null;
096        if ("operation".equals(codeString))
097          return OPERATION;
098        if ("query".equals(codeString))
099          return QUERY;
100        if (Configuration.isAcceptInvalidEnums())
101          return null;
102        else
103          throw new FHIRException("Unknown OperationKind code '"+codeString+"'");
104        }
105        public String toCode() {
106          switch (this) {
107            case OPERATION: return "operation";
108            case QUERY: return "query";
109            default: return "?";
110          }
111        }
112        public String getSystem() {
113          switch (this) {
114            case OPERATION: return "http://hl7.org/fhir/operation-kind";
115            case QUERY: return "http://hl7.org/fhir/operation-kind";
116            default: return "?";
117          }
118        }
119        public String getDefinition() {
120          switch (this) {
121            case OPERATION: return "This operation is invoked as an operation.";
122            case QUERY: return "This operation is a named query, invoked using the search mechanism.";
123            default: return "?";
124          }
125        }
126        public String getDisplay() {
127          switch (this) {
128            case OPERATION: return "Operation";
129            case QUERY: return "Query";
130            default: return "?";
131          }
132        }
133    }
134
135  public static class OperationKindEnumFactory implements EnumFactory<OperationKind> {
136    public OperationKind fromCode(String codeString) throws IllegalArgumentException {
137      if (codeString == null || "".equals(codeString))
138            if (codeString == null || "".equals(codeString))
139                return null;
140        if ("operation".equals(codeString))
141          return OperationKind.OPERATION;
142        if ("query".equals(codeString))
143          return OperationKind.QUERY;
144        throw new IllegalArgumentException("Unknown OperationKind code '"+codeString+"'");
145        }
146        public Enumeration<OperationKind> fromType(Base code) throws FHIRException {
147          if (code == null)
148            return null;
149          if (code.isEmpty())
150            return new Enumeration<OperationKind>(this);
151          String codeString = ((PrimitiveType) code).asStringValue();
152          if (codeString == null || "".equals(codeString))
153            return null;
154        if ("operation".equals(codeString))
155          return new Enumeration<OperationKind>(this, OperationKind.OPERATION);
156        if ("query".equals(codeString))
157          return new Enumeration<OperationKind>(this, OperationKind.QUERY);
158        throw new FHIRException("Unknown OperationKind code '"+codeString+"'");
159        }
160    public String toCode(OperationKind code) {
161      if (code == OperationKind.OPERATION)
162        return "operation";
163      if (code == OperationKind.QUERY)
164        return "query";
165      return "?";
166      }
167    public String toSystem(OperationKind code) {
168      return code.getSystem();
169      }
170    }
171
172    public enum OperationParameterUse {
173        /**
174         * This is an input parameter.
175         */
176        IN, 
177        /**
178         * This is an output parameter.
179         */
180        OUT, 
181        /**
182         * added to help the parsers with the generic types
183         */
184        NULL;
185        public static OperationParameterUse fromCode(String codeString) throws FHIRException {
186            if (codeString == null || "".equals(codeString))
187                return null;
188        if ("in".equals(codeString))
189          return IN;
190        if ("out".equals(codeString))
191          return OUT;
192        if (Configuration.isAcceptInvalidEnums())
193          return null;
194        else
195          throw new FHIRException("Unknown OperationParameterUse code '"+codeString+"'");
196        }
197        public String toCode() {
198          switch (this) {
199            case IN: return "in";
200            case OUT: return "out";
201            default: return "?";
202          }
203        }
204        public String getSystem() {
205          switch (this) {
206            case IN: return "http://hl7.org/fhir/operation-parameter-use";
207            case OUT: return "http://hl7.org/fhir/operation-parameter-use";
208            default: return "?";
209          }
210        }
211        public String getDefinition() {
212          switch (this) {
213            case IN: return "This is an input parameter.";
214            case OUT: return "This is an output parameter.";
215            default: return "?";
216          }
217        }
218        public String getDisplay() {
219          switch (this) {
220            case IN: return "In";
221            case OUT: return "Out";
222            default: return "?";
223          }
224        }
225    }
226
227  public static class OperationParameterUseEnumFactory implements EnumFactory<OperationParameterUse> {
228    public OperationParameterUse fromCode(String codeString) throws IllegalArgumentException {
229      if (codeString == null || "".equals(codeString))
230            if (codeString == null || "".equals(codeString))
231                return null;
232        if ("in".equals(codeString))
233          return OperationParameterUse.IN;
234        if ("out".equals(codeString))
235          return OperationParameterUse.OUT;
236        throw new IllegalArgumentException("Unknown OperationParameterUse code '"+codeString+"'");
237        }
238        public Enumeration<OperationParameterUse> fromType(Base code) throws FHIRException {
239          if (code == null)
240            return null;
241          if (code.isEmpty())
242            return new Enumeration<OperationParameterUse>(this);
243          String codeString = ((PrimitiveType) code).asStringValue();
244          if (codeString == null || "".equals(codeString))
245            return null;
246        if ("in".equals(codeString))
247          return new Enumeration<OperationParameterUse>(this, OperationParameterUse.IN);
248        if ("out".equals(codeString))
249          return new Enumeration<OperationParameterUse>(this, OperationParameterUse.OUT);
250        throw new FHIRException("Unknown OperationParameterUse code '"+codeString+"'");
251        }
252    public String toCode(OperationParameterUse code) {
253      if (code == OperationParameterUse.IN)
254        return "in";
255      if (code == OperationParameterUse.OUT)
256        return "out";
257      return "?";
258      }
259    public String toSystem(OperationParameterUse 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         * The minimum number of times this parameter SHALL appear in the request or response.
283         */
284        @Child(name = "min", type = {IntegerType.class}, order=3, min=1, max=1, modifier=false, summary=false)
285        @Description(shortDefinition="Minimum Cardinality", formalDefinition="The minimum number of times this parameter SHALL appear in the request or response." )
286        protected IntegerType min;
287
288        /**
289         * The maximum number of times this element is permitted to appear in the request or response.
290         */
291        @Child(name = "max", type = {StringType.class}, order=4, min=1, max=1, modifier=false, summary=false)
292        @Description(shortDefinition="Maximum Cardinality (a number or *)", formalDefinition="The maximum number of times this element is permitted to appear in the request or response." )
293        protected StringType max;
294
295        /**
296         * Describes the meaning or use of this parameter.
297         */
298        @Child(name = "documentation", type = {StringType.class}, order=5, min=0, max=1, modifier=false, summary=false)
299        @Description(shortDefinition="Description of meaning/use", formalDefinition="Describes the meaning or use of this parameter." )
300        protected StringType documentation;
301
302        /**
303         * The type for this parameter.
304         */
305        @Child(name = "type", type = {CodeType.class}, order=6, min=0, max=1, modifier=false, summary=false)
306        @Description(shortDefinition="What type this parameter has", formalDefinition="The type for this parameter." )
307        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/all-types")
308        protected CodeType type;
309
310        /**
311         * 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.
312         */
313        @Child(name = "targetProfile", type = {CanonicalType.class}, order=7, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
314        @Description(shortDefinition="If type is Reference | canonical, allowed targets", 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." )
315        protected List<CanonicalType> targetProfile;
316
317        /**
318         * How the parameter is understood as a search parameter. This is only used if the parameter type is 'string'.
319         */
320        @Child(name = "searchType", type = {CodeType.class}, order=8, min=0, max=1, modifier=false, summary=false)
321        @Description(shortDefinition="number | date | string | token | reference | composite | quantity | uri | special", formalDefinition="How the parameter is understood as a search parameter. This is only used if the parameter type is 'string'." )
322        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/search-param-type")
323        protected Enumeration<SearchParamType> searchType;
324
325        /**
326         * Binds to a value set if this parameter is coded (code, Coding, CodeableConcept).
327         */
328        @Child(name = "binding", type = {}, order=9, min=0, max=1, modifier=false, summary=false)
329        @Description(shortDefinition="ValueSet details if this is coded", formalDefinition="Binds to a value set if this parameter is coded (code, Coding, CodeableConcept)." )
330        protected OperationDefinitionParameterBindingComponent binding;
331
332        /**
333         * Identifies other resource parameters within the operation invocation that are expected to resolve to this resource.
334         */
335        @Child(name = "referencedFrom", type = {}, order=10, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
336        @Description(shortDefinition="References to this parameter", formalDefinition="Identifies other resource parameters within the operation invocation that are expected to resolve to this resource." )
337        protected List<OperationDefinitionParameterReferencedFromComponent> referencedFrom;
338
339        /**
340         * The parts of a nested Parameter.
341         */
342        @Child(name = "part", type = {OperationDefinitionParameterComponent.class}, order=11, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
343        @Description(shortDefinition="Parts of a nested Parameter", formalDefinition="The parts of a nested Parameter." )
344        protected List<OperationDefinitionParameterComponent> part;
345
346        private static final long serialVersionUID = 1715661531L;
347
348    /**
349     * Constructor
350     */
351      public OperationDefinitionParameterComponent() {
352        super();
353      }
354
355    /**
356     * Constructor
357     */
358      public OperationDefinitionParameterComponent(CodeType name, Enumeration<OperationParameterUse> use, IntegerType min, StringType max) {
359        super();
360        this.name = name;
361        this.use = use;
362        this.min = min;
363        this.max = max;
364      }
365
366        /**
367         * @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
368         */
369        public CodeType getNameElement() { 
370          if (this.name == null)
371            if (Configuration.errorOnAutoCreate())
372              throw new Error("Attempt to auto-create OperationDefinitionParameterComponent.name");
373            else if (Configuration.doAutoCreate())
374              this.name = new CodeType(); // bb
375          return this.name;
376        }
377
378        public boolean hasNameElement() { 
379          return this.name != null && !this.name.isEmpty();
380        }
381
382        public boolean hasName() { 
383          return this.name != null && !this.name.isEmpty();
384        }
385
386        /**
387         * @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
388         */
389        public OperationDefinitionParameterComponent setNameElement(CodeType value) { 
390          this.name = value;
391          return this;
392        }
393
394        /**
395         * @return The name of used to identify the parameter.
396         */
397        public String getName() { 
398          return this.name == null ? null : this.name.getValue();
399        }
400
401        /**
402         * @param value The name of used to identify the parameter.
403         */
404        public OperationDefinitionParameterComponent setName(String value) { 
405            if (this.name == null)
406              this.name = new CodeType();
407            this.name.setValue(value);
408          return this;
409        }
410
411        /**
412         * @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
413         */
414        public Enumeration<OperationParameterUse> getUseElement() { 
415          if (this.use == null)
416            if (Configuration.errorOnAutoCreate())
417              throw new Error("Attempt to auto-create OperationDefinitionParameterComponent.use");
418            else if (Configuration.doAutoCreate())
419              this.use = new Enumeration<OperationParameterUse>(new OperationParameterUseEnumFactory()); // bb
420          return this.use;
421        }
422
423        public boolean hasUseElement() { 
424          return this.use != null && !this.use.isEmpty();
425        }
426
427        public boolean hasUse() { 
428          return this.use != null && !this.use.isEmpty();
429        }
430
431        /**
432         * @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
433         */
434        public OperationDefinitionParameterComponent setUseElement(Enumeration<OperationParameterUse> value) { 
435          this.use = value;
436          return this;
437        }
438
439        /**
440         * @return Whether this is an input or an output parameter.
441         */
442        public OperationParameterUse getUse() { 
443          return this.use == null ? null : this.use.getValue();
444        }
445
446        /**
447         * @param value Whether this is an input or an output parameter.
448         */
449        public OperationDefinitionParameterComponent setUse(OperationParameterUse value) { 
450            if (this.use == null)
451              this.use = new Enumeration<OperationParameterUse>(new OperationParameterUseEnumFactory());
452            this.use.setValue(value);
453          return this;
454        }
455
456        /**
457         * @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
458         */
459        public IntegerType getMinElement() { 
460          if (this.min == null)
461            if (Configuration.errorOnAutoCreate())
462              throw new Error("Attempt to auto-create OperationDefinitionParameterComponent.min");
463            else if (Configuration.doAutoCreate())
464              this.min = new IntegerType(); // bb
465          return this.min;
466        }
467
468        public boolean hasMinElement() { 
469          return this.min != null && !this.min.isEmpty();
470        }
471
472        public boolean hasMin() { 
473          return this.min != null && !this.min.isEmpty();
474        }
475
476        /**
477         * @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
478         */
479        public OperationDefinitionParameterComponent setMinElement(IntegerType value) { 
480          this.min = value;
481          return this;
482        }
483
484        /**
485         * @return The minimum number of times this parameter SHALL appear in the request or response.
486         */
487        public int getMin() { 
488          return this.min == null || this.min.isEmpty() ? 0 : this.min.getValue();
489        }
490
491        /**
492         * @param value The minimum number of times this parameter SHALL appear in the request or response.
493         */
494        public OperationDefinitionParameterComponent setMin(int value) { 
495            if (this.min == null)
496              this.min = new IntegerType();
497            this.min.setValue(value);
498          return this;
499        }
500
501        /**
502         * @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
503         */
504        public StringType getMaxElement() { 
505          if (this.max == null)
506            if (Configuration.errorOnAutoCreate())
507              throw new Error("Attempt to auto-create OperationDefinitionParameterComponent.max");
508            else if (Configuration.doAutoCreate())
509              this.max = new StringType(); // bb
510          return this.max;
511        }
512
513        public boolean hasMaxElement() { 
514          return this.max != null && !this.max.isEmpty();
515        }
516
517        public boolean hasMax() { 
518          return this.max != null && !this.max.isEmpty();
519        }
520
521        /**
522         * @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
523         */
524        public OperationDefinitionParameterComponent setMaxElement(StringType value) { 
525          this.max = value;
526          return this;
527        }
528
529        /**
530         * @return The maximum number of times this element is permitted to appear in the request or response.
531         */
532        public String getMax() { 
533          return this.max == null ? null : this.max.getValue();
534        }
535
536        /**
537         * @param value The maximum number of times this element is permitted to appear in the request or response.
538         */
539        public OperationDefinitionParameterComponent setMax(String value) { 
540            if (this.max == null)
541              this.max = new StringType();
542            this.max.setValue(value);
543          return this;
544        }
545
546        /**
547         * @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
548         */
549        public StringType getDocumentationElement() { 
550          if (this.documentation == null)
551            if (Configuration.errorOnAutoCreate())
552              throw new Error("Attempt to auto-create OperationDefinitionParameterComponent.documentation");
553            else if (Configuration.doAutoCreate())
554              this.documentation = new StringType(); // bb
555          return this.documentation;
556        }
557
558        public boolean hasDocumentationElement() { 
559          return this.documentation != null && !this.documentation.isEmpty();
560        }
561
562        public boolean hasDocumentation() { 
563          return this.documentation != null && !this.documentation.isEmpty();
564        }
565
566        /**
567         * @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
568         */
569        public OperationDefinitionParameterComponent setDocumentationElement(StringType value) { 
570          this.documentation = value;
571          return this;
572        }
573
574        /**
575         * @return Describes the meaning or use of this parameter.
576         */
577        public String getDocumentation() { 
578          return this.documentation == null ? null : this.documentation.getValue();
579        }
580
581        /**
582         * @param value Describes the meaning or use of this parameter.
583         */
584        public OperationDefinitionParameterComponent setDocumentation(String value) { 
585          if (Utilities.noString(value))
586            this.documentation = null;
587          else {
588            if (this.documentation == null)
589              this.documentation = new StringType();
590            this.documentation.setValue(value);
591          }
592          return this;
593        }
594
595        /**
596         * @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
597         */
598        public CodeType getTypeElement() { 
599          if (this.type == null)
600            if (Configuration.errorOnAutoCreate())
601              throw new Error("Attempt to auto-create OperationDefinitionParameterComponent.type");
602            else if (Configuration.doAutoCreate())
603              this.type = new CodeType(); // bb
604          return this.type;
605        }
606
607        public boolean hasTypeElement() { 
608          return this.type != null && !this.type.isEmpty();
609        }
610
611        public boolean hasType() { 
612          return this.type != null && !this.type.isEmpty();
613        }
614
615        /**
616         * @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
617         */
618        public OperationDefinitionParameterComponent setTypeElement(CodeType value) { 
619          this.type = value;
620          return this;
621        }
622
623        /**
624         * @return The type for this parameter.
625         */
626        public String getType() { 
627          return this.type == null ? null : this.type.getValue();
628        }
629
630        /**
631         * @param value The type for this parameter.
632         */
633        public OperationDefinitionParameterComponent setType(String value) { 
634          if (Utilities.noString(value))
635            this.type = null;
636          else {
637            if (this.type == null)
638              this.type = new CodeType();
639            this.type.setValue(value);
640          }
641          return this;
642        }
643
644        /**
645         * @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.)
646         */
647        public List<CanonicalType> getTargetProfile() { 
648          if (this.targetProfile == null)
649            this.targetProfile = new ArrayList<CanonicalType>();
650          return this.targetProfile;
651        }
652
653        /**
654         * @return Returns a reference to <code>this</code> for easy method chaining
655         */
656        public OperationDefinitionParameterComponent setTargetProfile(List<CanonicalType> theTargetProfile) { 
657          this.targetProfile = theTargetProfile;
658          return this;
659        }
660
661        public boolean hasTargetProfile() { 
662          if (this.targetProfile == null)
663            return false;
664          for (CanonicalType item : this.targetProfile)
665            if (!item.isEmpty())
666              return true;
667          return false;
668        }
669
670        /**
671         * @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.)
672         */
673        public CanonicalType addTargetProfileElement() {//2 
674          CanonicalType t = new CanonicalType();
675          if (this.targetProfile == null)
676            this.targetProfile = new ArrayList<CanonicalType>();
677          this.targetProfile.add(t);
678          return t;
679        }
680
681        /**
682         * @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.)
683         */
684        public OperationDefinitionParameterComponent addTargetProfile(String value) { //1
685          CanonicalType t = new CanonicalType();
686          t.setValue(value);
687          if (this.targetProfile == null)
688            this.targetProfile = new ArrayList<CanonicalType>();
689          this.targetProfile.add(t);
690          return this;
691        }
692
693        /**
694         * @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.)
695         */
696        public boolean hasTargetProfile(String value) { 
697          if (this.targetProfile == null)
698            return false;
699          for (CanonicalType v : this.targetProfile)
700            if (v.getValue().equals(value)) // canonical(StructureDefinition)
701              return true;
702          return false;
703        }
704
705        /**
706         * @return {@link #searchType} (How the parameter is understood as a search parameter. This is only used if the parameter type is 'string'.). This is the underlying object with id, value and extensions. The accessor "getSearchType" gives direct access to the value
707         */
708        public Enumeration<SearchParamType> getSearchTypeElement() { 
709          if (this.searchType == null)
710            if (Configuration.errorOnAutoCreate())
711              throw new Error("Attempt to auto-create OperationDefinitionParameterComponent.searchType");
712            else if (Configuration.doAutoCreate())
713              this.searchType = new Enumeration<SearchParamType>(new SearchParamTypeEnumFactory()); // bb
714          return this.searchType;
715        }
716
717        public boolean hasSearchTypeElement() { 
718          return this.searchType != null && !this.searchType.isEmpty();
719        }
720
721        public boolean hasSearchType() { 
722          return this.searchType != null && !this.searchType.isEmpty();
723        }
724
725        /**
726         * @param value {@link #searchType} (How the parameter is understood as a search parameter. This is only used if the parameter type is 'string'.). This is the underlying object with id, value and extensions. The accessor "getSearchType" gives direct access to the value
727         */
728        public OperationDefinitionParameterComponent setSearchTypeElement(Enumeration<SearchParamType> value) { 
729          this.searchType = value;
730          return this;
731        }
732
733        /**
734         * @return How the parameter is understood as a search parameter. This is only used if the parameter type is 'string'.
735         */
736        public SearchParamType getSearchType() { 
737          return this.searchType == null ? null : this.searchType.getValue();
738        }
739
740        /**
741         * @param value How the parameter is understood as a search parameter. This is only used if the parameter type is 'string'.
742         */
743        public OperationDefinitionParameterComponent setSearchType(SearchParamType value) { 
744          if (value == null)
745            this.searchType = null;
746          else {
747            if (this.searchType == null)
748              this.searchType = new Enumeration<SearchParamType>(new SearchParamTypeEnumFactory());
749            this.searchType.setValue(value);
750          }
751          return this;
752        }
753
754        /**
755         * @return {@link #binding} (Binds to a value set if this parameter is coded (code, Coding, CodeableConcept).)
756         */
757        public OperationDefinitionParameterBindingComponent getBinding() { 
758          if (this.binding == null)
759            if (Configuration.errorOnAutoCreate())
760              throw new Error("Attempt to auto-create OperationDefinitionParameterComponent.binding");
761            else if (Configuration.doAutoCreate())
762              this.binding = new OperationDefinitionParameterBindingComponent(); // cc
763          return this.binding;
764        }
765
766        public boolean hasBinding() { 
767          return this.binding != null && !this.binding.isEmpty();
768        }
769
770        /**
771         * @param value {@link #binding} (Binds to a value set if this parameter is coded (code, Coding, CodeableConcept).)
772         */
773        public OperationDefinitionParameterComponent setBinding(OperationDefinitionParameterBindingComponent value) { 
774          this.binding = value;
775          return this;
776        }
777
778        /**
779         * @return {@link #referencedFrom} (Identifies other resource parameters within the operation invocation that are expected to resolve to this resource.)
780         */
781        public List<OperationDefinitionParameterReferencedFromComponent> getReferencedFrom() { 
782          if (this.referencedFrom == null)
783            this.referencedFrom = new ArrayList<OperationDefinitionParameterReferencedFromComponent>();
784          return this.referencedFrom;
785        }
786
787        /**
788         * @return Returns a reference to <code>this</code> for easy method chaining
789         */
790        public OperationDefinitionParameterComponent setReferencedFrom(List<OperationDefinitionParameterReferencedFromComponent> theReferencedFrom) { 
791          this.referencedFrom = theReferencedFrom;
792          return this;
793        }
794
795        public boolean hasReferencedFrom() { 
796          if (this.referencedFrom == null)
797            return false;
798          for (OperationDefinitionParameterReferencedFromComponent item : this.referencedFrom)
799            if (!item.isEmpty())
800              return true;
801          return false;
802        }
803
804        public OperationDefinitionParameterReferencedFromComponent addReferencedFrom() { //3
805          OperationDefinitionParameterReferencedFromComponent t = new OperationDefinitionParameterReferencedFromComponent();
806          if (this.referencedFrom == null)
807            this.referencedFrom = new ArrayList<OperationDefinitionParameterReferencedFromComponent>();
808          this.referencedFrom.add(t);
809          return t;
810        }
811
812        public OperationDefinitionParameterComponent addReferencedFrom(OperationDefinitionParameterReferencedFromComponent t) { //3
813          if (t == null)
814            return this;
815          if (this.referencedFrom == null)
816            this.referencedFrom = new ArrayList<OperationDefinitionParameterReferencedFromComponent>();
817          this.referencedFrom.add(t);
818          return this;
819        }
820
821        /**
822         * @return The first repetition of repeating field {@link #referencedFrom}, creating it if it does not already exist
823         */
824        public OperationDefinitionParameterReferencedFromComponent getReferencedFromFirstRep() { 
825          if (getReferencedFrom().isEmpty()) {
826            addReferencedFrom();
827          }
828          return getReferencedFrom().get(0);
829        }
830
831        /**
832         * @return {@link #part} (The parts of a nested Parameter.)
833         */
834        public List<OperationDefinitionParameterComponent> getPart() { 
835          if (this.part == null)
836            this.part = new ArrayList<OperationDefinitionParameterComponent>();
837          return this.part;
838        }
839
840        /**
841         * @return Returns a reference to <code>this</code> for easy method chaining
842         */
843        public OperationDefinitionParameterComponent setPart(List<OperationDefinitionParameterComponent> thePart) { 
844          this.part = thePart;
845          return this;
846        }
847
848        public boolean hasPart() { 
849          if (this.part == null)
850            return false;
851          for (OperationDefinitionParameterComponent item : this.part)
852            if (!item.isEmpty())
853              return true;
854          return false;
855        }
856
857        public OperationDefinitionParameterComponent addPart() { //3
858          OperationDefinitionParameterComponent t = new OperationDefinitionParameterComponent();
859          if (this.part == null)
860            this.part = new ArrayList<OperationDefinitionParameterComponent>();
861          this.part.add(t);
862          return t;
863        }
864
865        public OperationDefinitionParameterComponent addPart(OperationDefinitionParameterComponent t) { //3
866          if (t == null)
867            return this;
868          if (this.part == null)
869            this.part = new ArrayList<OperationDefinitionParameterComponent>();
870          this.part.add(t);
871          return this;
872        }
873
874        /**
875         * @return The first repetition of repeating field {@link #part}, creating it if it does not already exist
876         */
877        public OperationDefinitionParameterComponent getPartFirstRep() { 
878          if (getPart().isEmpty()) {
879            addPart();
880          }
881          return getPart().get(0);
882        }
883
884        protected void listChildren(List<Property> children) {
885          super.listChildren(children);
886          children.add(new Property("name", "code", "The name of used to identify the parameter.", 0, 1, name));
887          children.add(new Property("use", "code", "Whether this is an input or an output parameter.", 0, 1, use));
888          children.add(new Property("min", "integer", "The minimum number of times this parameter SHALL appear in the request or response.", 0, 1, min));
889          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));
890          children.add(new Property("documentation", "string", "Describes the meaning or use of this parameter.", 0, 1, documentation));
891          children.add(new Property("type", "code", "The type for this parameter.", 0, 1, type));
892          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));
893          children.add(new Property("searchType", "code", "How the parameter is understood as a search parameter. This is only used if the parameter type is 'string'.", 0, 1, searchType));
894          children.add(new Property("binding", "", "Binds to a value set if this parameter is coded (code, Coding, CodeableConcept).", 0, 1, binding));
895          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));
896          children.add(new Property("part", "@OperationDefinition.parameter", "The parts of a nested Parameter.", 0, java.lang.Integer.MAX_VALUE, part));
897        }
898
899        @Override
900        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
901          switch (_hash) {
902          case 3373707: /*name*/  return new Property("name", "code", "The name of used to identify the parameter.", 0, 1, name);
903          case 116103: /*use*/  return new Property("use", "code", "Whether this is an input or an output parameter.", 0, 1, use);
904          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);
905          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);
906          case 1587405498: /*documentation*/  return new Property("documentation", "string", "Describes the meaning or use of this parameter.", 0, 1, documentation);
907          case 3575610: /*type*/  return new Property("type", "code", "The type for this parameter.", 0, 1, type);
908          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);
909          case -710454014: /*searchType*/  return new Property("searchType", "code", "How the parameter is understood as a search parameter. This is only used if the parameter type is 'string'.", 0, 1, searchType);
910          case -108220795: /*binding*/  return new Property("binding", "", "Binds to a value set if this parameter is coded (code, Coding, CodeableConcept).", 0, 1, binding);
911          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);
912          case 3433459: /*part*/  return new Property("part", "@OperationDefinition.parameter", "The parts of a nested Parameter.", 0, java.lang.Integer.MAX_VALUE, part);
913          default: return super.getNamedProperty(_hash, _name, _checkValid);
914          }
915
916        }
917
918      @Override
919      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
920        switch (hash) {
921        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // CodeType
922        case 116103: /*use*/ return this.use == null ? new Base[0] : new Base[] {this.use}; // Enumeration<OperationParameterUse>
923        case 108114: /*min*/ return this.min == null ? new Base[0] : new Base[] {this.min}; // IntegerType
924        case 107876: /*max*/ return this.max == null ? new Base[0] : new Base[] {this.max}; // StringType
925        case 1587405498: /*documentation*/ return this.documentation == null ? new Base[0] : new Base[] {this.documentation}; // StringType
926        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeType
927        case 1994521304: /*targetProfile*/ return this.targetProfile == null ? new Base[0] : this.targetProfile.toArray(new Base[this.targetProfile.size()]); // CanonicalType
928        case -710454014: /*searchType*/ return this.searchType == null ? new Base[0] : new Base[] {this.searchType}; // Enumeration<SearchParamType>
929        case -108220795: /*binding*/ return this.binding == null ? new Base[0] : new Base[] {this.binding}; // OperationDefinitionParameterBindingComponent
930        case -1896721981: /*referencedFrom*/ return this.referencedFrom == null ? new Base[0] : this.referencedFrom.toArray(new Base[this.referencedFrom.size()]); // OperationDefinitionParameterReferencedFromComponent
931        case 3433459: /*part*/ return this.part == null ? new Base[0] : this.part.toArray(new Base[this.part.size()]); // OperationDefinitionParameterComponent
932        default: return super.getProperty(hash, name, checkValid);
933        }
934
935      }
936
937      @Override
938      public Base setProperty(int hash, String name, Base value) throws FHIRException {
939        switch (hash) {
940        case 3373707: // name
941          this.name = castToCode(value); // CodeType
942          return value;
943        case 116103: // use
944          value = new OperationParameterUseEnumFactory().fromType(castToCode(value));
945          this.use = (Enumeration) value; // Enumeration<OperationParameterUse>
946          return value;
947        case 108114: // min
948          this.min = castToInteger(value); // IntegerType
949          return value;
950        case 107876: // max
951          this.max = castToString(value); // StringType
952          return value;
953        case 1587405498: // documentation
954          this.documentation = castToString(value); // StringType
955          return value;
956        case 3575610: // type
957          this.type = castToCode(value); // CodeType
958          return value;
959        case 1994521304: // targetProfile
960          this.getTargetProfile().add(castToCanonical(value)); // CanonicalType
961          return value;
962        case -710454014: // searchType
963          value = new SearchParamTypeEnumFactory().fromType(castToCode(value));
964          this.searchType = (Enumeration) value; // Enumeration<SearchParamType>
965          return value;
966        case -108220795: // binding
967          this.binding = (OperationDefinitionParameterBindingComponent) value; // OperationDefinitionParameterBindingComponent
968          return value;
969        case -1896721981: // referencedFrom
970          this.getReferencedFrom().add((OperationDefinitionParameterReferencedFromComponent) value); // OperationDefinitionParameterReferencedFromComponent
971          return value;
972        case 3433459: // part
973          this.getPart().add((OperationDefinitionParameterComponent) value); // OperationDefinitionParameterComponent
974          return value;
975        default: return super.setProperty(hash, name, value);
976        }
977
978      }
979
980      @Override
981      public Base setProperty(String name, Base value) throws FHIRException {
982        if (name.equals("name")) {
983          this.name = castToCode(value); // CodeType
984        } else if (name.equals("use")) {
985          value = new OperationParameterUseEnumFactory().fromType(castToCode(value));
986          this.use = (Enumeration) value; // Enumeration<OperationParameterUse>
987        } else if (name.equals("min")) {
988          this.min = castToInteger(value); // IntegerType
989        } else if (name.equals("max")) {
990          this.max = castToString(value); // StringType
991        } else if (name.equals("documentation")) {
992          this.documentation = castToString(value); // StringType
993        } else if (name.equals("type")) {
994          this.type = castToCode(value); // CodeType
995        } else if (name.equals("targetProfile")) {
996          this.getTargetProfile().add(castToCanonical(value));
997        } else if (name.equals("searchType")) {
998          value = new SearchParamTypeEnumFactory().fromType(castToCode(value));
999          this.searchType = (Enumeration) value; // Enumeration<SearchParamType>
1000        } else if (name.equals("binding")) {
1001          this.binding = (OperationDefinitionParameterBindingComponent) value; // OperationDefinitionParameterBindingComponent
1002        } else if (name.equals("referencedFrom")) {
1003          this.getReferencedFrom().add((OperationDefinitionParameterReferencedFromComponent) value);
1004        } else if (name.equals("part")) {
1005          this.getPart().add((OperationDefinitionParameterComponent) value);
1006        } else
1007          return super.setProperty(name, value);
1008        return value;
1009      }
1010
1011      @Override
1012      public Base makeProperty(int hash, String name) throws FHIRException {
1013        switch (hash) {
1014        case 3373707:  return getNameElement();
1015        case 116103:  return getUseElement();
1016        case 108114:  return getMinElement();
1017        case 107876:  return getMaxElement();
1018        case 1587405498:  return getDocumentationElement();
1019        case 3575610:  return getTypeElement();
1020        case 1994521304:  return addTargetProfileElement();
1021        case -710454014:  return getSearchTypeElement();
1022        case -108220795:  return getBinding(); 
1023        case -1896721981:  return addReferencedFrom(); 
1024        case 3433459:  return addPart(); 
1025        default: return super.makeProperty(hash, name);
1026        }
1027
1028      }
1029
1030      @Override
1031      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1032        switch (hash) {
1033        case 3373707: /*name*/ return new String[] {"code"};
1034        case 116103: /*use*/ return new String[] {"code"};
1035        case 108114: /*min*/ return new String[] {"integer"};
1036        case 107876: /*max*/ return new String[] {"string"};
1037        case 1587405498: /*documentation*/ return new String[] {"string"};
1038        case 3575610: /*type*/ return new String[] {"code"};
1039        case 1994521304: /*targetProfile*/ return new String[] {"canonical"};
1040        case -710454014: /*searchType*/ return new String[] {"code"};
1041        case -108220795: /*binding*/ return new String[] {};
1042        case -1896721981: /*referencedFrom*/ return new String[] {};
1043        case 3433459: /*part*/ return new String[] {"@OperationDefinition.parameter"};
1044        default: return super.getTypesForProperty(hash, name);
1045        }
1046
1047      }
1048
1049      @Override
1050      public Base addChild(String name) throws FHIRException {
1051        if (name.equals("name")) {
1052          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.name");
1053        }
1054        else if (name.equals("use")) {
1055          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.use");
1056        }
1057        else if (name.equals("min")) {
1058          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.min");
1059        }
1060        else if (name.equals("max")) {
1061          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.max");
1062        }
1063        else if (name.equals("documentation")) {
1064          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.documentation");
1065        }
1066        else if (name.equals("type")) {
1067          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.type");
1068        }
1069        else if (name.equals("targetProfile")) {
1070          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.targetProfile");
1071        }
1072        else if (name.equals("searchType")) {
1073          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.searchType");
1074        }
1075        else if (name.equals("binding")) {
1076          this.binding = new OperationDefinitionParameterBindingComponent();
1077          return this.binding;
1078        }
1079        else if (name.equals("referencedFrom")) {
1080          return addReferencedFrom();
1081        }
1082        else if (name.equals("part")) {
1083          return addPart();
1084        }
1085        else
1086          return super.addChild(name);
1087      }
1088
1089      public OperationDefinitionParameterComponent copy() {
1090        OperationDefinitionParameterComponent dst = new OperationDefinitionParameterComponent();
1091        copyValues(dst);
1092        dst.name = name == null ? null : name.copy();
1093        dst.use = use == null ? null : use.copy();
1094        dst.min = min == null ? null : min.copy();
1095        dst.max = max == null ? null : max.copy();
1096        dst.documentation = documentation == null ? null : documentation.copy();
1097        dst.type = type == null ? null : type.copy();
1098        if (targetProfile != null) {
1099          dst.targetProfile = new ArrayList<CanonicalType>();
1100          for (CanonicalType i : targetProfile)
1101            dst.targetProfile.add(i.copy());
1102        };
1103        dst.searchType = searchType == null ? null : searchType.copy();
1104        dst.binding = binding == null ? null : binding.copy();
1105        if (referencedFrom != null) {
1106          dst.referencedFrom = new ArrayList<OperationDefinitionParameterReferencedFromComponent>();
1107          for (OperationDefinitionParameterReferencedFromComponent i : referencedFrom)
1108            dst.referencedFrom.add(i.copy());
1109        };
1110        if (part != null) {
1111          dst.part = new ArrayList<OperationDefinitionParameterComponent>();
1112          for (OperationDefinitionParameterComponent i : part)
1113            dst.part.add(i.copy());
1114        };
1115        return dst;
1116      }
1117
1118      @Override
1119      public boolean equalsDeep(Base other_) {
1120        if (!super.equalsDeep(other_))
1121          return false;
1122        if (!(other_ instanceof OperationDefinitionParameterComponent))
1123          return false;
1124        OperationDefinitionParameterComponent o = (OperationDefinitionParameterComponent) other_;
1125        return compareDeep(name, o.name, true) && compareDeep(use, o.use, true) && compareDeep(min, o.min, true)
1126           && compareDeep(max, o.max, true) && compareDeep(documentation, o.documentation, true) && compareDeep(type, o.type, true)
1127           && compareDeep(targetProfile, o.targetProfile, true) && compareDeep(searchType, o.searchType, true)
1128           && compareDeep(binding, o.binding, true) && compareDeep(referencedFrom, o.referencedFrom, true)
1129           && compareDeep(part, o.part, true);
1130      }
1131
1132      @Override
1133      public boolean equalsShallow(Base other_) {
1134        if (!super.equalsShallow(other_))
1135          return false;
1136        if (!(other_ instanceof OperationDefinitionParameterComponent))
1137          return false;
1138        OperationDefinitionParameterComponent o = (OperationDefinitionParameterComponent) other_;
1139        return compareValues(name, o.name, true) && compareValues(use, o.use, true) && compareValues(min, o.min, true)
1140           && compareValues(max, o.max, true) && compareValues(documentation, o.documentation, true) && compareValues(type, o.type, true)
1141           && compareValues(searchType, o.searchType, true);
1142      }
1143
1144      public boolean isEmpty() {
1145        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(name, use, min, max, documentation
1146          , type, targetProfile, searchType, binding, referencedFrom, part);
1147      }
1148
1149  public String fhirType() {
1150    return "OperationDefinition.parameter";
1151
1152  }
1153
1154  }
1155
1156    @Block()
1157    public static class OperationDefinitionParameterBindingComponent extends BackboneElement implements IBaseBackboneElement {
1158        /**
1159         * 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.
1160         */
1161        @Child(name = "strength", type = {CodeType.class}, order=1, min=1, max=1, modifier=false, summary=false)
1162        @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." )
1163        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/binding-strength")
1164        protected Enumeration<BindingStrength> strength;
1165
1166        /**
1167         * Points to the value set or external definition (e.g. implicit value set) that identifies the set of codes to be used.
1168         */
1169        @Child(name = "valueSet", type = {CanonicalType.class}, order=2, min=1, max=1, modifier=false, summary=false)
1170        @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." )
1171        protected CanonicalType valueSet;
1172
1173        private static final long serialVersionUID = -2048653907L;
1174
1175    /**
1176     * Constructor
1177     */
1178      public OperationDefinitionParameterBindingComponent() {
1179        super();
1180      }
1181
1182    /**
1183     * Constructor
1184     */
1185      public OperationDefinitionParameterBindingComponent(Enumeration<BindingStrength> strength, CanonicalType valueSet) {
1186        super();
1187        this.strength = strength;
1188        this.valueSet = valueSet;
1189      }
1190
1191        /**
1192         * @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
1193         */
1194        public Enumeration<BindingStrength> getStrengthElement() { 
1195          if (this.strength == null)
1196            if (Configuration.errorOnAutoCreate())
1197              throw new Error("Attempt to auto-create OperationDefinitionParameterBindingComponent.strength");
1198            else if (Configuration.doAutoCreate())
1199              this.strength = new Enumeration<BindingStrength>(new BindingStrengthEnumFactory()); // bb
1200          return this.strength;
1201        }
1202
1203        public boolean hasStrengthElement() { 
1204          return this.strength != null && !this.strength.isEmpty();
1205        }
1206
1207        public boolean hasStrength() { 
1208          return this.strength != null && !this.strength.isEmpty();
1209        }
1210
1211        /**
1212         * @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
1213         */
1214        public OperationDefinitionParameterBindingComponent setStrengthElement(Enumeration<BindingStrength> value) { 
1215          this.strength = value;
1216          return this;
1217        }
1218
1219        /**
1220         * @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.
1221         */
1222        public BindingStrength getStrength() { 
1223          return this.strength == null ? null : this.strength.getValue();
1224        }
1225
1226        /**
1227         * @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.
1228         */
1229        public OperationDefinitionParameterBindingComponent setStrength(BindingStrength value) { 
1230            if (this.strength == null)
1231              this.strength = new Enumeration<BindingStrength>(new BindingStrengthEnumFactory());
1232            this.strength.setValue(value);
1233          return this;
1234        }
1235
1236        /**
1237         * @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
1238         */
1239        public CanonicalType getValueSetElement() { 
1240          if (this.valueSet == null)
1241            if (Configuration.errorOnAutoCreate())
1242              throw new Error("Attempt to auto-create OperationDefinitionParameterBindingComponent.valueSet");
1243            else if (Configuration.doAutoCreate())
1244              this.valueSet = new CanonicalType(); // bb
1245          return this.valueSet;
1246        }
1247
1248        public boolean hasValueSetElement() { 
1249          return this.valueSet != null && !this.valueSet.isEmpty();
1250        }
1251
1252        public boolean hasValueSet() { 
1253          return this.valueSet != null && !this.valueSet.isEmpty();
1254        }
1255
1256        /**
1257         * @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
1258         */
1259        public OperationDefinitionParameterBindingComponent setValueSetElement(CanonicalType value) { 
1260          this.valueSet = value;
1261          return this;
1262        }
1263
1264        /**
1265         * @return Points to the value set or external definition (e.g. implicit value set) that identifies the set of codes to be used.
1266         */
1267        public String getValueSet() { 
1268          return this.valueSet == null ? null : this.valueSet.getValue();
1269        }
1270
1271        /**
1272         * @param value Points to the value set or external definition (e.g. implicit value set) that identifies the set of codes to be used.
1273         */
1274        public OperationDefinitionParameterBindingComponent setValueSet(String value) { 
1275            if (this.valueSet == null)
1276              this.valueSet = new CanonicalType();
1277            this.valueSet.setValue(value);
1278          return this;
1279        }
1280
1281        protected void listChildren(List<Property> children) {
1282          super.listChildren(children);
1283          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));
1284          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));
1285        }
1286
1287        @Override
1288        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1289          switch (_hash) {
1290          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);
1291          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);
1292          default: return super.getNamedProperty(_hash, _name, _checkValid);
1293          }
1294
1295        }
1296
1297      @Override
1298      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1299        switch (hash) {
1300        case 1791316033: /*strength*/ return this.strength == null ? new Base[0] : new Base[] {this.strength}; // Enumeration<BindingStrength>
1301        case -1410174671: /*valueSet*/ return this.valueSet == null ? new Base[0] : new Base[] {this.valueSet}; // CanonicalType
1302        default: return super.getProperty(hash, name, checkValid);
1303        }
1304
1305      }
1306
1307      @Override
1308      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1309        switch (hash) {
1310        case 1791316033: // strength
1311          value = new BindingStrengthEnumFactory().fromType(castToCode(value));
1312          this.strength = (Enumeration) value; // Enumeration<BindingStrength>
1313          return value;
1314        case -1410174671: // valueSet
1315          this.valueSet = castToCanonical(value); // CanonicalType
1316          return value;
1317        default: return super.setProperty(hash, name, value);
1318        }
1319
1320      }
1321
1322      @Override
1323      public Base setProperty(String name, Base value) throws FHIRException {
1324        if (name.equals("strength")) {
1325          value = new BindingStrengthEnumFactory().fromType(castToCode(value));
1326          this.strength = (Enumeration) value; // Enumeration<BindingStrength>
1327        } else if (name.equals("valueSet")) {
1328          this.valueSet = castToCanonical(value); // CanonicalType
1329        } else
1330          return super.setProperty(name, value);
1331        return value;
1332      }
1333
1334      @Override
1335      public Base makeProperty(int hash, String name) throws FHIRException {
1336        switch (hash) {
1337        case 1791316033:  return getStrengthElement();
1338        case -1410174671:  return getValueSetElement();
1339        default: return super.makeProperty(hash, name);
1340        }
1341
1342      }
1343
1344      @Override
1345      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1346        switch (hash) {
1347        case 1791316033: /*strength*/ return new String[] {"code"};
1348        case -1410174671: /*valueSet*/ return new String[] {"canonical"};
1349        default: return super.getTypesForProperty(hash, name);
1350        }
1351
1352      }
1353
1354      @Override
1355      public Base addChild(String name) throws FHIRException {
1356        if (name.equals("strength")) {
1357          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.strength");
1358        }
1359        else if (name.equals("valueSet")) {
1360          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.valueSet");
1361        }
1362        else
1363          return super.addChild(name);
1364      }
1365
1366      public OperationDefinitionParameterBindingComponent copy() {
1367        OperationDefinitionParameterBindingComponent dst = new OperationDefinitionParameterBindingComponent();
1368        copyValues(dst);
1369        dst.strength = strength == null ? null : strength.copy();
1370        dst.valueSet = valueSet == null ? null : valueSet.copy();
1371        return dst;
1372      }
1373
1374      @Override
1375      public boolean equalsDeep(Base other_) {
1376        if (!super.equalsDeep(other_))
1377          return false;
1378        if (!(other_ instanceof OperationDefinitionParameterBindingComponent))
1379          return false;
1380        OperationDefinitionParameterBindingComponent o = (OperationDefinitionParameterBindingComponent) other_;
1381        return compareDeep(strength, o.strength, true) && compareDeep(valueSet, o.valueSet, true);
1382      }
1383
1384      @Override
1385      public boolean equalsShallow(Base other_) {
1386        if (!super.equalsShallow(other_))
1387          return false;
1388        if (!(other_ instanceof OperationDefinitionParameterBindingComponent))
1389          return false;
1390        OperationDefinitionParameterBindingComponent o = (OperationDefinitionParameterBindingComponent) other_;
1391        return compareValues(strength, o.strength, true);
1392      }
1393
1394      public boolean isEmpty() {
1395        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(strength, valueSet);
1396      }
1397
1398  public String fhirType() {
1399    return "OperationDefinition.parameter.binding";
1400
1401  }
1402
1403  }
1404
1405    @Block()
1406    public static class OperationDefinitionParameterReferencedFromComponent extends BackboneElement implements IBaseBackboneElement {
1407        /**
1408         * 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.
1409         */
1410        @Child(name = "source", type = {StringType.class}, order=1, min=1, max=1, modifier=false, summary=false)
1411        @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." )
1412        protected StringType source;
1413
1414        /**
1415         * The id of the element in the referencing resource that is expected to resolve to this resource.
1416         */
1417        @Child(name = "sourceId", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=false)
1418        @Description(shortDefinition="Element id of reference", formalDefinition="The id of the element in the referencing resource that is expected to resolve to this resource." )
1419        protected StringType sourceId;
1420
1421        private static final long serialVersionUID = -104239783L;
1422
1423    /**
1424     * Constructor
1425     */
1426      public OperationDefinitionParameterReferencedFromComponent() {
1427        super();
1428      }
1429
1430    /**
1431     * Constructor
1432     */
1433      public OperationDefinitionParameterReferencedFromComponent(StringType source) {
1434        super();
1435        this.source = source;
1436      }
1437
1438        /**
1439         * @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
1440         */
1441        public StringType getSourceElement() { 
1442          if (this.source == null)
1443            if (Configuration.errorOnAutoCreate())
1444              throw new Error("Attempt to auto-create OperationDefinitionParameterReferencedFromComponent.source");
1445            else if (Configuration.doAutoCreate())
1446              this.source = new StringType(); // bb
1447          return this.source;
1448        }
1449
1450        public boolean hasSourceElement() { 
1451          return this.source != null && !this.source.isEmpty();
1452        }
1453
1454        public boolean hasSource() { 
1455          return this.source != null && !this.source.isEmpty();
1456        }
1457
1458        /**
1459         * @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
1460         */
1461        public OperationDefinitionParameterReferencedFromComponent setSourceElement(StringType value) { 
1462          this.source = value;
1463          return this;
1464        }
1465
1466        /**
1467         * @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.
1468         */
1469        public String getSource() { 
1470          return this.source == null ? null : this.source.getValue();
1471        }
1472
1473        /**
1474         * @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.
1475         */
1476        public OperationDefinitionParameterReferencedFromComponent setSource(String value) { 
1477            if (this.source == null)
1478              this.source = new StringType();
1479            this.source.setValue(value);
1480          return this;
1481        }
1482
1483        /**
1484         * @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
1485         */
1486        public StringType getSourceIdElement() { 
1487          if (this.sourceId == null)
1488            if (Configuration.errorOnAutoCreate())
1489              throw new Error("Attempt to auto-create OperationDefinitionParameterReferencedFromComponent.sourceId");
1490            else if (Configuration.doAutoCreate())
1491              this.sourceId = new StringType(); // bb
1492          return this.sourceId;
1493        }
1494
1495        public boolean hasSourceIdElement() { 
1496          return this.sourceId != null && !this.sourceId.isEmpty();
1497        }
1498
1499        public boolean hasSourceId() { 
1500          return this.sourceId != null && !this.sourceId.isEmpty();
1501        }
1502
1503        /**
1504         * @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
1505         */
1506        public OperationDefinitionParameterReferencedFromComponent setSourceIdElement(StringType value) { 
1507          this.sourceId = value;
1508          return this;
1509        }
1510
1511        /**
1512         * @return The id of the element in the referencing resource that is expected to resolve to this resource.
1513         */
1514        public String getSourceId() { 
1515          return this.sourceId == null ? null : this.sourceId.getValue();
1516        }
1517
1518        /**
1519         * @param value The id of the element in the referencing resource that is expected to resolve to this resource.
1520         */
1521        public OperationDefinitionParameterReferencedFromComponent setSourceId(String value) { 
1522          if (Utilities.noString(value))
1523            this.sourceId = null;
1524          else {
1525            if (this.sourceId == null)
1526              this.sourceId = new StringType();
1527            this.sourceId.setValue(value);
1528          }
1529          return this;
1530        }
1531
1532        protected void listChildren(List<Property> children) {
1533          super.listChildren(children);
1534          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));
1535          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));
1536        }
1537
1538        @Override
1539        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1540          switch (_hash) {
1541          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);
1542          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);
1543          default: return super.getNamedProperty(_hash, _name, _checkValid);
1544          }
1545
1546        }
1547
1548      @Override
1549      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1550        switch (hash) {
1551        case -896505829: /*source*/ return this.source == null ? new Base[0] : new Base[] {this.source}; // StringType
1552        case 1746327190: /*sourceId*/ return this.sourceId == null ? new Base[0] : new Base[] {this.sourceId}; // StringType
1553        default: return super.getProperty(hash, name, checkValid);
1554        }
1555
1556      }
1557
1558      @Override
1559      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1560        switch (hash) {
1561        case -896505829: // source
1562          this.source = castToString(value); // StringType
1563          return value;
1564        case 1746327190: // sourceId
1565          this.sourceId = castToString(value); // StringType
1566          return value;
1567        default: return super.setProperty(hash, name, value);
1568        }
1569
1570      }
1571
1572      @Override
1573      public Base setProperty(String name, Base value) throws FHIRException {
1574        if (name.equals("source")) {
1575          this.source = castToString(value); // StringType
1576        } else if (name.equals("sourceId")) {
1577          this.sourceId = castToString(value); // StringType
1578        } else
1579          return super.setProperty(name, value);
1580        return value;
1581      }
1582
1583      @Override
1584      public Base makeProperty(int hash, String name) throws FHIRException {
1585        switch (hash) {
1586        case -896505829:  return getSourceElement();
1587        case 1746327190:  return getSourceIdElement();
1588        default: return super.makeProperty(hash, name);
1589        }
1590
1591      }
1592
1593      @Override
1594      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1595        switch (hash) {
1596        case -896505829: /*source*/ return new String[] {"string"};
1597        case 1746327190: /*sourceId*/ return new String[] {"string"};
1598        default: return super.getTypesForProperty(hash, name);
1599        }
1600
1601      }
1602
1603      @Override
1604      public Base addChild(String name) throws FHIRException {
1605        if (name.equals("source")) {
1606          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.source");
1607        }
1608        else if (name.equals("sourceId")) {
1609          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.sourceId");
1610        }
1611        else
1612          return super.addChild(name);
1613      }
1614
1615      public OperationDefinitionParameterReferencedFromComponent copy() {
1616        OperationDefinitionParameterReferencedFromComponent dst = new OperationDefinitionParameterReferencedFromComponent();
1617        copyValues(dst);
1618        dst.source = source == null ? null : source.copy();
1619        dst.sourceId = sourceId == null ? null : sourceId.copy();
1620        return dst;
1621      }
1622
1623      @Override
1624      public boolean equalsDeep(Base other_) {
1625        if (!super.equalsDeep(other_))
1626          return false;
1627        if (!(other_ instanceof OperationDefinitionParameterReferencedFromComponent))
1628          return false;
1629        OperationDefinitionParameterReferencedFromComponent o = (OperationDefinitionParameterReferencedFromComponent) other_;
1630        return compareDeep(source, o.source, true) && compareDeep(sourceId, o.sourceId, true);
1631      }
1632
1633      @Override
1634      public boolean equalsShallow(Base other_) {
1635        if (!super.equalsShallow(other_))
1636          return false;
1637        if (!(other_ instanceof OperationDefinitionParameterReferencedFromComponent))
1638          return false;
1639        OperationDefinitionParameterReferencedFromComponent o = (OperationDefinitionParameterReferencedFromComponent) other_;
1640        return compareValues(source, o.source, true) && compareValues(sourceId, o.sourceId, true);
1641      }
1642
1643      public boolean isEmpty() {
1644        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(source, sourceId);
1645      }
1646
1647  public String fhirType() {
1648    return "OperationDefinition.parameter.referencedFrom";
1649
1650  }
1651
1652  }
1653
1654    @Block()
1655    public static class OperationDefinitionOverloadComponent extends BackboneElement implements IBaseBackboneElement {
1656        /**
1657         * Name of parameter to include in overload.
1658         */
1659        @Child(name = "parameterName", type = {StringType.class}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1660        @Description(shortDefinition="Name of parameter to include in overload", formalDefinition="Name of parameter to include in overload." )
1661        protected List<StringType> parameterName;
1662
1663        /**
1664         * Comments to go on overload.
1665         */
1666        @Child(name = "comment", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=false)
1667        @Description(shortDefinition="Comments to go on overload", formalDefinition="Comments to go on overload." )
1668        protected StringType comment;
1669
1670        private static final long serialVersionUID = -907948545L;
1671
1672    /**
1673     * Constructor
1674     */
1675      public OperationDefinitionOverloadComponent() {
1676        super();
1677      }
1678
1679        /**
1680         * @return {@link #parameterName} (Name of parameter to include in overload.)
1681         */
1682        public List<StringType> getParameterName() { 
1683          if (this.parameterName == null)
1684            this.parameterName = new ArrayList<StringType>();
1685          return this.parameterName;
1686        }
1687
1688        /**
1689         * @return Returns a reference to <code>this</code> for easy method chaining
1690         */
1691        public OperationDefinitionOverloadComponent setParameterName(List<StringType> theParameterName) { 
1692          this.parameterName = theParameterName;
1693          return this;
1694        }
1695
1696        public boolean hasParameterName() { 
1697          if (this.parameterName == null)
1698            return false;
1699          for (StringType item : this.parameterName)
1700            if (!item.isEmpty())
1701              return true;
1702          return false;
1703        }
1704
1705        /**
1706         * @return {@link #parameterName} (Name of parameter to include in overload.)
1707         */
1708        public StringType addParameterNameElement() {//2 
1709          StringType t = new StringType();
1710          if (this.parameterName == null)
1711            this.parameterName = new ArrayList<StringType>();
1712          this.parameterName.add(t);
1713          return t;
1714        }
1715
1716        /**
1717         * @param value {@link #parameterName} (Name of parameter to include in overload.)
1718         */
1719        public OperationDefinitionOverloadComponent addParameterName(String value) { //1
1720          StringType t = new StringType();
1721          t.setValue(value);
1722          if (this.parameterName == null)
1723            this.parameterName = new ArrayList<StringType>();
1724          this.parameterName.add(t);
1725          return this;
1726        }
1727
1728        /**
1729         * @param value {@link #parameterName} (Name of parameter to include in overload.)
1730         */
1731        public boolean hasParameterName(String value) { 
1732          if (this.parameterName == null)
1733            return false;
1734          for (StringType v : this.parameterName)
1735            if (v.getValue().equals(value)) // string
1736              return true;
1737          return false;
1738        }
1739
1740        /**
1741         * @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
1742         */
1743        public StringType getCommentElement() { 
1744          if (this.comment == null)
1745            if (Configuration.errorOnAutoCreate())
1746              throw new Error("Attempt to auto-create OperationDefinitionOverloadComponent.comment");
1747            else if (Configuration.doAutoCreate())
1748              this.comment = new StringType(); // bb
1749          return this.comment;
1750        }
1751
1752        public boolean hasCommentElement() { 
1753          return this.comment != null && !this.comment.isEmpty();
1754        }
1755
1756        public boolean hasComment() { 
1757          return this.comment != null && !this.comment.isEmpty();
1758        }
1759
1760        /**
1761         * @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
1762         */
1763        public OperationDefinitionOverloadComponent setCommentElement(StringType value) { 
1764          this.comment = value;
1765          return this;
1766        }
1767
1768        /**
1769         * @return Comments to go on overload.
1770         */
1771        public String getComment() { 
1772          return this.comment == null ? null : this.comment.getValue();
1773        }
1774
1775        /**
1776         * @param value Comments to go on overload.
1777         */
1778        public OperationDefinitionOverloadComponent setComment(String value) { 
1779          if (Utilities.noString(value))
1780            this.comment = null;
1781          else {
1782            if (this.comment == null)
1783              this.comment = new StringType();
1784            this.comment.setValue(value);
1785          }
1786          return this;
1787        }
1788
1789        protected void listChildren(List<Property> children) {
1790          super.listChildren(children);
1791          children.add(new Property("parameterName", "string", "Name of parameter to include in overload.", 0, java.lang.Integer.MAX_VALUE, parameterName));
1792          children.add(new Property("comment", "string", "Comments to go on overload.", 0, 1, comment));
1793        }
1794
1795        @Override
1796        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1797          switch (_hash) {
1798          case -379607596: /*parameterName*/  return new Property("parameterName", "string", "Name of parameter to include in overload.", 0, java.lang.Integer.MAX_VALUE, parameterName);
1799          case 950398559: /*comment*/  return new Property("comment", "string", "Comments to go on overload.", 0, 1, comment);
1800          default: return super.getNamedProperty(_hash, _name, _checkValid);
1801          }
1802
1803        }
1804
1805      @Override
1806      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1807        switch (hash) {
1808        case -379607596: /*parameterName*/ return this.parameterName == null ? new Base[0] : this.parameterName.toArray(new Base[this.parameterName.size()]); // StringType
1809        case 950398559: /*comment*/ return this.comment == null ? new Base[0] : new Base[] {this.comment}; // StringType
1810        default: return super.getProperty(hash, name, checkValid);
1811        }
1812
1813      }
1814
1815      @Override
1816      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1817        switch (hash) {
1818        case -379607596: // parameterName
1819          this.getParameterName().add(castToString(value)); // StringType
1820          return value;
1821        case 950398559: // comment
1822          this.comment = castToString(value); // StringType
1823          return value;
1824        default: return super.setProperty(hash, name, value);
1825        }
1826
1827      }
1828
1829      @Override
1830      public Base setProperty(String name, Base value) throws FHIRException {
1831        if (name.equals("parameterName")) {
1832          this.getParameterName().add(castToString(value));
1833        } else if (name.equals("comment")) {
1834          this.comment = castToString(value); // StringType
1835        } else
1836          return super.setProperty(name, value);
1837        return value;
1838      }
1839
1840      @Override
1841      public Base makeProperty(int hash, String name) throws FHIRException {
1842        switch (hash) {
1843        case -379607596:  return addParameterNameElement();
1844        case 950398559:  return getCommentElement();
1845        default: return super.makeProperty(hash, name);
1846        }
1847
1848      }
1849
1850      @Override
1851      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1852        switch (hash) {
1853        case -379607596: /*parameterName*/ return new String[] {"string"};
1854        case 950398559: /*comment*/ return new String[] {"string"};
1855        default: return super.getTypesForProperty(hash, name);
1856        }
1857
1858      }
1859
1860      @Override
1861      public Base addChild(String name) throws FHIRException {
1862        if (name.equals("parameterName")) {
1863          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.parameterName");
1864        }
1865        else if (name.equals("comment")) {
1866          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.comment");
1867        }
1868        else
1869          return super.addChild(name);
1870      }
1871
1872      public OperationDefinitionOverloadComponent copy() {
1873        OperationDefinitionOverloadComponent dst = new OperationDefinitionOverloadComponent();
1874        copyValues(dst);
1875        if (parameterName != null) {
1876          dst.parameterName = new ArrayList<StringType>();
1877          for (StringType i : parameterName)
1878            dst.parameterName.add(i.copy());
1879        };
1880        dst.comment = comment == null ? null : comment.copy();
1881        return dst;
1882      }
1883
1884      @Override
1885      public boolean equalsDeep(Base other_) {
1886        if (!super.equalsDeep(other_))
1887          return false;
1888        if (!(other_ instanceof OperationDefinitionOverloadComponent))
1889          return false;
1890        OperationDefinitionOverloadComponent o = (OperationDefinitionOverloadComponent) other_;
1891        return compareDeep(parameterName, o.parameterName, true) && compareDeep(comment, o.comment, true)
1892          ;
1893      }
1894
1895      @Override
1896      public boolean equalsShallow(Base other_) {
1897        if (!super.equalsShallow(other_))
1898          return false;
1899        if (!(other_ instanceof OperationDefinitionOverloadComponent))
1900          return false;
1901        OperationDefinitionOverloadComponent o = (OperationDefinitionOverloadComponent) other_;
1902        return compareValues(parameterName, o.parameterName, true) && compareValues(comment, o.comment, true)
1903          ;
1904      }
1905
1906      public boolean isEmpty() {
1907        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(parameterName, comment);
1908      }
1909
1910  public String fhirType() {
1911    return "OperationDefinition.overload";
1912
1913  }
1914
1915  }
1916
1917    /**
1918     * Whether this is an operation or a named query.
1919     */
1920    @Child(name = "kind", type = {CodeType.class}, order=0, min=1, max=1, modifier=false, summary=true)
1921    @Description(shortDefinition="operation | query", formalDefinition="Whether this is an operation or a named query." )
1922    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/operation-kind")
1923    protected Enumeration<OperationKind> kind;
1924
1925    /**
1926     * Explanation of why this operation definition is needed and why it has been designed as it has.
1927     */
1928    @Child(name = "purpose", type = {MarkdownType.class}, order=1, min=0, max=1, modifier=false, summary=false)
1929    @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." )
1930    protected MarkdownType purpose;
1931
1932    /**
1933     * Whether the operation affects state. Side effects such as producing audit trail entries do not count as 'affecting  state'.
1934     */
1935    @Child(name = "affectsState", type = {BooleanType.class}, order=2, min=0, max=1, modifier=false, summary=true)
1936    @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'." )
1937    protected BooleanType affectsState;
1938
1939    /**
1940     * The name used to invoke the operation.
1941     */
1942    @Child(name = "code", type = {CodeType.class}, order=3, min=1, max=1, modifier=false, summary=true)
1943    @Description(shortDefinition="Name used to invoke the operation", formalDefinition="The name used to invoke the operation." )
1944    protected CodeType code;
1945
1946    /**
1947     * Additional information about how to use this operation or named query.
1948     */
1949    @Child(name = "comment", type = {MarkdownType.class}, order=4, min=0, max=1, modifier=false, summary=false)
1950    @Description(shortDefinition="Additional information about use", formalDefinition="Additional information about how to use this operation or named query." )
1951    protected MarkdownType comment;
1952
1953    /**
1954     * Indicates that this operation definition is a constraining profile on the base.
1955     */
1956    @Child(name = "base", type = {CanonicalType.class}, order=5, min=0, max=1, modifier=false, summary=true)
1957    @Description(shortDefinition="Marks this as a profile of the base", formalDefinition="Indicates that this operation definition is a constraining profile on the base." )
1958    protected CanonicalType base;
1959
1960    /**
1961     * The types on which this operation can be executed.
1962     */
1963    @Child(name = "resource", type = {CodeType.class}, order=6, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1964    @Description(shortDefinition="Types this operation applies to", formalDefinition="The types on which this operation can be executed." )
1965    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/resource-types")
1966    protected List<CodeType> resource;
1967
1968    /**
1969     * 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).
1970     */
1971    @Child(name = "system", type = {BooleanType.class}, order=7, min=1, max=1, modifier=false, summary=true)
1972    @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)." )
1973    protected BooleanType system;
1974
1975    /**
1976     * 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).
1977     */
1978    @Child(name = "type", type = {BooleanType.class}, order=8, min=1, max=1, modifier=false, summary=true)
1979    @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)." )
1980    protected BooleanType type;
1981
1982    /**
1983     * Indicates whether this operation can be invoked on a particular instance of one of the given types.
1984     */
1985    @Child(name = "instance", type = {BooleanType.class}, order=9, min=1, max=1, modifier=false, summary=true)
1986    @Description(shortDefinition="Invoke on an instance?", formalDefinition="Indicates whether this operation can be invoked on a particular instance of one of the given types." )
1987    protected BooleanType instance;
1988
1989    /**
1990     * 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.
1991     */
1992    @Child(name = "inputProfile", type = {CanonicalType.class}, order=10, min=0, max=1, modifier=false, summary=false)
1993    @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." )
1994    protected CanonicalType inputProfile;
1995
1996    /**
1997     * Additional validation information for the out parameters - a single profile that covers all the parameters. The profile is a constraint on the parameters resource.
1998     */
1999    @Child(name = "outputProfile", type = {CanonicalType.class}, order=11, min=0, max=1, modifier=false, summary=false)
2000    @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." )
2001    protected CanonicalType outputProfile;
2002
2003    /**
2004     * The parameters for the operation/query.
2005     */
2006    @Child(name = "parameter", type = {}, order=12, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2007    @Description(shortDefinition="Parameters for the operation/query", formalDefinition="The parameters for the operation/query." )
2008    protected List<OperationDefinitionParameterComponent> parameter;
2009
2010    /**
2011     * Defines an appropriate combination of parameters to use when invoking this operation, to help code generators when generating overloaded parameter sets for this operation.
2012     */
2013    @Child(name = "overload", type = {}, order=13, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2014    @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." )
2015    protected List<OperationDefinitionOverloadComponent> overload;
2016
2017    private static final long serialVersionUID = 149113671L;
2018
2019  /**
2020   * Constructor
2021   */
2022    public OperationDefinition() {
2023      super();
2024    }
2025
2026  /**
2027   * Constructor
2028   */
2029    public OperationDefinition(StringType name, Enumeration<PublicationStatus> status, Enumeration<OperationKind> kind, CodeType code, BooleanType system, BooleanType type, BooleanType instance) {
2030      super();
2031      this.name = name;
2032      this.status = status;
2033      this.kind = kind;
2034      this.code = code;
2035      this.system = system;
2036      this.type = type;
2037      this.instance = instance;
2038    }
2039
2040    /**
2041     * @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 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
2042     */
2043    public UriType getUrlElement() { 
2044      if (this.url == null)
2045        if (Configuration.errorOnAutoCreate())
2046          throw new Error("Attempt to auto-create OperationDefinition.url");
2047        else if (Configuration.doAutoCreate())
2048          this.url = new UriType(); // bb
2049      return this.url;
2050    }
2051
2052    public boolean hasUrlElement() { 
2053      return this.url != null && !this.url.isEmpty();
2054    }
2055
2056    public boolean hasUrl() { 
2057      return this.url != null && !this.url.isEmpty();
2058    }
2059
2060    /**
2061     * @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 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
2062     */
2063    public OperationDefinition setUrlElement(UriType value) { 
2064      this.url = value;
2065      return this;
2066    }
2067
2068    /**
2069     * @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 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.
2070     */
2071    public String getUrl() { 
2072      return this.url == null ? null : this.url.getValue();
2073    }
2074
2075    /**
2076     * @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 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.
2077     */
2078    public OperationDefinition setUrl(String value) { 
2079      if (Utilities.noString(value))
2080        this.url = null;
2081      else {
2082        if (this.url == null)
2083          this.url = new UriType();
2084        this.url.setValue(value);
2085      }
2086      return this;
2087    }
2088
2089    /**
2090     * @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
2091     */
2092    public StringType getVersionElement() { 
2093      if (this.version == null)
2094        if (Configuration.errorOnAutoCreate())
2095          throw new Error("Attempt to auto-create OperationDefinition.version");
2096        else if (Configuration.doAutoCreate())
2097          this.version = new StringType(); // bb
2098      return this.version;
2099    }
2100
2101    public boolean hasVersionElement() { 
2102      return this.version != null && !this.version.isEmpty();
2103    }
2104
2105    public boolean hasVersion() { 
2106      return this.version != null && !this.version.isEmpty();
2107    }
2108
2109    /**
2110     * @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
2111     */
2112    public OperationDefinition setVersionElement(StringType value) { 
2113      this.version = value;
2114      return this;
2115    }
2116
2117    /**
2118     * @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.
2119     */
2120    public String getVersion() { 
2121      return this.version == null ? null : this.version.getValue();
2122    }
2123
2124    /**
2125     * @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.
2126     */
2127    public OperationDefinition setVersion(String value) { 
2128      if (Utilities.noString(value))
2129        this.version = null;
2130      else {
2131        if (this.version == null)
2132          this.version = new StringType();
2133        this.version.setValue(value);
2134      }
2135      return this;
2136    }
2137
2138    /**
2139     * @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
2140     */
2141    public StringType getNameElement() { 
2142      if (this.name == null)
2143        if (Configuration.errorOnAutoCreate())
2144          throw new Error("Attempt to auto-create OperationDefinition.name");
2145        else if (Configuration.doAutoCreate())
2146          this.name = new StringType(); // bb
2147      return this.name;
2148    }
2149
2150    public boolean hasNameElement() { 
2151      return this.name != null && !this.name.isEmpty();
2152    }
2153
2154    public boolean hasName() { 
2155      return this.name != null && !this.name.isEmpty();
2156    }
2157
2158    /**
2159     * @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
2160     */
2161    public OperationDefinition setNameElement(StringType value) { 
2162      this.name = value;
2163      return this;
2164    }
2165
2166    /**
2167     * @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.
2168     */
2169    public String getName() { 
2170      return this.name == null ? null : this.name.getValue();
2171    }
2172
2173    /**
2174     * @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.
2175     */
2176    public OperationDefinition setName(String value) { 
2177        if (this.name == null)
2178          this.name = new StringType();
2179        this.name.setValue(value);
2180      return this;
2181    }
2182
2183    /**
2184     * @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
2185     */
2186    public StringType getTitleElement() { 
2187      if (this.title == null)
2188        if (Configuration.errorOnAutoCreate())
2189          throw new Error("Attempt to auto-create OperationDefinition.title");
2190        else if (Configuration.doAutoCreate())
2191          this.title = new StringType(); // bb
2192      return this.title;
2193    }
2194
2195    public boolean hasTitleElement() { 
2196      return this.title != null && !this.title.isEmpty();
2197    }
2198
2199    public boolean hasTitle() { 
2200      return this.title != null && !this.title.isEmpty();
2201    }
2202
2203    /**
2204     * @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
2205     */
2206    public OperationDefinition setTitleElement(StringType value) { 
2207      this.title = value;
2208      return this;
2209    }
2210
2211    /**
2212     * @return A short, descriptive, user-friendly title for the operation definition.
2213     */
2214    public String getTitle() { 
2215      return this.title == null ? null : this.title.getValue();
2216    }
2217
2218    /**
2219     * @param value A short, descriptive, user-friendly title for the operation definition.
2220     */
2221    public OperationDefinition setTitle(String value) { 
2222      if (Utilities.noString(value))
2223        this.title = null;
2224      else {
2225        if (this.title == null)
2226          this.title = new StringType();
2227        this.title.setValue(value);
2228      }
2229      return this;
2230    }
2231
2232    /**
2233     * @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
2234     */
2235    public Enumeration<PublicationStatus> getStatusElement() { 
2236      if (this.status == null)
2237        if (Configuration.errorOnAutoCreate())
2238          throw new Error("Attempt to auto-create OperationDefinition.status");
2239        else if (Configuration.doAutoCreate())
2240          this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory()); // bb
2241      return this.status;
2242    }
2243
2244    public boolean hasStatusElement() { 
2245      return this.status != null && !this.status.isEmpty();
2246    }
2247
2248    public boolean hasStatus() { 
2249      return this.status != null && !this.status.isEmpty();
2250    }
2251
2252    /**
2253     * @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
2254     */
2255    public OperationDefinition setStatusElement(Enumeration<PublicationStatus> value) { 
2256      this.status = value;
2257      return this;
2258    }
2259
2260    /**
2261     * @return The status of this operation definition. Enables tracking the life-cycle of the content.
2262     */
2263    public PublicationStatus getStatus() { 
2264      return this.status == null ? null : this.status.getValue();
2265    }
2266
2267    /**
2268     * @param value The status of this operation definition. Enables tracking the life-cycle of the content.
2269     */
2270    public OperationDefinition setStatus(PublicationStatus value) { 
2271        if (this.status == null)
2272          this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory());
2273        this.status.setValue(value);
2274      return this;
2275    }
2276
2277    /**
2278     * @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
2279     */
2280    public Enumeration<OperationKind> getKindElement() { 
2281      if (this.kind == null)
2282        if (Configuration.errorOnAutoCreate())
2283          throw new Error("Attempt to auto-create OperationDefinition.kind");
2284        else if (Configuration.doAutoCreate())
2285          this.kind = new Enumeration<OperationKind>(new OperationKindEnumFactory()); // bb
2286      return this.kind;
2287    }
2288
2289    public boolean hasKindElement() { 
2290      return this.kind != null && !this.kind.isEmpty();
2291    }
2292
2293    public boolean hasKind() { 
2294      return this.kind != null && !this.kind.isEmpty();
2295    }
2296
2297    /**
2298     * @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
2299     */
2300    public OperationDefinition setKindElement(Enumeration<OperationKind> value) { 
2301      this.kind = value;
2302      return this;
2303    }
2304
2305    /**
2306     * @return Whether this is an operation or a named query.
2307     */
2308    public OperationKind getKind() { 
2309      return this.kind == null ? null : this.kind.getValue();
2310    }
2311
2312    /**
2313     * @param value Whether this is an operation or a named query.
2314     */
2315    public OperationDefinition setKind(OperationKind value) { 
2316        if (this.kind == null)
2317          this.kind = new Enumeration<OperationKind>(new OperationKindEnumFactory());
2318        this.kind.setValue(value);
2319      return this;
2320    }
2321
2322    /**
2323     * @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
2324     */
2325    public BooleanType getExperimentalElement() { 
2326      if (this.experimental == null)
2327        if (Configuration.errorOnAutoCreate())
2328          throw new Error("Attempt to auto-create OperationDefinition.experimental");
2329        else if (Configuration.doAutoCreate())
2330          this.experimental = new BooleanType(); // bb
2331      return this.experimental;
2332    }
2333
2334    public boolean hasExperimentalElement() { 
2335      return this.experimental != null && !this.experimental.isEmpty();
2336    }
2337
2338    public boolean hasExperimental() { 
2339      return this.experimental != null && !this.experimental.isEmpty();
2340    }
2341
2342    /**
2343     * @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
2344     */
2345    public OperationDefinition setExperimentalElement(BooleanType value) { 
2346      this.experimental = value;
2347      return this;
2348    }
2349
2350    /**
2351     * @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.
2352     */
2353    public boolean getExperimental() { 
2354      return this.experimental == null || this.experimental.isEmpty() ? false : this.experimental.getValue();
2355    }
2356
2357    /**
2358     * @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.
2359     */
2360    public OperationDefinition setExperimental(boolean value) { 
2361        if (this.experimental == null)
2362          this.experimental = new BooleanType();
2363        this.experimental.setValue(value);
2364      return this;
2365    }
2366
2367    /**
2368     * @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
2369     */
2370    public DateTimeType getDateElement() { 
2371      if (this.date == null)
2372        if (Configuration.errorOnAutoCreate())
2373          throw new Error("Attempt to auto-create OperationDefinition.date");
2374        else if (Configuration.doAutoCreate())
2375          this.date = new DateTimeType(); // bb
2376      return this.date;
2377    }
2378
2379    public boolean hasDateElement() { 
2380      return this.date != null && !this.date.isEmpty();
2381    }
2382
2383    public boolean hasDate() { 
2384      return this.date != null && !this.date.isEmpty();
2385    }
2386
2387    /**
2388     * @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
2389     */
2390    public OperationDefinition setDateElement(DateTimeType value) { 
2391      this.date = value;
2392      return this;
2393    }
2394
2395    /**
2396     * @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.
2397     */
2398    public Date getDate() { 
2399      return this.date == null ? null : this.date.getValue();
2400    }
2401
2402    /**
2403     * @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.
2404     */
2405    public OperationDefinition setDate(Date value) { 
2406      if (value == null)
2407        this.date = null;
2408      else {
2409        if (this.date == null)
2410          this.date = new DateTimeType();
2411        this.date.setValue(value);
2412      }
2413      return this;
2414    }
2415
2416    /**
2417     * @return {@link #publisher} (The name of the organization or individual that published the operation definition.). This is the underlying object with id, value and extensions. The accessor "getPublisher" gives direct access to the value
2418     */
2419    public StringType getPublisherElement() { 
2420      if (this.publisher == null)
2421        if (Configuration.errorOnAutoCreate())
2422          throw new Error("Attempt to auto-create OperationDefinition.publisher");
2423        else if (Configuration.doAutoCreate())
2424          this.publisher = new StringType(); // bb
2425      return this.publisher;
2426    }
2427
2428    public boolean hasPublisherElement() { 
2429      return this.publisher != null && !this.publisher.isEmpty();
2430    }
2431
2432    public boolean hasPublisher() { 
2433      return this.publisher != null && !this.publisher.isEmpty();
2434    }
2435
2436    /**
2437     * @param value {@link #publisher} (The name of the organization or individual that published the operation definition.). This is the underlying object with id, value and extensions. The accessor "getPublisher" gives direct access to the value
2438     */
2439    public OperationDefinition setPublisherElement(StringType value) { 
2440      this.publisher = value;
2441      return this;
2442    }
2443
2444    /**
2445     * @return The name of the organization or individual that published the operation definition.
2446     */
2447    public String getPublisher() { 
2448      return this.publisher == null ? null : this.publisher.getValue();
2449    }
2450
2451    /**
2452     * @param value The name of the organization or individual that published the operation definition.
2453     */
2454    public OperationDefinition setPublisher(String value) { 
2455      if (Utilities.noString(value))
2456        this.publisher = null;
2457      else {
2458        if (this.publisher == null)
2459          this.publisher = new StringType();
2460        this.publisher.setValue(value);
2461      }
2462      return this;
2463    }
2464
2465    /**
2466     * @return {@link #contact} (Contact details to assist a user in finding and communicating with the publisher.)
2467     */
2468    public List<ContactDetail> getContact() { 
2469      if (this.contact == null)
2470        this.contact = new ArrayList<ContactDetail>();
2471      return this.contact;
2472    }
2473
2474    /**
2475     * @return Returns a reference to <code>this</code> for easy method chaining
2476     */
2477    public OperationDefinition setContact(List<ContactDetail> theContact) { 
2478      this.contact = theContact;
2479      return this;
2480    }
2481
2482    public boolean hasContact() { 
2483      if (this.contact == null)
2484        return false;
2485      for (ContactDetail item : this.contact)
2486        if (!item.isEmpty())
2487          return true;
2488      return false;
2489    }
2490
2491    public ContactDetail addContact() { //3
2492      ContactDetail t = new ContactDetail();
2493      if (this.contact == null)
2494        this.contact = new ArrayList<ContactDetail>();
2495      this.contact.add(t);
2496      return t;
2497    }
2498
2499    public OperationDefinition addContact(ContactDetail t) { //3
2500      if (t == null)
2501        return this;
2502      if (this.contact == null)
2503        this.contact = new ArrayList<ContactDetail>();
2504      this.contact.add(t);
2505      return this;
2506    }
2507
2508    /**
2509     * @return The first repetition of repeating field {@link #contact}, creating it if it does not already exist
2510     */
2511    public ContactDetail getContactFirstRep() { 
2512      if (getContact().isEmpty()) {
2513        addContact();
2514      }
2515      return getContact().get(0);
2516    }
2517
2518    /**
2519     * @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
2520     */
2521    public MarkdownType getDescriptionElement() { 
2522      if (this.description == null)
2523        if (Configuration.errorOnAutoCreate())
2524          throw new Error("Attempt to auto-create OperationDefinition.description");
2525        else if (Configuration.doAutoCreate())
2526          this.description = new MarkdownType(); // bb
2527      return this.description;
2528    }
2529
2530    public boolean hasDescriptionElement() { 
2531      return this.description != null && !this.description.isEmpty();
2532    }
2533
2534    public boolean hasDescription() { 
2535      return this.description != null && !this.description.isEmpty();
2536    }
2537
2538    /**
2539     * @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
2540     */
2541    public OperationDefinition setDescriptionElement(MarkdownType value) { 
2542      this.description = value;
2543      return this;
2544    }
2545
2546    /**
2547     * @return A free text natural language description of the operation definition from a consumer's perspective.
2548     */
2549    public String getDescription() { 
2550      return this.description == null ? null : this.description.getValue();
2551    }
2552
2553    /**
2554     * @param value A free text natural language description of the operation definition from a consumer's perspective.
2555     */
2556    public OperationDefinition setDescription(String value) { 
2557      if (value == null)
2558        this.description = null;
2559      else {
2560        if (this.description == null)
2561          this.description = new MarkdownType();
2562        this.description.setValue(value);
2563      }
2564      return this;
2565    }
2566
2567    /**
2568     * @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.)
2569     */
2570    public List<UsageContext> getUseContext() { 
2571      if (this.useContext == null)
2572        this.useContext = new ArrayList<UsageContext>();
2573      return this.useContext;
2574    }
2575
2576    /**
2577     * @return Returns a reference to <code>this</code> for easy method chaining
2578     */
2579    public OperationDefinition setUseContext(List<UsageContext> theUseContext) { 
2580      this.useContext = theUseContext;
2581      return this;
2582    }
2583
2584    public boolean hasUseContext() { 
2585      if (this.useContext == null)
2586        return false;
2587      for (UsageContext item : this.useContext)
2588        if (!item.isEmpty())
2589          return true;
2590      return false;
2591    }
2592
2593    public UsageContext addUseContext() { //3
2594      UsageContext t = new UsageContext();
2595      if (this.useContext == null)
2596        this.useContext = new ArrayList<UsageContext>();
2597      this.useContext.add(t);
2598      return t;
2599    }
2600
2601    public OperationDefinition addUseContext(UsageContext t) { //3
2602      if (t == null)
2603        return this;
2604      if (this.useContext == null)
2605        this.useContext = new ArrayList<UsageContext>();
2606      this.useContext.add(t);
2607      return this;
2608    }
2609
2610    /**
2611     * @return The first repetition of repeating field {@link #useContext}, creating it if it does not already exist
2612     */
2613    public UsageContext getUseContextFirstRep() { 
2614      if (getUseContext().isEmpty()) {
2615        addUseContext();
2616      }
2617      return getUseContext().get(0);
2618    }
2619
2620    /**
2621     * @return {@link #jurisdiction} (A legal or geographic region in which the operation definition is intended to be used.)
2622     */
2623    public List<CodeableConcept> getJurisdiction() { 
2624      if (this.jurisdiction == null)
2625        this.jurisdiction = new ArrayList<CodeableConcept>();
2626      return this.jurisdiction;
2627    }
2628
2629    /**
2630     * @return Returns a reference to <code>this</code> for easy method chaining
2631     */
2632    public OperationDefinition setJurisdiction(List<CodeableConcept> theJurisdiction) { 
2633      this.jurisdiction = theJurisdiction;
2634      return this;
2635    }
2636
2637    public boolean hasJurisdiction() { 
2638      if (this.jurisdiction == null)
2639        return false;
2640      for (CodeableConcept item : this.jurisdiction)
2641        if (!item.isEmpty())
2642          return true;
2643      return false;
2644    }
2645
2646    public CodeableConcept addJurisdiction() { //3
2647      CodeableConcept t = new CodeableConcept();
2648      if (this.jurisdiction == null)
2649        this.jurisdiction = new ArrayList<CodeableConcept>();
2650      this.jurisdiction.add(t);
2651      return t;
2652    }
2653
2654    public OperationDefinition addJurisdiction(CodeableConcept t) { //3
2655      if (t == null)
2656        return this;
2657      if (this.jurisdiction == null)
2658        this.jurisdiction = new ArrayList<CodeableConcept>();
2659      this.jurisdiction.add(t);
2660      return this;
2661    }
2662
2663    /**
2664     * @return The first repetition of repeating field {@link #jurisdiction}, creating it if it does not already exist
2665     */
2666    public CodeableConcept getJurisdictionFirstRep() { 
2667      if (getJurisdiction().isEmpty()) {
2668        addJurisdiction();
2669      }
2670      return getJurisdiction().get(0);
2671    }
2672
2673    /**
2674     * @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
2675     */
2676    public MarkdownType getPurposeElement() { 
2677      if (this.purpose == null)
2678        if (Configuration.errorOnAutoCreate())
2679          throw new Error("Attempt to auto-create OperationDefinition.purpose");
2680        else if (Configuration.doAutoCreate())
2681          this.purpose = new MarkdownType(); // bb
2682      return this.purpose;
2683    }
2684
2685    public boolean hasPurposeElement() { 
2686      return this.purpose != null && !this.purpose.isEmpty();
2687    }
2688
2689    public boolean hasPurpose() { 
2690      return this.purpose != null && !this.purpose.isEmpty();
2691    }
2692
2693    /**
2694     * @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
2695     */
2696    public OperationDefinition setPurposeElement(MarkdownType value) { 
2697      this.purpose = value;
2698      return this;
2699    }
2700
2701    /**
2702     * @return Explanation of why this operation definition is needed and why it has been designed as it has.
2703     */
2704    public String getPurpose() { 
2705      return this.purpose == null ? null : this.purpose.getValue();
2706    }
2707
2708    /**
2709     * @param value Explanation of why this operation definition is needed and why it has been designed as it has.
2710     */
2711    public OperationDefinition setPurpose(String value) { 
2712      if (value == null)
2713        this.purpose = null;
2714      else {
2715        if (this.purpose == null)
2716          this.purpose = new MarkdownType();
2717        this.purpose.setValue(value);
2718      }
2719      return this;
2720    }
2721
2722    /**
2723     * @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
2724     */
2725    public BooleanType getAffectsStateElement() { 
2726      if (this.affectsState == null)
2727        if (Configuration.errorOnAutoCreate())
2728          throw new Error("Attempt to auto-create OperationDefinition.affectsState");
2729        else if (Configuration.doAutoCreate())
2730          this.affectsState = new BooleanType(); // bb
2731      return this.affectsState;
2732    }
2733
2734    public boolean hasAffectsStateElement() { 
2735      return this.affectsState != null && !this.affectsState.isEmpty();
2736    }
2737
2738    public boolean hasAffectsState() { 
2739      return this.affectsState != null && !this.affectsState.isEmpty();
2740    }
2741
2742    /**
2743     * @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
2744     */
2745    public OperationDefinition setAffectsStateElement(BooleanType value) { 
2746      this.affectsState = value;
2747      return this;
2748    }
2749
2750    /**
2751     * @return Whether the operation affects state. Side effects such as producing audit trail entries do not count as 'affecting  state'.
2752     */
2753    public boolean getAffectsState() { 
2754      return this.affectsState == null || this.affectsState.isEmpty() ? false : this.affectsState.getValue();
2755    }
2756
2757    /**
2758     * @param value Whether the operation affects state. Side effects such as producing audit trail entries do not count as 'affecting  state'.
2759     */
2760    public OperationDefinition setAffectsState(boolean value) { 
2761        if (this.affectsState == null)
2762          this.affectsState = new BooleanType();
2763        this.affectsState.setValue(value);
2764      return this;
2765    }
2766
2767    /**
2768     * @return {@link #code} (The name used to invoke the operation.). This is the underlying object with id, value and extensions. The accessor "getCode" gives direct access to the value
2769     */
2770    public CodeType getCodeElement() { 
2771      if (this.code == null)
2772        if (Configuration.errorOnAutoCreate())
2773          throw new Error("Attempt to auto-create OperationDefinition.code");
2774        else if (Configuration.doAutoCreate())
2775          this.code = new CodeType(); // bb
2776      return this.code;
2777    }
2778
2779    public boolean hasCodeElement() { 
2780      return this.code != null && !this.code.isEmpty();
2781    }
2782
2783    public boolean hasCode() { 
2784      return this.code != null && !this.code.isEmpty();
2785    }
2786
2787    /**
2788     * @param value {@link #code} (The name used to invoke the operation.). This is the underlying object with id, value and extensions. The accessor "getCode" gives direct access to the value
2789     */
2790    public OperationDefinition setCodeElement(CodeType value) { 
2791      this.code = value;
2792      return this;
2793    }
2794
2795    /**
2796     * @return The name used to invoke the operation.
2797     */
2798    public String getCode() { 
2799      return this.code == null ? null : this.code.getValue();
2800    }
2801
2802    /**
2803     * @param value The name used to invoke the operation.
2804     */
2805    public OperationDefinition setCode(String value) { 
2806        if (this.code == null)
2807          this.code = new CodeType();
2808        this.code.setValue(value);
2809      return this;
2810    }
2811
2812    /**
2813     * @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
2814     */
2815    public MarkdownType getCommentElement() { 
2816      if (this.comment == null)
2817        if (Configuration.errorOnAutoCreate())
2818          throw new Error("Attempt to auto-create OperationDefinition.comment");
2819        else if (Configuration.doAutoCreate())
2820          this.comment = new MarkdownType(); // bb
2821      return this.comment;
2822    }
2823
2824    public boolean hasCommentElement() { 
2825      return this.comment != null && !this.comment.isEmpty();
2826    }
2827
2828    public boolean hasComment() { 
2829      return this.comment != null && !this.comment.isEmpty();
2830    }
2831
2832    /**
2833     * @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
2834     */
2835    public OperationDefinition setCommentElement(MarkdownType value) { 
2836      this.comment = value;
2837      return this;
2838    }
2839
2840    /**
2841     * @return Additional information about how to use this operation or named query.
2842     */
2843    public String getComment() { 
2844      return this.comment == null ? null : this.comment.getValue();
2845    }
2846
2847    /**
2848     * @param value Additional information about how to use this operation or named query.
2849     */
2850    public OperationDefinition setComment(String value) { 
2851      if (value == null)
2852        this.comment = null;
2853      else {
2854        if (this.comment == null)
2855          this.comment = new MarkdownType();
2856        this.comment.setValue(value);
2857      }
2858      return this;
2859    }
2860
2861    /**
2862     * @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
2863     */
2864    public CanonicalType getBaseElement() { 
2865      if (this.base == null)
2866        if (Configuration.errorOnAutoCreate())
2867          throw new Error("Attempt to auto-create OperationDefinition.base");
2868        else if (Configuration.doAutoCreate())
2869          this.base = new CanonicalType(); // bb
2870      return this.base;
2871    }
2872
2873    public boolean hasBaseElement() { 
2874      return this.base != null && !this.base.isEmpty();
2875    }
2876
2877    public boolean hasBase() { 
2878      return this.base != null && !this.base.isEmpty();
2879    }
2880
2881    /**
2882     * @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
2883     */
2884    public OperationDefinition setBaseElement(CanonicalType value) { 
2885      this.base = value;
2886      return this;
2887    }
2888
2889    /**
2890     * @return Indicates that this operation definition is a constraining profile on the base.
2891     */
2892    public String getBase() { 
2893      return this.base == null ? null : this.base.getValue();
2894    }
2895
2896    /**
2897     * @param value Indicates that this operation definition is a constraining profile on the base.
2898     */
2899    public OperationDefinition setBase(String value) { 
2900      if (Utilities.noString(value))
2901        this.base = null;
2902      else {
2903        if (this.base == null)
2904          this.base = new CanonicalType();
2905        this.base.setValue(value);
2906      }
2907      return this;
2908    }
2909
2910    /**
2911     * @return {@link #resource} (The types on which this operation can be executed.)
2912     */
2913    public List<CodeType> getResource() { 
2914      if (this.resource == null)
2915        this.resource = new ArrayList<CodeType>();
2916      return this.resource;
2917    }
2918
2919    /**
2920     * @return Returns a reference to <code>this</code> for easy method chaining
2921     */
2922    public OperationDefinition setResource(List<CodeType> theResource) { 
2923      this.resource = theResource;
2924      return this;
2925    }
2926
2927    public boolean hasResource() { 
2928      if (this.resource == null)
2929        return false;
2930      for (CodeType item : this.resource)
2931        if (!item.isEmpty())
2932          return true;
2933      return false;
2934    }
2935
2936    /**
2937     * @return {@link #resource} (The types on which this operation can be executed.)
2938     */
2939    public CodeType addResourceElement() {//2 
2940      CodeType t = new CodeType();
2941      if (this.resource == null)
2942        this.resource = new ArrayList<CodeType>();
2943      this.resource.add(t);
2944      return t;
2945    }
2946
2947    /**
2948     * @param value {@link #resource} (The types on which this operation can be executed.)
2949     */
2950    public OperationDefinition addResource(String value) { //1
2951      CodeType t = new CodeType();
2952      t.setValue(value);
2953      if (this.resource == null)
2954        this.resource = new ArrayList<CodeType>();
2955      this.resource.add(t);
2956      return this;
2957    }
2958
2959    /**
2960     * @param value {@link #resource} (The types on which this operation can be executed.)
2961     */
2962    public boolean hasResource(String value) { 
2963      if (this.resource == null)
2964        return false;
2965      for (CodeType v : this.resource)
2966        if (v.getValue().equals(value)) // code
2967          return true;
2968      return false;
2969    }
2970
2971    /**
2972     * @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
2973     */
2974    public BooleanType getSystemElement() { 
2975      if (this.system == null)
2976        if (Configuration.errorOnAutoCreate())
2977          throw new Error("Attempt to auto-create OperationDefinition.system");
2978        else if (Configuration.doAutoCreate())
2979          this.system = new BooleanType(); // bb
2980      return this.system;
2981    }
2982
2983    public boolean hasSystemElement() { 
2984      return this.system != null && !this.system.isEmpty();
2985    }
2986
2987    public boolean hasSystem() { 
2988      return this.system != null && !this.system.isEmpty();
2989    }
2990
2991    /**
2992     * @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
2993     */
2994    public OperationDefinition setSystemElement(BooleanType value) { 
2995      this.system = value;
2996      return this;
2997    }
2998
2999    /**
3000     * @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).
3001     */
3002    public boolean getSystem() { 
3003      return this.system == null || this.system.isEmpty() ? false : this.system.getValue();
3004    }
3005
3006    /**
3007     * @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).
3008     */
3009    public OperationDefinition setSystem(boolean value) { 
3010        if (this.system == null)
3011          this.system = new BooleanType();
3012        this.system.setValue(value);
3013      return this;
3014    }
3015
3016    /**
3017     * @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
3018     */
3019    public BooleanType getTypeElement() { 
3020      if (this.type == null)
3021        if (Configuration.errorOnAutoCreate())
3022          throw new Error("Attempt to auto-create OperationDefinition.type");
3023        else if (Configuration.doAutoCreate())
3024          this.type = new BooleanType(); // bb
3025      return this.type;
3026    }
3027
3028    public boolean hasTypeElement() { 
3029      return this.type != null && !this.type.isEmpty();
3030    }
3031
3032    public boolean hasType() { 
3033      return this.type != null && !this.type.isEmpty();
3034    }
3035
3036    /**
3037     * @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
3038     */
3039    public OperationDefinition setTypeElement(BooleanType value) { 
3040      this.type = value;
3041      return this;
3042    }
3043
3044    /**
3045     * @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).
3046     */
3047    public boolean getType() { 
3048      return this.type == null || this.type.isEmpty() ? false : this.type.getValue();
3049    }
3050
3051    /**
3052     * @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).
3053     */
3054    public OperationDefinition setType(boolean value) { 
3055        if (this.type == null)
3056          this.type = new BooleanType();
3057        this.type.setValue(value);
3058      return this;
3059    }
3060
3061    /**
3062     * @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
3063     */
3064    public BooleanType getInstanceElement() { 
3065      if (this.instance == null)
3066        if (Configuration.errorOnAutoCreate())
3067          throw new Error("Attempt to auto-create OperationDefinition.instance");
3068        else if (Configuration.doAutoCreate())
3069          this.instance = new BooleanType(); // bb
3070      return this.instance;
3071    }
3072
3073    public boolean hasInstanceElement() { 
3074      return this.instance != null && !this.instance.isEmpty();
3075    }
3076
3077    public boolean hasInstance() { 
3078      return this.instance != null && !this.instance.isEmpty();
3079    }
3080
3081    /**
3082     * @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
3083     */
3084    public OperationDefinition setInstanceElement(BooleanType value) { 
3085      this.instance = value;
3086      return this;
3087    }
3088
3089    /**
3090     * @return Indicates whether this operation can be invoked on a particular instance of one of the given types.
3091     */
3092    public boolean getInstance() { 
3093      return this.instance == null || this.instance.isEmpty() ? false : this.instance.getValue();
3094    }
3095
3096    /**
3097     * @param value Indicates whether this operation can be invoked on a particular instance of one of the given types.
3098     */
3099    public OperationDefinition setInstance(boolean value) { 
3100        if (this.instance == null)
3101          this.instance = new BooleanType();
3102        this.instance.setValue(value);
3103      return this;
3104    }
3105
3106    /**
3107     * @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
3108     */
3109    public CanonicalType getInputProfileElement() { 
3110      if (this.inputProfile == null)
3111        if (Configuration.errorOnAutoCreate())
3112          throw new Error("Attempt to auto-create OperationDefinition.inputProfile");
3113        else if (Configuration.doAutoCreate())
3114          this.inputProfile = new CanonicalType(); // bb
3115      return this.inputProfile;
3116    }
3117
3118    public boolean hasInputProfileElement() { 
3119      return this.inputProfile != null && !this.inputProfile.isEmpty();
3120    }
3121
3122    public boolean hasInputProfile() { 
3123      return this.inputProfile != null && !this.inputProfile.isEmpty();
3124    }
3125
3126    /**
3127     * @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
3128     */
3129    public OperationDefinition setInputProfileElement(CanonicalType value) { 
3130      this.inputProfile = value;
3131      return this;
3132    }
3133
3134    /**
3135     * @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.
3136     */
3137    public String getInputProfile() { 
3138      return this.inputProfile == null ? null : this.inputProfile.getValue();
3139    }
3140
3141    /**
3142     * @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.
3143     */
3144    public OperationDefinition setInputProfile(String value) { 
3145      if (Utilities.noString(value))
3146        this.inputProfile = null;
3147      else {
3148        if (this.inputProfile == null)
3149          this.inputProfile = new CanonicalType();
3150        this.inputProfile.setValue(value);
3151      }
3152      return this;
3153    }
3154
3155    /**
3156     * @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
3157     */
3158    public CanonicalType getOutputProfileElement() { 
3159      if (this.outputProfile == null)
3160        if (Configuration.errorOnAutoCreate())
3161          throw new Error("Attempt to auto-create OperationDefinition.outputProfile");
3162        else if (Configuration.doAutoCreate())
3163          this.outputProfile = new CanonicalType(); // bb
3164      return this.outputProfile;
3165    }
3166
3167    public boolean hasOutputProfileElement() { 
3168      return this.outputProfile != null && !this.outputProfile.isEmpty();
3169    }
3170
3171    public boolean hasOutputProfile() { 
3172      return this.outputProfile != null && !this.outputProfile.isEmpty();
3173    }
3174
3175    /**
3176     * @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
3177     */
3178    public OperationDefinition setOutputProfileElement(CanonicalType value) { 
3179      this.outputProfile = value;
3180      return this;
3181    }
3182
3183    /**
3184     * @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.
3185     */
3186    public String getOutputProfile() { 
3187      return this.outputProfile == null ? null : this.outputProfile.getValue();
3188    }
3189
3190    /**
3191     * @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.
3192     */
3193    public OperationDefinition setOutputProfile(String value) { 
3194      if (Utilities.noString(value))
3195        this.outputProfile = null;
3196      else {
3197        if (this.outputProfile == null)
3198          this.outputProfile = new CanonicalType();
3199        this.outputProfile.setValue(value);
3200      }
3201      return this;
3202    }
3203
3204    /**
3205     * @return {@link #parameter} (The parameters for the operation/query.)
3206     */
3207    public List<OperationDefinitionParameterComponent> getParameter() { 
3208      if (this.parameter == null)
3209        this.parameter = new ArrayList<OperationDefinitionParameterComponent>();
3210      return this.parameter;
3211    }
3212
3213    /**
3214     * @return Returns a reference to <code>this</code> for easy method chaining
3215     */
3216    public OperationDefinition setParameter(List<OperationDefinitionParameterComponent> theParameter) { 
3217      this.parameter = theParameter;
3218      return this;
3219    }
3220
3221    public boolean hasParameter() { 
3222      if (this.parameter == null)
3223        return false;
3224      for (OperationDefinitionParameterComponent item : this.parameter)
3225        if (!item.isEmpty())
3226          return true;
3227      return false;
3228    }
3229
3230    public OperationDefinitionParameterComponent addParameter() { //3
3231      OperationDefinitionParameterComponent t = new OperationDefinitionParameterComponent();
3232      if (this.parameter == null)
3233        this.parameter = new ArrayList<OperationDefinitionParameterComponent>();
3234      this.parameter.add(t);
3235      return t;
3236    }
3237
3238    public OperationDefinition addParameter(OperationDefinitionParameterComponent t) { //3
3239      if (t == null)
3240        return this;
3241      if (this.parameter == null)
3242        this.parameter = new ArrayList<OperationDefinitionParameterComponent>();
3243      this.parameter.add(t);
3244      return this;
3245    }
3246
3247    /**
3248     * @return The first repetition of repeating field {@link #parameter}, creating it if it does not already exist
3249     */
3250    public OperationDefinitionParameterComponent getParameterFirstRep() { 
3251      if (getParameter().isEmpty()) {
3252        addParameter();
3253      }
3254      return getParameter().get(0);
3255    }
3256
3257    /**
3258     * @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.)
3259     */
3260    public List<OperationDefinitionOverloadComponent> getOverload() { 
3261      if (this.overload == null)
3262        this.overload = new ArrayList<OperationDefinitionOverloadComponent>();
3263      return this.overload;
3264    }
3265
3266    /**
3267     * @return Returns a reference to <code>this</code> for easy method chaining
3268     */
3269    public OperationDefinition setOverload(List<OperationDefinitionOverloadComponent> theOverload) { 
3270      this.overload = theOverload;
3271      return this;
3272    }
3273
3274    public boolean hasOverload() { 
3275      if (this.overload == null)
3276        return false;
3277      for (OperationDefinitionOverloadComponent item : this.overload)
3278        if (!item.isEmpty())
3279          return true;
3280      return false;
3281    }
3282
3283    public OperationDefinitionOverloadComponent addOverload() { //3
3284      OperationDefinitionOverloadComponent t = new OperationDefinitionOverloadComponent();
3285      if (this.overload == null)
3286        this.overload = new ArrayList<OperationDefinitionOverloadComponent>();
3287      this.overload.add(t);
3288      return t;
3289    }
3290
3291    public OperationDefinition addOverload(OperationDefinitionOverloadComponent t) { //3
3292      if (t == null)
3293        return this;
3294      if (this.overload == null)
3295        this.overload = new ArrayList<OperationDefinitionOverloadComponent>();
3296      this.overload.add(t);
3297      return this;
3298    }
3299
3300    /**
3301     * @return The first repetition of repeating field {@link #overload}, creating it if it does not already exist
3302     */
3303    public OperationDefinitionOverloadComponent getOverloadFirstRep() { 
3304      if (getOverload().isEmpty()) {
3305        addOverload();
3306      }
3307      return getOverload().get(0);
3308    }
3309
3310      protected void listChildren(List<Property> children) {
3311        super.listChildren(children);
3312        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 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));
3313        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));
3314        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));
3315        children.add(new Property("title", "string", "A short, descriptive, user-friendly title for the operation definition.", 0, 1, title));
3316        children.add(new Property("status", "code", "The status of this operation definition. Enables tracking the life-cycle of the content.", 0, 1, status));
3317        children.add(new Property("kind", "code", "Whether this is an operation or a named query.", 0, 1, kind));
3318        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));
3319        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));
3320        children.add(new Property("publisher", "string", "The name of the organization or individual that published the operation definition.", 0, 1, publisher));
3321        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));
3322        children.add(new Property("description", "markdown", "A free text natural language description of the operation definition from a consumer's perspective.", 0, 1, description));
3323        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));
3324        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));
3325        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));
3326        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));
3327        children.add(new Property("code", "code", "The name used to invoke the operation.", 0, 1, code));
3328        children.add(new Property("comment", "markdown", "Additional information about how to use this operation or named query.", 0, 1, comment));
3329        children.add(new Property("base", "canonical(OperationDefinition)", "Indicates that this operation definition is a constraining profile on the base.", 0, 1, base));
3330        children.add(new Property("resource", "code", "The types on which this operation can be executed.", 0, java.lang.Integer.MAX_VALUE, resource));
3331        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));
3332        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));
3333        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));
3334        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));
3335        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));
3336        children.add(new Property("parameter", "", "The parameters for the operation/query.", 0, java.lang.Integer.MAX_VALUE, parameter));
3337        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));
3338      }
3339
3340      @Override
3341      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
3342        switch (_hash) {
3343        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 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);
3344        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);
3345        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);
3346        case 110371416: /*title*/  return new Property("title", "string", "A short, descriptive, user-friendly title for the operation definition.", 0, 1, title);
3347        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);
3348        case 3292052: /*kind*/  return new Property("kind", "code", "Whether this is an operation or a named query.", 0, 1, kind);
3349        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);
3350        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);
3351        case 1447404028: /*publisher*/  return new Property("publisher", "string", "The name of the organization or individual that published the operation definition.", 0, 1, publisher);
3352        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);
3353        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);
3354        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);
3355        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);
3356        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);
3357        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);
3358        case 3059181: /*code*/  return new Property("code", "code", "The name used to invoke the operation.", 0, 1, code);
3359        case 950398559: /*comment*/  return new Property("comment", "markdown", "Additional information about how to use this operation or named query.", 0, 1, comment);
3360        case 3016401: /*base*/  return new Property("base", "canonical(OperationDefinition)", "Indicates that this operation definition is a constraining profile on the base.", 0, 1, base);
3361        case -341064690: /*resource*/  return new Property("resource", "code", "The types on which this operation can be executed.", 0, java.lang.Integer.MAX_VALUE, resource);
3362        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);
3363        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);
3364        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);
3365        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);
3366        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);
3367        case 1954460585: /*parameter*/  return new Property("parameter", "", "The parameters for the operation/query.", 0, java.lang.Integer.MAX_VALUE, parameter);
3368        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);
3369        default: return super.getNamedProperty(_hash, _name, _checkValid);
3370        }
3371
3372      }
3373
3374      @Override
3375      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
3376        switch (hash) {
3377        case 116079: /*url*/ return this.url == null ? new Base[0] : new Base[] {this.url}; // UriType
3378        case 351608024: /*version*/ return this.version == null ? new Base[0] : new Base[] {this.version}; // StringType
3379        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // StringType
3380        case 110371416: /*title*/ return this.title == null ? new Base[0] : new Base[] {this.title}; // StringType
3381        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<PublicationStatus>
3382        case 3292052: /*kind*/ return this.kind == null ? new Base[0] : new Base[] {this.kind}; // Enumeration<OperationKind>
3383        case -404562712: /*experimental*/ return this.experimental == null ? new Base[0] : new Base[] {this.experimental}; // BooleanType
3384        case 3076014: /*date*/ return this.date == null ? new Base[0] : new Base[] {this.date}; // DateTimeType
3385        case 1447404028: /*publisher*/ return this.publisher == null ? new Base[0] : new Base[] {this.publisher}; // StringType
3386        case 951526432: /*contact*/ return this.contact == null ? new Base[0] : this.contact.toArray(new Base[this.contact.size()]); // ContactDetail
3387        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // MarkdownType
3388        case -669707736: /*useContext*/ return this.useContext == null ? new Base[0] : this.useContext.toArray(new Base[this.useContext.size()]); // UsageContext
3389        case -507075711: /*jurisdiction*/ return this.jurisdiction == null ? new Base[0] : this.jurisdiction.toArray(new Base[this.jurisdiction.size()]); // CodeableConcept
3390        case -220463842: /*purpose*/ return this.purpose == null ? new Base[0] : new Base[] {this.purpose}; // MarkdownType
3391        case -14805197: /*affectsState*/ return this.affectsState == null ? new Base[0] : new Base[] {this.affectsState}; // BooleanType
3392        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeType
3393        case 950398559: /*comment*/ return this.comment == null ? new Base[0] : new Base[] {this.comment}; // MarkdownType
3394        case 3016401: /*base*/ return this.base == null ? new Base[0] : new Base[] {this.base}; // CanonicalType
3395        case -341064690: /*resource*/ return this.resource == null ? new Base[0] : this.resource.toArray(new Base[this.resource.size()]); // CodeType
3396        case -887328209: /*system*/ return this.system == null ? new Base[0] : new Base[] {this.system}; // BooleanType
3397        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // BooleanType
3398        case 555127957: /*instance*/ return this.instance == null ? new Base[0] : new Base[] {this.instance}; // BooleanType
3399        case 676942463: /*inputProfile*/ return this.inputProfile == null ? new Base[0] : new Base[] {this.inputProfile}; // CanonicalType
3400        case 1826166120: /*outputProfile*/ return this.outputProfile == null ? new Base[0] : new Base[] {this.outputProfile}; // CanonicalType
3401        case 1954460585: /*parameter*/ return this.parameter == null ? new Base[0] : this.parameter.toArray(new Base[this.parameter.size()]); // OperationDefinitionParameterComponent
3402        case 529823674: /*overload*/ return this.overload == null ? new Base[0] : this.overload.toArray(new Base[this.overload.size()]); // OperationDefinitionOverloadComponent
3403        default: return super.getProperty(hash, name, checkValid);
3404        }
3405
3406      }
3407
3408      @Override
3409      public Base setProperty(int hash, String name, Base value) throws FHIRException {
3410        switch (hash) {
3411        case 116079: // url
3412          this.url = castToUri(value); // UriType
3413          return value;
3414        case 351608024: // version
3415          this.version = castToString(value); // StringType
3416          return value;
3417        case 3373707: // name
3418          this.name = castToString(value); // StringType
3419          return value;
3420        case 110371416: // title
3421          this.title = castToString(value); // StringType
3422          return value;
3423        case -892481550: // status
3424          value = new PublicationStatusEnumFactory().fromType(castToCode(value));
3425          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
3426          return value;
3427        case 3292052: // kind
3428          value = new OperationKindEnumFactory().fromType(castToCode(value));
3429          this.kind = (Enumeration) value; // Enumeration<OperationKind>
3430          return value;
3431        case -404562712: // experimental
3432          this.experimental = castToBoolean(value); // BooleanType
3433          return value;
3434        case 3076014: // date
3435          this.date = castToDateTime(value); // DateTimeType
3436          return value;
3437        case 1447404028: // publisher
3438          this.publisher = castToString(value); // StringType
3439          return value;
3440        case 951526432: // contact
3441          this.getContact().add(castToContactDetail(value)); // ContactDetail
3442          return value;
3443        case -1724546052: // description
3444          this.description = castToMarkdown(value); // MarkdownType
3445          return value;
3446        case -669707736: // useContext
3447          this.getUseContext().add(castToUsageContext(value)); // UsageContext
3448          return value;
3449        case -507075711: // jurisdiction
3450          this.getJurisdiction().add(castToCodeableConcept(value)); // CodeableConcept
3451          return value;
3452        case -220463842: // purpose
3453          this.purpose = castToMarkdown(value); // MarkdownType
3454          return value;
3455        case -14805197: // affectsState
3456          this.affectsState = castToBoolean(value); // BooleanType
3457          return value;
3458        case 3059181: // code
3459          this.code = castToCode(value); // CodeType
3460          return value;
3461        case 950398559: // comment
3462          this.comment = castToMarkdown(value); // MarkdownType
3463          return value;
3464        case 3016401: // base
3465          this.base = castToCanonical(value); // CanonicalType
3466          return value;
3467        case -341064690: // resource
3468          this.getResource().add(castToCode(value)); // CodeType
3469          return value;
3470        case -887328209: // system
3471          this.system = castToBoolean(value); // BooleanType
3472          return value;
3473        case 3575610: // type
3474          this.type = castToBoolean(value); // BooleanType
3475          return value;
3476        case 555127957: // instance
3477          this.instance = castToBoolean(value); // BooleanType
3478          return value;
3479        case 676942463: // inputProfile
3480          this.inputProfile = castToCanonical(value); // CanonicalType
3481          return value;
3482        case 1826166120: // outputProfile
3483          this.outputProfile = castToCanonical(value); // CanonicalType
3484          return value;
3485        case 1954460585: // parameter
3486          this.getParameter().add((OperationDefinitionParameterComponent) value); // OperationDefinitionParameterComponent
3487          return value;
3488        case 529823674: // overload
3489          this.getOverload().add((OperationDefinitionOverloadComponent) value); // OperationDefinitionOverloadComponent
3490          return value;
3491        default: return super.setProperty(hash, name, value);
3492        }
3493
3494      }
3495
3496      @Override
3497      public Base setProperty(String name, Base value) throws FHIRException {
3498        if (name.equals("url")) {
3499          this.url = castToUri(value); // UriType
3500        } else if (name.equals("version")) {
3501          this.version = castToString(value); // StringType
3502        } else if (name.equals("name")) {
3503          this.name = castToString(value); // StringType
3504        } else if (name.equals("title")) {
3505          this.title = castToString(value); // StringType
3506        } else if (name.equals("status")) {
3507          value = new PublicationStatusEnumFactory().fromType(castToCode(value));
3508          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
3509        } else if (name.equals("kind")) {
3510          value = new OperationKindEnumFactory().fromType(castToCode(value));
3511          this.kind = (Enumeration) value; // Enumeration<OperationKind>
3512        } else if (name.equals("experimental")) {
3513          this.experimental = castToBoolean(value); // BooleanType
3514        } else if (name.equals("date")) {
3515          this.date = castToDateTime(value); // DateTimeType
3516        } else if (name.equals("publisher")) {
3517          this.publisher = castToString(value); // StringType
3518        } else if (name.equals("contact")) {
3519          this.getContact().add(castToContactDetail(value));
3520        } else if (name.equals("description")) {
3521          this.description = castToMarkdown(value); // MarkdownType
3522        } else if (name.equals("useContext")) {
3523          this.getUseContext().add(castToUsageContext(value));
3524        } else if (name.equals("jurisdiction")) {
3525          this.getJurisdiction().add(castToCodeableConcept(value));
3526        } else if (name.equals("purpose")) {
3527          this.purpose = castToMarkdown(value); // MarkdownType
3528        } else if (name.equals("affectsState")) {
3529          this.affectsState = castToBoolean(value); // BooleanType
3530        } else if (name.equals("code")) {
3531          this.code = castToCode(value); // CodeType
3532        } else if (name.equals("comment")) {
3533          this.comment = castToMarkdown(value); // MarkdownType
3534        } else if (name.equals("base")) {
3535          this.base = castToCanonical(value); // CanonicalType
3536        } else if (name.equals("resource")) {
3537          this.getResource().add(castToCode(value));
3538        } else if (name.equals("system")) {
3539          this.system = castToBoolean(value); // BooleanType
3540        } else if (name.equals("type")) {
3541          this.type = castToBoolean(value); // BooleanType
3542        } else if (name.equals("instance")) {
3543          this.instance = castToBoolean(value); // BooleanType
3544        } else if (name.equals("inputProfile")) {
3545          this.inputProfile = castToCanonical(value); // CanonicalType
3546        } else if (name.equals("outputProfile")) {
3547          this.outputProfile = castToCanonical(value); // CanonicalType
3548        } else if (name.equals("parameter")) {
3549          this.getParameter().add((OperationDefinitionParameterComponent) value);
3550        } else if (name.equals("overload")) {
3551          this.getOverload().add((OperationDefinitionOverloadComponent) value);
3552        } else
3553          return super.setProperty(name, value);
3554        return value;
3555      }
3556
3557      @Override
3558      public Base makeProperty(int hash, String name) throws FHIRException {
3559        switch (hash) {
3560        case 116079:  return getUrlElement();
3561        case 351608024:  return getVersionElement();
3562        case 3373707:  return getNameElement();
3563        case 110371416:  return getTitleElement();
3564        case -892481550:  return getStatusElement();
3565        case 3292052:  return getKindElement();
3566        case -404562712:  return getExperimentalElement();
3567        case 3076014:  return getDateElement();
3568        case 1447404028:  return getPublisherElement();
3569        case 951526432:  return addContact(); 
3570        case -1724546052:  return getDescriptionElement();
3571        case -669707736:  return addUseContext(); 
3572        case -507075711:  return addJurisdiction(); 
3573        case -220463842:  return getPurposeElement();
3574        case -14805197:  return getAffectsStateElement();
3575        case 3059181:  return getCodeElement();
3576        case 950398559:  return getCommentElement();
3577        case 3016401:  return getBaseElement();
3578        case -341064690:  return addResourceElement();
3579        case -887328209:  return getSystemElement();
3580        case 3575610:  return getTypeElement();
3581        case 555127957:  return getInstanceElement();
3582        case 676942463:  return getInputProfileElement();
3583        case 1826166120:  return getOutputProfileElement();
3584        case 1954460585:  return addParameter(); 
3585        case 529823674:  return addOverload(); 
3586        default: return super.makeProperty(hash, name);
3587        }
3588
3589      }
3590
3591      @Override
3592      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
3593        switch (hash) {
3594        case 116079: /*url*/ return new String[] {"uri"};
3595        case 351608024: /*version*/ return new String[] {"string"};
3596        case 3373707: /*name*/ return new String[] {"string"};
3597        case 110371416: /*title*/ return new String[] {"string"};
3598        case -892481550: /*status*/ return new String[] {"code"};
3599        case 3292052: /*kind*/ return new String[] {"code"};
3600        case -404562712: /*experimental*/ return new String[] {"boolean"};
3601        case 3076014: /*date*/ return new String[] {"dateTime"};
3602        case 1447404028: /*publisher*/ return new String[] {"string"};
3603        case 951526432: /*contact*/ return new String[] {"ContactDetail"};
3604        case -1724546052: /*description*/ return new String[] {"markdown"};
3605        case -669707736: /*useContext*/ return new String[] {"UsageContext"};
3606        case -507075711: /*jurisdiction*/ return new String[] {"CodeableConcept"};
3607        case -220463842: /*purpose*/ return new String[] {"markdown"};
3608        case -14805197: /*affectsState*/ return new String[] {"boolean"};
3609        case 3059181: /*code*/ return new String[] {"code"};
3610        case 950398559: /*comment*/ return new String[] {"markdown"};
3611        case 3016401: /*base*/ return new String[] {"canonical"};
3612        case -341064690: /*resource*/ return new String[] {"code"};
3613        case -887328209: /*system*/ return new String[] {"boolean"};
3614        case 3575610: /*type*/ return new String[] {"boolean"};
3615        case 555127957: /*instance*/ return new String[] {"boolean"};
3616        case 676942463: /*inputProfile*/ return new String[] {"canonical"};
3617        case 1826166120: /*outputProfile*/ return new String[] {"canonical"};
3618        case 1954460585: /*parameter*/ return new String[] {};
3619        case 529823674: /*overload*/ return new String[] {};
3620        default: return super.getTypesForProperty(hash, name);
3621        }
3622
3623      }
3624
3625      @Override
3626      public Base addChild(String name) throws FHIRException {
3627        if (name.equals("url")) {
3628          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.url");
3629        }
3630        else if (name.equals("version")) {
3631          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.version");
3632        }
3633        else if (name.equals("name")) {
3634          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.name");
3635        }
3636        else if (name.equals("title")) {
3637          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.title");
3638        }
3639        else if (name.equals("status")) {
3640          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.status");
3641        }
3642        else if (name.equals("kind")) {
3643          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.kind");
3644        }
3645        else if (name.equals("experimental")) {
3646          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.experimental");
3647        }
3648        else if (name.equals("date")) {
3649          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.date");
3650        }
3651        else if (name.equals("publisher")) {
3652          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.publisher");
3653        }
3654        else if (name.equals("contact")) {
3655          return addContact();
3656        }
3657        else if (name.equals("description")) {
3658          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.description");
3659        }
3660        else if (name.equals("useContext")) {
3661          return addUseContext();
3662        }
3663        else if (name.equals("jurisdiction")) {
3664          return addJurisdiction();
3665        }
3666        else if (name.equals("purpose")) {
3667          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.purpose");
3668        }
3669        else if (name.equals("affectsState")) {
3670          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.affectsState");
3671        }
3672        else if (name.equals("code")) {
3673          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.code");
3674        }
3675        else if (name.equals("comment")) {
3676          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.comment");
3677        }
3678        else if (name.equals("base")) {
3679          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.base");
3680        }
3681        else if (name.equals("resource")) {
3682          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.resource");
3683        }
3684        else if (name.equals("system")) {
3685          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.system");
3686        }
3687        else if (name.equals("type")) {
3688          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.type");
3689        }
3690        else if (name.equals("instance")) {
3691          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.instance");
3692        }
3693        else if (name.equals("inputProfile")) {
3694          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.inputProfile");
3695        }
3696        else if (name.equals("outputProfile")) {
3697          throw new FHIRException("Cannot call addChild on a primitive type OperationDefinition.outputProfile");
3698        }
3699        else if (name.equals("parameter")) {
3700          return addParameter();
3701        }
3702        else if (name.equals("overload")) {
3703          return addOverload();
3704        }
3705        else
3706          return super.addChild(name);
3707      }
3708
3709  public String fhirType() {
3710    return "OperationDefinition";
3711
3712  }
3713
3714      public OperationDefinition copy() {
3715        OperationDefinition dst = new OperationDefinition();
3716        copyValues(dst);
3717        dst.url = url == null ? null : url.copy();
3718        dst.version = version == null ? null : version.copy();
3719        dst.name = name == null ? null : name.copy();
3720        dst.title = title == null ? null : title.copy();
3721        dst.status = status == null ? null : status.copy();
3722        dst.kind = kind == null ? null : kind.copy();
3723        dst.experimental = experimental == null ? null : experimental.copy();
3724        dst.date = date == null ? null : date.copy();
3725        dst.publisher = publisher == null ? null : publisher.copy();
3726        if (contact != null) {
3727          dst.contact = new ArrayList<ContactDetail>();
3728          for (ContactDetail i : contact)
3729            dst.contact.add(i.copy());
3730        };
3731        dst.description = description == null ? null : description.copy();
3732        if (useContext != null) {
3733          dst.useContext = new ArrayList<UsageContext>();
3734          for (UsageContext i : useContext)
3735            dst.useContext.add(i.copy());
3736        };
3737        if (jurisdiction != null) {
3738          dst.jurisdiction = new ArrayList<CodeableConcept>();
3739          for (CodeableConcept i : jurisdiction)
3740            dst.jurisdiction.add(i.copy());
3741        };
3742        dst.purpose = purpose == null ? null : purpose.copy();
3743        dst.affectsState = affectsState == null ? null : affectsState.copy();
3744        dst.code = code == null ? null : code.copy();
3745        dst.comment = comment == null ? null : comment.copy();
3746        dst.base = base == null ? null : base.copy();
3747        if (resource != null) {
3748          dst.resource = new ArrayList<CodeType>();
3749          for (CodeType i : resource)
3750            dst.resource.add(i.copy());
3751        };
3752        dst.system = system == null ? null : system.copy();
3753        dst.type = type == null ? null : type.copy();
3754        dst.instance = instance == null ? null : instance.copy();
3755        dst.inputProfile = inputProfile == null ? null : inputProfile.copy();
3756        dst.outputProfile = outputProfile == null ? null : outputProfile.copy();
3757        if (parameter != null) {
3758          dst.parameter = new ArrayList<OperationDefinitionParameterComponent>();
3759          for (OperationDefinitionParameterComponent i : parameter)
3760            dst.parameter.add(i.copy());
3761        };
3762        if (overload != null) {
3763          dst.overload = new ArrayList<OperationDefinitionOverloadComponent>();
3764          for (OperationDefinitionOverloadComponent i : overload)
3765            dst.overload.add(i.copy());
3766        };
3767        return dst;
3768      }
3769
3770      protected OperationDefinition typedCopy() {
3771        return copy();
3772      }
3773
3774      @Override
3775      public boolean equalsDeep(Base other_) {
3776        if (!super.equalsDeep(other_))
3777          return false;
3778        if (!(other_ instanceof OperationDefinition))
3779          return false;
3780        OperationDefinition o = (OperationDefinition) other_;
3781        return compareDeep(kind, o.kind, true) && compareDeep(purpose, o.purpose, true) && compareDeep(affectsState, o.affectsState, true)
3782           && compareDeep(code, o.code, true) && compareDeep(comment, o.comment, true) && compareDeep(base, o.base, true)
3783           && compareDeep(resource, o.resource, true) && compareDeep(system, o.system, true) && compareDeep(type, o.type, true)
3784           && compareDeep(instance, o.instance, true) && compareDeep(inputProfile, o.inputProfile, true) && compareDeep(outputProfile, o.outputProfile, true)
3785           && compareDeep(parameter, o.parameter, true) && compareDeep(overload, o.overload, true);
3786      }
3787
3788      @Override
3789      public boolean equalsShallow(Base other_) {
3790        if (!super.equalsShallow(other_))
3791          return false;
3792        if (!(other_ instanceof OperationDefinition))
3793          return false;
3794        OperationDefinition o = (OperationDefinition) other_;
3795        return compareValues(kind, o.kind, true) && compareValues(purpose, o.purpose, true) && compareValues(affectsState, o.affectsState, true)
3796           && compareValues(code, o.code, true) && compareValues(comment, o.comment, true) && compareValues(resource, o.resource, true)
3797           && compareValues(system, o.system, true) && compareValues(type, o.type, true) && compareValues(instance, o.instance, true)
3798          ;
3799      }
3800
3801      public boolean isEmpty() {
3802        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(kind, purpose, affectsState
3803          , code, comment, base, resource, system, type, instance, inputProfile, outputProfile
3804          , parameter, overload);
3805      }
3806
3807  @Override
3808  public ResourceType getResourceType() {
3809    return ResourceType.OperationDefinition;
3810   }
3811
3812 /**
3813   * Search parameter: <b>date</b>
3814   * <p>
3815   * Description: <b>The operation definition publication date</b><br>
3816   * Type: <b>date</b><br>
3817   * Path: <b>OperationDefinition.date</b><br>
3818   * </p>
3819   */
3820  @SearchParamDefinition(name="date", path="OperationDefinition.date", description="The operation definition publication date", type="date" )
3821  public static final String SP_DATE = "date";
3822 /**
3823   * <b>Fluent Client</b> search parameter constant for <b>date</b>
3824   * <p>
3825   * Description: <b>The operation definition publication date</b><br>
3826   * Type: <b>date</b><br>
3827   * Path: <b>OperationDefinition.date</b><br>
3828   * </p>
3829   */
3830  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_DATE);
3831
3832 /**
3833   * Search parameter: <b>code</b>
3834   * <p>
3835   * Description: <b>Name used to invoke the operation</b><br>
3836   * Type: <b>token</b><br>
3837   * Path: <b>OperationDefinition.code</b><br>
3838   * </p>
3839   */
3840  @SearchParamDefinition(name="code", path="OperationDefinition.code", description="Name used to invoke the operation", type="token" )
3841  public static final String SP_CODE = "code";
3842 /**
3843   * <b>Fluent Client</b> search parameter constant for <b>code</b>
3844   * <p>
3845   * Description: <b>Name used to invoke the operation</b><br>
3846   * Type: <b>token</b><br>
3847   * Path: <b>OperationDefinition.code</b><br>
3848   * </p>
3849   */
3850  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CODE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CODE);
3851
3852 /**
3853   * Search parameter: <b>instance</b>
3854   * <p>
3855   * Description: <b>Invoke on an instance?</b><br>
3856   * Type: <b>token</b><br>
3857   * Path: <b>OperationDefinition.instance</b><br>
3858   * </p>
3859   */
3860  @SearchParamDefinition(name="instance", path="OperationDefinition.instance", description="Invoke on an instance?", type="token" )
3861  public static final String SP_INSTANCE = "instance";
3862 /**
3863   * <b>Fluent Client</b> search parameter constant for <b>instance</b>
3864   * <p>
3865   * Description: <b>Invoke on an instance?</b><br>
3866   * Type: <b>token</b><br>
3867   * Path: <b>OperationDefinition.instance</b><br>
3868   * </p>
3869   */
3870  public static final ca.uhn.fhir.rest.gclient.TokenClientParam INSTANCE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_INSTANCE);
3871
3872 /**
3873   * Search parameter: <b>context-type-value</b>
3874   * <p>
3875   * Description: <b>A use context type and value assigned to the operation definition</b><br>
3876   * Type: <b>composite</b><br>
3877   * Path: <b></b><br>
3878   * </p>
3879   */
3880  @SearchParamDefinition(name="context-type-value", path="OperationDefinition.useContext", description="A use context type and value assigned to the operation definition", type="composite", compositeOf={"context-type", "context"} )
3881  public static final String SP_CONTEXT_TYPE_VALUE = "context-type-value";
3882 /**
3883   * <b>Fluent Client</b> search parameter constant for <b>context-type-value</b>
3884   * <p>
3885   * Description: <b>A use context type and value assigned to the operation definition</b><br>
3886   * Type: <b>composite</b><br>
3887   * Path: <b></b><br>
3888   * </p>
3889   */
3890  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);
3891
3892 /**
3893   * Search parameter: <b>kind</b>
3894   * <p>
3895   * Description: <b>operation | query</b><br>
3896   * Type: <b>token</b><br>
3897   * Path: <b>OperationDefinition.kind</b><br>
3898   * </p>
3899   */
3900  @SearchParamDefinition(name="kind", path="OperationDefinition.kind", description="operation | query", type="token" )
3901  public static final String SP_KIND = "kind";
3902 /**
3903   * <b>Fluent Client</b> search parameter constant for <b>kind</b>
3904   * <p>
3905   * Description: <b>operation | query</b><br>
3906   * Type: <b>token</b><br>
3907   * Path: <b>OperationDefinition.kind</b><br>
3908   * </p>
3909   */
3910  public static final ca.uhn.fhir.rest.gclient.TokenClientParam KIND = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_KIND);
3911
3912 /**
3913   * Search parameter: <b>jurisdiction</b>
3914   * <p>
3915   * Description: <b>Intended jurisdiction for the operation definition</b><br>
3916   * Type: <b>token</b><br>
3917   * Path: <b>OperationDefinition.jurisdiction</b><br>
3918   * </p>
3919   */
3920  @SearchParamDefinition(name="jurisdiction", path="OperationDefinition.jurisdiction", description="Intended jurisdiction for the operation definition", type="token" )
3921  public static final String SP_JURISDICTION = "jurisdiction";
3922 /**
3923   * <b>Fluent Client</b> search parameter constant for <b>jurisdiction</b>
3924   * <p>
3925   * Description: <b>Intended jurisdiction for the operation definition</b><br>
3926   * Type: <b>token</b><br>
3927   * Path: <b>OperationDefinition.jurisdiction</b><br>
3928   * </p>
3929   */
3930  public static final ca.uhn.fhir.rest.gclient.TokenClientParam JURISDICTION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_JURISDICTION);
3931
3932 /**
3933   * Search parameter: <b>description</b>
3934   * <p>
3935   * Description: <b>The description of the operation definition</b><br>
3936   * Type: <b>string</b><br>
3937   * Path: <b>OperationDefinition.description</b><br>
3938   * </p>
3939   */
3940  @SearchParamDefinition(name="description", path="OperationDefinition.description", description="The description of the operation definition", type="string" )
3941  public static final String SP_DESCRIPTION = "description";
3942 /**
3943   * <b>Fluent Client</b> search parameter constant for <b>description</b>
3944   * <p>
3945   * Description: <b>The description of the operation definition</b><br>
3946   * Type: <b>string</b><br>
3947   * Path: <b>OperationDefinition.description</b><br>
3948   * </p>
3949   */
3950  public static final ca.uhn.fhir.rest.gclient.StringClientParam DESCRIPTION = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_DESCRIPTION);
3951
3952 /**
3953   * Search parameter: <b>context-type</b>
3954   * <p>
3955   * Description: <b>A type of use context assigned to the operation definition</b><br>
3956   * Type: <b>token</b><br>
3957   * Path: <b>OperationDefinition.useContext.code</b><br>
3958   * </p>
3959   */
3960  @SearchParamDefinition(name="context-type", path="OperationDefinition.useContext.code", description="A type of use context assigned to the operation definition", type="token" )
3961  public static final String SP_CONTEXT_TYPE = "context-type";
3962 /**
3963   * <b>Fluent Client</b> search parameter constant for <b>context-type</b>
3964   * <p>
3965   * Description: <b>A type of use context assigned to the operation definition</b><br>
3966   * Type: <b>token</b><br>
3967   * Path: <b>OperationDefinition.useContext.code</b><br>
3968   * </p>
3969   */
3970  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CONTEXT_TYPE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CONTEXT_TYPE);
3971
3972 /**
3973   * Search parameter: <b>title</b>
3974   * <p>
3975   * Description: <b>The human-friendly name of the operation definition</b><br>
3976   * Type: <b>string</b><br>
3977   * Path: <b>OperationDefinition.title</b><br>
3978   * </p>
3979   */
3980  @SearchParamDefinition(name="title", path="OperationDefinition.title", description="The human-friendly name of the operation definition", type="string" )
3981  public static final String SP_TITLE = "title";
3982 /**
3983   * <b>Fluent Client</b> search parameter constant for <b>title</b>
3984   * <p>
3985   * Description: <b>The human-friendly name of the operation definition</b><br>
3986   * Type: <b>string</b><br>
3987   * Path: <b>OperationDefinition.title</b><br>
3988   * </p>
3989   */
3990  public static final ca.uhn.fhir.rest.gclient.StringClientParam TITLE = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_TITLE);
3991
3992 /**
3993   * Search parameter: <b>type</b>
3994   * <p>
3995   * Description: <b>Invoke at the type level?</b><br>
3996   * Type: <b>token</b><br>
3997   * Path: <b>OperationDefinition.type</b><br>
3998   * </p>
3999   */
4000  @SearchParamDefinition(name="type", path="OperationDefinition.type", description="Invoke at the type level?", type="token" )
4001  public static final String SP_TYPE = "type";
4002 /**
4003   * <b>Fluent Client</b> search parameter constant for <b>type</b>
4004   * <p>
4005   * Description: <b>Invoke at the type level?</b><br>
4006   * Type: <b>token</b><br>
4007   * Path: <b>OperationDefinition.type</b><br>
4008   * </p>
4009   */
4010  public static final ca.uhn.fhir.rest.gclient.TokenClientParam TYPE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_TYPE);
4011
4012 /**
4013   * Search parameter: <b>version</b>
4014   * <p>
4015   * Description: <b>The business version of the operation definition</b><br>
4016   * Type: <b>token</b><br>
4017   * Path: <b>OperationDefinition.version</b><br>
4018   * </p>
4019   */
4020  @SearchParamDefinition(name="version", path="OperationDefinition.version", description="The business version of the operation definition", type="token" )
4021  public static final String SP_VERSION = "version";
4022 /**
4023   * <b>Fluent Client</b> search parameter constant for <b>version</b>
4024   * <p>
4025   * Description: <b>The business version of the operation definition</b><br>
4026   * Type: <b>token</b><br>
4027   * Path: <b>OperationDefinition.version</b><br>
4028   * </p>
4029   */
4030  public static final ca.uhn.fhir.rest.gclient.TokenClientParam VERSION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_VERSION);
4031
4032 /**
4033   * Search parameter: <b>url</b>
4034   * <p>
4035   * Description: <b>The uri that identifies the operation definition</b><br>
4036   * Type: <b>uri</b><br>
4037   * Path: <b>OperationDefinition.url</b><br>
4038   * </p>
4039   */
4040  @SearchParamDefinition(name="url", path="OperationDefinition.url", description="The uri that identifies the operation definition", type="uri" )
4041  public static final String SP_URL = "url";
4042 /**
4043   * <b>Fluent Client</b> search parameter constant for <b>url</b>
4044   * <p>
4045   * Description: <b>The uri that identifies the operation definition</b><br>
4046   * Type: <b>uri</b><br>
4047   * Path: <b>OperationDefinition.url</b><br>
4048   * </p>
4049   */
4050  public static final ca.uhn.fhir.rest.gclient.UriClientParam URL = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_URL);
4051
4052 /**
4053   * Search parameter: <b>context-quantity</b>
4054   * <p>
4055   * Description: <b>A quantity- or range-valued use context assigned to the operation definition</b><br>
4056   * Type: <b>quantity</b><br>
4057   * Path: <b>OperationDefinition.useContext.valueQuantity, OperationDefinition.useContext.valueRange</b><br>
4058   * </p>
4059   */
4060  @SearchParamDefinition(name="context-quantity", path="(OperationDefinition.useContext.value as Quantity) | (OperationDefinition.useContext.value as Range)", description="A quantity- or range-valued use context assigned to the operation definition", type="quantity" )
4061  public static final String SP_CONTEXT_QUANTITY = "context-quantity";
4062 /**
4063   * <b>Fluent Client</b> search parameter constant for <b>context-quantity</b>
4064   * <p>
4065   * Description: <b>A quantity- or range-valued use context assigned to the operation definition</b><br>
4066   * Type: <b>quantity</b><br>
4067   * Path: <b>OperationDefinition.useContext.valueQuantity, OperationDefinition.useContext.valueRange</b><br>
4068   * </p>
4069   */
4070  public static final ca.uhn.fhir.rest.gclient.QuantityClientParam CONTEXT_QUANTITY = new ca.uhn.fhir.rest.gclient.QuantityClientParam(SP_CONTEXT_QUANTITY);
4071
4072 /**
4073   * Search parameter: <b>input-profile</b>
4074   * <p>
4075   * Description: <b>Validation information for in parameters</b><br>
4076   * Type: <b>reference</b><br>
4077   * Path: <b>OperationDefinition.inputProfile</b><br>
4078   * </p>
4079   */
4080  @SearchParamDefinition(name="input-profile", path="OperationDefinition.inputProfile", description="Validation information for in parameters", type="reference", target={StructureDefinition.class } )
4081  public static final String SP_INPUT_PROFILE = "input-profile";
4082 /**
4083   * <b>Fluent Client</b> search parameter constant for <b>input-profile</b>
4084   * <p>
4085   * Description: <b>Validation information for in parameters</b><br>
4086   * Type: <b>reference</b><br>
4087   * Path: <b>OperationDefinition.inputProfile</b><br>
4088   * </p>
4089   */
4090  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam INPUT_PROFILE = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_INPUT_PROFILE);
4091
4092/**
4093   * Constant for fluent queries to be used to add include statements. Specifies
4094   * the path value of "<b>OperationDefinition:input-profile</b>".
4095   */
4096  public static final ca.uhn.fhir.model.api.Include INCLUDE_INPUT_PROFILE = new ca.uhn.fhir.model.api.Include("OperationDefinition:input-profile").toLocked();
4097
4098 /**
4099   * Search parameter: <b>output-profile</b>
4100   * <p>
4101   * Description: <b>Validation information for out parameters</b><br>
4102   * Type: <b>reference</b><br>
4103   * Path: <b>OperationDefinition.outputProfile</b><br>
4104   * </p>
4105   */
4106  @SearchParamDefinition(name="output-profile", path="OperationDefinition.outputProfile", description="Validation information for out parameters", type="reference", target={StructureDefinition.class } )
4107  public static final String SP_OUTPUT_PROFILE = "output-profile";
4108 /**
4109   * <b>Fluent Client</b> search parameter constant for <b>output-profile</b>
4110   * <p>
4111   * Description: <b>Validation information for out parameters</b><br>
4112   * Type: <b>reference</b><br>
4113   * Path: <b>OperationDefinition.outputProfile</b><br>
4114   * </p>
4115   */
4116  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam OUTPUT_PROFILE = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_OUTPUT_PROFILE);
4117
4118/**
4119   * Constant for fluent queries to be used to add include statements. Specifies
4120   * the path value of "<b>OperationDefinition:output-profile</b>".
4121   */
4122  public static final ca.uhn.fhir.model.api.Include INCLUDE_OUTPUT_PROFILE = new ca.uhn.fhir.model.api.Include("OperationDefinition:output-profile").toLocked();
4123
4124 /**
4125   * Search parameter: <b>system</b>
4126   * <p>
4127   * Description: <b>Invoke at the system level?</b><br>
4128   * Type: <b>token</b><br>
4129   * Path: <b>OperationDefinition.system</b><br>
4130   * </p>
4131   */
4132  @SearchParamDefinition(name="system", path="OperationDefinition.system", description="Invoke at the system level?", type="token" )
4133  public static final String SP_SYSTEM = "system";
4134 /**
4135   * <b>Fluent Client</b> search parameter constant for <b>system</b>
4136   * <p>
4137   * Description: <b>Invoke at the system level?</b><br>
4138   * Type: <b>token</b><br>
4139   * Path: <b>OperationDefinition.system</b><br>
4140   * </p>
4141   */
4142  public static final ca.uhn.fhir.rest.gclient.TokenClientParam SYSTEM = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_SYSTEM);
4143
4144 /**
4145   * Search parameter: <b>name</b>
4146   * <p>
4147   * Description: <b>Computationally friendly name of the operation definition</b><br>
4148   * Type: <b>string</b><br>
4149   * Path: <b>OperationDefinition.name</b><br>
4150   * </p>
4151   */
4152  @SearchParamDefinition(name="name", path="OperationDefinition.name", description="Computationally friendly name of the operation definition", type="string" )
4153  public static final String SP_NAME = "name";
4154 /**
4155   * <b>Fluent Client</b> search parameter constant for <b>name</b>
4156   * <p>
4157   * Description: <b>Computationally friendly name of the operation definition</b><br>
4158   * Type: <b>string</b><br>
4159   * Path: <b>OperationDefinition.name</b><br>
4160   * </p>
4161   */
4162  public static final ca.uhn.fhir.rest.gclient.StringClientParam NAME = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_NAME);
4163
4164 /**
4165   * Search parameter: <b>context</b>
4166   * <p>
4167   * Description: <b>A use context assigned to the operation definition</b><br>
4168   * Type: <b>token</b><br>
4169   * Path: <b>OperationDefinition.useContext.valueCodeableConcept</b><br>
4170   * </p>
4171   */
4172  @SearchParamDefinition(name="context", path="(OperationDefinition.useContext.value as CodeableConcept)", description="A use context assigned to the operation definition", type="token" )
4173  public static final String SP_CONTEXT = "context";
4174 /**
4175   * <b>Fluent Client</b> search parameter constant for <b>context</b>
4176   * <p>
4177   * Description: <b>A use context assigned to the operation definition</b><br>
4178   * Type: <b>token</b><br>
4179   * Path: <b>OperationDefinition.useContext.valueCodeableConcept</b><br>
4180   * </p>
4181   */
4182  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CONTEXT = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CONTEXT);
4183
4184 /**
4185   * Search parameter: <b>publisher</b>
4186   * <p>
4187   * Description: <b>Name of the publisher of the operation definition</b><br>
4188   * Type: <b>string</b><br>
4189   * Path: <b>OperationDefinition.publisher</b><br>
4190   * </p>
4191   */
4192  @SearchParamDefinition(name="publisher", path="OperationDefinition.publisher", description="Name of the publisher of the operation definition", type="string" )
4193  public static final String SP_PUBLISHER = "publisher";
4194 /**
4195   * <b>Fluent Client</b> search parameter constant for <b>publisher</b>
4196   * <p>
4197   * Description: <b>Name of the publisher of the operation definition</b><br>
4198   * Type: <b>string</b><br>
4199   * Path: <b>OperationDefinition.publisher</b><br>
4200   * </p>
4201   */
4202  public static final ca.uhn.fhir.rest.gclient.StringClientParam PUBLISHER = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_PUBLISHER);
4203
4204 /**
4205   * Search parameter: <b>context-type-quantity</b>
4206   * <p>
4207   * Description: <b>A use context type and quantity- or range-based value assigned to the operation definition</b><br>
4208   * Type: <b>composite</b><br>
4209   * Path: <b></b><br>
4210   * </p>
4211   */
4212  @SearchParamDefinition(name="context-type-quantity", path="OperationDefinition.useContext", description="A use context type and quantity- or range-based value assigned to the operation definition", type="composite", compositeOf={"context-type", "context-quantity"} )
4213  public static final String SP_CONTEXT_TYPE_QUANTITY = "context-type-quantity";
4214 /**
4215   * <b>Fluent Client</b> search parameter constant for <b>context-type-quantity</b>
4216   * <p>
4217   * Description: <b>A use context type and quantity- or range-based value assigned to the operation definition</b><br>
4218   * Type: <b>composite</b><br>
4219   * Path: <b></b><br>
4220   * </p>
4221   */
4222  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);
4223
4224 /**
4225   * Search parameter: <b>status</b>
4226   * <p>
4227   * Description: <b>The current status of the operation definition</b><br>
4228   * Type: <b>token</b><br>
4229   * Path: <b>OperationDefinition.status</b><br>
4230   * </p>
4231   */
4232  @SearchParamDefinition(name="status", path="OperationDefinition.status", description="The current status of the operation definition", type="token" )
4233  public static final String SP_STATUS = "status";
4234 /**
4235   * <b>Fluent Client</b> search parameter constant for <b>status</b>
4236   * <p>
4237   * Description: <b>The current status of the operation definition</b><br>
4238   * Type: <b>token</b><br>
4239   * Path: <b>OperationDefinition.status</b><br>
4240   * </p>
4241   */
4242  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
4243
4244 /**
4245   * Search parameter: <b>base</b>
4246   * <p>
4247   * Description: <b>Marks this as a profile of the base</b><br>
4248   * Type: <b>reference</b><br>
4249   * Path: <b>OperationDefinition.base</b><br>
4250   * </p>
4251   */
4252  @SearchParamDefinition(name="base", path="OperationDefinition.base", description="Marks this as a profile of the base", type="reference", target={OperationDefinition.class } )
4253  public static final String SP_BASE = "base";
4254 /**
4255   * <b>Fluent Client</b> search parameter constant for <b>base</b>
4256   * <p>
4257   * Description: <b>Marks this as a profile of the base</b><br>
4258   * Type: <b>reference</b><br>
4259   * Path: <b>OperationDefinition.base</b><br>
4260   * </p>
4261   */
4262  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam BASE = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_BASE);
4263
4264/**
4265   * Constant for fluent queries to be used to add include statements. Specifies
4266   * the path value of "<b>OperationDefinition:base</b>".
4267   */
4268  public static final ca.uhn.fhir.model.api.Include INCLUDE_BASE = new ca.uhn.fhir.model.api.Include("OperationDefinition:base").toLocked();
4269
4270
4271}
4272