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