001package org.hl7.fhir.r4b.model;
002
003
004/*
005  Copyright (c) 2011+, HL7, Inc.
006  All rights reserved.
007  
008  Redistribution and use in source and binary forms, with or without modification, \
009  are permitted provided that the following conditions are met:
010  
011   * Redistributions of source code must retain the above copyright notice, this \
012     list of conditions and the following disclaimer.
013   * Redistributions in binary form must reproduce the above copyright notice, \
014     this list of conditions and the following disclaimer in the documentation \
015     and/or other materials provided with the distribution.
016   * Neither the name of HL7 nor the names of its contributors may be used to 
017     endorse or promote products derived from this software without specific 
018     prior written permission.
019  
020  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND \
021  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED \
022  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. \
023  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, \
024  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT \
025  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR \
026  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, \
027  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) \
028  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE \
029  POSSIBILITY OF SUCH DAMAGE.
030  */
031
032// Generated on Fri, Dec 31, 2021 05:58+1100 for FHIR v4.3.0-snapshot1
033
034import java.util.ArrayList;
035import java.util.Date;
036import java.util.List;
037import org.hl7.fhir.utilities.Utilities;
038import org.hl7.fhir.r4b.model.Enumerations.*;
039import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
040import org.hl7.fhir.exceptions.FHIRException;
041import org.hl7.fhir.instance.model.api.ICompositeType;
042import ca.uhn.fhir.model.api.annotation.ResourceDef;
043import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
044import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
045import ca.uhn.fhir.model.api.annotation.Child;
046import ca.uhn.fhir.model.api.annotation.ChildOrder;
047import ca.uhn.fhir.model.api.annotation.Description;
048import ca.uhn.fhir.model.api.annotation.Block;
049
050/**
051 * A TerminologyCapabilities resource documents a set of capabilities (behaviors) of a FHIR Terminology Server that may be used as a statement of actual server functionality or a statement of required or desired server implementation.
052 */
053@ResourceDef(name="TerminologyCapabilities", profile="http://hl7.org/fhir/StructureDefinition/TerminologyCapabilities")
054public class TerminologyCapabilities extends CanonicalResource {
055
056    public enum CodeSearchSupport {
057        /**
058         * The search for code on ValueSet only includes codes explicitly detailed on includes or expansions.
059         */
060        EXPLICIT, 
061        /**
062         * The search for code on ValueSet only includes all codes based on the expansion of the value set.
063         */
064        ALL, 
065        /**
066         * added to help the parsers with the generic types
067         */
068        NULL;
069        public static CodeSearchSupport fromCode(String codeString) throws FHIRException {
070            if (codeString == null || "".equals(codeString))
071                return null;
072        if ("explicit".equals(codeString))
073          return EXPLICIT;
074        if ("all".equals(codeString))
075          return ALL;
076        if (Configuration.isAcceptInvalidEnums())
077          return null;
078        else
079          throw new FHIRException("Unknown CodeSearchSupport code '"+codeString+"'");
080        }
081        public String toCode() {
082          switch (this) {
083            case EXPLICIT: return "explicit";
084            case ALL: return "all";
085            case NULL: return null;
086            default: return "?";
087          }
088        }
089        public String getSystem() {
090          switch (this) {
091            case EXPLICIT: return "http://hl7.org/fhir/code-search-support";
092            case ALL: return "http://hl7.org/fhir/code-search-support";
093            case NULL: return null;
094            default: return "?";
095          }
096        }
097        public String getDefinition() {
098          switch (this) {
099            case EXPLICIT: return "The search for code on ValueSet only includes codes explicitly detailed on includes or expansions.";
100            case ALL: return "The search for code on ValueSet only includes all codes based on the expansion of the value set.";
101            case NULL: return null;
102            default: return "?";
103          }
104        }
105        public String getDisplay() {
106          switch (this) {
107            case EXPLICIT: return "Explicit Codes";
108            case ALL: return "Implicit Codes";
109            case NULL: return null;
110            default: return "?";
111          }
112        }
113    }
114
115  public static class CodeSearchSupportEnumFactory implements EnumFactory<CodeSearchSupport> {
116    public CodeSearchSupport fromCode(String codeString) throws IllegalArgumentException {
117      if (codeString == null || "".equals(codeString))
118            if (codeString == null || "".equals(codeString))
119                return null;
120        if ("explicit".equals(codeString))
121          return CodeSearchSupport.EXPLICIT;
122        if ("all".equals(codeString))
123          return CodeSearchSupport.ALL;
124        throw new IllegalArgumentException("Unknown CodeSearchSupport code '"+codeString+"'");
125        }
126        public Enumeration<CodeSearchSupport> fromType(Base code) throws FHIRException {
127          if (code == null)
128            return null;
129          if (code.isEmpty())
130            return new Enumeration<CodeSearchSupport>(this);
131          String codeString = ((PrimitiveType) code).asStringValue();
132          if (codeString == null || "".equals(codeString))
133            return null;
134        if ("explicit".equals(codeString))
135          return new Enumeration<CodeSearchSupport>(this, CodeSearchSupport.EXPLICIT);
136        if ("all".equals(codeString))
137          return new Enumeration<CodeSearchSupport>(this, CodeSearchSupport.ALL);
138        throw new FHIRException("Unknown CodeSearchSupport code '"+codeString+"'");
139        }
140    public String toCode(CodeSearchSupport code) {
141      if (code == CodeSearchSupport.EXPLICIT)
142        return "explicit";
143      if (code == CodeSearchSupport.ALL)
144        return "all";
145      return "?";
146      }
147    public String toSystem(CodeSearchSupport code) {
148      return code.getSystem();
149      }
150    }
151
152    @Block()
153    public static class TerminologyCapabilitiesSoftwareComponent extends BackboneElement implements IBaseBackboneElement {
154        /**
155         * Name the software is known by.
156         */
157        @Child(name = "name", type = {StringType.class}, order=1, min=1, max=1, modifier=false, summary=true)
158        @Description(shortDefinition="A name the software is known by", formalDefinition="Name the software is known by." )
159        protected StringType name;
160
161        /**
162         * The version identifier for the software covered by this statement.
163         */
164        @Child(name = "version", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=true)
165        @Description(shortDefinition="Version covered by this statement", formalDefinition="The version identifier for the software covered by this statement." )
166        protected StringType version;
167
168        private static final long serialVersionUID = -790299911L;
169
170    /**
171     * Constructor
172     */
173      public TerminologyCapabilitiesSoftwareComponent() {
174        super();
175      }
176
177    /**
178     * Constructor
179     */
180      public TerminologyCapabilitiesSoftwareComponent(String name) {
181        super();
182        this.setName(name);
183      }
184
185        /**
186         * @return {@link #name} (Name the software is known by.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
187         */
188        public StringType getNameElement() { 
189          if (this.name == null)
190            if (Configuration.errorOnAutoCreate())
191              throw new Error("Attempt to auto-create TerminologyCapabilitiesSoftwareComponent.name");
192            else if (Configuration.doAutoCreate())
193              this.name = new StringType(); // bb
194          return this.name;
195        }
196
197        public boolean hasNameElement() { 
198          return this.name != null && !this.name.isEmpty();
199        }
200
201        public boolean hasName() { 
202          return this.name != null && !this.name.isEmpty();
203        }
204
205        /**
206         * @param value {@link #name} (Name the software is known by.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
207         */
208        public TerminologyCapabilitiesSoftwareComponent setNameElement(StringType value) { 
209          this.name = value;
210          return this;
211        }
212
213        /**
214         * @return Name the software is known by.
215         */
216        public String getName() { 
217          return this.name == null ? null : this.name.getValue();
218        }
219
220        /**
221         * @param value Name the software is known by.
222         */
223        public TerminologyCapabilitiesSoftwareComponent setName(String value) { 
224            if (this.name == null)
225              this.name = new StringType();
226            this.name.setValue(value);
227          return this;
228        }
229
230        /**
231         * @return {@link #version} (The version identifier for the software covered by this statement.). This is the underlying object with id, value and extensions. The accessor "getVersion" gives direct access to the value
232         */
233        public StringType getVersionElement() { 
234          if (this.version == null)
235            if (Configuration.errorOnAutoCreate())
236              throw new Error("Attempt to auto-create TerminologyCapabilitiesSoftwareComponent.version");
237            else if (Configuration.doAutoCreate())
238              this.version = new StringType(); // bb
239          return this.version;
240        }
241
242        public boolean hasVersionElement() { 
243          return this.version != null && !this.version.isEmpty();
244        }
245
246        public boolean hasVersion() { 
247          return this.version != null && !this.version.isEmpty();
248        }
249
250        /**
251         * @param value {@link #version} (The version identifier for the software covered by this statement.). This is the underlying object with id, value and extensions. The accessor "getVersion" gives direct access to the value
252         */
253        public TerminologyCapabilitiesSoftwareComponent setVersionElement(StringType value) { 
254          this.version = value;
255          return this;
256        }
257
258        /**
259         * @return The version identifier for the software covered by this statement.
260         */
261        public String getVersion() { 
262          return this.version == null ? null : this.version.getValue();
263        }
264
265        /**
266         * @param value The version identifier for the software covered by this statement.
267         */
268        public TerminologyCapabilitiesSoftwareComponent setVersion(String value) { 
269          if (Utilities.noString(value))
270            this.version = null;
271          else {
272            if (this.version == null)
273              this.version = new StringType();
274            this.version.setValue(value);
275          }
276          return this;
277        }
278
279        protected void listChildren(List<Property> children) {
280          super.listChildren(children);
281          children.add(new Property("name", "string", "Name the software is known by.", 0, 1, name));
282          children.add(new Property("version", "string", "The version identifier for the software covered by this statement.", 0, 1, version));
283        }
284
285        @Override
286        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
287          switch (_hash) {
288          case 3373707: /*name*/  return new Property("name", "string", "Name the software is known by.", 0, 1, name);
289          case 351608024: /*version*/  return new Property("version", "string", "The version identifier for the software covered by this statement.", 0, 1, version);
290          default: return super.getNamedProperty(_hash, _name, _checkValid);
291          }
292
293        }
294
295      @Override
296      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
297        switch (hash) {
298        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // StringType
299        case 351608024: /*version*/ return this.version == null ? new Base[0] : new Base[] {this.version}; // StringType
300        default: return super.getProperty(hash, name, checkValid);
301        }
302
303      }
304
305      @Override
306      public Base setProperty(int hash, String name, Base value) throws FHIRException {
307        switch (hash) {
308        case 3373707: // name
309          this.name = TypeConvertor.castToString(value); // StringType
310          return value;
311        case 351608024: // version
312          this.version = TypeConvertor.castToString(value); // StringType
313          return value;
314        default: return super.setProperty(hash, name, value);
315        }
316
317      }
318
319      @Override
320      public Base setProperty(String name, Base value) throws FHIRException {
321        if (name.equals("name")) {
322          this.name = TypeConvertor.castToString(value); // StringType
323        } else if (name.equals("version")) {
324          this.version = TypeConvertor.castToString(value); // StringType
325        } else
326          return super.setProperty(name, value);
327        return value;
328      }
329
330      @Override
331      public Base makeProperty(int hash, String name) throws FHIRException {
332        switch (hash) {
333        case 3373707:  return getNameElement();
334        case 351608024:  return getVersionElement();
335        default: return super.makeProperty(hash, name);
336        }
337
338      }
339
340      @Override
341      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
342        switch (hash) {
343        case 3373707: /*name*/ return new String[] {"string"};
344        case 351608024: /*version*/ return new String[] {"string"};
345        default: return super.getTypesForProperty(hash, name);
346        }
347
348      }
349
350      @Override
351      public Base addChild(String name) throws FHIRException {
352        if (name.equals("name")) {
353          throw new FHIRException("Cannot call addChild on a primitive type TerminologyCapabilities.software.name");
354        }
355        else if (name.equals("version")) {
356          throw new FHIRException("Cannot call addChild on a primitive type TerminologyCapabilities.software.version");
357        }
358        else
359          return super.addChild(name);
360      }
361
362      public TerminologyCapabilitiesSoftwareComponent copy() {
363        TerminologyCapabilitiesSoftwareComponent dst = new TerminologyCapabilitiesSoftwareComponent();
364        copyValues(dst);
365        return dst;
366      }
367
368      public void copyValues(TerminologyCapabilitiesSoftwareComponent dst) {
369        super.copyValues(dst);
370        dst.name = name == null ? null : name.copy();
371        dst.version = version == null ? null : version.copy();
372      }
373
374      @Override
375      public boolean equalsDeep(Base other_) {
376        if (!super.equalsDeep(other_))
377          return false;
378        if (!(other_ instanceof TerminologyCapabilitiesSoftwareComponent))
379          return false;
380        TerminologyCapabilitiesSoftwareComponent o = (TerminologyCapabilitiesSoftwareComponent) other_;
381        return compareDeep(name, o.name, true) && compareDeep(version, o.version, true);
382      }
383
384      @Override
385      public boolean equalsShallow(Base other_) {
386        if (!super.equalsShallow(other_))
387          return false;
388        if (!(other_ instanceof TerminologyCapabilitiesSoftwareComponent))
389          return false;
390        TerminologyCapabilitiesSoftwareComponent o = (TerminologyCapabilitiesSoftwareComponent) other_;
391        return compareValues(name, o.name, true) && compareValues(version, o.version, true);
392      }
393
394      public boolean isEmpty() {
395        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(name, version);
396      }
397
398  public String fhirType() {
399    return "TerminologyCapabilities.software";
400
401  }
402
403  }
404
405    @Block()
406    public static class TerminologyCapabilitiesImplementationComponent extends BackboneElement implements IBaseBackboneElement {
407        /**
408         * Information about the specific installation that this terminology capability statement relates to.
409         */
410        @Child(name = "description", type = {StringType.class}, order=1, min=1, max=1, modifier=false, summary=true)
411        @Description(shortDefinition="Describes this specific instance", formalDefinition="Information about the specific installation that this terminology capability statement relates to." )
412        protected StringType description;
413
414        /**
415         * An absolute base URL for the implementation.
416         */
417        @Child(name = "url", type = {UrlType.class}, order=2, min=0, max=1, modifier=false, summary=true)
418        @Description(shortDefinition="Base URL for the implementation", formalDefinition="An absolute base URL for the implementation." )
419        protected UrlType url;
420
421        private static final long serialVersionUID = 98009649L;
422
423    /**
424     * Constructor
425     */
426      public TerminologyCapabilitiesImplementationComponent() {
427        super();
428      }
429
430    /**
431     * Constructor
432     */
433      public TerminologyCapabilitiesImplementationComponent(String description) {
434        super();
435        this.setDescription(description);
436      }
437
438        /**
439         * @return {@link #description} (Information about the specific installation that this terminology capability statement relates to.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
440         */
441        public StringType getDescriptionElement() { 
442          if (this.description == null)
443            if (Configuration.errorOnAutoCreate())
444              throw new Error("Attempt to auto-create TerminologyCapabilitiesImplementationComponent.description");
445            else if (Configuration.doAutoCreate())
446              this.description = new StringType(); // bb
447          return this.description;
448        }
449
450        public boolean hasDescriptionElement() { 
451          return this.description != null && !this.description.isEmpty();
452        }
453
454        public boolean hasDescription() { 
455          return this.description != null && !this.description.isEmpty();
456        }
457
458        /**
459         * @param value {@link #description} (Information about the specific installation that this terminology capability statement relates to.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
460         */
461        public TerminologyCapabilitiesImplementationComponent setDescriptionElement(StringType value) { 
462          this.description = value;
463          return this;
464        }
465
466        /**
467         * @return Information about the specific installation that this terminology capability statement relates to.
468         */
469        public String getDescription() { 
470          return this.description == null ? null : this.description.getValue();
471        }
472
473        /**
474         * @param value Information about the specific installation that this terminology capability statement relates to.
475         */
476        public TerminologyCapabilitiesImplementationComponent setDescription(String value) { 
477            if (this.description == null)
478              this.description = new StringType();
479            this.description.setValue(value);
480          return this;
481        }
482
483        /**
484         * @return {@link #url} (An absolute base URL for the implementation.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
485         */
486        public UrlType getUrlElement() { 
487          if (this.url == null)
488            if (Configuration.errorOnAutoCreate())
489              throw new Error("Attempt to auto-create TerminologyCapabilitiesImplementationComponent.url");
490            else if (Configuration.doAutoCreate())
491              this.url = new UrlType(); // bb
492          return this.url;
493        }
494
495        public boolean hasUrlElement() { 
496          return this.url != null && !this.url.isEmpty();
497        }
498
499        public boolean hasUrl() { 
500          return this.url != null && !this.url.isEmpty();
501        }
502
503        /**
504         * @param value {@link #url} (An absolute base URL for the implementation.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
505         */
506        public TerminologyCapabilitiesImplementationComponent setUrlElement(UrlType value) { 
507          this.url = value;
508          return this;
509        }
510
511        /**
512         * @return An absolute base URL for the implementation.
513         */
514        public String getUrl() { 
515          return this.url == null ? null : this.url.getValue();
516        }
517
518        /**
519         * @param value An absolute base URL for the implementation.
520         */
521        public TerminologyCapabilitiesImplementationComponent setUrl(String value) { 
522          if (Utilities.noString(value))
523            this.url = null;
524          else {
525            if (this.url == null)
526              this.url = new UrlType();
527            this.url.setValue(value);
528          }
529          return this;
530        }
531
532        protected void listChildren(List<Property> children) {
533          super.listChildren(children);
534          children.add(new Property("description", "string", "Information about the specific installation that this terminology capability statement relates to.", 0, 1, description));
535          children.add(new Property("url", "url", "An absolute base URL for the implementation.", 0, 1, url));
536        }
537
538        @Override
539        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
540          switch (_hash) {
541          case -1724546052: /*description*/  return new Property("description", "string", "Information about the specific installation that this terminology capability statement relates to.", 0, 1, description);
542          case 116079: /*url*/  return new Property("url", "url", "An absolute base URL for the implementation.", 0, 1, url);
543          default: return super.getNamedProperty(_hash, _name, _checkValid);
544          }
545
546        }
547
548      @Override
549      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
550        switch (hash) {
551        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // StringType
552        case 116079: /*url*/ return this.url == null ? new Base[0] : new Base[] {this.url}; // UrlType
553        default: return super.getProperty(hash, name, checkValid);
554        }
555
556      }
557
558      @Override
559      public Base setProperty(int hash, String name, Base value) throws FHIRException {
560        switch (hash) {
561        case -1724546052: // description
562          this.description = TypeConvertor.castToString(value); // StringType
563          return value;
564        case 116079: // url
565          this.url = TypeConvertor.castToUrl(value); // UrlType
566          return value;
567        default: return super.setProperty(hash, name, value);
568        }
569
570      }
571
572      @Override
573      public Base setProperty(String name, Base value) throws FHIRException {
574        if (name.equals("description")) {
575          this.description = TypeConvertor.castToString(value); // StringType
576        } else if (name.equals("url")) {
577          this.url = TypeConvertor.castToUrl(value); // UrlType
578        } else
579          return super.setProperty(name, value);
580        return value;
581      }
582
583      @Override
584      public Base makeProperty(int hash, String name) throws FHIRException {
585        switch (hash) {
586        case -1724546052:  return getDescriptionElement();
587        case 116079:  return getUrlElement();
588        default: return super.makeProperty(hash, name);
589        }
590
591      }
592
593      @Override
594      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
595        switch (hash) {
596        case -1724546052: /*description*/ return new String[] {"string"};
597        case 116079: /*url*/ return new String[] {"url"};
598        default: return super.getTypesForProperty(hash, name);
599        }
600
601      }
602
603      @Override
604      public Base addChild(String name) throws FHIRException {
605        if (name.equals("description")) {
606          throw new FHIRException("Cannot call addChild on a primitive type TerminologyCapabilities.implementation.description");
607        }
608        else if (name.equals("url")) {
609          throw new FHIRException("Cannot call addChild on a primitive type TerminologyCapabilities.implementation.url");
610        }
611        else
612          return super.addChild(name);
613      }
614
615      public TerminologyCapabilitiesImplementationComponent copy() {
616        TerminologyCapabilitiesImplementationComponent dst = new TerminologyCapabilitiesImplementationComponent();
617        copyValues(dst);
618        return dst;
619      }
620
621      public void copyValues(TerminologyCapabilitiesImplementationComponent dst) {
622        super.copyValues(dst);
623        dst.description = description == null ? null : description.copy();
624        dst.url = url == null ? null : url.copy();
625      }
626
627      @Override
628      public boolean equalsDeep(Base other_) {
629        if (!super.equalsDeep(other_))
630          return false;
631        if (!(other_ instanceof TerminologyCapabilitiesImplementationComponent))
632          return false;
633        TerminologyCapabilitiesImplementationComponent o = (TerminologyCapabilitiesImplementationComponent) other_;
634        return compareDeep(description, o.description, true) && compareDeep(url, o.url, true);
635      }
636
637      @Override
638      public boolean equalsShallow(Base other_) {
639        if (!super.equalsShallow(other_))
640          return false;
641        if (!(other_ instanceof TerminologyCapabilitiesImplementationComponent))
642          return false;
643        TerminologyCapabilitiesImplementationComponent o = (TerminologyCapabilitiesImplementationComponent) other_;
644        return compareValues(description, o.description, true) && compareValues(url, o.url, true);
645      }
646
647      public boolean isEmpty() {
648        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(description, url);
649      }
650
651  public String fhirType() {
652    return "TerminologyCapabilities.implementation";
653
654  }
655
656  }
657
658    @Block()
659    public static class TerminologyCapabilitiesCodeSystemComponent extends BackboneElement implements IBaseBackboneElement {
660        /**
661         * URI for the Code System.
662         */
663        @Child(name = "uri", type = {CanonicalType.class}, order=1, min=0, max=1, modifier=false, summary=false)
664        @Description(shortDefinition="URI for the Code System", formalDefinition="URI for the Code System." )
665        protected CanonicalType uri;
666
667        /**
668         * For the code system, a list of versions that are supported by the server.
669         */
670        @Child(name = "version", type = {}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
671        @Description(shortDefinition="Version of Code System supported", formalDefinition="For the code system, a list of versions that are supported by the server." )
672        protected List<TerminologyCapabilitiesCodeSystemVersionComponent> version;
673
674        /**
675         * True if subsumption is supported for this version of the code system.
676         */
677        @Child(name = "subsumption", type = {BooleanType.class}, order=3, min=0, max=1, modifier=false, summary=false)
678        @Description(shortDefinition="Whether subsumption is supported", formalDefinition="True if subsumption is supported for this version of the code system." )
679        protected BooleanType subsumption;
680
681        private static final long serialVersionUID = -1593622817L;
682
683    /**
684     * Constructor
685     */
686      public TerminologyCapabilitiesCodeSystemComponent() {
687        super();
688      }
689
690        /**
691         * @return {@link #uri} (URI for the Code System.). This is the underlying object with id, value and extensions. The accessor "getUri" gives direct access to the value
692         */
693        public CanonicalType getUriElement() { 
694          if (this.uri == null)
695            if (Configuration.errorOnAutoCreate())
696              throw new Error("Attempt to auto-create TerminologyCapabilitiesCodeSystemComponent.uri");
697            else if (Configuration.doAutoCreate())
698              this.uri = new CanonicalType(); // bb
699          return this.uri;
700        }
701
702        public boolean hasUriElement() { 
703          return this.uri != null && !this.uri.isEmpty();
704        }
705
706        public boolean hasUri() { 
707          return this.uri != null && !this.uri.isEmpty();
708        }
709
710        /**
711         * @param value {@link #uri} (URI for the Code System.). This is the underlying object with id, value and extensions. The accessor "getUri" gives direct access to the value
712         */
713        public TerminologyCapabilitiesCodeSystemComponent setUriElement(CanonicalType value) { 
714          this.uri = value;
715          return this;
716        }
717
718        /**
719         * @return URI for the Code System.
720         */
721        public String getUri() { 
722          return this.uri == null ? null : this.uri.getValue();
723        }
724
725        /**
726         * @param value URI for the Code System.
727         */
728        public TerminologyCapabilitiesCodeSystemComponent setUri(String value) { 
729          if (Utilities.noString(value))
730            this.uri = null;
731          else {
732            if (this.uri == null)
733              this.uri = new CanonicalType();
734            this.uri.setValue(value);
735          }
736          return this;
737        }
738
739        /**
740         * @return {@link #version} (For the code system, a list of versions that are supported by the server.)
741         */
742        public List<TerminologyCapabilitiesCodeSystemVersionComponent> getVersion() { 
743          if (this.version == null)
744            this.version = new ArrayList<TerminologyCapabilitiesCodeSystemVersionComponent>();
745          return this.version;
746        }
747
748        /**
749         * @return Returns a reference to <code>this</code> for easy method chaining
750         */
751        public TerminologyCapabilitiesCodeSystemComponent setVersion(List<TerminologyCapabilitiesCodeSystemVersionComponent> theVersion) { 
752          this.version = theVersion;
753          return this;
754        }
755
756        public boolean hasVersion() { 
757          if (this.version == null)
758            return false;
759          for (TerminologyCapabilitiesCodeSystemVersionComponent item : this.version)
760            if (!item.isEmpty())
761              return true;
762          return false;
763        }
764
765        public TerminologyCapabilitiesCodeSystemVersionComponent addVersion() { //3
766          TerminologyCapabilitiesCodeSystemVersionComponent t = new TerminologyCapabilitiesCodeSystemVersionComponent();
767          if (this.version == null)
768            this.version = new ArrayList<TerminologyCapabilitiesCodeSystemVersionComponent>();
769          this.version.add(t);
770          return t;
771        }
772
773        public TerminologyCapabilitiesCodeSystemComponent addVersion(TerminologyCapabilitiesCodeSystemVersionComponent t) { //3
774          if (t == null)
775            return this;
776          if (this.version == null)
777            this.version = new ArrayList<TerminologyCapabilitiesCodeSystemVersionComponent>();
778          this.version.add(t);
779          return this;
780        }
781
782        /**
783         * @return The first repetition of repeating field {@link #version}, creating it if it does not already exist {3}
784         */
785        public TerminologyCapabilitiesCodeSystemVersionComponent getVersionFirstRep() { 
786          if (getVersion().isEmpty()) {
787            addVersion();
788          }
789          return getVersion().get(0);
790        }
791
792        /**
793         * @return {@link #subsumption} (True if subsumption is supported for this version of the code system.). This is the underlying object with id, value and extensions. The accessor "getSubsumption" gives direct access to the value
794         */
795        public BooleanType getSubsumptionElement() { 
796          if (this.subsumption == null)
797            if (Configuration.errorOnAutoCreate())
798              throw new Error("Attempt to auto-create TerminologyCapabilitiesCodeSystemComponent.subsumption");
799            else if (Configuration.doAutoCreate())
800              this.subsumption = new BooleanType(); // bb
801          return this.subsumption;
802        }
803
804        public boolean hasSubsumptionElement() { 
805          return this.subsumption != null && !this.subsumption.isEmpty();
806        }
807
808        public boolean hasSubsumption() { 
809          return this.subsumption != null && !this.subsumption.isEmpty();
810        }
811
812        /**
813         * @param value {@link #subsumption} (True if subsumption is supported for this version of the code system.). This is the underlying object with id, value and extensions. The accessor "getSubsumption" gives direct access to the value
814         */
815        public TerminologyCapabilitiesCodeSystemComponent setSubsumptionElement(BooleanType value) { 
816          this.subsumption = value;
817          return this;
818        }
819
820        /**
821         * @return True if subsumption is supported for this version of the code system.
822         */
823        public boolean getSubsumption() { 
824          return this.subsumption == null || this.subsumption.isEmpty() ? false : this.subsumption.getValue();
825        }
826
827        /**
828         * @param value True if subsumption is supported for this version of the code system.
829         */
830        public TerminologyCapabilitiesCodeSystemComponent setSubsumption(boolean value) { 
831            if (this.subsumption == null)
832              this.subsumption = new BooleanType();
833            this.subsumption.setValue(value);
834          return this;
835        }
836
837        protected void listChildren(List<Property> children) {
838          super.listChildren(children);
839          children.add(new Property("uri", "canonical(CodeSystem)", "URI for the Code System.", 0, 1, uri));
840          children.add(new Property("version", "", "For the code system, a list of versions that are supported by the server.", 0, java.lang.Integer.MAX_VALUE, version));
841          children.add(new Property("subsumption", "boolean", "True if subsumption is supported for this version of the code system.", 0, 1, subsumption));
842        }
843
844        @Override
845        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
846          switch (_hash) {
847          case 116076: /*uri*/  return new Property("uri", "canonical(CodeSystem)", "URI for the Code System.", 0, 1, uri);
848          case 351608024: /*version*/  return new Property("version", "", "For the code system, a list of versions that are supported by the server.", 0, java.lang.Integer.MAX_VALUE, version);
849          case -499084711: /*subsumption*/  return new Property("subsumption", "boolean", "True if subsumption is supported for this version of the code system.", 0, 1, subsumption);
850          default: return super.getNamedProperty(_hash, _name, _checkValid);
851          }
852
853        }
854
855      @Override
856      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
857        switch (hash) {
858        case 116076: /*uri*/ return this.uri == null ? new Base[0] : new Base[] {this.uri}; // CanonicalType
859        case 351608024: /*version*/ return this.version == null ? new Base[0] : this.version.toArray(new Base[this.version.size()]); // TerminologyCapabilitiesCodeSystemVersionComponent
860        case -499084711: /*subsumption*/ return this.subsumption == null ? new Base[0] : new Base[] {this.subsumption}; // BooleanType
861        default: return super.getProperty(hash, name, checkValid);
862        }
863
864      }
865
866      @Override
867      public Base setProperty(int hash, String name, Base value) throws FHIRException {
868        switch (hash) {
869        case 116076: // uri
870          this.uri = TypeConvertor.castToCanonical(value); // CanonicalType
871          return value;
872        case 351608024: // version
873          this.getVersion().add((TerminologyCapabilitiesCodeSystemVersionComponent) value); // TerminologyCapabilitiesCodeSystemVersionComponent
874          return value;
875        case -499084711: // subsumption
876          this.subsumption = TypeConvertor.castToBoolean(value); // BooleanType
877          return value;
878        default: return super.setProperty(hash, name, value);
879        }
880
881      }
882
883      @Override
884      public Base setProperty(String name, Base value) throws FHIRException {
885        if (name.equals("uri")) {
886          this.uri = TypeConvertor.castToCanonical(value); // CanonicalType
887        } else if (name.equals("version")) {
888          this.getVersion().add((TerminologyCapabilitiesCodeSystemVersionComponent) value);
889        } else if (name.equals("subsumption")) {
890          this.subsumption = TypeConvertor.castToBoolean(value); // BooleanType
891        } else
892          return super.setProperty(name, value);
893        return value;
894      }
895
896      @Override
897      public Base makeProperty(int hash, String name) throws FHIRException {
898        switch (hash) {
899        case 116076:  return getUriElement();
900        case 351608024:  return addVersion(); 
901        case -499084711:  return getSubsumptionElement();
902        default: return super.makeProperty(hash, name);
903        }
904
905      }
906
907      @Override
908      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
909        switch (hash) {
910        case 116076: /*uri*/ return new String[] {"canonical"};
911        case 351608024: /*version*/ return new String[] {};
912        case -499084711: /*subsumption*/ return new String[] {"boolean"};
913        default: return super.getTypesForProperty(hash, name);
914        }
915
916      }
917
918      @Override
919      public Base addChild(String name) throws FHIRException {
920        if (name.equals("uri")) {
921          throw new FHIRException("Cannot call addChild on a primitive type TerminologyCapabilities.codeSystem.uri");
922        }
923        else if (name.equals("version")) {
924          return addVersion();
925        }
926        else if (name.equals("subsumption")) {
927          throw new FHIRException("Cannot call addChild on a primitive type TerminologyCapabilities.codeSystem.subsumption");
928        }
929        else
930          return super.addChild(name);
931      }
932
933      public TerminologyCapabilitiesCodeSystemComponent copy() {
934        TerminologyCapabilitiesCodeSystemComponent dst = new TerminologyCapabilitiesCodeSystemComponent();
935        copyValues(dst);
936        return dst;
937      }
938
939      public void copyValues(TerminologyCapabilitiesCodeSystemComponent dst) {
940        super.copyValues(dst);
941        dst.uri = uri == null ? null : uri.copy();
942        if (version != null) {
943          dst.version = new ArrayList<TerminologyCapabilitiesCodeSystemVersionComponent>();
944          for (TerminologyCapabilitiesCodeSystemVersionComponent i : version)
945            dst.version.add(i.copy());
946        };
947        dst.subsumption = subsumption == null ? null : subsumption.copy();
948      }
949
950      @Override
951      public boolean equalsDeep(Base other_) {
952        if (!super.equalsDeep(other_))
953          return false;
954        if (!(other_ instanceof TerminologyCapabilitiesCodeSystemComponent))
955          return false;
956        TerminologyCapabilitiesCodeSystemComponent o = (TerminologyCapabilitiesCodeSystemComponent) other_;
957        return compareDeep(uri, o.uri, true) && compareDeep(version, o.version, true) && compareDeep(subsumption, o.subsumption, true)
958          ;
959      }
960
961      @Override
962      public boolean equalsShallow(Base other_) {
963        if (!super.equalsShallow(other_))
964          return false;
965        if (!(other_ instanceof TerminologyCapabilitiesCodeSystemComponent))
966          return false;
967        TerminologyCapabilitiesCodeSystemComponent o = (TerminologyCapabilitiesCodeSystemComponent) other_;
968        return compareValues(uri, o.uri, true) && compareValues(subsumption, o.subsumption, true);
969      }
970
971      public boolean isEmpty() {
972        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(uri, version, subsumption
973          );
974      }
975
976  public String fhirType() {
977    return "TerminologyCapabilities.codeSystem";
978
979  }
980
981  }
982
983    @Block()
984    public static class TerminologyCapabilitiesCodeSystemVersionComponent extends BackboneElement implements IBaseBackboneElement {
985        /**
986         * For version-less code systems, there should be a single version with no identifier.
987         */
988        @Child(name = "code", type = {StringType.class}, order=1, min=0, max=1, modifier=false, summary=true)
989        @Description(shortDefinition="Version identifier for this version", formalDefinition="For version-less code systems, there should be a single version with no identifier." )
990        protected StringType code;
991
992        /**
993         * If this is the default version for this code system.
994         */
995        @Child(name = "isDefault", type = {BooleanType.class}, order=2, min=0, max=1, modifier=false, summary=true)
996        @Description(shortDefinition="If this is the default version for this code system", formalDefinition="If this is the default version for this code system." )
997        protected BooleanType isDefault;
998
999        /**
1000         * If the compositional grammar defined by the code system is supported.
1001         */
1002        @Child(name = "compositional", type = {BooleanType.class}, order=3, min=0, max=1, modifier=false, summary=false)
1003        @Description(shortDefinition="If compositional grammar is supported", formalDefinition="If the compositional grammar defined by the code system is supported." )
1004        protected BooleanType compositional;
1005
1006        /**
1007         * Language Displays supported.
1008         */
1009        @Child(name = "language", type = {CodeType.class}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1010        @Description(shortDefinition="Language Displays supported", formalDefinition="Language Displays supported." )
1011        protected List<CodeType> language;
1012
1013        /**
1014         * Filter Properties supported.
1015         */
1016        @Child(name = "filter", type = {}, order=5, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1017        @Description(shortDefinition="Filter Properties supported", formalDefinition="Filter Properties supported." )
1018        protected List<TerminologyCapabilitiesCodeSystemVersionFilterComponent> filter;
1019
1020        /**
1021         * Properties supported for $lookup.
1022         */
1023        @Child(name = "property", type = {CodeType.class}, order=6, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1024        @Description(shortDefinition="Properties supported for $lookup", formalDefinition="Properties supported for $lookup." )
1025        protected List<CodeType> property;
1026
1027        private static final long serialVersionUID = 1857571343L;
1028
1029    /**
1030     * Constructor
1031     */
1032      public TerminologyCapabilitiesCodeSystemVersionComponent() {
1033        super();
1034      }
1035
1036        /**
1037         * @return {@link #code} (For version-less code systems, there should be a single version with no identifier.). This is the underlying object with id, value and extensions. The accessor "getCode" gives direct access to the value
1038         */
1039        public StringType getCodeElement() { 
1040          if (this.code == null)
1041            if (Configuration.errorOnAutoCreate())
1042              throw new Error("Attempt to auto-create TerminologyCapabilitiesCodeSystemVersionComponent.code");
1043            else if (Configuration.doAutoCreate())
1044              this.code = new StringType(); // bb
1045          return this.code;
1046        }
1047
1048        public boolean hasCodeElement() { 
1049          return this.code != null && !this.code.isEmpty();
1050        }
1051
1052        public boolean hasCode() { 
1053          return this.code != null && !this.code.isEmpty();
1054        }
1055
1056        /**
1057         * @param value {@link #code} (For version-less code systems, there should be a single version with no identifier.). This is the underlying object with id, value and extensions. The accessor "getCode" gives direct access to the value
1058         */
1059        public TerminologyCapabilitiesCodeSystemVersionComponent setCodeElement(StringType value) { 
1060          this.code = value;
1061          return this;
1062        }
1063
1064        /**
1065         * @return For version-less code systems, there should be a single version with no identifier.
1066         */
1067        public String getCode() { 
1068          return this.code == null ? null : this.code.getValue();
1069        }
1070
1071        /**
1072         * @param value For version-less code systems, there should be a single version with no identifier.
1073         */
1074        public TerminologyCapabilitiesCodeSystemVersionComponent setCode(String value) { 
1075          if (Utilities.noString(value))
1076            this.code = null;
1077          else {
1078            if (this.code == null)
1079              this.code = new StringType();
1080            this.code.setValue(value);
1081          }
1082          return this;
1083        }
1084
1085        /**
1086         * @return {@link #isDefault} (If this is the default version for this code system.). This is the underlying object with id, value and extensions. The accessor "getIsDefault" gives direct access to the value
1087         */
1088        public BooleanType getIsDefaultElement() { 
1089          if (this.isDefault == null)
1090            if (Configuration.errorOnAutoCreate())
1091              throw new Error("Attempt to auto-create TerminologyCapabilitiesCodeSystemVersionComponent.isDefault");
1092            else if (Configuration.doAutoCreate())
1093              this.isDefault = new BooleanType(); // bb
1094          return this.isDefault;
1095        }
1096
1097        public boolean hasIsDefaultElement() { 
1098          return this.isDefault != null && !this.isDefault.isEmpty();
1099        }
1100
1101        public boolean hasIsDefault() { 
1102          return this.isDefault != null && !this.isDefault.isEmpty();
1103        }
1104
1105        /**
1106         * @param value {@link #isDefault} (If this is the default version for this code system.). This is the underlying object with id, value and extensions. The accessor "getIsDefault" gives direct access to the value
1107         */
1108        public TerminologyCapabilitiesCodeSystemVersionComponent setIsDefaultElement(BooleanType value) { 
1109          this.isDefault = value;
1110          return this;
1111        }
1112
1113        /**
1114         * @return If this is the default version for this code system.
1115         */
1116        public boolean getIsDefault() { 
1117          return this.isDefault == null || this.isDefault.isEmpty() ? false : this.isDefault.getValue();
1118        }
1119
1120        /**
1121         * @param value If this is the default version for this code system.
1122         */
1123        public TerminologyCapabilitiesCodeSystemVersionComponent setIsDefault(boolean value) { 
1124            if (this.isDefault == null)
1125              this.isDefault = new BooleanType();
1126            this.isDefault.setValue(value);
1127          return this;
1128        }
1129
1130        /**
1131         * @return {@link #compositional} (If the compositional grammar defined by the code system is supported.). This is the underlying object with id, value and extensions. The accessor "getCompositional" gives direct access to the value
1132         */
1133        public BooleanType getCompositionalElement() { 
1134          if (this.compositional == null)
1135            if (Configuration.errorOnAutoCreate())
1136              throw new Error("Attempt to auto-create TerminologyCapabilitiesCodeSystemVersionComponent.compositional");
1137            else if (Configuration.doAutoCreate())
1138              this.compositional = new BooleanType(); // bb
1139          return this.compositional;
1140        }
1141
1142        public boolean hasCompositionalElement() { 
1143          return this.compositional != null && !this.compositional.isEmpty();
1144        }
1145
1146        public boolean hasCompositional() { 
1147          return this.compositional != null && !this.compositional.isEmpty();
1148        }
1149
1150        /**
1151         * @param value {@link #compositional} (If the compositional grammar defined by the code system is supported.). This is the underlying object with id, value and extensions. The accessor "getCompositional" gives direct access to the value
1152         */
1153        public TerminologyCapabilitiesCodeSystemVersionComponent setCompositionalElement(BooleanType value) { 
1154          this.compositional = value;
1155          return this;
1156        }
1157
1158        /**
1159         * @return If the compositional grammar defined by the code system is supported.
1160         */
1161        public boolean getCompositional() { 
1162          return this.compositional == null || this.compositional.isEmpty() ? false : this.compositional.getValue();
1163        }
1164
1165        /**
1166         * @param value If the compositional grammar defined by the code system is supported.
1167         */
1168        public TerminologyCapabilitiesCodeSystemVersionComponent setCompositional(boolean value) { 
1169            if (this.compositional == null)
1170              this.compositional = new BooleanType();
1171            this.compositional.setValue(value);
1172          return this;
1173        }
1174
1175        /**
1176         * @return {@link #language} (Language Displays supported.)
1177         */
1178        public List<CodeType> getLanguage() { 
1179          if (this.language == null)
1180            this.language = new ArrayList<CodeType>();
1181          return this.language;
1182        }
1183
1184        /**
1185         * @return Returns a reference to <code>this</code> for easy method chaining
1186         */
1187        public TerminologyCapabilitiesCodeSystemVersionComponent setLanguage(List<CodeType> theLanguage) { 
1188          this.language = theLanguage;
1189          return this;
1190        }
1191
1192        public boolean hasLanguage() { 
1193          if (this.language == null)
1194            return false;
1195          for (CodeType item : this.language)
1196            if (!item.isEmpty())
1197              return true;
1198          return false;
1199        }
1200
1201        /**
1202         * @return {@link #language} (Language Displays supported.)
1203         */
1204        public CodeType addLanguageElement() {//2 
1205          CodeType t = new CodeType();
1206          if (this.language == null)
1207            this.language = new ArrayList<CodeType>();
1208          this.language.add(t);
1209          return t;
1210        }
1211
1212        /**
1213         * @param value {@link #language} (Language Displays supported.)
1214         */
1215        public TerminologyCapabilitiesCodeSystemVersionComponent addLanguage(String value) { //1
1216          CodeType t = new CodeType();
1217          t.setValue(value);
1218          if (this.language == null)
1219            this.language = new ArrayList<CodeType>();
1220          this.language.add(t);
1221          return this;
1222        }
1223
1224        /**
1225         * @param value {@link #language} (Language Displays supported.)
1226         */
1227        public boolean hasLanguage(String value) { 
1228          if (this.language == null)
1229            return false;
1230          for (CodeType v : this.language)
1231            if (v.getValue().equals(value)) // code
1232              return true;
1233          return false;
1234        }
1235
1236        /**
1237         * @return {@link #filter} (Filter Properties supported.)
1238         */
1239        public List<TerminologyCapabilitiesCodeSystemVersionFilterComponent> getFilter() { 
1240          if (this.filter == null)
1241            this.filter = new ArrayList<TerminologyCapabilitiesCodeSystemVersionFilterComponent>();
1242          return this.filter;
1243        }
1244
1245        /**
1246         * @return Returns a reference to <code>this</code> for easy method chaining
1247         */
1248        public TerminologyCapabilitiesCodeSystemVersionComponent setFilter(List<TerminologyCapabilitiesCodeSystemVersionFilterComponent> theFilter) { 
1249          this.filter = theFilter;
1250          return this;
1251        }
1252
1253        public boolean hasFilter() { 
1254          if (this.filter == null)
1255            return false;
1256          for (TerminologyCapabilitiesCodeSystemVersionFilterComponent item : this.filter)
1257            if (!item.isEmpty())
1258              return true;
1259          return false;
1260        }
1261
1262        public TerminologyCapabilitiesCodeSystemVersionFilterComponent addFilter() { //3
1263          TerminologyCapabilitiesCodeSystemVersionFilterComponent t = new TerminologyCapabilitiesCodeSystemVersionFilterComponent();
1264          if (this.filter == null)
1265            this.filter = new ArrayList<TerminologyCapabilitiesCodeSystemVersionFilterComponent>();
1266          this.filter.add(t);
1267          return t;
1268        }
1269
1270        public TerminologyCapabilitiesCodeSystemVersionComponent addFilter(TerminologyCapabilitiesCodeSystemVersionFilterComponent t) { //3
1271          if (t == null)
1272            return this;
1273          if (this.filter == null)
1274            this.filter = new ArrayList<TerminologyCapabilitiesCodeSystemVersionFilterComponent>();
1275          this.filter.add(t);
1276          return this;
1277        }
1278
1279        /**
1280         * @return The first repetition of repeating field {@link #filter}, creating it if it does not already exist {3}
1281         */
1282        public TerminologyCapabilitiesCodeSystemVersionFilterComponent getFilterFirstRep() { 
1283          if (getFilter().isEmpty()) {
1284            addFilter();
1285          }
1286          return getFilter().get(0);
1287        }
1288
1289        /**
1290         * @return {@link #property} (Properties supported for $lookup.)
1291         */
1292        public List<CodeType> getProperty() { 
1293          if (this.property == null)
1294            this.property = new ArrayList<CodeType>();
1295          return this.property;
1296        }
1297
1298        /**
1299         * @return Returns a reference to <code>this</code> for easy method chaining
1300         */
1301        public TerminologyCapabilitiesCodeSystemVersionComponent setProperty(List<CodeType> theProperty) { 
1302          this.property = theProperty;
1303          return this;
1304        }
1305
1306        public boolean hasProperty() { 
1307          if (this.property == null)
1308            return false;
1309          for (CodeType item : this.property)
1310            if (!item.isEmpty())
1311              return true;
1312          return false;
1313        }
1314
1315        /**
1316         * @return {@link #property} (Properties supported for $lookup.)
1317         */
1318        public CodeType addPropertyElement() {//2 
1319          CodeType t = new CodeType();
1320          if (this.property == null)
1321            this.property = new ArrayList<CodeType>();
1322          this.property.add(t);
1323          return t;
1324        }
1325
1326        /**
1327         * @param value {@link #property} (Properties supported for $lookup.)
1328         */
1329        public TerminologyCapabilitiesCodeSystemVersionComponent addProperty(String value) { //1
1330          CodeType t = new CodeType();
1331          t.setValue(value);
1332          if (this.property == null)
1333            this.property = new ArrayList<CodeType>();
1334          this.property.add(t);
1335          return this;
1336        }
1337
1338        /**
1339         * @param value {@link #property} (Properties supported for $lookup.)
1340         */
1341        public boolean hasProperty(String value) { 
1342          if (this.property == null)
1343            return false;
1344          for (CodeType v : this.property)
1345            if (v.getValue().equals(value)) // code
1346              return true;
1347          return false;
1348        }
1349
1350        protected void listChildren(List<Property> children) {
1351          super.listChildren(children);
1352          children.add(new Property("code", "string", "For version-less code systems, there should be a single version with no identifier.", 0, 1, code));
1353          children.add(new Property("isDefault", "boolean", "If this is the default version for this code system.", 0, 1, isDefault));
1354          children.add(new Property("compositional", "boolean", "If the compositional grammar defined by the code system is supported.", 0, 1, compositional));
1355          children.add(new Property("language", "code", "Language Displays supported.", 0, java.lang.Integer.MAX_VALUE, language));
1356          children.add(new Property("filter", "", "Filter Properties supported.", 0, java.lang.Integer.MAX_VALUE, filter));
1357          children.add(new Property("property", "code", "Properties supported for $lookup.", 0, java.lang.Integer.MAX_VALUE, property));
1358        }
1359
1360        @Override
1361        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1362          switch (_hash) {
1363          case 3059181: /*code*/  return new Property("code", "string", "For version-less code systems, there should be a single version with no identifier.", 0, 1, code);
1364          case 965025207: /*isDefault*/  return new Property("isDefault", "boolean", "If this is the default version for this code system.", 0, 1, isDefault);
1365          case 1248023381: /*compositional*/  return new Property("compositional", "boolean", "If the compositional grammar defined by the code system is supported.", 0, 1, compositional);
1366          case -1613589672: /*language*/  return new Property("language", "code", "Language Displays supported.", 0, java.lang.Integer.MAX_VALUE, language);
1367          case -1274492040: /*filter*/  return new Property("filter", "", "Filter Properties supported.", 0, java.lang.Integer.MAX_VALUE, filter);
1368          case -993141291: /*property*/  return new Property("property", "code", "Properties supported for $lookup.", 0, java.lang.Integer.MAX_VALUE, property);
1369          default: return super.getNamedProperty(_hash, _name, _checkValid);
1370          }
1371
1372        }
1373
1374      @Override
1375      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1376        switch (hash) {
1377        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // StringType
1378        case 965025207: /*isDefault*/ return this.isDefault == null ? new Base[0] : new Base[] {this.isDefault}; // BooleanType
1379        case 1248023381: /*compositional*/ return this.compositional == null ? new Base[0] : new Base[] {this.compositional}; // BooleanType
1380        case -1613589672: /*language*/ return this.language == null ? new Base[0] : this.language.toArray(new Base[this.language.size()]); // CodeType
1381        case -1274492040: /*filter*/ return this.filter == null ? new Base[0] : this.filter.toArray(new Base[this.filter.size()]); // TerminologyCapabilitiesCodeSystemVersionFilterComponent
1382        case -993141291: /*property*/ return this.property == null ? new Base[0] : this.property.toArray(new Base[this.property.size()]); // CodeType
1383        default: return super.getProperty(hash, name, checkValid);
1384        }
1385
1386      }
1387
1388      @Override
1389      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1390        switch (hash) {
1391        case 3059181: // code
1392          this.code = TypeConvertor.castToString(value); // StringType
1393          return value;
1394        case 965025207: // isDefault
1395          this.isDefault = TypeConvertor.castToBoolean(value); // BooleanType
1396          return value;
1397        case 1248023381: // compositional
1398          this.compositional = TypeConvertor.castToBoolean(value); // BooleanType
1399          return value;
1400        case -1613589672: // language
1401          this.getLanguage().add(TypeConvertor.castToCode(value)); // CodeType
1402          return value;
1403        case -1274492040: // filter
1404          this.getFilter().add((TerminologyCapabilitiesCodeSystemVersionFilterComponent) value); // TerminologyCapabilitiesCodeSystemVersionFilterComponent
1405          return value;
1406        case -993141291: // property
1407          this.getProperty().add(TypeConvertor.castToCode(value)); // CodeType
1408          return value;
1409        default: return super.setProperty(hash, name, value);
1410        }
1411
1412      }
1413
1414      @Override
1415      public Base setProperty(String name, Base value) throws FHIRException {
1416        if (name.equals("code")) {
1417          this.code = TypeConvertor.castToString(value); // StringType
1418        } else if (name.equals("isDefault")) {
1419          this.isDefault = TypeConvertor.castToBoolean(value); // BooleanType
1420        } else if (name.equals("compositional")) {
1421          this.compositional = TypeConvertor.castToBoolean(value); // BooleanType
1422        } else if (name.equals("language")) {
1423          this.getLanguage().add(TypeConvertor.castToCode(value));
1424        } else if (name.equals("filter")) {
1425          this.getFilter().add((TerminologyCapabilitiesCodeSystemVersionFilterComponent) value);
1426        } else if (name.equals("property")) {
1427          this.getProperty().add(TypeConvertor.castToCode(value));
1428        } else
1429          return super.setProperty(name, value);
1430        return value;
1431      }
1432
1433      @Override
1434      public Base makeProperty(int hash, String name) throws FHIRException {
1435        switch (hash) {
1436        case 3059181:  return getCodeElement();
1437        case 965025207:  return getIsDefaultElement();
1438        case 1248023381:  return getCompositionalElement();
1439        case -1613589672:  return addLanguageElement();
1440        case -1274492040:  return addFilter(); 
1441        case -993141291:  return addPropertyElement();
1442        default: return super.makeProperty(hash, name);
1443        }
1444
1445      }
1446
1447      @Override
1448      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1449        switch (hash) {
1450        case 3059181: /*code*/ return new String[] {"string"};
1451        case 965025207: /*isDefault*/ return new String[] {"boolean"};
1452        case 1248023381: /*compositional*/ return new String[] {"boolean"};
1453        case -1613589672: /*language*/ return new String[] {"code"};
1454        case -1274492040: /*filter*/ return new String[] {};
1455        case -993141291: /*property*/ return new String[] {"code"};
1456        default: return super.getTypesForProperty(hash, name);
1457        }
1458
1459      }
1460
1461      @Override
1462      public Base addChild(String name) throws FHIRException {
1463        if (name.equals("code")) {
1464          throw new FHIRException("Cannot call addChild on a primitive type TerminologyCapabilities.codeSystem.version.code");
1465        }
1466        else if (name.equals("isDefault")) {
1467          throw new FHIRException("Cannot call addChild on a primitive type TerminologyCapabilities.codeSystem.version.isDefault");
1468        }
1469        else if (name.equals("compositional")) {
1470          throw new FHIRException("Cannot call addChild on a primitive type TerminologyCapabilities.codeSystem.version.compositional");
1471        }
1472        else if (name.equals("language")) {
1473          throw new FHIRException("Cannot call addChild on a primitive type TerminologyCapabilities.codeSystem.version.language");
1474        }
1475        else if (name.equals("filter")) {
1476          return addFilter();
1477        }
1478        else if (name.equals("property")) {
1479          throw new FHIRException("Cannot call addChild on a primitive type TerminologyCapabilities.codeSystem.version.property");
1480        }
1481        else
1482          return super.addChild(name);
1483      }
1484
1485      public TerminologyCapabilitiesCodeSystemVersionComponent copy() {
1486        TerminologyCapabilitiesCodeSystemVersionComponent dst = new TerminologyCapabilitiesCodeSystemVersionComponent();
1487        copyValues(dst);
1488        return dst;
1489      }
1490
1491      public void copyValues(TerminologyCapabilitiesCodeSystemVersionComponent dst) {
1492        super.copyValues(dst);
1493        dst.code = code == null ? null : code.copy();
1494        dst.isDefault = isDefault == null ? null : isDefault.copy();
1495        dst.compositional = compositional == null ? null : compositional.copy();
1496        if (language != null) {
1497          dst.language = new ArrayList<CodeType>();
1498          for (CodeType i : language)
1499            dst.language.add(i.copy());
1500        };
1501        if (filter != null) {
1502          dst.filter = new ArrayList<TerminologyCapabilitiesCodeSystemVersionFilterComponent>();
1503          for (TerminologyCapabilitiesCodeSystemVersionFilterComponent i : filter)
1504            dst.filter.add(i.copy());
1505        };
1506        if (property != null) {
1507          dst.property = new ArrayList<CodeType>();
1508          for (CodeType i : property)
1509            dst.property.add(i.copy());
1510        };
1511      }
1512
1513      @Override
1514      public boolean equalsDeep(Base other_) {
1515        if (!super.equalsDeep(other_))
1516          return false;
1517        if (!(other_ instanceof TerminologyCapabilitiesCodeSystemVersionComponent))
1518          return false;
1519        TerminologyCapabilitiesCodeSystemVersionComponent o = (TerminologyCapabilitiesCodeSystemVersionComponent) other_;
1520        return compareDeep(code, o.code, true) && compareDeep(isDefault, o.isDefault, true) && compareDeep(compositional, o.compositional, true)
1521           && compareDeep(language, o.language, true) && compareDeep(filter, o.filter, true) && compareDeep(property, o.property, true)
1522          ;
1523      }
1524
1525      @Override
1526      public boolean equalsShallow(Base other_) {
1527        if (!super.equalsShallow(other_))
1528          return false;
1529        if (!(other_ instanceof TerminologyCapabilitiesCodeSystemVersionComponent))
1530          return false;
1531        TerminologyCapabilitiesCodeSystemVersionComponent o = (TerminologyCapabilitiesCodeSystemVersionComponent) other_;
1532        return compareValues(code, o.code, true) && compareValues(isDefault, o.isDefault, true) && compareValues(compositional, o.compositional, true)
1533           && compareValues(language, o.language, true) && compareValues(property, o.property, true);
1534      }
1535
1536      public boolean isEmpty() {
1537        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(code, isDefault, compositional
1538          , language, filter, property);
1539      }
1540
1541  public String fhirType() {
1542    return "TerminologyCapabilities.codeSystem.version";
1543
1544  }
1545
1546  }
1547
1548    @Block()
1549    public static class TerminologyCapabilitiesCodeSystemVersionFilterComponent extends BackboneElement implements IBaseBackboneElement {
1550        /**
1551         * Code of the property supported.
1552         */
1553        @Child(name = "code", type = {CodeType.class}, order=1, min=1, max=1, modifier=false, summary=false)
1554        @Description(shortDefinition="Code of the property supported", formalDefinition="Code of the property supported." )
1555        protected CodeType code;
1556
1557        /**
1558         * Operations supported for the property.
1559         */
1560        @Child(name = "op", type = {CodeType.class}, order=2, min=1, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1561        @Description(shortDefinition="Operations supported for the property", formalDefinition="Operations supported for the property." )
1562        protected List<CodeType> op;
1563
1564        private static final long serialVersionUID = -489160282L;
1565
1566    /**
1567     * Constructor
1568     */
1569      public TerminologyCapabilitiesCodeSystemVersionFilterComponent() {
1570        super();
1571      }
1572
1573    /**
1574     * Constructor
1575     */
1576      public TerminologyCapabilitiesCodeSystemVersionFilterComponent(String code, String op) {
1577        super();
1578        this.setCode(code);
1579        this.addOp(op);
1580      }
1581
1582        /**
1583         * @return {@link #code} (Code of the property supported.). This is the underlying object with id, value and extensions. The accessor "getCode" gives direct access to the value
1584         */
1585        public CodeType getCodeElement() { 
1586          if (this.code == null)
1587            if (Configuration.errorOnAutoCreate())
1588              throw new Error("Attempt to auto-create TerminologyCapabilitiesCodeSystemVersionFilterComponent.code");
1589            else if (Configuration.doAutoCreate())
1590              this.code = new CodeType(); // bb
1591          return this.code;
1592        }
1593
1594        public boolean hasCodeElement() { 
1595          return this.code != null && !this.code.isEmpty();
1596        }
1597
1598        public boolean hasCode() { 
1599          return this.code != null && !this.code.isEmpty();
1600        }
1601
1602        /**
1603         * @param value {@link #code} (Code of the property supported.). This is the underlying object with id, value and extensions. The accessor "getCode" gives direct access to the value
1604         */
1605        public TerminologyCapabilitiesCodeSystemVersionFilterComponent setCodeElement(CodeType value) { 
1606          this.code = value;
1607          return this;
1608        }
1609
1610        /**
1611         * @return Code of the property supported.
1612         */
1613        public String getCode() { 
1614          return this.code == null ? null : this.code.getValue();
1615        }
1616
1617        /**
1618         * @param value Code of the property supported.
1619         */
1620        public TerminologyCapabilitiesCodeSystemVersionFilterComponent setCode(String value) { 
1621            if (this.code == null)
1622              this.code = new CodeType();
1623            this.code.setValue(value);
1624          return this;
1625        }
1626
1627        /**
1628         * @return {@link #op} (Operations supported for the property.)
1629         */
1630        public List<CodeType> getOp() { 
1631          if (this.op == null)
1632            this.op = new ArrayList<CodeType>();
1633          return this.op;
1634        }
1635
1636        /**
1637         * @return Returns a reference to <code>this</code> for easy method chaining
1638         */
1639        public TerminologyCapabilitiesCodeSystemVersionFilterComponent setOp(List<CodeType> theOp) { 
1640          this.op = theOp;
1641          return this;
1642        }
1643
1644        public boolean hasOp() { 
1645          if (this.op == null)
1646            return false;
1647          for (CodeType item : this.op)
1648            if (!item.isEmpty())
1649              return true;
1650          return false;
1651        }
1652
1653        /**
1654         * @return {@link #op} (Operations supported for the property.)
1655         */
1656        public CodeType addOpElement() {//2 
1657          CodeType t = new CodeType();
1658          if (this.op == null)
1659            this.op = new ArrayList<CodeType>();
1660          this.op.add(t);
1661          return t;
1662        }
1663
1664        /**
1665         * @param value {@link #op} (Operations supported for the property.)
1666         */
1667        public TerminologyCapabilitiesCodeSystemVersionFilterComponent addOp(String value) { //1
1668          CodeType t = new CodeType();
1669          t.setValue(value);
1670          if (this.op == null)
1671            this.op = new ArrayList<CodeType>();
1672          this.op.add(t);
1673          return this;
1674        }
1675
1676        /**
1677         * @param value {@link #op} (Operations supported for the property.)
1678         */
1679        public boolean hasOp(String value) { 
1680          if (this.op == null)
1681            return false;
1682          for (CodeType v : this.op)
1683            if (v.getValue().equals(value)) // code
1684              return true;
1685          return false;
1686        }
1687
1688        protected void listChildren(List<Property> children) {
1689          super.listChildren(children);
1690          children.add(new Property("code", "code", "Code of the property supported.", 0, 1, code));
1691          children.add(new Property("op", "code", "Operations supported for the property.", 0, java.lang.Integer.MAX_VALUE, op));
1692        }
1693
1694        @Override
1695        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1696          switch (_hash) {
1697          case 3059181: /*code*/  return new Property("code", "code", "Code of the property supported.", 0, 1, code);
1698          case 3553: /*op*/  return new Property("op", "code", "Operations supported for the property.", 0, java.lang.Integer.MAX_VALUE, op);
1699          default: return super.getNamedProperty(_hash, _name, _checkValid);
1700          }
1701
1702        }
1703
1704      @Override
1705      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1706        switch (hash) {
1707        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeType
1708        case 3553: /*op*/ return this.op == null ? new Base[0] : this.op.toArray(new Base[this.op.size()]); // CodeType
1709        default: return super.getProperty(hash, name, checkValid);
1710        }
1711
1712      }
1713
1714      @Override
1715      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1716        switch (hash) {
1717        case 3059181: // code
1718          this.code = TypeConvertor.castToCode(value); // CodeType
1719          return value;
1720        case 3553: // op
1721          this.getOp().add(TypeConvertor.castToCode(value)); // CodeType
1722          return value;
1723        default: return super.setProperty(hash, name, value);
1724        }
1725
1726      }
1727
1728      @Override
1729      public Base setProperty(String name, Base value) throws FHIRException {
1730        if (name.equals("code")) {
1731          this.code = TypeConvertor.castToCode(value); // CodeType
1732        } else if (name.equals("op")) {
1733          this.getOp().add(TypeConvertor.castToCode(value));
1734        } else
1735          return super.setProperty(name, value);
1736        return value;
1737      }
1738
1739      @Override
1740      public Base makeProperty(int hash, String name) throws FHIRException {
1741        switch (hash) {
1742        case 3059181:  return getCodeElement();
1743        case 3553:  return addOpElement();
1744        default: return super.makeProperty(hash, name);
1745        }
1746
1747      }
1748
1749      @Override
1750      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1751        switch (hash) {
1752        case 3059181: /*code*/ return new String[] {"code"};
1753        case 3553: /*op*/ return new String[] {"code"};
1754        default: return super.getTypesForProperty(hash, name);
1755        }
1756
1757      }
1758
1759      @Override
1760      public Base addChild(String name) throws FHIRException {
1761        if (name.equals("code")) {
1762          throw new FHIRException("Cannot call addChild on a primitive type TerminologyCapabilities.codeSystem.version.filter.code");
1763        }
1764        else if (name.equals("op")) {
1765          throw new FHIRException("Cannot call addChild on a primitive type TerminologyCapabilities.codeSystem.version.filter.op");
1766        }
1767        else
1768          return super.addChild(name);
1769      }
1770
1771      public TerminologyCapabilitiesCodeSystemVersionFilterComponent copy() {
1772        TerminologyCapabilitiesCodeSystemVersionFilterComponent dst = new TerminologyCapabilitiesCodeSystemVersionFilterComponent();
1773        copyValues(dst);
1774        return dst;
1775      }
1776
1777      public void copyValues(TerminologyCapabilitiesCodeSystemVersionFilterComponent dst) {
1778        super.copyValues(dst);
1779        dst.code = code == null ? null : code.copy();
1780        if (op != null) {
1781          dst.op = new ArrayList<CodeType>();
1782          for (CodeType i : op)
1783            dst.op.add(i.copy());
1784        };
1785      }
1786
1787      @Override
1788      public boolean equalsDeep(Base other_) {
1789        if (!super.equalsDeep(other_))
1790          return false;
1791        if (!(other_ instanceof TerminologyCapabilitiesCodeSystemVersionFilterComponent))
1792          return false;
1793        TerminologyCapabilitiesCodeSystemVersionFilterComponent o = (TerminologyCapabilitiesCodeSystemVersionFilterComponent) other_;
1794        return compareDeep(code, o.code, true) && compareDeep(op, o.op, true);
1795      }
1796
1797      @Override
1798      public boolean equalsShallow(Base other_) {
1799        if (!super.equalsShallow(other_))
1800          return false;
1801        if (!(other_ instanceof TerminologyCapabilitiesCodeSystemVersionFilterComponent))
1802          return false;
1803        TerminologyCapabilitiesCodeSystemVersionFilterComponent o = (TerminologyCapabilitiesCodeSystemVersionFilterComponent) other_;
1804        return compareValues(code, o.code, true) && compareValues(op, o.op, true);
1805      }
1806
1807      public boolean isEmpty() {
1808        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(code, op);
1809      }
1810
1811  public String fhirType() {
1812    return "TerminologyCapabilities.codeSystem.version.filter";
1813
1814  }
1815
1816  }
1817
1818    @Block()
1819    public static class TerminologyCapabilitiesExpansionComponent extends BackboneElement implements IBaseBackboneElement {
1820        /**
1821         * Whether the server can return nested value sets.
1822         */
1823        @Child(name = "hierarchical", type = {BooleanType.class}, order=1, min=0, max=1, modifier=false, summary=false)
1824        @Description(shortDefinition="Whether the server can return nested value sets", formalDefinition="Whether the server can return nested value sets." )
1825        protected BooleanType hierarchical;
1826
1827        /**
1828         * Whether the server supports paging on expansion.
1829         */
1830        @Child(name = "paging", type = {BooleanType.class}, order=2, min=0, max=1, modifier=false, summary=false)
1831        @Description(shortDefinition="Whether the server supports paging on expansion", formalDefinition="Whether the server supports paging on expansion." )
1832        protected BooleanType paging;
1833
1834        /**
1835         * Allow request for incomplete expansions?
1836         */
1837        @Child(name = "incomplete", type = {BooleanType.class}, order=3, min=0, max=1, modifier=false, summary=false)
1838        @Description(shortDefinition="Allow request for incomplete expansions?", formalDefinition="Allow request for incomplete expansions?" )
1839        protected BooleanType incomplete;
1840
1841        /**
1842         * Supported expansion parameter.
1843         */
1844        @Child(name = "parameter", type = {}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1845        @Description(shortDefinition="Supported expansion parameter", formalDefinition="Supported expansion parameter." )
1846        protected List<TerminologyCapabilitiesExpansionParameterComponent> parameter;
1847
1848        /**
1849         * Documentation about text searching works.
1850         */
1851        @Child(name = "textFilter", type = {MarkdownType.class}, order=5, min=0, max=1, modifier=false, summary=false)
1852        @Description(shortDefinition="Documentation about text searching works", formalDefinition="Documentation about text searching works." )
1853        protected MarkdownType textFilter;
1854
1855        private static final long serialVersionUID = -1011350616L;
1856
1857    /**
1858     * Constructor
1859     */
1860      public TerminologyCapabilitiesExpansionComponent() {
1861        super();
1862      }
1863
1864        /**
1865         * @return {@link #hierarchical} (Whether the server can return nested value sets.). This is the underlying object with id, value and extensions. The accessor "getHierarchical" gives direct access to the value
1866         */
1867        public BooleanType getHierarchicalElement() { 
1868          if (this.hierarchical == null)
1869            if (Configuration.errorOnAutoCreate())
1870              throw new Error("Attempt to auto-create TerminologyCapabilitiesExpansionComponent.hierarchical");
1871            else if (Configuration.doAutoCreate())
1872              this.hierarchical = new BooleanType(); // bb
1873          return this.hierarchical;
1874        }
1875
1876        public boolean hasHierarchicalElement() { 
1877          return this.hierarchical != null && !this.hierarchical.isEmpty();
1878        }
1879
1880        public boolean hasHierarchical() { 
1881          return this.hierarchical != null && !this.hierarchical.isEmpty();
1882        }
1883
1884        /**
1885         * @param value {@link #hierarchical} (Whether the server can return nested value sets.). This is the underlying object with id, value and extensions. The accessor "getHierarchical" gives direct access to the value
1886         */
1887        public TerminologyCapabilitiesExpansionComponent setHierarchicalElement(BooleanType value) { 
1888          this.hierarchical = value;
1889          return this;
1890        }
1891
1892        /**
1893         * @return Whether the server can return nested value sets.
1894         */
1895        public boolean getHierarchical() { 
1896          return this.hierarchical == null || this.hierarchical.isEmpty() ? false : this.hierarchical.getValue();
1897        }
1898
1899        /**
1900         * @param value Whether the server can return nested value sets.
1901         */
1902        public TerminologyCapabilitiesExpansionComponent setHierarchical(boolean value) { 
1903            if (this.hierarchical == null)
1904              this.hierarchical = new BooleanType();
1905            this.hierarchical.setValue(value);
1906          return this;
1907        }
1908
1909        /**
1910         * @return {@link #paging} (Whether the server supports paging on expansion.). This is the underlying object with id, value and extensions. The accessor "getPaging" gives direct access to the value
1911         */
1912        public BooleanType getPagingElement() { 
1913          if (this.paging == null)
1914            if (Configuration.errorOnAutoCreate())
1915              throw new Error("Attempt to auto-create TerminologyCapabilitiesExpansionComponent.paging");
1916            else if (Configuration.doAutoCreate())
1917              this.paging = new BooleanType(); // bb
1918          return this.paging;
1919        }
1920
1921        public boolean hasPagingElement() { 
1922          return this.paging != null && !this.paging.isEmpty();
1923        }
1924
1925        public boolean hasPaging() { 
1926          return this.paging != null && !this.paging.isEmpty();
1927        }
1928
1929        /**
1930         * @param value {@link #paging} (Whether the server supports paging on expansion.). This is the underlying object with id, value and extensions. The accessor "getPaging" gives direct access to the value
1931         */
1932        public TerminologyCapabilitiesExpansionComponent setPagingElement(BooleanType value) { 
1933          this.paging = value;
1934          return this;
1935        }
1936
1937        /**
1938         * @return Whether the server supports paging on expansion.
1939         */
1940        public boolean getPaging() { 
1941          return this.paging == null || this.paging.isEmpty() ? false : this.paging.getValue();
1942        }
1943
1944        /**
1945         * @param value Whether the server supports paging on expansion.
1946         */
1947        public TerminologyCapabilitiesExpansionComponent setPaging(boolean value) { 
1948            if (this.paging == null)
1949              this.paging = new BooleanType();
1950            this.paging.setValue(value);
1951          return this;
1952        }
1953
1954        /**
1955         * @return {@link #incomplete} (Allow request for incomplete expansions?). This is the underlying object with id, value and extensions. The accessor "getIncomplete" gives direct access to the value
1956         */
1957        public BooleanType getIncompleteElement() { 
1958          if (this.incomplete == null)
1959            if (Configuration.errorOnAutoCreate())
1960              throw new Error("Attempt to auto-create TerminologyCapabilitiesExpansionComponent.incomplete");
1961            else if (Configuration.doAutoCreate())
1962              this.incomplete = new BooleanType(); // bb
1963          return this.incomplete;
1964        }
1965
1966        public boolean hasIncompleteElement() { 
1967          return this.incomplete != null && !this.incomplete.isEmpty();
1968        }
1969
1970        public boolean hasIncomplete() { 
1971          return this.incomplete != null && !this.incomplete.isEmpty();
1972        }
1973
1974        /**
1975         * @param value {@link #incomplete} (Allow request for incomplete expansions?). This is the underlying object with id, value and extensions. The accessor "getIncomplete" gives direct access to the value
1976         */
1977        public TerminologyCapabilitiesExpansionComponent setIncompleteElement(BooleanType value) { 
1978          this.incomplete = value;
1979          return this;
1980        }
1981
1982        /**
1983         * @return Allow request for incomplete expansions?
1984         */
1985        public boolean getIncomplete() { 
1986          return this.incomplete == null || this.incomplete.isEmpty() ? false : this.incomplete.getValue();
1987        }
1988
1989        /**
1990         * @param value Allow request for incomplete expansions?
1991         */
1992        public TerminologyCapabilitiesExpansionComponent setIncomplete(boolean value) { 
1993            if (this.incomplete == null)
1994              this.incomplete = new BooleanType();
1995            this.incomplete.setValue(value);
1996          return this;
1997        }
1998
1999        /**
2000         * @return {@link #parameter} (Supported expansion parameter.)
2001         */
2002        public List<TerminologyCapabilitiesExpansionParameterComponent> getParameter() { 
2003          if (this.parameter == null)
2004            this.parameter = new ArrayList<TerminologyCapabilitiesExpansionParameterComponent>();
2005          return this.parameter;
2006        }
2007
2008        /**
2009         * @return Returns a reference to <code>this</code> for easy method chaining
2010         */
2011        public TerminologyCapabilitiesExpansionComponent setParameter(List<TerminologyCapabilitiesExpansionParameterComponent> theParameter) { 
2012          this.parameter = theParameter;
2013          return this;
2014        }
2015
2016        public boolean hasParameter() { 
2017          if (this.parameter == null)
2018            return false;
2019          for (TerminologyCapabilitiesExpansionParameterComponent item : this.parameter)
2020            if (!item.isEmpty())
2021              return true;
2022          return false;
2023        }
2024
2025        public TerminologyCapabilitiesExpansionParameterComponent addParameter() { //3
2026          TerminologyCapabilitiesExpansionParameterComponent t = new TerminologyCapabilitiesExpansionParameterComponent();
2027          if (this.parameter == null)
2028            this.parameter = new ArrayList<TerminologyCapabilitiesExpansionParameterComponent>();
2029          this.parameter.add(t);
2030          return t;
2031        }
2032
2033        public TerminologyCapabilitiesExpansionComponent addParameter(TerminologyCapabilitiesExpansionParameterComponent t) { //3
2034          if (t == null)
2035            return this;
2036          if (this.parameter == null)
2037            this.parameter = new ArrayList<TerminologyCapabilitiesExpansionParameterComponent>();
2038          this.parameter.add(t);
2039          return this;
2040        }
2041
2042        /**
2043         * @return The first repetition of repeating field {@link #parameter}, creating it if it does not already exist {3}
2044         */
2045        public TerminologyCapabilitiesExpansionParameterComponent getParameterFirstRep() { 
2046          if (getParameter().isEmpty()) {
2047            addParameter();
2048          }
2049          return getParameter().get(0);
2050        }
2051
2052        /**
2053         * @return {@link #textFilter} (Documentation about text searching works.). This is the underlying object with id, value and extensions. The accessor "getTextFilter" gives direct access to the value
2054         */
2055        public MarkdownType getTextFilterElement() { 
2056          if (this.textFilter == null)
2057            if (Configuration.errorOnAutoCreate())
2058              throw new Error("Attempt to auto-create TerminologyCapabilitiesExpansionComponent.textFilter");
2059            else if (Configuration.doAutoCreate())
2060              this.textFilter = new MarkdownType(); // bb
2061          return this.textFilter;
2062        }
2063
2064        public boolean hasTextFilterElement() { 
2065          return this.textFilter != null && !this.textFilter.isEmpty();
2066        }
2067
2068        public boolean hasTextFilter() { 
2069          return this.textFilter != null && !this.textFilter.isEmpty();
2070        }
2071
2072        /**
2073         * @param value {@link #textFilter} (Documentation about text searching works.). This is the underlying object with id, value and extensions. The accessor "getTextFilter" gives direct access to the value
2074         */
2075        public TerminologyCapabilitiesExpansionComponent setTextFilterElement(MarkdownType value) { 
2076          this.textFilter = value;
2077          return this;
2078        }
2079
2080        /**
2081         * @return Documentation about text searching works.
2082         */
2083        public String getTextFilter() { 
2084          return this.textFilter == null ? null : this.textFilter.getValue();
2085        }
2086
2087        /**
2088         * @param value Documentation about text searching works.
2089         */
2090        public TerminologyCapabilitiesExpansionComponent setTextFilter(String value) { 
2091          if (value == null)
2092            this.textFilter = null;
2093          else {
2094            if (this.textFilter == null)
2095              this.textFilter = new MarkdownType();
2096            this.textFilter.setValue(value);
2097          }
2098          return this;
2099        }
2100
2101        protected void listChildren(List<Property> children) {
2102          super.listChildren(children);
2103          children.add(new Property("hierarchical", "boolean", "Whether the server can return nested value sets.", 0, 1, hierarchical));
2104          children.add(new Property("paging", "boolean", "Whether the server supports paging on expansion.", 0, 1, paging));
2105          children.add(new Property("incomplete", "boolean", "Allow request for incomplete expansions?", 0, 1, incomplete));
2106          children.add(new Property("parameter", "", "Supported expansion parameter.", 0, java.lang.Integer.MAX_VALUE, parameter));
2107          children.add(new Property("textFilter", "markdown", "Documentation about text searching works.", 0, 1, textFilter));
2108        }
2109
2110        @Override
2111        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2112          switch (_hash) {
2113          case 857636745: /*hierarchical*/  return new Property("hierarchical", "boolean", "Whether the server can return nested value sets.", 0, 1, hierarchical);
2114          case -995747956: /*paging*/  return new Property("paging", "boolean", "Whether the server supports paging on expansion.", 0, 1, paging);
2115          case -1010022050: /*incomplete*/  return new Property("incomplete", "boolean", "Allow request for incomplete expansions?", 0, 1, incomplete);
2116          case 1954460585: /*parameter*/  return new Property("parameter", "", "Supported expansion parameter.", 0, java.lang.Integer.MAX_VALUE, parameter);
2117          case 1469359877: /*textFilter*/  return new Property("textFilter", "markdown", "Documentation about text searching works.", 0, 1, textFilter);
2118          default: return super.getNamedProperty(_hash, _name, _checkValid);
2119          }
2120
2121        }
2122
2123      @Override
2124      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2125        switch (hash) {
2126        case 857636745: /*hierarchical*/ return this.hierarchical == null ? new Base[0] : new Base[] {this.hierarchical}; // BooleanType
2127        case -995747956: /*paging*/ return this.paging == null ? new Base[0] : new Base[] {this.paging}; // BooleanType
2128        case -1010022050: /*incomplete*/ return this.incomplete == null ? new Base[0] : new Base[] {this.incomplete}; // BooleanType
2129        case 1954460585: /*parameter*/ return this.parameter == null ? new Base[0] : this.parameter.toArray(new Base[this.parameter.size()]); // TerminologyCapabilitiesExpansionParameterComponent
2130        case 1469359877: /*textFilter*/ return this.textFilter == null ? new Base[0] : new Base[] {this.textFilter}; // MarkdownType
2131        default: return super.getProperty(hash, name, checkValid);
2132        }
2133
2134      }
2135
2136      @Override
2137      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2138        switch (hash) {
2139        case 857636745: // hierarchical
2140          this.hierarchical = TypeConvertor.castToBoolean(value); // BooleanType
2141          return value;
2142        case -995747956: // paging
2143          this.paging = TypeConvertor.castToBoolean(value); // BooleanType
2144          return value;
2145        case -1010022050: // incomplete
2146          this.incomplete = TypeConvertor.castToBoolean(value); // BooleanType
2147          return value;
2148        case 1954460585: // parameter
2149          this.getParameter().add((TerminologyCapabilitiesExpansionParameterComponent) value); // TerminologyCapabilitiesExpansionParameterComponent
2150          return value;
2151        case 1469359877: // textFilter
2152          this.textFilter = TypeConvertor.castToMarkdown(value); // MarkdownType
2153          return value;
2154        default: return super.setProperty(hash, name, value);
2155        }
2156
2157      }
2158
2159      @Override
2160      public Base setProperty(String name, Base value) throws FHIRException {
2161        if (name.equals("hierarchical")) {
2162          this.hierarchical = TypeConvertor.castToBoolean(value); // BooleanType
2163        } else if (name.equals("paging")) {
2164          this.paging = TypeConvertor.castToBoolean(value); // BooleanType
2165        } else if (name.equals("incomplete")) {
2166          this.incomplete = TypeConvertor.castToBoolean(value); // BooleanType
2167        } else if (name.equals("parameter")) {
2168          this.getParameter().add((TerminologyCapabilitiesExpansionParameterComponent) value);
2169        } else if (name.equals("textFilter")) {
2170          this.textFilter = TypeConvertor.castToMarkdown(value); // MarkdownType
2171        } else
2172          return super.setProperty(name, value);
2173        return value;
2174      }
2175
2176      @Override
2177      public Base makeProperty(int hash, String name) throws FHIRException {
2178        switch (hash) {
2179        case 857636745:  return getHierarchicalElement();
2180        case -995747956:  return getPagingElement();
2181        case -1010022050:  return getIncompleteElement();
2182        case 1954460585:  return addParameter(); 
2183        case 1469359877:  return getTextFilterElement();
2184        default: return super.makeProperty(hash, name);
2185        }
2186
2187      }
2188
2189      @Override
2190      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2191        switch (hash) {
2192        case 857636745: /*hierarchical*/ return new String[] {"boolean"};
2193        case -995747956: /*paging*/ return new String[] {"boolean"};
2194        case -1010022050: /*incomplete*/ return new String[] {"boolean"};
2195        case 1954460585: /*parameter*/ return new String[] {};
2196        case 1469359877: /*textFilter*/ return new String[] {"markdown"};
2197        default: return super.getTypesForProperty(hash, name);
2198        }
2199
2200      }
2201
2202      @Override
2203      public Base addChild(String name) throws FHIRException {
2204        if (name.equals("hierarchical")) {
2205          throw new FHIRException("Cannot call addChild on a primitive type TerminologyCapabilities.expansion.hierarchical");
2206        }
2207        else if (name.equals("paging")) {
2208          throw new FHIRException("Cannot call addChild on a primitive type TerminologyCapabilities.expansion.paging");
2209        }
2210        else if (name.equals("incomplete")) {
2211          throw new FHIRException("Cannot call addChild on a primitive type TerminologyCapabilities.expansion.incomplete");
2212        }
2213        else if (name.equals("parameter")) {
2214          return addParameter();
2215        }
2216        else if (name.equals("textFilter")) {
2217          throw new FHIRException("Cannot call addChild on a primitive type TerminologyCapabilities.expansion.textFilter");
2218        }
2219        else
2220          return super.addChild(name);
2221      }
2222
2223      public TerminologyCapabilitiesExpansionComponent copy() {
2224        TerminologyCapabilitiesExpansionComponent dst = new TerminologyCapabilitiesExpansionComponent();
2225        copyValues(dst);
2226        return dst;
2227      }
2228
2229      public void copyValues(TerminologyCapabilitiesExpansionComponent dst) {
2230        super.copyValues(dst);
2231        dst.hierarchical = hierarchical == null ? null : hierarchical.copy();
2232        dst.paging = paging == null ? null : paging.copy();
2233        dst.incomplete = incomplete == null ? null : incomplete.copy();
2234        if (parameter != null) {
2235          dst.parameter = new ArrayList<TerminologyCapabilitiesExpansionParameterComponent>();
2236          for (TerminologyCapabilitiesExpansionParameterComponent i : parameter)
2237            dst.parameter.add(i.copy());
2238        };
2239        dst.textFilter = textFilter == null ? null : textFilter.copy();
2240      }
2241
2242      @Override
2243      public boolean equalsDeep(Base other_) {
2244        if (!super.equalsDeep(other_))
2245          return false;
2246        if (!(other_ instanceof TerminologyCapabilitiesExpansionComponent))
2247          return false;
2248        TerminologyCapabilitiesExpansionComponent o = (TerminologyCapabilitiesExpansionComponent) other_;
2249        return compareDeep(hierarchical, o.hierarchical, true) && compareDeep(paging, o.paging, true) && compareDeep(incomplete, o.incomplete, true)
2250           && compareDeep(parameter, o.parameter, true) && compareDeep(textFilter, o.textFilter, true);
2251      }
2252
2253      @Override
2254      public boolean equalsShallow(Base other_) {
2255        if (!super.equalsShallow(other_))
2256          return false;
2257        if (!(other_ instanceof TerminologyCapabilitiesExpansionComponent))
2258          return false;
2259        TerminologyCapabilitiesExpansionComponent o = (TerminologyCapabilitiesExpansionComponent) other_;
2260        return compareValues(hierarchical, o.hierarchical, true) && compareValues(paging, o.paging, true) && compareValues(incomplete, o.incomplete, true)
2261           && compareValues(textFilter, o.textFilter, true);
2262      }
2263
2264      public boolean isEmpty() {
2265        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(hierarchical, paging, incomplete
2266          , parameter, textFilter);
2267      }
2268
2269  public String fhirType() {
2270    return "TerminologyCapabilities.expansion";
2271
2272  }
2273
2274  }
2275
2276    @Block()
2277    public static class TerminologyCapabilitiesExpansionParameterComponent extends BackboneElement implements IBaseBackboneElement {
2278        /**
2279         * Expansion Parameter name.
2280         */
2281        @Child(name = "name", type = {CodeType.class}, order=1, min=1, max=1, modifier=false, summary=false)
2282        @Description(shortDefinition="Expansion Parameter name", formalDefinition="Expansion Parameter name." )
2283        protected CodeType name;
2284
2285        /**
2286         * Description of support for parameter.
2287         */
2288        @Child(name = "documentation", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=false)
2289        @Description(shortDefinition="Description of support for parameter", formalDefinition="Description of support for parameter." )
2290        protected StringType documentation;
2291
2292        private static final long serialVersionUID = -1703372741L;
2293
2294    /**
2295     * Constructor
2296     */
2297      public TerminologyCapabilitiesExpansionParameterComponent() {
2298        super();
2299      }
2300
2301    /**
2302     * Constructor
2303     */
2304      public TerminologyCapabilitiesExpansionParameterComponent(String name) {
2305        super();
2306        this.setName(name);
2307      }
2308
2309        /**
2310         * @return {@link #name} (Expansion Parameter name.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
2311         */
2312        public CodeType getNameElement() { 
2313          if (this.name == null)
2314            if (Configuration.errorOnAutoCreate())
2315              throw new Error("Attempt to auto-create TerminologyCapabilitiesExpansionParameterComponent.name");
2316            else if (Configuration.doAutoCreate())
2317              this.name = new CodeType(); // bb
2318          return this.name;
2319        }
2320
2321        public boolean hasNameElement() { 
2322          return this.name != null && !this.name.isEmpty();
2323        }
2324
2325        public boolean hasName() { 
2326          return this.name != null && !this.name.isEmpty();
2327        }
2328
2329        /**
2330         * @param value {@link #name} (Expansion Parameter name.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
2331         */
2332        public TerminologyCapabilitiesExpansionParameterComponent setNameElement(CodeType value) { 
2333          this.name = value;
2334          return this;
2335        }
2336
2337        /**
2338         * @return Expansion Parameter name.
2339         */
2340        public String getName() { 
2341          return this.name == null ? null : this.name.getValue();
2342        }
2343
2344        /**
2345         * @param value Expansion Parameter name.
2346         */
2347        public TerminologyCapabilitiesExpansionParameterComponent setName(String value) { 
2348            if (this.name == null)
2349              this.name = new CodeType();
2350            this.name.setValue(value);
2351          return this;
2352        }
2353
2354        /**
2355         * @return {@link #documentation} (Description of support for parameter.). This is the underlying object with id, value and extensions. The accessor "getDocumentation" gives direct access to the value
2356         */
2357        public StringType getDocumentationElement() { 
2358          if (this.documentation == null)
2359            if (Configuration.errorOnAutoCreate())
2360              throw new Error("Attempt to auto-create TerminologyCapabilitiesExpansionParameterComponent.documentation");
2361            else if (Configuration.doAutoCreate())
2362              this.documentation = new StringType(); // bb
2363          return this.documentation;
2364        }
2365
2366        public boolean hasDocumentationElement() { 
2367          return this.documentation != null && !this.documentation.isEmpty();
2368        }
2369
2370        public boolean hasDocumentation() { 
2371          return this.documentation != null && !this.documentation.isEmpty();
2372        }
2373
2374        /**
2375         * @param value {@link #documentation} (Description of support for parameter.). This is the underlying object with id, value and extensions. The accessor "getDocumentation" gives direct access to the value
2376         */
2377        public TerminologyCapabilitiesExpansionParameterComponent setDocumentationElement(StringType value) { 
2378          this.documentation = value;
2379          return this;
2380        }
2381
2382        /**
2383         * @return Description of support for parameter.
2384         */
2385        public String getDocumentation() { 
2386          return this.documentation == null ? null : this.documentation.getValue();
2387        }
2388
2389        /**
2390         * @param value Description of support for parameter.
2391         */
2392        public TerminologyCapabilitiesExpansionParameterComponent setDocumentation(String value) { 
2393          if (Utilities.noString(value))
2394            this.documentation = null;
2395          else {
2396            if (this.documentation == null)
2397              this.documentation = new StringType();
2398            this.documentation.setValue(value);
2399          }
2400          return this;
2401        }
2402
2403        protected void listChildren(List<Property> children) {
2404          super.listChildren(children);
2405          children.add(new Property("name", "code", "Expansion Parameter name.", 0, 1, name));
2406          children.add(new Property("documentation", "string", "Description of support for parameter.", 0, 1, documentation));
2407        }
2408
2409        @Override
2410        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2411          switch (_hash) {
2412          case 3373707: /*name*/  return new Property("name", "code", "Expansion Parameter name.", 0, 1, name);
2413          case 1587405498: /*documentation*/  return new Property("documentation", "string", "Description of support for parameter.", 0, 1, documentation);
2414          default: return super.getNamedProperty(_hash, _name, _checkValid);
2415          }
2416
2417        }
2418
2419      @Override
2420      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2421        switch (hash) {
2422        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // CodeType
2423        case 1587405498: /*documentation*/ return this.documentation == null ? new Base[0] : new Base[] {this.documentation}; // StringType
2424        default: return super.getProperty(hash, name, checkValid);
2425        }
2426
2427      }
2428
2429      @Override
2430      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2431        switch (hash) {
2432        case 3373707: // name
2433          this.name = TypeConvertor.castToCode(value); // CodeType
2434          return value;
2435        case 1587405498: // documentation
2436          this.documentation = TypeConvertor.castToString(value); // StringType
2437          return value;
2438        default: return super.setProperty(hash, name, value);
2439        }
2440
2441      }
2442
2443      @Override
2444      public Base setProperty(String name, Base value) throws FHIRException {
2445        if (name.equals("name")) {
2446          this.name = TypeConvertor.castToCode(value); // CodeType
2447        } else if (name.equals("documentation")) {
2448          this.documentation = TypeConvertor.castToString(value); // StringType
2449        } else
2450          return super.setProperty(name, value);
2451        return value;
2452      }
2453
2454      @Override
2455      public Base makeProperty(int hash, String name) throws FHIRException {
2456        switch (hash) {
2457        case 3373707:  return getNameElement();
2458        case 1587405498:  return getDocumentationElement();
2459        default: return super.makeProperty(hash, name);
2460        }
2461
2462      }
2463
2464      @Override
2465      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2466        switch (hash) {
2467        case 3373707: /*name*/ return new String[] {"code"};
2468        case 1587405498: /*documentation*/ return new String[] {"string"};
2469        default: return super.getTypesForProperty(hash, name);
2470        }
2471
2472      }
2473
2474      @Override
2475      public Base addChild(String name) throws FHIRException {
2476        if (name.equals("name")) {
2477          throw new FHIRException("Cannot call addChild on a primitive type TerminologyCapabilities.expansion.parameter.name");
2478        }
2479        else if (name.equals("documentation")) {
2480          throw new FHIRException("Cannot call addChild on a primitive type TerminologyCapabilities.expansion.parameter.documentation");
2481        }
2482        else
2483          return super.addChild(name);
2484      }
2485
2486      public TerminologyCapabilitiesExpansionParameterComponent copy() {
2487        TerminologyCapabilitiesExpansionParameterComponent dst = new TerminologyCapabilitiesExpansionParameterComponent();
2488        copyValues(dst);
2489        return dst;
2490      }
2491
2492      public void copyValues(TerminologyCapabilitiesExpansionParameterComponent dst) {
2493        super.copyValues(dst);
2494        dst.name = name == null ? null : name.copy();
2495        dst.documentation = documentation == null ? null : documentation.copy();
2496      }
2497
2498      @Override
2499      public boolean equalsDeep(Base other_) {
2500        if (!super.equalsDeep(other_))
2501          return false;
2502        if (!(other_ instanceof TerminologyCapabilitiesExpansionParameterComponent))
2503          return false;
2504        TerminologyCapabilitiesExpansionParameterComponent o = (TerminologyCapabilitiesExpansionParameterComponent) other_;
2505        return compareDeep(name, o.name, true) && compareDeep(documentation, o.documentation, true);
2506      }
2507
2508      @Override
2509      public boolean equalsShallow(Base other_) {
2510        if (!super.equalsShallow(other_))
2511          return false;
2512        if (!(other_ instanceof TerminologyCapabilitiesExpansionParameterComponent))
2513          return false;
2514        TerminologyCapabilitiesExpansionParameterComponent o = (TerminologyCapabilitiesExpansionParameterComponent) other_;
2515        return compareValues(name, o.name, true) && compareValues(documentation, o.documentation, true);
2516      }
2517
2518      public boolean isEmpty() {
2519        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(name, documentation);
2520      }
2521
2522  public String fhirType() {
2523    return "TerminologyCapabilities.expansion.parameter";
2524
2525  }
2526
2527  }
2528
2529    @Block()
2530    public static class TerminologyCapabilitiesValidateCodeComponent extends BackboneElement implements IBaseBackboneElement {
2531        /**
2532         * Whether translations are validated.
2533         */
2534        @Child(name = "translations", type = {BooleanType.class}, order=1, min=1, max=1, modifier=false, summary=false)
2535        @Description(shortDefinition="Whether translations are validated", formalDefinition="Whether translations are validated." )
2536        protected BooleanType translations;
2537
2538        private static final long serialVersionUID = -1212814906L;
2539
2540    /**
2541     * Constructor
2542     */
2543      public TerminologyCapabilitiesValidateCodeComponent() {
2544        super();
2545      }
2546
2547    /**
2548     * Constructor
2549     */
2550      public TerminologyCapabilitiesValidateCodeComponent(boolean translations) {
2551        super();
2552        this.setTranslations(translations);
2553      }
2554
2555        /**
2556         * @return {@link #translations} (Whether translations are validated.). This is the underlying object with id, value and extensions. The accessor "getTranslations" gives direct access to the value
2557         */
2558        public BooleanType getTranslationsElement() { 
2559          if (this.translations == null)
2560            if (Configuration.errorOnAutoCreate())
2561              throw new Error("Attempt to auto-create TerminologyCapabilitiesValidateCodeComponent.translations");
2562            else if (Configuration.doAutoCreate())
2563              this.translations = new BooleanType(); // bb
2564          return this.translations;
2565        }
2566
2567        public boolean hasTranslationsElement() { 
2568          return this.translations != null && !this.translations.isEmpty();
2569        }
2570
2571        public boolean hasTranslations() { 
2572          return this.translations != null && !this.translations.isEmpty();
2573        }
2574
2575        /**
2576         * @param value {@link #translations} (Whether translations are validated.). This is the underlying object with id, value and extensions. The accessor "getTranslations" gives direct access to the value
2577         */
2578        public TerminologyCapabilitiesValidateCodeComponent setTranslationsElement(BooleanType value) { 
2579          this.translations = value;
2580          return this;
2581        }
2582
2583        /**
2584         * @return Whether translations are validated.
2585         */
2586        public boolean getTranslations() { 
2587          return this.translations == null || this.translations.isEmpty() ? false : this.translations.getValue();
2588        }
2589
2590        /**
2591         * @param value Whether translations are validated.
2592         */
2593        public TerminologyCapabilitiesValidateCodeComponent setTranslations(boolean value) { 
2594            if (this.translations == null)
2595              this.translations = new BooleanType();
2596            this.translations.setValue(value);
2597          return this;
2598        }
2599
2600        protected void listChildren(List<Property> children) {
2601          super.listChildren(children);
2602          children.add(new Property("translations", "boolean", "Whether translations are validated.", 0, 1, translations));
2603        }
2604
2605        @Override
2606        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2607          switch (_hash) {
2608          case -1225497630: /*translations*/  return new Property("translations", "boolean", "Whether translations are validated.", 0, 1, translations);
2609          default: return super.getNamedProperty(_hash, _name, _checkValid);
2610          }
2611
2612        }
2613
2614      @Override
2615      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2616        switch (hash) {
2617        case -1225497630: /*translations*/ return this.translations == null ? new Base[0] : new Base[] {this.translations}; // BooleanType
2618        default: return super.getProperty(hash, name, checkValid);
2619        }
2620
2621      }
2622
2623      @Override
2624      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2625        switch (hash) {
2626        case -1225497630: // translations
2627          this.translations = TypeConvertor.castToBoolean(value); // BooleanType
2628          return value;
2629        default: return super.setProperty(hash, name, value);
2630        }
2631
2632      }
2633
2634      @Override
2635      public Base setProperty(String name, Base value) throws FHIRException {
2636        if (name.equals("translations")) {
2637          this.translations = TypeConvertor.castToBoolean(value); // BooleanType
2638        } else
2639          return super.setProperty(name, value);
2640        return value;
2641      }
2642
2643      @Override
2644      public Base makeProperty(int hash, String name) throws FHIRException {
2645        switch (hash) {
2646        case -1225497630:  return getTranslationsElement();
2647        default: return super.makeProperty(hash, name);
2648        }
2649
2650      }
2651
2652      @Override
2653      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2654        switch (hash) {
2655        case -1225497630: /*translations*/ return new String[] {"boolean"};
2656        default: return super.getTypesForProperty(hash, name);
2657        }
2658
2659      }
2660
2661      @Override
2662      public Base addChild(String name) throws FHIRException {
2663        if (name.equals("translations")) {
2664          throw new FHIRException("Cannot call addChild on a primitive type TerminologyCapabilities.validateCode.translations");
2665        }
2666        else
2667          return super.addChild(name);
2668      }
2669
2670      public TerminologyCapabilitiesValidateCodeComponent copy() {
2671        TerminologyCapabilitiesValidateCodeComponent dst = new TerminologyCapabilitiesValidateCodeComponent();
2672        copyValues(dst);
2673        return dst;
2674      }
2675
2676      public void copyValues(TerminologyCapabilitiesValidateCodeComponent dst) {
2677        super.copyValues(dst);
2678        dst.translations = translations == null ? null : translations.copy();
2679      }
2680
2681      @Override
2682      public boolean equalsDeep(Base other_) {
2683        if (!super.equalsDeep(other_))
2684          return false;
2685        if (!(other_ instanceof TerminologyCapabilitiesValidateCodeComponent))
2686          return false;
2687        TerminologyCapabilitiesValidateCodeComponent o = (TerminologyCapabilitiesValidateCodeComponent) other_;
2688        return compareDeep(translations, o.translations, true);
2689      }
2690
2691      @Override
2692      public boolean equalsShallow(Base other_) {
2693        if (!super.equalsShallow(other_))
2694          return false;
2695        if (!(other_ instanceof TerminologyCapabilitiesValidateCodeComponent))
2696          return false;
2697        TerminologyCapabilitiesValidateCodeComponent o = (TerminologyCapabilitiesValidateCodeComponent) other_;
2698        return compareValues(translations, o.translations, true);
2699      }
2700
2701      public boolean isEmpty() {
2702        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(translations);
2703      }
2704
2705  public String fhirType() {
2706    return "TerminologyCapabilities.validateCode";
2707
2708  }
2709
2710  }
2711
2712    @Block()
2713    public static class TerminologyCapabilitiesTranslationComponent extends BackboneElement implements IBaseBackboneElement {
2714        /**
2715         * Whether the client must identify the map.
2716         */
2717        @Child(name = "needsMap", type = {BooleanType.class}, order=1, min=1, max=1, modifier=false, summary=false)
2718        @Description(shortDefinition="Whether the client must identify the map", formalDefinition="Whether the client must identify the map." )
2719        protected BooleanType needsMap;
2720
2721        private static final long serialVersionUID = -1727843575L;
2722
2723    /**
2724     * Constructor
2725     */
2726      public TerminologyCapabilitiesTranslationComponent() {
2727        super();
2728      }
2729
2730    /**
2731     * Constructor
2732     */
2733      public TerminologyCapabilitiesTranslationComponent(boolean needsMap) {
2734        super();
2735        this.setNeedsMap(needsMap);
2736      }
2737
2738        /**
2739         * @return {@link #needsMap} (Whether the client must identify the map.). This is the underlying object with id, value and extensions. The accessor "getNeedsMap" gives direct access to the value
2740         */
2741        public BooleanType getNeedsMapElement() { 
2742          if (this.needsMap == null)
2743            if (Configuration.errorOnAutoCreate())
2744              throw new Error("Attempt to auto-create TerminologyCapabilitiesTranslationComponent.needsMap");
2745            else if (Configuration.doAutoCreate())
2746              this.needsMap = new BooleanType(); // bb
2747          return this.needsMap;
2748        }
2749
2750        public boolean hasNeedsMapElement() { 
2751          return this.needsMap != null && !this.needsMap.isEmpty();
2752        }
2753
2754        public boolean hasNeedsMap() { 
2755          return this.needsMap != null && !this.needsMap.isEmpty();
2756        }
2757
2758        /**
2759         * @param value {@link #needsMap} (Whether the client must identify the map.). This is the underlying object with id, value and extensions. The accessor "getNeedsMap" gives direct access to the value
2760         */
2761        public TerminologyCapabilitiesTranslationComponent setNeedsMapElement(BooleanType value) { 
2762          this.needsMap = value;
2763          return this;
2764        }
2765
2766        /**
2767         * @return Whether the client must identify the map.
2768         */
2769        public boolean getNeedsMap() { 
2770          return this.needsMap == null || this.needsMap.isEmpty() ? false : this.needsMap.getValue();
2771        }
2772
2773        /**
2774         * @param value Whether the client must identify the map.
2775         */
2776        public TerminologyCapabilitiesTranslationComponent setNeedsMap(boolean value) { 
2777            if (this.needsMap == null)
2778              this.needsMap = new BooleanType();
2779            this.needsMap.setValue(value);
2780          return this;
2781        }
2782
2783        protected void listChildren(List<Property> children) {
2784          super.listChildren(children);
2785          children.add(new Property("needsMap", "boolean", "Whether the client must identify the map.", 0, 1, needsMap));
2786        }
2787
2788        @Override
2789        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2790          switch (_hash) {
2791          case 866566527: /*needsMap*/  return new Property("needsMap", "boolean", "Whether the client must identify the map.", 0, 1, needsMap);
2792          default: return super.getNamedProperty(_hash, _name, _checkValid);
2793          }
2794
2795        }
2796
2797      @Override
2798      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2799        switch (hash) {
2800        case 866566527: /*needsMap*/ return this.needsMap == null ? new Base[0] : new Base[] {this.needsMap}; // BooleanType
2801        default: return super.getProperty(hash, name, checkValid);
2802        }
2803
2804      }
2805
2806      @Override
2807      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2808        switch (hash) {
2809        case 866566527: // needsMap
2810          this.needsMap = TypeConvertor.castToBoolean(value); // BooleanType
2811          return value;
2812        default: return super.setProperty(hash, name, value);
2813        }
2814
2815      }
2816
2817      @Override
2818      public Base setProperty(String name, Base value) throws FHIRException {
2819        if (name.equals("needsMap")) {
2820          this.needsMap = TypeConvertor.castToBoolean(value); // BooleanType
2821        } else
2822          return super.setProperty(name, value);
2823        return value;
2824      }
2825
2826      @Override
2827      public Base makeProperty(int hash, String name) throws FHIRException {
2828        switch (hash) {
2829        case 866566527:  return getNeedsMapElement();
2830        default: return super.makeProperty(hash, name);
2831        }
2832
2833      }
2834
2835      @Override
2836      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2837        switch (hash) {
2838        case 866566527: /*needsMap*/ return new String[] {"boolean"};
2839        default: return super.getTypesForProperty(hash, name);
2840        }
2841
2842      }
2843
2844      @Override
2845      public Base addChild(String name) throws FHIRException {
2846        if (name.equals("needsMap")) {
2847          throw new FHIRException("Cannot call addChild on a primitive type TerminologyCapabilities.translation.needsMap");
2848        }
2849        else
2850          return super.addChild(name);
2851      }
2852
2853      public TerminologyCapabilitiesTranslationComponent copy() {
2854        TerminologyCapabilitiesTranslationComponent dst = new TerminologyCapabilitiesTranslationComponent();
2855        copyValues(dst);
2856        return dst;
2857      }
2858
2859      public void copyValues(TerminologyCapabilitiesTranslationComponent dst) {
2860        super.copyValues(dst);
2861        dst.needsMap = needsMap == null ? null : needsMap.copy();
2862      }
2863
2864      @Override
2865      public boolean equalsDeep(Base other_) {
2866        if (!super.equalsDeep(other_))
2867          return false;
2868        if (!(other_ instanceof TerminologyCapabilitiesTranslationComponent))
2869          return false;
2870        TerminologyCapabilitiesTranslationComponent o = (TerminologyCapabilitiesTranslationComponent) other_;
2871        return compareDeep(needsMap, o.needsMap, true);
2872      }
2873
2874      @Override
2875      public boolean equalsShallow(Base other_) {
2876        if (!super.equalsShallow(other_))
2877          return false;
2878        if (!(other_ instanceof TerminologyCapabilitiesTranslationComponent))
2879          return false;
2880        TerminologyCapabilitiesTranslationComponent o = (TerminologyCapabilitiesTranslationComponent) other_;
2881        return compareValues(needsMap, o.needsMap, true);
2882      }
2883
2884      public boolean isEmpty() {
2885        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(needsMap);
2886      }
2887
2888  public String fhirType() {
2889    return "TerminologyCapabilities.translation";
2890
2891  }
2892
2893  }
2894
2895    @Block()
2896    public static class TerminologyCapabilitiesClosureComponent extends BackboneElement implements IBaseBackboneElement {
2897        /**
2898         * If cross-system closure is supported.
2899         */
2900        @Child(name = "translation", type = {BooleanType.class}, order=1, min=0, max=1, modifier=false, summary=false)
2901        @Description(shortDefinition="If cross-system closure is supported", formalDefinition="If cross-system closure is supported." )
2902        protected BooleanType translation;
2903
2904        private static final long serialVersionUID = 1900484343L;
2905
2906    /**
2907     * Constructor
2908     */
2909      public TerminologyCapabilitiesClosureComponent() {
2910        super();
2911      }
2912
2913        /**
2914         * @return {@link #translation} (If cross-system closure is supported.). This is the underlying object with id, value and extensions. The accessor "getTranslation" gives direct access to the value
2915         */
2916        public BooleanType getTranslationElement() { 
2917          if (this.translation == null)
2918            if (Configuration.errorOnAutoCreate())
2919              throw new Error("Attempt to auto-create TerminologyCapabilitiesClosureComponent.translation");
2920            else if (Configuration.doAutoCreate())
2921              this.translation = new BooleanType(); // bb
2922          return this.translation;
2923        }
2924
2925        public boolean hasTranslationElement() { 
2926          return this.translation != null && !this.translation.isEmpty();
2927        }
2928
2929        public boolean hasTranslation() { 
2930          return this.translation != null && !this.translation.isEmpty();
2931        }
2932
2933        /**
2934         * @param value {@link #translation} (If cross-system closure is supported.). This is the underlying object with id, value and extensions. The accessor "getTranslation" gives direct access to the value
2935         */
2936        public TerminologyCapabilitiesClosureComponent setTranslationElement(BooleanType value) { 
2937          this.translation = value;
2938          return this;
2939        }
2940
2941        /**
2942         * @return If cross-system closure is supported.
2943         */
2944        public boolean getTranslation() { 
2945          return this.translation == null || this.translation.isEmpty() ? false : this.translation.getValue();
2946        }
2947
2948        /**
2949         * @param value If cross-system closure is supported.
2950         */
2951        public TerminologyCapabilitiesClosureComponent setTranslation(boolean value) { 
2952            if (this.translation == null)
2953              this.translation = new BooleanType();
2954            this.translation.setValue(value);
2955          return this;
2956        }
2957
2958        protected void listChildren(List<Property> children) {
2959          super.listChildren(children);
2960          children.add(new Property("translation", "boolean", "If cross-system closure is supported.", 0, 1, translation));
2961        }
2962
2963        @Override
2964        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2965          switch (_hash) {
2966          case -1840647503: /*translation*/  return new Property("translation", "boolean", "If cross-system closure is supported.", 0, 1, translation);
2967          default: return super.getNamedProperty(_hash, _name, _checkValid);
2968          }
2969
2970        }
2971
2972      @Override
2973      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2974        switch (hash) {
2975        case -1840647503: /*translation*/ return this.translation == null ? new Base[0] : new Base[] {this.translation}; // BooleanType
2976        default: return super.getProperty(hash, name, checkValid);
2977        }
2978
2979      }
2980
2981      @Override
2982      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2983        switch (hash) {
2984        case -1840647503: // translation
2985          this.translation = TypeConvertor.castToBoolean(value); // BooleanType
2986          return value;
2987        default: return super.setProperty(hash, name, value);
2988        }
2989
2990      }
2991
2992      @Override
2993      public Base setProperty(String name, Base value) throws FHIRException {
2994        if (name.equals("translation")) {
2995          this.translation = TypeConvertor.castToBoolean(value); // BooleanType
2996        } else
2997          return super.setProperty(name, value);
2998        return value;
2999      }
3000
3001      @Override
3002      public Base makeProperty(int hash, String name) throws FHIRException {
3003        switch (hash) {
3004        case -1840647503:  return getTranslationElement();
3005        default: return super.makeProperty(hash, name);
3006        }
3007
3008      }
3009
3010      @Override
3011      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
3012        switch (hash) {
3013        case -1840647503: /*translation*/ return new String[] {"boolean"};
3014        default: return super.getTypesForProperty(hash, name);
3015        }
3016
3017      }
3018
3019      @Override
3020      public Base addChild(String name) throws FHIRException {
3021        if (name.equals("translation")) {
3022          throw new FHIRException("Cannot call addChild on a primitive type TerminologyCapabilities.closure.translation");
3023        }
3024        else
3025          return super.addChild(name);
3026      }
3027
3028      public TerminologyCapabilitiesClosureComponent copy() {
3029        TerminologyCapabilitiesClosureComponent dst = new TerminologyCapabilitiesClosureComponent();
3030        copyValues(dst);
3031        return dst;
3032      }
3033
3034      public void copyValues(TerminologyCapabilitiesClosureComponent dst) {
3035        super.copyValues(dst);
3036        dst.translation = translation == null ? null : translation.copy();
3037      }
3038
3039      @Override
3040      public boolean equalsDeep(Base other_) {
3041        if (!super.equalsDeep(other_))
3042          return false;
3043        if (!(other_ instanceof TerminologyCapabilitiesClosureComponent))
3044          return false;
3045        TerminologyCapabilitiesClosureComponent o = (TerminologyCapabilitiesClosureComponent) other_;
3046        return compareDeep(translation, o.translation, true);
3047      }
3048
3049      @Override
3050      public boolean equalsShallow(Base other_) {
3051        if (!super.equalsShallow(other_))
3052          return false;
3053        if (!(other_ instanceof TerminologyCapabilitiesClosureComponent))
3054          return false;
3055        TerminologyCapabilitiesClosureComponent o = (TerminologyCapabilitiesClosureComponent) other_;
3056        return compareValues(translation, o.translation, true);
3057      }
3058
3059      public boolean isEmpty() {
3060        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(translation);
3061      }
3062
3063  public String fhirType() {
3064    return "TerminologyCapabilities.closure";
3065
3066  }
3067
3068  }
3069
3070    /**
3071     * An absolute URI that is used to identify this terminology capabilities 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 terminology capabilities is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the terminology capabilities is stored on different servers.
3072     */
3073    @Child(name = "url", type = {UriType.class}, order=0, min=0, max=1, modifier=false, summary=true)
3074    @Description(shortDefinition="Canonical identifier for this terminology capabilities, represented as a URI (globally unique)", formalDefinition="An absolute URI that is used to identify this terminology capabilities 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 terminology capabilities is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the terminology capabilities is stored on different servers." )
3075    protected UriType url;
3076
3077    /**
3078     * The identifier that is used to identify this version of the terminology capabilities when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the terminology capabilities 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.
3079     */
3080    @Child(name = "version", type = {StringType.class}, order=1, min=0, max=1, modifier=false, summary=true)
3081    @Description(shortDefinition="Business version of the terminology capabilities", formalDefinition="The identifier that is used to identify this version of the terminology capabilities when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the terminology capabilities 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." )
3082    protected StringType version;
3083
3084    /**
3085     * A natural language name identifying the terminology capabilities. This name should be usable as an identifier for the module by machine processing applications such as code generation.
3086     */
3087    @Child(name = "name", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=true)
3088    @Description(shortDefinition="Name for this terminology capabilities (computer friendly)", formalDefinition="A natural language name identifying the terminology capabilities. This name should be usable as an identifier for the module by machine processing applications such as code generation." )
3089    protected StringType name;
3090
3091    /**
3092     * A short, descriptive, user-friendly title for the terminology capabilities.
3093     */
3094    @Child(name = "title", type = {StringType.class}, order=3, min=0, max=1, modifier=false, summary=true)
3095    @Description(shortDefinition="Name for this terminology capabilities (human friendly)", formalDefinition="A short, descriptive, user-friendly title for the terminology capabilities." )
3096    protected StringType title;
3097
3098    /**
3099     * The status of this terminology capabilities. Enables tracking the life-cycle of the content.
3100     */
3101    @Child(name = "status", type = {CodeType.class}, order=4, min=1, max=1, modifier=true, summary=true)
3102    @Description(shortDefinition="draft | active | retired | unknown", formalDefinition="The status of this terminology capabilities. Enables tracking the life-cycle of the content." )
3103    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/publication-status")
3104    protected Enumeration<PublicationStatus> status;
3105
3106    /**
3107     * A Boolean value to indicate that this terminology capabilities is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.
3108     */
3109    @Child(name = "experimental", type = {BooleanType.class}, order=5, min=0, max=1, modifier=false, summary=true)
3110    @Description(shortDefinition="For testing purposes, not real usage", formalDefinition="A Boolean value to indicate that this terminology capabilities is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage." )
3111    protected BooleanType experimental;
3112
3113    /**
3114     * The date  (and optionally time) when the terminology capabilities 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 terminology capabilities changes.
3115     */
3116    @Child(name = "date", type = {DateTimeType.class}, order=6, min=1, max=1, modifier=false, summary=true)
3117    @Description(shortDefinition="Date last changed", formalDefinition="The date  (and optionally time) when the terminology capabilities 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 terminology capabilities changes." )
3118    protected DateTimeType date;
3119
3120    /**
3121     * The name of the organization or individual that published the terminology capabilities.
3122     */
3123    @Child(name = "publisher", type = {StringType.class}, order=7, min=0, max=1, modifier=false, summary=true)
3124    @Description(shortDefinition="Name of the publisher (organization or individual)", formalDefinition="The name of the organization or individual that published the terminology capabilities." )
3125    protected StringType publisher;
3126
3127    /**
3128     * Contact details to assist a user in finding and communicating with the publisher.
3129     */
3130    @Child(name = "contact", type = {ContactDetail.class}, order=8, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
3131    @Description(shortDefinition="Contact details for the publisher", formalDefinition="Contact details to assist a user in finding and communicating with the publisher." )
3132    protected List<ContactDetail> contact;
3133
3134    /**
3135     * A free text natural language description of the terminology capabilities from a consumer's perspective. Typically, this is used when the capability statement describes a desired rather than an actual solution, for example as a formal expression of requirements as part of an RFP.
3136     */
3137    @Child(name = "description", type = {MarkdownType.class}, order=9, min=0, max=1, modifier=false, summary=false)
3138    @Description(shortDefinition="Natural language description of the terminology capabilities", formalDefinition="A free text natural language description of the terminology capabilities from a consumer's perspective. Typically, this is used when the capability statement describes a desired rather than an actual solution, for example as a formal expression of requirements as part of an RFP." )
3139    protected MarkdownType description;
3140
3141    /**
3142     * The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate terminology capabilities instances.
3143     */
3144    @Child(name = "useContext", type = {UsageContext.class}, order=10, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
3145    @Description(shortDefinition="The context that the content is intended to support", formalDefinition="The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate terminology capabilities instances." )
3146    protected List<UsageContext> useContext;
3147
3148    /**
3149     * A legal or geographic region in which the terminology capabilities is intended to be used.
3150     */
3151    @Child(name = "jurisdiction", type = {CodeableConcept.class}, order=11, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
3152    @Description(shortDefinition="Intended jurisdiction for terminology capabilities (if applicable)", formalDefinition="A legal or geographic region in which the terminology capabilities is intended to be used." )
3153    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/jurisdiction")
3154    protected List<CodeableConcept> jurisdiction;
3155
3156    /**
3157     * Explanation of why this terminology capabilities is needed and why it has been designed as it has.
3158     */
3159    @Child(name = "purpose", type = {MarkdownType.class}, order=12, min=0, max=1, modifier=false, summary=false)
3160    @Description(shortDefinition="Why this terminology capabilities is defined", formalDefinition="Explanation of why this terminology capabilities is needed and why it has been designed as it has." )
3161    protected MarkdownType purpose;
3162
3163    /**
3164     * A copyright statement relating to the terminology capabilities and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the terminology capabilities.
3165     */
3166    @Child(name = "copyright", type = {MarkdownType.class}, order=13, min=0, max=1, modifier=false, summary=true)
3167    @Description(shortDefinition="Use and/or publishing restrictions", formalDefinition="A copyright statement relating to the terminology capabilities and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the terminology capabilities." )
3168    protected MarkdownType copyright;
3169
3170    /**
3171     * The way that this statement is intended to be used, to describe an actual running instance of software, a particular product (kind, not instance of software) or a class of implementation (e.g. a desired purchase).
3172     */
3173    @Child(name = "kind", type = {CodeType.class}, order=14, min=1, max=1, modifier=false, summary=true)
3174    @Description(shortDefinition="instance | capability | requirements", formalDefinition="The way that this statement is intended to be used, to describe an actual running instance of software, a particular product (kind, not instance of software) or a class of implementation (e.g. a desired purchase)." )
3175    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/capability-statement-kind")
3176    protected Enumeration<CapabilityStatementKind> kind;
3177
3178    /**
3179     * Software that is covered by this terminology capability statement.  It is used when the statement describes the capabilities of a particular software version, independent of an installation.
3180     */
3181    @Child(name = "software", type = {}, order=15, min=0, max=1, modifier=false, summary=true)
3182    @Description(shortDefinition="Software that is covered by this terminology capability statement", formalDefinition="Software that is covered by this terminology capability statement.  It is used when the statement describes the capabilities of a particular software version, independent of an installation." )
3183    protected TerminologyCapabilitiesSoftwareComponent software;
3184
3185    /**
3186     * Identifies a specific implementation instance that is described by the terminology capability statement - i.e. a particular installation, rather than the capabilities of a software program.
3187     */
3188    @Child(name = "implementation", type = {}, order=16, min=0, max=1, modifier=false, summary=true)
3189    @Description(shortDefinition="If this describes a specific instance", formalDefinition="Identifies a specific implementation instance that is described by the terminology capability statement - i.e. a particular installation, rather than the capabilities of a software program." )
3190    protected TerminologyCapabilitiesImplementationComponent implementation;
3191
3192    /**
3193     * Whether the server supports lockedDate.
3194     */
3195    @Child(name = "lockedDate", type = {BooleanType.class}, order=17, min=0, max=1, modifier=false, summary=true)
3196    @Description(shortDefinition="Whether lockedDate is supported", formalDefinition="Whether the server supports lockedDate." )
3197    protected BooleanType lockedDate;
3198
3199    /**
3200     * Identifies a code system that is supported by the server. If there is a no code system URL, then this declares the general assumptions a client can make about support for any CodeSystem resource.
3201     */
3202    @Child(name = "codeSystem", type = {}, order=18, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3203    @Description(shortDefinition="A code system supported by the server", formalDefinition="Identifies a code system that is supported by the server. If there is a no code system URL, then this declares the general assumptions a client can make about support for any CodeSystem resource." )
3204    protected List<TerminologyCapabilitiesCodeSystemComponent> codeSystem;
3205
3206    /**
3207     * Information about the [ValueSet/$expand](valueset-operation-expand.html) operation.
3208     */
3209    @Child(name = "expansion", type = {}, order=19, min=0, max=1, modifier=false, summary=false)
3210    @Description(shortDefinition="Information about the [ValueSet/$expand](valueset-operation-expand.html) operation", formalDefinition="Information about the [ValueSet/$expand](valueset-operation-expand.html) operation." )
3211    protected TerminologyCapabilitiesExpansionComponent expansion;
3212
3213    /**
3214     * The degree to which the server supports the code search parameter on ValueSet, if it is supported.
3215     */
3216    @Child(name = "codeSearch", type = {CodeType.class}, order=20, min=0, max=1, modifier=false, summary=false)
3217    @Description(shortDefinition="explicit | all", formalDefinition="The degree to which the server supports the code search parameter on ValueSet, if it is supported." )
3218    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/code-search-support")
3219    protected Enumeration<CodeSearchSupport> codeSearch;
3220
3221    /**
3222     * Information about the [ValueSet/$validate-code](valueset-operation-validate-code.html) operation.
3223     */
3224    @Child(name = "validateCode", type = {}, order=21, min=0, max=1, modifier=false, summary=false)
3225    @Description(shortDefinition="Information about the [ValueSet/$validate-code](valueset-operation-validate-code.html) operation", formalDefinition="Information about the [ValueSet/$validate-code](valueset-operation-validate-code.html) operation." )
3226    protected TerminologyCapabilitiesValidateCodeComponent validateCode;
3227
3228    /**
3229     * Information about the [ConceptMap/$translate](conceptmap-operation-translate.html) operation.
3230     */
3231    @Child(name = "translation", type = {}, order=22, min=0, max=1, modifier=false, summary=false)
3232    @Description(shortDefinition="Information about the [ConceptMap/$translate](conceptmap-operation-translate.html) operation", formalDefinition="Information about the [ConceptMap/$translate](conceptmap-operation-translate.html) operation." )
3233    protected TerminologyCapabilitiesTranslationComponent translation;
3234
3235    /**
3236     * Whether the $closure operation is supported.
3237     */
3238    @Child(name = "closure", type = {}, order=23, min=0, max=1, modifier=false, summary=false)
3239    @Description(shortDefinition="Information about the [ConceptMap/$closure](conceptmap-operation-closure.html) operation", formalDefinition="Whether the $closure operation is supported." )
3240    protected TerminologyCapabilitiesClosureComponent closure;
3241
3242    private static final long serialVersionUID = -471633367L;
3243
3244  /**
3245   * Constructor
3246   */
3247    public TerminologyCapabilities() {
3248      super();
3249    }
3250
3251  /**
3252   * Constructor
3253   */
3254    public TerminologyCapabilities(PublicationStatus status, Date date, CapabilityStatementKind kind) {
3255      super();
3256      this.setStatus(status);
3257      this.setDate(date);
3258      this.setKind(kind);
3259    }
3260
3261    /**
3262     * @return {@link #url} (An absolute URI that is used to identify this terminology capabilities 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 terminology capabilities is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the terminology capabilities is stored on different servers.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
3263     */
3264    public UriType getUrlElement() { 
3265      if (this.url == null)
3266        if (Configuration.errorOnAutoCreate())
3267          throw new Error("Attempt to auto-create TerminologyCapabilities.url");
3268        else if (Configuration.doAutoCreate())
3269          this.url = new UriType(); // bb
3270      return this.url;
3271    }
3272
3273    public boolean hasUrlElement() { 
3274      return this.url != null && !this.url.isEmpty();
3275    }
3276
3277    public boolean hasUrl() { 
3278      return this.url != null && !this.url.isEmpty();
3279    }
3280
3281    /**
3282     * @param value {@link #url} (An absolute URI that is used to identify this terminology capabilities 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 terminology capabilities is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the terminology capabilities is stored on different servers.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
3283     */
3284    public TerminologyCapabilities setUrlElement(UriType value) { 
3285      this.url = value;
3286      return this;
3287    }
3288
3289    /**
3290     * @return An absolute URI that is used to identify this terminology capabilities 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 terminology capabilities is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the terminology capabilities is stored on different servers.
3291     */
3292    public String getUrl() { 
3293      return this.url == null ? null : this.url.getValue();
3294    }
3295
3296    /**
3297     * @param value An absolute URI that is used to identify this terminology capabilities 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 terminology capabilities is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the terminology capabilities is stored on different servers.
3298     */
3299    public TerminologyCapabilities setUrl(String value) { 
3300      if (Utilities.noString(value))
3301        this.url = null;
3302      else {
3303        if (this.url == null)
3304          this.url = new UriType();
3305        this.url.setValue(value);
3306      }
3307      return this;
3308    }
3309
3310    /**
3311     * @return {@link #version} (The identifier that is used to identify this version of the terminology capabilities when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the terminology capabilities 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
3312     */
3313    public StringType getVersionElement() { 
3314      if (this.version == null)
3315        if (Configuration.errorOnAutoCreate())
3316          throw new Error("Attempt to auto-create TerminologyCapabilities.version");
3317        else if (Configuration.doAutoCreate())
3318          this.version = new StringType(); // bb
3319      return this.version;
3320    }
3321
3322    public boolean hasVersionElement() { 
3323      return this.version != null && !this.version.isEmpty();
3324    }
3325
3326    public boolean hasVersion() { 
3327      return this.version != null && !this.version.isEmpty();
3328    }
3329
3330    /**
3331     * @param value {@link #version} (The identifier that is used to identify this version of the terminology capabilities when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the terminology capabilities 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
3332     */
3333    public TerminologyCapabilities setVersionElement(StringType value) { 
3334      this.version = value;
3335      return this;
3336    }
3337
3338    /**
3339     * @return The identifier that is used to identify this version of the terminology capabilities when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the terminology capabilities 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.
3340     */
3341    public String getVersion() { 
3342      return this.version == null ? null : this.version.getValue();
3343    }
3344
3345    /**
3346     * @param value The identifier that is used to identify this version of the terminology capabilities when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the terminology capabilities 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.
3347     */
3348    public TerminologyCapabilities setVersion(String value) { 
3349      if (Utilities.noString(value))
3350        this.version = null;
3351      else {
3352        if (this.version == null)
3353          this.version = new StringType();
3354        this.version.setValue(value);
3355      }
3356      return this;
3357    }
3358
3359    /**
3360     * @return {@link #name} (A natural language name identifying the terminology capabilities. 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
3361     */
3362    public StringType getNameElement() { 
3363      if (this.name == null)
3364        if (Configuration.errorOnAutoCreate())
3365          throw new Error("Attempt to auto-create TerminologyCapabilities.name");
3366        else if (Configuration.doAutoCreate())
3367          this.name = new StringType(); // bb
3368      return this.name;
3369    }
3370
3371    public boolean hasNameElement() { 
3372      return this.name != null && !this.name.isEmpty();
3373    }
3374
3375    public boolean hasName() { 
3376      return this.name != null && !this.name.isEmpty();
3377    }
3378
3379    /**
3380     * @param value {@link #name} (A natural language name identifying the terminology capabilities. 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
3381     */
3382    public TerminologyCapabilities setNameElement(StringType value) { 
3383      this.name = value;
3384      return this;
3385    }
3386
3387    /**
3388     * @return A natural language name identifying the terminology capabilities. This name should be usable as an identifier for the module by machine processing applications such as code generation.
3389     */
3390    public String getName() { 
3391      return this.name == null ? null : this.name.getValue();
3392    }
3393
3394    /**
3395     * @param value A natural language name identifying the terminology capabilities. This name should be usable as an identifier for the module by machine processing applications such as code generation.
3396     */
3397    public TerminologyCapabilities setName(String value) { 
3398      if (Utilities.noString(value))
3399        this.name = null;
3400      else {
3401        if (this.name == null)
3402          this.name = new StringType();
3403        this.name.setValue(value);
3404      }
3405      return this;
3406    }
3407
3408    /**
3409     * @return {@link #title} (A short, descriptive, user-friendly title for the terminology capabilities.). This is the underlying object with id, value and extensions. The accessor "getTitle" gives direct access to the value
3410     */
3411    public StringType getTitleElement() { 
3412      if (this.title == null)
3413        if (Configuration.errorOnAutoCreate())
3414          throw new Error("Attempt to auto-create TerminologyCapabilities.title");
3415        else if (Configuration.doAutoCreate())
3416          this.title = new StringType(); // bb
3417      return this.title;
3418    }
3419
3420    public boolean hasTitleElement() { 
3421      return this.title != null && !this.title.isEmpty();
3422    }
3423
3424    public boolean hasTitle() { 
3425      return this.title != null && !this.title.isEmpty();
3426    }
3427
3428    /**
3429     * @param value {@link #title} (A short, descriptive, user-friendly title for the terminology capabilities.). This is the underlying object with id, value and extensions. The accessor "getTitle" gives direct access to the value
3430     */
3431    public TerminologyCapabilities setTitleElement(StringType value) { 
3432      this.title = value;
3433      return this;
3434    }
3435
3436    /**
3437     * @return A short, descriptive, user-friendly title for the terminology capabilities.
3438     */
3439    public String getTitle() { 
3440      return this.title == null ? null : this.title.getValue();
3441    }
3442
3443    /**
3444     * @param value A short, descriptive, user-friendly title for the terminology capabilities.
3445     */
3446    public TerminologyCapabilities setTitle(String value) { 
3447      if (Utilities.noString(value))
3448        this.title = null;
3449      else {
3450        if (this.title == null)
3451          this.title = new StringType();
3452        this.title.setValue(value);
3453      }
3454      return this;
3455    }
3456
3457    /**
3458     * @return {@link #status} (The status of this terminology capabilities. 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
3459     */
3460    public Enumeration<PublicationStatus> getStatusElement() { 
3461      if (this.status == null)
3462        if (Configuration.errorOnAutoCreate())
3463          throw new Error("Attempt to auto-create TerminologyCapabilities.status");
3464        else if (Configuration.doAutoCreate())
3465          this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory()); // bb
3466      return this.status;
3467    }
3468
3469    public boolean hasStatusElement() { 
3470      return this.status != null && !this.status.isEmpty();
3471    }
3472
3473    public boolean hasStatus() { 
3474      return this.status != null && !this.status.isEmpty();
3475    }
3476
3477    /**
3478     * @param value {@link #status} (The status of this terminology capabilities. 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
3479     */
3480    public TerminologyCapabilities setStatusElement(Enumeration<PublicationStatus> value) { 
3481      this.status = value;
3482      return this;
3483    }
3484
3485    /**
3486     * @return The status of this terminology capabilities. Enables tracking the life-cycle of the content.
3487     */
3488    public PublicationStatus getStatus() { 
3489      return this.status == null ? null : this.status.getValue();
3490    }
3491
3492    /**
3493     * @param value The status of this terminology capabilities. Enables tracking the life-cycle of the content.
3494     */
3495    public TerminologyCapabilities setStatus(PublicationStatus value) { 
3496        if (this.status == null)
3497          this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory());
3498        this.status.setValue(value);
3499      return this;
3500    }
3501
3502    /**
3503     * @return {@link #experimental} (A Boolean value to indicate that this terminology capabilities 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
3504     */
3505    public BooleanType getExperimentalElement() { 
3506      if (this.experimental == null)
3507        if (Configuration.errorOnAutoCreate())
3508          throw new Error("Attempt to auto-create TerminologyCapabilities.experimental");
3509        else if (Configuration.doAutoCreate())
3510          this.experimental = new BooleanType(); // bb
3511      return this.experimental;
3512    }
3513
3514    public boolean hasExperimentalElement() { 
3515      return this.experimental != null && !this.experimental.isEmpty();
3516    }
3517
3518    public boolean hasExperimental() { 
3519      return this.experimental != null && !this.experimental.isEmpty();
3520    }
3521
3522    /**
3523     * @param value {@link #experimental} (A Boolean value to indicate that this terminology capabilities 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
3524     */
3525    public TerminologyCapabilities setExperimentalElement(BooleanType value) { 
3526      this.experimental = value;
3527      return this;
3528    }
3529
3530    /**
3531     * @return A Boolean value to indicate that this terminology capabilities is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.
3532     */
3533    public boolean getExperimental() { 
3534      return this.experimental == null || this.experimental.isEmpty() ? false : this.experimental.getValue();
3535    }
3536
3537    /**
3538     * @param value A Boolean value to indicate that this terminology capabilities is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.
3539     */
3540    public TerminologyCapabilities setExperimental(boolean value) { 
3541        if (this.experimental == null)
3542          this.experimental = new BooleanType();
3543        this.experimental.setValue(value);
3544      return this;
3545    }
3546
3547    /**
3548     * @return {@link #date} (The date  (and optionally time) when the terminology capabilities 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 terminology capabilities changes.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
3549     */
3550    public DateTimeType getDateElement() { 
3551      if (this.date == null)
3552        if (Configuration.errorOnAutoCreate())
3553          throw new Error("Attempt to auto-create TerminologyCapabilities.date");
3554        else if (Configuration.doAutoCreate())
3555          this.date = new DateTimeType(); // bb
3556      return this.date;
3557    }
3558
3559    public boolean hasDateElement() { 
3560      return this.date != null && !this.date.isEmpty();
3561    }
3562
3563    public boolean hasDate() { 
3564      return this.date != null && !this.date.isEmpty();
3565    }
3566
3567    /**
3568     * @param value {@link #date} (The date  (and optionally time) when the terminology capabilities 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 terminology capabilities changes.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
3569     */
3570    public TerminologyCapabilities setDateElement(DateTimeType value) { 
3571      this.date = value;
3572      return this;
3573    }
3574
3575    /**
3576     * @return The date  (and optionally time) when the terminology capabilities 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 terminology capabilities changes.
3577     */
3578    public Date getDate() { 
3579      return this.date == null ? null : this.date.getValue();
3580    }
3581
3582    /**
3583     * @param value The date  (and optionally time) when the terminology capabilities 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 terminology capabilities changes.
3584     */
3585    public TerminologyCapabilities setDate(Date value) { 
3586        if (this.date == null)
3587          this.date = new DateTimeType();
3588        this.date.setValue(value);
3589      return this;
3590    }
3591
3592    /**
3593     * @return {@link #publisher} (The name of the organization or individual that published the terminology capabilities.). This is the underlying object with id, value and extensions. The accessor "getPublisher" gives direct access to the value
3594     */
3595    public StringType getPublisherElement() { 
3596      if (this.publisher == null)
3597        if (Configuration.errorOnAutoCreate())
3598          throw new Error("Attempt to auto-create TerminologyCapabilities.publisher");
3599        else if (Configuration.doAutoCreate())
3600          this.publisher = new StringType(); // bb
3601      return this.publisher;
3602    }
3603
3604    public boolean hasPublisherElement() { 
3605      return this.publisher != null && !this.publisher.isEmpty();
3606    }
3607
3608    public boolean hasPublisher() { 
3609      return this.publisher != null && !this.publisher.isEmpty();
3610    }
3611
3612    /**
3613     * @param value {@link #publisher} (The name of the organization or individual that published the terminology capabilities.). This is the underlying object with id, value and extensions. The accessor "getPublisher" gives direct access to the value
3614     */
3615    public TerminologyCapabilities setPublisherElement(StringType value) { 
3616      this.publisher = value;
3617      return this;
3618    }
3619
3620    /**
3621     * @return The name of the organization or individual that published the terminology capabilities.
3622     */
3623    public String getPublisher() { 
3624      return this.publisher == null ? null : this.publisher.getValue();
3625    }
3626
3627    /**
3628     * @param value The name of the organization or individual that published the terminology capabilities.
3629     */
3630    public TerminologyCapabilities setPublisher(String value) { 
3631      if (Utilities.noString(value))
3632        this.publisher = null;
3633      else {
3634        if (this.publisher == null)
3635          this.publisher = new StringType();
3636        this.publisher.setValue(value);
3637      }
3638      return this;
3639    }
3640
3641    /**
3642     * @return {@link #contact} (Contact details to assist a user in finding and communicating with the publisher.)
3643     */
3644    public List<ContactDetail> getContact() { 
3645      if (this.contact == null)
3646        this.contact = new ArrayList<ContactDetail>();
3647      return this.contact;
3648    }
3649
3650    /**
3651     * @return Returns a reference to <code>this</code> for easy method chaining
3652     */
3653    public TerminologyCapabilities setContact(List<ContactDetail> theContact) { 
3654      this.contact = theContact;
3655      return this;
3656    }
3657
3658    public boolean hasContact() { 
3659      if (this.contact == null)
3660        return false;
3661      for (ContactDetail item : this.contact)
3662        if (!item.isEmpty())
3663          return true;
3664      return false;
3665    }
3666
3667    public ContactDetail addContact() { //3
3668      ContactDetail t = new ContactDetail();
3669      if (this.contact == null)
3670        this.contact = new ArrayList<ContactDetail>();
3671      this.contact.add(t);
3672      return t;
3673    }
3674
3675    public TerminologyCapabilities addContact(ContactDetail t) { //3
3676      if (t == null)
3677        return this;
3678      if (this.contact == null)
3679        this.contact = new ArrayList<ContactDetail>();
3680      this.contact.add(t);
3681      return this;
3682    }
3683
3684    /**
3685     * @return The first repetition of repeating field {@link #contact}, creating it if it does not already exist {3}
3686     */
3687    public ContactDetail getContactFirstRep() { 
3688      if (getContact().isEmpty()) {
3689        addContact();
3690      }
3691      return getContact().get(0);
3692    }
3693
3694    /**
3695     * @return {@link #description} (A free text natural language description of the terminology capabilities from a consumer's perspective. Typically, this is used when the capability statement describes a desired rather than an actual solution, for example as a formal expression of requirements as part of an RFP.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
3696     */
3697    public MarkdownType getDescriptionElement() { 
3698      if (this.description == null)
3699        if (Configuration.errorOnAutoCreate())
3700          throw new Error("Attempt to auto-create TerminologyCapabilities.description");
3701        else if (Configuration.doAutoCreate())
3702          this.description = new MarkdownType(); // bb
3703      return this.description;
3704    }
3705
3706    public boolean hasDescriptionElement() { 
3707      return this.description != null && !this.description.isEmpty();
3708    }
3709
3710    public boolean hasDescription() { 
3711      return this.description != null && !this.description.isEmpty();
3712    }
3713
3714    /**
3715     * @param value {@link #description} (A free text natural language description of the terminology capabilities from a consumer's perspective. Typically, this is used when the capability statement describes a desired rather than an actual solution, for example as a formal expression of requirements as part of an RFP.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
3716     */
3717    public TerminologyCapabilities setDescriptionElement(MarkdownType value) { 
3718      this.description = value;
3719      return this;
3720    }
3721
3722    /**
3723     * @return A free text natural language description of the terminology capabilities from a consumer's perspective. Typically, this is used when the capability statement describes a desired rather than an actual solution, for example as a formal expression of requirements as part of an RFP.
3724     */
3725    public String getDescription() { 
3726      return this.description == null ? null : this.description.getValue();
3727    }
3728
3729    /**
3730     * @param value A free text natural language description of the terminology capabilities from a consumer's perspective. Typically, this is used when the capability statement describes a desired rather than an actual solution, for example as a formal expression of requirements as part of an RFP.
3731     */
3732    public TerminologyCapabilities setDescription(String value) { 
3733      if (value == null)
3734        this.description = null;
3735      else {
3736        if (this.description == null)
3737          this.description = new MarkdownType();
3738        this.description.setValue(value);
3739      }
3740      return this;
3741    }
3742
3743    /**
3744     * @return {@link #useContext} (The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate terminology capabilities instances.)
3745     */
3746    public List<UsageContext> getUseContext() { 
3747      if (this.useContext == null)
3748        this.useContext = new ArrayList<UsageContext>();
3749      return this.useContext;
3750    }
3751
3752    /**
3753     * @return Returns a reference to <code>this</code> for easy method chaining
3754     */
3755    public TerminologyCapabilities setUseContext(List<UsageContext> theUseContext) { 
3756      this.useContext = theUseContext;
3757      return this;
3758    }
3759
3760    public boolean hasUseContext() { 
3761      if (this.useContext == null)
3762        return false;
3763      for (UsageContext item : this.useContext)
3764        if (!item.isEmpty())
3765          return true;
3766      return false;
3767    }
3768
3769    public UsageContext addUseContext() { //3
3770      UsageContext t = new UsageContext();
3771      if (this.useContext == null)
3772        this.useContext = new ArrayList<UsageContext>();
3773      this.useContext.add(t);
3774      return t;
3775    }
3776
3777    public TerminologyCapabilities addUseContext(UsageContext t) { //3
3778      if (t == null)
3779        return this;
3780      if (this.useContext == null)
3781        this.useContext = new ArrayList<UsageContext>();
3782      this.useContext.add(t);
3783      return this;
3784    }
3785
3786    /**
3787     * @return The first repetition of repeating field {@link #useContext}, creating it if it does not already exist {3}
3788     */
3789    public UsageContext getUseContextFirstRep() { 
3790      if (getUseContext().isEmpty()) {
3791        addUseContext();
3792      }
3793      return getUseContext().get(0);
3794    }
3795
3796    /**
3797     * @return {@link #jurisdiction} (A legal or geographic region in which the terminology capabilities is intended to be used.)
3798     */
3799    public List<CodeableConcept> getJurisdiction() { 
3800      if (this.jurisdiction == null)
3801        this.jurisdiction = new ArrayList<CodeableConcept>();
3802      return this.jurisdiction;
3803    }
3804
3805    /**
3806     * @return Returns a reference to <code>this</code> for easy method chaining
3807     */
3808    public TerminologyCapabilities setJurisdiction(List<CodeableConcept> theJurisdiction) { 
3809      this.jurisdiction = theJurisdiction;
3810      return this;
3811    }
3812
3813    public boolean hasJurisdiction() { 
3814      if (this.jurisdiction == null)
3815        return false;
3816      for (CodeableConcept item : this.jurisdiction)
3817        if (!item.isEmpty())
3818          return true;
3819      return false;
3820    }
3821
3822    public CodeableConcept addJurisdiction() { //3
3823      CodeableConcept t = new CodeableConcept();
3824      if (this.jurisdiction == null)
3825        this.jurisdiction = new ArrayList<CodeableConcept>();
3826      this.jurisdiction.add(t);
3827      return t;
3828    }
3829
3830    public TerminologyCapabilities addJurisdiction(CodeableConcept t) { //3
3831      if (t == null)
3832        return this;
3833      if (this.jurisdiction == null)
3834        this.jurisdiction = new ArrayList<CodeableConcept>();
3835      this.jurisdiction.add(t);
3836      return this;
3837    }
3838
3839    /**
3840     * @return The first repetition of repeating field {@link #jurisdiction}, creating it if it does not already exist {3}
3841     */
3842    public CodeableConcept getJurisdictionFirstRep() { 
3843      if (getJurisdiction().isEmpty()) {
3844        addJurisdiction();
3845      }
3846      return getJurisdiction().get(0);
3847    }
3848
3849    /**
3850     * @return {@link #purpose} (Explanation of why this terminology capabilities 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
3851     */
3852    public MarkdownType getPurposeElement() { 
3853      if (this.purpose == null)
3854        if (Configuration.errorOnAutoCreate())
3855          throw new Error("Attempt to auto-create TerminologyCapabilities.purpose");
3856        else if (Configuration.doAutoCreate())
3857          this.purpose = new MarkdownType(); // bb
3858      return this.purpose;
3859    }
3860
3861    public boolean hasPurposeElement() { 
3862      return this.purpose != null && !this.purpose.isEmpty();
3863    }
3864
3865    public boolean hasPurpose() { 
3866      return this.purpose != null && !this.purpose.isEmpty();
3867    }
3868
3869    /**
3870     * @param value {@link #purpose} (Explanation of why this terminology capabilities 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
3871     */
3872    public TerminologyCapabilities setPurposeElement(MarkdownType value) { 
3873      this.purpose = value;
3874      return this;
3875    }
3876
3877    /**
3878     * @return Explanation of why this terminology capabilities is needed and why it has been designed as it has.
3879     */
3880    public String getPurpose() { 
3881      return this.purpose == null ? null : this.purpose.getValue();
3882    }
3883
3884    /**
3885     * @param value Explanation of why this terminology capabilities is needed and why it has been designed as it has.
3886     */
3887    public TerminologyCapabilities setPurpose(String value) { 
3888      if (value == null)
3889        this.purpose = null;
3890      else {
3891        if (this.purpose == null)
3892          this.purpose = new MarkdownType();
3893        this.purpose.setValue(value);
3894      }
3895      return this;
3896    }
3897
3898    /**
3899     * @return {@link #copyright} (A copyright statement relating to the terminology capabilities and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the terminology capabilities.). This is the underlying object with id, value and extensions. The accessor "getCopyright" gives direct access to the value
3900     */
3901    public MarkdownType getCopyrightElement() { 
3902      if (this.copyright == null)
3903        if (Configuration.errorOnAutoCreate())
3904          throw new Error("Attempt to auto-create TerminologyCapabilities.copyright");
3905        else if (Configuration.doAutoCreate())
3906          this.copyright = new MarkdownType(); // bb
3907      return this.copyright;
3908    }
3909
3910    public boolean hasCopyrightElement() { 
3911      return this.copyright != null && !this.copyright.isEmpty();
3912    }
3913
3914    public boolean hasCopyright() { 
3915      return this.copyright != null && !this.copyright.isEmpty();
3916    }
3917
3918    /**
3919     * @param value {@link #copyright} (A copyright statement relating to the terminology capabilities and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the terminology capabilities.). This is the underlying object with id, value and extensions. The accessor "getCopyright" gives direct access to the value
3920     */
3921    public TerminologyCapabilities setCopyrightElement(MarkdownType value) { 
3922      this.copyright = value;
3923      return this;
3924    }
3925
3926    /**
3927     * @return A copyright statement relating to the terminology capabilities and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the terminology capabilities.
3928     */
3929    public String getCopyright() { 
3930      return this.copyright == null ? null : this.copyright.getValue();
3931    }
3932
3933    /**
3934     * @param value A copyright statement relating to the terminology capabilities and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the terminology capabilities.
3935     */
3936    public TerminologyCapabilities setCopyright(String value) { 
3937      if (value == null)
3938        this.copyright = null;
3939      else {
3940        if (this.copyright == null)
3941          this.copyright = new MarkdownType();
3942        this.copyright.setValue(value);
3943      }
3944      return this;
3945    }
3946
3947    /**
3948     * @return {@link #kind} (The way that this statement is intended to be used, to describe an actual running instance of software, a particular product (kind, not instance of software) or a class of implementation (e.g. a desired purchase).). This is the underlying object with id, value and extensions. The accessor "getKind" gives direct access to the value
3949     */
3950    public Enumeration<CapabilityStatementKind> getKindElement() { 
3951      if (this.kind == null)
3952        if (Configuration.errorOnAutoCreate())
3953          throw new Error("Attempt to auto-create TerminologyCapabilities.kind");
3954        else if (Configuration.doAutoCreate())
3955          this.kind = new Enumeration<CapabilityStatementKind>(new CapabilityStatementKindEnumFactory()); // bb
3956      return this.kind;
3957    }
3958
3959    public boolean hasKindElement() { 
3960      return this.kind != null && !this.kind.isEmpty();
3961    }
3962
3963    public boolean hasKind() { 
3964      return this.kind != null && !this.kind.isEmpty();
3965    }
3966
3967    /**
3968     * @param value {@link #kind} (The way that this statement is intended to be used, to describe an actual running instance of software, a particular product (kind, not instance of software) or a class of implementation (e.g. a desired purchase).). This is the underlying object with id, value and extensions. The accessor "getKind" gives direct access to the value
3969     */
3970    public TerminologyCapabilities setKindElement(Enumeration<CapabilityStatementKind> value) { 
3971      this.kind = value;
3972      return this;
3973    }
3974
3975    /**
3976     * @return The way that this statement is intended to be used, to describe an actual running instance of software, a particular product (kind, not instance of software) or a class of implementation (e.g. a desired purchase).
3977     */
3978    public CapabilityStatementKind getKind() { 
3979      return this.kind == null ? null : this.kind.getValue();
3980    }
3981
3982    /**
3983     * @param value The way that this statement is intended to be used, to describe an actual running instance of software, a particular product (kind, not instance of software) or a class of implementation (e.g. a desired purchase).
3984     */
3985    public TerminologyCapabilities setKind(CapabilityStatementKind value) { 
3986        if (this.kind == null)
3987          this.kind = new Enumeration<CapabilityStatementKind>(new CapabilityStatementKindEnumFactory());
3988        this.kind.setValue(value);
3989      return this;
3990    }
3991
3992    /**
3993     * @return {@link #software} (Software that is covered by this terminology capability statement.  It is used when the statement describes the capabilities of a particular software version, independent of an installation.)
3994     */
3995    public TerminologyCapabilitiesSoftwareComponent getSoftware() { 
3996      if (this.software == null)
3997        if (Configuration.errorOnAutoCreate())
3998          throw new Error("Attempt to auto-create TerminologyCapabilities.software");
3999        else if (Configuration.doAutoCreate())
4000          this.software = new TerminologyCapabilitiesSoftwareComponent(); // cc
4001      return this.software;
4002    }
4003
4004    public boolean hasSoftware() { 
4005      return this.software != null && !this.software.isEmpty();
4006    }
4007
4008    /**
4009     * @param value {@link #software} (Software that is covered by this terminology capability statement.  It is used when the statement describes the capabilities of a particular software version, independent of an installation.)
4010     */
4011    public TerminologyCapabilities setSoftware(TerminologyCapabilitiesSoftwareComponent value) { 
4012      this.software = value;
4013      return this;
4014    }
4015
4016    /**
4017     * @return {@link #implementation} (Identifies a specific implementation instance that is described by the terminology capability statement - i.e. a particular installation, rather than the capabilities of a software program.)
4018     */
4019    public TerminologyCapabilitiesImplementationComponent getImplementation() { 
4020      if (this.implementation == null)
4021        if (Configuration.errorOnAutoCreate())
4022          throw new Error("Attempt to auto-create TerminologyCapabilities.implementation");
4023        else if (Configuration.doAutoCreate())
4024          this.implementation = new TerminologyCapabilitiesImplementationComponent(); // cc
4025      return this.implementation;
4026    }
4027
4028    public boolean hasImplementation() { 
4029      return this.implementation != null && !this.implementation.isEmpty();
4030    }
4031
4032    /**
4033     * @param value {@link #implementation} (Identifies a specific implementation instance that is described by the terminology capability statement - i.e. a particular installation, rather than the capabilities of a software program.)
4034     */
4035    public TerminologyCapabilities setImplementation(TerminologyCapabilitiesImplementationComponent value) { 
4036      this.implementation = value;
4037      return this;
4038    }
4039
4040    /**
4041     * @return {@link #lockedDate} (Whether the server supports lockedDate.). This is the underlying object with id, value and extensions. The accessor "getLockedDate" gives direct access to the value
4042     */
4043    public BooleanType getLockedDateElement() { 
4044      if (this.lockedDate == null)
4045        if (Configuration.errorOnAutoCreate())
4046          throw new Error("Attempt to auto-create TerminologyCapabilities.lockedDate");
4047        else if (Configuration.doAutoCreate())
4048          this.lockedDate = new BooleanType(); // bb
4049      return this.lockedDate;
4050    }
4051
4052    public boolean hasLockedDateElement() { 
4053      return this.lockedDate != null && !this.lockedDate.isEmpty();
4054    }
4055
4056    public boolean hasLockedDate() { 
4057      return this.lockedDate != null && !this.lockedDate.isEmpty();
4058    }
4059
4060    /**
4061     * @param value {@link #lockedDate} (Whether the server supports lockedDate.). This is the underlying object with id, value and extensions. The accessor "getLockedDate" gives direct access to the value
4062     */
4063    public TerminologyCapabilities setLockedDateElement(BooleanType value) { 
4064      this.lockedDate = value;
4065      return this;
4066    }
4067
4068    /**
4069     * @return Whether the server supports lockedDate.
4070     */
4071    public boolean getLockedDate() { 
4072      return this.lockedDate == null || this.lockedDate.isEmpty() ? false : this.lockedDate.getValue();
4073    }
4074
4075    /**
4076     * @param value Whether the server supports lockedDate.
4077     */
4078    public TerminologyCapabilities setLockedDate(boolean value) { 
4079        if (this.lockedDate == null)
4080          this.lockedDate = new BooleanType();
4081        this.lockedDate.setValue(value);
4082      return this;
4083    }
4084
4085    /**
4086     * @return {@link #codeSystem} (Identifies a code system that is supported by the server. If there is a no code system URL, then this declares the general assumptions a client can make about support for any CodeSystem resource.)
4087     */
4088    public List<TerminologyCapabilitiesCodeSystemComponent> getCodeSystem() { 
4089      if (this.codeSystem == null)
4090        this.codeSystem = new ArrayList<TerminologyCapabilitiesCodeSystemComponent>();
4091      return this.codeSystem;
4092    }
4093
4094    /**
4095     * @return Returns a reference to <code>this</code> for easy method chaining
4096     */
4097    public TerminologyCapabilities setCodeSystem(List<TerminologyCapabilitiesCodeSystemComponent> theCodeSystem) { 
4098      this.codeSystem = theCodeSystem;
4099      return this;
4100    }
4101
4102    public boolean hasCodeSystem() { 
4103      if (this.codeSystem == null)
4104        return false;
4105      for (TerminologyCapabilitiesCodeSystemComponent item : this.codeSystem)
4106        if (!item.isEmpty())
4107          return true;
4108      return false;
4109    }
4110
4111    public TerminologyCapabilitiesCodeSystemComponent addCodeSystem() { //3
4112      TerminologyCapabilitiesCodeSystemComponent t = new TerminologyCapabilitiesCodeSystemComponent();
4113      if (this.codeSystem == null)
4114        this.codeSystem = new ArrayList<TerminologyCapabilitiesCodeSystemComponent>();
4115      this.codeSystem.add(t);
4116      return t;
4117    }
4118
4119    public TerminologyCapabilities addCodeSystem(TerminologyCapabilitiesCodeSystemComponent t) { //3
4120      if (t == null)
4121        return this;
4122      if (this.codeSystem == null)
4123        this.codeSystem = new ArrayList<TerminologyCapabilitiesCodeSystemComponent>();
4124      this.codeSystem.add(t);
4125      return this;
4126    }
4127
4128    /**
4129     * @return The first repetition of repeating field {@link #codeSystem}, creating it if it does not already exist {3}
4130     */
4131    public TerminologyCapabilitiesCodeSystemComponent getCodeSystemFirstRep() { 
4132      if (getCodeSystem().isEmpty()) {
4133        addCodeSystem();
4134      }
4135      return getCodeSystem().get(0);
4136    }
4137
4138    /**
4139     * @return {@link #expansion} (Information about the [ValueSet/$expand](valueset-operation-expand.html) operation.)
4140     */
4141    public TerminologyCapabilitiesExpansionComponent getExpansion() { 
4142      if (this.expansion == null)
4143        if (Configuration.errorOnAutoCreate())
4144          throw new Error("Attempt to auto-create TerminologyCapabilities.expansion");
4145        else if (Configuration.doAutoCreate())
4146          this.expansion = new TerminologyCapabilitiesExpansionComponent(); // cc
4147      return this.expansion;
4148    }
4149
4150    public boolean hasExpansion() { 
4151      return this.expansion != null && !this.expansion.isEmpty();
4152    }
4153
4154    /**
4155     * @param value {@link #expansion} (Information about the [ValueSet/$expand](valueset-operation-expand.html) operation.)
4156     */
4157    public TerminologyCapabilities setExpansion(TerminologyCapabilitiesExpansionComponent value) { 
4158      this.expansion = value;
4159      return this;
4160    }
4161
4162    /**
4163     * @return {@link #codeSearch} (The degree to which the server supports the code search parameter on ValueSet, if it is supported.). This is the underlying object with id, value and extensions. The accessor "getCodeSearch" gives direct access to the value
4164     */
4165    public Enumeration<CodeSearchSupport> getCodeSearchElement() { 
4166      if (this.codeSearch == null)
4167        if (Configuration.errorOnAutoCreate())
4168          throw new Error("Attempt to auto-create TerminologyCapabilities.codeSearch");
4169        else if (Configuration.doAutoCreate())
4170          this.codeSearch = new Enumeration<CodeSearchSupport>(new CodeSearchSupportEnumFactory()); // bb
4171      return this.codeSearch;
4172    }
4173
4174    public boolean hasCodeSearchElement() { 
4175      return this.codeSearch != null && !this.codeSearch.isEmpty();
4176    }
4177
4178    public boolean hasCodeSearch() { 
4179      return this.codeSearch != null && !this.codeSearch.isEmpty();
4180    }
4181
4182    /**
4183     * @param value {@link #codeSearch} (The degree to which the server supports the code search parameter on ValueSet, if it is supported.). This is the underlying object with id, value and extensions. The accessor "getCodeSearch" gives direct access to the value
4184     */
4185    public TerminologyCapabilities setCodeSearchElement(Enumeration<CodeSearchSupport> value) { 
4186      this.codeSearch = value;
4187      return this;
4188    }
4189
4190    /**
4191     * @return The degree to which the server supports the code search parameter on ValueSet, if it is supported.
4192     */
4193    public CodeSearchSupport getCodeSearch() { 
4194      return this.codeSearch == null ? null : this.codeSearch.getValue();
4195    }
4196
4197    /**
4198     * @param value The degree to which the server supports the code search parameter on ValueSet, if it is supported.
4199     */
4200    public TerminologyCapabilities setCodeSearch(CodeSearchSupport value) { 
4201      if (value == null)
4202        this.codeSearch = null;
4203      else {
4204        if (this.codeSearch == null)
4205          this.codeSearch = new Enumeration<CodeSearchSupport>(new CodeSearchSupportEnumFactory());
4206        this.codeSearch.setValue(value);
4207      }
4208      return this;
4209    }
4210
4211    /**
4212     * @return {@link #validateCode} (Information about the [ValueSet/$validate-code](valueset-operation-validate-code.html) operation.)
4213     */
4214    public TerminologyCapabilitiesValidateCodeComponent getValidateCode() { 
4215      if (this.validateCode == null)
4216        if (Configuration.errorOnAutoCreate())
4217          throw new Error("Attempt to auto-create TerminologyCapabilities.validateCode");
4218        else if (Configuration.doAutoCreate())
4219          this.validateCode = new TerminologyCapabilitiesValidateCodeComponent(); // cc
4220      return this.validateCode;
4221    }
4222
4223    public boolean hasValidateCode() { 
4224      return this.validateCode != null && !this.validateCode.isEmpty();
4225    }
4226
4227    /**
4228     * @param value {@link #validateCode} (Information about the [ValueSet/$validate-code](valueset-operation-validate-code.html) operation.)
4229     */
4230    public TerminologyCapabilities setValidateCode(TerminologyCapabilitiesValidateCodeComponent value) { 
4231      this.validateCode = value;
4232      return this;
4233    }
4234
4235    /**
4236     * @return {@link #translation} (Information about the [ConceptMap/$translate](conceptmap-operation-translate.html) operation.)
4237     */
4238    public TerminologyCapabilitiesTranslationComponent getTranslation() { 
4239      if (this.translation == null)
4240        if (Configuration.errorOnAutoCreate())
4241          throw new Error("Attempt to auto-create TerminologyCapabilities.translation");
4242        else if (Configuration.doAutoCreate())
4243          this.translation = new TerminologyCapabilitiesTranslationComponent(); // cc
4244      return this.translation;
4245    }
4246
4247    public boolean hasTranslation() { 
4248      return this.translation != null && !this.translation.isEmpty();
4249    }
4250
4251    /**
4252     * @param value {@link #translation} (Information about the [ConceptMap/$translate](conceptmap-operation-translate.html) operation.)
4253     */
4254    public TerminologyCapabilities setTranslation(TerminologyCapabilitiesTranslationComponent value) { 
4255      this.translation = value;
4256      return this;
4257    }
4258
4259    /**
4260     * @return {@link #closure} (Whether the $closure operation is supported.)
4261     */
4262    public TerminologyCapabilitiesClosureComponent getClosure() { 
4263      if (this.closure == null)
4264        if (Configuration.errorOnAutoCreate())
4265          throw new Error("Attempt to auto-create TerminologyCapabilities.closure");
4266        else if (Configuration.doAutoCreate())
4267          this.closure = new TerminologyCapabilitiesClosureComponent(); // cc
4268      return this.closure;
4269    }
4270
4271    public boolean hasClosure() { 
4272      return this.closure != null && !this.closure.isEmpty();
4273    }
4274
4275    /**
4276     * @param value {@link #closure} (Whether the $closure operation is supported.)
4277     */
4278    public TerminologyCapabilities setClosure(TerminologyCapabilitiesClosureComponent value) { 
4279      this.closure = value;
4280      return this;
4281    }
4282
4283      protected void listChildren(List<Property> children) {
4284        super.listChildren(children);
4285        children.add(new Property("url", "uri", "An absolute URI that is used to identify this terminology capabilities 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 terminology capabilities is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the terminology capabilities is stored on different servers.", 0, 1, url));
4286        children.add(new Property("version", "string", "The identifier that is used to identify this version of the terminology capabilities when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the terminology capabilities 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));
4287        children.add(new Property("name", "string", "A natural language name identifying the terminology capabilities. This name should be usable as an identifier for the module by machine processing applications such as code generation.", 0, 1, name));
4288        children.add(new Property("title", "string", "A short, descriptive, user-friendly title for the terminology capabilities.", 0, 1, title));
4289        children.add(new Property("status", "code", "The status of this terminology capabilities. Enables tracking the life-cycle of the content.", 0, 1, status));
4290        children.add(new Property("experimental", "boolean", "A Boolean value to indicate that this terminology capabilities is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.", 0, 1, experimental));
4291        children.add(new Property("date", "dateTime", "The date  (and optionally time) when the terminology capabilities 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 terminology capabilities changes.", 0, 1, date));
4292        children.add(new Property("publisher", "string", "The name of the organization or individual that published the terminology capabilities.", 0, 1, publisher));
4293        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));
4294        children.add(new Property("description", "markdown", "A free text natural language description of the terminology capabilities from a consumer's perspective. Typically, this is used when the capability statement describes a desired rather than an actual solution, for example as a formal expression of requirements as part of an RFP.", 0, 1, description));
4295        children.add(new Property("useContext", "UsageContext", "The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate terminology capabilities instances.", 0, java.lang.Integer.MAX_VALUE, useContext));
4296        children.add(new Property("jurisdiction", "CodeableConcept", "A legal or geographic region in which the terminology capabilities is intended to be used.", 0, java.lang.Integer.MAX_VALUE, jurisdiction));
4297        children.add(new Property("purpose", "markdown", "Explanation of why this terminology capabilities is needed and why it has been designed as it has.", 0, 1, purpose));
4298        children.add(new Property("copyright", "markdown", "A copyright statement relating to the terminology capabilities and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the terminology capabilities.", 0, 1, copyright));
4299        children.add(new Property("kind", "code", "The way that this statement is intended to be used, to describe an actual running instance of software, a particular product (kind, not instance of software) or a class of implementation (e.g. a desired purchase).", 0, 1, kind));
4300        children.add(new Property("software", "", "Software that is covered by this terminology capability statement.  It is used when the statement describes the capabilities of a particular software version, independent of an installation.", 0, 1, software));
4301        children.add(new Property("implementation", "", "Identifies a specific implementation instance that is described by the terminology capability statement - i.e. a particular installation, rather than the capabilities of a software program.", 0, 1, implementation));
4302        children.add(new Property("lockedDate", "boolean", "Whether the server supports lockedDate.", 0, 1, lockedDate));
4303        children.add(new Property("codeSystem", "", "Identifies a code system that is supported by the server. If there is a no code system URL, then this declares the general assumptions a client can make about support for any CodeSystem resource.", 0, java.lang.Integer.MAX_VALUE, codeSystem));
4304        children.add(new Property("expansion", "", "Information about the [ValueSet/$expand](valueset-operation-expand.html) operation.", 0, 1, expansion));
4305        children.add(new Property("codeSearch", "code", "The degree to which the server supports the code search parameter on ValueSet, if it is supported.", 0, 1, codeSearch));
4306        children.add(new Property("validateCode", "", "Information about the [ValueSet/$validate-code](valueset-operation-validate-code.html) operation.", 0, 1, validateCode));
4307        children.add(new Property("translation", "", "Information about the [ConceptMap/$translate](conceptmap-operation-translate.html) operation.", 0, 1, translation));
4308        children.add(new Property("closure", "", "Whether the $closure operation is supported.", 0, 1, closure));
4309      }
4310
4311      @Override
4312      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
4313        switch (_hash) {
4314        case 116079: /*url*/  return new Property("url", "uri", "An absolute URI that is used to identify this terminology capabilities 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 terminology capabilities is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the terminology capabilities is stored on different servers.", 0, 1, url);
4315        case 351608024: /*version*/  return new Property("version", "string", "The identifier that is used to identify this version of the terminology capabilities when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the terminology capabilities 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);
4316        case 3373707: /*name*/  return new Property("name", "string", "A natural language name identifying the terminology capabilities. This name should be usable as an identifier for the module by machine processing applications such as code generation.", 0, 1, name);
4317        case 110371416: /*title*/  return new Property("title", "string", "A short, descriptive, user-friendly title for the terminology capabilities.", 0, 1, title);
4318        case -892481550: /*status*/  return new Property("status", "code", "The status of this terminology capabilities. Enables tracking the life-cycle of the content.", 0, 1, status);
4319        case -404562712: /*experimental*/  return new Property("experimental", "boolean", "A Boolean value to indicate that this terminology capabilities is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.", 0, 1, experimental);
4320        case 3076014: /*date*/  return new Property("date", "dateTime", "The date  (and optionally time) when the terminology capabilities 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 terminology capabilities changes.", 0, 1, date);
4321        case 1447404028: /*publisher*/  return new Property("publisher", "string", "The name of the organization or individual that published the terminology capabilities.", 0, 1, publisher);
4322        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);
4323        case -1724546052: /*description*/  return new Property("description", "markdown", "A free text natural language description of the terminology capabilities from a consumer's perspective. Typically, this is used when the capability statement describes a desired rather than an actual solution, for example as a formal expression of requirements as part of an RFP.", 0, 1, description);
4324        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 contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate terminology capabilities instances.", 0, java.lang.Integer.MAX_VALUE, useContext);
4325        case -507075711: /*jurisdiction*/  return new Property("jurisdiction", "CodeableConcept", "A legal or geographic region in which the terminology capabilities is intended to be used.", 0, java.lang.Integer.MAX_VALUE, jurisdiction);
4326        case -220463842: /*purpose*/  return new Property("purpose", "markdown", "Explanation of why this terminology capabilities is needed and why it has been designed as it has.", 0, 1, purpose);
4327        case 1522889671: /*copyright*/  return new Property("copyright", "markdown", "A copyright statement relating to the terminology capabilities and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the terminology capabilities.", 0, 1, copyright);
4328        case 3292052: /*kind*/  return new Property("kind", "code", "The way that this statement is intended to be used, to describe an actual running instance of software, a particular product (kind, not instance of software) or a class of implementation (e.g. a desired purchase).", 0, 1, kind);
4329        case 1319330215: /*software*/  return new Property("software", "", "Software that is covered by this terminology capability statement.  It is used when the statement describes the capabilities of a particular software version, independent of an installation.", 0, 1, software);
4330        case 1683336114: /*implementation*/  return new Property("implementation", "", "Identifies a specific implementation instance that is described by the terminology capability statement - i.e. a particular installation, rather than the capabilities of a software program.", 0, 1, implementation);
4331        case 1391591896: /*lockedDate*/  return new Property("lockedDate", "boolean", "Whether the server supports lockedDate.", 0, 1, lockedDate);
4332        case -916511108: /*codeSystem*/  return new Property("codeSystem", "", "Identifies a code system that is supported by the server. If there is a no code system URL, then this declares the general assumptions a client can make about support for any CodeSystem resource.", 0, java.lang.Integer.MAX_VALUE, codeSystem);
4333        case 17878207: /*expansion*/  return new Property("expansion", "", "Information about the [ValueSet/$expand](valueset-operation-expand.html) operation.", 0, 1, expansion);
4334        case -935519755: /*codeSearch*/  return new Property("codeSearch", "code", "The degree to which the server supports the code search parameter on ValueSet, if it is supported.", 0, 1, codeSearch);
4335        case 1080737827: /*validateCode*/  return new Property("validateCode", "", "Information about the [ValueSet/$validate-code](valueset-operation-validate-code.html) operation.", 0, 1, validateCode);
4336        case -1840647503: /*translation*/  return new Property("translation", "", "Information about the [ConceptMap/$translate](conceptmap-operation-translate.html) operation.", 0, 1, translation);
4337        case 866552379: /*closure*/  return new Property("closure", "", "Whether the $closure operation is supported.", 0, 1, closure);
4338        default: return super.getNamedProperty(_hash, _name, _checkValid);
4339        }
4340
4341      }
4342
4343      @Override
4344      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
4345        switch (hash) {
4346        case 116079: /*url*/ return this.url == null ? new Base[0] : new Base[] {this.url}; // UriType
4347        case 351608024: /*version*/ return this.version == null ? new Base[0] : new Base[] {this.version}; // StringType
4348        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // StringType
4349        case 110371416: /*title*/ return this.title == null ? new Base[0] : new Base[] {this.title}; // StringType
4350        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<PublicationStatus>
4351        case -404562712: /*experimental*/ return this.experimental == null ? new Base[0] : new Base[] {this.experimental}; // BooleanType
4352        case 3076014: /*date*/ return this.date == null ? new Base[0] : new Base[] {this.date}; // DateTimeType
4353        case 1447404028: /*publisher*/ return this.publisher == null ? new Base[0] : new Base[] {this.publisher}; // StringType
4354        case 951526432: /*contact*/ return this.contact == null ? new Base[0] : this.contact.toArray(new Base[this.contact.size()]); // ContactDetail
4355        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // MarkdownType
4356        case -669707736: /*useContext*/ return this.useContext == null ? new Base[0] : this.useContext.toArray(new Base[this.useContext.size()]); // UsageContext
4357        case -507075711: /*jurisdiction*/ return this.jurisdiction == null ? new Base[0] : this.jurisdiction.toArray(new Base[this.jurisdiction.size()]); // CodeableConcept
4358        case -220463842: /*purpose*/ return this.purpose == null ? new Base[0] : new Base[] {this.purpose}; // MarkdownType
4359        case 1522889671: /*copyright*/ return this.copyright == null ? new Base[0] : new Base[] {this.copyright}; // MarkdownType
4360        case 3292052: /*kind*/ return this.kind == null ? new Base[0] : new Base[] {this.kind}; // Enumeration<CapabilityStatementKind>
4361        case 1319330215: /*software*/ return this.software == null ? new Base[0] : new Base[] {this.software}; // TerminologyCapabilitiesSoftwareComponent
4362        case 1683336114: /*implementation*/ return this.implementation == null ? new Base[0] : new Base[] {this.implementation}; // TerminologyCapabilitiesImplementationComponent
4363        case 1391591896: /*lockedDate*/ return this.lockedDate == null ? new Base[0] : new Base[] {this.lockedDate}; // BooleanType
4364        case -916511108: /*codeSystem*/ return this.codeSystem == null ? new Base[0] : this.codeSystem.toArray(new Base[this.codeSystem.size()]); // TerminologyCapabilitiesCodeSystemComponent
4365        case 17878207: /*expansion*/ return this.expansion == null ? new Base[0] : new Base[] {this.expansion}; // TerminologyCapabilitiesExpansionComponent
4366        case -935519755: /*codeSearch*/ return this.codeSearch == null ? new Base[0] : new Base[] {this.codeSearch}; // Enumeration<CodeSearchSupport>
4367        case 1080737827: /*validateCode*/ return this.validateCode == null ? new Base[0] : new Base[] {this.validateCode}; // TerminologyCapabilitiesValidateCodeComponent
4368        case -1840647503: /*translation*/ return this.translation == null ? new Base[0] : new Base[] {this.translation}; // TerminologyCapabilitiesTranslationComponent
4369        case 866552379: /*closure*/ return this.closure == null ? new Base[0] : new Base[] {this.closure}; // TerminologyCapabilitiesClosureComponent
4370        default: return super.getProperty(hash, name, checkValid);
4371        }
4372
4373      }
4374
4375      @Override
4376      public Base setProperty(int hash, String name, Base value) throws FHIRException {
4377        switch (hash) {
4378        case 116079: // url
4379          this.url = TypeConvertor.castToUri(value); // UriType
4380          return value;
4381        case 351608024: // version
4382          this.version = TypeConvertor.castToString(value); // StringType
4383          return value;
4384        case 3373707: // name
4385          this.name = TypeConvertor.castToString(value); // StringType
4386          return value;
4387        case 110371416: // title
4388          this.title = TypeConvertor.castToString(value); // StringType
4389          return value;
4390        case -892481550: // status
4391          value = new PublicationStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
4392          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
4393          return value;
4394        case -404562712: // experimental
4395          this.experimental = TypeConvertor.castToBoolean(value); // BooleanType
4396          return value;
4397        case 3076014: // date
4398          this.date = TypeConvertor.castToDateTime(value); // DateTimeType
4399          return value;
4400        case 1447404028: // publisher
4401          this.publisher = TypeConvertor.castToString(value); // StringType
4402          return value;
4403        case 951526432: // contact
4404          this.getContact().add(TypeConvertor.castToContactDetail(value)); // ContactDetail
4405          return value;
4406        case -1724546052: // description
4407          this.description = TypeConvertor.castToMarkdown(value); // MarkdownType
4408          return value;
4409        case -669707736: // useContext
4410          this.getUseContext().add(TypeConvertor.castToUsageContext(value)); // UsageContext
4411          return value;
4412        case -507075711: // jurisdiction
4413          this.getJurisdiction().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
4414          return value;
4415        case -220463842: // purpose
4416          this.purpose = TypeConvertor.castToMarkdown(value); // MarkdownType
4417          return value;
4418        case 1522889671: // copyright
4419          this.copyright = TypeConvertor.castToMarkdown(value); // MarkdownType
4420          return value;
4421        case 3292052: // kind
4422          value = new CapabilityStatementKindEnumFactory().fromType(TypeConvertor.castToCode(value));
4423          this.kind = (Enumeration) value; // Enumeration<CapabilityStatementKind>
4424          return value;
4425        case 1319330215: // software
4426          this.software = (TerminologyCapabilitiesSoftwareComponent) value; // TerminologyCapabilitiesSoftwareComponent
4427          return value;
4428        case 1683336114: // implementation
4429          this.implementation = (TerminologyCapabilitiesImplementationComponent) value; // TerminologyCapabilitiesImplementationComponent
4430          return value;
4431        case 1391591896: // lockedDate
4432          this.lockedDate = TypeConvertor.castToBoolean(value); // BooleanType
4433          return value;
4434        case -916511108: // codeSystem
4435          this.getCodeSystem().add((TerminologyCapabilitiesCodeSystemComponent) value); // TerminologyCapabilitiesCodeSystemComponent
4436          return value;
4437        case 17878207: // expansion
4438          this.expansion = (TerminologyCapabilitiesExpansionComponent) value; // TerminologyCapabilitiesExpansionComponent
4439          return value;
4440        case -935519755: // codeSearch
4441          value = new CodeSearchSupportEnumFactory().fromType(TypeConvertor.castToCode(value));
4442          this.codeSearch = (Enumeration) value; // Enumeration<CodeSearchSupport>
4443          return value;
4444        case 1080737827: // validateCode
4445          this.validateCode = (TerminologyCapabilitiesValidateCodeComponent) value; // TerminologyCapabilitiesValidateCodeComponent
4446          return value;
4447        case -1840647503: // translation
4448          this.translation = (TerminologyCapabilitiesTranslationComponent) value; // TerminologyCapabilitiesTranslationComponent
4449          return value;
4450        case 866552379: // closure
4451          this.closure = (TerminologyCapabilitiesClosureComponent) value; // TerminologyCapabilitiesClosureComponent
4452          return value;
4453        default: return super.setProperty(hash, name, value);
4454        }
4455
4456      }
4457
4458      @Override
4459      public Base setProperty(String name, Base value) throws FHIRException {
4460        if (name.equals("url")) {
4461          this.url = TypeConvertor.castToUri(value); // UriType
4462        } else if (name.equals("version")) {
4463          this.version = TypeConvertor.castToString(value); // StringType
4464        } else if (name.equals("name")) {
4465          this.name = TypeConvertor.castToString(value); // StringType
4466        } else if (name.equals("title")) {
4467          this.title = TypeConvertor.castToString(value); // StringType
4468        } else if (name.equals("status")) {
4469          value = new PublicationStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
4470          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
4471        } else if (name.equals("experimental")) {
4472          this.experimental = TypeConvertor.castToBoolean(value); // BooleanType
4473        } else if (name.equals("date")) {
4474          this.date = TypeConvertor.castToDateTime(value); // DateTimeType
4475        } else if (name.equals("publisher")) {
4476          this.publisher = TypeConvertor.castToString(value); // StringType
4477        } else if (name.equals("contact")) {
4478          this.getContact().add(TypeConvertor.castToContactDetail(value));
4479        } else if (name.equals("description")) {
4480          this.description = TypeConvertor.castToMarkdown(value); // MarkdownType
4481        } else if (name.equals("useContext")) {
4482          this.getUseContext().add(TypeConvertor.castToUsageContext(value));
4483        } else if (name.equals("jurisdiction")) {
4484          this.getJurisdiction().add(TypeConvertor.castToCodeableConcept(value));
4485        } else if (name.equals("purpose")) {
4486          this.purpose = TypeConvertor.castToMarkdown(value); // MarkdownType
4487        } else if (name.equals("copyright")) {
4488          this.copyright = TypeConvertor.castToMarkdown(value); // MarkdownType
4489        } else if (name.equals("kind")) {
4490          value = new CapabilityStatementKindEnumFactory().fromType(TypeConvertor.castToCode(value));
4491          this.kind = (Enumeration) value; // Enumeration<CapabilityStatementKind>
4492        } else if (name.equals("software")) {
4493          this.software = (TerminologyCapabilitiesSoftwareComponent) value; // TerminologyCapabilitiesSoftwareComponent
4494        } else if (name.equals("implementation")) {
4495          this.implementation = (TerminologyCapabilitiesImplementationComponent) value; // TerminologyCapabilitiesImplementationComponent
4496        } else if (name.equals("lockedDate")) {
4497          this.lockedDate = TypeConvertor.castToBoolean(value); // BooleanType
4498        } else if (name.equals("codeSystem")) {
4499          this.getCodeSystem().add((TerminologyCapabilitiesCodeSystemComponent) value);
4500        } else if (name.equals("expansion")) {
4501          this.expansion = (TerminologyCapabilitiesExpansionComponent) value; // TerminologyCapabilitiesExpansionComponent
4502        } else if (name.equals("codeSearch")) {
4503          value = new CodeSearchSupportEnumFactory().fromType(TypeConvertor.castToCode(value));
4504          this.codeSearch = (Enumeration) value; // Enumeration<CodeSearchSupport>
4505        } else if (name.equals("validateCode")) {
4506          this.validateCode = (TerminologyCapabilitiesValidateCodeComponent) value; // TerminologyCapabilitiesValidateCodeComponent
4507        } else if (name.equals("translation")) {
4508          this.translation = (TerminologyCapabilitiesTranslationComponent) value; // TerminologyCapabilitiesTranslationComponent
4509        } else if (name.equals("closure")) {
4510          this.closure = (TerminologyCapabilitiesClosureComponent) value; // TerminologyCapabilitiesClosureComponent
4511        } else
4512          return super.setProperty(name, value);
4513        return value;
4514      }
4515
4516      @Override
4517      public Base makeProperty(int hash, String name) throws FHIRException {
4518        switch (hash) {
4519        case 116079:  return getUrlElement();
4520        case 351608024:  return getVersionElement();
4521        case 3373707:  return getNameElement();
4522        case 110371416:  return getTitleElement();
4523        case -892481550:  return getStatusElement();
4524        case -404562712:  return getExperimentalElement();
4525        case 3076014:  return getDateElement();
4526        case 1447404028:  return getPublisherElement();
4527        case 951526432:  return addContact(); 
4528        case -1724546052:  return getDescriptionElement();
4529        case -669707736:  return addUseContext(); 
4530        case -507075711:  return addJurisdiction(); 
4531        case -220463842:  return getPurposeElement();
4532        case 1522889671:  return getCopyrightElement();
4533        case 3292052:  return getKindElement();
4534        case 1319330215:  return getSoftware();
4535        case 1683336114:  return getImplementation();
4536        case 1391591896:  return getLockedDateElement();
4537        case -916511108:  return addCodeSystem(); 
4538        case 17878207:  return getExpansion();
4539        case -935519755:  return getCodeSearchElement();
4540        case 1080737827:  return getValidateCode();
4541        case -1840647503:  return getTranslation();
4542        case 866552379:  return getClosure();
4543        default: return super.makeProperty(hash, name);
4544        }
4545
4546      }
4547
4548      @Override
4549      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
4550        switch (hash) {
4551        case 116079: /*url*/ return new String[] {"uri"};
4552        case 351608024: /*version*/ return new String[] {"string"};
4553        case 3373707: /*name*/ return new String[] {"string"};
4554        case 110371416: /*title*/ return new String[] {"string"};
4555        case -892481550: /*status*/ return new String[] {"code"};
4556        case -404562712: /*experimental*/ return new String[] {"boolean"};
4557        case 3076014: /*date*/ return new String[] {"dateTime"};
4558        case 1447404028: /*publisher*/ return new String[] {"string"};
4559        case 951526432: /*contact*/ return new String[] {"ContactDetail"};
4560        case -1724546052: /*description*/ return new String[] {"markdown"};
4561        case -669707736: /*useContext*/ return new String[] {"UsageContext"};
4562        case -507075711: /*jurisdiction*/ return new String[] {"CodeableConcept"};
4563        case -220463842: /*purpose*/ return new String[] {"markdown"};
4564        case 1522889671: /*copyright*/ return new String[] {"markdown"};
4565        case 3292052: /*kind*/ return new String[] {"code"};
4566        case 1319330215: /*software*/ return new String[] {};
4567        case 1683336114: /*implementation*/ return new String[] {};
4568        case 1391591896: /*lockedDate*/ return new String[] {"boolean"};
4569        case -916511108: /*codeSystem*/ return new String[] {};
4570        case 17878207: /*expansion*/ return new String[] {};
4571        case -935519755: /*codeSearch*/ return new String[] {"code"};
4572        case 1080737827: /*validateCode*/ return new String[] {};
4573        case -1840647503: /*translation*/ return new String[] {};
4574        case 866552379: /*closure*/ return new String[] {};
4575        default: return super.getTypesForProperty(hash, name);
4576        }
4577
4578      }
4579
4580      @Override
4581      public Base addChild(String name) throws FHIRException {
4582        if (name.equals("url")) {
4583          throw new FHIRException("Cannot call addChild on a primitive type TerminologyCapabilities.url");
4584        }
4585        else if (name.equals("version")) {
4586          throw new FHIRException("Cannot call addChild on a primitive type TerminologyCapabilities.version");
4587        }
4588        else if (name.equals("name")) {
4589          throw new FHIRException("Cannot call addChild on a primitive type TerminologyCapabilities.name");
4590        }
4591        else if (name.equals("title")) {
4592          throw new FHIRException("Cannot call addChild on a primitive type TerminologyCapabilities.title");
4593        }
4594        else if (name.equals("status")) {
4595          throw new FHIRException("Cannot call addChild on a primitive type TerminologyCapabilities.status");
4596        }
4597        else if (name.equals("experimental")) {
4598          throw new FHIRException("Cannot call addChild on a primitive type TerminologyCapabilities.experimental");
4599        }
4600        else if (name.equals("date")) {
4601          throw new FHIRException("Cannot call addChild on a primitive type TerminologyCapabilities.date");
4602        }
4603        else if (name.equals("publisher")) {
4604          throw new FHIRException("Cannot call addChild on a primitive type TerminologyCapabilities.publisher");
4605        }
4606        else if (name.equals("contact")) {
4607          return addContact();
4608        }
4609        else if (name.equals("description")) {
4610          throw new FHIRException("Cannot call addChild on a primitive type TerminologyCapabilities.description");
4611        }
4612        else if (name.equals("useContext")) {
4613          return addUseContext();
4614        }
4615        else if (name.equals("jurisdiction")) {
4616          return addJurisdiction();
4617        }
4618        else if (name.equals("purpose")) {
4619          throw new FHIRException("Cannot call addChild on a primitive type TerminologyCapabilities.purpose");
4620        }
4621        else if (name.equals("copyright")) {
4622          throw new FHIRException("Cannot call addChild on a primitive type TerminologyCapabilities.copyright");
4623        }
4624        else if (name.equals("kind")) {
4625          throw new FHIRException("Cannot call addChild on a primitive type TerminologyCapabilities.kind");
4626        }
4627        else if (name.equals("software")) {
4628          this.software = new TerminologyCapabilitiesSoftwareComponent();
4629          return this.software;
4630        }
4631        else if (name.equals("implementation")) {
4632          this.implementation = new TerminologyCapabilitiesImplementationComponent();
4633          return this.implementation;
4634        }
4635        else if (name.equals("lockedDate")) {
4636          throw new FHIRException("Cannot call addChild on a primitive type TerminologyCapabilities.lockedDate");
4637        }
4638        else if (name.equals("codeSystem")) {
4639          return addCodeSystem();
4640        }
4641        else if (name.equals("expansion")) {
4642          this.expansion = new TerminologyCapabilitiesExpansionComponent();
4643          return this.expansion;
4644        }
4645        else if (name.equals("codeSearch")) {
4646          throw new FHIRException("Cannot call addChild on a primitive type TerminologyCapabilities.codeSearch");
4647        }
4648        else if (name.equals("validateCode")) {
4649          this.validateCode = new TerminologyCapabilitiesValidateCodeComponent();
4650          return this.validateCode;
4651        }
4652        else if (name.equals("translation")) {
4653          this.translation = new TerminologyCapabilitiesTranslationComponent();
4654          return this.translation;
4655        }
4656        else if (name.equals("closure")) {
4657          this.closure = new TerminologyCapabilitiesClosureComponent();
4658          return this.closure;
4659        }
4660        else
4661          return super.addChild(name);
4662      }
4663
4664  public String fhirType() {
4665    return "TerminologyCapabilities";
4666
4667  }
4668
4669      public TerminologyCapabilities copy() {
4670        TerminologyCapabilities dst = new TerminologyCapabilities();
4671        copyValues(dst);
4672        return dst;
4673      }
4674
4675      public void copyValues(TerminologyCapabilities dst) {
4676        super.copyValues(dst);
4677        dst.url = url == null ? null : url.copy();
4678        dst.version = version == null ? null : version.copy();
4679        dst.name = name == null ? null : name.copy();
4680        dst.title = title == null ? null : title.copy();
4681        dst.status = status == null ? null : status.copy();
4682        dst.experimental = experimental == null ? null : experimental.copy();
4683        dst.date = date == null ? null : date.copy();
4684        dst.publisher = publisher == null ? null : publisher.copy();
4685        if (contact != null) {
4686          dst.contact = new ArrayList<ContactDetail>();
4687          for (ContactDetail i : contact)
4688            dst.contact.add(i.copy());
4689        };
4690        dst.description = description == null ? null : description.copy();
4691        if (useContext != null) {
4692          dst.useContext = new ArrayList<UsageContext>();
4693          for (UsageContext i : useContext)
4694            dst.useContext.add(i.copy());
4695        };
4696        if (jurisdiction != null) {
4697          dst.jurisdiction = new ArrayList<CodeableConcept>();
4698          for (CodeableConcept i : jurisdiction)
4699            dst.jurisdiction.add(i.copy());
4700        };
4701        dst.purpose = purpose == null ? null : purpose.copy();
4702        dst.copyright = copyright == null ? null : copyright.copy();
4703        dst.kind = kind == null ? null : kind.copy();
4704        dst.software = software == null ? null : software.copy();
4705        dst.implementation = implementation == null ? null : implementation.copy();
4706        dst.lockedDate = lockedDate == null ? null : lockedDate.copy();
4707        if (codeSystem != null) {
4708          dst.codeSystem = new ArrayList<TerminologyCapabilitiesCodeSystemComponent>();
4709          for (TerminologyCapabilitiesCodeSystemComponent i : codeSystem)
4710            dst.codeSystem.add(i.copy());
4711        };
4712        dst.expansion = expansion == null ? null : expansion.copy();
4713        dst.codeSearch = codeSearch == null ? null : codeSearch.copy();
4714        dst.validateCode = validateCode == null ? null : validateCode.copy();
4715        dst.translation = translation == null ? null : translation.copy();
4716        dst.closure = closure == null ? null : closure.copy();
4717      }
4718
4719      protected TerminologyCapabilities typedCopy() {
4720        return copy();
4721      }
4722
4723      @Override
4724      public boolean equalsDeep(Base other_) {
4725        if (!super.equalsDeep(other_))
4726          return false;
4727        if (!(other_ instanceof TerminologyCapabilities))
4728          return false;
4729        TerminologyCapabilities o = (TerminologyCapabilities) other_;
4730        return compareDeep(url, o.url, true) && compareDeep(version, o.version, true) && compareDeep(name, o.name, true)
4731           && compareDeep(title, o.title, true) && compareDeep(status, o.status, true) && compareDeep(experimental, o.experimental, true)
4732           && compareDeep(date, o.date, true) && compareDeep(publisher, o.publisher, true) && compareDeep(contact, o.contact, true)
4733           && compareDeep(description, o.description, true) && compareDeep(useContext, o.useContext, true)
4734           && compareDeep(jurisdiction, o.jurisdiction, true) && compareDeep(purpose, o.purpose, true) && compareDeep(copyright, o.copyright, true)
4735           && compareDeep(kind, o.kind, true) && compareDeep(software, o.software, true) && compareDeep(implementation, o.implementation, true)
4736           && compareDeep(lockedDate, o.lockedDate, true) && compareDeep(codeSystem, o.codeSystem, true) && compareDeep(expansion, o.expansion, true)
4737           && compareDeep(codeSearch, o.codeSearch, true) && compareDeep(validateCode, o.validateCode, true)
4738           && compareDeep(translation, o.translation, true) && compareDeep(closure, o.closure, true);
4739      }
4740
4741      @Override
4742      public boolean equalsShallow(Base other_) {
4743        if (!super.equalsShallow(other_))
4744          return false;
4745        if (!(other_ instanceof TerminologyCapabilities))
4746          return false;
4747        TerminologyCapabilities o = (TerminologyCapabilities) other_;
4748        return compareValues(url, o.url, true) && compareValues(version, o.version, true) && compareValues(name, o.name, true)
4749           && compareValues(title, o.title, true) && compareValues(status, o.status, true) && compareValues(experimental, o.experimental, true)
4750           && compareValues(date, o.date, true) && compareValues(publisher, o.publisher, true) && compareValues(description, o.description, true)
4751           && compareValues(purpose, o.purpose, true) && compareValues(copyright, o.copyright, true) && compareValues(kind, o.kind, true)
4752           && compareValues(lockedDate, o.lockedDate, true) && compareValues(codeSearch, o.codeSearch, true);
4753      }
4754
4755      public boolean isEmpty() {
4756        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(url, version, name, title
4757          , status, experimental, date, publisher, contact, description, useContext, jurisdiction
4758          , purpose, copyright, kind, software, implementation, lockedDate, codeSystem, expansion
4759          , codeSearch, validateCode, translation, closure);
4760      }
4761
4762  @Override
4763  public ResourceType getResourceType() {
4764    return ResourceType.TerminologyCapabilities;
4765   }
4766
4767  @Override
4768  public List<Identifier> getIdentifier() {
4769    return new ArrayList<>();
4770  }
4771
4772  @Override
4773  public CanonicalResource setIdentifier(List<Identifier> theIdentifier) {
4774    return this;
4775  }
4776
4777  @Override
4778  public boolean hasIdentifier() {
4779    return false;
4780  }
4781
4782  @Override
4783  public Identifier addIdentifier() {
4784    return null;
4785  }
4786
4787  @Override
4788  public CanonicalResource addIdentifier(Identifier t) {
4789    return this;
4790  }
4791
4792  @Override
4793  public Identifier getIdentifierFirstRep() {
4794    return new Identifier();
4795  }
4796/**
4797   * Search parameter: <b>context-quantity</b>
4798   * <p>
4799   * Description: <b>Multiple Resources: 
4800
4801* [CapabilityStatement](capabilitystatement.html): A quantity- or range-valued use context assigned to the capability statement
4802* [CodeSystem](codesystem.html): A quantity- or range-valued use context assigned to the code system
4803* [CompartmentDefinition](compartmentdefinition.html): A quantity- or range-valued use context assigned to the compartment definition
4804* [ConceptMap](conceptmap.html): A quantity- or range-valued use context assigned to the concept map
4805* [GraphDefinition](graphdefinition.html): A quantity- or range-valued use context assigned to the graph definition
4806* [ImplementationGuide](implementationguide.html): A quantity- or range-valued use context assigned to the implementation guide
4807* [MessageDefinition](messagedefinition.html): A quantity- or range-valued use context assigned to the message definition
4808* [NamingSystem](namingsystem.html): A quantity- or range-valued use context assigned to the naming system
4809* [OperationDefinition](operationdefinition.html): A quantity- or range-valued use context assigned to the operation definition
4810* [SearchParameter](searchparameter.html): A quantity- or range-valued use context assigned to the search parameter
4811* [StructureDefinition](structuredefinition.html): A quantity- or range-valued use context assigned to the structure definition
4812* [StructureMap](structuremap.html): A quantity- or range-valued use context assigned to the structure map
4813* [TerminologyCapabilities](terminologycapabilities.html): A quantity- or range-valued use context assigned to the terminology capabilities
4814* [ValueSet](valueset.html): A quantity- or range-valued use context assigned to the value set
4815</b><br>
4816   * Type: <b>quantity</b><br>
4817   * Path: <b>(CapabilityStatement.useContext.value as Quantity) | (CapabilityStatement.useContext.value as Range) | (CodeSystem.useContext.value as Quantity) | (CodeSystem.useContext.value as Range) | (CompartmentDefinition.useContext.value as Quantity) | (CompartmentDefinition.useContext.value as Range) | (ConceptMap.useContext.value as Quantity) | (ConceptMap.useContext.value as Range) | (GraphDefinition.useContext.value as Quantity) | (GraphDefinition.useContext.value as Range) | (ImplementationGuide.useContext.value as Quantity) | (ImplementationGuide.useContext.value as Range) | (MessageDefinition.useContext.value as Quantity) | (MessageDefinition.useContext.value as Range) | (NamingSystem.useContext.value as Quantity) | (NamingSystem.useContext.value as Range) | (OperationDefinition.useContext.value as Quantity) | (OperationDefinition.useContext.value as Range) | (SearchParameter.useContext.value as Quantity) | (SearchParameter.useContext.value as Range) | (StructureDefinition.useContext.value as Quantity) | (StructureDefinition.useContext.value as Range) | (StructureMap.useContext.value as Quantity) | (StructureMap.useContext.value as Range) | (TerminologyCapabilities.useContext.value as Quantity) | (TerminologyCapabilities.useContext.value as Range) | (ValueSet.useContext.value as Quantity) | (ValueSet.useContext.value as Range)</b><br>
4818   * </p>
4819   */
4820  @SearchParamDefinition(name="context-quantity", path="(CapabilityStatement.useContext.value as Quantity) | (CapabilityStatement.useContext.value as Range) | (CodeSystem.useContext.value as Quantity) | (CodeSystem.useContext.value as Range) | (CompartmentDefinition.useContext.value as Quantity) | (CompartmentDefinition.useContext.value as Range) | (ConceptMap.useContext.value as Quantity) | (ConceptMap.useContext.value as Range) | (GraphDefinition.useContext.value as Quantity) | (GraphDefinition.useContext.value as Range) | (ImplementationGuide.useContext.value as Quantity) | (ImplementationGuide.useContext.value as Range) | (MessageDefinition.useContext.value as Quantity) | (MessageDefinition.useContext.value as Range) | (NamingSystem.useContext.value as Quantity) | (NamingSystem.useContext.value as Range) | (OperationDefinition.useContext.value as Quantity) | (OperationDefinition.useContext.value as Range) | (SearchParameter.useContext.value as Quantity) | (SearchParameter.useContext.value as Range) | (StructureDefinition.useContext.value as Quantity) | (StructureDefinition.useContext.value as Range) | (StructureMap.useContext.value as Quantity) | (StructureMap.useContext.value as Range) | (TerminologyCapabilities.useContext.value as Quantity) | (TerminologyCapabilities.useContext.value as Range) | (ValueSet.useContext.value as Quantity) | (ValueSet.useContext.value as Range)", description="Multiple Resources: \r\n\r\n* [CapabilityStatement](capabilitystatement.html): A quantity- or range-valued use context assigned to the capability statement\r\n* [CodeSystem](codesystem.html): A quantity- or range-valued use context assigned to the code system\r\n* [CompartmentDefinition](compartmentdefinition.html): A quantity- or range-valued use context assigned to the compartment definition\r\n* [ConceptMap](conceptmap.html): A quantity- or range-valued use context assigned to the concept map\r\n* [GraphDefinition](graphdefinition.html): A quantity- or range-valued use context assigned to the graph definition\r\n* [ImplementationGuide](implementationguide.html): A quantity- or range-valued use context assigned to the implementation guide\r\n* [MessageDefinition](messagedefinition.html): A quantity- or range-valued use context assigned to the message definition\r\n* [NamingSystem](namingsystem.html): A quantity- or range-valued use context assigned to the naming system\r\n* [OperationDefinition](operationdefinition.html): A quantity- or range-valued use context assigned to the operation definition\r\n* [SearchParameter](searchparameter.html): A quantity- or range-valued use context assigned to the search parameter\r\n* [StructureDefinition](structuredefinition.html): A quantity- or range-valued use context assigned to the structure definition\r\n* [StructureMap](structuremap.html): A quantity- or range-valued use context assigned to the structure map\r\n* [TerminologyCapabilities](terminologycapabilities.html): A quantity- or range-valued use context assigned to the terminology capabilities\r\n* [ValueSet](valueset.html): A quantity- or range-valued use context assigned to the value set\r\n", type="quantity" )
4821  public static final String SP_CONTEXT_QUANTITY = "context-quantity";
4822 /**
4823   * <b>Fluent Client</b> search parameter constant for <b>context-quantity</b>
4824   * <p>
4825   * Description: <b>Multiple Resources: 
4826
4827* [CapabilityStatement](capabilitystatement.html): A quantity- or range-valued use context assigned to the capability statement
4828* [CodeSystem](codesystem.html): A quantity- or range-valued use context assigned to the code system
4829* [CompartmentDefinition](compartmentdefinition.html): A quantity- or range-valued use context assigned to the compartment definition
4830* [ConceptMap](conceptmap.html): A quantity- or range-valued use context assigned to the concept map
4831* [GraphDefinition](graphdefinition.html): A quantity- or range-valued use context assigned to the graph definition
4832* [ImplementationGuide](implementationguide.html): A quantity- or range-valued use context assigned to the implementation guide
4833* [MessageDefinition](messagedefinition.html): A quantity- or range-valued use context assigned to the message definition
4834* [NamingSystem](namingsystem.html): A quantity- or range-valued use context assigned to the naming system
4835* [OperationDefinition](operationdefinition.html): A quantity- or range-valued use context assigned to the operation definition
4836* [SearchParameter](searchparameter.html): A quantity- or range-valued use context assigned to the search parameter
4837* [StructureDefinition](structuredefinition.html): A quantity- or range-valued use context assigned to the structure definition
4838* [StructureMap](structuremap.html): A quantity- or range-valued use context assigned to the structure map
4839* [TerminologyCapabilities](terminologycapabilities.html): A quantity- or range-valued use context assigned to the terminology capabilities
4840* [ValueSet](valueset.html): A quantity- or range-valued use context assigned to the value set
4841</b><br>
4842   * Type: <b>quantity</b><br>
4843   * Path: <b>(CapabilityStatement.useContext.value as Quantity) | (CapabilityStatement.useContext.value as Range) | (CodeSystem.useContext.value as Quantity) | (CodeSystem.useContext.value as Range) | (CompartmentDefinition.useContext.value as Quantity) | (CompartmentDefinition.useContext.value as Range) | (ConceptMap.useContext.value as Quantity) | (ConceptMap.useContext.value as Range) | (GraphDefinition.useContext.value as Quantity) | (GraphDefinition.useContext.value as Range) | (ImplementationGuide.useContext.value as Quantity) | (ImplementationGuide.useContext.value as Range) | (MessageDefinition.useContext.value as Quantity) | (MessageDefinition.useContext.value as Range) | (NamingSystem.useContext.value as Quantity) | (NamingSystem.useContext.value as Range) | (OperationDefinition.useContext.value as Quantity) | (OperationDefinition.useContext.value as Range) | (SearchParameter.useContext.value as Quantity) | (SearchParameter.useContext.value as Range) | (StructureDefinition.useContext.value as Quantity) | (StructureDefinition.useContext.value as Range) | (StructureMap.useContext.value as Quantity) | (StructureMap.useContext.value as Range) | (TerminologyCapabilities.useContext.value as Quantity) | (TerminologyCapabilities.useContext.value as Range) | (ValueSet.useContext.value as Quantity) | (ValueSet.useContext.value as Range)</b><br>
4844   * </p>
4845   */
4846  public static final ca.uhn.fhir.rest.gclient.QuantityClientParam CONTEXT_QUANTITY = new ca.uhn.fhir.rest.gclient.QuantityClientParam(SP_CONTEXT_QUANTITY);
4847
4848 /**
4849   * Search parameter: <b>context-type-quantity</b>
4850   * <p>
4851   * Description: <b>Multiple Resources: 
4852
4853* [CapabilityStatement](capabilitystatement.html): A use context type and quantity- or range-based value assigned to the capability statement
4854* [CodeSystem](codesystem.html): A use context type and quantity- or range-based value assigned to the code system
4855* [CompartmentDefinition](compartmentdefinition.html): A use context type and quantity- or range-based value assigned to the compartment definition
4856* [ConceptMap](conceptmap.html): A use context type and quantity- or range-based value assigned to the concept map
4857* [GraphDefinition](graphdefinition.html): A use context type and quantity- or range-based value assigned to the graph definition
4858* [ImplementationGuide](implementationguide.html): A use context type and quantity- or range-based value assigned to the implementation guide
4859* [MessageDefinition](messagedefinition.html): A use context type and quantity- or range-based value assigned to the message definition
4860* [NamingSystem](namingsystem.html): A use context type and quantity- or range-based value assigned to the naming system
4861* [OperationDefinition](operationdefinition.html): A use context type and quantity- or range-based value assigned to the operation definition
4862* [SearchParameter](searchparameter.html): A use context type and quantity- or range-based value assigned to the search parameter
4863* [StructureDefinition](structuredefinition.html): A use context type and quantity- or range-based value assigned to the structure definition
4864* [StructureMap](structuremap.html): A use context type and quantity- or range-based value assigned to the structure map
4865* [TerminologyCapabilities](terminologycapabilities.html): A use context type and quantity- or range-based value assigned to the terminology capabilities
4866* [ValueSet](valueset.html): A use context type and quantity- or range-based value assigned to the value set
4867</b><br>
4868   * Type: <b>composite</b><br>
4869   * Path: <b>CapabilityStatement.useContext | CodeSystem.useContext | CompartmentDefinition.useContext | ConceptMap.useContext | GraphDefinition.useContext | ImplementationGuide.useContext | MessageDefinition.useContext | NamingSystem.useContext | OperationDefinition.useContext | SearchParameter.useContext | StructureDefinition.useContext | StructureMap.useContext | TerminologyCapabilities.useContext | ValueSet.useContext</b><br>
4870   * </p>
4871   */
4872  @SearchParamDefinition(name="context-type-quantity", path="CapabilityStatement.useContext | CodeSystem.useContext | CompartmentDefinition.useContext | ConceptMap.useContext | GraphDefinition.useContext | ImplementationGuide.useContext | MessageDefinition.useContext | NamingSystem.useContext | OperationDefinition.useContext | SearchParameter.useContext | StructureDefinition.useContext | StructureMap.useContext | TerminologyCapabilities.useContext | ValueSet.useContext", description="Multiple Resources: \r\n\r\n* [CapabilityStatement](capabilitystatement.html): A use context type and quantity- or range-based value assigned to the capability statement\r\n* [CodeSystem](codesystem.html): A use context type and quantity- or range-based value assigned to the code system\r\n* [CompartmentDefinition](compartmentdefinition.html): A use context type and quantity- or range-based value assigned to the compartment definition\r\n* [ConceptMap](conceptmap.html): A use context type and quantity- or range-based value assigned to the concept map\r\n* [GraphDefinition](graphdefinition.html): A use context type and quantity- or range-based value assigned to the graph definition\r\n* [ImplementationGuide](implementationguide.html): A use context type and quantity- or range-based value assigned to the implementation guide\r\n* [MessageDefinition](messagedefinition.html): A use context type and quantity- or range-based value assigned to the message definition\r\n* [NamingSystem](namingsystem.html): A use context type and quantity- or range-based value assigned to the naming system\r\n* [OperationDefinition](operationdefinition.html): A use context type and quantity- or range-based value assigned to the operation definition\r\n* [SearchParameter](searchparameter.html): A use context type and quantity- or range-based value assigned to the search parameter\r\n* [StructureDefinition](structuredefinition.html): A use context type and quantity- or range-based value assigned to the structure definition\r\n* [StructureMap](structuremap.html): A use context type and quantity- or range-based value assigned to the structure map\r\n* [TerminologyCapabilities](terminologycapabilities.html): A use context type and quantity- or range-based value assigned to the terminology capabilities\r\n* [ValueSet](valueset.html): A use context type and quantity- or range-based value assigned to the value set\r\n", type="composite", compositeOf={"context-type", "context-quantity"} )
4873  public static final String SP_CONTEXT_TYPE_QUANTITY = "context-type-quantity";
4874 /**
4875   * <b>Fluent Client</b> search parameter constant for <b>context-type-quantity</b>
4876   * <p>
4877   * Description: <b>Multiple Resources: 
4878
4879* [CapabilityStatement](capabilitystatement.html): A use context type and quantity- or range-based value assigned to the capability statement
4880* [CodeSystem](codesystem.html): A use context type and quantity- or range-based value assigned to the code system
4881* [CompartmentDefinition](compartmentdefinition.html): A use context type and quantity- or range-based value assigned to the compartment definition
4882* [ConceptMap](conceptmap.html): A use context type and quantity- or range-based value assigned to the concept map
4883* [GraphDefinition](graphdefinition.html): A use context type and quantity- or range-based value assigned to the graph definition
4884* [ImplementationGuide](implementationguide.html): A use context type and quantity- or range-based value assigned to the implementation guide
4885* [MessageDefinition](messagedefinition.html): A use context type and quantity- or range-based value assigned to the message definition
4886* [NamingSystem](namingsystem.html): A use context type and quantity- or range-based value assigned to the naming system
4887* [OperationDefinition](operationdefinition.html): A use context type and quantity- or range-based value assigned to the operation definition
4888* [SearchParameter](searchparameter.html): A use context type and quantity- or range-based value assigned to the search parameter
4889* [StructureDefinition](structuredefinition.html): A use context type and quantity- or range-based value assigned to the structure definition
4890* [StructureMap](structuremap.html): A use context type and quantity- or range-based value assigned to the structure map
4891* [TerminologyCapabilities](terminologycapabilities.html): A use context type and quantity- or range-based value assigned to the terminology capabilities
4892* [ValueSet](valueset.html): A use context type and quantity- or range-based value assigned to the value set
4893</b><br>
4894   * Type: <b>composite</b><br>
4895   * Path: <b>CapabilityStatement.useContext | CodeSystem.useContext | CompartmentDefinition.useContext | ConceptMap.useContext | GraphDefinition.useContext | ImplementationGuide.useContext | MessageDefinition.useContext | NamingSystem.useContext | OperationDefinition.useContext | SearchParameter.useContext | StructureDefinition.useContext | StructureMap.useContext | TerminologyCapabilities.useContext | ValueSet.useContext</b><br>
4896   * </p>
4897   */
4898  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);
4899
4900 /**
4901   * Search parameter: <b>context-type-value</b>
4902   * <p>
4903   * Description: <b>Multiple Resources: 
4904
4905* [CapabilityStatement](capabilitystatement.html): A use context type and value assigned to the capability statement
4906* [CodeSystem](codesystem.html): A use context type and value assigned to the code system
4907* [CompartmentDefinition](compartmentdefinition.html): A use context type and value assigned to the compartment definition
4908* [ConceptMap](conceptmap.html): A use context type and value assigned to the concept map
4909* [GraphDefinition](graphdefinition.html): A use context type and value assigned to the graph definition
4910* [ImplementationGuide](implementationguide.html): A use context type and value assigned to the implementation guide
4911* [MessageDefinition](messagedefinition.html): A use context type and value assigned to the message definition
4912* [NamingSystem](namingsystem.html): A use context type and value assigned to the naming system
4913* [OperationDefinition](operationdefinition.html): A use context type and value assigned to the operation definition
4914* [SearchParameter](searchparameter.html): A use context type and value assigned to the search parameter
4915* [StructureDefinition](structuredefinition.html): A use context type and value assigned to the structure definition
4916* [StructureMap](structuremap.html): A use context type and value assigned to the structure map
4917* [TerminologyCapabilities](terminologycapabilities.html): A use context type and value assigned to the terminology capabilities
4918* [ValueSet](valueset.html): A use context type and value assigned to the value set
4919</b><br>
4920   * Type: <b>composite</b><br>
4921   * Path: <b>CapabilityStatement.useContext | CodeSystem.useContext | CompartmentDefinition.useContext | ConceptMap.useContext | GraphDefinition.useContext | ImplementationGuide.useContext | MessageDefinition.useContext | NamingSystem.useContext | OperationDefinition.useContext | SearchParameter.useContext | StructureDefinition.useContext | StructureMap.useContext | TerminologyCapabilities.useContext | ValueSet.useContext</b><br>
4922   * </p>
4923   */
4924  @SearchParamDefinition(name="context-type-value", path="CapabilityStatement.useContext | CodeSystem.useContext | CompartmentDefinition.useContext | ConceptMap.useContext | GraphDefinition.useContext | ImplementationGuide.useContext | MessageDefinition.useContext | NamingSystem.useContext | OperationDefinition.useContext | SearchParameter.useContext | StructureDefinition.useContext | StructureMap.useContext | TerminologyCapabilities.useContext | ValueSet.useContext", description="Multiple Resources: \r\n\r\n* [CapabilityStatement](capabilitystatement.html): A use context type and value assigned to the capability statement\r\n* [CodeSystem](codesystem.html): A use context type and value assigned to the code system\r\n* [CompartmentDefinition](compartmentdefinition.html): A use context type and value assigned to the compartment definition\r\n* [ConceptMap](conceptmap.html): A use context type and value assigned to the concept map\r\n* [GraphDefinition](graphdefinition.html): A use context type and value assigned to the graph definition\r\n* [ImplementationGuide](implementationguide.html): A use context type and value assigned to the implementation guide\r\n* [MessageDefinition](messagedefinition.html): A use context type and value assigned to the message definition\r\n* [NamingSystem](namingsystem.html): A use context type and value assigned to the naming system\r\n* [OperationDefinition](operationdefinition.html): A use context type and value assigned to the operation definition\r\n* [SearchParameter](searchparameter.html): A use context type and value assigned to the search parameter\r\n* [StructureDefinition](structuredefinition.html): A use context type and value assigned to the structure definition\r\n* [StructureMap](structuremap.html): A use context type and value assigned to the structure map\r\n* [TerminologyCapabilities](terminologycapabilities.html): A use context type and value assigned to the terminology capabilities\r\n* [ValueSet](valueset.html): A use context type and value assigned to the value set\r\n", type="composite", compositeOf={"context-type", "context"} )
4925  public static final String SP_CONTEXT_TYPE_VALUE = "context-type-value";
4926 /**
4927   * <b>Fluent Client</b> search parameter constant for <b>context-type-value</b>
4928   * <p>
4929   * Description: <b>Multiple Resources: 
4930
4931* [CapabilityStatement](capabilitystatement.html): A use context type and value assigned to the capability statement
4932* [CodeSystem](codesystem.html): A use context type and value assigned to the code system
4933* [CompartmentDefinition](compartmentdefinition.html): A use context type and value assigned to the compartment definition
4934* [ConceptMap](conceptmap.html): A use context type and value assigned to the concept map
4935* [GraphDefinition](graphdefinition.html): A use context type and value assigned to the graph definition
4936* [ImplementationGuide](implementationguide.html): A use context type and value assigned to the implementation guide
4937* [MessageDefinition](messagedefinition.html): A use context type and value assigned to the message definition
4938* [NamingSystem](namingsystem.html): A use context type and value assigned to the naming system
4939* [OperationDefinition](operationdefinition.html): A use context type and value assigned to the operation definition
4940* [SearchParameter](searchparameter.html): A use context type and value assigned to the search parameter
4941* [StructureDefinition](structuredefinition.html): A use context type and value assigned to the structure definition
4942* [StructureMap](structuremap.html): A use context type and value assigned to the structure map
4943* [TerminologyCapabilities](terminologycapabilities.html): A use context type and value assigned to the terminology capabilities
4944* [ValueSet](valueset.html): A use context type and value assigned to the value set
4945</b><br>
4946   * Type: <b>composite</b><br>
4947   * Path: <b>CapabilityStatement.useContext | CodeSystem.useContext | CompartmentDefinition.useContext | ConceptMap.useContext | GraphDefinition.useContext | ImplementationGuide.useContext | MessageDefinition.useContext | NamingSystem.useContext | OperationDefinition.useContext | SearchParameter.useContext | StructureDefinition.useContext | StructureMap.useContext | TerminologyCapabilities.useContext | ValueSet.useContext</b><br>
4948   * </p>
4949   */
4950  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);
4951
4952 /**
4953   * Search parameter: <b>context-type</b>
4954   * <p>
4955   * Description: <b>Multiple Resources: 
4956
4957* [CapabilityStatement](capabilitystatement.html): A type of use context assigned to the capability statement
4958* [CodeSystem](codesystem.html): A type of use context assigned to the code system
4959* [CompartmentDefinition](compartmentdefinition.html): A type of use context assigned to the compartment definition
4960* [ConceptMap](conceptmap.html): A type of use context assigned to the concept map
4961* [GraphDefinition](graphdefinition.html): A type of use context assigned to the graph definition
4962* [ImplementationGuide](implementationguide.html): A type of use context assigned to the implementation guide
4963* [MessageDefinition](messagedefinition.html): A type of use context assigned to the message definition
4964* [NamingSystem](namingsystem.html): A type of use context assigned to the naming system
4965* [OperationDefinition](operationdefinition.html): A type of use context assigned to the operation definition
4966* [SearchParameter](searchparameter.html): A type of use context assigned to the search parameter
4967* [StructureDefinition](structuredefinition.html): A type of use context assigned to the structure definition
4968* [StructureMap](structuremap.html): A type of use context assigned to the structure map
4969* [TerminologyCapabilities](terminologycapabilities.html): A type of use context assigned to the terminology capabilities
4970* [ValueSet](valueset.html): A type of use context assigned to the value set
4971</b><br>
4972   * Type: <b>token</b><br>
4973   * Path: <b>CapabilityStatement.useContext.code | CodeSystem.useContext.code | CompartmentDefinition.useContext.code | ConceptMap.useContext.code | GraphDefinition.useContext.code | ImplementationGuide.useContext.code | MessageDefinition.useContext.code | NamingSystem.useContext.code | OperationDefinition.useContext.code | SearchParameter.useContext.code | StructureDefinition.useContext.code | StructureMap.useContext.code | TerminologyCapabilities.useContext.code | ValueSet.useContext.code</b><br>
4974   * </p>
4975   */
4976  @SearchParamDefinition(name="context-type", path="CapabilityStatement.useContext.code | CodeSystem.useContext.code | CompartmentDefinition.useContext.code | ConceptMap.useContext.code | GraphDefinition.useContext.code | ImplementationGuide.useContext.code | MessageDefinition.useContext.code | NamingSystem.useContext.code | OperationDefinition.useContext.code | SearchParameter.useContext.code | StructureDefinition.useContext.code | StructureMap.useContext.code | TerminologyCapabilities.useContext.code | ValueSet.useContext.code", description="Multiple Resources: \r\n\r\n* [CapabilityStatement](capabilitystatement.html): A type of use context assigned to the capability statement\r\n* [CodeSystem](codesystem.html): A type of use context assigned to the code system\r\n* [CompartmentDefinition](compartmentdefinition.html): A type of use context assigned to the compartment definition\r\n* [ConceptMap](conceptmap.html): A type of use context assigned to the concept map\r\n* [GraphDefinition](graphdefinition.html): A type of use context assigned to the graph definition\r\n* [ImplementationGuide](implementationguide.html): A type of use context assigned to the implementation guide\r\n* [MessageDefinition](messagedefinition.html): A type of use context assigned to the message definition\r\n* [NamingSystem](namingsystem.html): A type of use context assigned to the naming system\r\n* [OperationDefinition](operationdefinition.html): A type of use context assigned to the operation definition\r\n* [SearchParameter](searchparameter.html): A type of use context assigned to the search parameter\r\n* [StructureDefinition](structuredefinition.html): A type of use context assigned to the structure definition\r\n* [StructureMap](structuremap.html): A type of use context assigned to the structure map\r\n* [TerminologyCapabilities](terminologycapabilities.html): A type of use context assigned to the terminology capabilities\r\n* [ValueSet](valueset.html): A type of use context assigned to the value set\r\n", type="token" )
4977  public static final String SP_CONTEXT_TYPE = "context-type";
4978 /**
4979   * <b>Fluent Client</b> search parameter constant for <b>context-type</b>
4980   * <p>
4981   * Description: <b>Multiple Resources: 
4982
4983* [CapabilityStatement](capabilitystatement.html): A type of use context assigned to the capability statement
4984* [CodeSystem](codesystem.html): A type of use context assigned to the code system
4985* [CompartmentDefinition](compartmentdefinition.html): A type of use context assigned to the compartment definition
4986* [ConceptMap](conceptmap.html): A type of use context assigned to the concept map
4987* [GraphDefinition](graphdefinition.html): A type of use context assigned to the graph definition
4988* [ImplementationGuide](implementationguide.html): A type of use context assigned to the implementation guide
4989* [MessageDefinition](messagedefinition.html): A type of use context assigned to the message definition
4990* [NamingSystem](namingsystem.html): A type of use context assigned to the naming system
4991* [OperationDefinition](operationdefinition.html): A type of use context assigned to the operation definition
4992* [SearchParameter](searchparameter.html): A type of use context assigned to the search parameter
4993* [StructureDefinition](structuredefinition.html): A type of use context assigned to the structure definition
4994* [StructureMap](structuremap.html): A type of use context assigned to the structure map
4995* [TerminologyCapabilities](terminologycapabilities.html): A type of use context assigned to the terminology capabilities
4996* [ValueSet](valueset.html): A type of use context assigned to the value set
4997</b><br>
4998   * Type: <b>token</b><br>
4999   * Path: <b>CapabilityStatement.useContext.code | CodeSystem.useContext.code | CompartmentDefinition.useContext.code | ConceptMap.useContext.code | GraphDefinition.useContext.code | ImplementationGuide.useContext.code | MessageDefinition.useContext.code | NamingSystem.useContext.code | OperationDefinition.useContext.code | SearchParameter.useContext.code | StructureDefinition.useContext.code | StructureMap.useContext.code | TerminologyCapabilities.useContext.code | ValueSet.useContext.code</b><br>
5000   * </p>
5001   */
5002  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CONTEXT_TYPE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CONTEXT_TYPE);
5003
5004 /**
5005   * Search parameter: <b>context</b>
5006   * <p>
5007   * Description: <b>Multiple Resources: 
5008
5009* [CapabilityStatement](capabilitystatement.html): A use context assigned to the capability statement
5010* [CodeSystem](codesystem.html): A use context assigned to the code system
5011* [CompartmentDefinition](compartmentdefinition.html): A use context assigned to the compartment definition
5012* [ConceptMap](conceptmap.html): A use context assigned to the concept map
5013* [GraphDefinition](graphdefinition.html): A use context assigned to the graph definition
5014* [ImplementationGuide](implementationguide.html): A use context assigned to the implementation guide
5015* [MessageDefinition](messagedefinition.html): A use context assigned to the message definition
5016* [NamingSystem](namingsystem.html): A use context assigned to the naming system
5017* [OperationDefinition](operationdefinition.html): A use context assigned to the operation definition
5018* [SearchParameter](searchparameter.html): A use context assigned to the search parameter
5019* [StructureDefinition](structuredefinition.html): A use context assigned to the structure definition
5020* [StructureMap](structuremap.html): A use context assigned to the structure map
5021* [TerminologyCapabilities](terminologycapabilities.html): A use context assigned to the terminology capabilities
5022* [ValueSet](valueset.html): A use context assigned to the value set
5023</b><br>
5024   * Type: <b>token</b><br>
5025   * Path: <b>(CapabilityStatement.useContext.value as CodeableConcept) | (CodeSystem.useContext.value as CodeableConcept) | (CompartmentDefinition.useContext.value as CodeableConcept) | (ConceptMap.useContext.value as CodeableConcept) | (GraphDefinition.useContext.value as CodeableConcept) | (ImplementationGuide.useContext.value as CodeableConcept) | (MessageDefinition.useContext.value as CodeableConcept) | (NamingSystem.useContext.value as CodeableConcept) | (OperationDefinition.useContext.value as CodeableConcept) | (SearchParameter.useContext.value as CodeableConcept) | (StructureDefinition.useContext.value as CodeableConcept) | (StructureMap.useContext.value as CodeableConcept) | (TerminologyCapabilities.useContext.value as CodeableConcept) | (ValueSet.useContext.value as CodeableConcept)</b><br>
5026   * </p>
5027   */
5028  @SearchParamDefinition(name="context", path="(CapabilityStatement.useContext.value as CodeableConcept) | (CodeSystem.useContext.value as CodeableConcept) | (CompartmentDefinition.useContext.value as CodeableConcept) | (ConceptMap.useContext.value as CodeableConcept) | (GraphDefinition.useContext.value as CodeableConcept) | (ImplementationGuide.useContext.value as CodeableConcept) | (MessageDefinition.useContext.value as CodeableConcept) | (NamingSystem.useContext.value as CodeableConcept) | (OperationDefinition.useContext.value as CodeableConcept) | (SearchParameter.useContext.value as CodeableConcept) | (StructureDefinition.useContext.value as CodeableConcept) | (StructureMap.useContext.value as CodeableConcept) | (TerminologyCapabilities.useContext.value as CodeableConcept) | (ValueSet.useContext.value as CodeableConcept)", description="Multiple Resources: \r\n\r\n* [CapabilityStatement](capabilitystatement.html): A use context assigned to the capability statement\r\n* [CodeSystem](codesystem.html): A use context assigned to the code system\r\n* [CompartmentDefinition](compartmentdefinition.html): A use context assigned to the compartment definition\r\n* [ConceptMap](conceptmap.html): A use context assigned to the concept map\r\n* [GraphDefinition](graphdefinition.html): A use context assigned to the graph definition\r\n* [ImplementationGuide](implementationguide.html): A use context assigned to the implementation guide\r\n* [MessageDefinition](messagedefinition.html): A use context assigned to the message definition\r\n* [NamingSystem](namingsystem.html): A use context assigned to the naming system\r\n* [OperationDefinition](operationdefinition.html): A use context assigned to the operation definition\r\n* [SearchParameter](searchparameter.html): A use context assigned to the search parameter\r\n* [StructureDefinition](structuredefinition.html): A use context assigned to the structure definition\r\n* [StructureMap](structuremap.html): A use context assigned to the structure map\r\n* [TerminologyCapabilities](terminologycapabilities.html): A use context assigned to the terminology capabilities\r\n* [ValueSet](valueset.html): A use context assigned to the value set\r\n", type="token" )
5029  public static final String SP_CONTEXT = "context";
5030 /**
5031   * <b>Fluent Client</b> search parameter constant for <b>context</b>
5032   * <p>
5033   * Description: <b>Multiple Resources: 
5034
5035* [CapabilityStatement](capabilitystatement.html): A use context assigned to the capability statement
5036* [CodeSystem](codesystem.html): A use context assigned to the code system
5037* [CompartmentDefinition](compartmentdefinition.html): A use context assigned to the compartment definition
5038* [ConceptMap](conceptmap.html): A use context assigned to the concept map
5039* [GraphDefinition](graphdefinition.html): A use context assigned to the graph definition
5040* [ImplementationGuide](implementationguide.html): A use context assigned to the implementation guide
5041* [MessageDefinition](messagedefinition.html): A use context assigned to the message definition
5042* [NamingSystem](namingsystem.html): A use context assigned to the naming system
5043* [OperationDefinition](operationdefinition.html): A use context assigned to the operation definition
5044* [SearchParameter](searchparameter.html): A use context assigned to the search parameter
5045* [StructureDefinition](structuredefinition.html): A use context assigned to the structure definition
5046* [StructureMap](structuremap.html): A use context assigned to the structure map
5047* [TerminologyCapabilities](terminologycapabilities.html): A use context assigned to the terminology capabilities
5048* [ValueSet](valueset.html): A use context assigned to the value set
5049</b><br>
5050   * Type: <b>token</b><br>
5051   * Path: <b>(CapabilityStatement.useContext.value as CodeableConcept) | (CodeSystem.useContext.value as CodeableConcept) | (CompartmentDefinition.useContext.value as CodeableConcept) | (ConceptMap.useContext.value as CodeableConcept) | (GraphDefinition.useContext.value as CodeableConcept) | (ImplementationGuide.useContext.value as CodeableConcept) | (MessageDefinition.useContext.value as CodeableConcept) | (NamingSystem.useContext.value as CodeableConcept) | (OperationDefinition.useContext.value as CodeableConcept) | (SearchParameter.useContext.value as CodeableConcept) | (StructureDefinition.useContext.value as CodeableConcept) | (StructureMap.useContext.value as CodeableConcept) | (TerminologyCapabilities.useContext.value as CodeableConcept) | (ValueSet.useContext.value as CodeableConcept)</b><br>
5052   * </p>
5053   */
5054  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CONTEXT = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CONTEXT);
5055
5056 /**
5057   * Search parameter: <b>date</b>
5058   * <p>
5059   * Description: <b>Multiple Resources: 
5060
5061* [CapabilityStatement](capabilitystatement.html): The capability statement publication date
5062* [CodeSystem](codesystem.html): The code system publication date
5063* [CompartmentDefinition](compartmentdefinition.html): The compartment definition publication date
5064* [ConceptMap](conceptmap.html): The concept map publication date
5065* [GraphDefinition](graphdefinition.html): The graph definition publication date
5066* [ImplementationGuide](implementationguide.html): The implementation guide publication date
5067* [MessageDefinition](messagedefinition.html): The message definition publication date
5068* [NamingSystem](namingsystem.html): The naming system publication date
5069* [OperationDefinition](operationdefinition.html): The operation definition publication date
5070* [SearchParameter](searchparameter.html): The search parameter publication date
5071* [StructureDefinition](structuredefinition.html): The structure definition publication date
5072* [StructureMap](structuremap.html): The structure map publication date
5073* [TerminologyCapabilities](terminologycapabilities.html): The terminology capabilities publication date
5074* [ValueSet](valueset.html): The value set publication date
5075</b><br>
5076   * Type: <b>date</b><br>
5077   * Path: <b>CapabilityStatement.date | CodeSystem.date | CompartmentDefinition.date | ConceptMap.date | GraphDefinition.date | ImplementationGuide.date | MessageDefinition.date | NamingSystem.date | OperationDefinition.date | SearchParameter.date | StructureDefinition.date | StructureMap.date | TerminologyCapabilities.date | ValueSet.date</b><br>
5078   * </p>
5079   */
5080  @SearchParamDefinition(name="date", path="CapabilityStatement.date | CodeSystem.date | CompartmentDefinition.date | ConceptMap.date | GraphDefinition.date | ImplementationGuide.date | MessageDefinition.date | NamingSystem.date | OperationDefinition.date | SearchParameter.date | StructureDefinition.date | StructureMap.date | TerminologyCapabilities.date | ValueSet.date", description="Multiple Resources: \r\n\r\n* [CapabilityStatement](capabilitystatement.html): The capability statement publication date\r\n* [CodeSystem](codesystem.html): The code system publication date\r\n* [CompartmentDefinition](compartmentdefinition.html): The compartment definition publication date\r\n* [ConceptMap](conceptmap.html): The concept map publication date\r\n* [GraphDefinition](graphdefinition.html): The graph definition publication date\r\n* [ImplementationGuide](implementationguide.html): The implementation guide publication date\r\n* [MessageDefinition](messagedefinition.html): The message definition publication date\r\n* [NamingSystem](namingsystem.html): The naming system publication date\r\n* [OperationDefinition](operationdefinition.html): The operation definition publication date\r\n* [SearchParameter](searchparameter.html): The search parameter publication date\r\n* [StructureDefinition](structuredefinition.html): The structure definition publication date\r\n* [StructureMap](structuremap.html): The structure map publication date\r\n* [TerminologyCapabilities](terminologycapabilities.html): The terminology capabilities publication date\r\n* [ValueSet](valueset.html): The value set publication date\r\n", type="date" )
5081  public static final String SP_DATE = "date";
5082 /**
5083   * <b>Fluent Client</b> search parameter constant for <b>date</b>
5084   * <p>
5085   * Description: <b>Multiple Resources: 
5086
5087* [CapabilityStatement](capabilitystatement.html): The capability statement publication date
5088* [CodeSystem](codesystem.html): The code system publication date
5089* [CompartmentDefinition](compartmentdefinition.html): The compartment definition publication date
5090* [ConceptMap](conceptmap.html): The concept map publication date
5091* [GraphDefinition](graphdefinition.html): The graph definition publication date
5092* [ImplementationGuide](implementationguide.html): The implementation guide publication date
5093* [MessageDefinition](messagedefinition.html): The message definition publication date
5094* [NamingSystem](namingsystem.html): The naming system publication date
5095* [OperationDefinition](operationdefinition.html): The operation definition publication date
5096* [SearchParameter](searchparameter.html): The search parameter publication date
5097* [StructureDefinition](structuredefinition.html): The structure definition publication date
5098* [StructureMap](structuremap.html): The structure map publication date
5099* [TerminologyCapabilities](terminologycapabilities.html): The terminology capabilities publication date
5100* [ValueSet](valueset.html): The value set publication date
5101</b><br>
5102   * Type: <b>date</b><br>
5103   * Path: <b>CapabilityStatement.date | CodeSystem.date | CompartmentDefinition.date | ConceptMap.date | GraphDefinition.date | ImplementationGuide.date | MessageDefinition.date | NamingSystem.date | OperationDefinition.date | SearchParameter.date | StructureDefinition.date | StructureMap.date | TerminologyCapabilities.date | ValueSet.date</b><br>
5104   * </p>
5105   */
5106  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_DATE);
5107
5108 /**
5109   * Search parameter: <b>description</b>
5110   * <p>
5111   * Description: <b>Multiple Resources: 
5112
5113* [CapabilityStatement](capabilitystatement.html): The description of the capability statement
5114* [CodeSystem](codesystem.html): The description of the code system
5115* [CompartmentDefinition](compartmentdefinition.html): The description of the compartment definition
5116* [ConceptMap](conceptmap.html): The description of the concept map
5117* [GraphDefinition](graphdefinition.html): The description of the graph definition
5118* [ImplementationGuide](implementationguide.html): The description of the implementation guide
5119* [MessageDefinition](messagedefinition.html): The description of the message definition
5120* [NamingSystem](namingsystem.html): The description of the naming system
5121* [OperationDefinition](operationdefinition.html): The description of the operation definition
5122* [SearchParameter](searchparameter.html): The description of the search parameter
5123* [StructureDefinition](structuredefinition.html): The description of the structure definition
5124* [StructureMap](structuremap.html): The description of the structure map
5125* [TerminologyCapabilities](terminologycapabilities.html): The description of the terminology capabilities
5126* [ValueSet](valueset.html): The description of the value set
5127</b><br>
5128   * Type: <b>string</b><br>
5129   * Path: <b>CapabilityStatement.description | CodeSystem.description | CompartmentDefinition.description | ConceptMap.description | GraphDefinition.description | ImplementationGuide.description | MessageDefinition.description | NamingSystem.description | OperationDefinition.description | SearchParameter.description | StructureDefinition.description | StructureMap.description | TerminologyCapabilities.description | ValueSet.description</b><br>
5130   * </p>
5131   */
5132  @SearchParamDefinition(name="description", path="CapabilityStatement.description | CodeSystem.description | CompartmentDefinition.description | ConceptMap.description | GraphDefinition.description | ImplementationGuide.description | MessageDefinition.description | NamingSystem.description | OperationDefinition.description | SearchParameter.description | StructureDefinition.description | StructureMap.description | TerminologyCapabilities.description | ValueSet.description", description="Multiple Resources: \r\n\r\n* [CapabilityStatement](capabilitystatement.html): The description of the capability statement\r\n* [CodeSystem](codesystem.html): The description of the code system\r\n* [CompartmentDefinition](compartmentdefinition.html): The description of the compartment definition\r\n* [ConceptMap](conceptmap.html): The description of the concept map\r\n* [GraphDefinition](graphdefinition.html): The description of the graph definition\r\n* [ImplementationGuide](implementationguide.html): The description of the implementation guide\r\n* [MessageDefinition](messagedefinition.html): The description of the message definition\r\n* [NamingSystem](namingsystem.html): The description of the naming system\r\n* [OperationDefinition](operationdefinition.html): The description of the operation definition\r\n* [SearchParameter](searchparameter.html): The description of the search parameter\r\n* [StructureDefinition](structuredefinition.html): The description of the structure definition\r\n* [StructureMap](structuremap.html): The description of the structure map\r\n* [TerminologyCapabilities](terminologycapabilities.html): The description of the terminology capabilities\r\n* [ValueSet](valueset.html): The description of the value set\r\n", type="string" )
5133  public static final String SP_DESCRIPTION = "description";
5134 /**
5135   * <b>Fluent Client</b> search parameter constant for <b>description</b>
5136   * <p>
5137   * Description: <b>Multiple Resources: 
5138
5139* [CapabilityStatement](capabilitystatement.html): The description of the capability statement
5140* [CodeSystem](codesystem.html): The description of the code system
5141* [CompartmentDefinition](compartmentdefinition.html): The description of the compartment definition
5142* [ConceptMap](conceptmap.html): The description of the concept map
5143* [GraphDefinition](graphdefinition.html): The description of the graph definition
5144* [ImplementationGuide](implementationguide.html): The description of the implementation guide
5145* [MessageDefinition](messagedefinition.html): The description of the message definition
5146* [NamingSystem](namingsystem.html): The description of the naming system
5147* [OperationDefinition](operationdefinition.html): The description of the operation definition
5148* [SearchParameter](searchparameter.html): The description of the search parameter
5149* [StructureDefinition](structuredefinition.html): The description of the structure definition
5150* [StructureMap](structuremap.html): The description of the structure map
5151* [TerminologyCapabilities](terminologycapabilities.html): The description of the terminology capabilities
5152* [ValueSet](valueset.html): The description of the value set
5153</b><br>
5154   * Type: <b>string</b><br>
5155   * Path: <b>CapabilityStatement.description | CodeSystem.description | CompartmentDefinition.description | ConceptMap.description | GraphDefinition.description | ImplementationGuide.description | MessageDefinition.description | NamingSystem.description | OperationDefinition.description | SearchParameter.description | StructureDefinition.description | StructureMap.description | TerminologyCapabilities.description | ValueSet.description</b><br>
5156   * </p>
5157   */
5158  public static final ca.uhn.fhir.rest.gclient.StringClientParam DESCRIPTION = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_DESCRIPTION);
5159
5160 /**
5161   * Search parameter: <b>jurisdiction</b>
5162   * <p>
5163   * Description: <b>Multiple Resources: 
5164
5165* [CapabilityStatement](capabilitystatement.html): Intended jurisdiction for the capability statement
5166* [CodeSystem](codesystem.html): Intended jurisdiction for the code system
5167* [ConceptMap](conceptmap.html): Intended jurisdiction for the concept map
5168* [GraphDefinition](graphdefinition.html): Intended jurisdiction for the graph definition
5169* [ImplementationGuide](implementationguide.html): Intended jurisdiction for the implementation guide
5170* [MessageDefinition](messagedefinition.html): Intended jurisdiction for the message definition
5171* [NamingSystem](namingsystem.html): Intended jurisdiction for the naming system
5172* [OperationDefinition](operationdefinition.html): Intended jurisdiction for the operation definition
5173* [SearchParameter](searchparameter.html): Intended jurisdiction for the search parameter
5174* [StructureDefinition](structuredefinition.html): Intended jurisdiction for the structure definition
5175* [StructureMap](structuremap.html): Intended jurisdiction for the structure map
5176* [TerminologyCapabilities](terminologycapabilities.html): Intended jurisdiction for the terminology capabilities
5177* [ValueSet](valueset.html): Intended jurisdiction for the value set
5178</b><br>
5179   * Type: <b>token</b><br>
5180   * Path: <b>CapabilityStatement.jurisdiction | CodeSystem.jurisdiction | ConceptMap.jurisdiction | GraphDefinition.jurisdiction | ImplementationGuide.jurisdiction | MessageDefinition.jurisdiction | NamingSystem.jurisdiction | OperationDefinition.jurisdiction | SearchParameter.jurisdiction | StructureDefinition.jurisdiction | StructureMap.jurisdiction | TerminologyCapabilities.jurisdiction | ValueSet.jurisdiction</b><br>
5181   * </p>
5182   */
5183  @SearchParamDefinition(name="jurisdiction", path="CapabilityStatement.jurisdiction | CodeSystem.jurisdiction | ConceptMap.jurisdiction | GraphDefinition.jurisdiction | ImplementationGuide.jurisdiction | MessageDefinition.jurisdiction | NamingSystem.jurisdiction | OperationDefinition.jurisdiction | SearchParameter.jurisdiction | StructureDefinition.jurisdiction | StructureMap.jurisdiction | TerminologyCapabilities.jurisdiction | ValueSet.jurisdiction", description="Multiple Resources: \r\n\r\n* [CapabilityStatement](capabilitystatement.html): Intended jurisdiction for the capability statement\r\n* [CodeSystem](codesystem.html): Intended jurisdiction for the code system\r\n* [ConceptMap](conceptmap.html): Intended jurisdiction for the concept map\r\n* [GraphDefinition](graphdefinition.html): Intended jurisdiction for the graph definition\r\n* [ImplementationGuide](implementationguide.html): Intended jurisdiction for the implementation guide\r\n* [MessageDefinition](messagedefinition.html): Intended jurisdiction for the message definition\r\n* [NamingSystem](namingsystem.html): Intended jurisdiction for the naming system\r\n* [OperationDefinition](operationdefinition.html): Intended jurisdiction for the operation definition\r\n* [SearchParameter](searchparameter.html): Intended jurisdiction for the search parameter\r\n* [StructureDefinition](structuredefinition.html): Intended jurisdiction for the structure definition\r\n* [StructureMap](structuremap.html): Intended jurisdiction for the structure map\r\n* [TerminologyCapabilities](terminologycapabilities.html): Intended jurisdiction for the terminology capabilities\r\n* [ValueSet](valueset.html): Intended jurisdiction for the value set\r\n", type="token" )
5184  public static final String SP_JURISDICTION = "jurisdiction";
5185 /**
5186   * <b>Fluent Client</b> search parameter constant for <b>jurisdiction</b>
5187   * <p>
5188   * Description: <b>Multiple Resources: 
5189
5190* [CapabilityStatement](capabilitystatement.html): Intended jurisdiction for the capability statement
5191* [CodeSystem](codesystem.html): Intended jurisdiction for the code system
5192* [ConceptMap](conceptmap.html): Intended jurisdiction for the concept map
5193* [GraphDefinition](graphdefinition.html): Intended jurisdiction for the graph definition
5194* [ImplementationGuide](implementationguide.html): Intended jurisdiction for the implementation guide
5195* [MessageDefinition](messagedefinition.html): Intended jurisdiction for the message definition
5196* [NamingSystem](namingsystem.html): Intended jurisdiction for the naming system
5197* [OperationDefinition](operationdefinition.html): Intended jurisdiction for the operation definition
5198* [SearchParameter](searchparameter.html): Intended jurisdiction for the search parameter
5199* [StructureDefinition](structuredefinition.html): Intended jurisdiction for the structure definition
5200* [StructureMap](structuremap.html): Intended jurisdiction for the structure map
5201* [TerminologyCapabilities](terminologycapabilities.html): Intended jurisdiction for the terminology capabilities
5202* [ValueSet](valueset.html): Intended jurisdiction for the value set
5203</b><br>
5204   * Type: <b>token</b><br>
5205   * Path: <b>CapabilityStatement.jurisdiction | CodeSystem.jurisdiction | ConceptMap.jurisdiction | GraphDefinition.jurisdiction | ImplementationGuide.jurisdiction | MessageDefinition.jurisdiction | NamingSystem.jurisdiction | OperationDefinition.jurisdiction | SearchParameter.jurisdiction | StructureDefinition.jurisdiction | StructureMap.jurisdiction | TerminologyCapabilities.jurisdiction | ValueSet.jurisdiction</b><br>
5206   * </p>
5207   */
5208  public static final ca.uhn.fhir.rest.gclient.TokenClientParam JURISDICTION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_JURISDICTION);
5209
5210 /**
5211   * Search parameter: <b>name</b>
5212   * <p>
5213   * Description: <b>Multiple Resources: 
5214
5215* [CapabilityStatement](capabilitystatement.html): Computationally friendly name of the capability statement
5216* [CodeSystem](codesystem.html): Computationally friendly name of the code system
5217* [CompartmentDefinition](compartmentdefinition.html): Computationally friendly name of the compartment definition
5218* [ConceptMap](conceptmap.html): Computationally friendly name of the concept map
5219* [GraphDefinition](graphdefinition.html): Computationally friendly name of the graph definition
5220* [ImplementationGuide](implementationguide.html): Computationally friendly name of the implementation guide
5221* [MessageDefinition](messagedefinition.html): Computationally friendly name of the message definition
5222* [NamingSystem](namingsystem.html): Computationally friendly name of the naming system
5223* [OperationDefinition](operationdefinition.html): Computationally friendly name of the operation definition
5224* [SearchParameter](searchparameter.html): Computationally friendly name of the search parameter
5225* [StructureDefinition](structuredefinition.html): Computationally friendly name of the structure definition
5226* [StructureMap](structuremap.html): Computationally friendly name of the structure map
5227* [TerminologyCapabilities](terminologycapabilities.html): Computationally friendly name of the terminology capabilities
5228* [ValueSet](valueset.html): Computationally friendly name of the value set
5229</b><br>
5230   * Type: <b>string</b><br>
5231   * Path: <b>CapabilityStatement.name | CodeSystem.name | CompartmentDefinition.name | ConceptMap.name | GraphDefinition.name | ImplementationGuide.name | MessageDefinition.name | NamingSystem.name | OperationDefinition.name | SearchParameter.name | StructureDefinition.name | StructureMap.name | TerminologyCapabilities.name | ValueSet.name</b><br>
5232   * </p>
5233   */
5234  @SearchParamDefinition(name="name", path="CapabilityStatement.name | CodeSystem.name | CompartmentDefinition.name | ConceptMap.name | GraphDefinition.name | ImplementationGuide.name | MessageDefinition.name | NamingSystem.name | OperationDefinition.name | SearchParameter.name | StructureDefinition.name | StructureMap.name | TerminologyCapabilities.name | ValueSet.name", description="Multiple Resources: \r\n\r\n* [CapabilityStatement](capabilitystatement.html): Computationally friendly name of the capability statement\r\n* [CodeSystem](codesystem.html): Computationally friendly name of the code system\r\n* [CompartmentDefinition](compartmentdefinition.html): Computationally friendly name of the compartment definition\r\n* [ConceptMap](conceptmap.html): Computationally friendly name of the concept map\r\n* [GraphDefinition](graphdefinition.html): Computationally friendly name of the graph definition\r\n* [ImplementationGuide](implementationguide.html): Computationally friendly name of the implementation guide\r\n* [MessageDefinition](messagedefinition.html): Computationally friendly name of the message definition\r\n* [NamingSystem](namingsystem.html): Computationally friendly name of the naming system\r\n* [OperationDefinition](operationdefinition.html): Computationally friendly name of the operation definition\r\n* [SearchParameter](searchparameter.html): Computationally friendly name of the search parameter\r\n* [StructureDefinition](structuredefinition.html): Computationally friendly name of the structure definition\r\n* [StructureMap](structuremap.html): Computationally friendly name of the structure map\r\n* [TerminologyCapabilities](terminologycapabilities.html): Computationally friendly name of the terminology capabilities\r\n* [ValueSet](valueset.html): Computationally friendly name of the value set\r\n", type="string" )
5235  public static final String SP_NAME = "name";
5236 /**
5237   * <b>Fluent Client</b> search parameter constant for <b>name</b>
5238   * <p>
5239   * Description: <b>Multiple Resources: 
5240
5241* [CapabilityStatement](capabilitystatement.html): Computationally friendly name of the capability statement
5242* [CodeSystem](codesystem.html): Computationally friendly name of the code system
5243* [CompartmentDefinition](compartmentdefinition.html): Computationally friendly name of the compartment definition
5244* [ConceptMap](conceptmap.html): Computationally friendly name of the concept map
5245* [GraphDefinition](graphdefinition.html): Computationally friendly name of the graph definition
5246* [ImplementationGuide](implementationguide.html): Computationally friendly name of the implementation guide
5247* [MessageDefinition](messagedefinition.html): Computationally friendly name of the message definition
5248* [NamingSystem](namingsystem.html): Computationally friendly name of the naming system
5249* [OperationDefinition](operationdefinition.html): Computationally friendly name of the operation definition
5250* [SearchParameter](searchparameter.html): Computationally friendly name of the search parameter
5251* [StructureDefinition](structuredefinition.html): Computationally friendly name of the structure definition
5252* [StructureMap](structuremap.html): Computationally friendly name of the structure map
5253* [TerminologyCapabilities](terminologycapabilities.html): Computationally friendly name of the terminology capabilities
5254* [ValueSet](valueset.html): Computationally friendly name of the value set
5255</b><br>
5256   * Type: <b>string</b><br>
5257   * Path: <b>CapabilityStatement.name | CodeSystem.name | CompartmentDefinition.name | ConceptMap.name | GraphDefinition.name | ImplementationGuide.name | MessageDefinition.name | NamingSystem.name | OperationDefinition.name | SearchParameter.name | StructureDefinition.name | StructureMap.name | TerminologyCapabilities.name | ValueSet.name</b><br>
5258   * </p>
5259   */
5260  public static final ca.uhn.fhir.rest.gclient.StringClientParam NAME = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_NAME);
5261
5262 /**
5263   * Search parameter: <b>publisher</b>
5264   * <p>
5265   * Description: <b>Multiple Resources: 
5266
5267* [CapabilityStatement](capabilitystatement.html): Name of the publisher of the capability statement
5268* [CodeSystem](codesystem.html): Name of the publisher of the code system
5269* [CompartmentDefinition](compartmentdefinition.html): Name of the publisher of the compartment definition
5270* [ConceptMap](conceptmap.html): Name of the publisher of the concept map
5271* [GraphDefinition](graphdefinition.html): Name of the publisher of the graph definition
5272* [ImplementationGuide](implementationguide.html): Name of the publisher of the implementation guide
5273* [MessageDefinition](messagedefinition.html): Name of the publisher of the message definition
5274* [NamingSystem](namingsystem.html): Name of the publisher of the naming system
5275* [OperationDefinition](operationdefinition.html): Name of the publisher of the operation definition
5276* [SearchParameter](searchparameter.html): Name of the publisher of the search parameter
5277* [StructureDefinition](structuredefinition.html): Name of the publisher of the structure definition
5278* [StructureMap](structuremap.html): Name of the publisher of the structure map
5279* [TerminologyCapabilities](terminologycapabilities.html): Name of the publisher of the terminology capabilities
5280* [ValueSet](valueset.html): Name of the publisher of the value set
5281</b><br>
5282   * Type: <b>string</b><br>
5283   * Path: <b>CapabilityStatement.publisher | CodeSystem.publisher | CompartmentDefinition.publisher | ConceptMap.publisher | GraphDefinition.publisher | ImplementationGuide.publisher | MessageDefinition.publisher | NamingSystem.publisher | OperationDefinition.publisher | SearchParameter.publisher | StructureDefinition.publisher | StructureMap.publisher | TerminologyCapabilities.publisher | ValueSet.publisher</b><br>
5284   * </p>
5285   */
5286  @SearchParamDefinition(name="publisher", path="CapabilityStatement.publisher | CodeSystem.publisher | CompartmentDefinition.publisher | ConceptMap.publisher | GraphDefinition.publisher | ImplementationGuide.publisher | MessageDefinition.publisher | NamingSystem.publisher | OperationDefinition.publisher | SearchParameter.publisher | StructureDefinition.publisher | StructureMap.publisher | TerminologyCapabilities.publisher | ValueSet.publisher", description="Multiple Resources: \r\n\r\n* [CapabilityStatement](capabilitystatement.html): Name of the publisher of the capability statement\r\n* [CodeSystem](codesystem.html): Name of the publisher of the code system\r\n* [CompartmentDefinition](compartmentdefinition.html): Name of the publisher of the compartment definition\r\n* [ConceptMap](conceptmap.html): Name of the publisher of the concept map\r\n* [GraphDefinition](graphdefinition.html): Name of the publisher of the graph definition\r\n* [ImplementationGuide](implementationguide.html): Name of the publisher of the implementation guide\r\n* [MessageDefinition](messagedefinition.html): Name of the publisher of the message definition\r\n* [NamingSystem](namingsystem.html): Name of the publisher of the naming system\r\n* [OperationDefinition](operationdefinition.html): Name of the publisher of the operation definition\r\n* [SearchParameter](searchparameter.html): Name of the publisher of the search parameter\r\n* [StructureDefinition](structuredefinition.html): Name of the publisher of the structure definition\r\n* [StructureMap](structuremap.html): Name of the publisher of the structure map\r\n* [TerminologyCapabilities](terminologycapabilities.html): Name of the publisher of the terminology capabilities\r\n* [ValueSet](valueset.html): Name of the publisher of the value set\r\n", type="string" )
5287  public static final String SP_PUBLISHER = "publisher";
5288 /**
5289   * <b>Fluent Client</b> search parameter constant for <b>publisher</b>
5290   * <p>
5291   * Description: <b>Multiple Resources: 
5292
5293* [CapabilityStatement](capabilitystatement.html): Name of the publisher of the capability statement
5294* [CodeSystem](codesystem.html): Name of the publisher of the code system
5295* [CompartmentDefinition](compartmentdefinition.html): Name of the publisher of the compartment definition
5296* [ConceptMap](conceptmap.html): Name of the publisher of the concept map
5297* [GraphDefinition](graphdefinition.html): Name of the publisher of the graph definition
5298* [ImplementationGuide](implementationguide.html): Name of the publisher of the implementation guide
5299* [MessageDefinition](messagedefinition.html): Name of the publisher of the message definition
5300* [NamingSystem](namingsystem.html): Name of the publisher of the naming system
5301* [OperationDefinition](operationdefinition.html): Name of the publisher of the operation definition
5302* [SearchParameter](searchparameter.html): Name of the publisher of the search parameter
5303* [StructureDefinition](structuredefinition.html): Name of the publisher of the structure definition
5304* [StructureMap](structuremap.html): Name of the publisher of the structure map
5305* [TerminologyCapabilities](terminologycapabilities.html): Name of the publisher of the terminology capabilities
5306* [ValueSet](valueset.html): Name of the publisher of the value set
5307</b><br>
5308   * Type: <b>string</b><br>
5309   * Path: <b>CapabilityStatement.publisher | CodeSystem.publisher | CompartmentDefinition.publisher | ConceptMap.publisher | GraphDefinition.publisher | ImplementationGuide.publisher | MessageDefinition.publisher | NamingSystem.publisher | OperationDefinition.publisher | SearchParameter.publisher | StructureDefinition.publisher | StructureMap.publisher | TerminologyCapabilities.publisher | ValueSet.publisher</b><br>
5310   * </p>
5311   */
5312  public static final ca.uhn.fhir.rest.gclient.StringClientParam PUBLISHER = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_PUBLISHER);
5313
5314 /**
5315   * Search parameter: <b>status</b>
5316   * <p>
5317   * Description: <b>Multiple Resources: 
5318
5319* [CapabilityStatement](capabilitystatement.html): The current status of the capability statement
5320* [CodeSystem](codesystem.html): The current status of the code system
5321* [CompartmentDefinition](compartmentdefinition.html): The current status of the compartment definition
5322* [ConceptMap](conceptmap.html): The current status of the concept map
5323* [GraphDefinition](graphdefinition.html): The current status of the graph definition
5324* [ImplementationGuide](implementationguide.html): The current status of the implementation guide
5325* [MessageDefinition](messagedefinition.html): The current status of the message definition
5326* [NamingSystem](namingsystem.html): The current status of the naming system
5327* [OperationDefinition](operationdefinition.html): The current status of the operation definition
5328* [SearchParameter](searchparameter.html): The current status of the search parameter
5329* [StructureDefinition](structuredefinition.html): The current status of the structure definition
5330* [StructureMap](structuremap.html): The current status of the structure map
5331* [TerminologyCapabilities](terminologycapabilities.html): The current status of the terminology capabilities
5332* [ValueSet](valueset.html): The current status of the value set
5333</b><br>
5334   * Type: <b>token</b><br>
5335   * Path: <b>CapabilityStatement.status | CodeSystem.status | CompartmentDefinition.status | ConceptMap.status | GraphDefinition.status | ImplementationGuide.status | MessageDefinition.status | NamingSystem.status | OperationDefinition.status | SearchParameter.status | StructureDefinition.status | StructureMap.status | TerminologyCapabilities.status | ValueSet.status</b><br>
5336   * </p>
5337   */
5338  @SearchParamDefinition(name="status", path="CapabilityStatement.status | CodeSystem.status | CompartmentDefinition.status | ConceptMap.status | GraphDefinition.status | ImplementationGuide.status | MessageDefinition.status | NamingSystem.status | OperationDefinition.status | SearchParameter.status | StructureDefinition.status | StructureMap.status | TerminologyCapabilities.status | ValueSet.status", description="Multiple Resources: \r\n\r\n* [CapabilityStatement](capabilitystatement.html): The current status of the capability statement\r\n* [CodeSystem](codesystem.html): The current status of the code system\r\n* [CompartmentDefinition](compartmentdefinition.html): The current status of the compartment definition\r\n* [ConceptMap](conceptmap.html): The current status of the concept map\r\n* [GraphDefinition](graphdefinition.html): The current status of the graph definition\r\n* [ImplementationGuide](implementationguide.html): The current status of the implementation guide\r\n* [MessageDefinition](messagedefinition.html): The current status of the message definition\r\n* [NamingSystem](namingsystem.html): The current status of the naming system\r\n* [OperationDefinition](operationdefinition.html): The current status of the operation definition\r\n* [SearchParameter](searchparameter.html): The current status of the search parameter\r\n* [StructureDefinition](structuredefinition.html): The current status of the structure definition\r\n* [StructureMap](structuremap.html): The current status of the structure map\r\n* [TerminologyCapabilities](terminologycapabilities.html): The current status of the terminology capabilities\r\n* [ValueSet](valueset.html): The current status of the value set\r\n", type="token" )
5339  public static final String SP_STATUS = "status";
5340 /**
5341   * <b>Fluent Client</b> search parameter constant for <b>status</b>
5342   * <p>
5343   * Description: <b>Multiple Resources: 
5344
5345* [CapabilityStatement](capabilitystatement.html): The current status of the capability statement
5346* [CodeSystem](codesystem.html): The current status of the code system
5347* [CompartmentDefinition](compartmentdefinition.html): The current status of the compartment definition
5348* [ConceptMap](conceptmap.html): The current status of the concept map
5349* [GraphDefinition](graphdefinition.html): The current status of the graph definition
5350* [ImplementationGuide](implementationguide.html): The current status of the implementation guide
5351* [MessageDefinition](messagedefinition.html): The current status of the message definition
5352* [NamingSystem](namingsystem.html): The current status of the naming system
5353* [OperationDefinition](operationdefinition.html): The current status of the operation definition
5354* [SearchParameter](searchparameter.html): The current status of the search parameter
5355* [StructureDefinition](structuredefinition.html): The current status of the structure definition
5356* [StructureMap](structuremap.html): The current status of the structure map
5357* [TerminologyCapabilities](terminologycapabilities.html): The current status of the terminology capabilities
5358* [ValueSet](valueset.html): The current status of the value set
5359</b><br>
5360   * Type: <b>token</b><br>
5361   * Path: <b>CapabilityStatement.status | CodeSystem.status | CompartmentDefinition.status | ConceptMap.status | GraphDefinition.status | ImplementationGuide.status | MessageDefinition.status | NamingSystem.status | OperationDefinition.status | SearchParameter.status | StructureDefinition.status | StructureMap.status | TerminologyCapabilities.status | ValueSet.status</b><br>
5362   * </p>
5363   */
5364  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
5365
5366 /**
5367   * Search parameter: <b>title</b>
5368   * <p>
5369   * Description: <b>Multiple Resources: 
5370
5371* [CapabilityStatement](capabilitystatement.html): The human-friendly name of the capability statement
5372* [CodeSystem](codesystem.html): The human-friendly name of the code system
5373* [ConceptMap](conceptmap.html): The human-friendly name of the concept map
5374* [ImplementationGuide](implementationguide.html): The human-friendly name of the implementation guide
5375* [MessageDefinition](messagedefinition.html): The human-friendly name of the message definition
5376* [OperationDefinition](operationdefinition.html): The human-friendly name of the operation definition
5377* [StructureDefinition](structuredefinition.html): The human-friendly name of the structure definition
5378* [StructureMap](structuremap.html): The human-friendly name of the structure map
5379* [TerminologyCapabilities](terminologycapabilities.html): The human-friendly name of the terminology capabilities
5380* [ValueSet](valueset.html): The human-friendly name of the value set
5381</b><br>
5382   * Type: <b>string</b><br>
5383   * Path: <b>CapabilityStatement.title | CodeSystem.title | ConceptMap.title | ImplementationGuide.title | MessageDefinition.title | OperationDefinition.title | StructureDefinition.title | StructureMap.title | TerminologyCapabilities.title | ValueSet.title</b><br>
5384   * </p>
5385   */
5386  @SearchParamDefinition(name="title", path="CapabilityStatement.title | CodeSystem.title | ConceptMap.title | ImplementationGuide.title | MessageDefinition.title | OperationDefinition.title | StructureDefinition.title | StructureMap.title | TerminologyCapabilities.title | ValueSet.title", description="Multiple Resources: \r\n\r\n* [CapabilityStatement](capabilitystatement.html): The human-friendly name of the capability statement\r\n* [CodeSystem](codesystem.html): The human-friendly name of the code system\r\n* [ConceptMap](conceptmap.html): The human-friendly name of the concept map\r\n* [ImplementationGuide](implementationguide.html): The human-friendly name of the implementation guide\r\n* [MessageDefinition](messagedefinition.html): The human-friendly name of the message definition\r\n* [OperationDefinition](operationdefinition.html): The human-friendly name of the operation definition\r\n* [StructureDefinition](structuredefinition.html): The human-friendly name of the structure definition\r\n* [StructureMap](structuremap.html): The human-friendly name of the structure map\r\n* [TerminologyCapabilities](terminologycapabilities.html): The human-friendly name of the terminology capabilities\r\n* [ValueSet](valueset.html): The human-friendly name of the value set\r\n", type="string" )
5387  public static final String SP_TITLE = "title";
5388 /**
5389   * <b>Fluent Client</b> search parameter constant for <b>title</b>
5390   * <p>
5391   * Description: <b>Multiple Resources: 
5392
5393* [CapabilityStatement](capabilitystatement.html): The human-friendly name of the capability statement
5394* [CodeSystem](codesystem.html): The human-friendly name of the code system
5395* [ConceptMap](conceptmap.html): The human-friendly name of the concept map
5396* [ImplementationGuide](implementationguide.html): The human-friendly name of the implementation guide
5397* [MessageDefinition](messagedefinition.html): The human-friendly name of the message definition
5398* [OperationDefinition](operationdefinition.html): The human-friendly name of the operation definition
5399* [StructureDefinition](structuredefinition.html): The human-friendly name of the structure definition
5400* [StructureMap](structuremap.html): The human-friendly name of the structure map
5401* [TerminologyCapabilities](terminologycapabilities.html): The human-friendly name of the terminology capabilities
5402* [ValueSet](valueset.html): The human-friendly name of the value set
5403</b><br>
5404   * Type: <b>string</b><br>
5405   * Path: <b>CapabilityStatement.title | CodeSystem.title | ConceptMap.title | ImplementationGuide.title | MessageDefinition.title | OperationDefinition.title | StructureDefinition.title | StructureMap.title | TerminologyCapabilities.title | ValueSet.title</b><br>
5406   * </p>
5407   */
5408  public static final ca.uhn.fhir.rest.gclient.StringClientParam TITLE = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_TITLE);
5409
5410 /**
5411   * Search parameter: <b>url</b>
5412   * <p>
5413   * Description: <b>Multiple Resources: 
5414
5415* [CapabilityStatement](capabilitystatement.html): The uri that identifies the capability statement
5416* [CodeSystem](codesystem.html): The uri that identifies the code system
5417* [CompartmentDefinition](compartmentdefinition.html): The uri that identifies the compartment definition
5418* [ConceptMap](conceptmap.html): The uri that identifies the concept map
5419* [GraphDefinition](graphdefinition.html): The uri that identifies the graph definition
5420* [ImplementationGuide](implementationguide.html): The uri that identifies the implementation guide
5421* [MessageDefinition](messagedefinition.html): The uri that identifies the message definition
5422* [OperationDefinition](operationdefinition.html): The uri that identifies the operation definition
5423* [SearchParameter](searchparameter.html): The uri that identifies the search parameter
5424* [StructureDefinition](structuredefinition.html): The uri that identifies the structure definition
5425* [StructureMap](structuremap.html): The uri that identifies the structure map
5426* [TerminologyCapabilities](terminologycapabilities.html): The uri that identifies the terminology capabilities
5427* [ValueSet](valueset.html): The uri that identifies the value set
5428</b><br>
5429   * Type: <b>uri</b><br>
5430   * Path: <b>CapabilityStatement.url | CodeSystem.url | CompartmentDefinition.url | ConceptMap.url | GraphDefinition.url | ImplementationGuide.url | MessageDefinition.url | OperationDefinition.url | SearchParameter.url | StructureDefinition.url | StructureMap.url | TerminologyCapabilities.url | ValueSet.url</b><br>
5431   * </p>
5432   */
5433  @SearchParamDefinition(name="url", path="CapabilityStatement.url | CodeSystem.url | CompartmentDefinition.url | ConceptMap.url | GraphDefinition.url | ImplementationGuide.url | MessageDefinition.url | OperationDefinition.url | SearchParameter.url | StructureDefinition.url | StructureMap.url | TerminologyCapabilities.url | ValueSet.url", description="Multiple Resources: \r\n\r\n* [CapabilityStatement](capabilitystatement.html): The uri that identifies the capability statement\r\n* [CodeSystem](codesystem.html): The uri that identifies the code system\r\n* [CompartmentDefinition](compartmentdefinition.html): The uri that identifies the compartment definition\r\n* [ConceptMap](conceptmap.html): The uri that identifies the concept map\r\n* [GraphDefinition](graphdefinition.html): The uri that identifies the graph definition\r\n* [ImplementationGuide](implementationguide.html): The uri that identifies the implementation guide\r\n* [MessageDefinition](messagedefinition.html): The uri that identifies the message definition\r\n* [OperationDefinition](operationdefinition.html): The uri that identifies the operation definition\r\n* [SearchParameter](searchparameter.html): The uri that identifies the search parameter\r\n* [StructureDefinition](structuredefinition.html): The uri that identifies the structure definition\r\n* [StructureMap](structuremap.html): The uri that identifies the structure map\r\n* [TerminologyCapabilities](terminologycapabilities.html): The uri that identifies the terminology capabilities\r\n* [ValueSet](valueset.html): The uri that identifies the value set\r\n", type="uri" )
5434  public static final String SP_URL = "url";
5435 /**
5436   * <b>Fluent Client</b> search parameter constant for <b>url</b>
5437   * <p>
5438   * Description: <b>Multiple Resources: 
5439
5440* [CapabilityStatement](capabilitystatement.html): The uri that identifies the capability statement
5441* [CodeSystem](codesystem.html): The uri that identifies the code system
5442* [CompartmentDefinition](compartmentdefinition.html): The uri that identifies the compartment definition
5443* [ConceptMap](conceptmap.html): The uri that identifies the concept map
5444* [GraphDefinition](graphdefinition.html): The uri that identifies the graph definition
5445* [ImplementationGuide](implementationguide.html): The uri that identifies the implementation guide
5446* [MessageDefinition](messagedefinition.html): The uri that identifies the message definition
5447* [OperationDefinition](operationdefinition.html): The uri that identifies the operation definition
5448* [SearchParameter](searchparameter.html): The uri that identifies the search parameter
5449* [StructureDefinition](structuredefinition.html): The uri that identifies the structure definition
5450* [StructureMap](structuremap.html): The uri that identifies the structure map
5451* [TerminologyCapabilities](terminologycapabilities.html): The uri that identifies the terminology capabilities
5452* [ValueSet](valueset.html): The uri that identifies the value set
5453</b><br>
5454   * Type: <b>uri</b><br>
5455   * Path: <b>CapabilityStatement.url | CodeSystem.url | CompartmentDefinition.url | ConceptMap.url | GraphDefinition.url | ImplementationGuide.url | MessageDefinition.url | OperationDefinition.url | SearchParameter.url | StructureDefinition.url | StructureMap.url | TerminologyCapabilities.url | ValueSet.url</b><br>
5456   * </p>
5457   */
5458  public static final ca.uhn.fhir.rest.gclient.UriClientParam URL = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_URL);
5459
5460 /**
5461   * Search parameter: <b>version</b>
5462   * <p>
5463   * Description: <b>Multiple Resources: 
5464
5465* [CapabilityStatement](capabilitystatement.html): The business version of the capability statement
5466* [CodeSystem](codesystem.html): The business version of the code system
5467* [CompartmentDefinition](compartmentdefinition.html): The business version of the compartment definition
5468* [ConceptMap](conceptmap.html): The business version of the concept map
5469* [GraphDefinition](graphdefinition.html): The business version of the graph definition
5470* [ImplementationGuide](implementationguide.html): The business version of the implementation guide
5471* [MessageDefinition](messagedefinition.html): The business version of the message definition
5472* [OperationDefinition](operationdefinition.html): The business version of the operation definition
5473* [SearchParameter](searchparameter.html): The business version of the search parameter
5474* [StructureDefinition](structuredefinition.html): The business version of the structure definition
5475* [StructureMap](structuremap.html): The business version of the structure map
5476* [TerminologyCapabilities](terminologycapabilities.html): The business version of the terminology capabilities
5477* [ValueSet](valueset.html): The business version of the value set
5478</b><br>
5479   * Type: <b>token</b><br>
5480   * Path: <b>CapabilityStatement.version | CodeSystem.version | CompartmentDefinition.version | ConceptMap.version | GraphDefinition.version | ImplementationGuide.version | MessageDefinition.version | OperationDefinition.version | SearchParameter.version | StructureDefinition.version | StructureMap.version | TerminologyCapabilities.version | ValueSet.version</b><br>
5481   * </p>
5482   */
5483  @SearchParamDefinition(name="version", path="CapabilityStatement.version | CodeSystem.version | CompartmentDefinition.version | ConceptMap.version | GraphDefinition.version | ImplementationGuide.version | MessageDefinition.version | OperationDefinition.version | SearchParameter.version | StructureDefinition.version | StructureMap.version | TerminologyCapabilities.version | ValueSet.version", description="Multiple Resources: \r\n\r\n* [CapabilityStatement](capabilitystatement.html): The business version of the capability statement\r\n* [CodeSystem](codesystem.html): The business version of the code system\r\n* [CompartmentDefinition](compartmentdefinition.html): The business version of the compartment definition\r\n* [ConceptMap](conceptmap.html): The business version of the concept map\r\n* [GraphDefinition](graphdefinition.html): The business version of the graph definition\r\n* [ImplementationGuide](implementationguide.html): The business version of the implementation guide\r\n* [MessageDefinition](messagedefinition.html): The business version of the message definition\r\n* [OperationDefinition](operationdefinition.html): The business version of the operation definition\r\n* [SearchParameter](searchparameter.html): The business version of the search parameter\r\n* [StructureDefinition](structuredefinition.html): The business version of the structure definition\r\n* [StructureMap](structuremap.html): The business version of the structure map\r\n* [TerminologyCapabilities](terminologycapabilities.html): The business version of the terminology capabilities\r\n* [ValueSet](valueset.html): The business version of the value set\r\n", type="token" )
5484  public static final String SP_VERSION = "version";
5485 /**
5486   * <b>Fluent Client</b> search parameter constant for <b>version</b>
5487   * <p>
5488   * Description: <b>Multiple Resources: 
5489
5490* [CapabilityStatement](capabilitystatement.html): The business version of the capability statement
5491* [CodeSystem](codesystem.html): The business version of the code system
5492* [CompartmentDefinition](compartmentdefinition.html): The business version of the compartment definition
5493* [ConceptMap](conceptmap.html): The business version of the concept map
5494* [GraphDefinition](graphdefinition.html): The business version of the graph definition
5495* [ImplementationGuide](implementationguide.html): The business version of the implementation guide
5496* [MessageDefinition](messagedefinition.html): The business version of the message definition
5497* [OperationDefinition](operationdefinition.html): The business version of the operation definition
5498* [SearchParameter](searchparameter.html): The business version of the search parameter
5499* [StructureDefinition](structuredefinition.html): The business version of the structure definition
5500* [StructureMap](structuremap.html): The business version of the structure map
5501* [TerminologyCapabilities](terminologycapabilities.html): The business version of the terminology capabilities
5502* [ValueSet](valueset.html): The business version of the value set
5503</b><br>
5504   * Type: <b>token</b><br>
5505   * Path: <b>CapabilityStatement.version | CodeSystem.version | CompartmentDefinition.version | ConceptMap.version | GraphDefinition.version | ImplementationGuide.version | MessageDefinition.version | OperationDefinition.version | SearchParameter.version | StructureDefinition.version | StructureMap.version | TerminologyCapabilities.version | ValueSet.version</b><br>
5506   * </p>
5507   */
5508  public static final ca.uhn.fhir.rest.gclient.TokenClientParam VERSION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_VERSION);
5509
5510
5511}
5512