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