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