001package org.hl7.fhir.r4.model;
002
003/*
004  Copyright (c) 2011+, HL7, Inc.
005  All rights reserved.
006  
007  Redistribution and use in source and binary forms, with or without modification, 
008  are permitted provided that the following conditions are met:
009  
010   * Redistributions of source code must retain the above copyright notice, this 
011     list of conditions and the following disclaimer.
012   * Redistributions in binary form must reproduce the above copyright notice, 
013     this list of conditions and the following disclaimer in the documentation 
014     and/or other materials provided with the distribution.
015   * Neither the name of HL7 nor the names of its contributors may be used to 
016     endorse or promote products derived from this software without specific 
017     prior written permission.
018  
019  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
020  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
021  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
022  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
023  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
024  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
025  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
026  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
027  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
028  POSSIBILITY OF SUCH DAMAGE.
029  
030*/
031
032// Generated on Tue, May 12, 2020 07:26+1000 for FHIR v4.0.1
033import java.util.ArrayList;
034import java.util.List;
035
036import org.hl7.fhir.exceptions.FHIRException;
037import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
038import org.hl7.fhir.instance.model.api.IBaseParameters;
039
040import ca.uhn.fhir.model.api.annotation.Block;
041import ca.uhn.fhir.model.api.annotation.Child;
042import ca.uhn.fhir.model.api.annotation.Description;
043import ca.uhn.fhir.model.api.annotation.ResourceDef;
044
045/**
046 * This resource is a non-persisted resource used to pass information into and
047 * back from an [operation](operations.html). It has no other use, and there is
048 * no RESTful endpoint associated with it.
049 */
050@ResourceDef(name = "Parameters", profile = "http://hl7.org/fhir/StructureDefinition/Parameters")
051public class Parameters extends Resource implements IBaseParameters {
052
053  @Block()
054  public static class ParametersParameterComponent extends BackboneElement implements IBaseBackboneElement {
055    /**
056     * The name of the parameter (reference to the operation definition).
057     */
058    @Child(name = "name", type = { StringType.class }, order = 1, min = 1, max = 1, modifier = false, summary = true)
059    @Description(shortDefinition = "Name from the definition", formalDefinition = "The name of the parameter (reference to the operation definition).")
060    protected StringType name;
061
062    /**
063     * If the parameter is a data type.
064     */
065    @Child(name = "value", type = {}, order = 2, min = 0, max = 1, modifier = false, summary = true)
066    @Description(shortDefinition = "If parameter is a data type", formalDefinition = "If the parameter is a data type.")
067    protected org.hl7.fhir.r4.model.Type value;
068
069    /**
070     * If the parameter is a whole resource.
071     */
072    @Child(name = "resource", type = { Resource.class }, order = 3, min = 0, max = 1, modifier = false, summary = true)
073    @Description(shortDefinition = "If parameter is a whole resource", formalDefinition = "If the parameter is a whole resource.")
074    protected Resource resource;
075
076    /**
077     * A named part of a multi-part parameter.
078     */
079    @Child(name = "part", type = {
080        ParametersParameterComponent.class }, order = 4, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = true)
081    @Description(shortDefinition = "Named part of a multi-part parameter", formalDefinition = "A named part of a multi-part parameter.")
082    protected List<ParametersParameterComponent> part;
083
084    private static final long serialVersionUID = -1265707999L;
085
086    /**
087     * Constructor
088     */
089    public ParametersParameterComponent() {
090      super();
091    }
092
093    /**
094     * Constructor
095     */
096    public ParametersParameterComponent(StringType name) {
097      super();
098      this.name = name;
099    }
100
101    /**
102     * @return {@link #name} (The name of the parameter (reference to the operation
103     *         definition).). This is the underlying object with id, value and
104     *         extensions. The accessor "getName" gives direct access to the value
105     */
106    public StringType getNameElement() {
107      if (this.name == null)
108        if (Configuration.errorOnAutoCreate())
109          throw new Error("Attempt to auto-create ParametersParameterComponent.name");
110        else if (Configuration.doAutoCreate())
111          this.name = new StringType(); // bb
112      return this.name;
113    }
114
115    public boolean hasNameElement() {
116      return this.name != null && !this.name.isEmpty();
117    }
118
119    public boolean hasName() {
120      return this.name != null && !this.name.isEmpty();
121    }
122
123    /**
124     * @param value {@link #name} (The name of the parameter (reference to the
125     *              operation definition).). This is the underlying object with id,
126     *              value and extensions. The accessor "getName" gives direct access
127     *              to the value
128     */
129    public ParametersParameterComponent setNameElement(StringType value) {
130      this.name = value;
131      return this;
132    }
133
134    /**
135     * @return The name of the parameter (reference to the operation definition).
136     */
137    public String getName() {
138      return this.name == null ? null : this.name.getValue();
139    }
140
141    /**
142     * @param value The name of the parameter (reference to the operation
143     *              definition).
144     */
145    public ParametersParameterComponent setName(String value) {
146      if (this.name == null)
147        this.name = new StringType();
148      this.name.setValue(value);
149      return this;
150    }
151
152    /**
153     * @return {@link #value} (If the parameter is a data type.)
154     */
155    public org.hl7.fhir.r4.model.Type getValue() {
156      return this.value;
157    }
158
159    public boolean hasValue() {
160      return this.value != null && !this.value.isEmpty();
161    }
162
163    /**
164     * @param value {@link #value} (If the parameter is a data type.)
165     */
166    public ParametersParameterComponent setValue(org.hl7.fhir.r4.model.Type value) {
167      this.value = value;
168      return this;
169    }
170
171    /**
172     * @return {@link #resource} (If the parameter is a whole resource.)
173     */
174    public Resource getResource() {
175      return this.resource;
176    }
177
178    public boolean hasResource() {
179      return this.resource != null && !this.resource.isEmpty();
180    }
181
182    /**
183     * @param value {@link #resource} (If the parameter is a whole resource.)
184     */
185    public ParametersParameterComponent setResource(Resource value) {
186      this.resource = value;
187      return this;
188    }
189
190    /**
191     * @return {@link #part} (A named part of a multi-part parameter.)
192     */
193    public List<ParametersParameterComponent> getPart() {
194      if (this.part == null)
195        this.part = new ArrayList<ParametersParameterComponent>();
196      return this.part;
197    }
198
199    /**
200     * @return Returns a reference to <code>this</code> for easy method chaining
201     */
202    public ParametersParameterComponent setPart(List<ParametersParameterComponent> thePart) {
203      this.part = thePart;
204      return this;
205    }
206
207    public boolean hasPart() {
208      if (this.part == null)
209        return false;
210      for (ParametersParameterComponent item : this.part)
211        if (!item.isEmpty())
212          return true;
213      return false;
214    }
215
216    public ParametersParameterComponent addPart() { // 3
217      ParametersParameterComponent t = new ParametersParameterComponent();
218      if (this.part == null)
219        this.part = new ArrayList<ParametersParameterComponent>();
220      this.part.add(t);
221      return t;
222    }
223
224    public ParametersParameterComponent addPart(ParametersParameterComponent t) { // 3
225      if (t == null)
226        return this;
227      if (this.part == null)
228        this.part = new ArrayList<ParametersParameterComponent>();
229      this.part.add(t);
230      return this;
231    }
232
233    /**
234     * @return The first repetition of repeating field {@link #part}, creating it if
235     *         it does not already exist
236     */
237    public ParametersParameterComponent getPartFirstRep() {
238      if (getPart().isEmpty()) {
239        addPart();
240      }
241      return getPart().get(0);
242    }
243
244    protected void listChildren(List<Property> children) {
245      super.listChildren(children);
246      children.add(new Property("name", "string", "The name of the parameter (reference to the operation definition).",
247          0, 1, name));
248      children.add(new Property("value[x]", "*", "If the parameter is a data type.", 0, 1, value));
249      children.add(new Property("resource", "Resource", "If the parameter is a whole resource.", 0, 1, resource));
250      children.add(new Property("part", "@Parameters.parameter", "A named part of a multi-part parameter.", 0,
251          java.lang.Integer.MAX_VALUE, part));
252    }
253
254    @Override
255    public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
256      switch (_hash) {
257      case 3373707:
258        /* name */ return new Property("name", "string",
259            "The name of the parameter (reference to the operation definition).", 0, 1, name);
260      case -1410166417:
261        /* value[x] */ return new Property("value[x]", "*", "If the parameter is a data type.", 0, 1, value);
262      case 111972721:
263        /* value */ return new Property("value[x]", "*", "If the parameter is a data type.", 0, 1, value);
264      case -1535024575:
265        /* valueBase64Binary */ return new Property("value[x]", "*", "If the parameter is a data type.", 0, 1, value);
266      case 733421943:
267        /* valueBoolean */ return new Property("value[x]", "*", "If the parameter is a data type.", 0, 1, value);
268      case -786218365:
269        /* valueCanonical */ return new Property("value[x]", "*", "If the parameter is a data type.", 0, 1, value);
270      case -766209282:
271        /* valueCode */ return new Property("value[x]", "*", "If the parameter is a data type.", 0, 1, value);
272      case -766192449:
273        /* valueDate */ return new Property("value[x]", "*", "If the parameter is a data type.", 0, 1, value);
274      case 1047929900:
275        /* valueDateTime */ return new Property("value[x]", "*", "If the parameter is a data type.", 0, 1, value);
276      case -2083993440:
277        /* valueDecimal */ return new Property("value[x]", "*", "If the parameter is a data type.", 0, 1, value);
278      case 231604844:
279        /* valueId */ return new Property("value[x]", "*", "If the parameter is a data type.", 0, 1, value);
280      case -1668687056:
281        /* valueInstant */ return new Property("value[x]", "*", "If the parameter is a data type.", 0, 1, value);
282      case -1668204915:
283        /* valueInteger */ return new Property("value[x]", "*", "If the parameter is a data type.", 0, 1, value);
284      case -497880704:
285        /* valueMarkdown */ return new Property("value[x]", "*", "If the parameter is a data type.", 0, 1, value);
286      case -1410178407:
287        /* valueOid */ return new Property("value[x]", "*", "If the parameter is a data type.", 0, 1, value);
288      case -1249932027:
289        /* valuePositiveInt */ return new Property("value[x]", "*", "If the parameter is a data type.", 0, 1, value);
290      case -1424603934:
291        /* valueString */ return new Property("value[x]", "*", "If the parameter is a data type.", 0, 1, value);
292      case -765708322:
293        /* valueTime */ return new Property("value[x]", "*", "If the parameter is a data type.", 0, 1, value);
294      case 26529417:
295        /* valueUnsignedInt */ return new Property("value[x]", "*", "If the parameter is a data type.", 0, 1, value);
296      case -1410172357:
297        /* valueUri */ return new Property("value[x]", "*", "If the parameter is a data type.", 0, 1, value);
298      case -1410172354:
299        /* valueUrl */ return new Property("value[x]", "*", "If the parameter is a data type.", 0, 1, value);
300      case -765667124:
301        /* valueUuid */ return new Property("value[x]", "*", "If the parameter is a data type.", 0, 1, value);
302      case -478981821:
303        /* valueAddress */ return new Property("value[x]", "*", "If the parameter is a data type.", 0, 1, value);
304      case -67108992:
305        /* valueAnnotation */ return new Property("value[x]", "*", "If the parameter is a data type.", 0, 1, value);
306      case -475566732:
307        /* valueAttachment */ return new Property("value[x]", "*", "If the parameter is a data type.", 0, 1, value);
308      case 924902896:
309        /* valueCodeableConcept */ return new Property("value[x]", "*", "If the parameter is a data type.", 0, 1,
310            value);
311      case -1887705029:
312        /* valueCoding */ return new Property("value[x]", "*", "If the parameter is a data type.", 0, 1, value);
313      case 944904545:
314        /* valueContactPoint */ return new Property("value[x]", "*", "If the parameter is a data type.", 0, 1, value);
315      case -2026205465:
316        /* valueHumanName */ return new Property("value[x]", "*", "If the parameter is a data type.", 0, 1, value);
317      case -130498310:
318        /* valueIdentifier */ return new Property("value[x]", "*", "If the parameter is a data type.", 0, 1, value);
319      case -1524344174:
320        /* valuePeriod */ return new Property("value[x]", "*", "If the parameter is a data type.", 0, 1, value);
321      case -2029823716:
322        /* valueQuantity */ return new Property("value[x]", "*", "If the parameter is a data type.", 0, 1, value);
323      case 2030761548:
324        /* valueRange */ return new Property("value[x]", "*", "If the parameter is a data type.", 0, 1, value);
325      case 2030767386:
326        /* valueRatio */ return new Property("value[x]", "*", "If the parameter is a data type.", 0, 1, value);
327      case 1755241690:
328        /* valueReference */ return new Property("value[x]", "*", "If the parameter is a data type.", 0, 1, value);
329      case -962229101:
330        /* valueSampledData */ return new Property("value[x]", "*", "If the parameter is a data type.", 0, 1, value);
331      case -540985785:
332        /* valueSignature */ return new Property("value[x]", "*", "If the parameter is a data type.", 0, 1, value);
333      case -1406282469:
334        /* valueTiming */ return new Property("value[x]", "*", "If the parameter is a data type.", 0, 1, value);
335      case -1858636920:
336        /* valueDosage */ return new Property("value[x]", "*", "If the parameter is a data type.", 0, 1, value);
337      case -341064690:
338        /* resource */ return new Property("resource", "Resource", "If the parameter is a whole resource.", 0, 1,
339            resource);
340      case 3433459:
341        /* part */ return new Property("part", "@Parameters.parameter", "A named part of a multi-part parameter.", 0,
342            java.lang.Integer.MAX_VALUE, part);
343      default:
344        return super.getNamedProperty(_hash, _name, _checkValid);
345      }
346
347    }
348
349    @Override
350    public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
351      switch (hash) {
352      case 3373707:
353        /* name */ return this.name == null ? new Base[0] : new Base[] { this.name }; // StringType
354      case 111972721:
355        /* value */ return this.value == null ? new Base[0] : new Base[] { this.value }; // org.hl7.fhir.r4.model.Type
356      case -341064690:
357        /* resource */ return this.resource == null ? new Base[0] : new Base[] { this.resource }; // Resource
358      case 3433459:
359        /* part */ return this.part == null ? new Base[0] : this.part.toArray(new Base[this.part.size()]); // ParametersParameterComponent
360      default:
361        return super.getProperty(hash, name, checkValid);
362      }
363
364    }
365
366    @Override
367    public Base setProperty(int hash, String name, Base value) throws FHIRException {
368      switch (hash) {
369      case 3373707: // name
370        this.name = castToString(value); // StringType
371        return value;
372      case 111972721: // value
373        this.value = castToType(value); // org.hl7.fhir.r4.model.Type
374        return value;
375      case -341064690: // resource
376        this.resource = castToResource(value); // Resource
377        return value;
378      case 3433459: // part
379        this.getPart().add((ParametersParameterComponent) value); // ParametersParameterComponent
380        return value;
381      default:
382        return super.setProperty(hash, name, value);
383      }
384
385    }
386
387    @Override
388    public Base setProperty(String name, Base value) throws FHIRException {
389      if (name.equals("name")) {
390        this.name = castToString(value); // StringType
391      } else if (name.equals("value[x]")) {
392        this.value = castToType(value); // org.hl7.fhir.r4.model.Type
393      } else if (name.equals("resource")) {
394        this.resource = castToResource(value); // Resource
395      } else if (name.equals("part")) {
396        this.getPart().add((ParametersParameterComponent) value);
397      } else
398        return super.setProperty(name, value);
399      return value;
400    }
401
402    @Override
403    public Base makeProperty(int hash, String name) throws FHIRException {
404      switch (hash) {
405      case 3373707:
406        return getNameElement();
407      case -1410166417:
408        return getValue();
409      case 111972721:
410        return getValue();
411      case -341064690:
412        throw new FHIRException("Cannot make property resource as it is not a complex type"); // Resource
413      case 3433459:
414        return addPart();
415      default:
416        return super.makeProperty(hash, name);
417      }
418
419    }
420
421    @Override
422    public String[] getTypesForProperty(int hash, String name) throws FHIRException {
423      switch (hash) {
424      case 3373707:
425        /* name */ return new String[] { "string" };
426      case 111972721:
427        /* value */ return new String[] { "*" };
428      case -341064690:
429        /* resource */ return new String[] { "Resource" };
430      case 3433459:
431        /* part */ return new String[] { "@Parameters.parameter" };
432      default:
433        return super.getTypesForProperty(hash, name);
434      }
435
436    }
437
438    @Override
439    public Base addChild(String name) throws FHIRException {
440      if (name.equals("name")) {
441        throw new FHIRException("Cannot call addChild on a singleton property Parameters.name");
442      } else if (name.equals("valueBase64Binary")) {
443        this.value = new Base64BinaryType();
444        return this.value;
445      } else if (name.equals("valueBoolean")) {
446        this.value = new BooleanType();
447        return this.value;
448      } else if (name.equals("valueCanonical")) {
449        this.value = new CanonicalType();
450        return this.value;
451      } else if (name.equals("valueCode")) {
452        this.value = new CodeType();
453        return this.value;
454      } else if (name.equals("valueDate")) {
455        this.value = new DateType();
456        return this.value;
457      } else if (name.equals("valueDateTime")) {
458        this.value = new DateTimeType();
459        return this.value;
460      } else if (name.equals("valueDecimal")) {
461        this.value = new DecimalType();
462        return this.value;
463      } else if (name.equals("valueId")) {
464        this.value = new IdType();
465        return this.value;
466      } else if (name.equals("valueInstant")) {
467        this.value = new InstantType();
468        return this.value;
469      } else if (name.equals("valueInteger")) {
470        this.value = new IntegerType();
471        return this.value;
472      } else if (name.equals("valueMarkdown")) {
473        this.value = new MarkdownType();
474        return this.value;
475      } else if (name.equals("valueOid")) {
476        this.value = new OidType();
477        return this.value;
478      } else if (name.equals("valuePositiveInt")) {
479        this.value = new PositiveIntType();
480        return this.value;
481      } else if (name.equals("valueString")) {
482        this.value = new StringType();
483        return this.value;
484      } else if (name.equals("valueTime")) {
485        this.value = new TimeType();
486        return this.value;
487      } else if (name.equals("valueUnsignedInt")) {
488        this.value = new UnsignedIntType();
489        return this.value;
490      } else if (name.equals("valueUri")) {
491        this.value = new UriType();
492        return this.value;
493      } else if (name.equals("valueUrl")) {
494        this.value = new UrlType();
495        return this.value;
496      } else if (name.equals("valueUuid")) {
497        this.value = new UuidType();
498        return this.value;
499      } else if (name.equals("valueAddress")) {
500        this.value = new Address();
501        return this.value;
502      } else if (name.equals("valueAge")) {
503        this.value = new Age();
504        return this.value;
505      } else if (name.equals("valueAnnotation")) {
506        this.value = new Annotation();
507        return this.value;
508      } else if (name.equals("valueAttachment")) {
509        this.value = new Attachment();
510        return this.value;
511      } else if (name.equals("valueCodeableConcept")) {
512        this.value = new CodeableConcept();
513        return this.value;
514      } else if (name.equals("valueCoding")) {
515        this.value = new Coding();
516        return this.value;
517      } else if (name.equals("valueContactPoint")) {
518        this.value = new ContactPoint();
519        return this.value;
520      } else if (name.equals("valueCount")) {
521        this.value = new Count();
522        return this.value;
523      } else if (name.equals("valueDistance")) {
524        this.value = new Distance();
525        return this.value;
526      } else if (name.equals("valueDuration")) {
527        this.value = new Duration();
528        return this.value;
529      } else if (name.equals("valueHumanName")) {
530        this.value = new HumanName();
531        return this.value;
532      } else if (name.equals("valueIdentifier")) {
533        this.value = new Identifier();
534        return this.value;
535      } else if (name.equals("valueMoney")) {
536        this.value = new Money();
537        return this.value;
538      } else if (name.equals("valuePeriod")) {
539        this.value = new Period();
540        return this.value;
541      } else if (name.equals("valueQuantity")) {
542        this.value = new Quantity();
543        return this.value;
544      } else if (name.equals("valueRange")) {
545        this.value = new Range();
546        return this.value;
547      } else if (name.equals("valueRatio")) {
548        this.value = new Ratio();
549        return this.value;
550      } else if (name.equals("valueReference")) {
551        this.value = new Reference();
552        return this.value;
553      } else if (name.equals("valueSampledData")) {
554        this.value = new SampledData();
555        return this.value;
556      } else if (name.equals("valueSignature")) {
557        this.value = new Signature();
558        return this.value;
559      } else if (name.equals("valueTiming")) {
560        this.value = new Timing();
561        return this.value;
562      } else if (name.equals("valueContactDetail")) {
563        this.value = new ContactDetail();
564        return this.value;
565      } else if (name.equals("valueContributor")) {
566        this.value = new Contributor();
567        return this.value;
568      } else if (name.equals("valueDataRequirement")) {
569        this.value = new DataRequirement();
570        return this.value;
571      } else if (name.equals("valueExpression")) {
572        this.value = new Expression();
573        return this.value;
574      } else if (name.equals("valueParameterDefinition")) {
575        this.value = new ParameterDefinition();
576        return this.value;
577      } else if (name.equals("valueRelatedArtifact")) {
578        this.value = new RelatedArtifact();
579        return this.value;
580      } else if (name.equals("valueTriggerDefinition")) {
581        this.value = new TriggerDefinition();
582        return this.value;
583      } else if (name.equals("valueUsageContext")) {
584        this.value = new UsageContext();
585        return this.value;
586      } else if (name.equals("valueDosage")) {
587        this.value = new Dosage();
588        return this.value;
589      } else if (name.equals("valueMeta")) {
590        this.value = new Meta();
591        return this.value;
592      } else if (name.equals("resource")) {
593        throw new FHIRException("Cannot call addChild on an abstract type Parameters.resource");
594      } else if (name.equals("part")) {
595        return addPart();
596      } else
597        return super.addChild(name);
598    }
599
600    public ParametersParameterComponent copy() {
601      ParametersParameterComponent dst = new ParametersParameterComponent();
602      copyValues(dst);
603      return dst;
604    }
605
606    public void copyValues(ParametersParameterComponent dst) {
607      super.copyValues(dst);
608      dst.name = name == null ? null : name.copy();
609      dst.value = value == null ? null : value.copy();
610      dst.resource = resource == null ? null : resource.copy();
611      if (part != null) {
612        dst.part = new ArrayList<ParametersParameterComponent>();
613        for (ParametersParameterComponent i : part)
614          dst.part.add(i.copy());
615      }
616      ;
617    }
618
619    @Override
620    public boolean equalsDeep(Base other_) {
621      if (!super.equalsDeep(other_))
622        return false;
623      if (!(other_ instanceof ParametersParameterComponent))
624        return false;
625      ParametersParameterComponent o = (ParametersParameterComponent) other_;
626      return compareDeep(name, o.name, true) && compareDeep(value, o.value, true)
627          && compareDeep(resource, o.resource, true) && compareDeep(part, o.part, true);
628    }
629
630    @Override
631    public boolean equalsShallow(Base other_) {
632      if (!super.equalsShallow(other_))
633        return false;
634      if (!(other_ instanceof ParametersParameterComponent))
635        return false;
636      ParametersParameterComponent o = (ParametersParameterComponent) other_;
637      return compareValues(name, o.name, true);
638    }
639
640    public boolean isEmpty() {
641      return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(name, value, resource, part);
642    }
643
644    public String fhirType() {
645      return "Parameters.parameter";
646
647    }
648
649  }
650
651  /**
652   * A parameter passed to or received from the operation.
653   */
654  @Child(name = "parameter", type = {}, order = 0, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = true)
655  @Description(shortDefinition = "Operation Parameter", formalDefinition = "A parameter passed to or received from the operation.")
656  protected List<ParametersParameterComponent> parameter;
657
658  private static final long serialVersionUID = -1495940293L;
659
660  /**
661   * Constructor
662   */
663  public Parameters() {
664    super();
665  }
666
667  /**
668   * @return {@link #parameter} (A parameter passed to or received from the
669   *         operation.)
670   */
671  public List<ParametersParameterComponent> getParameter() {
672    if (this.parameter == null)
673      this.parameter = new ArrayList<ParametersParameterComponent>();
674    return this.parameter;
675  }
676
677  /**
678   * @return Returns a reference to <code>this</code> for easy method chaining
679   */
680  public Parameters setParameter(List<ParametersParameterComponent> theParameter) {
681    this.parameter = theParameter;
682    return this;
683  }
684
685  public boolean hasParameter() {
686    if (this.parameter == null)
687      return false;
688    for (ParametersParameterComponent item : this.parameter)
689      if (!item.isEmpty())
690        return true;
691    return false;
692  }
693
694  public ParametersParameterComponent addParameter() { // 3
695    ParametersParameterComponent t = new ParametersParameterComponent();
696    if (this.parameter == null)
697      this.parameter = new ArrayList<ParametersParameterComponent>();
698    this.parameter.add(t);
699    return t;
700  }
701
702  public Parameters addParameter(ParametersParameterComponent t) { // 3
703    if (t == null)
704      return this;
705    if (this.parameter == null)
706      this.parameter = new ArrayList<ParametersParameterComponent>();
707    this.parameter.add(t);
708    return this;
709  }
710
711  /**
712   * @return The first repetition of repeating field {@link #parameter}, creating
713   *         it if it does not already exist
714   */
715  public ParametersParameterComponent getParameterFirstRep() {
716    if (getParameter().isEmpty()) {
717      addParameter();
718    }
719    return getParameter().get(0);
720  }
721
722  protected void listChildren(List<Property> children) {
723    super.listChildren(children);
724    children.add(new Property("parameter", "", "A parameter passed to or received from the operation.", 0,
725        java.lang.Integer.MAX_VALUE, parameter));
726  }
727
728  @Override
729  public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
730    switch (_hash) {
731    case 1954460585:
732      /* parameter */ return new Property("parameter", "", "A parameter passed to or received from the operation.", 0,
733          java.lang.Integer.MAX_VALUE, parameter);
734    default:
735      return super.getNamedProperty(_hash, _name, _checkValid);
736    }
737
738  }
739
740  @Override
741  public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
742    switch (hash) {
743    case 1954460585:
744      /* parameter */ return this.parameter == null ? new Base[0]
745          : this.parameter.toArray(new Base[this.parameter.size()]); // ParametersParameterComponent
746    default:
747      return super.getProperty(hash, name, checkValid);
748    }
749
750  }
751
752  @Override
753  public Base setProperty(int hash, String name, Base value) throws FHIRException {
754    switch (hash) {
755    case 1954460585: // parameter
756      this.getParameter().add((ParametersParameterComponent) value); // ParametersParameterComponent
757      return value;
758    default:
759      return super.setProperty(hash, name, value);
760    }
761
762  }
763
764  @Override
765  public Base setProperty(String name, Base value) throws FHIRException {
766    if (name.equals("parameter")) {
767      this.getParameter().add((ParametersParameterComponent) value);
768    } else
769      return super.setProperty(name, value);
770    return value;
771  }
772
773  @Override
774  public Base makeProperty(int hash, String name) throws FHIRException {
775    switch (hash) {
776    case 1954460585:
777      return addParameter();
778    default:
779      return super.makeProperty(hash, name);
780    }
781
782  }
783
784  @Override
785  public String[] getTypesForProperty(int hash, String name) throws FHIRException {
786    switch (hash) {
787    case 1954460585:
788      /* parameter */ return new String[] {};
789    default:
790      return super.getTypesForProperty(hash, name);
791    }
792
793  }
794
795  @Override
796  public Base addChild(String name) throws FHIRException {
797    if (name.equals("parameter")) {
798      return addParameter();
799    } else
800      return super.addChild(name);
801  }
802
803  public String fhirType() {
804    return "Parameters";
805
806  }
807
808  public Parameters copy() {
809    Parameters dst = new Parameters();
810    copyValues(dst);
811    return dst;
812  }
813
814  public void copyValues(Parameters dst) {
815    super.copyValues(dst);
816    if (parameter != null) {
817      dst.parameter = new ArrayList<ParametersParameterComponent>();
818      for (ParametersParameterComponent i : parameter)
819        dst.parameter.add(i.copy());
820    }
821    ;
822  }
823
824  protected Parameters typedCopy() {
825    return copy();
826  }
827
828  @Override
829  public boolean equalsDeep(Base other_) {
830    if (!super.equalsDeep(other_))
831      return false;
832    if (!(other_ instanceof Parameters))
833      return false;
834    Parameters o = (Parameters) other_;
835    return compareDeep(parameter, o.parameter, true);
836  }
837
838  @Override
839  public boolean equalsShallow(Base other_) {
840    if (!super.equalsShallow(other_))
841      return false;
842    if (!(other_ instanceof Parameters))
843      return false;
844    Parameters o = (Parameters) other_;
845    return true;
846  }
847
848  public boolean isEmpty() {
849    return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(parameter);
850  }
851
852  @Override
853  public ResourceType getResourceType() {
854    return ResourceType.Parameters;
855  }
856
857// added from java-adornments.txt:
858
859  public Parameters addParameter(String name, boolean b) {
860    addParameter().setName(name).setValue(new BooleanType(b));
861    return this;
862  }
863
864  public Parameters addParameter(String name, String s) {
865    if (s != null)
866      addParameter().setName(name).setValue(new StringType(s));
867    return this;
868  }
869
870  public Parameters addParameter(String name, Type v) {
871    if (v != null)
872      addParameter().setName(name).setValue(v);
873    return this;
874  }
875
876  public Parameters setParameter(String name, boolean b) {
877    for (ParametersParameterComponent p : getParameter()) {
878      if (p.getName().equals(name)) {
879        p.setValue(new BooleanType(b));
880        return this;
881      }
882    }
883    addParameter().setName(name).setValue(new BooleanType(b));
884    return this;
885  }
886
887  public Parameters setParameter(String name, String s) {
888    if (s != null) {
889      for (ParametersParameterComponent p : getParameter()) {
890        if (p.getName().equals(name)) {
891          p.setValue(new StringType(s));
892          return this;
893        }
894      }
895      addParameter().setName(name).setValue(new StringType(s));
896    }
897    return this;
898  }
899
900  public Parameters setParameter(String name, Type v) {
901    if (v != null) {
902      for (ParametersParameterComponent p : getParameter()) {
903        if (p.getName().equals(name)) {
904          p.setValue(v);
905          return this;
906        }
907      }
908      addParameter().setName(name).setValue(v);
909    }
910    return this;
911  }
912
913  public boolean hasParameterValue(String name) {
914    for (ParametersParameterComponent p : getParameter()) {
915      if (p.getName().equals(name) && p.hasValue())
916        return true;
917    }
918    return false;
919  }
920
921  public boolean hasParameter(String name) {
922    for (ParametersParameterComponent p : getParameter()) {
923      if (p.getName().equals(name))
924        return true;
925    }
926    return false;
927  }
928
929  public Type getParameterValue(String name) {
930    for (ParametersParameterComponent p : getParameter()) {
931      if (p.getName().equals(name))
932        return p.getValue();
933    }
934    return null;
935  }
936
937  public ParametersParameterComponent getParameter(String name) {
938    for (ParametersParameterComponent p : getParameter()) {
939      if (p.getName().equals(name))
940        return p;
941    }
942    return null;
943  }
944
945  public List<Type> getParameterValues(String name) {
946    List<Type> res = new ArrayList<Type>();
947    for (ParametersParameterComponent p : getParameter()) {
948      if (p.getName().equals(name))
949        res.add(p.getValue());
950    }
951    return res;
952  }
953
954  public List<ParametersParameterComponent> getParameters(String name) {
955    List<ParametersParameterComponent> res = new ArrayList<ParametersParameterComponent>();
956    for (ParametersParameterComponent p : getParameter()) {
957      if (p.getName().equals(name))
958        res.add(p);
959    }
960    return res;
961  }
962
963  public boolean getParameterBool(String name) {
964    for (ParametersParameterComponent p : getParameter()) {
965      if (p.getName().equals(name)) {
966        if (p.getValue() instanceof BooleanType)
967          return ((BooleanType) p.getValue()).booleanValue();
968        boolean ok = Boolean.getBoolean(p.getValue().primitiveValue());
969        return ok;
970      }
971    }
972    return false;
973  }
974
975// end addition
976
977}