001package org.hl7.fhir.r5.model;
002
003
004/*
005  Copyright (c) 2011+, HL7, Inc.
006  All rights reserved.
007  
008  Redistribution and use in source and binary forms, with or without modification, \
009  are permitted provided that the following conditions are met:
010  
011   * Redistributions of source code must retain the above copyright notice, this \
012     list of conditions and the following disclaimer.
013   * Redistributions in binary form must reproduce the above copyright notice, \
014     this list of conditions and the following disclaimer in the documentation \
015     and/or other materials provided with the distribution.
016   * Neither the name of HL7 nor the names of its contributors may be used to 
017     endorse or promote products derived from this software without specific 
018     prior written permission.
019  
020  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND \
021  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED \
022  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. \
023  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, \
024  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT \
025  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR \
026  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, \
027  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) \
028  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE \
029  POSSIBILITY OF SUCH DAMAGE.
030  */
031
032// Generated on Fri, Jul 15, 2022 11:20+1000 for FHIR v5.0.0-snapshot2
033
034import java.util.ArrayList;
035import java.util.Date;
036import java.util.List;
037import org.hl7.fhir.utilities.Utilities;
038import org.hl7.fhir.r5.model.Enumerations.*;
039import org.hl7.fhir.instance.model.api.IBaseDatatypeElement;
040import org.hl7.fhir.exceptions.FHIRException;
041import org.hl7.fhir.instance.model.api.ICompositeType;
042import ca.uhn.fhir.model.api.annotation.Child;
043import ca.uhn.fhir.model.api.annotation.ChildOrder;
044import ca.uhn.fhir.model.api.annotation.DatatypeDef;
045import ca.uhn.fhir.model.api.annotation.Description;
046import ca.uhn.fhir.model.api.annotation.Block;
047
048/**
049 * Base StructureDefinition for ParameterDefinition Type: The parameters to the module. This collection specifies both the input and output parameters. Input parameters are provided by the caller as part of the $evaluate operation. Output parameters are included in the GuidanceResponse.
050 */
051@DatatypeDef(name="ParameterDefinition")
052public class ParameterDefinition extends DataType implements ICompositeType {
053
054    /**
055     * The name of the parameter used to allow access to the value of the parameter in evaluation contexts.
056     */
057    @Child(name = "name", type = {CodeType.class}, order=0, min=0, max=1, modifier=false, summary=true)
058    @Description(shortDefinition="Name used to access the parameter value", formalDefinition="The name of the parameter used to allow access to the value of the parameter in evaluation contexts." )
059    protected CodeType name;
060
061    /**
062     * Whether the parameter is input or output for the module.
063     */
064    @Child(name = "use", type = {CodeType.class}, order=1, min=1, max=1, modifier=false, summary=true)
065    @Description(shortDefinition="in | out", formalDefinition="Whether the parameter is input or output for the module." )
066    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/operation-parameter-use")
067    protected Enumeration<OperationParameterUse> use;
068
069    /**
070     * The minimum number of times this parameter SHALL appear in the request or response.
071     */
072    @Child(name = "min", type = {IntegerType.class}, order=2, min=0, max=1, modifier=false, summary=true)
073    @Description(shortDefinition="Minimum cardinality", formalDefinition="The minimum number of times this parameter SHALL appear in the request or response." )
074    protected IntegerType min;
075
076    /**
077     * The maximum number of times this element is permitted to appear in the request or response.
078     */
079    @Child(name = "max", type = {StringType.class}, order=3, min=0, max=1, modifier=false, summary=true)
080    @Description(shortDefinition="Maximum cardinality (a number of *)", formalDefinition="The maximum number of times this element is permitted to appear in the request or response." )
081    protected StringType max;
082
083    /**
084     * A brief discussion of what the parameter is for and how it is used by the module.
085     */
086    @Child(name = "documentation", type = {StringType.class}, order=4, min=0, max=1, modifier=false, summary=true)
087    @Description(shortDefinition="A brief description of the parameter", formalDefinition="A brief discussion of what the parameter is for and how it is used by the module." )
088    protected StringType documentation;
089
090    /**
091     * The type of the parameter.
092     */
093    @Child(name = "type", type = {CodeType.class}, order=5, min=1, max=1, modifier=false, summary=true)
094    @Description(shortDefinition="What type of value", formalDefinition="The type of the parameter." )
095    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/all-types")
096    protected Enumeration<FHIRAllTypes> type;
097
098    /**
099     * If specified, this indicates a profile that the input data must conform to, or that the output data will conform to.
100     */
101    @Child(name = "profile", type = {CanonicalType.class}, order=6, min=0, max=1, modifier=false, summary=true)
102    @Description(shortDefinition="What profile the value is expected to be", formalDefinition="If specified, this indicates a profile that the input data must conform to, or that the output data will conform to." )
103    protected CanonicalType profile;
104
105    private static final long serialVersionUID = -1132749008L;
106
107  /**
108   * Constructor
109   */
110    public ParameterDefinition() {
111      super();
112    }
113
114  /**
115   * Constructor
116   */
117    public ParameterDefinition(OperationParameterUse use, FHIRAllTypes type) {
118      super();
119      this.setUse(use);
120      this.setType(type);
121    }
122
123    /**
124     * @return {@link #name} (The name of the parameter used to allow access to the value of the parameter in evaluation contexts.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
125     */
126    public CodeType getNameElement() { 
127      if (this.name == null)
128        if (Configuration.errorOnAutoCreate())
129          throw new Error("Attempt to auto-create ParameterDefinition.name");
130        else if (Configuration.doAutoCreate())
131          this.name = new CodeType(); // bb
132      return this.name;
133    }
134
135    public boolean hasNameElement() { 
136      return this.name != null && !this.name.isEmpty();
137    }
138
139    public boolean hasName() { 
140      return this.name != null && !this.name.isEmpty();
141    }
142
143    /**
144     * @param value {@link #name} (The name of the parameter used to allow access to the value of the parameter in evaluation contexts.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
145     */
146    public ParameterDefinition setNameElement(CodeType value) { 
147      this.name = value;
148      return this;
149    }
150
151    /**
152     * @return The name of the parameter used to allow access to the value of the parameter in evaluation contexts.
153     */
154    public String getName() { 
155      return this.name == null ? null : this.name.getValue();
156    }
157
158    /**
159     * @param value The name of the parameter used to allow access to the value of the parameter in evaluation contexts.
160     */
161    public ParameterDefinition setName(String value) { 
162      if (Utilities.noString(value))
163        this.name = null;
164      else {
165        if (this.name == null)
166          this.name = new CodeType();
167        this.name.setValue(value);
168      }
169      return this;
170    }
171
172    /**
173     * @return {@link #use} (Whether the parameter is input or output for the module.). This is the underlying object with id, value and extensions. The accessor "getUse" gives direct access to the value
174     */
175    public Enumeration<OperationParameterUse> getUseElement() { 
176      if (this.use == null)
177        if (Configuration.errorOnAutoCreate())
178          throw new Error("Attempt to auto-create ParameterDefinition.use");
179        else if (Configuration.doAutoCreate())
180          this.use = new Enumeration<OperationParameterUse>(new OperationParameterUseEnumFactory()); // bb
181      return this.use;
182    }
183
184    public boolean hasUseElement() { 
185      return this.use != null && !this.use.isEmpty();
186    }
187
188    public boolean hasUse() { 
189      return this.use != null && !this.use.isEmpty();
190    }
191
192    /**
193     * @param value {@link #use} (Whether the parameter is input or output for the module.). This is the underlying object with id, value and extensions. The accessor "getUse" gives direct access to the value
194     */
195    public ParameterDefinition setUseElement(Enumeration<OperationParameterUse> value) { 
196      this.use = value;
197      return this;
198    }
199
200    /**
201     * @return Whether the parameter is input or output for the module.
202     */
203    public OperationParameterUse getUse() { 
204      return this.use == null ? null : this.use.getValue();
205    }
206
207    /**
208     * @param value Whether the parameter is input or output for the module.
209     */
210    public ParameterDefinition setUse(OperationParameterUse value) { 
211        if (this.use == null)
212          this.use = new Enumeration<OperationParameterUse>(new OperationParameterUseEnumFactory());
213        this.use.setValue(value);
214      return this;
215    }
216
217    /**
218     * @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
219     */
220    public IntegerType getMinElement() { 
221      if (this.min == null)
222        if (Configuration.errorOnAutoCreate())
223          throw new Error("Attempt to auto-create ParameterDefinition.min");
224        else if (Configuration.doAutoCreate())
225          this.min = new IntegerType(); // bb
226      return this.min;
227    }
228
229    public boolean hasMinElement() { 
230      return this.min != null && !this.min.isEmpty();
231    }
232
233    public boolean hasMin() { 
234      return this.min != null && !this.min.isEmpty();
235    }
236
237    /**
238     * @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
239     */
240    public ParameterDefinition setMinElement(IntegerType value) { 
241      this.min = value;
242      return this;
243    }
244
245    /**
246     * @return The minimum number of times this parameter SHALL appear in the request or response.
247     */
248    public int getMin() { 
249      return this.min == null || this.min.isEmpty() ? 0 : this.min.getValue();
250    }
251
252    /**
253     * @param value The minimum number of times this parameter SHALL appear in the request or response.
254     */
255    public ParameterDefinition setMin(int value) { 
256        if (this.min == null)
257          this.min = new IntegerType();
258        this.min.setValue(value);
259      return this;
260    }
261
262    /**
263     * @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
264     */
265    public StringType getMaxElement() { 
266      if (this.max == null)
267        if (Configuration.errorOnAutoCreate())
268          throw new Error("Attempt to auto-create ParameterDefinition.max");
269        else if (Configuration.doAutoCreate())
270          this.max = new StringType(); // bb
271      return this.max;
272    }
273
274    public boolean hasMaxElement() { 
275      return this.max != null && !this.max.isEmpty();
276    }
277
278    public boolean hasMax() { 
279      return this.max != null && !this.max.isEmpty();
280    }
281
282    /**
283     * @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
284     */
285    public ParameterDefinition setMaxElement(StringType value) { 
286      this.max = value;
287      return this;
288    }
289
290    /**
291     * @return The maximum number of times this element is permitted to appear in the request or response.
292     */
293    public String getMax() { 
294      return this.max == null ? null : this.max.getValue();
295    }
296
297    /**
298     * @param value The maximum number of times this element is permitted to appear in the request or response.
299     */
300    public ParameterDefinition setMax(String value) { 
301      if (Utilities.noString(value))
302        this.max = null;
303      else {
304        if (this.max == null)
305          this.max = new StringType();
306        this.max.setValue(value);
307      }
308      return this;
309    }
310
311    /**
312     * @return {@link #documentation} (A brief discussion of what the parameter is for and how it is used by the module.). This is the underlying object with id, value and extensions. The accessor "getDocumentation" gives direct access to the value
313     */
314    public StringType getDocumentationElement() { 
315      if (this.documentation == null)
316        if (Configuration.errorOnAutoCreate())
317          throw new Error("Attempt to auto-create ParameterDefinition.documentation");
318        else if (Configuration.doAutoCreate())
319          this.documentation = new StringType(); // bb
320      return this.documentation;
321    }
322
323    public boolean hasDocumentationElement() { 
324      return this.documentation != null && !this.documentation.isEmpty();
325    }
326
327    public boolean hasDocumentation() { 
328      return this.documentation != null && !this.documentation.isEmpty();
329    }
330
331    /**
332     * @param value {@link #documentation} (A brief discussion of what the parameter is for and how it is used by the module.). This is the underlying object with id, value and extensions. The accessor "getDocumentation" gives direct access to the value
333     */
334    public ParameterDefinition setDocumentationElement(StringType value) { 
335      this.documentation = value;
336      return this;
337    }
338
339    /**
340     * @return A brief discussion of what the parameter is for and how it is used by the module.
341     */
342    public String getDocumentation() { 
343      return this.documentation == null ? null : this.documentation.getValue();
344    }
345
346    /**
347     * @param value A brief discussion of what the parameter is for and how it is used by the module.
348     */
349    public ParameterDefinition setDocumentation(String value) { 
350      if (Utilities.noString(value))
351        this.documentation = null;
352      else {
353        if (this.documentation == null)
354          this.documentation = new StringType();
355        this.documentation.setValue(value);
356      }
357      return this;
358    }
359
360    /**
361     * @return {@link #type} (The type of the parameter.). This is the underlying object with id, value and extensions. The accessor "getType" gives direct access to the value
362     */
363    public Enumeration<FHIRAllTypes> getTypeElement() { 
364      if (this.type == null)
365        if (Configuration.errorOnAutoCreate())
366          throw new Error("Attempt to auto-create ParameterDefinition.type");
367        else if (Configuration.doAutoCreate())
368          this.type = new Enumeration<FHIRAllTypes>(new FHIRAllTypesEnumFactory()); // bb
369      return this.type;
370    }
371
372    public boolean hasTypeElement() { 
373      return this.type != null && !this.type.isEmpty();
374    }
375
376    public boolean hasType() { 
377      return this.type != null && !this.type.isEmpty();
378    }
379
380    /**
381     * @param value {@link #type} (The type of the parameter.). This is the underlying object with id, value and extensions. The accessor "getType" gives direct access to the value
382     */
383    public ParameterDefinition setTypeElement(Enumeration<FHIRAllTypes> value) { 
384      this.type = value;
385      return this;
386    }
387
388    /**
389     * @return The type of the parameter.
390     */
391    public FHIRAllTypes getType() { 
392      return this.type == null ? null : this.type.getValue();
393    }
394
395    /**
396     * @param value The type of the parameter.
397     */
398    public ParameterDefinition setType(FHIRAllTypes value) { 
399        if (this.type == null)
400          this.type = new Enumeration<FHIRAllTypes>(new FHIRAllTypesEnumFactory());
401        this.type.setValue(value);
402      return this;
403    }
404
405    /**
406     * @return {@link #profile} (If specified, this indicates a profile that the input data must conform to, or that the output data will conform to.). This is the underlying object with id, value and extensions. The accessor "getProfile" gives direct access to the value
407     */
408    public CanonicalType getProfileElement() { 
409      if (this.profile == null)
410        if (Configuration.errorOnAutoCreate())
411          throw new Error("Attempt to auto-create ParameterDefinition.profile");
412        else if (Configuration.doAutoCreate())
413          this.profile = new CanonicalType(); // bb
414      return this.profile;
415    }
416
417    public boolean hasProfileElement() { 
418      return this.profile != null && !this.profile.isEmpty();
419    }
420
421    public boolean hasProfile() { 
422      return this.profile != null && !this.profile.isEmpty();
423    }
424
425    /**
426     * @param value {@link #profile} (If specified, this indicates a profile that the input data must conform to, or that the output data will conform to.). This is the underlying object with id, value and extensions. The accessor "getProfile" gives direct access to the value
427     */
428    public ParameterDefinition setProfileElement(CanonicalType value) { 
429      this.profile = value;
430      return this;
431    }
432
433    /**
434     * @return If specified, this indicates a profile that the input data must conform to, or that the output data will conform to.
435     */
436    public String getProfile() { 
437      return this.profile == null ? null : this.profile.getValue();
438    }
439
440    /**
441     * @param value If specified, this indicates a profile that the input data must conform to, or that the output data will conform to.
442     */
443    public ParameterDefinition setProfile(String value) { 
444      if (Utilities.noString(value))
445        this.profile = null;
446      else {
447        if (this.profile == null)
448          this.profile = new CanonicalType();
449        this.profile.setValue(value);
450      }
451      return this;
452    }
453
454      protected void listChildren(List<Property> children) {
455        super.listChildren(children);
456        children.add(new Property("name", "code", "The name of the parameter used to allow access to the value of the parameter in evaluation contexts.", 0, 1, name));
457        children.add(new Property("use", "code", "Whether the parameter is input or output for the module.", 0, 1, use));
458        children.add(new Property("min", "integer", "The minimum number of times this parameter SHALL appear in the request or response.", 0, 1, min));
459        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));
460        children.add(new Property("documentation", "string", "A brief discussion of what the parameter is for and how it is used by the module.", 0, 1, documentation));
461        children.add(new Property("type", "code", "The type of the parameter.", 0, 1, type));
462        children.add(new Property("profile", "canonical(StructureDefinition)", "If specified, this indicates a profile that the input data must conform to, or that the output data will conform to.", 0, 1, profile));
463      }
464
465      @Override
466      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
467        switch (_hash) {
468        case 3373707: /*name*/  return new Property("name", "code", "The name of the parameter used to allow access to the value of the parameter in evaluation contexts.", 0, 1, name);
469        case 116103: /*use*/  return new Property("use", "code", "Whether the parameter is input or output for the module.", 0, 1, use);
470        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);
471        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);
472        case 1587405498: /*documentation*/  return new Property("documentation", "string", "A brief discussion of what the parameter is for and how it is used by the module.", 0, 1, documentation);
473        case 3575610: /*type*/  return new Property("type", "code", "The type of the parameter.", 0, 1, type);
474        case -309425751: /*profile*/  return new Property("profile", "canonical(StructureDefinition)", "If specified, this indicates a profile that the input data must conform to, or that the output data will conform to.", 0, 1, profile);
475        default: return super.getNamedProperty(_hash, _name, _checkValid);
476        }
477
478      }
479
480      @Override
481      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
482        switch (hash) {
483        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // CodeType
484        case 116103: /*use*/ return this.use == null ? new Base[0] : new Base[] {this.use}; // Enumeration<OperationParameterUse>
485        case 108114: /*min*/ return this.min == null ? new Base[0] : new Base[] {this.min}; // IntegerType
486        case 107876: /*max*/ return this.max == null ? new Base[0] : new Base[] {this.max}; // StringType
487        case 1587405498: /*documentation*/ return this.documentation == null ? new Base[0] : new Base[] {this.documentation}; // StringType
488        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // Enumeration<FHIRAllTypes>
489        case -309425751: /*profile*/ return this.profile == null ? new Base[0] : new Base[] {this.profile}; // CanonicalType
490        default: return super.getProperty(hash, name, checkValid);
491        }
492
493      }
494
495      @Override
496      public Base setProperty(int hash, String name, Base value) throws FHIRException {
497        switch (hash) {
498        case 3373707: // name
499          this.name = TypeConvertor.castToCode(value); // CodeType
500          return value;
501        case 116103: // use
502          value = new OperationParameterUseEnumFactory().fromType(TypeConvertor.castToCode(value));
503          this.use = (Enumeration) value; // Enumeration<OperationParameterUse>
504          return value;
505        case 108114: // min
506          this.min = TypeConvertor.castToInteger(value); // IntegerType
507          return value;
508        case 107876: // max
509          this.max = TypeConvertor.castToString(value); // StringType
510          return value;
511        case 1587405498: // documentation
512          this.documentation = TypeConvertor.castToString(value); // StringType
513          return value;
514        case 3575610: // type
515          value = new FHIRAllTypesEnumFactory().fromType(TypeConvertor.castToCode(value));
516          this.type = (Enumeration) value; // Enumeration<FHIRAllTypes>
517          return value;
518        case -309425751: // profile
519          this.profile = TypeConvertor.castToCanonical(value); // CanonicalType
520          return value;
521        default: return super.setProperty(hash, name, value);
522        }
523
524      }
525
526      @Override
527      public Base setProperty(String name, Base value) throws FHIRException {
528        if (name.equals("name")) {
529          this.name = TypeConvertor.castToCode(value); // CodeType
530        } else if (name.equals("use")) {
531          value = new OperationParameterUseEnumFactory().fromType(TypeConvertor.castToCode(value));
532          this.use = (Enumeration) value; // Enumeration<OperationParameterUse>
533        } else if (name.equals("min")) {
534          this.min = TypeConvertor.castToInteger(value); // IntegerType
535        } else if (name.equals("max")) {
536          this.max = TypeConvertor.castToString(value); // StringType
537        } else if (name.equals("documentation")) {
538          this.documentation = TypeConvertor.castToString(value); // StringType
539        } else if (name.equals("type")) {
540          value = new FHIRAllTypesEnumFactory().fromType(TypeConvertor.castToCode(value));
541          this.type = (Enumeration) value; // Enumeration<FHIRAllTypes>
542        } else if (name.equals("profile")) {
543          this.profile = TypeConvertor.castToCanonical(value); // CanonicalType
544        } else
545          return super.setProperty(name, value);
546        return value;
547      }
548
549      @Override
550      public Base makeProperty(int hash, String name) throws FHIRException {
551        switch (hash) {
552        case 3373707:  return getNameElement();
553        case 116103:  return getUseElement();
554        case 108114:  return getMinElement();
555        case 107876:  return getMaxElement();
556        case 1587405498:  return getDocumentationElement();
557        case 3575610:  return getTypeElement();
558        case -309425751:  return getProfileElement();
559        default: return super.makeProperty(hash, name);
560        }
561
562      }
563
564      @Override
565      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
566        switch (hash) {
567        case 3373707: /*name*/ return new String[] {"code"};
568        case 116103: /*use*/ return new String[] {"code"};
569        case 108114: /*min*/ return new String[] {"integer"};
570        case 107876: /*max*/ return new String[] {"string"};
571        case 1587405498: /*documentation*/ return new String[] {"string"};
572        case 3575610: /*type*/ return new String[] {"code"};
573        case -309425751: /*profile*/ return new String[] {"canonical"};
574        default: return super.getTypesForProperty(hash, name);
575        }
576
577      }
578
579      @Override
580      public Base addChild(String name) throws FHIRException {
581        if (name.equals("name")) {
582          throw new FHIRException("Cannot call addChild on a primitive type ParameterDefinition.name");
583        }
584        else if (name.equals("use")) {
585          throw new FHIRException("Cannot call addChild on a primitive type ParameterDefinition.use");
586        }
587        else if (name.equals("min")) {
588          throw new FHIRException("Cannot call addChild on a primitive type ParameterDefinition.min");
589        }
590        else if (name.equals("max")) {
591          throw new FHIRException("Cannot call addChild on a primitive type ParameterDefinition.max");
592        }
593        else if (name.equals("documentation")) {
594          throw new FHIRException("Cannot call addChild on a primitive type ParameterDefinition.documentation");
595        }
596        else if (name.equals("type")) {
597          throw new FHIRException("Cannot call addChild on a primitive type ParameterDefinition.type");
598        }
599        else if (name.equals("profile")) {
600          throw new FHIRException("Cannot call addChild on a primitive type ParameterDefinition.profile");
601        }
602        else
603          return super.addChild(name);
604      }
605
606  public String fhirType() {
607    return "ParameterDefinition";
608
609  }
610
611      public ParameterDefinition copy() {
612        ParameterDefinition dst = new ParameterDefinition();
613        copyValues(dst);
614        return dst;
615      }
616
617      public void copyValues(ParameterDefinition dst) {
618        super.copyValues(dst);
619        dst.name = name == null ? null : name.copy();
620        dst.use = use == null ? null : use.copy();
621        dst.min = min == null ? null : min.copy();
622        dst.max = max == null ? null : max.copy();
623        dst.documentation = documentation == null ? null : documentation.copy();
624        dst.type = type == null ? null : type.copy();
625        dst.profile = profile == null ? null : profile.copy();
626      }
627
628      protected ParameterDefinition typedCopy() {
629        return copy();
630      }
631
632      @Override
633      public boolean equalsDeep(Base other_) {
634        if (!super.equalsDeep(other_))
635          return false;
636        if (!(other_ instanceof ParameterDefinition))
637          return false;
638        ParameterDefinition o = (ParameterDefinition) other_;
639        return compareDeep(name, o.name, true) && compareDeep(use, o.use, true) && compareDeep(min, o.min, true)
640           && compareDeep(max, o.max, true) && compareDeep(documentation, o.documentation, true) && compareDeep(type, o.type, true)
641           && compareDeep(profile, o.profile, true);
642      }
643
644      @Override
645      public boolean equalsShallow(Base other_) {
646        if (!super.equalsShallow(other_))
647          return false;
648        if (!(other_ instanceof ParameterDefinition))
649          return false;
650        ParameterDefinition o = (ParameterDefinition) other_;
651        return compareValues(name, o.name, true) && compareValues(use, o.use, true) && compareValues(min, o.min, true)
652           && compareValues(max, o.max, true) && compareValues(documentation, o.documentation, true) && compareValues(type, o.type, true)
653           && compareValues(profile, o.profile, true);
654      }
655
656      public boolean isEmpty() {
657        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(name, use, min, max, documentation
658          , type, profile);
659      }
660
661
662}
663