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