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