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