001package org.hl7.fhir.dstu2.model;
002
003
004
005
006/*
007  Copyright (c) 2011+, HL7, Inc.
008  All rights reserved.
009  
010  Redistribution and use in source and binary forms, with or without modification, 
011  are permitted provided that the following conditions are met:
012  
013   * Redistributions of source code must retain the above copyright notice, this 
014     list of conditions and the following disclaimer.
015   * Redistributions in binary form must reproduce the above copyright notice, 
016     this list of conditions and the following disclaimer in the documentation 
017     and/or other materials provided with the distribution.
018   * Neither the name of HL7 nor the names of its contributors may be used to 
019     endorse or promote products derived from this software without specific 
020     prior written permission.
021  
022  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
023  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
024  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
025  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
026  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
027  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
028  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
029  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
030  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
031  POSSIBILITY OF SUCH DAMAGE.
032  
033*/
034
035// Generated on Wed, Jul 13, 2016 05:32+1000 for FHIR v1.0.2
036import java.util.ArrayList;
037import java.util.List;
038
039import ca.uhn.fhir.model.api.annotation.Block;
040import ca.uhn.fhir.model.api.annotation.Child;
041import ca.uhn.fhir.model.api.annotation.Description;
042import ca.uhn.fhir.model.api.annotation.ResourceDef;
043import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
044import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
045import org.hl7.fhir.exceptions.FHIRException;
046import org.hl7.fhir.utilities.Utilities;
047/**
048 * 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.
049 */
050@ResourceDef(name="Group", profile="http://hl7.org/fhir/Profile/Group")
051public class Group extends DomainResource {
052
053    public enum GroupType {
054        /**
055         * Group contains "person" Patient resources
056         */
057        PERSON, 
058        /**
059         * Group contains "animal" Patient resources
060         */
061        ANIMAL, 
062        /**
063         * Group contains healthcare practitioner resources
064         */
065        PRACTITIONER, 
066        /**
067         * Group contains Device resources
068         */
069        DEVICE, 
070        /**
071         * Group contains Medication resources
072         */
073        MEDICATION, 
074        /**
075         * Group contains Substance resources
076         */
077        SUBSTANCE, 
078        /**
079         * added to help the parsers
080         */
081        NULL;
082        public static GroupType fromCode(String codeString) throws FHIRException {
083            if (codeString == null || "".equals(codeString))
084                return null;
085        if ("person".equals(codeString))
086          return PERSON;
087        if ("animal".equals(codeString))
088          return ANIMAL;
089        if ("practitioner".equals(codeString))
090          return PRACTITIONER;
091        if ("device".equals(codeString))
092          return DEVICE;
093        if ("medication".equals(codeString))
094          return MEDICATION;
095        if ("substance".equals(codeString))
096          return SUBSTANCE;
097        throw new FHIRException("Unknown GroupType code '"+codeString+"'");
098        }
099        public String toCode() {
100          switch (this) {
101            case PERSON: return "person";
102            case ANIMAL: return "animal";
103            case PRACTITIONER: return "practitioner";
104            case DEVICE: return "device";
105            case MEDICATION: return "medication";
106            case SUBSTANCE: return "substance";
107            case NULL: return null;
108            default: return "?";
109          }
110        }
111        public String getSystem() {
112          switch (this) {
113            case PERSON: return "http://hl7.org/fhir/group-type";
114            case ANIMAL: return "http://hl7.org/fhir/group-type";
115            case PRACTITIONER: return "http://hl7.org/fhir/group-type";
116            case DEVICE: return "http://hl7.org/fhir/group-type";
117            case MEDICATION: return "http://hl7.org/fhir/group-type";
118            case SUBSTANCE: return "http://hl7.org/fhir/group-type";
119            case NULL: return null;
120            default: return "?";
121          }
122        }
123        public String getDefinition() {
124          switch (this) {
125            case PERSON: return "Group contains \"person\" Patient resources";
126            case ANIMAL: return "Group contains \"animal\" Patient resources";
127            case PRACTITIONER: return "Group contains healthcare practitioner resources";
128            case DEVICE: return "Group contains Device resources";
129            case MEDICATION: return "Group contains Medication resources";
130            case SUBSTANCE: return "Group contains Substance resources";
131            case NULL: return null;
132            default: return "?";
133          }
134        }
135        public String getDisplay() {
136          switch (this) {
137            case PERSON: return "Person";
138            case ANIMAL: return "Animal";
139            case PRACTITIONER: return "Practitioner";
140            case DEVICE: return "Device";
141            case MEDICATION: return "Medication";
142            case SUBSTANCE: return "Substance";
143            case NULL: return null;
144            default: return "?";
145          }
146        }
147    }
148
149  public static class GroupTypeEnumFactory implements EnumFactory<GroupType> {
150    public GroupType fromCode(String codeString) throws IllegalArgumentException {
151      if (codeString == null || "".equals(codeString))
152            if (codeString == null || "".equals(codeString))
153                return null;
154        if ("person".equals(codeString))
155          return GroupType.PERSON;
156        if ("animal".equals(codeString))
157          return GroupType.ANIMAL;
158        if ("practitioner".equals(codeString))
159          return GroupType.PRACTITIONER;
160        if ("device".equals(codeString))
161          return GroupType.DEVICE;
162        if ("medication".equals(codeString))
163          return GroupType.MEDICATION;
164        if ("substance".equals(codeString))
165          return GroupType.SUBSTANCE;
166        throw new IllegalArgumentException("Unknown GroupType code '"+codeString+"'");
167        }
168        public Enumeration<GroupType> fromType(Base code) throws FHIRException {
169          if (code == null || code.isEmpty())
170            return null;
171          String codeString = ((PrimitiveType) code).asStringValue();
172          if (codeString == null || "".equals(codeString))
173            return null;
174        if ("person".equals(codeString))
175          return new Enumeration<GroupType>(this, GroupType.PERSON);
176        if ("animal".equals(codeString))
177          return new Enumeration<GroupType>(this, GroupType.ANIMAL);
178        if ("practitioner".equals(codeString))
179          return new Enumeration<GroupType>(this, GroupType.PRACTITIONER);
180        if ("device".equals(codeString))
181          return new Enumeration<GroupType>(this, GroupType.DEVICE);
182        if ("medication".equals(codeString))
183          return new Enumeration<GroupType>(this, GroupType.MEDICATION);
184        if ("substance".equals(codeString))
185          return new Enumeration<GroupType>(this, GroupType.SUBSTANCE);
186        throw new FHIRException("Unknown GroupType code '"+codeString+"'");
187        }
188    public String toCode(GroupType code) {
189      if (code == GroupType.PERSON)
190        return "person";
191      if (code == GroupType.ANIMAL)
192        return "animal";
193      if (code == GroupType.PRACTITIONER)
194        return "practitioner";
195      if (code == GroupType.DEVICE)
196        return "device";
197      if (code == GroupType.MEDICATION)
198        return "medication";
199      if (code == GroupType.SUBSTANCE)
200        return "substance";
201      return "?";
202      }
203    }
204
205    @Block()
206    public static class GroupCharacteristicComponent extends BackboneElement implements IBaseBackboneElement {
207        /**
208         * A code that identifies the kind of trait being asserted.
209         */
210        @Child(name = "code", type = {CodeableConcept.class}, order=1, min=1, max=1, modifier=false, summary=false)
211        @Description(shortDefinition="Kind of characteristic", formalDefinition="A code that identifies the kind of trait being asserted." )
212        protected CodeableConcept code;
213
214        /**
215         * The value of the trait that holds (or does not hold - see 'exclude') for members of the group.
216         */
217        @Child(name = "value", type = {CodeableConcept.class, BooleanType.class, Quantity.class, Range.class}, order=2, min=1, max=1, modifier=false, summary=false)
218        @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." )
219        protected Type value;
220
221        /**
222         * If true, indicates the characteristic is one that is NOT held by members of the group.
223         */
224        @Child(name = "exclude", type = {BooleanType.class}, order=3, min=1, max=1, modifier=true, summary=false)
225        @Description(shortDefinition="Group includes or excludes", formalDefinition="If true, indicates the characteristic is one that is NOT held by members of the group." )
226        protected BooleanType exclude;
227
228        /**
229         * The period over which the characteristic is tested; e.g. the patient had an operation during the month of June.
230         */
231        @Child(name = "period", type = {Period.class}, order=4, min=0, max=1, modifier=false, summary=false)
232        @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." )
233        protected Period period;
234
235        private static final long serialVersionUID = -1000688967L;
236
237    /*
238     * Constructor
239     */
240      public GroupCharacteristicComponent() {
241        super();
242      }
243
244    /*
245     * Constructor
246     */
247      public GroupCharacteristicComponent(CodeableConcept code, Type value, BooleanType exclude) {
248        super();
249        this.code = code;
250        this.value = value;
251        this.exclude = exclude;
252      }
253
254        /**
255         * @return {@link #code} (A code that identifies the kind of trait being asserted.)
256         */
257        public CodeableConcept getCode() { 
258          if (this.code == null)
259            if (Configuration.errorOnAutoCreate())
260              throw new Error("Attempt to auto-create GroupCharacteristicComponent.code");
261            else if (Configuration.doAutoCreate())
262              this.code = new CodeableConcept(); // cc
263          return this.code;
264        }
265
266        public boolean hasCode() { 
267          return this.code != null && !this.code.isEmpty();
268        }
269
270        /**
271         * @param value {@link #code} (A code that identifies the kind of trait being asserted.)
272         */
273        public GroupCharacteristicComponent setCode(CodeableConcept value) { 
274          this.code = value;
275          return this;
276        }
277
278        /**
279         * @return {@link #value} (The value of the trait that holds (or does not hold - see 'exclude') for members of the group.)
280         */
281        public Type getValue() { 
282          return this.value;
283        }
284
285        /**
286         * @return {@link #value} (The value of the trait that holds (or does not hold - see 'exclude') for members of the group.)
287         */
288        public CodeableConcept getValueCodeableConcept() throws FHIRException { 
289          if (!(this.value instanceof CodeableConcept))
290            throw new FHIRException("Type mismatch: the type CodeableConcept was expected, but "+this.value.getClass().getName()+" was encountered");
291          return (CodeableConcept) this.value;
292        }
293
294        public boolean hasValueCodeableConcept() { 
295          return this.value instanceof CodeableConcept;
296        }
297
298        /**
299         * @return {@link #value} (The value of the trait that holds (or does not hold - see 'exclude') for members of the group.)
300         */
301        public BooleanType getValueBooleanType() throws FHIRException { 
302          if (!(this.value instanceof BooleanType))
303            throw new FHIRException("Type mismatch: the type BooleanType was expected, but "+this.value.getClass().getName()+" was encountered");
304          return (BooleanType) this.value;
305        }
306
307        public boolean hasValueBooleanType() { 
308          return this.value instanceof BooleanType;
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 Quantity getValueQuantity() throws FHIRException { 
315          if (!(this.value instanceof Quantity))
316            throw new FHIRException("Type mismatch: the type Quantity was expected, but "+this.value.getClass().getName()+" was encountered");
317          return (Quantity) this.value;
318        }
319
320        public boolean hasValueQuantity() { 
321          return this.value instanceof Quantity;
322        }
323
324        /**
325         * @return {@link #value} (The value of the trait that holds (or does not hold - see 'exclude') for members of the group.)
326         */
327        public Range getValueRange() throws FHIRException { 
328          if (!(this.value instanceof Range))
329            throw new FHIRException("Type mismatch: the type Range was expected, but "+this.value.getClass().getName()+" was encountered");
330          return (Range) this.value;
331        }
332
333        public boolean hasValueRange() { 
334          return this.value instanceof Range;
335        }
336
337        public boolean hasValue() { 
338          return this.value != null && !this.value.isEmpty();
339        }
340
341        /**
342         * @param value {@link #value} (The value of the trait that holds (or does not hold - see 'exclude') for members of the group.)
343         */
344        public GroupCharacteristicComponent setValue(Type value) { 
345          this.value = value;
346          return this;
347        }
348
349        /**
350         * @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
351         */
352        public BooleanType getExcludeElement() { 
353          if (this.exclude == null)
354            if (Configuration.errorOnAutoCreate())
355              throw new Error("Attempt to auto-create GroupCharacteristicComponent.exclude");
356            else if (Configuration.doAutoCreate())
357              this.exclude = new BooleanType(); // bb
358          return this.exclude;
359        }
360
361        public boolean hasExcludeElement() { 
362          return this.exclude != null && !this.exclude.isEmpty();
363        }
364
365        public boolean hasExclude() { 
366          return this.exclude != null && !this.exclude.isEmpty();
367        }
368
369        /**
370         * @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
371         */
372        public GroupCharacteristicComponent setExcludeElement(BooleanType value) { 
373          this.exclude = value;
374          return this;
375        }
376
377        /**
378         * @return If true, indicates the characteristic is one that is NOT held by members of the group.
379         */
380        public boolean getExclude() { 
381          return this.exclude == null || this.exclude.isEmpty() ? false : this.exclude.getValue();
382        }
383
384        /**
385         * @param value If true, indicates the characteristic is one that is NOT held by members of the group.
386         */
387        public GroupCharacteristicComponent setExclude(boolean value) { 
388            if (this.exclude == null)
389              this.exclude = new BooleanType();
390            this.exclude.setValue(value);
391          return this;
392        }
393
394        /**
395         * @return {@link #period} (The period over which the characteristic is tested; e.g. the patient had an operation during the month of June.)
396         */
397        public Period getPeriod() { 
398          if (this.period == null)
399            if (Configuration.errorOnAutoCreate())
400              throw new Error("Attempt to auto-create GroupCharacteristicComponent.period");
401            else if (Configuration.doAutoCreate())
402              this.period = new Period(); // cc
403          return this.period;
404        }
405
406        public boolean hasPeriod() { 
407          return this.period != null && !this.period.isEmpty();
408        }
409
410        /**
411         * @param value {@link #period} (The period over which the characteristic is tested; e.g. the patient had an operation during the month of June.)
412         */
413        public GroupCharacteristicComponent setPeriod(Period value) { 
414          this.period = value;
415          return this;
416        }
417
418        protected void listChildren(List<Property> childrenList) {
419          super.listChildren(childrenList);
420          childrenList.add(new Property("code", "CodeableConcept", "A code that identifies the kind of trait being asserted.", 0, java.lang.Integer.MAX_VALUE, code));
421          childrenList.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, java.lang.Integer.MAX_VALUE, value));
422          childrenList.add(new Property("exclude", "boolean", "If true, indicates the characteristic is one that is NOT held by members of the group.", 0, java.lang.Integer.MAX_VALUE, exclude));
423          childrenList.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, java.lang.Integer.MAX_VALUE, period));
424        }
425
426      @Override
427      public void setProperty(String name, Base value) throws FHIRException {
428        if (name.equals("code"))
429          this.code = castToCodeableConcept(value); // CodeableConcept
430        else if (name.equals("value[x]"))
431          this.value = (Type) value; // Type
432        else if (name.equals("exclude"))
433          this.exclude = castToBoolean(value); // BooleanType
434        else if (name.equals("period"))
435          this.period = castToPeriod(value); // Period
436        else
437          super.setProperty(name, value);
438      }
439
440      @Override
441      public Base addChild(String name) throws FHIRException {
442        if (name.equals("code")) {
443          this.code = new CodeableConcept();
444          return this.code;
445        }
446        else if (name.equals("valueCodeableConcept")) {
447          this.value = new CodeableConcept();
448          return this.value;
449        }
450        else if (name.equals("valueBoolean")) {
451          this.value = new BooleanType();
452          return this.value;
453        }
454        else if (name.equals("valueQuantity")) {
455          this.value = new Quantity();
456          return this.value;
457        }
458        else if (name.equals("valueRange")) {
459          this.value = new Range();
460          return this.value;
461        }
462        else if (name.equals("exclude")) {
463          throw new FHIRException("Cannot call addChild on a primitive type Group.exclude");
464        }
465        else if (name.equals("period")) {
466          this.period = new Period();
467          return this.period;
468        }
469        else
470          return super.addChild(name);
471      }
472
473      public GroupCharacteristicComponent copy() {
474        GroupCharacteristicComponent dst = new GroupCharacteristicComponent();
475        copyValues(dst);
476        dst.code = code == null ? null : code.copy();
477        dst.value = value == null ? null : value.copy();
478        dst.exclude = exclude == null ? null : exclude.copy();
479        dst.period = period == null ? null : period.copy();
480        return dst;
481      }
482
483      @Override
484      public boolean equalsDeep(Base other) {
485        if (!super.equalsDeep(other))
486          return false;
487        if (!(other instanceof GroupCharacteristicComponent))
488          return false;
489        GroupCharacteristicComponent o = (GroupCharacteristicComponent) other;
490        return compareDeep(code, o.code, true) && compareDeep(value, o.value, true) && compareDeep(exclude, o.exclude, true)
491           && compareDeep(period, o.period, true);
492      }
493
494      @Override
495      public boolean equalsShallow(Base other) {
496        if (!super.equalsShallow(other))
497          return false;
498        if (!(other instanceof GroupCharacteristicComponent))
499          return false;
500        GroupCharacteristicComponent o = (GroupCharacteristicComponent) other;
501        return compareValues(exclude, o.exclude, true);
502      }
503
504      public boolean isEmpty() {
505        return super.isEmpty() && (code == null || code.isEmpty()) && (value == null || value.isEmpty())
506           && (exclude == null || exclude.isEmpty()) && (period == null || period.isEmpty());
507      }
508
509  public String fhirType() {
510    return "Group.characteristic";
511
512  }
513
514  }
515
516    @Block()
517    public static class GroupMemberComponent extends BackboneElement implements IBaseBackboneElement {
518        /**
519         * A reference to the entity that is a member of the group. Must be consistent with Group.type.
520         */
521        @Child(name = "entity", type = {Patient.class, Practitioner.class, Device.class, Medication.class, Substance.class}, order=1, min=1, max=1, modifier=false, summary=false)
522        @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." )
523        protected Reference entity;
524
525        /**
526         * 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.)
527         */
528        protected Resource entityTarget;
529
530        /**
531         * The period that the member was in the group, if known.
532         */
533        @Child(name = "period", type = {Period.class}, order=2, min=0, max=1, modifier=false, summary=false)
534        @Description(shortDefinition="Period member belonged to the group", formalDefinition="The period that the member was in the group, if known." )
535        protected Period period;
536
537        /**
538         * A flag to indicate that the member is no longer in the group, but previously may have been a member.
539         */
540        @Child(name = "inactive", type = {BooleanType.class}, order=3, min=0, max=1, modifier=false, summary=false)
541        @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." )
542        protected BooleanType inactive;
543
544        private static final long serialVersionUID = -333869055L;
545
546    /*
547     * Constructor
548     */
549      public GroupMemberComponent() {
550        super();
551      }
552
553    /*
554     * Constructor
555     */
556      public GroupMemberComponent(Reference entity) {
557        super();
558        this.entity = entity;
559      }
560
561        /**
562         * @return {@link #entity} (A reference to the entity that is a member of the group. Must be consistent with Group.type.)
563         */
564        public Reference getEntity() { 
565          if (this.entity == null)
566            if (Configuration.errorOnAutoCreate())
567              throw new Error("Attempt to auto-create GroupMemberComponent.entity");
568            else if (Configuration.doAutoCreate())
569              this.entity = new Reference(); // cc
570          return this.entity;
571        }
572
573        public boolean hasEntity() { 
574          return this.entity != null && !this.entity.isEmpty();
575        }
576
577        /**
578         * @param value {@link #entity} (A reference to the entity that is a member of the group. Must be consistent with Group.type.)
579         */
580        public GroupMemberComponent setEntity(Reference value) { 
581          this.entity = value;
582          return this;
583        }
584
585        /**
586         * @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.)
587         */
588        public Resource getEntityTarget() { 
589          return this.entityTarget;
590        }
591
592        /**
593         * @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.)
594         */
595        public GroupMemberComponent setEntityTarget(Resource value) { 
596          this.entityTarget = value;
597          return this;
598        }
599
600        /**
601         * @return {@link #period} (The period that the member was in the group, if known.)
602         */
603        public Period getPeriod() { 
604          if (this.period == null)
605            if (Configuration.errorOnAutoCreate())
606              throw new Error("Attempt to auto-create GroupMemberComponent.period");
607            else if (Configuration.doAutoCreate())
608              this.period = new Period(); // cc
609          return this.period;
610        }
611
612        public boolean hasPeriod() { 
613          return this.period != null && !this.period.isEmpty();
614        }
615
616        /**
617         * @param value {@link #period} (The period that the member was in the group, if known.)
618         */
619        public GroupMemberComponent setPeriod(Period value) { 
620          this.period = value;
621          return this;
622        }
623
624        /**
625         * @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
626         */
627        public BooleanType getInactiveElement() { 
628          if (this.inactive == null)
629            if (Configuration.errorOnAutoCreate())
630              throw new Error("Attempt to auto-create GroupMemberComponent.inactive");
631            else if (Configuration.doAutoCreate())
632              this.inactive = new BooleanType(); // bb
633          return this.inactive;
634        }
635
636        public boolean hasInactiveElement() { 
637          return this.inactive != null && !this.inactive.isEmpty();
638        }
639
640        public boolean hasInactive() { 
641          return this.inactive != null && !this.inactive.isEmpty();
642        }
643
644        /**
645         * @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
646         */
647        public GroupMemberComponent setInactiveElement(BooleanType value) { 
648          this.inactive = value;
649          return this;
650        }
651
652        /**
653         * @return A flag to indicate that the member is no longer in the group, but previously may have been a member.
654         */
655        public boolean getInactive() { 
656          return this.inactive == null || this.inactive.isEmpty() ? false : this.inactive.getValue();
657        }
658
659        /**
660         * @param value A flag to indicate that the member is no longer in the group, but previously may have been a member.
661         */
662        public GroupMemberComponent setInactive(boolean value) { 
663            if (this.inactive == null)
664              this.inactive = new BooleanType();
665            this.inactive.setValue(value);
666          return this;
667        }
668
669        protected void listChildren(List<Property> childrenList) {
670          super.listChildren(childrenList);
671          childrenList.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, java.lang.Integer.MAX_VALUE, entity));
672          childrenList.add(new Property("period", "Period", "The period that the member was in the group, if known.", 0, java.lang.Integer.MAX_VALUE, period));
673          childrenList.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, java.lang.Integer.MAX_VALUE, inactive));
674        }
675
676      @Override
677      public void setProperty(String name, Base value) throws FHIRException {
678        if (name.equals("entity"))
679          this.entity = castToReference(value); // Reference
680        else if (name.equals("period"))
681          this.period = castToPeriod(value); // Period
682        else if (name.equals("inactive"))
683          this.inactive = castToBoolean(value); // BooleanType
684        else
685          super.setProperty(name, value);
686      }
687
688      @Override
689      public Base addChild(String name) throws FHIRException {
690        if (name.equals("entity")) {
691          this.entity = new Reference();
692          return this.entity;
693        }
694        else if (name.equals("period")) {
695          this.period = new Period();
696          return this.period;
697        }
698        else if (name.equals("inactive")) {
699          throw new FHIRException("Cannot call addChild on a primitive type Group.inactive");
700        }
701        else
702          return super.addChild(name);
703      }
704
705      public GroupMemberComponent copy() {
706        GroupMemberComponent dst = new GroupMemberComponent();
707        copyValues(dst);
708        dst.entity = entity == null ? null : entity.copy();
709        dst.period = period == null ? null : period.copy();
710        dst.inactive = inactive == null ? null : inactive.copy();
711        return dst;
712      }
713
714      @Override
715      public boolean equalsDeep(Base other) {
716        if (!super.equalsDeep(other))
717          return false;
718        if (!(other instanceof GroupMemberComponent))
719          return false;
720        GroupMemberComponent o = (GroupMemberComponent) other;
721        return compareDeep(entity, o.entity, true) && compareDeep(period, o.period, true) && compareDeep(inactive, o.inactive, true)
722          ;
723      }
724
725      @Override
726      public boolean equalsShallow(Base other) {
727        if (!super.equalsShallow(other))
728          return false;
729        if (!(other instanceof GroupMemberComponent))
730          return false;
731        GroupMemberComponent o = (GroupMemberComponent) other;
732        return compareValues(inactive, o.inactive, true);
733      }
734
735      public boolean isEmpty() {
736        return super.isEmpty() && (entity == null || entity.isEmpty()) && (period == null || period.isEmpty())
737           && (inactive == null || inactive.isEmpty());
738      }
739
740  public String fhirType() {
741    return "Group.member";
742
743  }
744
745  }
746
747    /**
748     * A unique business identifier for this group.
749     */
750    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
751    @Description(shortDefinition="Unique id", formalDefinition="A unique business identifier for this group." )
752    protected List<Identifier> identifier;
753
754    /**
755     * Identifies the broad classification of the kind of resources the group includes.
756     */
757    @Child(name = "type", type = {CodeType.class}, order=1, min=1, max=1, modifier=false, summary=true)
758    @Description(shortDefinition="person | animal | practitioner | device | medication | substance", formalDefinition="Identifies the broad classification of the kind of resources the group includes." )
759    protected Enumeration<GroupType> type;
760
761    /**
762     * If true, indicates that the resource refers to a specific group of real individuals.  If false, the group defines a set of intended individuals.
763     */
764    @Child(name = "actual", type = {BooleanType.class}, order=2, min=1, max=1, modifier=false, summary=true)
765    @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." )
766    protected BooleanType actual;
767
768    /**
769     * Provides a specific type of resource the group includes; e.g. "cow", "syringe", etc.
770     */
771    @Child(name = "code", type = {CodeableConcept.class}, order=3, min=0, max=1, modifier=false, summary=true)
772    @Description(shortDefinition="Kind of Group members", formalDefinition="Provides a specific type of resource the group includes; e.g. \"cow\", \"syringe\", etc." )
773    protected CodeableConcept code;
774
775    /**
776     * A label assigned to the group for human identification and communication.
777     */
778    @Child(name = "name", type = {StringType.class}, order=4, min=0, max=1, modifier=false, summary=true)
779    @Description(shortDefinition="Label for Group", formalDefinition="A label assigned to the group for human identification and communication." )
780    protected StringType name;
781
782    /**
783     * A count of the number of resource instances that are part of the group.
784     */
785    @Child(name = "quantity", type = {UnsignedIntType.class}, order=5, min=0, max=1, modifier=false, summary=true)
786    @Description(shortDefinition="Number of members", formalDefinition="A count of the number of resource instances that are part of the group." )
787    protected UnsignedIntType quantity;
788
789    /**
790     * Identifies the traits shared by members of the group.
791     */
792    @Child(name = "characteristic", type = {}, order=6, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
793    @Description(shortDefinition="Trait of group members", formalDefinition="Identifies the traits shared by members of the group." )
794    protected List<GroupCharacteristicComponent> characteristic;
795
796    /**
797     * Identifies the resource instances that are members of the group.
798     */
799    @Child(name = "member", type = {}, order=7, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
800    @Description(shortDefinition="Who or what is in group", formalDefinition="Identifies the resource instances that are members of the group." )
801    protected List<GroupMemberComponent> member;
802
803    private static final long serialVersionUID = 1401345819L;
804
805  /*
806   * Constructor
807   */
808    public Group() {
809      super();
810    }
811
812  /*
813   * Constructor
814   */
815    public Group(Enumeration<GroupType> type, BooleanType actual) {
816      super();
817      this.type = type;
818      this.actual = actual;
819    }
820
821    /**
822     * @return {@link #identifier} (A unique business identifier for this group.)
823     */
824    public List<Identifier> getIdentifier() { 
825      if (this.identifier == null)
826        this.identifier = new ArrayList<Identifier>();
827      return this.identifier;
828    }
829
830    public boolean hasIdentifier() { 
831      if (this.identifier == null)
832        return false;
833      for (Identifier item : this.identifier)
834        if (!item.isEmpty())
835          return true;
836      return false;
837    }
838
839    /**
840     * @return {@link #identifier} (A unique business identifier for this group.)
841     */
842    // syntactic sugar
843    public Identifier addIdentifier() { //3
844      Identifier t = new Identifier();
845      if (this.identifier == null)
846        this.identifier = new ArrayList<Identifier>();
847      this.identifier.add(t);
848      return t;
849    }
850
851    // syntactic sugar
852    public Group addIdentifier(Identifier t) { //3
853      if (t == null)
854        return this;
855      if (this.identifier == null)
856        this.identifier = new ArrayList<Identifier>();
857      this.identifier.add(t);
858      return this;
859    }
860
861    /**
862     * @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
863     */
864    public Enumeration<GroupType> getTypeElement() { 
865      if (this.type == null)
866        if (Configuration.errorOnAutoCreate())
867          throw new Error("Attempt to auto-create Group.type");
868        else if (Configuration.doAutoCreate())
869          this.type = new Enumeration<GroupType>(new GroupTypeEnumFactory()); // bb
870      return this.type;
871    }
872
873    public boolean hasTypeElement() { 
874      return this.type != null && !this.type.isEmpty();
875    }
876
877    public boolean hasType() { 
878      return this.type != null && !this.type.isEmpty();
879    }
880
881    /**
882     * @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
883     */
884    public Group setTypeElement(Enumeration<GroupType> value) { 
885      this.type = value;
886      return this;
887    }
888
889    /**
890     * @return Identifies the broad classification of the kind of resources the group includes.
891     */
892    public GroupType getType() { 
893      return this.type == null ? null : this.type.getValue();
894    }
895
896    /**
897     * @param value Identifies the broad classification of the kind of resources the group includes.
898     */
899    public Group setType(GroupType value) { 
900        if (this.type == null)
901          this.type = new Enumeration<GroupType>(new GroupTypeEnumFactory());
902        this.type.setValue(value);
903      return this;
904    }
905
906    /**
907     * @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
908     */
909    public BooleanType getActualElement() { 
910      if (this.actual == null)
911        if (Configuration.errorOnAutoCreate())
912          throw new Error("Attempt to auto-create Group.actual");
913        else if (Configuration.doAutoCreate())
914          this.actual = new BooleanType(); // bb
915      return this.actual;
916    }
917
918    public boolean hasActualElement() { 
919      return this.actual != null && !this.actual.isEmpty();
920    }
921
922    public boolean hasActual() { 
923      return this.actual != null && !this.actual.isEmpty();
924    }
925
926    /**
927     * @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
928     */
929    public Group setActualElement(BooleanType value) { 
930      this.actual = value;
931      return this;
932    }
933
934    /**
935     * @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.
936     */
937    public boolean getActual() { 
938      return this.actual == null || this.actual.isEmpty() ? false : this.actual.getValue();
939    }
940
941    /**
942     * @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.
943     */
944    public Group setActual(boolean value) { 
945        if (this.actual == null)
946          this.actual = new BooleanType();
947        this.actual.setValue(value);
948      return this;
949    }
950
951    /**
952     * @return {@link #code} (Provides a specific type of resource the group includes; e.g. "cow", "syringe", etc.)
953     */
954    public CodeableConcept getCode() { 
955      if (this.code == null)
956        if (Configuration.errorOnAutoCreate())
957          throw new Error("Attempt to auto-create Group.code");
958        else if (Configuration.doAutoCreate())
959          this.code = new CodeableConcept(); // cc
960      return this.code;
961    }
962
963    public boolean hasCode() { 
964      return this.code != null && !this.code.isEmpty();
965    }
966
967    /**
968     * @param value {@link #code} (Provides a specific type of resource the group includes; e.g. "cow", "syringe", etc.)
969     */
970    public Group setCode(CodeableConcept value) { 
971      this.code = value;
972      return this;
973    }
974
975    /**
976     * @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
977     */
978    public StringType getNameElement() { 
979      if (this.name == null)
980        if (Configuration.errorOnAutoCreate())
981          throw new Error("Attempt to auto-create Group.name");
982        else if (Configuration.doAutoCreate())
983          this.name = new StringType(); // bb
984      return this.name;
985    }
986
987    public boolean hasNameElement() { 
988      return this.name != null && !this.name.isEmpty();
989    }
990
991    public boolean hasName() { 
992      return this.name != null && !this.name.isEmpty();
993    }
994
995    /**
996     * @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
997     */
998    public Group setNameElement(StringType value) { 
999      this.name = value;
1000      return this;
1001    }
1002
1003    /**
1004     * @return A label assigned to the group for human identification and communication.
1005     */
1006    public String getName() { 
1007      return this.name == null ? null : this.name.getValue();
1008    }
1009
1010    /**
1011     * @param value A label assigned to the group for human identification and communication.
1012     */
1013    public Group setName(String value) { 
1014      if (Utilities.noString(value))
1015        this.name = null;
1016      else {
1017        if (this.name == null)
1018          this.name = new StringType();
1019        this.name.setValue(value);
1020      }
1021      return this;
1022    }
1023
1024    /**
1025     * @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
1026     */
1027    public UnsignedIntType getQuantityElement() { 
1028      if (this.quantity == null)
1029        if (Configuration.errorOnAutoCreate())
1030          throw new Error("Attempt to auto-create Group.quantity");
1031        else if (Configuration.doAutoCreate())
1032          this.quantity = new UnsignedIntType(); // bb
1033      return this.quantity;
1034    }
1035
1036    public boolean hasQuantityElement() { 
1037      return this.quantity != null && !this.quantity.isEmpty();
1038    }
1039
1040    public boolean hasQuantity() { 
1041      return this.quantity != null && !this.quantity.isEmpty();
1042    }
1043
1044    /**
1045     * @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
1046     */
1047    public Group setQuantityElement(UnsignedIntType value) { 
1048      this.quantity = value;
1049      return this;
1050    }
1051
1052    /**
1053     * @return A count of the number of resource instances that are part of the group.
1054     */
1055    public int getQuantity() { 
1056      return this.quantity == null || this.quantity.isEmpty() ? 0 : this.quantity.getValue();
1057    }
1058
1059    /**
1060     * @param value A count of the number of resource instances that are part of the group.
1061     */
1062    public Group setQuantity(int value) { 
1063        if (this.quantity == null)
1064          this.quantity = new UnsignedIntType();
1065        this.quantity.setValue(value);
1066      return this;
1067    }
1068
1069    /**
1070     * @return {@link #characteristic} (Identifies the traits shared by members of the group.)
1071     */
1072    public List<GroupCharacteristicComponent> getCharacteristic() { 
1073      if (this.characteristic == null)
1074        this.characteristic = new ArrayList<GroupCharacteristicComponent>();
1075      return this.characteristic;
1076    }
1077
1078    public boolean hasCharacteristic() { 
1079      if (this.characteristic == null)
1080        return false;
1081      for (GroupCharacteristicComponent item : this.characteristic)
1082        if (!item.isEmpty())
1083          return true;
1084      return false;
1085    }
1086
1087    /**
1088     * @return {@link #characteristic} (Identifies the traits shared by members of the group.)
1089     */
1090    // syntactic sugar
1091    public GroupCharacteristicComponent addCharacteristic() { //3
1092      GroupCharacteristicComponent t = new GroupCharacteristicComponent();
1093      if (this.characteristic == null)
1094        this.characteristic = new ArrayList<GroupCharacteristicComponent>();
1095      this.characteristic.add(t);
1096      return t;
1097    }
1098
1099    // syntactic sugar
1100    public Group addCharacteristic(GroupCharacteristicComponent t) { //3
1101      if (t == null)
1102        return this;
1103      if (this.characteristic == null)
1104        this.characteristic = new ArrayList<GroupCharacteristicComponent>();
1105      this.characteristic.add(t);
1106      return this;
1107    }
1108
1109    /**
1110     * @return {@link #member} (Identifies the resource instances that are members of the group.)
1111     */
1112    public List<GroupMemberComponent> getMember() { 
1113      if (this.member == null)
1114        this.member = new ArrayList<GroupMemberComponent>();
1115      return this.member;
1116    }
1117
1118    public boolean hasMember() { 
1119      if (this.member == null)
1120        return false;
1121      for (GroupMemberComponent item : this.member)
1122        if (!item.isEmpty())
1123          return true;
1124      return false;
1125    }
1126
1127    /**
1128     * @return {@link #member} (Identifies the resource instances that are members of the group.)
1129     */
1130    // syntactic sugar
1131    public GroupMemberComponent addMember() { //3
1132      GroupMemberComponent t = new GroupMemberComponent();
1133      if (this.member == null)
1134        this.member = new ArrayList<GroupMemberComponent>();
1135      this.member.add(t);
1136      return t;
1137    }
1138
1139    // syntactic sugar
1140    public Group addMember(GroupMemberComponent t) { //3
1141      if (t == null)
1142        return this;
1143      if (this.member == null)
1144        this.member = new ArrayList<GroupMemberComponent>();
1145      this.member.add(t);
1146      return this;
1147    }
1148
1149      protected void listChildren(List<Property> childrenList) {
1150        super.listChildren(childrenList);
1151        childrenList.add(new Property("identifier", "Identifier", "A unique business identifier for this group.", 0, java.lang.Integer.MAX_VALUE, identifier));
1152        childrenList.add(new Property("type", "code", "Identifies the broad classification of the kind of resources the group includes.", 0, java.lang.Integer.MAX_VALUE, type));
1153        childrenList.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, java.lang.Integer.MAX_VALUE, actual));
1154        childrenList.add(new Property("code", "CodeableConcept", "Provides a specific type of resource the group includes; e.g. \"cow\", \"syringe\", etc.", 0, java.lang.Integer.MAX_VALUE, code));
1155        childrenList.add(new Property("name", "string", "A label assigned to the group for human identification and communication.", 0, java.lang.Integer.MAX_VALUE, name));
1156        childrenList.add(new Property("quantity", "unsignedInt", "A count of the number of resource instances that are part of the group.", 0, java.lang.Integer.MAX_VALUE, quantity));
1157        childrenList.add(new Property("characteristic", "", "Identifies the traits shared by members of the group.", 0, java.lang.Integer.MAX_VALUE, characteristic));
1158        childrenList.add(new Property("member", "", "Identifies the resource instances that are members of the group.", 0, java.lang.Integer.MAX_VALUE, member));
1159      }
1160
1161      @Override
1162      public void setProperty(String name, Base value) throws FHIRException {
1163        if (name.equals("identifier"))
1164          this.getIdentifier().add(castToIdentifier(value));
1165        else if (name.equals("type"))
1166          this.type = new GroupTypeEnumFactory().fromType(value); // Enumeration<GroupType>
1167        else if (name.equals("actual"))
1168          this.actual = castToBoolean(value); // BooleanType
1169        else if (name.equals("code"))
1170          this.code = castToCodeableConcept(value); // CodeableConcept
1171        else if (name.equals("name"))
1172          this.name = castToString(value); // StringType
1173        else if (name.equals("quantity"))
1174          this.quantity = castToUnsignedInt(value); // UnsignedIntType
1175        else if (name.equals("characteristic"))
1176          this.getCharacteristic().add((GroupCharacteristicComponent) value);
1177        else if (name.equals("member"))
1178          this.getMember().add((GroupMemberComponent) value);
1179        else
1180          super.setProperty(name, value);
1181      }
1182
1183      @Override
1184      public Base addChild(String name) throws FHIRException {
1185        if (name.equals("identifier")) {
1186          return addIdentifier();
1187        }
1188        else if (name.equals("type")) {
1189          throw new FHIRException("Cannot call addChild on a primitive type Group.type");
1190        }
1191        else if (name.equals("actual")) {
1192          throw new FHIRException("Cannot call addChild on a primitive type Group.actual");
1193        }
1194        else if (name.equals("code")) {
1195          this.code = new CodeableConcept();
1196          return this.code;
1197        }
1198        else if (name.equals("name")) {
1199          throw new FHIRException("Cannot call addChild on a primitive type Group.name");
1200        }
1201        else if (name.equals("quantity")) {
1202          throw new FHIRException("Cannot call addChild on a primitive type Group.quantity");
1203        }
1204        else if (name.equals("characteristic")) {
1205          return addCharacteristic();
1206        }
1207        else if (name.equals("member")) {
1208          return addMember();
1209        }
1210        else
1211          return super.addChild(name);
1212      }
1213
1214  public String fhirType() {
1215    return "Group";
1216
1217  }
1218
1219      public Group copy() {
1220        Group dst = new Group();
1221        copyValues(dst);
1222        if (identifier != null) {
1223          dst.identifier = new ArrayList<Identifier>();
1224          for (Identifier i : identifier)
1225            dst.identifier.add(i.copy());
1226        };
1227        dst.type = type == null ? null : type.copy();
1228        dst.actual = actual == null ? null : actual.copy();
1229        dst.code = code == null ? null : code.copy();
1230        dst.name = name == null ? null : name.copy();
1231        dst.quantity = quantity == null ? null : quantity.copy();
1232        if (characteristic != null) {
1233          dst.characteristic = new ArrayList<GroupCharacteristicComponent>();
1234          for (GroupCharacteristicComponent i : characteristic)
1235            dst.characteristic.add(i.copy());
1236        };
1237        if (member != null) {
1238          dst.member = new ArrayList<GroupMemberComponent>();
1239          for (GroupMemberComponent i : member)
1240            dst.member.add(i.copy());
1241        };
1242        return dst;
1243      }
1244
1245      protected Group typedCopy() {
1246        return copy();
1247      }
1248
1249      @Override
1250      public boolean equalsDeep(Base other) {
1251        if (!super.equalsDeep(other))
1252          return false;
1253        if (!(other instanceof Group))
1254          return false;
1255        Group o = (Group) other;
1256        return compareDeep(identifier, o.identifier, true) && compareDeep(type, o.type, true) && compareDeep(actual, o.actual, true)
1257           && compareDeep(code, o.code, true) && compareDeep(name, o.name, true) && compareDeep(quantity, o.quantity, true)
1258           && compareDeep(characteristic, o.characteristic, true) && compareDeep(member, o.member, true);
1259      }
1260
1261      @Override
1262      public boolean equalsShallow(Base other) {
1263        if (!super.equalsShallow(other))
1264          return false;
1265        if (!(other instanceof Group))
1266          return false;
1267        Group o = (Group) other;
1268        return compareValues(type, o.type, true) && compareValues(actual, o.actual, true) && compareValues(name, o.name, true)
1269           && compareValues(quantity, o.quantity, true);
1270      }
1271
1272      public boolean isEmpty() {
1273        return super.isEmpty() && (identifier == null || identifier.isEmpty()) && (type == null || type.isEmpty())
1274           && (actual == null || actual.isEmpty()) && (code == null || code.isEmpty()) && (name == null || name.isEmpty())
1275           && (quantity == null || quantity.isEmpty()) && (characteristic == null || characteristic.isEmpty())
1276           && (member == null || member.isEmpty());
1277      }
1278
1279  @Override
1280  public ResourceType getResourceType() {
1281    return ResourceType.Group;
1282   }
1283
1284  @SearchParamDefinition(name="actual", path="Group.actual", description="Descriptive or actual", type="token" )
1285  public static final String SP_ACTUAL = "actual";
1286  @SearchParamDefinition(name="identifier", path="Group.identifier", description="Unique id", type="token" )
1287  public static final String SP_IDENTIFIER = "identifier";
1288  @SearchParamDefinition(name="characteristic-value", path="null", description="A composite of both characteristic and value", type="composite" )
1289  public static final String SP_CHARACTERISTICVALUE = "characteristic-value";
1290  @SearchParamDefinition(name="code", path="Group.code", description="The kind of resources contained", type="token" )
1291  public static final String SP_CODE = "code";
1292  @SearchParamDefinition(name="member", path="Group.member.entity", description="Reference to the group member", type="reference" )
1293  public static final String SP_MEMBER = "member";
1294  @SearchParamDefinition(name="exclude", path="Group.characteristic.exclude", description="Group includes or excludes", type="token" )
1295  public static final String SP_EXCLUDE = "exclude";
1296  @SearchParamDefinition(name="type", path="Group.type", description="The type of resources the group contains", type="token" )
1297  public static final String SP_TYPE = "type";
1298  @SearchParamDefinition(name="value", path="Group.characteristic.value[x]", description="Value held by characteristic", type="token" )
1299  public static final String SP_VALUE = "value";
1300  @SearchParamDefinition(name="characteristic", path="Group.characteristic.code", description="Kind of characteristic", type="token" )
1301  public static final String SP_CHARACTERISTIC = "characteristic";
1302
1303}