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