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