001package org.hl7.fhir.dstu3.model;
002
003/*
004  Copyright (c) 2011+, HL7, Inc.
005  All rights reserved.
006  
007  Redistribution and use in source and binary forms, with or without modification, 
008  are permitted provided that the following conditions are met:
009  
010   * Redistributions of source code must retain the above copyright notice, this 
011     list of conditions and the following disclaimer.
012   * Redistributions in binary form must reproduce the above copyright notice, 
013     this list of conditions and the following disclaimer in the documentation 
014     and/or other materials provided with the distribution.
015   * Neither the name of HL7 nor the names of its contributors may be used to 
016     endorse or promote products derived from this software without specific 
017     prior written permission.
018  
019  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
020  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
021  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
022  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
023  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
024  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
025  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
026  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
027  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
028  POSSIBILITY OF SUCH DAMAGE.
029  
030*/
031
032// Generated on Mon, Apr 17, 2017 17:38-0400 for FHIR v3.0.1
033
034import java.util.*;
035
036import org.hl7.fhir.utilities.Utilities;
037import org.hl7.fhir.dstu3.model.Enumerations.*;
038import ca.uhn.fhir.model.api.annotation.ResourceDef;
039import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
040import ca.uhn.fhir.model.api.annotation.Child;
041import ca.uhn.fhir.model.api.annotation.ChildOrder;
042import ca.uhn.fhir.model.api.annotation.Description;
043import ca.uhn.fhir.model.api.annotation.Block;
044import org.hl7.fhir.instance.model.api.*;
045import org.hl7.fhir.exceptions.FHIRException;
046/**
047 * A compartment definition that defines how resources are accessed on a server.
048 */
049@ResourceDef(name="CompartmentDefinition", profile="http://hl7.org/fhir/Profile/CompartmentDefinition")
050@ChildOrder(names={"url", "name", "title", "status", "experimental", "date", "publisher", "contact", "description", "purpose", "useContext", "jurisdiction", "code", "search", "resource"})
051public class CompartmentDefinition extends MetadataResource {
052
053    public enum CompartmentType {
054        /**
055         * The compartment definition is for the patient compartment
056         */
057        PATIENT, 
058        /**
059         * The compartment definition is for the encounter compartment
060         */
061        ENCOUNTER, 
062        /**
063         * The compartment definition is for the related-person compartment
064         */
065        RELATEDPERSON, 
066        /**
067         * The compartment definition is for the practitioner compartment
068         */
069        PRACTITIONER, 
070        /**
071         * The compartment definition is for the device compartment
072         */
073        DEVICE, 
074        /**
075         * added to help the parsers with the generic types
076         */
077        NULL;
078        public static CompartmentType fromCode(String codeString) throws FHIRException {
079            if (codeString == null || "".equals(codeString))
080                return null;
081        if ("Patient".equals(codeString))
082          return PATIENT;
083        if ("Encounter".equals(codeString))
084          return ENCOUNTER;
085        if ("RelatedPerson".equals(codeString))
086          return RELATEDPERSON;
087        if ("Practitioner".equals(codeString))
088          return PRACTITIONER;
089        if ("Device".equals(codeString))
090          return DEVICE;
091        if (Configuration.isAcceptInvalidEnums())
092          return null;
093        else
094          throw new FHIRException("Unknown CompartmentType code '"+codeString+"'");
095        }
096        public String toCode() {
097          switch (this) {
098            case PATIENT: return "Patient";
099            case ENCOUNTER: return "Encounter";
100            case RELATEDPERSON: return "RelatedPerson";
101            case PRACTITIONER: return "Practitioner";
102            case DEVICE: return "Device";
103            default: return "?";
104          }
105        }
106        public String getSystem() {
107          switch (this) {
108            case PATIENT: return "http://hl7.org/fhir/compartment-type";
109            case ENCOUNTER: return "http://hl7.org/fhir/compartment-type";
110            case RELATEDPERSON: return "http://hl7.org/fhir/compartment-type";
111            case PRACTITIONER: return "http://hl7.org/fhir/compartment-type";
112            case DEVICE: return "http://hl7.org/fhir/compartment-type";
113            default: return "?";
114          }
115        }
116        public String getDefinition() {
117          switch (this) {
118            case PATIENT: return "The compartment definition is for the patient compartment";
119            case ENCOUNTER: return "The compartment definition is for the encounter compartment";
120            case RELATEDPERSON: return "The compartment definition is for the related-person compartment";
121            case PRACTITIONER: return "The compartment definition is for the practitioner compartment";
122            case DEVICE: return "The compartment definition is for the device compartment";
123            default: return "?";
124          }
125        }
126        public String getDisplay() {
127          switch (this) {
128            case PATIENT: return "Patient";
129            case ENCOUNTER: return "Encounter";
130            case RELATEDPERSON: return "RelatedPerson";
131            case PRACTITIONER: return "Practitioner";
132            case DEVICE: return "Device";
133            default: return "?";
134          }
135        }
136    }
137
138  public static class CompartmentTypeEnumFactory implements EnumFactory<CompartmentType> {
139    public CompartmentType fromCode(String codeString) throws IllegalArgumentException {
140      if (codeString == null || "".equals(codeString))
141            if (codeString == null || "".equals(codeString))
142                return null;
143        if ("Patient".equals(codeString))
144          return CompartmentType.PATIENT;
145        if ("Encounter".equals(codeString))
146          return CompartmentType.ENCOUNTER;
147        if ("RelatedPerson".equals(codeString))
148          return CompartmentType.RELATEDPERSON;
149        if ("Practitioner".equals(codeString))
150          return CompartmentType.PRACTITIONER;
151        if ("Device".equals(codeString))
152          return CompartmentType.DEVICE;
153        throw new IllegalArgumentException("Unknown CompartmentType code '"+codeString+"'");
154        }
155        public Enumeration<CompartmentType> fromType(Base code) throws FHIRException {
156          if (code == null)
157            return null;
158          if (code.isEmpty())
159            return new Enumeration<CompartmentType>(this);
160          String codeString = ((PrimitiveType) code).asStringValue();
161          if (codeString == null || "".equals(codeString))
162            return null;
163        if ("Patient".equals(codeString))
164          return new Enumeration<CompartmentType>(this, CompartmentType.PATIENT);
165        if ("Encounter".equals(codeString))
166          return new Enumeration<CompartmentType>(this, CompartmentType.ENCOUNTER);
167        if ("RelatedPerson".equals(codeString))
168          return new Enumeration<CompartmentType>(this, CompartmentType.RELATEDPERSON);
169        if ("Practitioner".equals(codeString))
170          return new Enumeration<CompartmentType>(this, CompartmentType.PRACTITIONER);
171        if ("Device".equals(codeString))
172          return new Enumeration<CompartmentType>(this, CompartmentType.DEVICE);
173        throw new FHIRException("Unknown CompartmentType code '"+codeString+"'");
174        }
175    public String toCode(CompartmentType code) {
176      if (code == CompartmentType.PATIENT)
177        return "Patient";
178      if (code == CompartmentType.ENCOUNTER)
179        return "Encounter";
180      if (code == CompartmentType.RELATEDPERSON)
181        return "RelatedPerson";
182      if (code == CompartmentType.PRACTITIONER)
183        return "Practitioner";
184      if (code == CompartmentType.DEVICE)
185        return "Device";
186      return "?";
187      }
188    public String toSystem(CompartmentType code) {
189      return code.getSystem();
190      }
191    }
192
193    @Block()
194    public static class CompartmentDefinitionResourceComponent extends BackboneElement implements IBaseBackboneElement {
195        /**
196         * The name of a resource supported by the server.
197         */
198        @Child(name = "code", type = {CodeType.class}, order=1, min=1, max=1, modifier=false, summary=true)
199        @Description(shortDefinition="Name of resource type", formalDefinition="The name of a resource supported by the server." )
200        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/resource-types")
201        protected CodeType code;
202
203        /**
204         * The name of a search parameter that represents the link to the compartment. More than one may be listed because a resource may be linked to a compartment in more than one way,.
205         */
206        @Child(name = "param", type = {StringType.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
207        @Description(shortDefinition="Search Parameter Name, or chained parameters", formalDefinition="The name of a search parameter that represents the link to the compartment. More than one may be listed because a resource may be linked to a compartment in more than one way,." )
208        protected List<StringType> param;
209
210        /**
211         * Additional documentation about the resource and compartment.
212         */
213        @Child(name = "documentation", type = {StringType.class}, order=3, min=0, max=1, modifier=false, summary=false)
214        @Description(shortDefinition="Additional documentation about the resource and compartment", formalDefinition="Additional documentation about the resource and compartment." )
215        protected StringType documentation;
216
217        private static final long serialVersionUID = 988080897L;
218
219    /**
220     * Constructor
221     */
222      public CompartmentDefinitionResourceComponent() {
223        super();
224      }
225
226    /**
227     * Constructor
228     */
229      public CompartmentDefinitionResourceComponent(CodeType code) {
230        super();
231        this.code = code;
232      }
233
234        /**
235         * @return {@link #code} (The name of a resource supported by the server.). This is the underlying object with id, value and extensions. The accessor "getCode" gives direct access to the value
236         */
237        public CodeType getCodeElement() { 
238          if (this.code == null)
239            if (Configuration.errorOnAutoCreate())
240              throw new Error("Attempt to auto-create CompartmentDefinitionResourceComponent.code");
241            else if (Configuration.doAutoCreate())
242              this.code = new CodeType(); // bb
243          return this.code;
244        }
245
246        public boolean hasCodeElement() { 
247          return this.code != null && !this.code.isEmpty();
248        }
249
250        public boolean hasCode() { 
251          return this.code != null && !this.code.isEmpty();
252        }
253
254        /**
255         * @param value {@link #code} (The name of a resource supported by the server.). This is the underlying object with id, value and extensions. The accessor "getCode" gives direct access to the value
256         */
257        public CompartmentDefinitionResourceComponent setCodeElement(CodeType value) { 
258          this.code = value;
259          return this;
260        }
261
262        /**
263         * @return The name of a resource supported by the server.
264         */
265        public String getCode() { 
266          return this.code == null ? null : this.code.getValue();
267        }
268
269        /**
270         * @param value The name of a resource supported by the server.
271         */
272        public CompartmentDefinitionResourceComponent setCode(String value) { 
273            if (this.code == null)
274              this.code = new CodeType();
275            this.code.setValue(value);
276          return this;
277        }
278
279        /**
280         * @return {@link #param} (The name of a search parameter that represents the link to the compartment. More than one may be listed because a resource may be linked to a compartment in more than one way,.)
281         */
282        public List<StringType> getParam() { 
283          if (this.param == null)
284            this.param = new ArrayList<StringType>();
285          return this.param;
286        }
287
288        /**
289         * @return Returns a reference to <code>this</code> for easy method chaining
290         */
291        public CompartmentDefinitionResourceComponent setParam(List<StringType> theParam) { 
292          this.param = theParam;
293          return this;
294        }
295
296        public boolean hasParam() { 
297          if (this.param == null)
298            return false;
299          for (StringType item : this.param)
300            if (!item.isEmpty())
301              return true;
302          return false;
303        }
304
305        /**
306         * @return {@link #param} (The name of a search parameter that represents the link to the compartment. More than one may be listed because a resource may be linked to a compartment in more than one way,.)
307         */
308        public StringType addParamElement() {//2 
309          StringType t = new StringType();
310          if (this.param == null)
311            this.param = new ArrayList<StringType>();
312          this.param.add(t);
313          return t;
314        }
315
316        /**
317         * @param value {@link #param} (The name of a search parameter that represents the link to the compartment. More than one may be listed because a resource may be linked to a compartment in more than one way,.)
318         */
319        public CompartmentDefinitionResourceComponent addParam(String value) { //1
320          StringType t = new StringType();
321          t.setValue(value);
322          if (this.param == null)
323            this.param = new ArrayList<StringType>();
324          this.param.add(t);
325          return this;
326        }
327
328        /**
329         * @param value {@link #param} (The name of a search parameter that represents the link to the compartment. More than one may be listed because a resource may be linked to a compartment in more than one way,.)
330         */
331        public boolean hasParam(String value) { 
332          if (this.param == null)
333            return false;
334          for (StringType v : this.param)
335            if (v.equals(value)) // string
336              return true;
337          return false;
338        }
339
340        /**
341         * @return {@link #documentation} (Additional documentation about the resource and compartment.). This is the underlying object with id, value and extensions. The accessor "getDocumentation" gives direct access to the value
342         */
343        public StringType getDocumentationElement() { 
344          if (this.documentation == null)
345            if (Configuration.errorOnAutoCreate())
346              throw new Error("Attempt to auto-create CompartmentDefinitionResourceComponent.documentation");
347            else if (Configuration.doAutoCreate())
348              this.documentation = new StringType(); // bb
349          return this.documentation;
350        }
351
352        public boolean hasDocumentationElement() { 
353          return this.documentation != null && !this.documentation.isEmpty();
354        }
355
356        public boolean hasDocumentation() { 
357          return this.documentation != null && !this.documentation.isEmpty();
358        }
359
360        /**
361         * @param value {@link #documentation} (Additional documentation about the resource and compartment.). This is the underlying object with id, value and extensions. The accessor "getDocumentation" gives direct access to the value
362         */
363        public CompartmentDefinitionResourceComponent setDocumentationElement(StringType value) { 
364          this.documentation = value;
365          return this;
366        }
367
368        /**
369         * @return Additional documentation about the resource and compartment.
370         */
371        public String getDocumentation() { 
372          return this.documentation == null ? null : this.documentation.getValue();
373        }
374
375        /**
376         * @param value Additional documentation about the resource and compartment.
377         */
378        public CompartmentDefinitionResourceComponent setDocumentation(String value) { 
379          if (Utilities.noString(value))
380            this.documentation = null;
381          else {
382            if (this.documentation == null)
383              this.documentation = new StringType();
384            this.documentation.setValue(value);
385          }
386          return this;
387        }
388
389        protected void listChildren(List<Property> childrenList) {
390          super.listChildren(childrenList);
391          childrenList.add(new Property("code", "code", "The name of a resource supported by the server.", 0, java.lang.Integer.MAX_VALUE, code));
392          childrenList.add(new Property("param", "string", "The name of a search parameter that represents the link to the compartment. More than one may be listed because a resource may be linked to a compartment in more than one way,.", 0, java.lang.Integer.MAX_VALUE, param));
393          childrenList.add(new Property("documentation", "string", "Additional documentation about the resource and compartment.", 0, java.lang.Integer.MAX_VALUE, documentation));
394        }
395
396      @Override
397      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
398        switch (hash) {
399        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeType
400        case 106436749: /*param*/ return this.param == null ? new Base[0] : this.param.toArray(new Base[this.param.size()]); // StringType
401        case 1587405498: /*documentation*/ return this.documentation == null ? new Base[0] : new Base[] {this.documentation}; // StringType
402        default: return super.getProperty(hash, name, checkValid);
403        }
404
405      }
406
407      @Override
408      public Base setProperty(int hash, String name, Base value) throws FHIRException {
409        switch (hash) {
410        case 3059181: // code
411          this.code = castToCode(value); // CodeType
412          return value;
413        case 106436749: // param
414          this.getParam().add(castToString(value)); // StringType
415          return value;
416        case 1587405498: // documentation
417          this.documentation = castToString(value); // StringType
418          return value;
419        default: return super.setProperty(hash, name, value);
420        }
421
422      }
423
424      @Override
425      public Base setProperty(String name, Base value) throws FHIRException {
426        if (name.equals("code")) {
427          this.code = castToCode(value); // CodeType
428        } else if (name.equals("param")) {
429          this.getParam().add(castToString(value));
430        } else if (name.equals("documentation")) {
431          this.documentation = castToString(value); // StringType
432        } else
433          return super.setProperty(name, value);
434        return value;
435      }
436
437      @Override
438      public Base makeProperty(int hash, String name) throws FHIRException {
439        switch (hash) {
440        case 3059181:  return getCodeElement();
441        case 106436749:  return addParamElement();
442        case 1587405498:  return getDocumentationElement();
443        default: return super.makeProperty(hash, name);
444        }
445
446      }
447
448      @Override
449      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
450        switch (hash) {
451        case 3059181: /*code*/ return new String[] {"code"};
452        case 106436749: /*param*/ return new String[] {"string"};
453        case 1587405498: /*documentation*/ return new String[] {"string"};
454        default: return super.getTypesForProperty(hash, name);
455        }
456
457      }
458
459      @Override
460      public Base addChild(String name) throws FHIRException {
461        if (name.equals("code")) {
462          throw new FHIRException("Cannot call addChild on a primitive type CompartmentDefinition.code");
463        }
464        else if (name.equals("param")) {
465          throw new FHIRException("Cannot call addChild on a primitive type CompartmentDefinition.param");
466        }
467        else if (name.equals("documentation")) {
468          throw new FHIRException("Cannot call addChild on a primitive type CompartmentDefinition.documentation");
469        }
470        else
471          return super.addChild(name);
472      }
473
474      public CompartmentDefinitionResourceComponent copy() {
475        CompartmentDefinitionResourceComponent dst = new CompartmentDefinitionResourceComponent();
476        copyValues(dst);
477        dst.code = code == null ? null : code.copy();
478        if (param != null) {
479          dst.param = new ArrayList<StringType>();
480          for (StringType i : param)
481            dst.param.add(i.copy());
482        };
483        dst.documentation = documentation == null ? null : documentation.copy();
484        return dst;
485      }
486
487      @Override
488      public boolean equalsDeep(Base other) {
489        if (!super.equalsDeep(other))
490          return false;
491        if (!(other instanceof CompartmentDefinitionResourceComponent))
492          return false;
493        CompartmentDefinitionResourceComponent o = (CompartmentDefinitionResourceComponent) other;
494        return compareDeep(code, o.code, true) && compareDeep(param, o.param, true) && compareDeep(documentation, o.documentation, true)
495          ;
496      }
497
498      @Override
499      public boolean equalsShallow(Base other) {
500        if (!super.equalsShallow(other))
501          return false;
502        if (!(other instanceof CompartmentDefinitionResourceComponent))
503          return false;
504        CompartmentDefinitionResourceComponent o = (CompartmentDefinitionResourceComponent) other;
505        return compareValues(code, o.code, true) && compareValues(param, o.param, true) && compareValues(documentation, o.documentation, true)
506          ;
507      }
508
509      public boolean isEmpty() {
510        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(code, param, documentation
511          );
512      }
513
514  public String fhirType() {
515    return "CompartmentDefinition.resource";
516
517  }
518
519  }
520
521    /**
522     * Explaination of why this compartment definition is needed and why it has been designed as it has.
523     */
524    @Child(name = "purpose", type = {MarkdownType.class}, order=0, min=0, max=1, modifier=false, summary=false)
525    @Description(shortDefinition="Why this compartment definition is defined", formalDefinition="Explaination of why this compartment definition is needed and why it has been designed as it has." )
526    protected MarkdownType purpose;
527
528    /**
529     * Which compartment this definition describes.
530     */
531    @Child(name = "code", type = {CodeType.class}, order=1, min=1, max=1, modifier=false, summary=true)
532    @Description(shortDefinition="Patient | Encounter | RelatedPerson | Practitioner | Device", formalDefinition="Which compartment this definition describes." )
533    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/compartment-type")
534    protected Enumeration<CompartmentType> code;
535
536    /**
537     * Whether the search syntax is supported,.
538     */
539    @Child(name = "search", type = {BooleanType.class}, order=2, min=1, max=1, modifier=false, summary=true)
540    @Description(shortDefinition="Whether the search syntax is supported", formalDefinition="Whether the search syntax is supported,." )
541    protected BooleanType search;
542
543    /**
544     * Information about how a resource is related to the compartment.
545     */
546    @Child(name = "resource", type = {}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
547    @Description(shortDefinition="How a resource is related to the compartment", formalDefinition="Information about how a resource is related to the compartment." )
548    protected List<CompartmentDefinitionResourceComponent> resource;
549
550    private static final long serialVersionUID = -1159172945L;
551
552  /**
553   * Constructor
554   */
555    public CompartmentDefinition() {
556      super();
557    }
558
559  /**
560   * Constructor
561   */
562    public CompartmentDefinition(UriType url, StringType name, Enumeration<PublicationStatus> status, Enumeration<CompartmentType> code, BooleanType search) {
563      super();
564      this.url = url;
565      this.name = name;
566      this.status = status;
567      this.code = code;
568      this.search = search;
569    }
570
571    /**
572     * @return {@link #url} (An absolute URI that is used to identify this compartment definition when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this compartment definition is (or will be) published. The URL SHOULD include the major version of the compartment definition. For more information see [Technical and Business Versions](resource.html#versions).). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
573     */
574    public UriType getUrlElement() { 
575      if (this.url == null)
576        if (Configuration.errorOnAutoCreate())
577          throw new Error("Attempt to auto-create CompartmentDefinition.url");
578        else if (Configuration.doAutoCreate())
579          this.url = new UriType(); // bb
580      return this.url;
581    }
582
583    public boolean hasUrlElement() { 
584      return this.url != null && !this.url.isEmpty();
585    }
586
587    public boolean hasUrl() { 
588      return this.url != null && !this.url.isEmpty();
589    }
590
591    /**
592     * @param value {@link #url} (An absolute URI that is used to identify this compartment definition when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this compartment definition is (or will be) published. The URL SHOULD include the major version of the compartment definition. For more information see [Technical and Business Versions](resource.html#versions).). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
593     */
594    public CompartmentDefinition setUrlElement(UriType value) { 
595      this.url = value;
596      return this;
597    }
598
599    /**
600     * @return An absolute URI that is used to identify this compartment definition when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this compartment definition is (or will be) published. The URL SHOULD include the major version of the compartment definition. For more information see [Technical and Business Versions](resource.html#versions).
601     */
602    public String getUrl() { 
603      return this.url == null ? null : this.url.getValue();
604    }
605
606    /**
607     * @param value An absolute URI that is used to identify this compartment definition when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this compartment definition is (or will be) published. The URL SHOULD include the major version of the compartment definition. For more information see [Technical and Business Versions](resource.html#versions).
608     */
609    public CompartmentDefinition setUrl(String value) { 
610        if (this.url == null)
611          this.url = new UriType();
612        this.url.setValue(value);
613      return this;
614    }
615
616    /**
617     * @return {@link #name} (A natural language name identifying the compartment definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
618     */
619    public StringType getNameElement() { 
620      if (this.name == null)
621        if (Configuration.errorOnAutoCreate())
622          throw new Error("Attempt to auto-create CompartmentDefinition.name");
623        else if (Configuration.doAutoCreate())
624          this.name = new StringType(); // bb
625      return this.name;
626    }
627
628    public boolean hasNameElement() { 
629      return this.name != null && !this.name.isEmpty();
630    }
631
632    public boolean hasName() { 
633      return this.name != null && !this.name.isEmpty();
634    }
635
636    /**
637     * @param value {@link #name} (A natural language name identifying the compartment definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
638     */
639    public CompartmentDefinition setNameElement(StringType value) { 
640      this.name = value;
641      return this;
642    }
643
644    /**
645     * @return A natural language name identifying the compartment definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.
646     */
647    public String getName() { 
648      return this.name == null ? null : this.name.getValue();
649    }
650
651    /**
652     * @param value A natural language name identifying the compartment definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.
653     */
654    public CompartmentDefinition setName(String value) { 
655        if (this.name == null)
656          this.name = new StringType();
657        this.name.setValue(value);
658      return this;
659    }
660
661    /**
662     * @return {@link #title} (A short, descriptive, user-friendly title for the compartment definition.). This is the underlying object with id, value and extensions. The accessor "getTitle" gives direct access to the value
663     */
664    public StringType getTitleElement() { 
665      if (this.title == null)
666        if (Configuration.errorOnAutoCreate())
667          throw new Error("Attempt to auto-create CompartmentDefinition.title");
668        else if (Configuration.doAutoCreate())
669          this.title = new StringType(); // bb
670      return this.title;
671    }
672
673    public boolean hasTitleElement() { 
674      return this.title != null && !this.title.isEmpty();
675    }
676
677    public boolean hasTitle() { 
678      return this.title != null && !this.title.isEmpty();
679    }
680
681    /**
682     * @param value {@link #title} (A short, descriptive, user-friendly title for the compartment definition.). This is the underlying object with id, value and extensions. The accessor "getTitle" gives direct access to the value
683     */
684    public CompartmentDefinition setTitleElement(StringType value) { 
685      this.title = value;
686      return this;
687    }
688
689    /**
690     * @return A short, descriptive, user-friendly title for the compartment definition.
691     */
692    public String getTitle() { 
693      return this.title == null ? null : this.title.getValue();
694    }
695
696    /**
697     * @param value A short, descriptive, user-friendly title for the compartment definition.
698     */
699    public CompartmentDefinition setTitle(String value) { 
700      if (Utilities.noString(value))
701        this.title = null;
702      else {
703        if (this.title == null)
704          this.title = new StringType();
705        this.title.setValue(value);
706      }
707      return this;
708    }
709
710    /**
711     * @return {@link #status} (The status of this compartment definition. Enables tracking the life-cycle of the content.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
712     */
713    public Enumeration<PublicationStatus> getStatusElement() { 
714      if (this.status == null)
715        if (Configuration.errorOnAutoCreate())
716          throw new Error("Attempt to auto-create CompartmentDefinition.status");
717        else if (Configuration.doAutoCreate())
718          this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory()); // bb
719      return this.status;
720    }
721
722    public boolean hasStatusElement() { 
723      return this.status != null && !this.status.isEmpty();
724    }
725
726    public boolean hasStatus() { 
727      return this.status != null && !this.status.isEmpty();
728    }
729
730    /**
731     * @param value {@link #status} (The status of this compartment definition. Enables tracking the life-cycle of the content.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
732     */
733    public CompartmentDefinition setStatusElement(Enumeration<PublicationStatus> value) { 
734      this.status = value;
735      return this;
736    }
737
738    /**
739     * @return The status of this compartment definition. Enables tracking the life-cycle of the content.
740     */
741    public PublicationStatus getStatus() { 
742      return this.status == null ? null : this.status.getValue();
743    }
744
745    /**
746     * @param value The status of this compartment definition. Enables tracking the life-cycle of the content.
747     */
748    public CompartmentDefinition setStatus(PublicationStatus value) { 
749        if (this.status == null)
750          this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory());
751        this.status.setValue(value);
752      return this;
753    }
754
755    /**
756     * @return {@link #experimental} (A boolean value to indicate that this compartment definition is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.). This is the underlying object with id, value and extensions. The accessor "getExperimental" gives direct access to the value
757     */
758    public BooleanType getExperimentalElement() { 
759      if (this.experimental == null)
760        if (Configuration.errorOnAutoCreate())
761          throw new Error("Attempt to auto-create CompartmentDefinition.experimental");
762        else if (Configuration.doAutoCreate())
763          this.experimental = new BooleanType(); // bb
764      return this.experimental;
765    }
766
767    public boolean hasExperimentalElement() { 
768      return this.experimental != null && !this.experimental.isEmpty();
769    }
770
771    public boolean hasExperimental() { 
772      return this.experimental != null && !this.experimental.isEmpty();
773    }
774
775    /**
776     * @param value {@link #experimental} (A boolean value to indicate that this compartment definition is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.). This is the underlying object with id, value and extensions. The accessor "getExperimental" gives direct access to the value
777     */
778    public CompartmentDefinition setExperimentalElement(BooleanType value) { 
779      this.experimental = value;
780      return this;
781    }
782
783    /**
784     * @return A boolean value to indicate that this compartment definition is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.
785     */
786    public boolean getExperimental() { 
787      return this.experimental == null || this.experimental.isEmpty() ? false : this.experimental.getValue();
788    }
789
790    /**
791     * @param value A boolean value to indicate that this compartment definition is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.
792     */
793    public CompartmentDefinition setExperimental(boolean value) { 
794        if (this.experimental == null)
795          this.experimental = new BooleanType();
796        this.experimental.setValue(value);
797      return this;
798    }
799
800    /**
801     * @return {@link #date} (The date  (and optionally time) when the compartment definition was published. The date must change if and when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the compartment definition changes.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
802     */
803    public DateTimeType getDateElement() { 
804      if (this.date == null)
805        if (Configuration.errorOnAutoCreate())
806          throw new Error("Attempt to auto-create CompartmentDefinition.date");
807        else if (Configuration.doAutoCreate())
808          this.date = new DateTimeType(); // bb
809      return this.date;
810    }
811
812    public boolean hasDateElement() { 
813      return this.date != null && !this.date.isEmpty();
814    }
815
816    public boolean hasDate() { 
817      return this.date != null && !this.date.isEmpty();
818    }
819
820    /**
821     * @param value {@link #date} (The date  (and optionally time) when the compartment definition was published. The date must change if and when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the compartment definition changes.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
822     */
823    public CompartmentDefinition setDateElement(DateTimeType value) { 
824      this.date = value;
825      return this;
826    }
827
828    /**
829     * @return The date  (and optionally time) when the compartment definition was published. The date must change if and when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the compartment definition changes.
830     */
831    public Date getDate() { 
832      return this.date == null ? null : this.date.getValue();
833    }
834
835    /**
836     * @param value The date  (and optionally time) when the compartment definition was published. The date must change if and when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the compartment definition changes.
837     */
838    public CompartmentDefinition setDate(Date value) { 
839      if (value == null)
840        this.date = null;
841      else {
842        if (this.date == null)
843          this.date = new DateTimeType();
844        this.date.setValue(value);
845      }
846      return this;
847    }
848
849    /**
850     * @return {@link #publisher} (The name of the individual or organization that published the compartment definition.). This is the underlying object with id, value and extensions. The accessor "getPublisher" gives direct access to the value
851     */
852    public StringType getPublisherElement() { 
853      if (this.publisher == null)
854        if (Configuration.errorOnAutoCreate())
855          throw new Error("Attempt to auto-create CompartmentDefinition.publisher");
856        else if (Configuration.doAutoCreate())
857          this.publisher = new StringType(); // bb
858      return this.publisher;
859    }
860
861    public boolean hasPublisherElement() { 
862      return this.publisher != null && !this.publisher.isEmpty();
863    }
864
865    public boolean hasPublisher() { 
866      return this.publisher != null && !this.publisher.isEmpty();
867    }
868
869    /**
870     * @param value {@link #publisher} (The name of the individual or organization that published the compartment definition.). This is the underlying object with id, value and extensions. The accessor "getPublisher" gives direct access to the value
871     */
872    public CompartmentDefinition setPublisherElement(StringType value) { 
873      this.publisher = value;
874      return this;
875    }
876
877    /**
878     * @return The name of the individual or organization that published the compartment definition.
879     */
880    public String getPublisher() { 
881      return this.publisher == null ? null : this.publisher.getValue();
882    }
883
884    /**
885     * @param value The name of the individual or organization that published the compartment definition.
886     */
887    public CompartmentDefinition setPublisher(String value) { 
888      if (Utilities.noString(value))
889        this.publisher = null;
890      else {
891        if (this.publisher == null)
892          this.publisher = new StringType();
893        this.publisher.setValue(value);
894      }
895      return this;
896    }
897
898    /**
899     * @return {@link #contact} (Contact details to assist a user in finding and communicating with the publisher.)
900     */
901    public List<ContactDetail> getContact() { 
902      if (this.contact == null)
903        this.contact = new ArrayList<ContactDetail>();
904      return this.contact;
905    }
906
907    /**
908     * @return Returns a reference to <code>this</code> for easy method chaining
909     */
910    public CompartmentDefinition setContact(List<ContactDetail> theContact) { 
911      this.contact = theContact;
912      return this;
913    }
914
915    public boolean hasContact() { 
916      if (this.contact == null)
917        return false;
918      for (ContactDetail item : this.contact)
919        if (!item.isEmpty())
920          return true;
921      return false;
922    }
923
924    public ContactDetail addContact() { //3
925      ContactDetail t = new ContactDetail();
926      if (this.contact == null)
927        this.contact = new ArrayList<ContactDetail>();
928      this.contact.add(t);
929      return t;
930    }
931
932    public CompartmentDefinition addContact(ContactDetail t) { //3
933      if (t == null)
934        return this;
935      if (this.contact == null)
936        this.contact = new ArrayList<ContactDetail>();
937      this.contact.add(t);
938      return this;
939    }
940
941    /**
942     * @return The first repetition of repeating field {@link #contact}, creating it if it does not already exist
943     */
944    public ContactDetail getContactFirstRep() { 
945      if (getContact().isEmpty()) {
946        addContact();
947      }
948      return getContact().get(0);
949    }
950
951    /**
952     * @return {@link #description} (A free text natural language description of the compartment definition from a consumer's perspective.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
953     */
954    public MarkdownType getDescriptionElement() { 
955      if (this.description == null)
956        if (Configuration.errorOnAutoCreate())
957          throw new Error("Attempt to auto-create CompartmentDefinition.description");
958        else if (Configuration.doAutoCreate())
959          this.description = new MarkdownType(); // bb
960      return this.description;
961    }
962
963    public boolean hasDescriptionElement() { 
964      return this.description != null && !this.description.isEmpty();
965    }
966
967    public boolean hasDescription() { 
968      return this.description != null && !this.description.isEmpty();
969    }
970
971    /**
972     * @param value {@link #description} (A free text natural language description of the compartment definition from a consumer's perspective.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
973     */
974    public CompartmentDefinition setDescriptionElement(MarkdownType value) { 
975      this.description = value;
976      return this;
977    }
978
979    /**
980     * @return A free text natural language description of the compartment definition from a consumer's perspective.
981     */
982    public String getDescription() { 
983      return this.description == null ? null : this.description.getValue();
984    }
985
986    /**
987     * @param value A free text natural language description of the compartment definition from a consumer's perspective.
988     */
989    public CompartmentDefinition setDescription(String value) { 
990      if (value == null)
991        this.description = null;
992      else {
993        if (this.description == null)
994          this.description = new MarkdownType();
995        this.description.setValue(value);
996      }
997      return this;
998    }
999
1000    /**
1001     * @return {@link #purpose} (Explaination of why this compartment definition is needed and why it has been designed as it has.). This is the underlying object with id, value and extensions. The accessor "getPurpose" gives direct access to the value
1002     */
1003    public MarkdownType getPurposeElement() { 
1004      if (this.purpose == null)
1005        if (Configuration.errorOnAutoCreate())
1006          throw new Error("Attempt to auto-create CompartmentDefinition.purpose");
1007        else if (Configuration.doAutoCreate())
1008          this.purpose = new MarkdownType(); // bb
1009      return this.purpose;
1010    }
1011
1012    public boolean hasPurposeElement() { 
1013      return this.purpose != null && !this.purpose.isEmpty();
1014    }
1015
1016    public boolean hasPurpose() { 
1017      return this.purpose != null && !this.purpose.isEmpty();
1018    }
1019
1020    /**
1021     * @param value {@link #purpose} (Explaination of why this compartment definition is needed and why it has been designed as it has.). This is the underlying object with id, value and extensions. The accessor "getPurpose" gives direct access to the value
1022     */
1023    public CompartmentDefinition setPurposeElement(MarkdownType value) { 
1024      this.purpose = value;
1025      return this;
1026    }
1027
1028    /**
1029     * @return Explaination of why this compartment definition is needed and why it has been designed as it has.
1030     */
1031    public String getPurpose() { 
1032      return this.purpose == null ? null : this.purpose.getValue();
1033    }
1034
1035    /**
1036     * @param value Explaination of why this compartment definition is needed and why it has been designed as it has.
1037     */
1038    public CompartmentDefinition setPurpose(String value) { 
1039      if (value == null)
1040        this.purpose = null;
1041      else {
1042        if (this.purpose == null)
1043          this.purpose = new MarkdownType();
1044        this.purpose.setValue(value);
1045      }
1046      return this;
1047    }
1048
1049    /**
1050     * @return {@link #useContext} (The content was developed with a focus and intent of supporting the contexts that are listed. These terms may be used to assist with indexing and searching for appropriate compartment definition instances.)
1051     */
1052    public List<UsageContext> getUseContext() { 
1053      if (this.useContext == null)
1054        this.useContext = new ArrayList<UsageContext>();
1055      return this.useContext;
1056    }
1057
1058    /**
1059     * @return Returns a reference to <code>this</code> for easy method chaining
1060     */
1061    public CompartmentDefinition setUseContext(List<UsageContext> theUseContext) { 
1062      this.useContext = theUseContext;
1063      return this;
1064    }
1065
1066    public boolean hasUseContext() { 
1067      if (this.useContext == null)
1068        return false;
1069      for (UsageContext item : this.useContext)
1070        if (!item.isEmpty())
1071          return true;
1072      return false;
1073    }
1074
1075    public UsageContext addUseContext() { //3
1076      UsageContext t = new UsageContext();
1077      if (this.useContext == null)
1078        this.useContext = new ArrayList<UsageContext>();
1079      this.useContext.add(t);
1080      return t;
1081    }
1082
1083    public CompartmentDefinition addUseContext(UsageContext t) { //3
1084      if (t == null)
1085        return this;
1086      if (this.useContext == null)
1087        this.useContext = new ArrayList<UsageContext>();
1088      this.useContext.add(t);
1089      return this;
1090    }
1091
1092    /**
1093     * @return The first repetition of repeating field {@link #useContext}, creating it if it does not already exist
1094     */
1095    public UsageContext getUseContextFirstRep() { 
1096      if (getUseContext().isEmpty()) {
1097        addUseContext();
1098      }
1099      return getUseContext().get(0);
1100    }
1101
1102    /**
1103     * @return {@link #jurisdiction} (A legal or geographic region in which the compartment definition is intended to be used.)
1104     */
1105    public List<CodeableConcept> getJurisdiction() { 
1106      if (this.jurisdiction == null)
1107        this.jurisdiction = new ArrayList<CodeableConcept>();
1108      return this.jurisdiction;
1109    }
1110
1111    /**
1112     * @return Returns a reference to <code>this</code> for easy method chaining
1113     */
1114    public CompartmentDefinition setJurisdiction(List<CodeableConcept> theJurisdiction) { 
1115      this.jurisdiction = theJurisdiction;
1116      return this;
1117    }
1118
1119    public boolean hasJurisdiction() { 
1120      if (this.jurisdiction == null)
1121        return false;
1122      for (CodeableConcept item : this.jurisdiction)
1123        if (!item.isEmpty())
1124          return true;
1125      return false;
1126    }
1127
1128    public CodeableConcept addJurisdiction() { //3
1129      CodeableConcept t = new CodeableConcept();
1130      if (this.jurisdiction == null)
1131        this.jurisdiction = new ArrayList<CodeableConcept>();
1132      this.jurisdiction.add(t);
1133      return t;
1134    }
1135
1136    public CompartmentDefinition addJurisdiction(CodeableConcept t) { //3
1137      if (t == null)
1138        return this;
1139      if (this.jurisdiction == null)
1140        this.jurisdiction = new ArrayList<CodeableConcept>();
1141      this.jurisdiction.add(t);
1142      return this;
1143    }
1144
1145    /**
1146     * @return The first repetition of repeating field {@link #jurisdiction}, creating it if it does not already exist
1147     */
1148    public CodeableConcept getJurisdictionFirstRep() { 
1149      if (getJurisdiction().isEmpty()) {
1150        addJurisdiction();
1151      }
1152      return getJurisdiction().get(0);
1153    }
1154
1155    /**
1156     * @return {@link #code} (Which compartment this definition describes.). This is the underlying object with id, value and extensions. The accessor "getCode" gives direct access to the value
1157     */
1158    public Enumeration<CompartmentType> getCodeElement() { 
1159      if (this.code == null)
1160        if (Configuration.errorOnAutoCreate())
1161          throw new Error("Attempt to auto-create CompartmentDefinition.code");
1162        else if (Configuration.doAutoCreate())
1163          this.code = new Enumeration<CompartmentType>(new CompartmentTypeEnumFactory()); // bb
1164      return this.code;
1165    }
1166
1167    public boolean hasCodeElement() { 
1168      return this.code != null && !this.code.isEmpty();
1169    }
1170
1171    public boolean hasCode() { 
1172      return this.code != null && !this.code.isEmpty();
1173    }
1174
1175    /**
1176     * @param value {@link #code} (Which compartment this definition describes.). This is the underlying object with id, value and extensions. The accessor "getCode" gives direct access to the value
1177     */
1178    public CompartmentDefinition setCodeElement(Enumeration<CompartmentType> value) { 
1179      this.code = value;
1180      return this;
1181    }
1182
1183    /**
1184     * @return Which compartment this definition describes.
1185     */
1186    public CompartmentType getCode() { 
1187      return this.code == null ? null : this.code.getValue();
1188    }
1189
1190    /**
1191     * @param value Which compartment this definition describes.
1192     */
1193    public CompartmentDefinition setCode(CompartmentType value) { 
1194        if (this.code == null)
1195          this.code = new Enumeration<CompartmentType>(new CompartmentTypeEnumFactory());
1196        this.code.setValue(value);
1197      return this;
1198    }
1199
1200    /**
1201     * @return {@link #search} (Whether the search syntax is supported,.). This is the underlying object with id, value and extensions. The accessor "getSearch" gives direct access to the value
1202     */
1203    public BooleanType getSearchElement() { 
1204      if (this.search == null)
1205        if (Configuration.errorOnAutoCreate())
1206          throw new Error("Attempt to auto-create CompartmentDefinition.search");
1207        else if (Configuration.doAutoCreate())
1208          this.search = new BooleanType(); // bb
1209      return this.search;
1210    }
1211
1212    public boolean hasSearchElement() { 
1213      return this.search != null && !this.search.isEmpty();
1214    }
1215
1216    public boolean hasSearch() { 
1217      return this.search != null && !this.search.isEmpty();
1218    }
1219
1220    /**
1221     * @param value {@link #search} (Whether the search syntax is supported,.). This is the underlying object with id, value and extensions. The accessor "getSearch" gives direct access to the value
1222     */
1223    public CompartmentDefinition setSearchElement(BooleanType value) { 
1224      this.search = value;
1225      return this;
1226    }
1227
1228    /**
1229     * @return Whether the search syntax is supported,.
1230     */
1231    public boolean getSearch() { 
1232      return this.search == null || this.search.isEmpty() ? false : this.search.getValue();
1233    }
1234
1235    /**
1236     * @param value Whether the search syntax is supported,.
1237     */
1238    public CompartmentDefinition setSearch(boolean value) { 
1239        if (this.search == null)
1240          this.search = new BooleanType();
1241        this.search.setValue(value);
1242      return this;
1243    }
1244
1245    /**
1246     * @return {@link #resource} (Information about how a resource is related to the compartment.)
1247     */
1248    public List<CompartmentDefinitionResourceComponent> getResource() { 
1249      if (this.resource == null)
1250        this.resource = new ArrayList<CompartmentDefinitionResourceComponent>();
1251      return this.resource;
1252    }
1253
1254    /**
1255     * @return Returns a reference to <code>this</code> for easy method chaining
1256     */
1257    public CompartmentDefinition setResource(List<CompartmentDefinitionResourceComponent> theResource) { 
1258      this.resource = theResource;
1259      return this;
1260    }
1261
1262    public boolean hasResource() { 
1263      if (this.resource == null)
1264        return false;
1265      for (CompartmentDefinitionResourceComponent item : this.resource)
1266        if (!item.isEmpty())
1267          return true;
1268      return false;
1269    }
1270
1271    public CompartmentDefinitionResourceComponent addResource() { //3
1272      CompartmentDefinitionResourceComponent t = new CompartmentDefinitionResourceComponent();
1273      if (this.resource == null)
1274        this.resource = new ArrayList<CompartmentDefinitionResourceComponent>();
1275      this.resource.add(t);
1276      return t;
1277    }
1278
1279    public CompartmentDefinition addResource(CompartmentDefinitionResourceComponent t) { //3
1280      if (t == null)
1281        return this;
1282      if (this.resource == null)
1283        this.resource = new ArrayList<CompartmentDefinitionResourceComponent>();
1284      this.resource.add(t);
1285      return this;
1286    }
1287
1288    /**
1289     * @return The first repetition of repeating field {@link #resource}, creating it if it does not already exist
1290     */
1291    public CompartmentDefinitionResourceComponent getResourceFirstRep() { 
1292      if (getResource().isEmpty()) {
1293        addResource();
1294      }
1295      return getResource().get(0);
1296    }
1297
1298      protected void listChildren(List<Property> childrenList) {
1299        super.listChildren(childrenList);
1300        childrenList.add(new Property("url", "uri", "An absolute URI that is used to identify this compartment definition when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this compartment definition is (or will be) published. The URL SHOULD include the major version of the compartment definition. For more information see [Technical and Business Versions](resource.html#versions).", 0, java.lang.Integer.MAX_VALUE, url));
1301        childrenList.add(new Property("name", "string", "A natural language name identifying the compartment definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.", 0, java.lang.Integer.MAX_VALUE, name));
1302        childrenList.add(new Property("title", "string", "A short, descriptive, user-friendly title for the compartment definition.", 0, java.lang.Integer.MAX_VALUE, title));
1303        childrenList.add(new Property("status", "code", "The status of this compartment definition. Enables tracking the life-cycle of the content.", 0, java.lang.Integer.MAX_VALUE, status));
1304        childrenList.add(new Property("experimental", "boolean", "A boolean value to indicate that this compartment definition is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.", 0, java.lang.Integer.MAX_VALUE, experimental));
1305        childrenList.add(new Property("date", "dateTime", "The date  (and optionally time) when the compartment definition was published. The date must change if and when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the compartment definition changes.", 0, java.lang.Integer.MAX_VALUE, date));
1306        childrenList.add(new Property("publisher", "string", "The name of the individual or organization that published the compartment definition.", 0, java.lang.Integer.MAX_VALUE, publisher));
1307        childrenList.add(new Property("contact", "ContactDetail", "Contact details to assist a user in finding and communicating with the publisher.", 0, java.lang.Integer.MAX_VALUE, contact));
1308        childrenList.add(new Property("description", "markdown", "A free text natural language description of the compartment definition from a consumer's perspective.", 0, java.lang.Integer.MAX_VALUE, description));
1309        childrenList.add(new Property("purpose", "markdown", "Explaination of why this compartment definition is needed and why it has been designed as it has.", 0, java.lang.Integer.MAX_VALUE, purpose));
1310        childrenList.add(new Property("useContext", "UsageContext", "The content was developed with a focus and intent of supporting the contexts that are listed. These terms may be used to assist with indexing and searching for appropriate compartment definition instances.", 0, java.lang.Integer.MAX_VALUE, useContext));
1311        childrenList.add(new Property("jurisdiction", "CodeableConcept", "A legal or geographic region in which the compartment definition is intended to be used.", 0, java.lang.Integer.MAX_VALUE, jurisdiction));
1312        childrenList.add(new Property("code", "code", "Which compartment this definition describes.", 0, java.lang.Integer.MAX_VALUE, code));
1313        childrenList.add(new Property("search", "boolean", "Whether the search syntax is supported,.", 0, java.lang.Integer.MAX_VALUE, search));
1314        childrenList.add(new Property("resource", "", "Information about how a resource is related to the compartment.", 0, java.lang.Integer.MAX_VALUE, resource));
1315      }
1316
1317      @Override
1318      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1319        switch (hash) {
1320        case 116079: /*url*/ return this.url == null ? new Base[0] : new Base[] {this.url}; // UriType
1321        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // StringType
1322        case 110371416: /*title*/ return this.title == null ? new Base[0] : new Base[] {this.title}; // StringType
1323        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<PublicationStatus>
1324        case -404562712: /*experimental*/ return this.experimental == null ? new Base[0] : new Base[] {this.experimental}; // BooleanType
1325        case 3076014: /*date*/ return this.date == null ? new Base[0] : new Base[] {this.date}; // DateTimeType
1326        case 1447404028: /*publisher*/ return this.publisher == null ? new Base[0] : new Base[] {this.publisher}; // StringType
1327        case 951526432: /*contact*/ return this.contact == null ? new Base[0] : this.contact.toArray(new Base[this.contact.size()]); // ContactDetail
1328        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // MarkdownType
1329        case -220463842: /*purpose*/ return this.purpose == null ? new Base[0] : new Base[] {this.purpose}; // MarkdownType
1330        case -669707736: /*useContext*/ return this.useContext == null ? new Base[0] : this.useContext.toArray(new Base[this.useContext.size()]); // UsageContext
1331        case -507075711: /*jurisdiction*/ return this.jurisdiction == null ? new Base[0] : this.jurisdiction.toArray(new Base[this.jurisdiction.size()]); // CodeableConcept
1332        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // Enumeration<CompartmentType>
1333        case -906336856: /*search*/ return this.search == null ? new Base[0] : new Base[] {this.search}; // BooleanType
1334        case -341064690: /*resource*/ return this.resource == null ? new Base[0] : this.resource.toArray(new Base[this.resource.size()]); // CompartmentDefinitionResourceComponent
1335        default: return super.getProperty(hash, name, checkValid);
1336        }
1337
1338      }
1339
1340      @Override
1341      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1342        switch (hash) {
1343        case 116079: // url
1344          this.url = castToUri(value); // UriType
1345          return value;
1346        case 3373707: // name
1347          this.name = castToString(value); // StringType
1348          return value;
1349        case 110371416: // title
1350          this.title = castToString(value); // StringType
1351          return value;
1352        case -892481550: // status
1353          value = new PublicationStatusEnumFactory().fromType(castToCode(value));
1354          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
1355          return value;
1356        case -404562712: // experimental
1357          this.experimental = castToBoolean(value); // BooleanType
1358          return value;
1359        case 3076014: // date
1360          this.date = castToDateTime(value); // DateTimeType
1361          return value;
1362        case 1447404028: // publisher
1363          this.publisher = castToString(value); // StringType
1364          return value;
1365        case 951526432: // contact
1366          this.getContact().add(castToContactDetail(value)); // ContactDetail
1367          return value;
1368        case -1724546052: // description
1369          this.description = castToMarkdown(value); // MarkdownType
1370          return value;
1371        case -220463842: // purpose
1372          this.purpose = castToMarkdown(value); // MarkdownType
1373          return value;
1374        case -669707736: // useContext
1375          this.getUseContext().add(castToUsageContext(value)); // UsageContext
1376          return value;
1377        case -507075711: // jurisdiction
1378          this.getJurisdiction().add(castToCodeableConcept(value)); // CodeableConcept
1379          return value;
1380        case 3059181: // code
1381          value = new CompartmentTypeEnumFactory().fromType(castToCode(value));
1382          this.code = (Enumeration) value; // Enumeration<CompartmentType>
1383          return value;
1384        case -906336856: // search
1385          this.search = castToBoolean(value); // BooleanType
1386          return value;
1387        case -341064690: // resource
1388          this.getResource().add((CompartmentDefinitionResourceComponent) value); // CompartmentDefinitionResourceComponent
1389          return value;
1390        default: return super.setProperty(hash, name, value);
1391        }
1392
1393      }
1394
1395      @Override
1396      public Base setProperty(String name, Base value) throws FHIRException {
1397        if (name.equals("url")) {
1398          this.url = castToUri(value); // UriType
1399        } else if (name.equals("name")) {
1400          this.name = castToString(value); // StringType
1401        } else if (name.equals("title")) {
1402          this.title = castToString(value); // StringType
1403        } else if (name.equals("status")) {
1404          value = new PublicationStatusEnumFactory().fromType(castToCode(value));
1405          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
1406        } else if (name.equals("experimental")) {
1407          this.experimental = castToBoolean(value); // BooleanType
1408        } else if (name.equals("date")) {
1409          this.date = castToDateTime(value); // DateTimeType
1410        } else if (name.equals("publisher")) {
1411          this.publisher = castToString(value); // StringType
1412        } else if (name.equals("contact")) {
1413          this.getContact().add(castToContactDetail(value));
1414        } else if (name.equals("description")) {
1415          this.description = castToMarkdown(value); // MarkdownType
1416        } else if (name.equals("purpose")) {
1417          this.purpose = castToMarkdown(value); // MarkdownType
1418        } else if (name.equals("useContext")) {
1419          this.getUseContext().add(castToUsageContext(value));
1420        } else if (name.equals("jurisdiction")) {
1421          this.getJurisdiction().add(castToCodeableConcept(value));
1422        } else if (name.equals("code")) {
1423          value = new CompartmentTypeEnumFactory().fromType(castToCode(value));
1424          this.code = (Enumeration) value; // Enumeration<CompartmentType>
1425        } else if (name.equals("search")) {
1426          this.search = castToBoolean(value); // BooleanType
1427        } else if (name.equals("resource")) {
1428          this.getResource().add((CompartmentDefinitionResourceComponent) value);
1429        } else
1430          return super.setProperty(name, value);
1431        return value;
1432      }
1433
1434      @Override
1435      public Base makeProperty(int hash, String name) throws FHIRException {
1436        switch (hash) {
1437        case 116079:  return getUrlElement();
1438        case 3373707:  return getNameElement();
1439        case 110371416:  return getTitleElement();
1440        case -892481550:  return getStatusElement();
1441        case -404562712:  return getExperimentalElement();
1442        case 3076014:  return getDateElement();
1443        case 1447404028:  return getPublisherElement();
1444        case 951526432:  return addContact(); 
1445        case -1724546052:  return getDescriptionElement();
1446        case -220463842:  return getPurposeElement();
1447        case -669707736:  return addUseContext(); 
1448        case -507075711:  return addJurisdiction(); 
1449        case 3059181:  return getCodeElement();
1450        case -906336856:  return getSearchElement();
1451        case -341064690:  return addResource(); 
1452        default: return super.makeProperty(hash, name);
1453        }
1454
1455      }
1456
1457      @Override
1458      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1459        switch (hash) {
1460        case 116079: /*url*/ return new String[] {"uri"};
1461        case 3373707: /*name*/ return new String[] {"string"};
1462        case 110371416: /*title*/ return new String[] {"string"};
1463        case -892481550: /*status*/ return new String[] {"code"};
1464        case -404562712: /*experimental*/ return new String[] {"boolean"};
1465        case 3076014: /*date*/ return new String[] {"dateTime"};
1466        case 1447404028: /*publisher*/ return new String[] {"string"};
1467        case 951526432: /*contact*/ return new String[] {"ContactDetail"};
1468        case -1724546052: /*description*/ return new String[] {"markdown"};
1469        case -220463842: /*purpose*/ return new String[] {"markdown"};
1470        case -669707736: /*useContext*/ return new String[] {"UsageContext"};
1471        case -507075711: /*jurisdiction*/ return new String[] {"CodeableConcept"};
1472        case 3059181: /*code*/ return new String[] {"code"};
1473        case -906336856: /*search*/ return new String[] {"boolean"};
1474        case -341064690: /*resource*/ return new String[] {};
1475        default: return super.getTypesForProperty(hash, name);
1476        }
1477
1478      }
1479
1480      @Override
1481      public Base addChild(String name) throws FHIRException {
1482        if (name.equals("url")) {
1483          throw new FHIRException("Cannot call addChild on a primitive type CompartmentDefinition.url");
1484        }
1485        else if (name.equals("name")) {
1486          throw new FHIRException("Cannot call addChild on a primitive type CompartmentDefinition.name");
1487        }
1488        else if (name.equals("title")) {
1489          throw new FHIRException("Cannot call addChild on a primitive type CompartmentDefinition.title");
1490        }
1491        else if (name.equals("status")) {
1492          throw new FHIRException("Cannot call addChild on a primitive type CompartmentDefinition.status");
1493        }
1494        else if (name.equals("experimental")) {
1495          throw new FHIRException("Cannot call addChild on a primitive type CompartmentDefinition.experimental");
1496        }
1497        else if (name.equals("date")) {
1498          throw new FHIRException("Cannot call addChild on a primitive type CompartmentDefinition.date");
1499        }
1500        else if (name.equals("publisher")) {
1501          throw new FHIRException("Cannot call addChild on a primitive type CompartmentDefinition.publisher");
1502        }
1503        else if (name.equals("contact")) {
1504          return addContact();
1505        }
1506        else if (name.equals("description")) {
1507          throw new FHIRException("Cannot call addChild on a primitive type CompartmentDefinition.description");
1508        }
1509        else if (name.equals("purpose")) {
1510          throw new FHIRException("Cannot call addChild on a primitive type CompartmentDefinition.purpose");
1511        }
1512        else if (name.equals("useContext")) {
1513          return addUseContext();
1514        }
1515        else if (name.equals("jurisdiction")) {
1516          return addJurisdiction();
1517        }
1518        else if (name.equals("code")) {
1519          throw new FHIRException("Cannot call addChild on a primitive type CompartmentDefinition.code");
1520        }
1521        else if (name.equals("search")) {
1522          throw new FHIRException("Cannot call addChild on a primitive type CompartmentDefinition.search");
1523        }
1524        else if (name.equals("resource")) {
1525          return addResource();
1526        }
1527        else
1528          return super.addChild(name);
1529      }
1530
1531  public String fhirType() {
1532    return "CompartmentDefinition";
1533
1534  }
1535
1536      public CompartmentDefinition copy() {
1537        CompartmentDefinition dst = new CompartmentDefinition();
1538        copyValues(dst);
1539        dst.url = url == null ? null : url.copy();
1540        dst.name = name == null ? null : name.copy();
1541        dst.title = title == null ? null : title.copy();
1542        dst.status = status == null ? null : status.copy();
1543        dst.experimental = experimental == null ? null : experimental.copy();
1544        dst.date = date == null ? null : date.copy();
1545        dst.publisher = publisher == null ? null : publisher.copy();
1546        if (contact != null) {
1547          dst.contact = new ArrayList<ContactDetail>();
1548          for (ContactDetail i : contact)
1549            dst.contact.add(i.copy());
1550        };
1551        dst.description = description == null ? null : description.copy();
1552        dst.purpose = purpose == null ? null : purpose.copy();
1553        if (useContext != null) {
1554          dst.useContext = new ArrayList<UsageContext>();
1555          for (UsageContext i : useContext)
1556            dst.useContext.add(i.copy());
1557        };
1558        if (jurisdiction != null) {
1559          dst.jurisdiction = new ArrayList<CodeableConcept>();
1560          for (CodeableConcept i : jurisdiction)
1561            dst.jurisdiction.add(i.copy());
1562        };
1563        dst.code = code == null ? null : code.copy();
1564        dst.search = search == null ? null : search.copy();
1565        if (resource != null) {
1566          dst.resource = new ArrayList<CompartmentDefinitionResourceComponent>();
1567          for (CompartmentDefinitionResourceComponent i : resource)
1568            dst.resource.add(i.copy());
1569        };
1570        return dst;
1571      }
1572
1573      protected CompartmentDefinition typedCopy() {
1574        return copy();
1575      }
1576
1577      @Override
1578      public boolean equalsDeep(Base other) {
1579        if (!super.equalsDeep(other))
1580          return false;
1581        if (!(other instanceof CompartmentDefinition))
1582          return false;
1583        CompartmentDefinition o = (CompartmentDefinition) other;
1584        return compareDeep(purpose, o.purpose, true) && compareDeep(code, o.code, true) && compareDeep(search, o.search, true)
1585           && compareDeep(resource, o.resource, true);
1586      }
1587
1588      @Override
1589      public boolean equalsShallow(Base other) {
1590        if (!super.equalsShallow(other))
1591          return false;
1592        if (!(other instanceof CompartmentDefinition))
1593          return false;
1594        CompartmentDefinition o = (CompartmentDefinition) other;
1595        return compareValues(purpose, o.purpose, true) && compareValues(code, o.code, true) && compareValues(search, o.search, true)
1596          ;
1597      }
1598
1599      public boolean isEmpty() {
1600        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(purpose, code, search, resource
1601          );
1602      }
1603
1604  @Override
1605  public ResourceType getResourceType() {
1606    return ResourceType.CompartmentDefinition;
1607   }
1608
1609 /**
1610   * Search parameter: <b>date</b>
1611   * <p>
1612   * Description: <b>The compartment definition publication date</b><br>
1613   * Type: <b>date</b><br>
1614   * Path: <b>CompartmentDefinition.date</b><br>
1615   * </p>
1616   */
1617  @SearchParamDefinition(name="date", path="CompartmentDefinition.date", description="The compartment definition publication date", type="date" )
1618  public static final String SP_DATE = "date";
1619 /**
1620   * <b>Fluent Client</b> search parameter constant for <b>date</b>
1621   * <p>
1622   * Description: <b>The compartment definition publication date</b><br>
1623   * Type: <b>date</b><br>
1624   * Path: <b>CompartmentDefinition.date</b><br>
1625   * </p>
1626   */
1627  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_DATE);
1628
1629 /**
1630   * Search parameter: <b>code</b>
1631   * <p>
1632   * Description: <b>Patient | Encounter | RelatedPerson | Practitioner | Device</b><br>
1633   * Type: <b>token</b><br>
1634   * Path: <b>CompartmentDefinition.code</b><br>
1635   * </p>
1636   */
1637  @SearchParamDefinition(name="code", path="CompartmentDefinition.code", description="Patient | Encounter | RelatedPerson | Practitioner | Device", type="token" )
1638  public static final String SP_CODE = "code";
1639 /**
1640   * <b>Fluent Client</b> search parameter constant for <b>code</b>
1641   * <p>
1642   * Description: <b>Patient | Encounter | RelatedPerson | Practitioner | Device</b><br>
1643   * Type: <b>token</b><br>
1644   * Path: <b>CompartmentDefinition.code</b><br>
1645   * </p>
1646   */
1647  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CODE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CODE);
1648
1649 /**
1650   * Search parameter: <b>resource</b>
1651   * <p>
1652   * Description: <b>Name of resource type</b><br>
1653   * Type: <b>token</b><br>
1654   * Path: <b>CompartmentDefinition.resource.code</b><br>
1655   * </p>
1656   */
1657  @SearchParamDefinition(name="resource", path="CompartmentDefinition.resource.code", description="Name of resource type", type="token" )
1658  public static final String SP_RESOURCE = "resource";
1659 /**
1660   * <b>Fluent Client</b> search parameter constant for <b>resource</b>
1661   * <p>
1662   * Description: <b>Name of resource type</b><br>
1663   * Type: <b>token</b><br>
1664   * Path: <b>CompartmentDefinition.resource.code</b><br>
1665   * </p>
1666   */
1667  public static final ca.uhn.fhir.rest.gclient.TokenClientParam RESOURCE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_RESOURCE);
1668
1669 /**
1670   * Search parameter: <b>jurisdiction</b>
1671   * <p>
1672   * Description: <b>Intended jurisdiction for the compartment definition</b><br>
1673   * Type: <b>token</b><br>
1674   * Path: <b>CompartmentDefinition.jurisdiction</b><br>
1675   * </p>
1676   */
1677  @SearchParamDefinition(name="jurisdiction", path="CompartmentDefinition.jurisdiction", description="Intended jurisdiction for the compartment definition", type="token" )
1678  public static final String SP_JURISDICTION = "jurisdiction";
1679 /**
1680   * <b>Fluent Client</b> search parameter constant for <b>jurisdiction</b>
1681   * <p>
1682   * Description: <b>Intended jurisdiction for the compartment definition</b><br>
1683   * Type: <b>token</b><br>
1684   * Path: <b>CompartmentDefinition.jurisdiction</b><br>
1685   * </p>
1686   */
1687  public static final ca.uhn.fhir.rest.gclient.TokenClientParam JURISDICTION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_JURISDICTION);
1688
1689 /**
1690   * Search parameter: <b>name</b>
1691   * <p>
1692   * Description: <b>Computationally friendly name of the compartment definition</b><br>
1693   * Type: <b>string</b><br>
1694   * Path: <b>CompartmentDefinition.name</b><br>
1695   * </p>
1696   */
1697  @SearchParamDefinition(name="name", path="CompartmentDefinition.name", description="Computationally friendly name of the compartment definition", type="string" )
1698  public static final String SP_NAME = "name";
1699 /**
1700   * <b>Fluent Client</b> search parameter constant for <b>name</b>
1701   * <p>
1702   * Description: <b>Computationally friendly name of the compartment definition</b><br>
1703   * Type: <b>string</b><br>
1704   * Path: <b>CompartmentDefinition.name</b><br>
1705   * </p>
1706   */
1707  public static final ca.uhn.fhir.rest.gclient.StringClientParam NAME = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_NAME);
1708
1709 /**
1710   * Search parameter: <b>description</b>
1711   * <p>
1712   * Description: <b>The description of the compartment definition</b><br>
1713   * Type: <b>string</b><br>
1714   * Path: <b>CompartmentDefinition.description</b><br>
1715   * </p>
1716   */
1717  @SearchParamDefinition(name="description", path="CompartmentDefinition.description", description="The description of the compartment definition", type="string" )
1718  public static final String SP_DESCRIPTION = "description";
1719 /**
1720   * <b>Fluent Client</b> search parameter constant for <b>description</b>
1721   * <p>
1722   * Description: <b>The description of the compartment definition</b><br>
1723   * Type: <b>string</b><br>
1724   * Path: <b>CompartmentDefinition.description</b><br>
1725   * </p>
1726   */
1727  public static final ca.uhn.fhir.rest.gclient.StringClientParam DESCRIPTION = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_DESCRIPTION);
1728
1729 /**
1730   * Search parameter: <b>publisher</b>
1731   * <p>
1732   * Description: <b>Name of the publisher of the compartment definition</b><br>
1733   * Type: <b>string</b><br>
1734   * Path: <b>CompartmentDefinition.publisher</b><br>
1735   * </p>
1736   */
1737  @SearchParamDefinition(name="publisher", path="CompartmentDefinition.publisher", description="Name of the publisher of the compartment definition", type="string" )
1738  public static final String SP_PUBLISHER = "publisher";
1739 /**
1740   * <b>Fluent Client</b> search parameter constant for <b>publisher</b>
1741   * <p>
1742   * Description: <b>Name of the publisher of the compartment definition</b><br>
1743   * Type: <b>string</b><br>
1744   * Path: <b>CompartmentDefinition.publisher</b><br>
1745   * </p>
1746   */
1747  public static final ca.uhn.fhir.rest.gclient.StringClientParam PUBLISHER = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_PUBLISHER);
1748
1749 /**
1750   * Search parameter: <b>title</b>
1751   * <p>
1752   * Description: <b>The human-friendly name of the compartment definition</b><br>
1753   * Type: <b>string</b><br>
1754   * Path: <b>CompartmentDefinition.title</b><br>
1755   * </p>
1756   */
1757  @SearchParamDefinition(name="title", path="CompartmentDefinition.title", description="The human-friendly name of the compartment definition", type="string" )
1758  public static final String SP_TITLE = "title";
1759 /**
1760   * <b>Fluent Client</b> search parameter constant for <b>title</b>
1761   * <p>
1762   * Description: <b>The human-friendly name of the compartment definition</b><br>
1763   * Type: <b>string</b><br>
1764   * Path: <b>CompartmentDefinition.title</b><br>
1765   * </p>
1766   */
1767  public static final ca.uhn.fhir.rest.gclient.StringClientParam TITLE = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_TITLE);
1768
1769 /**
1770   * Search parameter: <b>url</b>
1771   * <p>
1772   * Description: <b>The uri that identifies the compartment definition</b><br>
1773   * Type: <b>uri</b><br>
1774   * Path: <b>CompartmentDefinition.url</b><br>
1775   * </p>
1776   */
1777  @SearchParamDefinition(name="url", path="CompartmentDefinition.url", description="The uri that identifies the compartment definition", type="uri" )
1778  public static final String SP_URL = "url";
1779 /**
1780   * <b>Fluent Client</b> search parameter constant for <b>url</b>
1781   * <p>
1782   * Description: <b>The uri that identifies the compartment definition</b><br>
1783   * Type: <b>uri</b><br>
1784   * Path: <b>CompartmentDefinition.url</b><br>
1785   * </p>
1786   */
1787  public static final ca.uhn.fhir.rest.gclient.UriClientParam URL = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_URL);
1788
1789 /**
1790   * Search parameter: <b>status</b>
1791   * <p>
1792   * Description: <b>The current status of the compartment definition</b><br>
1793   * Type: <b>token</b><br>
1794   * Path: <b>CompartmentDefinition.status</b><br>
1795   * </p>
1796   */
1797  @SearchParamDefinition(name="status", path="CompartmentDefinition.status", description="The current status of the compartment definition", type="token" )
1798  public static final String SP_STATUS = "status";
1799 /**
1800   * <b>Fluent Client</b> search parameter constant for <b>status</b>
1801   * <p>
1802   * Description: <b>The current status of the compartment definition</b><br>
1803   * Type: <b>token</b><br>
1804   * Path: <b>CompartmentDefinition.status</b><br>
1805   * </p>
1806   */
1807  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
1808
1809
1810}
1811