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 Thu, Sep 13, 2018 09:04-0400 for FHIR v3.5.0
033
034import java.util.*;
035
036import org.hl7.fhir.utilities.Utilities;
037import ca.uhn.fhir.model.api.annotation.ResourceDef;
038import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
039import ca.uhn.fhir.model.api.annotation.Child;
040import ca.uhn.fhir.model.api.annotation.ChildOrder;
041import ca.uhn.fhir.model.api.annotation.Description;
042import ca.uhn.fhir.model.api.annotation.Block;
043import org.hl7.fhir.instance.model.api.*;
044import org.hl7.fhir.exceptions.FHIRException;
045/**
046 * Represents a defined collection of entities that may be discussed or acted upon collectively but which are not expected to act collectively, and are not formally or legally recognized; i.e. a collection of entities that isn't an Organization.
047 */
048@ResourceDef(name="Group", profile="http://hl7.org/fhir/StructureDefinition/Group")
049public class Group extends DomainResource {
050
051    public enum GroupType {
052        /**
053         * Group contains "person" Patient resources.
054         */
055        PERSON, 
056        /**
057         * Group contains "animal" Patient resources.
058         */
059        ANIMAL, 
060        /**
061         * Group contains healthcare practitioner resources (Practitioner or PractitionerRole).
062         */
063        PRACTITIONER, 
064        /**
065         * Group contains Device resources.
066         */
067        DEVICE, 
068        /**
069         * Group contains Medication resources.
070         */
071        MEDICATION, 
072        /**
073         * Group contains Substance resources.
074         */
075        SUBSTANCE, 
076        /**
077         * added to help the parsers with the generic types
078         */
079        NULL;
080        public static GroupType fromCode(String codeString) throws FHIRException {
081            if (codeString == null || "".equals(codeString))
082                return null;
083        if ("person".equals(codeString))
084          return PERSON;
085        if ("animal".equals(codeString))
086          return ANIMAL;
087        if ("practitioner".equals(codeString))
088          return PRACTITIONER;
089        if ("device".equals(codeString))
090          return DEVICE;
091        if ("medication".equals(codeString))
092          return MEDICATION;
093        if ("substance".equals(codeString))
094          return SUBSTANCE;
095        if (Configuration.isAcceptInvalidEnums())
096          return null;
097        else
098          throw new FHIRException("Unknown GroupType code '"+codeString+"'");
099        }
100        public String toCode() {
101          switch (this) {
102            case PERSON: return "person";
103            case ANIMAL: return "animal";
104            case PRACTITIONER: return "practitioner";
105            case DEVICE: return "device";
106            case MEDICATION: return "medication";
107            case SUBSTANCE: return "substance";
108            default: return "?";
109          }
110        }
111        public String getSystem() {
112          switch (this) {
113            case PERSON: return "http://hl7.org/fhir/group-type";
114            case ANIMAL: return "http://hl7.org/fhir/group-type";
115            case PRACTITIONER: return "http://hl7.org/fhir/group-type";
116            case DEVICE: return "http://hl7.org/fhir/group-type";
117            case MEDICATION: return "http://hl7.org/fhir/group-type";
118            case SUBSTANCE: return "http://hl7.org/fhir/group-type";
119            default: return "?";
120          }
121        }
122        public String getDefinition() {
123          switch (this) {
124            case PERSON: return "Group contains \"person\" Patient resources.";
125            case ANIMAL: return "Group contains \"animal\" Patient resources.";
126            case PRACTITIONER: return "Group contains healthcare practitioner resources (Practitioner or PractitionerRole).";
127            case DEVICE: return "Group contains Device resources.";
128            case MEDICATION: return "Group contains Medication resources.";
129            case SUBSTANCE: return "Group contains Substance resources.";
130            default: return "?";
131          }
132        }
133        public String getDisplay() {
134          switch (this) {
135            case PERSON: return "Person";
136            case ANIMAL: return "Animal";
137            case PRACTITIONER: return "Practitioner";
138            case DEVICE: return "Device";
139            case MEDICATION: return "Medication";
140            case SUBSTANCE: return "Substance";
141            default: return "?";
142          }
143        }
144    }
145
146  public static class GroupTypeEnumFactory implements EnumFactory<GroupType> {
147    public GroupType fromCode(String codeString) throws IllegalArgumentException {
148      if (codeString == null || "".equals(codeString))
149            if (codeString == null || "".equals(codeString))
150                return null;
151        if ("person".equals(codeString))
152          return GroupType.PERSON;
153        if ("animal".equals(codeString))
154          return GroupType.ANIMAL;
155        if ("practitioner".equals(codeString))
156          return GroupType.PRACTITIONER;
157        if ("device".equals(codeString))
158          return GroupType.DEVICE;
159        if ("medication".equals(codeString))
160          return GroupType.MEDICATION;
161        if ("substance".equals(codeString))
162          return GroupType.SUBSTANCE;
163        throw new IllegalArgumentException("Unknown GroupType code '"+codeString+"'");
164        }
165        public Enumeration<GroupType> fromType(Base code) throws FHIRException {
166          if (code == null)
167            return null;
168          if (code.isEmpty())
169            return new Enumeration<GroupType>(this);
170          String codeString = ((PrimitiveType) code).asStringValue();
171          if (codeString == null || "".equals(codeString))
172            return null;
173        if ("person".equals(codeString))
174          return new Enumeration<GroupType>(this, GroupType.PERSON);
175        if ("animal".equals(codeString))
176          return new Enumeration<GroupType>(this, GroupType.ANIMAL);
177        if ("practitioner".equals(codeString))
178          return new Enumeration<GroupType>(this, GroupType.PRACTITIONER);
179        if ("device".equals(codeString))
180          return new Enumeration<GroupType>(this, GroupType.DEVICE);
181        if ("medication".equals(codeString))
182          return new Enumeration<GroupType>(this, GroupType.MEDICATION);
183        if ("substance".equals(codeString))
184          return new Enumeration<GroupType>(this, GroupType.SUBSTANCE);
185        throw new FHIRException("Unknown GroupType code '"+codeString+"'");
186        }
187    public String toCode(GroupType code) {
188      if (code == GroupType.PERSON)
189        return "person";
190      if (code == GroupType.ANIMAL)
191        return "animal";
192      if (code == GroupType.PRACTITIONER)
193        return "practitioner";
194      if (code == GroupType.DEVICE)
195        return "device";
196      if (code == GroupType.MEDICATION)
197        return "medication";
198      if (code == GroupType.SUBSTANCE)
199        return "substance";
200      return "?";
201      }
202    public String toSystem(GroupType code) {
203      return code.getSystem();
204      }
205    }
206
207    @Block()
208    public static class GroupCharacteristicComponent extends BackboneElement implements IBaseBackboneElement {
209        /**
210         * A code that identifies the kind of trait being asserted.
211         */
212        @Child(name = "code", type = {CodeableConcept.class}, order=1, min=1, max=1, modifier=false, summary=false)
213        @Description(shortDefinition="Kind of characteristic", formalDefinition="A code that identifies the kind of trait being asserted." )
214        protected CodeableConcept code;
215
216        /**
217         * The value of the trait that holds (or does not hold - see 'exclude') for members of the group.
218         */
219        @Child(name = "value", type = {CodeableConcept.class, BooleanType.class, Quantity.class, Range.class}, order=2, min=1, max=1, modifier=false, summary=false)
220        @Description(shortDefinition="Value held by characteristic", formalDefinition="The value of the trait that holds (or does not hold - see 'exclude') for members of the group." )
221        protected Type value;
222
223        /**
224         * If true, indicates the characteristic is one that is NOT held by members of the group.
225         */
226        @Child(name = "exclude", type = {BooleanType.class}, order=3, min=1, max=1, modifier=false, summary=false)
227        @Description(shortDefinition="Group includes or excludes", formalDefinition="If true, indicates the characteristic is one that is NOT held by members of the group." )
228        protected BooleanType exclude;
229
230        /**
231         * The period over which the characteristic is tested; e.g. the patient had an operation during the month of June.
232         */
233        @Child(name = "period", type = {Period.class}, order=4, min=0, max=1, modifier=false, summary=false)
234        @Description(shortDefinition="Period over which characteristic is tested", formalDefinition="The period over which the characteristic is tested; e.g. the patient had an operation during the month of June." )
235        protected Period period;
236
237        private static final long serialVersionUID = -1000688967L;
238
239    /**
240     * Constructor
241     */
242      public GroupCharacteristicComponent() {
243        super();
244      }
245
246    /**
247     * Constructor
248     */
249      public GroupCharacteristicComponent(CodeableConcept code, Type value, BooleanType exclude) {
250        super();
251        this.code = code;
252        this.value = value;
253        this.exclude = exclude;
254      }
255
256        /**
257         * @return {@link #code} (A code that identifies the kind of trait being asserted.)
258         */
259        public CodeableConcept getCode() { 
260          if (this.code == null)
261            if (Configuration.errorOnAutoCreate())
262              throw new Error("Attempt to auto-create GroupCharacteristicComponent.code");
263            else if (Configuration.doAutoCreate())
264              this.code = new CodeableConcept(); // cc
265          return this.code;
266        }
267
268        public boolean hasCode() { 
269          return this.code != null && !this.code.isEmpty();
270        }
271
272        /**
273         * @param value {@link #code} (A code that identifies the kind of trait being asserted.)
274         */
275        public GroupCharacteristicComponent setCode(CodeableConcept value) { 
276          this.code = value;
277          return this;
278        }
279
280        /**
281         * @return {@link #value} (The value of the trait that holds (or does not hold - see 'exclude') for members of the group.)
282         */
283        public Type getValue() { 
284          return this.value;
285        }
286
287        /**
288         * @return {@link #value} (The value of the trait that holds (or does not hold - see 'exclude') for members of the group.)
289         */
290        public CodeableConcept getValueCodeableConcept() throws FHIRException { 
291          if (this.value == null)
292            return null;
293          if (!(this.value instanceof CodeableConcept))
294            throw new FHIRException("Type mismatch: the type CodeableConcept was expected, but "+this.value.getClass().getName()+" was encountered");
295          return (CodeableConcept) this.value;
296        }
297
298        public boolean hasValueCodeableConcept() { 
299          return this != null && this.value instanceof CodeableConcept;
300        }
301
302        /**
303         * @return {@link #value} (The value of the trait that holds (or does not hold - see 'exclude') for members of the group.)
304         */
305        public BooleanType getValueBooleanType() throws FHIRException { 
306          if (this.value == null)
307            return null;
308          if (!(this.value instanceof BooleanType))
309            throw new FHIRException("Type mismatch: the type BooleanType was expected, but "+this.value.getClass().getName()+" was encountered");
310          return (BooleanType) this.value;
311        }
312
313        public boolean hasValueBooleanType() { 
314          return this != null && this.value instanceof BooleanType;
315        }
316
317        /**
318         * @return {@link #value} (The value of the trait that holds (or does not hold - see 'exclude') for members of the group.)
319         */
320        public Quantity getValueQuantity() throws FHIRException { 
321          if (this.value == null)
322            return null;
323          if (!(this.value instanceof Quantity))
324            throw new FHIRException("Type mismatch: the type Quantity was expected, but "+this.value.getClass().getName()+" was encountered");
325          return (Quantity) this.value;
326        }
327
328        public boolean hasValueQuantity() { 
329          return this != null && this.value instanceof Quantity;
330        }
331
332        /**
333         * @return {@link #value} (The value of the trait that holds (or does not hold - see 'exclude') for members of the group.)
334         */
335        public Range getValueRange() throws FHIRException { 
336          if (this.value == null)
337            return null;
338          if (!(this.value instanceof Range))
339            throw new FHIRException("Type mismatch: the type Range was expected, but "+this.value.getClass().getName()+" was encountered");
340          return (Range) this.value;
341        }
342
343        public boolean hasValueRange() { 
344          return this != null && this.value instanceof Range;
345        }
346
347        public boolean hasValue() { 
348          return this.value != null && !this.value.isEmpty();
349        }
350
351        /**
352         * @param value {@link #value} (The value of the trait that holds (or does not hold - see 'exclude') for members of the group.)
353         */
354        public GroupCharacteristicComponent setValue(Type value) { 
355          if (value != null && !(value instanceof CodeableConcept || value instanceof BooleanType || value instanceof Quantity || value instanceof Range))
356            throw new Error("Not the right type for Group.characteristic.value[x]: "+value.fhirType());
357          this.value = value;
358          return this;
359        }
360
361        /**
362         * @return {@link #exclude} (If true, indicates the characteristic is one that is NOT held by members of the group.). This is the underlying object with id, value and extensions. The accessor "getExclude" gives direct access to the value
363         */
364        public BooleanType getExcludeElement() { 
365          if (this.exclude == null)
366            if (Configuration.errorOnAutoCreate())
367              throw new Error("Attempt to auto-create GroupCharacteristicComponent.exclude");
368            else if (Configuration.doAutoCreate())
369              this.exclude = new BooleanType(); // bb
370          return this.exclude;
371        }
372
373        public boolean hasExcludeElement() { 
374          return this.exclude != null && !this.exclude.isEmpty();
375        }
376
377        public boolean hasExclude() { 
378          return this.exclude != null && !this.exclude.isEmpty();
379        }
380
381        /**
382         * @param value {@link #exclude} (If true, indicates the characteristic is one that is NOT held by members of the group.). This is the underlying object with id, value and extensions. The accessor "getExclude" gives direct access to the value
383         */
384        public GroupCharacteristicComponent setExcludeElement(BooleanType value) { 
385          this.exclude = value;
386          return this;
387        }
388
389        /**
390         * @return If true, indicates the characteristic is one that is NOT held by members of the group.
391         */
392        public boolean getExclude() { 
393          return this.exclude == null || this.exclude.isEmpty() ? false : this.exclude.getValue();
394        }
395
396        /**
397         * @param value If true, indicates the characteristic is one that is NOT held by members of the group.
398         */
399        public GroupCharacteristicComponent setExclude(boolean value) { 
400            if (this.exclude == null)
401              this.exclude = new BooleanType();
402            this.exclude.setValue(value);
403          return this;
404        }
405
406        /**
407         * @return {@link #period} (The period over which the characteristic is tested; e.g. the patient had an operation during the month of June.)
408         */
409        public Period getPeriod() { 
410          if (this.period == null)
411            if (Configuration.errorOnAutoCreate())
412              throw new Error("Attempt to auto-create GroupCharacteristicComponent.period");
413            else if (Configuration.doAutoCreate())
414              this.period = new Period(); // cc
415          return this.period;
416        }
417
418        public boolean hasPeriod() { 
419          return this.period != null && !this.period.isEmpty();
420        }
421
422        /**
423         * @param value {@link #period} (The period over which the characteristic is tested; e.g. the patient had an operation during the month of June.)
424         */
425        public GroupCharacteristicComponent setPeriod(Period value) { 
426          this.period = value;
427          return this;
428        }
429
430        protected void listChildren(List<Property> children) {
431          super.listChildren(children);
432          children.add(new Property("code", "CodeableConcept", "A code that identifies the kind of trait being asserted.", 0, 1, code));
433          children.add(new Property("value[x]", "CodeableConcept|boolean|Quantity|Range", "The value of the trait that holds (or does not hold - see 'exclude') for members of the group.", 0, 1, value));
434          children.add(new Property("exclude", "boolean", "If true, indicates the characteristic is one that is NOT held by members of the group.", 0, 1, exclude));
435          children.add(new Property("period", "Period", "The period over which the characteristic is tested; e.g. the patient had an operation during the month of June.", 0, 1, period));
436        }
437
438        @Override
439        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
440          switch (_hash) {
441          case 3059181: /*code*/  return new Property("code", "CodeableConcept", "A code that identifies the kind of trait being asserted.", 0, 1, code);
442          case -1410166417: /*value[x]*/  return new Property("value[x]", "CodeableConcept|boolean|Quantity|Range", "The value of the trait that holds (or does not hold - see 'exclude') for members of the group.", 0, 1, value);
443          case 111972721: /*value*/  return new Property("value[x]", "CodeableConcept|boolean|Quantity|Range", "The value of the trait that holds (or does not hold - see 'exclude') for members of the group.", 0, 1, value);
444          case 924902896: /*valueCodeableConcept*/  return new Property("value[x]", "CodeableConcept|boolean|Quantity|Range", "The value of the trait that holds (or does not hold - see 'exclude') for members of the group.", 0, 1, value);
445          case 733421943: /*valueBoolean*/  return new Property("value[x]", "CodeableConcept|boolean|Quantity|Range", "The value of the trait that holds (or does not hold - see 'exclude') for members of the group.", 0, 1, value);
446          case -2029823716: /*valueQuantity*/  return new Property("value[x]", "CodeableConcept|boolean|Quantity|Range", "The value of the trait that holds (or does not hold - see 'exclude') for members of the group.", 0, 1, value);
447          case 2030761548: /*valueRange*/  return new Property("value[x]", "CodeableConcept|boolean|Quantity|Range", "The value of the trait that holds (or does not hold - see 'exclude') for members of the group.", 0, 1, value);
448          case -1321148966: /*exclude*/  return new Property("exclude", "boolean", "If true, indicates the characteristic is one that is NOT held by members of the group.", 0, 1, exclude);
449          case -991726143: /*period*/  return new Property("period", "Period", "The period over which the characteristic is tested; e.g. the patient had an operation during the month of June.", 0, 1, period);
450          default: return super.getNamedProperty(_hash, _name, _checkValid);
451          }
452
453        }
454
455      @Override
456      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
457        switch (hash) {
458        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeableConcept
459        case 111972721: /*value*/ return this.value == null ? new Base[0] : new Base[] {this.value}; // Type
460        case -1321148966: /*exclude*/ return this.exclude == null ? new Base[0] : new Base[] {this.exclude}; // BooleanType
461        case -991726143: /*period*/ return this.period == null ? new Base[0] : new Base[] {this.period}; // Period
462        default: return super.getProperty(hash, name, checkValid);
463        }
464
465      }
466
467      @Override
468      public Base setProperty(int hash, String name, Base value) throws FHIRException {
469        switch (hash) {
470        case 3059181: // code
471          this.code = castToCodeableConcept(value); // CodeableConcept
472          return value;
473        case 111972721: // value
474          this.value = castToType(value); // Type
475          return value;
476        case -1321148966: // exclude
477          this.exclude = castToBoolean(value); // BooleanType
478          return value;
479        case -991726143: // period
480          this.period = castToPeriod(value); // Period
481          return value;
482        default: return super.setProperty(hash, name, value);
483        }
484
485      }
486
487      @Override
488      public Base setProperty(String name, Base value) throws FHIRException {
489        if (name.equals("code")) {
490          this.code = castToCodeableConcept(value); // CodeableConcept
491        } else if (name.equals("value[x]")) {
492          this.value = castToType(value); // Type
493        } else if (name.equals("exclude")) {
494          this.exclude = castToBoolean(value); // BooleanType
495        } else if (name.equals("period")) {
496          this.period = castToPeriod(value); // Period
497        } else
498          return super.setProperty(name, value);
499        return value;
500      }
501
502      @Override
503      public Base makeProperty(int hash, String name) throws FHIRException {
504        switch (hash) {
505        case 3059181:  return getCode(); 
506        case -1410166417:  return getValue(); 
507        case 111972721:  return getValue(); 
508        case -1321148966:  return getExcludeElement();
509        case -991726143:  return getPeriod(); 
510        default: return super.makeProperty(hash, name);
511        }
512
513      }
514
515      @Override
516      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
517        switch (hash) {
518        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
519        case 111972721: /*value*/ return new String[] {"CodeableConcept", "boolean", "Quantity", "Range"};
520        case -1321148966: /*exclude*/ return new String[] {"boolean"};
521        case -991726143: /*period*/ return new String[] {"Period"};
522        default: return super.getTypesForProperty(hash, name);
523        }
524
525      }
526
527      @Override
528      public Base addChild(String name) throws FHIRException {
529        if (name.equals("code")) {
530          this.code = new CodeableConcept();
531          return this.code;
532        }
533        else if (name.equals("valueCodeableConcept")) {
534          this.value = new CodeableConcept();
535          return this.value;
536        }
537        else if (name.equals("valueBoolean")) {
538          this.value = new BooleanType();
539          return this.value;
540        }
541        else if (name.equals("valueQuantity")) {
542          this.value = new Quantity();
543          return this.value;
544        }
545        else if (name.equals("valueRange")) {
546          this.value = new Range();
547          return this.value;
548        }
549        else if (name.equals("exclude")) {
550          throw new FHIRException("Cannot call addChild on a primitive type Group.exclude");
551        }
552        else if (name.equals("period")) {
553          this.period = new Period();
554          return this.period;
555        }
556        else
557          return super.addChild(name);
558      }
559
560      public GroupCharacteristicComponent copy() {
561        GroupCharacteristicComponent dst = new GroupCharacteristicComponent();
562        copyValues(dst);
563        dst.code = code == null ? null : code.copy();
564        dst.value = value == null ? null : value.copy();
565        dst.exclude = exclude == null ? null : exclude.copy();
566        dst.period = period == null ? null : period.copy();
567        return dst;
568      }
569
570      @Override
571      public boolean equalsDeep(Base other_) {
572        if (!super.equalsDeep(other_))
573          return false;
574        if (!(other_ instanceof GroupCharacteristicComponent))
575          return false;
576        GroupCharacteristicComponent o = (GroupCharacteristicComponent) other_;
577        return compareDeep(code, o.code, true) && compareDeep(value, o.value, true) && compareDeep(exclude, o.exclude, true)
578           && compareDeep(period, o.period, true);
579      }
580
581      @Override
582      public boolean equalsShallow(Base other_) {
583        if (!super.equalsShallow(other_))
584          return false;
585        if (!(other_ instanceof GroupCharacteristicComponent))
586          return false;
587        GroupCharacteristicComponent o = (GroupCharacteristicComponent) other_;
588        return compareValues(exclude, o.exclude, true);
589      }
590
591      public boolean isEmpty() {
592        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(code, value, exclude, period
593          );
594      }
595
596  public String fhirType() {
597    return "Group.characteristic";
598
599  }
600
601  }
602
603    @Block()
604    public static class GroupMemberComponent extends BackboneElement implements IBaseBackboneElement {
605        /**
606         * A reference to the entity that is a member of the group. Must be consistent with Group.type.
607         */
608        @Child(name = "entity", type = {Patient.class, Practitioner.class, PractitionerRole.class, Device.class, Medication.class, Substance.class}, order=1, min=1, max=1, modifier=false, summary=false)
609        @Description(shortDefinition="Reference to the group member", formalDefinition="A reference to the entity that is a member of the group. Must be consistent with Group.type." )
610        protected Reference entity;
611
612        /**
613         * The actual object that is the target of the reference (A reference to the entity that is a member of the group. Must be consistent with Group.type.)
614         */
615        protected Resource entityTarget;
616
617        /**
618         * The period that the member was in the group, if known.
619         */
620        @Child(name = "period", type = {Period.class}, order=2, min=0, max=1, modifier=false, summary=false)
621        @Description(shortDefinition="Period member belonged to the group", formalDefinition="The period that the member was in the group, if known." )
622        protected Period period;
623
624        /**
625         * A flag to indicate that the member is no longer in the group, but previously may have been a member.
626         */
627        @Child(name = "inactive", type = {BooleanType.class}, order=3, min=0, max=1, modifier=false, summary=false)
628        @Description(shortDefinition="If member is no longer in group", formalDefinition="A flag to indicate that the member is no longer in the group, but previously may have been a member." )
629        protected BooleanType inactive;
630
631        private static final long serialVersionUID = -333869055L;
632
633    /**
634     * Constructor
635     */
636      public GroupMemberComponent() {
637        super();
638      }
639
640    /**
641     * Constructor
642     */
643      public GroupMemberComponent(Reference entity) {
644        super();
645        this.entity = entity;
646      }
647
648        /**
649         * @return {@link #entity} (A reference to the entity that is a member of the group. Must be consistent with Group.type.)
650         */
651        public Reference getEntity() { 
652          if (this.entity == null)
653            if (Configuration.errorOnAutoCreate())
654              throw new Error("Attempt to auto-create GroupMemberComponent.entity");
655            else if (Configuration.doAutoCreate())
656              this.entity = new Reference(); // cc
657          return this.entity;
658        }
659
660        public boolean hasEntity() { 
661          return this.entity != null && !this.entity.isEmpty();
662        }
663
664        /**
665         * @param value {@link #entity} (A reference to the entity that is a member of the group. Must be consistent with Group.type.)
666         */
667        public GroupMemberComponent setEntity(Reference value) { 
668          this.entity = value;
669          return this;
670        }
671
672        /**
673         * @return {@link #entity} 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 reference to the entity that is a member of the group. Must be consistent with Group.type.)
674         */
675        public Resource getEntityTarget() { 
676          return this.entityTarget;
677        }
678
679        /**
680         * @param value {@link #entity} 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 reference to the entity that is a member of the group. Must be consistent with Group.type.)
681         */
682        public GroupMemberComponent setEntityTarget(Resource value) { 
683          this.entityTarget = value;
684          return this;
685        }
686
687        /**
688         * @return {@link #period} (The period that the member was in the group, if known.)
689         */
690        public Period getPeriod() { 
691          if (this.period == null)
692            if (Configuration.errorOnAutoCreate())
693              throw new Error("Attempt to auto-create GroupMemberComponent.period");
694            else if (Configuration.doAutoCreate())
695              this.period = new Period(); // cc
696          return this.period;
697        }
698
699        public boolean hasPeriod() { 
700          return this.period != null && !this.period.isEmpty();
701        }
702
703        /**
704         * @param value {@link #period} (The period that the member was in the group, if known.)
705         */
706        public GroupMemberComponent setPeriod(Period value) { 
707          this.period = value;
708          return this;
709        }
710
711        /**
712         * @return {@link #inactive} (A flag to indicate that the member is no longer in the group, but previously may have been a member.). This is the underlying object with id, value and extensions. The accessor "getInactive" gives direct access to the value
713         */
714        public BooleanType getInactiveElement() { 
715          if (this.inactive == null)
716            if (Configuration.errorOnAutoCreate())
717              throw new Error("Attempt to auto-create GroupMemberComponent.inactive");
718            else if (Configuration.doAutoCreate())
719              this.inactive = new BooleanType(); // bb
720          return this.inactive;
721        }
722
723        public boolean hasInactiveElement() { 
724          return this.inactive != null && !this.inactive.isEmpty();
725        }
726
727        public boolean hasInactive() { 
728          return this.inactive != null && !this.inactive.isEmpty();
729        }
730
731        /**
732         * @param value {@link #inactive} (A flag to indicate that the member is no longer in the group, but previously may have been a member.). This is the underlying object with id, value and extensions. The accessor "getInactive" gives direct access to the value
733         */
734        public GroupMemberComponent setInactiveElement(BooleanType value) { 
735          this.inactive = value;
736          return this;
737        }
738
739        /**
740         * @return A flag to indicate that the member is no longer in the group, but previously may have been a member.
741         */
742        public boolean getInactive() { 
743          return this.inactive == null || this.inactive.isEmpty() ? false : this.inactive.getValue();
744        }
745
746        /**
747         * @param value A flag to indicate that the member is no longer in the group, but previously may have been a member.
748         */
749        public GroupMemberComponent setInactive(boolean value) { 
750            if (this.inactive == null)
751              this.inactive = new BooleanType();
752            this.inactive.setValue(value);
753          return this;
754        }
755
756        protected void listChildren(List<Property> children) {
757          super.listChildren(children);
758          children.add(new Property("entity", "Reference(Patient|Practitioner|PractitionerRole|Device|Medication|Substance)", "A reference to the entity that is a member of the group. Must be consistent with Group.type.", 0, 1, entity));
759          children.add(new Property("period", "Period", "The period that the member was in the group, if known.", 0, 1, period));
760          children.add(new Property("inactive", "boolean", "A flag to indicate that the member is no longer in the group, but previously may have been a member.", 0, 1, inactive));
761        }
762
763        @Override
764        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
765          switch (_hash) {
766          case -1298275357: /*entity*/  return new Property("entity", "Reference(Patient|Practitioner|PractitionerRole|Device|Medication|Substance)", "A reference to the entity that is a member of the group. Must be consistent with Group.type.", 0, 1, entity);
767          case -991726143: /*period*/  return new Property("period", "Period", "The period that the member was in the group, if known.", 0, 1, period);
768          case 24665195: /*inactive*/  return new Property("inactive", "boolean", "A flag to indicate that the member is no longer in the group, but previously may have been a member.", 0, 1, inactive);
769          default: return super.getNamedProperty(_hash, _name, _checkValid);
770          }
771
772        }
773
774      @Override
775      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
776        switch (hash) {
777        case -1298275357: /*entity*/ return this.entity == null ? new Base[0] : new Base[] {this.entity}; // Reference
778        case -991726143: /*period*/ return this.period == null ? new Base[0] : new Base[] {this.period}; // Period
779        case 24665195: /*inactive*/ return this.inactive == null ? new Base[0] : new Base[] {this.inactive}; // BooleanType
780        default: return super.getProperty(hash, name, checkValid);
781        }
782
783      }
784
785      @Override
786      public Base setProperty(int hash, String name, Base value) throws FHIRException {
787        switch (hash) {
788        case -1298275357: // entity
789          this.entity = castToReference(value); // Reference
790          return value;
791        case -991726143: // period
792          this.period = castToPeriod(value); // Period
793          return value;
794        case 24665195: // inactive
795          this.inactive = castToBoolean(value); // BooleanType
796          return value;
797        default: return super.setProperty(hash, name, value);
798        }
799
800      }
801
802      @Override
803      public Base setProperty(String name, Base value) throws FHIRException {
804        if (name.equals("entity")) {
805          this.entity = castToReference(value); // Reference
806        } else if (name.equals("period")) {
807          this.period = castToPeriod(value); // Period
808        } else if (name.equals("inactive")) {
809          this.inactive = castToBoolean(value); // BooleanType
810        } else
811          return super.setProperty(name, value);
812        return value;
813      }
814
815      @Override
816      public Base makeProperty(int hash, String name) throws FHIRException {
817        switch (hash) {
818        case -1298275357:  return getEntity(); 
819        case -991726143:  return getPeriod(); 
820        case 24665195:  return getInactiveElement();
821        default: return super.makeProperty(hash, name);
822        }
823
824      }
825
826      @Override
827      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
828        switch (hash) {
829        case -1298275357: /*entity*/ return new String[] {"Reference"};
830        case -991726143: /*period*/ return new String[] {"Period"};
831        case 24665195: /*inactive*/ return new String[] {"boolean"};
832        default: return super.getTypesForProperty(hash, name);
833        }
834
835      }
836
837      @Override
838      public Base addChild(String name) throws FHIRException {
839        if (name.equals("entity")) {
840          this.entity = new Reference();
841          return this.entity;
842        }
843        else if (name.equals("period")) {
844          this.period = new Period();
845          return this.period;
846        }
847        else if (name.equals("inactive")) {
848          throw new FHIRException("Cannot call addChild on a primitive type Group.inactive");
849        }
850        else
851          return super.addChild(name);
852      }
853
854      public GroupMemberComponent copy() {
855        GroupMemberComponent dst = new GroupMemberComponent();
856        copyValues(dst);
857        dst.entity = entity == null ? null : entity.copy();
858        dst.period = period == null ? null : period.copy();
859        dst.inactive = inactive == null ? null : inactive.copy();
860        return dst;
861      }
862
863      @Override
864      public boolean equalsDeep(Base other_) {
865        if (!super.equalsDeep(other_))
866          return false;
867        if (!(other_ instanceof GroupMemberComponent))
868          return false;
869        GroupMemberComponent o = (GroupMemberComponent) other_;
870        return compareDeep(entity, o.entity, true) && compareDeep(period, o.period, true) && compareDeep(inactive, o.inactive, true)
871          ;
872      }
873
874      @Override
875      public boolean equalsShallow(Base other_) {
876        if (!super.equalsShallow(other_))
877          return false;
878        if (!(other_ instanceof GroupMemberComponent))
879          return false;
880        GroupMemberComponent o = (GroupMemberComponent) other_;
881        return compareValues(inactive, o.inactive, true);
882      }
883
884      public boolean isEmpty() {
885        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(entity, period, inactive
886          );
887      }
888
889  public String fhirType() {
890    return "Group.member";
891
892  }
893
894  }
895
896    /**
897     * A unique business identifier for this group.
898     */
899    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
900    @Description(shortDefinition="Unique id", formalDefinition="A unique business identifier for this group." )
901    protected List<Identifier> identifier;
902
903    /**
904     * Indicates whether the record for the group is available for use or is merely being retained for historical purposes.
905     */
906    @Child(name = "active", type = {BooleanType.class}, order=1, min=0, max=1, modifier=false, summary=true)
907    @Description(shortDefinition="Whether this group's record is in active use", formalDefinition="Indicates whether the record for the group is available for use or is merely being retained for historical purposes." )
908    protected BooleanType active;
909
910    /**
911     * Identifies the broad classification of the kind of resources the group includes.
912     */
913    @Child(name = "type", type = {CodeType.class}, order=2, min=1, max=1, modifier=false, summary=true)
914    @Description(shortDefinition="person | animal | practitioner | device | medication | substance", formalDefinition="Identifies the broad classification of the kind of resources the group includes." )
915    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/group-type")
916    protected Enumeration<GroupType> type;
917
918    /**
919     * If true, indicates that the resource refers to a specific group of real individuals.  If false, the group defines a set of intended individuals.
920     */
921    @Child(name = "actual", type = {BooleanType.class}, order=3, min=1, max=1, modifier=false, summary=true)
922    @Description(shortDefinition="Descriptive or actual", formalDefinition="If true, indicates that the resource refers to a specific group of real individuals.  If false, the group defines a set of intended individuals." )
923    protected BooleanType actual;
924
925    /**
926     * Provides a specific type of resource the group includes; e.g. "cow", "syringe", etc.
927     */
928    @Child(name = "code", type = {CodeableConcept.class}, order=4, min=0, max=1, modifier=false, summary=true)
929    @Description(shortDefinition="Kind of Group members", formalDefinition="Provides a specific type of resource the group includes; e.g. \"cow\", \"syringe\", etc." )
930    protected CodeableConcept code;
931
932    /**
933     * A label assigned to the group for human identification and communication.
934     */
935    @Child(name = "name", type = {StringType.class}, order=5, min=0, max=1, modifier=false, summary=true)
936    @Description(shortDefinition="Label for Group", formalDefinition="A label assigned to the group for human identification and communication." )
937    protected StringType name;
938
939    /**
940     * A count of the number of resource instances that are part of the group.
941     */
942    @Child(name = "quantity", type = {UnsignedIntType.class}, order=6, min=0, max=1, modifier=false, summary=true)
943    @Description(shortDefinition="Number of members", formalDefinition="A count of the number of resource instances that are part of the group." )
944    protected UnsignedIntType quantity;
945
946    /**
947     * Identifies traits whose presence r absence is shared by members of the group.
948     */
949    @Child(name = "characteristic", type = {}, order=7, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
950    @Description(shortDefinition="Include / Exclude group members by Trait", formalDefinition="Identifies traits whose presence r absence is shared by members of the group." )
951    protected List<GroupCharacteristicComponent> characteristic;
952
953    /**
954     * Identifies the resource instances that are members of the group.
955     */
956    @Child(name = "member", type = {}, order=8, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
957    @Description(shortDefinition="Who or what is in group", formalDefinition="Identifies the resource instances that are members of the group." )
958    protected List<GroupMemberComponent> member;
959
960    private static final long serialVersionUID = 659980713L;
961
962  /**
963   * Constructor
964   */
965    public Group() {
966      super();
967    }
968
969  /**
970   * Constructor
971   */
972    public Group(Enumeration<GroupType> type, BooleanType actual) {
973      super();
974      this.type = type;
975      this.actual = actual;
976    }
977
978    /**
979     * @return {@link #identifier} (A unique business identifier for this group.)
980     */
981    public List<Identifier> getIdentifier() { 
982      if (this.identifier == null)
983        this.identifier = new ArrayList<Identifier>();
984      return this.identifier;
985    }
986
987    /**
988     * @return Returns a reference to <code>this</code> for easy method chaining
989     */
990    public Group setIdentifier(List<Identifier> theIdentifier) { 
991      this.identifier = theIdentifier;
992      return this;
993    }
994
995    public boolean hasIdentifier() { 
996      if (this.identifier == null)
997        return false;
998      for (Identifier item : this.identifier)
999        if (!item.isEmpty())
1000          return true;
1001      return false;
1002    }
1003
1004    public Identifier addIdentifier() { //3
1005      Identifier t = new Identifier();
1006      if (this.identifier == null)
1007        this.identifier = new ArrayList<Identifier>();
1008      this.identifier.add(t);
1009      return t;
1010    }
1011
1012    public Group addIdentifier(Identifier t) { //3
1013      if (t == null)
1014        return this;
1015      if (this.identifier == null)
1016        this.identifier = new ArrayList<Identifier>();
1017      this.identifier.add(t);
1018      return this;
1019    }
1020
1021    /**
1022     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist
1023     */
1024    public Identifier getIdentifierFirstRep() { 
1025      if (getIdentifier().isEmpty()) {
1026        addIdentifier();
1027      }
1028      return getIdentifier().get(0);
1029    }
1030
1031    /**
1032     * @return {@link #active} (Indicates whether the record for the group is available for use or is merely being retained for historical purposes.). This is the underlying object with id, value and extensions. The accessor "getActive" gives direct access to the value
1033     */
1034    public BooleanType getActiveElement() { 
1035      if (this.active == null)
1036        if (Configuration.errorOnAutoCreate())
1037          throw new Error("Attempt to auto-create Group.active");
1038        else if (Configuration.doAutoCreate())
1039          this.active = new BooleanType(); // bb
1040      return this.active;
1041    }
1042
1043    public boolean hasActiveElement() { 
1044      return this.active != null && !this.active.isEmpty();
1045    }
1046
1047    public boolean hasActive() { 
1048      return this.active != null && !this.active.isEmpty();
1049    }
1050
1051    /**
1052     * @param value {@link #active} (Indicates whether the record for the group is available for use or is merely being retained for historical purposes.). This is the underlying object with id, value and extensions. The accessor "getActive" gives direct access to the value
1053     */
1054    public Group setActiveElement(BooleanType value) { 
1055      this.active = value;
1056      return this;
1057    }
1058
1059    /**
1060     * @return Indicates whether the record for the group is available for use or is merely being retained for historical purposes.
1061     */
1062    public boolean getActive() { 
1063      return this.active == null || this.active.isEmpty() ? false : this.active.getValue();
1064    }
1065
1066    /**
1067     * @param value Indicates whether the record for the group is available for use or is merely being retained for historical purposes.
1068     */
1069    public Group setActive(boolean value) { 
1070        if (this.active == null)
1071          this.active = new BooleanType();
1072        this.active.setValue(value);
1073      return this;
1074    }
1075
1076    /**
1077     * @return {@link #type} (Identifies the broad classification of the kind of resources the group includes.). This is the underlying object with id, value and extensions. The accessor "getType" gives direct access to the value
1078     */
1079    public Enumeration<GroupType> getTypeElement() { 
1080      if (this.type == null)
1081        if (Configuration.errorOnAutoCreate())
1082          throw new Error("Attempt to auto-create Group.type");
1083        else if (Configuration.doAutoCreate())
1084          this.type = new Enumeration<GroupType>(new GroupTypeEnumFactory()); // bb
1085      return this.type;
1086    }
1087
1088    public boolean hasTypeElement() { 
1089      return this.type != null && !this.type.isEmpty();
1090    }
1091
1092    public boolean hasType() { 
1093      return this.type != null && !this.type.isEmpty();
1094    }
1095
1096    /**
1097     * @param value {@link #type} (Identifies the broad classification of the kind of resources the group includes.). This is the underlying object with id, value and extensions. The accessor "getType" gives direct access to the value
1098     */
1099    public Group setTypeElement(Enumeration<GroupType> value) { 
1100      this.type = value;
1101      return this;
1102    }
1103
1104    /**
1105     * @return Identifies the broad classification of the kind of resources the group includes.
1106     */
1107    public GroupType getType() { 
1108      return this.type == null ? null : this.type.getValue();
1109    }
1110
1111    /**
1112     * @param value Identifies the broad classification of the kind of resources the group includes.
1113     */
1114    public Group setType(GroupType value) { 
1115        if (this.type == null)
1116          this.type = new Enumeration<GroupType>(new GroupTypeEnumFactory());
1117        this.type.setValue(value);
1118      return this;
1119    }
1120
1121    /**
1122     * @return {@link #actual} (If true, indicates that the resource refers to a specific group of real individuals.  If false, the group defines a set of intended individuals.). This is the underlying object with id, value and extensions. The accessor "getActual" gives direct access to the value
1123     */
1124    public BooleanType getActualElement() { 
1125      if (this.actual == null)
1126        if (Configuration.errorOnAutoCreate())
1127          throw new Error("Attempt to auto-create Group.actual");
1128        else if (Configuration.doAutoCreate())
1129          this.actual = new BooleanType(); // bb
1130      return this.actual;
1131    }
1132
1133    public boolean hasActualElement() { 
1134      return this.actual != null && !this.actual.isEmpty();
1135    }
1136
1137    public boolean hasActual() { 
1138      return this.actual != null && !this.actual.isEmpty();
1139    }
1140
1141    /**
1142     * @param value {@link #actual} (If true, indicates that the resource refers to a specific group of real individuals.  If false, the group defines a set of intended individuals.). This is the underlying object with id, value and extensions. The accessor "getActual" gives direct access to the value
1143     */
1144    public Group setActualElement(BooleanType value) { 
1145      this.actual = value;
1146      return this;
1147    }
1148
1149    /**
1150     * @return If true, indicates that the resource refers to a specific group of real individuals.  If false, the group defines a set of intended individuals.
1151     */
1152    public boolean getActual() { 
1153      return this.actual == null || this.actual.isEmpty() ? false : this.actual.getValue();
1154    }
1155
1156    /**
1157     * @param value If true, indicates that the resource refers to a specific group of real individuals.  If false, the group defines a set of intended individuals.
1158     */
1159    public Group setActual(boolean value) { 
1160        if (this.actual == null)
1161          this.actual = new BooleanType();
1162        this.actual.setValue(value);
1163      return this;
1164    }
1165
1166    /**
1167     * @return {@link #code} (Provides a specific type of resource the group includes; e.g. "cow", "syringe", etc.)
1168     */
1169    public CodeableConcept getCode() { 
1170      if (this.code == null)
1171        if (Configuration.errorOnAutoCreate())
1172          throw new Error("Attempt to auto-create Group.code");
1173        else if (Configuration.doAutoCreate())
1174          this.code = new CodeableConcept(); // cc
1175      return this.code;
1176    }
1177
1178    public boolean hasCode() { 
1179      return this.code != null && !this.code.isEmpty();
1180    }
1181
1182    /**
1183     * @param value {@link #code} (Provides a specific type of resource the group includes; e.g. "cow", "syringe", etc.)
1184     */
1185    public Group setCode(CodeableConcept value) { 
1186      this.code = value;
1187      return this;
1188    }
1189
1190    /**
1191     * @return {@link #name} (A label assigned to the group for human identification and communication.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
1192     */
1193    public StringType getNameElement() { 
1194      if (this.name == null)
1195        if (Configuration.errorOnAutoCreate())
1196          throw new Error("Attempt to auto-create Group.name");
1197        else if (Configuration.doAutoCreate())
1198          this.name = new StringType(); // bb
1199      return this.name;
1200    }
1201
1202    public boolean hasNameElement() { 
1203      return this.name != null && !this.name.isEmpty();
1204    }
1205
1206    public boolean hasName() { 
1207      return this.name != null && !this.name.isEmpty();
1208    }
1209
1210    /**
1211     * @param value {@link #name} (A label assigned to the group for human identification and communication.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
1212     */
1213    public Group setNameElement(StringType value) { 
1214      this.name = value;
1215      return this;
1216    }
1217
1218    /**
1219     * @return A label assigned to the group for human identification and communication.
1220     */
1221    public String getName() { 
1222      return this.name == null ? null : this.name.getValue();
1223    }
1224
1225    /**
1226     * @param value A label assigned to the group for human identification and communication.
1227     */
1228    public Group setName(String value) { 
1229      if (Utilities.noString(value))
1230        this.name = null;
1231      else {
1232        if (this.name == null)
1233          this.name = new StringType();
1234        this.name.setValue(value);
1235      }
1236      return this;
1237    }
1238
1239    /**
1240     * @return {@link #quantity} (A count of the number of resource instances that are part of the group.). This is the underlying object with id, value and extensions. The accessor "getQuantity" gives direct access to the value
1241     */
1242    public UnsignedIntType getQuantityElement() { 
1243      if (this.quantity == null)
1244        if (Configuration.errorOnAutoCreate())
1245          throw new Error("Attempt to auto-create Group.quantity");
1246        else if (Configuration.doAutoCreate())
1247          this.quantity = new UnsignedIntType(); // bb
1248      return this.quantity;
1249    }
1250
1251    public boolean hasQuantityElement() { 
1252      return this.quantity != null && !this.quantity.isEmpty();
1253    }
1254
1255    public boolean hasQuantity() { 
1256      return this.quantity != null && !this.quantity.isEmpty();
1257    }
1258
1259    /**
1260     * @param value {@link #quantity} (A count of the number of resource instances that are part of the group.). This is the underlying object with id, value and extensions. The accessor "getQuantity" gives direct access to the value
1261     */
1262    public Group setQuantityElement(UnsignedIntType value) { 
1263      this.quantity = value;
1264      return this;
1265    }
1266
1267    /**
1268     * @return A count of the number of resource instances that are part of the group.
1269     */
1270    public int getQuantity() { 
1271      return this.quantity == null || this.quantity.isEmpty() ? 0 : this.quantity.getValue();
1272    }
1273
1274    /**
1275     * @param value A count of the number of resource instances that are part of the group.
1276     */
1277    public Group setQuantity(int value) { 
1278        if (this.quantity == null)
1279          this.quantity = new UnsignedIntType();
1280        this.quantity.setValue(value);
1281      return this;
1282    }
1283
1284    /**
1285     * @return {@link #characteristic} (Identifies traits whose presence r absence is shared by members of the group.)
1286     */
1287    public List<GroupCharacteristicComponent> getCharacteristic() { 
1288      if (this.characteristic == null)
1289        this.characteristic = new ArrayList<GroupCharacteristicComponent>();
1290      return this.characteristic;
1291    }
1292
1293    /**
1294     * @return Returns a reference to <code>this</code> for easy method chaining
1295     */
1296    public Group setCharacteristic(List<GroupCharacteristicComponent> theCharacteristic) { 
1297      this.characteristic = theCharacteristic;
1298      return this;
1299    }
1300
1301    public boolean hasCharacteristic() { 
1302      if (this.characteristic == null)
1303        return false;
1304      for (GroupCharacteristicComponent item : this.characteristic)
1305        if (!item.isEmpty())
1306          return true;
1307      return false;
1308    }
1309
1310    public GroupCharacteristicComponent addCharacteristic() { //3
1311      GroupCharacteristicComponent t = new GroupCharacteristicComponent();
1312      if (this.characteristic == null)
1313        this.characteristic = new ArrayList<GroupCharacteristicComponent>();
1314      this.characteristic.add(t);
1315      return t;
1316    }
1317
1318    public Group addCharacteristic(GroupCharacteristicComponent t) { //3
1319      if (t == null)
1320        return this;
1321      if (this.characteristic == null)
1322        this.characteristic = new ArrayList<GroupCharacteristicComponent>();
1323      this.characteristic.add(t);
1324      return this;
1325    }
1326
1327    /**
1328     * @return The first repetition of repeating field {@link #characteristic}, creating it if it does not already exist
1329     */
1330    public GroupCharacteristicComponent getCharacteristicFirstRep() { 
1331      if (getCharacteristic().isEmpty()) {
1332        addCharacteristic();
1333      }
1334      return getCharacteristic().get(0);
1335    }
1336
1337    /**
1338     * @return {@link #member} (Identifies the resource instances that are members of the group.)
1339     */
1340    public List<GroupMemberComponent> getMember() { 
1341      if (this.member == null)
1342        this.member = new ArrayList<GroupMemberComponent>();
1343      return this.member;
1344    }
1345
1346    /**
1347     * @return Returns a reference to <code>this</code> for easy method chaining
1348     */
1349    public Group setMember(List<GroupMemberComponent> theMember) { 
1350      this.member = theMember;
1351      return this;
1352    }
1353
1354    public boolean hasMember() { 
1355      if (this.member == null)
1356        return false;
1357      for (GroupMemberComponent item : this.member)
1358        if (!item.isEmpty())
1359          return true;
1360      return false;
1361    }
1362
1363    public GroupMemberComponent addMember() { //3
1364      GroupMemberComponent t = new GroupMemberComponent();
1365      if (this.member == null)
1366        this.member = new ArrayList<GroupMemberComponent>();
1367      this.member.add(t);
1368      return t;
1369    }
1370
1371    public Group addMember(GroupMemberComponent t) { //3
1372      if (t == null)
1373        return this;
1374      if (this.member == null)
1375        this.member = new ArrayList<GroupMemberComponent>();
1376      this.member.add(t);
1377      return this;
1378    }
1379
1380    /**
1381     * @return The first repetition of repeating field {@link #member}, creating it if it does not already exist
1382     */
1383    public GroupMemberComponent getMemberFirstRep() { 
1384      if (getMember().isEmpty()) {
1385        addMember();
1386      }
1387      return getMember().get(0);
1388    }
1389
1390      protected void listChildren(List<Property> children) {
1391        super.listChildren(children);
1392        children.add(new Property("identifier", "Identifier", "A unique business identifier for this group.", 0, java.lang.Integer.MAX_VALUE, identifier));
1393        children.add(new Property("active", "boolean", "Indicates whether the record for the group is available for use or is merely being retained for historical purposes.", 0, 1, active));
1394        children.add(new Property("type", "code", "Identifies the broad classification of the kind of resources the group includes.", 0, 1, type));
1395        children.add(new Property("actual", "boolean", "If true, indicates that the resource refers to a specific group of real individuals.  If false, the group defines a set of intended individuals.", 0, 1, actual));
1396        children.add(new Property("code", "CodeableConcept", "Provides a specific type of resource the group includes; e.g. \"cow\", \"syringe\", etc.", 0, 1, code));
1397        children.add(new Property("name", "string", "A label assigned to the group for human identification and communication.", 0, 1, name));
1398        children.add(new Property("quantity", "unsignedInt", "A count of the number of resource instances that are part of the group.", 0, 1, quantity));
1399        children.add(new Property("characteristic", "", "Identifies traits whose presence r absence is shared by members of the group.", 0, java.lang.Integer.MAX_VALUE, characteristic));
1400        children.add(new Property("member", "", "Identifies the resource instances that are members of the group.", 0, java.lang.Integer.MAX_VALUE, member));
1401      }
1402
1403      @Override
1404      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1405        switch (_hash) {
1406        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "A unique business identifier for this group.", 0, java.lang.Integer.MAX_VALUE, identifier);
1407        case -1422950650: /*active*/  return new Property("active", "boolean", "Indicates whether the record for the group is available for use or is merely being retained for historical purposes.", 0, 1, active);
1408        case 3575610: /*type*/  return new Property("type", "code", "Identifies the broad classification of the kind of resources the group includes.", 0, 1, type);
1409        case -1422939762: /*actual*/  return new Property("actual", "boolean", "If true, indicates that the resource refers to a specific group of real individuals.  If false, the group defines a set of intended individuals.", 0, 1, actual);
1410        case 3059181: /*code*/  return new Property("code", "CodeableConcept", "Provides a specific type of resource the group includes; e.g. \"cow\", \"syringe\", etc.", 0, 1, code);
1411        case 3373707: /*name*/  return new Property("name", "string", "A label assigned to the group for human identification and communication.", 0, 1, name);
1412        case -1285004149: /*quantity*/  return new Property("quantity", "unsignedInt", "A count of the number of resource instances that are part of the group.", 0, 1, quantity);
1413        case 366313883: /*characteristic*/  return new Property("characteristic", "", "Identifies traits whose presence r absence is shared by members of the group.", 0, java.lang.Integer.MAX_VALUE, characteristic);
1414        case -1077769574: /*member*/  return new Property("member", "", "Identifies the resource instances that are members of the group.", 0, java.lang.Integer.MAX_VALUE, member);
1415        default: return super.getNamedProperty(_hash, _name, _checkValid);
1416        }
1417
1418      }
1419
1420      @Override
1421      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1422        switch (hash) {
1423        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
1424        case -1422950650: /*active*/ return this.active == null ? new Base[0] : new Base[] {this.active}; // BooleanType
1425        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // Enumeration<GroupType>
1426        case -1422939762: /*actual*/ return this.actual == null ? new Base[0] : new Base[] {this.actual}; // BooleanType
1427        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeableConcept
1428        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // StringType
1429        case -1285004149: /*quantity*/ return this.quantity == null ? new Base[0] : new Base[] {this.quantity}; // UnsignedIntType
1430        case 366313883: /*characteristic*/ return this.characteristic == null ? new Base[0] : this.characteristic.toArray(new Base[this.characteristic.size()]); // GroupCharacteristicComponent
1431        case -1077769574: /*member*/ return this.member == null ? new Base[0] : this.member.toArray(new Base[this.member.size()]); // GroupMemberComponent
1432        default: return super.getProperty(hash, name, checkValid);
1433        }
1434
1435      }
1436
1437      @Override
1438      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1439        switch (hash) {
1440        case -1618432855: // identifier
1441          this.getIdentifier().add(castToIdentifier(value)); // Identifier
1442          return value;
1443        case -1422950650: // active
1444          this.active = castToBoolean(value); // BooleanType
1445          return value;
1446        case 3575610: // type
1447          value = new GroupTypeEnumFactory().fromType(castToCode(value));
1448          this.type = (Enumeration) value; // Enumeration<GroupType>
1449          return value;
1450        case -1422939762: // actual
1451          this.actual = castToBoolean(value); // BooleanType
1452          return value;
1453        case 3059181: // code
1454          this.code = castToCodeableConcept(value); // CodeableConcept
1455          return value;
1456        case 3373707: // name
1457          this.name = castToString(value); // StringType
1458          return value;
1459        case -1285004149: // quantity
1460          this.quantity = castToUnsignedInt(value); // UnsignedIntType
1461          return value;
1462        case 366313883: // characteristic
1463          this.getCharacteristic().add((GroupCharacteristicComponent) value); // GroupCharacteristicComponent
1464          return value;
1465        case -1077769574: // member
1466          this.getMember().add((GroupMemberComponent) value); // GroupMemberComponent
1467          return value;
1468        default: return super.setProperty(hash, name, value);
1469        }
1470
1471      }
1472
1473      @Override
1474      public Base setProperty(String name, Base value) throws FHIRException {
1475        if (name.equals("identifier")) {
1476          this.getIdentifier().add(castToIdentifier(value));
1477        } else if (name.equals("active")) {
1478          this.active = castToBoolean(value); // BooleanType
1479        } else if (name.equals("type")) {
1480          value = new GroupTypeEnumFactory().fromType(castToCode(value));
1481          this.type = (Enumeration) value; // Enumeration<GroupType>
1482        } else if (name.equals("actual")) {
1483          this.actual = castToBoolean(value); // BooleanType
1484        } else if (name.equals("code")) {
1485          this.code = castToCodeableConcept(value); // CodeableConcept
1486        } else if (name.equals("name")) {
1487          this.name = castToString(value); // StringType
1488        } else if (name.equals("quantity")) {
1489          this.quantity = castToUnsignedInt(value); // UnsignedIntType
1490        } else if (name.equals("characteristic")) {
1491          this.getCharacteristic().add((GroupCharacteristicComponent) value);
1492        } else if (name.equals("member")) {
1493          this.getMember().add((GroupMemberComponent) value);
1494        } else
1495          return super.setProperty(name, value);
1496        return value;
1497      }
1498
1499      @Override
1500      public Base makeProperty(int hash, String name) throws FHIRException {
1501        switch (hash) {
1502        case -1618432855:  return addIdentifier(); 
1503        case -1422950650:  return getActiveElement();
1504        case 3575610:  return getTypeElement();
1505        case -1422939762:  return getActualElement();
1506        case 3059181:  return getCode(); 
1507        case 3373707:  return getNameElement();
1508        case -1285004149:  return getQuantityElement();
1509        case 366313883:  return addCharacteristic(); 
1510        case -1077769574:  return addMember(); 
1511        default: return super.makeProperty(hash, name);
1512        }
1513
1514      }
1515
1516      @Override
1517      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1518        switch (hash) {
1519        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
1520        case -1422950650: /*active*/ return new String[] {"boolean"};
1521        case 3575610: /*type*/ return new String[] {"code"};
1522        case -1422939762: /*actual*/ return new String[] {"boolean"};
1523        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
1524        case 3373707: /*name*/ return new String[] {"string"};
1525        case -1285004149: /*quantity*/ return new String[] {"unsignedInt"};
1526        case 366313883: /*characteristic*/ return new String[] {};
1527        case -1077769574: /*member*/ return new 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("identifier")) {
1536          return addIdentifier();
1537        }
1538        else if (name.equals("active")) {
1539          throw new FHIRException("Cannot call addChild on a primitive type Group.active");
1540        }
1541        else if (name.equals("type")) {
1542          throw new FHIRException("Cannot call addChild on a primitive type Group.type");
1543        }
1544        else if (name.equals("actual")) {
1545          throw new FHIRException("Cannot call addChild on a primitive type Group.actual");
1546        }
1547        else if (name.equals("code")) {
1548          this.code = new CodeableConcept();
1549          return this.code;
1550        }
1551        else if (name.equals("name")) {
1552          throw new FHIRException("Cannot call addChild on a primitive type Group.name");
1553        }
1554        else if (name.equals("quantity")) {
1555          throw new FHIRException("Cannot call addChild on a primitive type Group.quantity");
1556        }
1557        else if (name.equals("characteristic")) {
1558          return addCharacteristic();
1559        }
1560        else if (name.equals("member")) {
1561          return addMember();
1562        }
1563        else
1564          return super.addChild(name);
1565      }
1566
1567  public String fhirType() {
1568    return "Group";
1569
1570  }
1571
1572      public Group copy() {
1573        Group dst = new Group();
1574        copyValues(dst);
1575        if (identifier != null) {
1576          dst.identifier = new ArrayList<Identifier>();
1577          for (Identifier i : identifier)
1578            dst.identifier.add(i.copy());
1579        };
1580        dst.active = active == null ? null : active.copy();
1581        dst.type = type == null ? null : type.copy();
1582        dst.actual = actual == null ? null : actual.copy();
1583        dst.code = code == null ? null : code.copy();
1584        dst.name = name == null ? null : name.copy();
1585        dst.quantity = quantity == null ? null : quantity.copy();
1586        if (characteristic != null) {
1587          dst.characteristic = new ArrayList<GroupCharacteristicComponent>();
1588          for (GroupCharacteristicComponent i : characteristic)
1589            dst.characteristic.add(i.copy());
1590        };
1591        if (member != null) {
1592          dst.member = new ArrayList<GroupMemberComponent>();
1593          for (GroupMemberComponent i : member)
1594            dst.member.add(i.copy());
1595        };
1596        return dst;
1597      }
1598
1599      protected Group typedCopy() {
1600        return copy();
1601      }
1602
1603      @Override
1604      public boolean equalsDeep(Base other_) {
1605        if (!super.equalsDeep(other_))
1606          return false;
1607        if (!(other_ instanceof Group))
1608          return false;
1609        Group o = (Group) other_;
1610        return compareDeep(identifier, o.identifier, true) && compareDeep(active, o.active, true) && compareDeep(type, o.type, true)
1611           && compareDeep(actual, o.actual, true) && compareDeep(code, o.code, true) && compareDeep(name, o.name, true)
1612           && compareDeep(quantity, o.quantity, true) && compareDeep(characteristic, o.characteristic, true)
1613           && compareDeep(member, o.member, true);
1614      }
1615
1616      @Override
1617      public boolean equalsShallow(Base other_) {
1618        if (!super.equalsShallow(other_))
1619          return false;
1620        if (!(other_ instanceof Group))
1621          return false;
1622        Group o = (Group) other_;
1623        return compareValues(active, o.active, true) && compareValues(type, o.type, true) && compareValues(actual, o.actual, true)
1624           && compareValues(name, o.name, true) && compareValues(quantity, o.quantity, true);
1625      }
1626
1627      public boolean isEmpty() {
1628        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, active, type
1629          , actual, code, name, quantity, characteristic, member);
1630      }
1631
1632  @Override
1633  public ResourceType getResourceType() {
1634    return ResourceType.Group;
1635   }
1636
1637 /**
1638   * Search parameter: <b>actual</b>
1639   * <p>
1640   * Description: <b>Descriptive or actual</b><br>
1641   * Type: <b>token</b><br>
1642   * Path: <b>Group.actual</b><br>
1643   * </p>
1644   */
1645  @SearchParamDefinition(name="actual", path="Group.actual", description="Descriptive or actual", type="token" )
1646  public static final String SP_ACTUAL = "actual";
1647 /**
1648   * <b>Fluent Client</b> search parameter constant for <b>actual</b>
1649   * <p>
1650   * Description: <b>Descriptive or actual</b><br>
1651   * Type: <b>token</b><br>
1652   * Path: <b>Group.actual</b><br>
1653   * </p>
1654   */
1655  public static final ca.uhn.fhir.rest.gclient.TokenClientParam ACTUAL = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_ACTUAL);
1656
1657 /**
1658   * Search parameter: <b>identifier</b>
1659   * <p>
1660   * Description: <b>Unique id</b><br>
1661   * Type: <b>token</b><br>
1662   * Path: <b>Group.identifier</b><br>
1663   * </p>
1664   */
1665  @SearchParamDefinition(name="identifier", path="Group.identifier", description="Unique id", type="token" )
1666  public static final String SP_IDENTIFIER = "identifier";
1667 /**
1668   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
1669   * <p>
1670   * Description: <b>Unique id</b><br>
1671   * Type: <b>token</b><br>
1672   * Path: <b>Group.identifier</b><br>
1673   * </p>
1674   */
1675  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
1676
1677 /**
1678   * Search parameter: <b>characteristic-value</b>
1679   * <p>
1680   * Description: <b>A composite of both characteristic and value</b><br>
1681   * Type: <b>composite</b><br>
1682   * Path: <b></b><br>
1683   * </p>
1684   */
1685  @SearchParamDefinition(name="characteristic-value", path="Group.characteristic", description="A composite of both characteristic and value", type="composite", compositeOf={"characteristic", "value"} )
1686  public static final String SP_CHARACTERISTIC_VALUE = "characteristic-value";
1687 /**
1688   * <b>Fluent Client</b> search parameter constant for <b>characteristic-value</b>
1689   * <p>
1690   * Description: <b>A composite of both characteristic and value</b><br>
1691   * Type: <b>composite</b><br>
1692   * Path: <b></b><br>
1693   * </p>
1694   */
1695  public static final ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.TokenClientParam> CHARACTERISTIC_VALUE = new ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.TokenClientParam>(SP_CHARACTERISTIC_VALUE);
1696
1697 /**
1698   * Search parameter: <b>code</b>
1699   * <p>
1700   * Description: <b>The kind of resources contained</b><br>
1701   * Type: <b>token</b><br>
1702   * Path: <b>Group.code</b><br>
1703   * </p>
1704   */
1705  @SearchParamDefinition(name="code", path="Group.code", description="The kind of resources contained", type="token" )
1706  public static final String SP_CODE = "code";
1707 /**
1708   * <b>Fluent Client</b> search parameter constant for <b>code</b>
1709   * <p>
1710   * Description: <b>The kind of resources contained</b><br>
1711   * Type: <b>token</b><br>
1712   * Path: <b>Group.code</b><br>
1713   * </p>
1714   */
1715  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CODE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CODE);
1716
1717 /**
1718   * Search parameter: <b>member</b>
1719   * <p>
1720   * Description: <b>Reference to the group member</b><br>
1721   * Type: <b>reference</b><br>
1722   * Path: <b>Group.member.entity</b><br>
1723   * </p>
1724   */
1725  @SearchParamDefinition(name="member", path="Group.member.entity", description="Reference to the group member", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Device"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Patient"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Practitioner") }, target={Device.class, Medication.class, Patient.class, Practitioner.class, PractitionerRole.class, Substance.class } )
1726  public static final String SP_MEMBER = "member";
1727 /**
1728   * <b>Fluent Client</b> search parameter constant for <b>member</b>
1729   * <p>
1730   * Description: <b>Reference to the group member</b><br>
1731   * Type: <b>reference</b><br>
1732   * Path: <b>Group.member.entity</b><br>
1733   * </p>
1734   */
1735  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam MEMBER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_MEMBER);
1736
1737/**
1738   * Constant for fluent queries to be used to add include statements. Specifies
1739   * the path value of "<b>Group:member</b>".
1740   */
1741  public static final ca.uhn.fhir.model.api.Include INCLUDE_MEMBER = new ca.uhn.fhir.model.api.Include("Group:member").toLocked();
1742
1743 /**
1744   * Search parameter: <b>exclude</b>
1745   * <p>
1746   * Description: <b>Group includes or excludes</b><br>
1747   * Type: <b>token</b><br>
1748   * Path: <b>Group.characteristic.exclude</b><br>
1749   * </p>
1750   */
1751  @SearchParamDefinition(name="exclude", path="Group.characteristic.exclude", description="Group includes or excludes", type="token" )
1752  public static final String SP_EXCLUDE = "exclude";
1753 /**
1754   * <b>Fluent Client</b> search parameter constant for <b>exclude</b>
1755   * <p>
1756   * Description: <b>Group includes or excludes</b><br>
1757   * Type: <b>token</b><br>
1758   * Path: <b>Group.characteristic.exclude</b><br>
1759   * </p>
1760   */
1761  public static final ca.uhn.fhir.rest.gclient.TokenClientParam EXCLUDE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_EXCLUDE);
1762
1763 /**
1764   * Search parameter: <b>type</b>
1765   * <p>
1766   * Description: <b>The type of resources the group contains</b><br>
1767   * Type: <b>token</b><br>
1768   * Path: <b>Group.type</b><br>
1769   * </p>
1770   */
1771  @SearchParamDefinition(name="type", path="Group.type", description="The type of resources the group contains", type="token" )
1772  public static final String SP_TYPE = "type";
1773 /**
1774   * <b>Fluent Client</b> search parameter constant for <b>type</b>
1775   * <p>
1776   * Description: <b>The type of resources the group contains</b><br>
1777   * Type: <b>token</b><br>
1778   * Path: <b>Group.type</b><br>
1779   * </p>
1780   */
1781  public static final ca.uhn.fhir.rest.gclient.TokenClientParam TYPE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_TYPE);
1782
1783 /**
1784   * Search parameter: <b>value</b>
1785   * <p>
1786   * Description: <b>Value held by characteristic</b><br>
1787   * Type: <b>token</b><br>
1788   * Path: <b>Group.characteristic.value[x]</b><br>
1789   * </p>
1790   */
1791  @SearchParamDefinition(name="value", path="Group.characteristic.value", description="Value held by characteristic", type="token" )
1792  public static final String SP_VALUE = "value";
1793 /**
1794   * <b>Fluent Client</b> search parameter constant for <b>value</b>
1795   * <p>
1796   * Description: <b>Value held by characteristic</b><br>
1797   * Type: <b>token</b><br>
1798   * Path: <b>Group.characteristic.value[x]</b><br>
1799   * </p>
1800   */
1801  public static final ca.uhn.fhir.rest.gclient.TokenClientParam VALUE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_VALUE);
1802
1803 /**
1804   * Search parameter: <b>characteristic</b>
1805   * <p>
1806   * Description: <b>Kind of characteristic</b><br>
1807   * Type: <b>token</b><br>
1808   * Path: <b>Group.characteristic.code</b><br>
1809   * </p>
1810   */
1811  @SearchParamDefinition(name="characteristic", path="Group.characteristic.code", description="Kind of characteristic", type="token" )
1812  public static final String SP_CHARACTERISTIC = "characteristic";
1813 /**
1814   * <b>Fluent Client</b> search parameter constant for <b>characteristic</b>
1815   * <p>
1816   * Description: <b>Kind of characteristic</b><br>
1817   * Type: <b>token</b><br>
1818   * Path: <b>Group.characteristic.code</b><br>
1819   * </p>
1820   */
1821  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CHARACTERISTIC = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CHARACTERISTIC);
1822
1823
1824}
1825