001package org.hl7.fhir.r4.model;
002
003/*
004  Copyright (c) 2011+, HL7, Inc.
005  All rights reserved.
006  
007  Redistribution and use in source and binary forms, with or without modification, 
008  are permitted provided that the following conditions are met:
009  
010   * Redistributions of source code must retain the above copyright notice, this 
011     list of conditions and the following disclaimer.
012   * Redistributions in binary form must reproduce the above copyright notice, 
013     this list of conditions and the following disclaimer in the documentation 
014     and/or other materials provided with the distribution.
015   * Neither the name of HL7 nor the names of its contributors may be used to 
016     endorse or promote products derived from this software without specific 
017     prior written permission.
018  
019  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
020  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
021  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
022  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
023  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
024  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
025  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
026  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
027  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
028  POSSIBILITY OF SUCH DAMAGE.
029  
030*/
031
032// Generated on Sun, May 6, 2018 17:51-0400 for FHIR v3.4.0
033
034import java.util.*;
035
036import org.hl7.fhir.utilities.Utilities;
037import org.hl7.fhir.r4.model.Enumerations.*;
038import ca.uhn.fhir.model.api.annotation.ResourceDef;
039import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
040import ca.uhn.fhir.model.api.annotation.Child;
041import ca.uhn.fhir.model.api.annotation.ChildOrder;
042import ca.uhn.fhir.model.api.annotation.Description;
043import ca.uhn.fhir.model.api.annotation.Block;
044import org.hl7.fhir.instance.model.api.*;
045import org.hl7.fhir.exceptions.FHIRException;
046/**
047 * Resource to define constraints on the Expansion of a FHIR ValueSet.
048 */
049@ResourceDef(name="ExpansionProfile", profile="http://hl7.org/fhir/Profile/ExpansionProfile")
050@ChildOrder(names={"url", "identifier", "version", "name", "status", "experimental", "date", "publisher", "contact", "description", "useContext", "jurisdiction", "fixedVersion", "excludedSystem", "includeDesignations", "designation", "includeDefinition", "activeOnly", "excludeNested", "excludeNotForUI", "excludePostCoordinated", "displayLanguage", "limitedExpansion"})
051public class ExpansionProfile extends MetadataResource {
052
053    public enum SystemVersionProcessingMode {
054        /**
055         * Use this version of the code system if a value set doesn't specify a version
056         */
057        DEFAULT, 
058        /**
059         * Use this version of the code system. If a value set specifies a different version, the expansion operation should fail
060         */
061        CHECK, 
062        /**
063         * Use this version of the code system irrespective of which version is specified by a value set. Note that this has obvious safety issues, in that it may result in a value set expansion giving a different list of codes that is both wrong and unsafe, and implementers should only use this capability reluctantly. It primarily exists to deal with situations where specifications have fallen into decay as time passes. If the value is override, the version used SHALL explicitly be represented in the expansion parameters
064         */
065        OVERRIDE, 
066        /**
067         * added to help the parsers with the generic types
068         */
069        NULL;
070        public static SystemVersionProcessingMode fromCode(String codeString) throws FHIRException {
071            if (codeString == null || "".equals(codeString))
072                return null;
073        if ("default".equals(codeString))
074          return DEFAULT;
075        if ("check".equals(codeString))
076          return CHECK;
077        if ("override".equals(codeString))
078          return OVERRIDE;
079        if (Configuration.isAcceptInvalidEnums())
080          return null;
081        else
082          throw new FHIRException("Unknown SystemVersionProcessingMode code '"+codeString+"'");
083        }
084        public String toCode() {
085          switch (this) {
086            case DEFAULT: return "default";
087            case CHECK: return "check";
088            case OVERRIDE: return "override";
089            default: return "?";
090          }
091        }
092        public String getSystem() {
093          switch (this) {
094            case DEFAULT: return "http://hl7.org/fhir/system-version-processing-mode";
095            case CHECK: return "http://hl7.org/fhir/system-version-processing-mode";
096            case OVERRIDE: return "http://hl7.org/fhir/system-version-processing-mode";
097            default: return "?";
098          }
099        }
100        public String getDefinition() {
101          switch (this) {
102            case DEFAULT: return "Use this version of the code system if a value set doesn't specify a version";
103            case CHECK: return "Use this version of the code system. If a value set specifies a different version, the expansion operation should fail";
104            case OVERRIDE: return "Use this version of the code system irrespective of which version is specified by a value set. Note that this has obvious safety issues, in that it may result in a value set expansion giving a different list of codes that is both wrong and unsafe, and implementers should only use this capability reluctantly. It primarily exists to deal with situations where specifications have fallen into decay as time passes. If the value is override, the version used SHALL explicitly be represented in the expansion parameters";
105            default: return "?";
106          }
107        }
108        public String getDisplay() {
109          switch (this) {
110            case DEFAULT: return "Default Version";
111            case CHECK: return "Check ValueSet Version";
112            case OVERRIDE: return "Override ValueSet Version";
113            default: return "?";
114          }
115        }
116    }
117
118  public static class SystemVersionProcessingModeEnumFactory implements EnumFactory<SystemVersionProcessingMode> {
119    public SystemVersionProcessingMode fromCode(String codeString) throws IllegalArgumentException {
120      if (codeString == null || "".equals(codeString))
121            if (codeString == null || "".equals(codeString))
122                return null;
123        if ("default".equals(codeString))
124          return SystemVersionProcessingMode.DEFAULT;
125        if ("check".equals(codeString))
126          return SystemVersionProcessingMode.CHECK;
127        if ("override".equals(codeString))
128          return SystemVersionProcessingMode.OVERRIDE;
129        throw new IllegalArgumentException("Unknown SystemVersionProcessingMode code '"+codeString+"'");
130        }
131        public Enumeration<SystemVersionProcessingMode> fromType(Base code) throws FHIRException {
132          if (code == null)
133            return null;
134          if (code.isEmpty())
135            return new Enumeration<SystemVersionProcessingMode>(this);
136          String codeString = ((PrimitiveType) code).asStringValue();
137          if (codeString == null || "".equals(codeString))
138            return null;
139        if ("default".equals(codeString))
140          return new Enumeration<SystemVersionProcessingMode>(this, SystemVersionProcessingMode.DEFAULT);
141        if ("check".equals(codeString))
142          return new Enumeration<SystemVersionProcessingMode>(this, SystemVersionProcessingMode.CHECK);
143        if ("override".equals(codeString))
144          return new Enumeration<SystemVersionProcessingMode>(this, SystemVersionProcessingMode.OVERRIDE);
145        throw new FHIRException("Unknown SystemVersionProcessingMode code '"+codeString+"'");
146        }
147    public String toCode(SystemVersionProcessingMode code) {
148      if (code == SystemVersionProcessingMode.DEFAULT)
149        return "default";
150      if (code == SystemVersionProcessingMode.CHECK)
151        return "check";
152      if (code == SystemVersionProcessingMode.OVERRIDE)
153        return "override";
154      return "?";
155      }
156    public String toSystem(SystemVersionProcessingMode code) {
157      return code.getSystem();
158      }
159    }
160
161    @Block()
162    public static class ExpansionProfileFixedVersionComponent extends BackboneElement implements IBaseBackboneElement {
163        /**
164         * The specific system for which to fix the version.
165         */
166        @Child(name = "system", type = {UriType.class}, order=1, min=1, max=1, modifier=false, summary=true)
167        @Description(shortDefinition="System to have its version fixed", formalDefinition="The specific system for which to fix the version." )
168        protected UriType system;
169
170        /**
171         * The version of the code system from which codes in the expansion should be included.
172         */
173        @Child(name = "version", type = {StringType.class}, order=2, min=1, max=1, modifier=false, summary=true)
174        @Description(shortDefinition="Specific version of the code system referred to", formalDefinition="The version of the code system from which codes in the expansion should be included." )
175        protected StringType version;
176
177        /**
178         * How to manage the intersection between a fixed version in a value set, and this fixed version of the system in the expansion profile.
179         */
180        @Child(name = "mode", type = {CodeType.class}, order=3, min=1, max=1, modifier=false, summary=true)
181        @Description(shortDefinition="default | check | override", formalDefinition="How to manage the intersection between a fixed version in a value set, and this fixed version of the system in the expansion profile." )
182        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/system-version-processing-mode")
183        protected Enumeration<SystemVersionProcessingMode> mode;
184
185        private static final long serialVersionUID = 1818466753L;
186
187    /**
188     * Constructor
189     */
190      public ExpansionProfileFixedVersionComponent() {
191        super();
192      }
193
194    /**
195     * Constructor
196     */
197      public ExpansionProfileFixedVersionComponent(UriType system, StringType version, Enumeration<SystemVersionProcessingMode> mode) {
198        super();
199        this.system = system;
200        this.version = version;
201        this.mode = mode;
202      }
203
204        /**
205         * @return {@link #system} (The specific system for which to fix the version.). This is the underlying object with id, value and extensions. The accessor "getSystem" gives direct access to the value
206         */
207        public UriType getSystemElement() { 
208          if (this.system == null)
209            if (Configuration.errorOnAutoCreate())
210              throw new Error("Attempt to auto-create ExpansionProfileFixedVersionComponent.system");
211            else if (Configuration.doAutoCreate())
212              this.system = new UriType(); // bb
213          return this.system;
214        }
215
216        public boolean hasSystemElement() { 
217          return this.system != null && !this.system.isEmpty();
218        }
219
220        public boolean hasSystem() { 
221          return this.system != null && !this.system.isEmpty();
222        }
223
224        /**
225         * @param value {@link #system} (The specific system for which to fix the version.). This is the underlying object with id, value and extensions. The accessor "getSystem" gives direct access to the value
226         */
227        public ExpansionProfileFixedVersionComponent setSystemElement(UriType value) { 
228          this.system = value;
229          return this;
230        }
231
232        /**
233         * @return The specific system for which to fix the version.
234         */
235        public String getSystem() { 
236          return this.system == null ? null : this.system.getValue();
237        }
238
239        /**
240         * @param value The specific system for which to fix the version.
241         */
242        public ExpansionProfileFixedVersionComponent setSystem(String value) { 
243            if (this.system == null)
244              this.system = new UriType();
245            this.system.setValue(value);
246          return this;
247        }
248
249        /**
250         * @return {@link #version} (The version of the code system from which codes in the expansion should be included.). This is the underlying object with id, value and extensions. The accessor "getVersion" gives direct access to the value
251         */
252        public StringType getVersionElement() { 
253          if (this.version == null)
254            if (Configuration.errorOnAutoCreate())
255              throw new Error("Attempt to auto-create ExpansionProfileFixedVersionComponent.version");
256            else if (Configuration.doAutoCreate())
257              this.version = new StringType(); // bb
258          return this.version;
259        }
260
261        public boolean hasVersionElement() { 
262          return this.version != null && !this.version.isEmpty();
263        }
264
265        public boolean hasVersion() { 
266          return this.version != null && !this.version.isEmpty();
267        }
268
269        /**
270         * @param value {@link #version} (The version of the code system from which codes in the expansion should be included.). This is the underlying object with id, value and extensions. The accessor "getVersion" gives direct access to the value
271         */
272        public ExpansionProfileFixedVersionComponent setVersionElement(StringType value) { 
273          this.version = value;
274          return this;
275        }
276
277        /**
278         * @return The version of the code system from which codes in the expansion should be included.
279         */
280        public String getVersion() { 
281          return this.version == null ? null : this.version.getValue();
282        }
283
284        /**
285         * @param value The version of the code system from which codes in the expansion should be included.
286         */
287        public ExpansionProfileFixedVersionComponent setVersion(String value) { 
288            if (this.version == null)
289              this.version = new StringType();
290            this.version.setValue(value);
291          return this;
292        }
293
294        /**
295         * @return {@link #mode} (How to manage the intersection between a fixed version in a value set, and this fixed version of the system in the expansion profile.). This is the underlying object with id, value and extensions. The accessor "getMode" gives direct access to the value
296         */
297        public Enumeration<SystemVersionProcessingMode> getModeElement() { 
298          if (this.mode == null)
299            if (Configuration.errorOnAutoCreate())
300              throw new Error("Attempt to auto-create ExpansionProfileFixedVersionComponent.mode");
301            else if (Configuration.doAutoCreate())
302              this.mode = new Enumeration<SystemVersionProcessingMode>(new SystemVersionProcessingModeEnumFactory()); // bb
303          return this.mode;
304        }
305
306        public boolean hasModeElement() { 
307          return this.mode != null && !this.mode.isEmpty();
308        }
309
310        public boolean hasMode() { 
311          return this.mode != null && !this.mode.isEmpty();
312        }
313
314        /**
315         * @param value {@link #mode} (How to manage the intersection between a fixed version in a value set, and this fixed version of the system in the expansion profile.). This is the underlying object with id, value and extensions. The accessor "getMode" gives direct access to the value
316         */
317        public ExpansionProfileFixedVersionComponent setModeElement(Enumeration<SystemVersionProcessingMode> value) { 
318          this.mode = value;
319          return this;
320        }
321
322        /**
323         * @return How to manage the intersection between a fixed version in a value set, and this fixed version of the system in the expansion profile.
324         */
325        public SystemVersionProcessingMode getMode() { 
326          return this.mode == null ? null : this.mode.getValue();
327        }
328
329        /**
330         * @param value How to manage the intersection between a fixed version in a value set, and this fixed version of the system in the expansion profile.
331         */
332        public ExpansionProfileFixedVersionComponent setMode(SystemVersionProcessingMode value) { 
333            if (this.mode == null)
334              this.mode = new Enumeration<SystemVersionProcessingMode>(new SystemVersionProcessingModeEnumFactory());
335            this.mode.setValue(value);
336          return this;
337        }
338
339        protected void listChildren(List<Property> children) {
340          super.listChildren(children);
341          children.add(new Property("system", "uri", "The specific system for which to fix the version.", 0, 1, system));
342          children.add(new Property("version", "string", "The version of the code system from which codes in the expansion should be included.", 0, 1, version));
343          children.add(new Property("mode", "code", "How to manage the intersection between a fixed version in a value set, and this fixed version of the system in the expansion profile.", 0, 1, mode));
344        }
345
346        @Override
347        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
348          switch (_hash) {
349          case -887328209: /*system*/  return new Property("system", "uri", "The specific system for which to fix the version.", 0, 1, system);
350          case 351608024: /*version*/  return new Property("version", "string", "The version of the code system from which codes in the expansion should be included.", 0, 1, version);
351          case 3357091: /*mode*/  return new Property("mode", "code", "How to manage the intersection between a fixed version in a value set, and this fixed version of the system in the expansion profile.", 0, 1, mode);
352          default: return super.getNamedProperty(_hash, _name, _checkValid);
353          }
354
355        }
356
357      @Override
358      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
359        switch (hash) {
360        case -887328209: /*system*/ return this.system == null ? new Base[0] : new Base[] {this.system}; // UriType
361        case 351608024: /*version*/ return this.version == null ? new Base[0] : new Base[] {this.version}; // StringType
362        case 3357091: /*mode*/ return this.mode == null ? new Base[0] : new Base[] {this.mode}; // Enumeration<SystemVersionProcessingMode>
363        default: return super.getProperty(hash, name, checkValid);
364        }
365
366      }
367
368      @Override
369      public Base setProperty(int hash, String name, Base value) throws FHIRException {
370        switch (hash) {
371        case -887328209: // system
372          this.system = castToUri(value); // UriType
373          return value;
374        case 351608024: // version
375          this.version = castToString(value); // StringType
376          return value;
377        case 3357091: // mode
378          value = new SystemVersionProcessingModeEnumFactory().fromType(castToCode(value));
379          this.mode = (Enumeration) value; // Enumeration<SystemVersionProcessingMode>
380          return value;
381        default: return super.setProperty(hash, name, value);
382        }
383
384      }
385
386      @Override
387      public Base setProperty(String name, Base value) throws FHIRException {
388        if (name.equals("system")) {
389          this.system = castToUri(value); // UriType
390        } else if (name.equals("version")) {
391          this.version = castToString(value); // StringType
392        } else if (name.equals("mode")) {
393          value = new SystemVersionProcessingModeEnumFactory().fromType(castToCode(value));
394          this.mode = (Enumeration) value; // Enumeration<SystemVersionProcessingMode>
395        } else
396          return super.setProperty(name, value);
397        return value;
398      }
399
400      @Override
401      public Base makeProperty(int hash, String name) throws FHIRException {
402        switch (hash) {
403        case -887328209:  return getSystemElement();
404        case 351608024:  return getVersionElement();
405        case 3357091:  return getModeElement();
406        default: return super.makeProperty(hash, name);
407        }
408
409      }
410
411      @Override
412      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
413        switch (hash) {
414        case -887328209: /*system*/ return new String[] {"uri"};
415        case 351608024: /*version*/ return new String[] {"string"};
416        case 3357091: /*mode*/ return new String[] {"code"};
417        default: return super.getTypesForProperty(hash, name);
418        }
419
420      }
421
422      @Override
423      public Base addChild(String name) throws FHIRException {
424        if (name.equals("system")) {
425          throw new FHIRException("Cannot call addChild on a primitive type ExpansionProfile.system");
426        }
427        else if (name.equals("version")) {
428          throw new FHIRException("Cannot call addChild on a primitive type ExpansionProfile.version");
429        }
430        else if (name.equals("mode")) {
431          throw new FHIRException("Cannot call addChild on a primitive type ExpansionProfile.mode");
432        }
433        else
434          return super.addChild(name);
435      }
436
437      public ExpansionProfileFixedVersionComponent copy() {
438        ExpansionProfileFixedVersionComponent dst = new ExpansionProfileFixedVersionComponent();
439        copyValues(dst);
440        dst.system = system == null ? null : system.copy();
441        dst.version = version == null ? null : version.copy();
442        dst.mode = mode == null ? null : mode.copy();
443        return dst;
444      }
445
446      @Override
447      public boolean equalsDeep(Base other_) {
448        if (!super.equalsDeep(other_))
449          return false;
450        if (!(other_ instanceof ExpansionProfileFixedVersionComponent))
451          return false;
452        ExpansionProfileFixedVersionComponent o = (ExpansionProfileFixedVersionComponent) other_;
453        return compareDeep(system, o.system, true) && compareDeep(version, o.version, true) && compareDeep(mode, o.mode, true)
454          ;
455      }
456
457      @Override
458      public boolean equalsShallow(Base other_) {
459        if (!super.equalsShallow(other_))
460          return false;
461        if (!(other_ instanceof ExpansionProfileFixedVersionComponent))
462          return false;
463        ExpansionProfileFixedVersionComponent o = (ExpansionProfileFixedVersionComponent) other_;
464        return compareValues(system, o.system, true) && compareValues(version, o.version, true) && compareValues(mode, o.mode, true)
465          ;
466      }
467
468      public boolean isEmpty() {
469        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(system, version, mode);
470      }
471
472  public String fhirType() {
473    return "ExpansionProfile.fixedVersion";
474
475  }
476
477  }
478
479    @Block()
480    public static class ExpansionProfileExcludedSystemComponent extends BackboneElement implements IBaseBackboneElement {
481        /**
482         * An absolute URI which is the code system to be excluded.
483         */
484        @Child(name = "system", type = {UriType.class}, order=1, min=1, max=1, modifier=false, summary=true)
485        @Description(shortDefinition="The specific code system to be excluded", formalDefinition="An absolute URI which is the code system to be excluded." )
486        protected UriType system;
487
488        /**
489         * The version of the code system from which codes in the expansion should be excluded.
490         */
491        @Child(name = "version", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=true)
492        @Description(shortDefinition="Specific version of the code system referred to", formalDefinition="The version of the code system from which codes in the expansion should be excluded." )
493        protected StringType version;
494
495        private static final long serialVersionUID = 1145288774L;
496
497    /**
498     * Constructor
499     */
500      public ExpansionProfileExcludedSystemComponent() {
501        super();
502      }
503
504    /**
505     * Constructor
506     */
507      public ExpansionProfileExcludedSystemComponent(UriType system) {
508        super();
509        this.system = system;
510      }
511
512        /**
513         * @return {@link #system} (An absolute URI which is the code system to be excluded.). This is the underlying object with id, value and extensions. The accessor "getSystem" gives direct access to the value
514         */
515        public UriType getSystemElement() { 
516          if (this.system == null)
517            if (Configuration.errorOnAutoCreate())
518              throw new Error("Attempt to auto-create ExpansionProfileExcludedSystemComponent.system");
519            else if (Configuration.doAutoCreate())
520              this.system = new UriType(); // bb
521          return this.system;
522        }
523
524        public boolean hasSystemElement() { 
525          return this.system != null && !this.system.isEmpty();
526        }
527
528        public boolean hasSystem() { 
529          return this.system != null && !this.system.isEmpty();
530        }
531
532        /**
533         * @param value {@link #system} (An absolute URI which is the code system to be excluded.). This is the underlying object with id, value and extensions. The accessor "getSystem" gives direct access to the value
534         */
535        public ExpansionProfileExcludedSystemComponent setSystemElement(UriType value) { 
536          this.system = value;
537          return this;
538        }
539
540        /**
541         * @return An absolute URI which is the code system to be excluded.
542         */
543        public String getSystem() { 
544          return this.system == null ? null : this.system.getValue();
545        }
546
547        /**
548         * @param value An absolute URI which is the code system to be excluded.
549         */
550        public ExpansionProfileExcludedSystemComponent setSystem(String value) { 
551            if (this.system == null)
552              this.system = new UriType();
553            this.system.setValue(value);
554          return this;
555        }
556
557        /**
558         * @return {@link #version} (The version of the code system from which codes in the expansion should be excluded.). This is the underlying object with id, value and extensions. The accessor "getVersion" gives direct access to the value
559         */
560        public StringType getVersionElement() { 
561          if (this.version == null)
562            if (Configuration.errorOnAutoCreate())
563              throw new Error("Attempt to auto-create ExpansionProfileExcludedSystemComponent.version");
564            else if (Configuration.doAutoCreate())
565              this.version = new StringType(); // bb
566          return this.version;
567        }
568
569        public boolean hasVersionElement() { 
570          return this.version != null && !this.version.isEmpty();
571        }
572
573        public boolean hasVersion() { 
574          return this.version != null && !this.version.isEmpty();
575        }
576
577        /**
578         * @param value {@link #version} (The version of the code system from which codes in the expansion should be excluded.). This is the underlying object with id, value and extensions. The accessor "getVersion" gives direct access to the value
579         */
580        public ExpansionProfileExcludedSystemComponent setVersionElement(StringType value) { 
581          this.version = value;
582          return this;
583        }
584
585        /**
586         * @return The version of the code system from which codes in the expansion should be excluded.
587         */
588        public String getVersion() { 
589          return this.version == null ? null : this.version.getValue();
590        }
591
592        /**
593         * @param value The version of the code system from which codes in the expansion should be excluded.
594         */
595        public ExpansionProfileExcludedSystemComponent setVersion(String value) { 
596          if (Utilities.noString(value))
597            this.version = null;
598          else {
599            if (this.version == null)
600              this.version = new StringType();
601            this.version.setValue(value);
602          }
603          return this;
604        }
605
606        protected void listChildren(List<Property> children) {
607          super.listChildren(children);
608          children.add(new Property("system", "uri", "An absolute URI which is the code system to be excluded.", 0, 1, system));
609          children.add(new Property("version", "string", "The version of the code system from which codes in the expansion should be excluded.", 0, 1, version));
610        }
611
612        @Override
613        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
614          switch (_hash) {
615          case -887328209: /*system*/  return new Property("system", "uri", "An absolute URI which is the code system to be excluded.", 0, 1, system);
616          case 351608024: /*version*/  return new Property("version", "string", "The version of the code system from which codes in the expansion should be excluded.", 0, 1, version);
617          default: return super.getNamedProperty(_hash, _name, _checkValid);
618          }
619
620        }
621
622      @Override
623      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
624        switch (hash) {
625        case -887328209: /*system*/ return this.system == null ? new Base[0] : new Base[] {this.system}; // UriType
626        case 351608024: /*version*/ return this.version == null ? new Base[0] : new Base[] {this.version}; // StringType
627        default: return super.getProperty(hash, name, checkValid);
628        }
629
630      }
631
632      @Override
633      public Base setProperty(int hash, String name, Base value) throws FHIRException {
634        switch (hash) {
635        case -887328209: // system
636          this.system = castToUri(value); // UriType
637          return value;
638        case 351608024: // version
639          this.version = castToString(value); // StringType
640          return value;
641        default: return super.setProperty(hash, name, value);
642        }
643
644      }
645
646      @Override
647      public Base setProperty(String name, Base value) throws FHIRException {
648        if (name.equals("system")) {
649          this.system = castToUri(value); // UriType
650        } else if (name.equals("version")) {
651          this.version = castToString(value); // StringType
652        } else
653          return super.setProperty(name, value);
654        return value;
655      }
656
657      @Override
658      public Base makeProperty(int hash, String name) throws FHIRException {
659        switch (hash) {
660        case -887328209:  return getSystemElement();
661        case 351608024:  return getVersionElement();
662        default: return super.makeProperty(hash, name);
663        }
664
665      }
666
667      @Override
668      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
669        switch (hash) {
670        case -887328209: /*system*/ return new String[] {"uri"};
671        case 351608024: /*version*/ return new String[] {"string"};
672        default: return super.getTypesForProperty(hash, name);
673        }
674
675      }
676
677      @Override
678      public Base addChild(String name) throws FHIRException {
679        if (name.equals("system")) {
680          throw new FHIRException("Cannot call addChild on a primitive type ExpansionProfile.system");
681        }
682        else if (name.equals("version")) {
683          throw new FHIRException("Cannot call addChild on a primitive type ExpansionProfile.version");
684        }
685        else
686          return super.addChild(name);
687      }
688
689      public ExpansionProfileExcludedSystemComponent copy() {
690        ExpansionProfileExcludedSystemComponent dst = new ExpansionProfileExcludedSystemComponent();
691        copyValues(dst);
692        dst.system = system == null ? null : system.copy();
693        dst.version = version == null ? null : version.copy();
694        return dst;
695      }
696
697      @Override
698      public boolean equalsDeep(Base other_) {
699        if (!super.equalsDeep(other_))
700          return false;
701        if (!(other_ instanceof ExpansionProfileExcludedSystemComponent))
702          return false;
703        ExpansionProfileExcludedSystemComponent o = (ExpansionProfileExcludedSystemComponent) other_;
704        return compareDeep(system, o.system, true) && compareDeep(version, o.version, true);
705      }
706
707      @Override
708      public boolean equalsShallow(Base other_) {
709        if (!super.equalsShallow(other_))
710          return false;
711        if (!(other_ instanceof ExpansionProfileExcludedSystemComponent))
712          return false;
713        ExpansionProfileExcludedSystemComponent o = (ExpansionProfileExcludedSystemComponent) other_;
714        return compareValues(system, o.system, true) && compareValues(version, o.version, true);
715      }
716
717      public boolean isEmpty() {
718        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(system, version);
719      }
720
721  public String fhirType() {
722    return "ExpansionProfile.excludedSystem";
723
724  }
725
726  }
727
728    @Block()
729    public static class ExpansionProfileDesignationComponent extends BackboneElement implements IBaseBackboneElement {
730        /**
731         * Designations to be included.
732         */
733        @Child(name = "include", type = {}, order=1, min=0, max=1, modifier=false, summary=true)
734        @Description(shortDefinition="Designations to be included", formalDefinition="Designations to be included." )
735        protected DesignationIncludeComponent include;
736
737        /**
738         * Designations to be excluded.
739         */
740        @Child(name = "exclude", type = {}, order=2, min=0, max=1, modifier=false, summary=true)
741        @Description(shortDefinition="Designations to be excluded", formalDefinition="Designations to be excluded." )
742        protected DesignationExcludeComponent exclude;
743
744        private static final long serialVersionUID = -2080476436L;
745
746    /**
747     * Constructor
748     */
749      public ExpansionProfileDesignationComponent() {
750        super();
751      }
752
753        /**
754         * @return {@link #include} (Designations to be included.)
755         */
756        public DesignationIncludeComponent getInclude() { 
757          if (this.include == null)
758            if (Configuration.errorOnAutoCreate())
759              throw new Error("Attempt to auto-create ExpansionProfileDesignationComponent.include");
760            else if (Configuration.doAutoCreate())
761              this.include = new DesignationIncludeComponent(); // cc
762          return this.include;
763        }
764
765        public boolean hasInclude() { 
766          return this.include != null && !this.include.isEmpty();
767        }
768
769        /**
770         * @param value {@link #include} (Designations to be included.)
771         */
772        public ExpansionProfileDesignationComponent setInclude(DesignationIncludeComponent value) { 
773          this.include = value;
774          return this;
775        }
776
777        /**
778         * @return {@link #exclude} (Designations to be excluded.)
779         */
780        public DesignationExcludeComponent getExclude() { 
781          if (this.exclude == null)
782            if (Configuration.errorOnAutoCreate())
783              throw new Error("Attempt to auto-create ExpansionProfileDesignationComponent.exclude");
784            else if (Configuration.doAutoCreate())
785              this.exclude = new DesignationExcludeComponent(); // cc
786          return this.exclude;
787        }
788
789        public boolean hasExclude() { 
790          return this.exclude != null && !this.exclude.isEmpty();
791        }
792
793        /**
794         * @param value {@link #exclude} (Designations to be excluded.)
795         */
796        public ExpansionProfileDesignationComponent setExclude(DesignationExcludeComponent value) { 
797          this.exclude = value;
798          return this;
799        }
800
801        protected void listChildren(List<Property> children) {
802          super.listChildren(children);
803          children.add(new Property("include", "", "Designations to be included.", 0, 1, include));
804          children.add(new Property("exclude", "", "Designations to be excluded.", 0, 1, exclude));
805        }
806
807        @Override
808        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
809          switch (_hash) {
810          case 1942574248: /*include*/  return new Property("include", "", "Designations to be included.", 0, 1, include);
811          case -1321148966: /*exclude*/  return new Property("exclude", "", "Designations to be excluded.", 0, 1, exclude);
812          default: return super.getNamedProperty(_hash, _name, _checkValid);
813          }
814
815        }
816
817      @Override
818      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
819        switch (hash) {
820        case 1942574248: /*include*/ return this.include == null ? new Base[0] : new Base[] {this.include}; // DesignationIncludeComponent
821        case -1321148966: /*exclude*/ return this.exclude == null ? new Base[0] : new Base[] {this.exclude}; // DesignationExcludeComponent
822        default: return super.getProperty(hash, name, checkValid);
823        }
824
825      }
826
827      @Override
828      public Base setProperty(int hash, String name, Base value) throws FHIRException {
829        switch (hash) {
830        case 1942574248: // include
831          this.include = (DesignationIncludeComponent) value; // DesignationIncludeComponent
832          return value;
833        case -1321148966: // exclude
834          this.exclude = (DesignationExcludeComponent) value; // DesignationExcludeComponent
835          return value;
836        default: return super.setProperty(hash, name, value);
837        }
838
839      }
840
841      @Override
842      public Base setProperty(String name, Base value) throws FHIRException {
843        if (name.equals("include")) {
844          this.include = (DesignationIncludeComponent) value; // DesignationIncludeComponent
845        } else if (name.equals("exclude")) {
846          this.exclude = (DesignationExcludeComponent) value; // DesignationExcludeComponent
847        } else
848          return super.setProperty(name, value);
849        return value;
850      }
851
852      @Override
853      public Base makeProperty(int hash, String name) throws FHIRException {
854        switch (hash) {
855        case 1942574248:  return getInclude(); 
856        case -1321148966:  return getExclude(); 
857        default: return super.makeProperty(hash, name);
858        }
859
860      }
861
862      @Override
863      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
864        switch (hash) {
865        case 1942574248: /*include*/ return new String[] {};
866        case -1321148966: /*exclude*/ return new String[] {};
867        default: return super.getTypesForProperty(hash, name);
868        }
869
870      }
871
872      @Override
873      public Base addChild(String name) throws FHIRException {
874        if (name.equals("include")) {
875          this.include = new DesignationIncludeComponent();
876          return this.include;
877        }
878        else if (name.equals("exclude")) {
879          this.exclude = new DesignationExcludeComponent();
880          return this.exclude;
881        }
882        else
883          return super.addChild(name);
884      }
885
886      public ExpansionProfileDesignationComponent copy() {
887        ExpansionProfileDesignationComponent dst = new ExpansionProfileDesignationComponent();
888        copyValues(dst);
889        dst.include = include == null ? null : include.copy();
890        dst.exclude = exclude == null ? null : exclude.copy();
891        return dst;
892      }
893
894      @Override
895      public boolean equalsDeep(Base other_) {
896        if (!super.equalsDeep(other_))
897          return false;
898        if (!(other_ instanceof ExpansionProfileDesignationComponent))
899          return false;
900        ExpansionProfileDesignationComponent o = (ExpansionProfileDesignationComponent) other_;
901        return compareDeep(include, o.include, true) && compareDeep(exclude, o.exclude, true);
902      }
903
904      @Override
905      public boolean equalsShallow(Base other_) {
906        if (!super.equalsShallow(other_))
907          return false;
908        if (!(other_ instanceof ExpansionProfileDesignationComponent))
909          return false;
910        ExpansionProfileDesignationComponent o = (ExpansionProfileDesignationComponent) other_;
911        return true;
912      }
913
914      public boolean isEmpty() {
915        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(include, exclude);
916      }
917
918  public String fhirType() {
919    return "ExpansionProfile.designation";
920
921  }
922
923  }
924
925    @Block()
926    public static class DesignationIncludeComponent extends BackboneElement implements IBaseBackboneElement {
927        /**
928         * A data group for each designation to be included.
929         */
930        @Child(name = "designation", type = {}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
931        @Description(shortDefinition="The designation to be included", formalDefinition="A data group for each designation to be included." )
932        protected List<DesignationIncludeDesignationComponent> designation;
933
934        private static final long serialVersionUID = -1989669274L;
935
936    /**
937     * Constructor
938     */
939      public DesignationIncludeComponent() {
940        super();
941      }
942
943        /**
944         * @return {@link #designation} (A data group for each designation to be included.)
945         */
946        public List<DesignationIncludeDesignationComponent> getDesignation() { 
947          if (this.designation == null)
948            this.designation = new ArrayList<DesignationIncludeDesignationComponent>();
949          return this.designation;
950        }
951
952        /**
953         * @return Returns a reference to <code>this</code> for easy method chaining
954         */
955        public DesignationIncludeComponent setDesignation(List<DesignationIncludeDesignationComponent> theDesignation) { 
956          this.designation = theDesignation;
957          return this;
958        }
959
960        public boolean hasDesignation() { 
961          if (this.designation == null)
962            return false;
963          for (DesignationIncludeDesignationComponent item : this.designation)
964            if (!item.isEmpty())
965              return true;
966          return false;
967        }
968
969        public DesignationIncludeDesignationComponent addDesignation() { //3
970          DesignationIncludeDesignationComponent t = new DesignationIncludeDesignationComponent();
971          if (this.designation == null)
972            this.designation = new ArrayList<DesignationIncludeDesignationComponent>();
973          this.designation.add(t);
974          return t;
975        }
976
977        public DesignationIncludeComponent addDesignation(DesignationIncludeDesignationComponent t) { //3
978          if (t == null)
979            return this;
980          if (this.designation == null)
981            this.designation = new ArrayList<DesignationIncludeDesignationComponent>();
982          this.designation.add(t);
983          return this;
984        }
985
986        /**
987         * @return The first repetition of repeating field {@link #designation}, creating it if it does not already exist
988         */
989        public DesignationIncludeDesignationComponent getDesignationFirstRep() { 
990          if (getDesignation().isEmpty()) {
991            addDesignation();
992          }
993          return getDesignation().get(0);
994        }
995
996        protected void listChildren(List<Property> children) {
997          super.listChildren(children);
998          children.add(new Property("designation", "", "A data group for each designation to be included.", 0, java.lang.Integer.MAX_VALUE, designation));
999        }
1000
1001        @Override
1002        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1003          switch (_hash) {
1004          case -900931593: /*designation*/  return new Property("designation", "", "A data group for each designation to be included.", 0, java.lang.Integer.MAX_VALUE, designation);
1005          default: return super.getNamedProperty(_hash, _name, _checkValid);
1006          }
1007
1008        }
1009
1010      @Override
1011      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1012        switch (hash) {
1013        case -900931593: /*designation*/ return this.designation == null ? new Base[0] : this.designation.toArray(new Base[this.designation.size()]); // DesignationIncludeDesignationComponent
1014        default: return super.getProperty(hash, name, checkValid);
1015        }
1016
1017      }
1018
1019      @Override
1020      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1021        switch (hash) {
1022        case -900931593: // designation
1023          this.getDesignation().add((DesignationIncludeDesignationComponent) value); // DesignationIncludeDesignationComponent
1024          return value;
1025        default: return super.setProperty(hash, name, value);
1026        }
1027
1028      }
1029
1030      @Override
1031      public Base setProperty(String name, Base value) throws FHIRException {
1032        if (name.equals("designation")) {
1033          this.getDesignation().add((DesignationIncludeDesignationComponent) value);
1034        } else
1035          return super.setProperty(name, value);
1036        return value;
1037      }
1038
1039      @Override
1040      public Base makeProperty(int hash, String name) throws FHIRException {
1041        switch (hash) {
1042        case -900931593:  return addDesignation(); 
1043        default: return super.makeProperty(hash, name);
1044        }
1045
1046      }
1047
1048      @Override
1049      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1050        switch (hash) {
1051        case -900931593: /*designation*/ return new String[] {};
1052        default: return super.getTypesForProperty(hash, name);
1053        }
1054
1055      }
1056
1057      @Override
1058      public Base addChild(String name) throws FHIRException {
1059        if (name.equals("designation")) {
1060          return addDesignation();
1061        }
1062        else
1063          return super.addChild(name);
1064      }
1065
1066      public DesignationIncludeComponent copy() {
1067        DesignationIncludeComponent dst = new DesignationIncludeComponent();
1068        copyValues(dst);
1069        if (designation != null) {
1070          dst.designation = new ArrayList<DesignationIncludeDesignationComponent>();
1071          for (DesignationIncludeDesignationComponent i : designation)
1072            dst.designation.add(i.copy());
1073        };
1074        return dst;
1075      }
1076
1077      @Override
1078      public boolean equalsDeep(Base other_) {
1079        if (!super.equalsDeep(other_))
1080          return false;
1081        if (!(other_ instanceof DesignationIncludeComponent))
1082          return false;
1083        DesignationIncludeComponent o = (DesignationIncludeComponent) other_;
1084        return compareDeep(designation, o.designation, true);
1085      }
1086
1087      @Override
1088      public boolean equalsShallow(Base other_) {
1089        if (!super.equalsShallow(other_))
1090          return false;
1091        if (!(other_ instanceof DesignationIncludeComponent))
1092          return false;
1093        DesignationIncludeComponent o = (DesignationIncludeComponent) other_;
1094        return true;
1095      }
1096
1097      public boolean isEmpty() {
1098        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(designation);
1099      }
1100
1101  public String fhirType() {
1102    return "ExpansionProfile.designation.include";
1103
1104  }
1105
1106  }
1107
1108    @Block()
1109    public static class DesignationIncludeDesignationComponent extends BackboneElement implements IBaseBackboneElement {
1110        /**
1111         * The language this designation is defined for.
1112         */
1113        @Child(name = "language", type = {CodeType.class}, order=1, min=0, max=1, modifier=false, summary=true)
1114        @Description(shortDefinition="Human language of the designation to be included", formalDefinition="The language this designation is defined for." )
1115        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/languages")
1116        protected CodeType language;
1117
1118        /**
1119         * Which kinds of designation to include in the expansion.
1120         */
1121        @Child(name = "use", type = {Coding.class}, order=2, min=0, max=1, modifier=false, summary=true)
1122        @Description(shortDefinition="What kind of Designation to include", formalDefinition="Which kinds of designation to include in the expansion." )
1123        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/designation-use")
1124        protected Coding use;
1125
1126        private static final long serialVersionUID = 242239292L;
1127
1128    /**
1129     * Constructor
1130     */
1131      public DesignationIncludeDesignationComponent() {
1132        super();
1133      }
1134
1135        /**
1136         * @return {@link #language} (The language this designation is defined for.). This is the underlying object with id, value and extensions. The accessor "getLanguage" gives direct access to the value
1137         */
1138        public CodeType getLanguageElement() { 
1139          if (this.language == null)
1140            if (Configuration.errorOnAutoCreate())
1141              throw new Error("Attempt to auto-create DesignationIncludeDesignationComponent.language");
1142            else if (Configuration.doAutoCreate())
1143              this.language = new CodeType(); // bb
1144          return this.language;
1145        }
1146
1147        public boolean hasLanguageElement() { 
1148          return this.language != null && !this.language.isEmpty();
1149        }
1150
1151        public boolean hasLanguage() { 
1152          return this.language != null && !this.language.isEmpty();
1153        }
1154
1155        /**
1156         * @param value {@link #language} (The language this designation is defined for.). This is the underlying object with id, value and extensions. The accessor "getLanguage" gives direct access to the value
1157         */
1158        public DesignationIncludeDesignationComponent setLanguageElement(CodeType value) { 
1159          this.language = value;
1160          return this;
1161        }
1162
1163        /**
1164         * @return The language this designation is defined for.
1165         */
1166        public String getLanguage() { 
1167          return this.language == null ? null : this.language.getValue();
1168        }
1169
1170        /**
1171         * @param value The language this designation is defined for.
1172         */
1173        public DesignationIncludeDesignationComponent setLanguage(String value) { 
1174          if (Utilities.noString(value))
1175            this.language = null;
1176          else {
1177            if (this.language == null)
1178              this.language = new CodeType();
1179            this.language.setValue(value);
1180          }
1181          return this;
1182        }
1183
1184        /**
1185         * @return {@link #use} (Which kinds of designation to include in the expansion.)
1186         */
1187        public Coding getUse() { 
1188          if (this.use == null)
1189            if (Configuration.errorOnAutoCreate())
1190              throw new Error("Attempt to auto-create DesignationIncludeDesignationComponent.use");
1191            else if (Configuration.doAutoCreate())
1192              this.use = new Coding(); // cc
1193          return this.use;
1194        }
1195
1196        public boolean hasUse() { 
1197          return this.use != null && !this.use.isEmpty();
1198        }
1199
1200        /**
1201         * @param value {@link #use} (Which kinds of designation to include in the expansion.)
1202         */
1203        public DesignationIncludeDesignationComponent setUse(Coding value) { 
1204          this.use = value;
1205          return this;
1206        }
1207
1208        protected void listChildren(List<Property> children) {
1209          super.listChildren(children);
1210          children.add(new Property("language", "code", "The language this designation is defined for.", 0, 1, language));
1211          children.add(new Property("use", "Coding", "Which kinds of designation to include in the expansion.", 0, 1, use));
1212        }
1213
1214        @Override
1215        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1216          switch (_hash) {
1217          case -1613589672: /*language*/  return new Property("language", "code", "The language this designation is defined for.", 0, 1, language);
1218          case 116103: /*use*/  return new Property("use", "Coding", "Which kinds of designation to include in the expansion.", 0, 1, use);
1219          default: return super.getNamedProperty(_hash, _name, _checkValid);
1220          }
1221
1222        }
1223
1224      @Override
1225      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1226        switch (hash) {
1227        case -1613589672: /*language*/ return this.language == null ? new Base[0] : new Base[] {this.language}; // CodeType
1228        case 116103: /*use*/ return this.use == null ? new Base[0] : new Base[] {this.use}; // Coding
1229        default: return super.getProperty(hash, name, checkValid);
1230        }
1231
1232      }
1233
1234      @Override
1235      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1236        switch (hash) {
1237        case -1613589672: // language
1238          this.language = castToCode(value); // CodeType
1239          return value;
1240        case 116103: // use
1241          this.use = castToCoding(value); // Coding
1242          return value;
1243        default: return super.setProperty(hash, name, value);
1244        }
1245
1246      }
1247
1248      @Override
1249      public Base setProperty(String name, Base value) throws FHIRException {
1250        if (name.equals("language")) {
1251          this.language = castToCode(value); // CodeType
1252        } else if (name.equals("use")) {
1253          this.use = castToCoding(value); // Coding
1254        } else
1255          return super.setProperty(name, value);
1256        return value;
1257      }
1258
1259      @Override
1260      public Base makeProperty(int hash, String name) throws FHIRException {
1261        switch (hash) {
1262        case -1613589672:  return getLanguageElement();
1263        case 116103:  return getUse(); 
1264        default: return super.makeProperty(hash, name);
1265        }
1266
1267      }
1268
1269      @Override
1270      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1271        switch (hash) {
1272        case -1613589672: /*language*/ return new String[] {"code"};
1273        case 116103: /*use*/ return new String[] {"Coding"};
1274        default: return super.getTypesForProperty(hash, name);
1275        }
1276
1277      }
1278
1279      @Override
1280      public Base addChild(String name) throws FHIRException {
1281        if (name.equals("language")) {
1282          throw new FHIRException("Cannot call addChild on a primitive type ExpansionProfile.language");
1283        }
1284        else if (name.equals("use")) {
1285          this.use = new Coding();
1286          return this.use;
1287        }
1288        else
1289          return super.addChild(name);
1290      }
1291
1292      public DesignationIncludeDesignationComponent copy() {
1293        DesignationIncludeDesignationComponent dst = new DesignationIncludeDesignationComponent();
1294        copyValues(dst);
1295        dst.language = language == null ? null : language.copy();
1296        dst.use = use == null ? null : use.copy();
1297        return dst;
1298      }
1299
1300      @Override
1301      public boolean equalsDeep(Base other_) {
1302        if (!super.equalsDeep(other_))
1303          return false;
1304        if (!(other_ instanceof DesignationIncludeDesignationComponent))
1305          return false;
1306        DesignationIncludeDesignationComponent o = (DesignationIncludeDesignationComponent) other_;
1307        return compareDeep(language, o.language, true) && compareDeep(use, o.use, true);
1308      }
1309
1310      @Override
1311      public boolean equalsShallow(Base other_) {
1312        if (!super.equalsShallow(other_))
1313          return false;
1314        if (!(other_ instanceof DesignationIncludeDesignationComponent))
1315          return false;
1316        DesignationIncludeDesignationComponent o = (DesignationIncludeDesignationComponent) other_;
1317        return compareValues(language, o.language, true);
1318      }
1319
1320      public boolean isEmpty() {
1321        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(language, use);
1322      }
1323
1324  public String fhirType() {
1325    return "ExpansionProfile.designation.include.designation";
1326
1327  }
1328
1329  }
1330
1331    @Block()
1332    public static class DesignationExcludeComponent extends BackboneElement implements IBaseBackboneElement {
1333        /**
1334         * A data group for each designation to be excluded.
1335         */
1336        @Child(name = "designation", type = {}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1337        @Description(shortDefinition="The designation to be excluded", formalDefinition="A data group for each designation to be excluded." )
1338        protected List<DesignationExcludeDesignationComponent> designation;
1339
1340        private static final long serialVersionUID = 1045849752L;
1341
1342    /**
1343     * Constructor
1344     */
1345      public DesignationExcludeComponent() {
1346        super();
1347      }
1348
1349        /**
1350         * @return {@link #designation} (A data group for each designation to be excluded.)
1351         */
1352        public List<DesignationExcludeDesignationComponent> getDesignation() { 
1353          if (this.designation == null)
1354            this.designation = new ArrayList<DesignationExcludeDesignationComponent>();
1355          return this.designation;
1356        }
1357
1358        /**
1359         * @return Returns a reference to <code>this</code> for easy method chaining
1360         */
1361        public DesignationExcludeComponent setDesignation(List<DesignationExcludeDesignationComponent> theDesignation) { 
1362          this.designation = theDesignation;
1363          return this;
1364        }
1365
1366        public boolean hasDesignation() { 
1367          if (this.designation == null)
1368            return false;
1369          for (DesignationExcludeDesignationComponent item : this.designation)
1370            if (!item.isEmpty())
1371              return true;
1372          return false;
1373        }
1374
1375        public DesignationExcludeDesignationComponent addDesignation() { //3
1376          DesignationExcludeDesignationComponent t = new DesignationExcludeDesignationComponent();
1377          if (this.designation == null)
1378            this.designation = new ArrayList<DesignationExcludeDesignationComponent>();
1379          this.designation.add(t);
1380          return t;
1381        }
1382
1383        public DesignationExcludeComponent addDesignation(DesignationExcludeDesignationComponent t) { //3
1384          if (t == null)
1385            return this;
1386          if (this.designation == null)
1387            this.designation = new ArrayList<DesignationExcludeDesignationComponent>();
1388          this.designation.add(t);
1389          return this;
1390        }
1391
1392        /**
1393         * @return The first repetition of repeating field {@link #designation}, creating it if it does not already exist
1394         */
1395        public DesignationExcludeDesignationComponent getDesignationFirstRep() { 
1396          if (getDesignation().isEmpty()) {
1397            addDesignation();
1398          }
1399          return getDesignation().get(0);
1400        }
1401
1402        protected void listChildren(List<Property> children) {
1403          super.listChildren(children);
1404          children.add(new Property("designation", "", "A data group for each designation to be excluded.", 0, java.lang.Integer.MAX_VALUE, designation));
1405        }
1406
1407        @Override
1408        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1409          switch (_hash) {
1410          case -900931593: /*designation*/  return new Property("designation", "", "A data group for each designation to be excluded.", 0, java.lang.Integer.MAX_VALUE, designation);
1411          default: return super.getNamedProperty(_hash, _name, _checkValid);
1412          }
1413
1414        }
1415
1416      @Override
1417      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1418        switch (hash) {
1419        case -900931593: /*designation*/ return this.designation == null ? new Base[0] : this.designation.toArray(new Base[this.designation.size()]); // DesignationExcludeDesignationComponent
1420        default: return super.getProperty(hash, name, checkValid);
1421        }
1422
1423      }
1424
1425      @Override
1426      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1427        switch (hash) {
1428        case -900931593: // designation
1429          this.getDesignation().add((DesignationExcludeDesignationComponent) value); // DesignationExcludeDesignationComponent
1430          return value;
1431        default: return super.setProperty(hash, name, value);
1432        }
1433
1434      }
1435
1436      @Override
1437      public Base setProperty(String name, Base value) throws FHIRException {
1438        if (name.equals("designation")) {
1439          this.getDesignation().add((DesignationExcludeDesignationComponent) value);
1440        } else
1441          return super.setProperty(name, value);
1442        return value;
1443      }
1444
1445      @Override
1446      public Base makeProperty(int hash, String name) throws FHIRException {
1447        switch (hash) {
1448        case -900931593:  return addDesignation(); 
1449        default: return super.makeProperty(hash, name);
1450        }
1451
1452      }
1453
1454      @Override
1455      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1456        switch (hash) {
1457        case -900931593: /*designation*/ return new String[] {};
1458        default: return super.getTypesForProperty(hash, name);
1459        }
1460
1461      }
1462
1463      @Override
1464      public Base addChild(String name) throws FHIRException {
1465        if (name.equals("designation")) {
1466          return addDesignation();
1467        }
1468        else
1469          return super.addChild(name);
1470      }
1471
1472      public DesignationExcludeComponent copy() {
1473        DesignationExcludeComponent dst = new DesignationExcludeComponent();
1474        copyValues(dst);
1475        if (designation != null) {
1476          dst.designation = new ArrayList<DesignationExcludeDesignationComponent>();
1477          for (DesignationExcludeDesignationComponent i : designation)
1478            dst.designation.add(i.copy());
1479        };
1480        return dst;
1481      }
1482
1483      @Override
1484      public boolean equalsDeep(Base other_) {
1485        if (!super.equalsDeep(other_))
1486          return false;
1487        if (!(other_ instanceof DesignationExcludeComponent))
1488          return false;
1489        DesignationExcludeComponent o = (DesignationExcludeComponent) other_;
1490        return compareDeep(designation, o.designation, true);
1491      }
1492
1493      @Override
1494      public boolean equalsShallow(Base other_) {
1495        if (!super.equalsShallow(other_))
1496          return false;
1497        if (!(other_ instanceof DesignationExcludeComponent))
1498          return false;
1499        DesignationExcludeComponent o = (DesignationExcludeComponent) other_;
1500        return true;
1501      }
1502
1503      public boolean isEmpty() {
1504        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(designation);
1505      }
1506
1507  public String fhirType() {
1508    return "ExpansionProfile.designation.exclude";
1509
1510  }
1511
1512  }
1513
1514    @Block()
1515    public static class DesignationExcludeDesignationComponent extends BackboneElement implements IBaseBackboneElement {
1516        /**
1517         * The language this designation is defined for.
1518         */
1519        @Child(name = "language", type = {CodeType.class}, order=1, min=0, max=1, modifier=false, summary=true)
1520        @Description(shortDefinition="Human language of the designation to be excluded", formalDefinition="The language this designation is defined for." )
1521        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/languages")
1522        protected CodeType language;
1523
1524        /**
1525         * Which kinds of designation to exclude from the expansion.
1526         */
1527        @Child(name = "use", type = {Coding.class}, order=2, min=0, max=1, modifier=false, summary=true)
1528        @Description(shortDefinition="What kind of Designation to exclude", formalDefinition="Which kinds of designation to exclude from the expansion." )
1529        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/designation-use")
1530        protected Coding use;
1531
1532        private static final long serialVersionUID = 242239292L;
1533
1534    /**
1535     * Constructor
1536     */
1537      public DesignationExcludeDesignationComponent() {
1538        super();
1539      }
1540
1541        /**
1542         * @return {@link #language} (The language this designation is defined for.). This is the underlying object with id, value and extensions. The accessor "getLanguage" gives direct access to the value
1543         */
1544        public CodeType getLanguageElement() { 
1545          if (this.language == null)
1546            if (Configuration.errorOnAutoCreate())
1547              throw new Error("Attempt to auto-create DesignationExcludeDesignationComponent.language");
1548            else if (Configuration.doAutoCreate())
1549              this.language = new CodeType(); // bb
1550          return this.language;
1551        }
1552
1553        public boolean hasLanguageElement() { 
1554          return this.language != null && !this.language.isEmpty();
1555        }
1556
1557        public boolean hasLanguage() { 
1558          return this.language != null && !this.language.isEmpty();
1559        }
1560
1561        /**
1562         * @param value {@link #language} (The language this designation is defined for.). This is the underlying object with id, value and extensions. The accessor "getLanguage" gives direct access to the value
1563         */
1564        public DesignationExcludeDesignationComponent setLanguageElement(CodeType value) { 
1565          this.language = value;
1566          return this;
1567        }
1568
1569        /**
1570         * @return The language this designation is defined for.
1571         */
1572        public String getLanguage() { 
1573          return this.language == null ? null : this.language.getValue();
1574        }
1575
1576        /**
1577         * @param value The language this designation is defined for.
1578         */
1579        public DesignationExcludeDesignationComponent setLanguage(String value) { 
1580          if (Utilities.noString(value))
1581            this.language = null;
1582          else {
1583            if (this.language == null)
1584              this.language = new CodeType();
1585            this.language.setValue(value);
1586          }
1587          return this;
1588        }
1589
1590        /**
1591         * @return {@link #use} (Which kinds of designation to exclude from the expansion.)
1592         */
1593        public Coding getUse() { 
1594          if (this.use == null)
1595            if (Configuration.errorOnAutoCreate())
1596              throw new Error("Attempt to auto-create DesignationExcludeDesignationComponent.use");
1597            else if (Configuration.doAutoCreate())
1598              this.use = new Coding(); // cc
1599          return this.use;
1600        }
1601
1602        public boolean hasUse() { 
1603          return this.use != null && !this.use.isEmpty();
1604        }
1605
1606        /**
1607         * @param value {@link #use} (Which kinds of designation to exclude from the expansion.)
1608         */
1609        public DesignationExcludeDesignationComponent setUse(Coding value) { 
1610          this.use = value;
1611          return this;
1612        }
1613
1614        protected void listChildren(List<Property> children) {
1615          super.listChildren(children);
1616          children.add(new Property("language", "code", "The language this designation is defined for.", 0, 1, language));
1617          children.add(new Property("use", "Coding", "Which kinds of designation to exclude from the expansion.", 0, 1, use));
1618        }
1619
1620        @Override
1621        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1622          switch (_hash) {
1623          case -1613589672: /*language*/  return new Property("language", "code", "The language this designation is defined for.", 0, 1, language);
1624          case 116103: /*use*/  return new Property("use", "Coding", "Which kinds of designation to exclude from the expansion.", 0, 1, use);
1625          default: return super.getNamedProperty(_hash, _name, _checkValid);
1626          }
1627
1628        }
1629
1630      @Override
1631      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1632        switch (hash) {
1633        case -1613589672: /*language*/ return this.language == null ? new Base[0] : new Base[] {this.language}; // CodeType
1634        case 116103: /*use*/ return this.use == null ? new Base[0] : new Base[] {this.use}; // Coding
1635        default: return super.getProperty(hash, name, checkValid);
1636        }
1637
1638      }
1639
1640      @Override
1641      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1642        switch (hash) {
1643        case -1613589672: // language
1644          this.language = castToCode(value); // CodeType
1645          return value;
1646        case 116103: // use
1647          this.use = castToCoding(value); // Coding
1648          return value;
1649        default: return super.setProperty(hash, name, value);
1650        }
1651
1652      }
1653
1654      @Override
1655      public Base setProperty(String name, Base value) throws FHIRException {
1656        if (name.equals("language")) {
1657          this.language = castToCode(value); // CodeType
1658        } else if (name.equals("use")) {
1659          this.use = castToCoding(value); // Coding
1660        } else
1661          return super.setProperty(name, value);
1662        return value;
1663      }
1664
1665      @Override
1666      public Base makeProperty(int hash, String name) throws FHIRException {
1667        switch (hash) {
1668        case -1613589672:  return getLanguageElement();
1669        case 116103:  return getUse(); 
1670        default: return super.makeProperty(hash, name);
1671        }
1672
1673      }
1674
1675      @Override
1676      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1677        switch (hash) {
1678        case -1613589672: /*language*/ return new String[] {"code"};
1679        case 116103: /*use*/ return new String[] {"Coding"};
1680        default: return super.getTypesForProperty(hash, name);
1681        }
1682
1683      }
1684
1685      @Override
1686      public Base addChild(String name) throws FHIRException {
1687        if (name.equals("language")) {
1688          throw new FHIRException("Cannot call addChild on a primitive type ExpansionProfile.language");
1689        }
1690        else if (name.equals("use")) {
1691          this.use = new Coding();
1692          return this.use;
1693        }
1694        else
1695          return super.addChild(name);
1696      }
1697
1698      public DesignationExcludeDesignationComponent copy() {
1699        DesignationExcludeDesignationComponent dst = new DesignationExcludeDesignationComponent();
1700        copyValues(dst);
1701        dst.language = language == null ? null : language.copy();
1702        dst.use = use == null ? null : use.copy();
1703        return dst;
1704      }
1705
1706      @Override
1707      public boolean equalsDeep(Base other_) {
1708        if (!super.equalsDeep(other_))
1709          return false;
1710        if (!(other_ instanceof DesignationExcludeDesignationComponent))
1711          return false;
1712        DesignationExcludeDesignationComponent o = (DesignationExcludeDesignationComponent) other_;
1713        return compareDeep(language, o.language, true) && compareDeep(use, o.use, true);
1714      }
1715
1716      @Override
1717      public boolean equalsShallow(Base other_) {
1718        if (!super.equalsShallow(other_))
1719          return false;
1720        if (!(other_ instanceof DesignationExcludeDesignationComponent))
1721          return false;
1722        DesignationExcludeDesignationComponent o = (DesignationExcludeDesignationComponent) other_;
1723        return compareValues(language, o.language, true);
1724      }
1725
1726      public boolean isEmpty() {
1727        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(language, use);
1728      }
1729
1730  public String fhirType() {
1731    return "ExpansionProfile.designation.exclude.designation";
1732
1733  }
1734
1735  }
1736
1737    /**
1738     * A formal identifier that is used to identify this expansion profile when it is represented in other formats, or referenced in a specification, model, design or an instance.
1739     */
1740    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=1, modifier=false, summary=true)
1741    @Description(shortDefinition="Additional identifier for the expansion profile", formalDefinition="A formal identifier that is used to identify this expansion profile when it is represented in other formats, or referenced in a specification, model, design or an instance." )
1742    protected Identifier identifier;
1743
1744    /**
1745     * Fix use of a particular code system to a particular version.
1746     */
1747    @Child(name = "fixedVersion", type = {}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1748    @Description(shortDefinition="Fix use of a code system to a particular version", formalDefinition="Fix use of a particular code system to a particular version." )
1749    protected List<ExpansionProfileFixedVersionComponent> fixedVersion;
1750
1751    /**
1752     * Code system, or a particular version of a code system to be excluded from value set expansions.
1753     */
1754    @Child(name = "excludedSystem", type = {}, order=2, min=0, max=1, modifier=false, summary=true)
1755    @Description(shortDefinition="Systems/Versions to be exclude", formalDefinition="Code system, or a particular version of a code system to be excluded from value set expansions." )
1756    protected ExpansionProfileExcludedSystemComponent excludedSystem;
1757
1758    /**
1759     * Controls whether concept designations are to be included or excluded in value set expansions.
1760     */
1761    @Child(name = "includeDesignations", type = {BooleanType.class}, order=3, min=0, max=1, modifier=false, summary=true)
1762    @Description(shortDefinition="Whether the expansion should include concept designations", formalDefinition="Controls whether concept designations are to be included or excluded in value set expansions." )
1763    protected BooleanType includeDesignations;
1764
1765    /**
1766     * A set of criteria that provide the constraints imposed on the value set expansion by including or excluding designations.
1767     */
1768    @Child(name = "designation", type = {}, order=4, min=0, max=1, modifier=false, summary=true)
1769    @Description(shortDefinition="When the expansion profile imposes designation constraints", formalDefinition="A set of criteria that provide the constraints imposed on the value set expansion by including or excluding designations." )
1770    protected ExpansionProfileDesignationComponent designation;
1771
1772    /**
1773     * Controls whether the value set definition is included or excluded in value set expansions.
1774     */
1775    @Child(name = "includeDefinition", type = {BooleanType.class}, order=5, min=0, max=1, modifier=false, summary=true)
1776    @Description(shortDefinition="Include or exclude the value set definition in the expansion", formalDefinition="Controls whether the value set definition is included or excluded in value set expansions." )
1777    protected BooleanType includeDefinition;
1778
1779    /**
1780     * Controls whether inactive concepts are included or excluded in value set expansions.
1781     */
1782    @Child(name = "activeOnly", type = {BooleanType.class}, order=6, min=0, max=1, modifier=false, summary=true)
1783    @Description(shortDefinition="Include or exclude inactive concepts in the expansion", formalDefinition="Controls whether inactive concepts are included or excluded in value set expansions." )
1784    protected BooleanType activeOnly;
1785
1786    /**
1787     * Controls whether or not the value set expansion nests codes or not (i.e. ValueSet.expansion.contains.contains).
1788     */
1789    @Child(name = "excludeNested", type = {BooleanType.class}, order=7, min=0, max=1, modifier=false, summary=true)
1790    @Description(shortDefinition="Nested codes in the expansion or not", formalDefinition="Controls whether or not the value set expansion nests codes or not (i.e. ValueSet.expansion.contains.contains)." )
1791    protected BooleanType excludeNested;
1792
1793    /**
1794     * Controls whether or not the value set expansion includes codes which cannot be displayed in user interfaces.
1795     */
1796    @Child(name = "excludeNotForUI", type = {BooleanType.class}, order=8, min=0, max=1, modifier=false, summary=true)
1797    @Description(shortDefinition="Include or exclude codes which cannot be rendered in user interfaces in the value set expansion", formalDefinition="Controls whether or not the value set expansion includes codes which cannot be displayed in user interfaces." )
1798    protected BooleanType excludeNotForUI;
1799
1800    /**
1801     * Controls whether or not the value set expansion includes post coordinated codes.
1802     */
1803    @Child(name = "excludePostCoordinated", type = {BooleanType.class}, order=9, min=0, max=1, modifier=false, summary=true)
1804    @Description(shortDefinition="Include or exclude codes which are post coordinated expressions in the value set expansion", formalDefinition="Controls whether or not the value set expansion includes post coordinated codes." )
1805    protected BooleanType excludePostCoordinated;
1806
1807    /**
1808     * Specifies the language to be used for description in the expansions i.e. the language to be used for ValueSet.expansion.contains.display.
1809     */
1810    @Child(name = "displayLanguage", type = {CodeType.class}, order=10, min=0, max=1, modifier=false, summary=true)
1811    @Description(shortDefinition="Specify the language for the display element of codes in the value set expansion", formalDefinition="Specifies the language to be used for description in the expansions i.e. the language to be used for ValueSet.expansion.contains.display." )
1812    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/languages")
1813    protected CodeType displayLanguage;
1814
1815    /**
1816     * If the value set being expanded is incomplete (because it is too big to expand), return a limited expansion (a subset) with an indicator that expansion is incomplete, using the extension [http://hl7.org/fhir/StructureDefinition/valueset-toocostly](extension-valueset-toocostly.html).
1817     */
1818    @Child(name = "limitedExpansion", type = {BooleanType.class}, order=11, min=0, max=1, modifier=false, summary=true)
1819    @Description(shortDefinition="Controls behavior of the value set expand operation when value sets are too large to be completely expanded", formalDefinition="If the value set being expanded is incomplete (because it is too big to expand), return a limited expansion (a subset) with an indicator that expansion is incomplete, using the extension [http://hl7.org/fhir/StructureDefinition/valueset-toocostly](extension-valueset-toocostly.html)." )
1820    protected BooleanType limitedExpansion;
1821
1822    private static final long serialVersionUID = 1067457001L;
1823
1824  /**
1825   * Constructor
1826   */
1827    public ExpansionProfile() {
1828      super();
1829    }
1830
1831  /**
1832   * Constructor
1833   */
1834    public ExpansionProfile(Enumeration<PublicationStatus> status) {
1835      super();
1836      this.status = status;
1837    }
1838
1839    /**
1840     * @return {@link #url} (An absolute URI that is used to identify this expansion profile 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 this expansion profile is (or will be) published.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
1841     */
1842    public UriType getUrlElement() { 
1843      if (this.url == null)
1844        if (Configuration.errorOnAutoCreate())
1845          throw new Error("Attempt to auto-create ExpansionProfile.url");
1846        else if (Configuration.doAutoCreate())
1847          this.url = new UriType(); // bb
1848      return this.url;
1849    }
1850
1851    public boolean hasUrlElement() { 
1852      return this.url != null && !this.url.isEmpty();
1853    }
1854
1855    public boolean hasUrl() { 
1856      return this.url != null && !this.url.isEmpty();
1857    }
1858
1859    /**
1860     * @param value {@link #url} (An absolute URI that is used to identify this expansion profile 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 this expansion profile is (or will be) published.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
1861     */
1862    public ExpansionProfile setUrlElement(UriType value) { 
1863      this.url = value;
1864      return this;
1865    }
1866
1867    /**
1868     * @return An absolute URI that is used to identify this expansion profile 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 this expansion profile is (or will be) published.
1869     */
1870    public String getUrl() { 
1871      return this.url == null ? null : this.url.getValue();
1872    }
1873
1874    /**
1875     * @param value An absolute URI that is used to identify this expansion profile 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 this expansion profile is (or will be) published.
1876     */
1877    public ExpansionProfile setUrl(String value) { 
1878      if (Utilities.noString(value))
1879        this.url = null;
1880      else {
1881        if (this.url == null)
1882          this.url = new UriType();
1883        this.url.setValue(value);
1884      }
1885      return this;
1886    }
1887
1888    /**
1889     * @return {@link #identifier} (A formal identifier that is used to identify this expansion profile when it is represented in other formats, or referenced in a specification, model, design or an instance.)
1890     */
1891    public Identifier getIdentifier() { 
1892      if (this.identifier == null)
1893        if (Configuration.errorOnAutoCreate())
1894          throw new Error("Attempt to auto-create ExpansionProfile.identifier");
1895        else if (Configuration.doAutoCreate())
1896          this.identifier = new Identifier(); // cc
1897      return this.identifier;
1898    }
1899
1900    public boolean hasIdentifier() { 
1901      return this.identifier != null && !this.identifier.isEmpty();
1902    }
1903
1904    /**
1905     * @param value {@link #identifier} (A formal identifier that is used to identify this expansion profile when it is represented in other formats, or referenced in a specification, model, design or an instance.)
1906     */
1907    public ExpansionProfile setIdentifier(Identifier value) { 
1908      this.identifier = value;
1909      return this;
1910    }
1911
1912    /**
1913     * @return {@link #version} (The identifier that is used to identify this version of the expansion profile when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the expansion profile 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
1914     */
1915    public StringType getVersionElement() { 
1916      if (this.version == null)
1917        if (Configuration.errorOnAutoCreate())
1918          throw new Error("Attempt to auto-create ExpansionProfile.version");
1919        else if (Configuration.doAutoCreate())
1920          this.version = new StringType(); // bb
1921      return this.version;
1922    }
1923
1924    public boolean hasVersionElement() { 
1925      return this.version != null && !this.version.isEmpty();
1926    }
1927
1928    public boolean hasVersion() { 
1929      return this.version != null && !this.version.isEmpty();
1930    }
1931
1932    /**
1933     * @param value {@link #version} (The identifier that is used to identify this version of the expansion profile when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the expansion profile 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
1934     */
1935    public ExpansionProfile setVersionElement(StringType value) { 
1936      this.version = value;
1937      return this;
1938    }
1939
1940    /**
1941     * @return The identifier that is used to identify this version of the expansion profile when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the expansion profile 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.
1942     */
1943    public String getVersion() { 
1944      return this.version == null ? null : this.version.getValue();
1945    }
1946
1947    /**
1948     * @param value The identifier that is used to identify this version of the expansion profile when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the expansion profile 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.
1949     */
1950    public ExpansionProfile setVersion(String value) { 
1951      if (Utilities.noString(value))
1952        this.version = null;
1953      else {
1954        if (this.version == null)
1955          this.version = new StringType();
1956        this.version.setValue(value);
1957      }
1958      return this;
1959    }
1960
1961    /**
1962     * @return {@link #name} (A natural language name identifying the expansion profile. 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
1963     */
1964    public StringType getNameElement() { 
1965      if (this.name == null)
1966        if (Configuration.errorOnAutoCreate())
1967          throw new Error("Attempt to auto-create ExpansionProfile.name");
1968        else if (Configuration.doAutoCreate())
1969          this.name = new StringType(); // bb
1970      return this.name;
1971    }
1972
1973    public boolean hasNameElement() { 
1974      return this.name != null && !this.name.isEmpty();
1975    }
1976
1977    public boolean hasName() { 
1978      return this.name != null && !this.name.isEmpty();
1979    }
1980
1981    /**
1982     * @param value {@link #name} (A natural language name identifying the expansion profile. 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
1983     */
1984    public ExpansionProfile setNameElement(StringType value) { 
1985      this.name = value;
1986      return this;
1987    }
1988
1989    /**
1990     * @return A natural language name identifying the expansion profile. This name should be usable as an identifier for the module by machine processing applications such as code generation.
1991     */
1992    public String getName() { 
1993      return this.name == null ? null : this.name.getValue();
1994    }
1995
1996    /**
1997     * @param value A natural language name identifying the expansion profile. This name should be usable as an identifier for the module by machine processing applications such as code generation.
1998     */
1999    public ExpansionProfile setName(String value) { 
2000      if (Utilities.noString(value))
2001        this.name = null;
2002      else {
2003        if (this.name == null)
2004          this.name = new StringType();
2005        this.name.setValue(value);
2006      }
2007      return this;
2008    }
2009
2010    /**
2011     * @return {@link #status} (The status of this expansion profile. 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
2012     */
2013    public Enumeration<PublicationStatus> getStatusElement() { 
2014      if (this.status == null)
2015        if (Configuration.errorOnAutoCreate())
2016          throw new Error("Attempt to auto-create ExpansionProfile.status");
2017        else if (Configuration.doAutoCreate())
2018          this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory()); // bb
2019      return this.status;
2020    }
2021
2022    public boolean hasStatusElement() { 
2023      return this.status != null && !this.status.isEmpty();
2024    }
2025
2026    public boolean hasStatus() { 
2027      return this.status != null && !this.status.isEmpty();
2028    }
2029
2030    /**
2031     * @param value {@link #status} (The status of this expansion profile. 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
2032     */
2033    public ExpansionProfile setStatusElement(Enumeration<PublicationStatus> value) { 
2034      this.status = value;
2035      return this;
2036    }
2037
2038    /**
2039     * @return The status of this expansion profile. Enables tracking the life-cycle of the content.
2040     */
2041    public PublicationStatus getStatus() { 
2042      return this.status == null ? null : this.status.getValue();
2043    }
2044
2045    /**
2046     * @param value The status of this expansion profile. Enables tracking the life-cycle of the content.
2047     */
2048    public ExpansionProfile setStatus(PublicationStatus value) { 
2049        if (this.status == null)
2050          this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory());
2051        this.status.setValue(value);
2052      return this;
2053    }
2054
2055    /**
2056     * @return {@link #experimental} (A Boolean value to indicate that this expansion profile 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
2057     */
2058    public BooleanType getExperimentalElement() { 
2059      if (this.experimental == null)
2060        if (Configuration.errorOnAutoCreate())
2061          throw new Error("Attempt to auto-create ExpansionProfile.experimental");
2062        else if (Configuration.doAutoCreate())
2063          this.experimental = new BooleanType(); // bb
2064      return this.experimental;
2065    }
2066
2067    public boolean hasExperimentalElement() { 
2068      return this.experimental != null && !this.experimental.isEmpty();
2069    }
2070
2071    public boolean hasExperimental() { 
2072      return this.experimental != null && !this.experimental.isEmpty();
2073    }
2074
2075    /**
2076     * @param value {@link #experimental} (A Boolean value to indicate that this expansion profile 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
2077     */
2078    public ExpansionProfile setExperimentalElement(BooleanType value) { 
2079      this.experimental = value;
2080      return this;
2081    }
2082
2083    /**
2084     * @return A Boolean value to indicate that this expansion profile is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.
2085     */
2086    public boolean getExperimental() { 
2087      return this.experimental == null || this.experimental.isEmpty() ? false : this.experimental.getValue();
2088    }
2089
2090    /**
2091     * @param value A Boolean value to indicate that this expansion profile is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.
2092     */
2093    public ExpansionProfile setExperimental(boolean value) { 
2094        if (this.experimental == null)
2095          this.experimental = new BooleanType();
2096        this.experimental.setValue(value);
2097      return this;
2098    }
2099
2100    /**
2101     * @return {@link #date} (The date  (and optionally time) when the expansion profile 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 expansion profile changes.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
2102     */
2103    public DateTimeType getDateElement() { 
2104      if (this.date == null)
2105        if (Configuration.errorOnAutoCreate())
2106          throw new Error("Attempt to auto-create ExpansionProfile.date");
2107        else if (Configuration.doAutoCreate())
2108          this.date = new DateTimeType(); // bb
2109      return this.date;
2110    }
2111
2112    public boolean hasDateElement() { 
2113      return this.date != null && !this.date.isEmpty();
2114    }
2115
2116    public boolean hasDate() { 
2117      return this.date != null && !this.date.isEmpty();
2118    }
2119
2120    /**
2121     * @param value {@link #date} (The date  (and optionally time) when the expansion profile 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 expansion profile changes.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
2122     */
2123    public ExpansionProfile setDateElement(DateTimeType value) { 
2124      this.date = value;
2125      return this;
2126    }
2127
2128    /**
2129     * @return The date  (and optionally time) when the expansion profile 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 expansion profile changes.
2130     */
2131    public Date getDate() { 
2132      return this.date == null ? null : this.date.getValue();
2133    }
2134
2135    /**
2136     * @param value The date  (and optionally time) when the expansion profile 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 expansion profile changes.
2137     */
2138    public ExpansionProfile setDate(Date value) { 
2139      if (value == null)
2140        this.date = null;
2141      else {
2142        if (this.date == null)
2143          this.date = new DateTimeType();
2144        this.date.setValue(value);
2145      }
2146      return this;
2147    }
2148
2149    /**
2150     * @return {@link #publisher} (The name of the organization or individual that published the expansion profile.). This is the underlying object with id, value and extensions. The accessor "getPublisher" gives direct access to the value
2151     */
2152    public StringType getPublisherElement() { 
2153      if (this.publisher == null)
2154        if (Configuration.errorOnAutoCreate())
2155          throw new Error("Attempt to auto-create ExpansionProfile.publisher");
2156        else if (Configuration.doAutoCreate())
2157          this.publisher = new StringType(); // bb
2158      return this.publisher;
2159    }
2160
2161    public boolean hasPublisherElement() { 
2162      return this.publisher != null && !this.publisher.isEmpty();
2163    }
2164
2165    public boolean hasPublisher() { 
2166      return this.publisher != null && !this.publisher.isEmpty();
2167    }
2168
2169    /**
2170     * @param value {@link #publisher} (The name of the organization or individual that published the expansion profile.). This is the underlying object with id, value and extensions. The accessor "getPublisher" gives direct access to the value
2171     */
2172    public ExpansionProfile setPublisherElement(StringType value) { 
2173      this.publisher = value;
2174      return this;
2175    }
2176
2177    /**
2178     * @return The name of the organization or individual that published the expansion profile.
2179     */
2180    public String getPublisher() { 
2181      return this.publisher == null ? null : this.publisher.getValue();
2182    }
2183
2184    /**
2185     * @param value The name of the organization or individual that published the expansion profile.
2186     */
2187    public ExpansionProfile setPublisher(String value) { 
2188      if (Utilities.noString(value))
2189        this.publisher = null;
2190      else {
2191        if (this.publisher == null)
2192          this.publisher = new StringType();
2193        this.publisher.setValue(value);
2194      }
2195      return this;
2196    }
2197
2198    /**
2199     * @return {@link #contact} (Contact details to assist a user in finding and communicating with the publisher.)
2200     */
2201    public List<ContactDetail> getContact() { 
2202      if (this.contact == null)
2203        this.contact = new ArrayList<ContactDetail>();
2204      return this.contact;
2205    }
2206
2207    /**
2208     * @return Returns a reference to <code>this</code> for easy method chaining
2209     */
2210    public ExpansionProfile setContact(List<ContactDetail> theContact) { 
2211      this.contact = theContact;
2212      return this;
2213    }
2214
2215    public boolean hasContact() { 
2216      if (this.contact == null)
2217        return false;
2218      for (ContactDetail item : this.contact)
2219        if (!item.isEmpty())
2220          return true;
2221      return false;
2222    }
2223
2224    public ContactDetail addContact() { //3
2225      ContactDetail t = new ContactDetail();
2226      if (this.contact == null)
2227        this.contact = new ArrayList<ContactDetail>();
2228      this.contact.add(t);
2229      return t;
2230    }
2231
2232    public ExpansionProfile addContact(ContactDetail t) { //3
2233      if (t == null)
2234        return this;
2235      if (this.contact == null)
2236        this.contact = new ArrayList<ContactDetail>();
2237      this.contact.add(t);
2238      return this;
2239    }
2240
2241    /**
2242     * @return The first repetition of repeating field {@link #contact}, creating it if it does not already exist
2243     */
2244    public ContactDetail getContactFirstRep() { 
2245      if (getContact().isEmpty()) {
2246        addContact();
2247      }
2248      return getContact().get(0);
2249    }
2250
2251    /**
2252     * @return {@link #description} (A free text natural language description of the expansion profile from a consumer's perspective.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
2253     */
2254    public MarkdownType getDescriptionElement() { 
2255      if (this.description == null)
2256        if (Configuration.errorOnAutoCreate())
2257          throw new Error("Attempt to auto-create ExpansionProfile.description");
2258        else if (Configuration.doAutoCreate())
2259          this.description = new MarkdownType(); // bb
2260      return this.description;
2261    }
2262
2263    public boolean hasDescriptionElement() { 
2264      return this.description != null && !this.description.isEmpty();
2265    }
2266
2267    public boolean hasDescription() { 
2268      return this.description != null && !this.description.isEmpty();
2269    }
2270
2271    /**
2272     * @param value {@link #description} (A free text natural language description of the expansion profile from a consumer's perspective.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
2273     */
2274    public ExpansionProfile setDescriptionElement(MarkdownType value) { 
2275      this.description = value;
2276      return this;
2277    }
2278
2279    /**
2280     * @return A free text natural language description of the expansion profile from a consumer's perspective.
2281     */
2282    public String getDescription() { 
2283      return this.description == null ? null : this.description.getValue();
2284    }
2285
2286    /**
2287     * @param value A free text natural language description of the expansion profile from a consumer's perspective.
2288     */
2289    public ExpansionProfile setDescription(String value) { 
2290      if (value == null)
2291        this.description = null;
2292      else {
2293        if (this.description == null)
2294          this.description = new MarkdownType();
2295        this.description.setValue(value);
2296      }
2297      return this;
2298    }
2299
2300    /**
2301     * @return {@link #useContext} (The content was developed with a focus and intent of supporting the contexts that are listed. These terms may be used to assist with indexing and searching for appropriate expansion profile instances.)
2302     */
2303    public List<UsageContext> getUseContext() { 
2304      if (this.useContext == null)
2305        this.useContext = new ArrayList<UsageContext>();
2306      return this.useContext;
2307    }
2308
2309    /**
2310     * @return Returns a reference to <code>this</code> for easy method chaining
2311     */
2312    public ExpansionProfile setUseContext(List<UsageContext> theUseContext) { 
2313      this.useContext = theUseContext;
2314      return this;
2315    }
2316
2317    public boolean hasUseContext() { 
2318      if (this.useContext == null)
2319        return false;
2320      for (UsageContext item : this.useContext)
2321        if (!item.isEmpty())
2322          return true;
2323      return false;
2324    }
2325
2326    public UsageContext addUseContext() { //3
2327      UsageContext t = new UsageContext();
2328      if (this.useContext == null)
2329        this.useContext = new ArrayList<UsageContext>();
2330      this.useContext.add(t);
2331      return t;
2332    }
2333
2334    public ExpansionProfile addUseContext(UsageContext t) { //3
2335      if (t == null)
2336        return this;
2337      if (this.useContext == null)
2338        this.useContext = new ArrayList<UsageContext>();
2339      this.useContext.add(t);
2340      return this;
2341    }
2342
2343    /**
2344     * @return The first repetition of repeating field {@link #useContext}, creating it if it does not already exist
2345     */
2346    public UsageContext getUseContextFirstRep() { 
2347      if (getUseContext().isEmpty()) {
2348        addUseContext();
2349      }
2350      return getUseContext().get(0);
2351    }
2352
2353    /**
2354     * @return {@link #jurisdiction} (A legal or geographic region in which the expansion profile is intended to be used.)
2355     */
2356    public List<CodeableConcept> getJurisdiction() { 
2357      if (this.jurisdiction == null)
2358        this.jurisdiction = new ArrayList<CodeableConcept>();
2359      return this.jurisdiction;
2360    }
2361
2362    /**
2363     * @return Returns a reference to <code>this</code> for easy method chaining
2364     */
2365    public ExpansionProfile setJurisdiction(List<CodeableConcept> theJurisdiction) { 
2366      this.jurisdiction = theJurisdiction;
2367      return this;
2368    }
2369
2370    public boolean hasJurisdiction() { 
2371      if (this.jurisdiction == null)
2372        return false;
2373      for (CodeableConcept item : this.jurisdiction)
2374        if (!item.isEmpty())
2375          return true;
2376      return false;
2377    }
2378
2379    public CodeableConcept addJurisdiction() { //3
2380      CodeableConcept t = new CodeableConcept();
2381      if (this.jurisdiction == null)
2382        this.jurisdiction = new ArrayList<CodeableConcept>();
2383      this.jurisdiction.add(t);
2384      return t;
2385    }
2386
2387    public ExpansionProfile addJurisdiction(CodeableConcept t) { //3
2388      if (t == null)
2389        return this;
2390      if (this.jurisdiction == null)
2391        this.jurisdiction = new ArrayList<CodeableConcept>();
2392      this.jurisdiction.add(t);
2393      return this;
2394    }
2395
2396    /**
2397     * @return The first repetition of repeating field {@link #jurisdiction}, creating it if it does not already exist
2398     */
2399    public CodeableConcept getJurisdictionFirstRep() { 
2400      if (getJurisdiction().isEmpty()) {
2401        addJurisdiction();
2402      }
2403      return getJurisdiction().get(0);
2404    }
2405
2406    /**
2407     * @return {@link #fixedVersion} (Fix use of a particular code system to a particular version.)
2408     */
2409    public List<ExpansionProfileFixedVersionComponent> getFixedVersion() { 
2410      if (this.fixedVersion == null)
2411        this.fixedVersion = new ArrayList<ExpansionProfileFixedVersionComponent>();
2412      return this.fixedVersion;
2413    }
2414
2415    /**
2416     * @return Returns a reference to <code>this</code> for easy method chaining
2417     */
2418    public ExpansionProfile setFixedVersion(List<ExpansionProfileFixedVersionComponent> theFixedVersion) { 
2419      this.fixedVersion = theFixedVersion;
2420      return this;
2421    }
2422
2423    public boolean hasFixedVersion() { 
2424      if (this.fixedVersion == null)
2425        return false;
2426      for (ExpansionProfileFixedVersionComponent item : this.fixedVersion)
2427        if (!item.isEmpty())
2428          return true;
2429      return false;
2430    }
2431
2432    public ExpansionProfileFixedVersionComponent addFixedVersion() { //3
2433      ExpansionProfileFixedVersionComponent t = new ExpansionProfileFixedVersionComponent();
2434      if (this.fixedVersion == null)
2435        this.fixedVersion = new ArrayList<ExpansionProfileFixedVersionComponent>();
2436      this.fixedVersion.add(t);
2437      return t;
2438    }
2439
2440    public ExpansionProfile addFixedVersion(ExpansionProfileFixedVersionComponent t) { //3
2441      if (t == null)
2442        return this;
2443      if (this.fixedVersion == null)
2444        this.fixedVersion = new ArrayList<ExpansionProfileFixedVersionComponent>();
2445      this.fixedVersion.add(t);
2446      return this;
2447    }
2448
2449    /**
2450     * @return The first repetition of repeating field {@link #fixedVersion}, creating it if it does not already exist
2451     */
2452    public ExpansionProfileFixedVersionComponent getFixedVersionFirstRep() { 
2453      if (getFixedVersion().isEmpty()) {
2454        addFixedVersion();
2455      }
2456      return getFixedVersion().get(0);
2457    }
2458
2459    /**
2460     * @return {@link #excludedSystem} (Code system, or a particular version of a code system to be excluded from value set expansions.)
2461     */
2462    public ExpansionProfileExcludedSystemComponent getExcludedSystem() { 
2463      if (this.excludedSystem == null)
2464        if (Configuration.errorOnAutoCreate())
2465          throw new Error("Attempt to auto-create ExpansionProfile.excludedSystem");
2466        else if (Configuration.doAutoCreate())
2467          this.excludedSystem = new ExpansionProfileExcludedSystemComponent(); // cc
2468      return this.excludedSystem;
2469    }
2470
2471    public boolean hasExcludedSystem() { 
2472      return this.excludedSystem != null && !this.excludedSystem.isEmpty();
2473    }
2474
2475    /**
2476     * @param value {@link #excludedSystem} (Code system, or a particular version of a code system to be excluded from value set expansions.)
2477     */
2478    public ExpansionProfile setExcludedSystem(ExpansionProfileExcludedSystemComponent value) { 
2479      this.excludedSystem = value;
2480      return this;
2481    }
2482
2483    /**
2484     * @return {@link #includeDesignations} (Controls whether concept designations are to be included or excluded in value set expansions.). This is the underlying object with id, value and extensions. The accessor "getIncludeDesignations" gives direct access to the value
2485     */
2486    public BooleanType getIncludeDesignationsElement() { 
2487      if (this.includeDesignations == null)
2488        if (Configuration.errorOnAutoCreate())
2489          throw new Error("Attempt to auto-create ExpansionProfile.includeDesignations");
2490        else if (Configuration.doAutoCreate())
2491          this.includeDesignations = new BooleanType(); // bb
2492      return this.includeDesignations;
2493    }
2494
2495    public boolean hasIncludeDesignationsElement() { 
2496      return this.includeDesignations != null && !this.includeDesignations.isEmpty();
2497    }
2498
2499    public boolean hasIncludeDesignations() { 
2500      return this.includeDesignations != null && !this.includeDesignations.isEmpty();
2501    }
2502
2503    /**
2504     * @param value {@link #includeDesignations} (Controls whether concept designations are to be included or excluded in value set expansions.). This is the underlying object with id, value and extensions. The accessor "getIncludeDesignations" gives direct access to the value
2505     */
2506    public ExpansionProfile setIncludeDesignationsElement(BooleanType value) { 
2507      this.includeDesignations = value;
2508      return this;
2509    }
2510
2511    /**
2512     * @return Controls whether concept designations are to be included or excluded in value set expansions.
2513     */
2514    public boolean getIncludeDesignations() { 
2515      return this.includeDesignations == null || this.includeDesignations.isEmpty() ? false : this.includeDesignations.getValue();
2516    }
2517
2518    /**
2519     * @param value Controls whether concept designations are to be included or excluded in value set expansions.
2520     */
2521    public ExpansionProfile setIncludeDesignations(boolean value) { 
2522        if (this.includeDesignations == null)
2523          this.includeDesignations = new BooleanType();
2524        this.includeDesignations.setValue(value);
2525      return this;
2526    }
2527
2528    /**
2529     * @return {@link #designation} (A set of criteria that provide the constraints imposed on the value set expansion by including or excluding designations.)
2530     */
2531    public ExpansionProfileDesignationComponent getDesignation() { 
2532      if (this.designation == null)
2533        if (Configuration.errorOnAutoCreate())
2534          throw new Error("Attempt to auto-create ExpansionProfile.designation");
2535        else if (Configuration.doAutoCreate())
2536          this.designation = new ExpansionProfileDesignationComponent(); // cc
2537      return this.designation;
2538    }
2539
2540    public boolean hasDesignation() { 
2541      return this.designation != null && !this.designation.isEmpty();
2542    }
2543
2544    /**
2545     * @param value {@link #designation} (A set of criteria that provide the constraints imposed on the value set expansion by including or excluding designations.)
2546     */
2547    public ExpansionProfile setDesignation(ExpansionProfileDesignationComponent value) { 
2548      this.designation = value;
2549      return this;
2550    }
2551
2552    /**
2553     * @return {@link #includeDefinition} (Controls whether the value set definition is included or excluded in value set expansions.). This is the underlying object with id, value and extensions. The accessor "getIncludeDefinition" gives direct access to the value
2554     */
2555    public BooleanType getIncludeDefinitionElement() { 
2556      if (this.includeDefinition == null)
2557        if (Configuration.errorOnAutoCreate())
2558          throw new Error("Attempt to auto-create ExpansionProfile.includeDefinition");
2559        else if (Configuration.doAutoCreate())
2560          this.includeDefinition = new BooleanType(); // bb
2561      return this.includeDefinition;
2562    }
2563
2564    public boolean hasIncludeDefinitionElement() { 
2565      return this.includeDefinition != null && !this.includeDefinition.isEmpty();
2566    }
2567
2568    public boolean hasIncludeDefinition() { 
2569      return this.includeDefinition != null && !this.includeDefinition.isEmpty();
2570    }
2571
2572    /**
2573     * @param value {@link #includeDefinition} (Controls whether the value set definition is included or excluded in value set expansions.). This is the underlying object with id, value and extensions. The accessor "getIncludeDefinition" gives direct access to the value
2574     */
2575    public ExpansionProfile setIncludeDefinitionElement(BooleanType value) { 
2576      this.includeDefinition = value;
2577      return this;
2578    }
2579
2580    /**
2581     * @return Controls whether the value set definition is included or excluded in value set expansions.
2582     */
2583    public boolean getIncludeDefinition() { 
2584      return this.includeDefinition == null || this.includeDefinition.isEmpty() ? false : this.includeDefinition.getValue();
2585    }
2586
2587    /**
2588     * @param value Controls whether the value set definition is included or excluded in value set expansions.
2589     */
2590    public ExpansionProfile setIncludeDefinition(boolean value) { 
2591        if (this.includeDefinition == null)
2592          this.includeDefinition = new BooleanType();
2593        this.includeDefinition.setValue(value);
2594      return this;
2595    }
2596
2597    /**
2598     * @return {@link #activeOnly} (Controls whether inactive concepts are included or excluded in value set expansions.). This is the underlying object with id, value and extensions. The accessor "getActiveOnly" gives direct access to the value
2599     */
2600    public BooleanType getActiveOnlyElement() { 
2601      if (this.activeOnly == null)
2602        if (Configuration.errorOnAutoCreate())
2603          throw new Error("Attempt to auto-create ExpansionProfile.activeOnly");
2604        else if (Configuration.doAutoCreate())
2605          this.activeOnly = new BooleanType(); // bb
2606      return this.activeOnly;
2607    }
2608
2609    public boolean hasActiveOnlyElement() { 
2610      return this.activeOnly != null && !this.activeOnly.isEmpty();
2611    }
2612
2613    public boolean hasActiveOnly() { 
2614      return this.activeOnly != null && !this.activeOnly.isEmpty();
2615    }
2616
2617    /**
2618     * @param value {@link #activeOnly} (Controls whether inactive concepts are included or excluded in value set expansions.). This is the underlying object with id, value and extensions. The accessor "getActiveOnly" gives direct access to the value
2619     */
2620    public ExpansionProfile setActiveOnlyElement(BooleanType value) { 
2621      this.activeOnly = value;
2622      return this;
2623    }
2624
2625    /**
2626     * @return Controls whether inactive concepts are included or excluded in value set expansions.
2627     */
2628    public boolean getActiveOnly() { 
2629      return this.activeOnly == null || this.activeOnly.isEmpty() ? false : this.activeOnly.getValue();
2630    }
2631
2632    /**
2633     * @param value Controls whether inactive concepts are included or excluded in value set expansions.
2634     */
2635    public ExpansionProfile setActiveOnly(boolean value) { 
2636        if (this.activeOnly == null)
2637          this.activeOnly = new BooleanType();
2638        this.activeOnly.setValue(value);
2639      return this;
2640    }
2641
2642    /**
2643     * @return {@link #excludeNested} (Controls whether or not the value set expansion nests codes or not (i.e. ValueSet.expansion.contains.contains).). This is the underlying object with id, value and extensions. The accessor "getExcludeNested" gives direct access to the value
2644     */
2645    public BooleanType getExcludeNestedElement() { 
2646      if (this.excludeNested == null)
2647        if (Configuration.errorOnAutoCreate())
2648          throw new Error("Attempt to auto-create ExpansionProfile.excludeNested");
2649        else if (Configuration.doAutoCreate())
2650          this.excludeNested = new BooleanType(); // bb
2651      return this.excludeNested;
2652    }
2653
2654    public boolean hasExcludeNestedElement() { 
2655      return this.excludeNested != null && !this.excludeNested.isEmpty();
2656    }
2657
2658    public boolean hasExcludeNested() { 
2659      return this.excludeNested != null && !this.excludeNested.isEmpty();
2660    }
2661
2662    /**
2663     * @param value {@link #excludeNested} (Controls whether or not the value set expansion nests codes or not (i.e. ValueSet.expansion.contains.contains).). This is the underlying object with id, value and extensions. The accessor "getExcludeNested" gives direct access to the value
2664     */
2665    public ExpansionProfile setExcludeNestedElement(BooleanType value) { 
2666      this.excludeNested = value;
2667      return this;
2668    }
2669
2670    /**
2671     * @return Controls whether or not the value set expansion nests codes or not (i.e. ValueSet.expansion.contains.contains).
2672     */
2673    public boolean getExcludeNested() { 
2674      return this.excludeNested == null || this.excludeNested.isEmpty() ? false : this.excludeNested.getValue();
2675    }
2676
2677    /**
2678     * @param value Controls whether or not the value set expansion nests codes or not (i.e. ValueSet.expansion.contains.contains).
2679     */
2680    public ExpansionProfile setExcludeNested(boolean value) { 
2681        if (this.excludeNested == null)
2682          this.excludeNested = new BooleanType();
2683        this.excludeNested.setValue(value);
2684      return this;
2685    }
2686
2687    /**
2688     * @return {@link #excludeNotForUI} (Controls whether or not the value set expansion includes codes which cannot be displayed in user interfaces.). This is the underlying object with id, value and extensions. The accessor "getExcludeNotForUI" gives direct access to the value
2689     */
2690    public BooleanType getExcludeNotForUIElement() { 
2691      if (this.excludeNotForUI == null)
2692        if (Configuration.errorOnAutoCreate())
2693          throw new Error("Attempt to auto-create ExpansionProfile.excludeNotForUI");
2694        else if (Configuration.doAutoCreate())
2695          this.excludeNotForUI = new BooleanType(); // bb
2696      return this.excludeNotForUI;
2697    }
2698
2699    public boolean hasExcludeNotForUIElement() { 
2700      return this.excludeNotForUI != null && !this.excludeNotForUI.isEmpty();
2701    }
2702
2703    public boolean hasExcludeNotForUI() { 
2704      return this.excludeNotForUI != null && !this.excludeNotForUI.isEmpty();
2705    }
2706
2707    /**
2708     * @param value {@link #excludeNotForUI} (Controls whether or not the value set expansion includes codes which cannot be displayed in user interfaces.). This is the underlying object with id, value and extensions. The accessor "getExcludeNotForUI" gives direct access to the value
2709     */
2710    public ExpansionProfile setExcludeNotForUIElement(BooleanType value) { 
2711      this.excludeNotForUI = value;
2712      return this;
2713    }
2714
2715    /**
2716     * @return Controls whether or not the value set expansion includes codes which cannot be displayed in user interfaces.
2717     */
2718    public boolean getExcludeNotForUI() { 
2719      return this.excludeNotForUI == null || this.excludeNotForUI.isEmpty() ? false : this.excludeNotForUI.getValue();
2720    }
2721
2722    /**
2723     * @param value Controls whether or not the value set expansion includes codes which cannot be displayed in user interfaces.
2724     */
2725    public ExpansionProfile setExcludeNotForUI(boolean value) { 
2726        if (this.excludeNotForUI == null)
2727          this.excludeNotForUI = new BooleanType();
2728        this.excludeNotForUI.setValue(value);
2729      return this;
2730    }
2731
2732    /**
2733     * @return {@link #excludePostCoordinated} (Controls whether or not the value set expansion includes post coordinated codes.). This is the underlying object with id, value and extensions. The accessor "getExcludePostCoordinated" gives direct access to the value
2734     */
2735    public BooleanType getExcludePostCoordinatedElement() { 
2736      if (this.excludePostCoordinated == null)
2737        if (Configuration.errorOnAutoCreate())
2738          throw new Error("Attempt to auto-create ExpansionProfile.excludePostCoordinated");
2739        else if (Configuration.doAutoCreate())
2740          this.excludePostCoordinated = new BooleanType(); // bb
2741      return this.excludePostCoordinated;
2742    }
2743
2744    public boolean hasExcludePostCoordinatedElement() { 
2745      return this.excludePostCoordinated != null && !this.excludePostCoordinated.isEmpty();
2746    }
2747
2748    public boolean hasExcludePostCoordinated() { 
2749      return this.excludePostCoordinated != null && !this.excludePostCoordinated.isEmpty();
2750    }
2751
2752    /**
2753     * @param value {@link #excludePostCoordinated} (Controls whether or not the value set expansion includes post coordinated codes.). This is the underlying object with id, value and extensions. The accessor "getExcludePostCoordinated" gives direct access to the value
2754     */
2755    public ExpansionProfile setExcludePostCoordinatedElement(BooleanType value) { 
2756      this.excludePostCoordinated = value;
2757      return this;
2758    }
2759
2760    /**
2761     * @return Controls whether or not the value set expansion includes post coordinated codes.
2762     */
2763    public boolean getExcludePostCoordinated() { 
2764      return this.excludePostCoordinated == null || this.excludePostCoordinated.isEmpty() ? false : this.excludePostCoordinated.getValue();
2765    }
2766
2767    /**
2768     * @param value Controls whether or not the value set expansion includes post coordinated codes.
2769     */
2770    public ExpansionProfile setExcludePostCoordinated(boolean value) { 
2771        if (this.excludePostCoordinated == null)
2772          this.excludePostCoordinated = new BooleanType();
2773        this.excludePostCoordinated.setValue(value);
2774      return this;
2775    }
2776
2777    /**
2778     * @return {@link #displayLanguage} (Specifies the language to be used for description in the expansions i.e. the language to be used for ValueSet.expansion.contains.display.). This is the underlying object with id, value and extensions. The accessor "getDisplayLanguage" gives direct access to the value
2779     */
2780    public CodeType getDisplayLanguageElement() { 
2781      if (this.displayLanguage == null)
2782        if (Configuration.errorOnAutoCreate())
2783          throw new Error("Attempt to auto-create ExpansionProfile.displayLanguage");
2784        else if (Configuration.doAutoCreate())
2785          this.displayLanguage = new CodeType(); // bb
2786      return this.displayLanguage;
2787    }
2788
2789    public boolean hasDisplayLanguageElement() { 
2790      return this.displayLanguage != null && !this.displayLanguage.isEmpty();
2791    }
2792
2793    public boolean hasDisplayLanguage() { 
2794      return this.displayLanguage != null && !this.displayLanguage.isEmpty();
2795    }
2796
2797    /**
2798     * @param value {@link #displayLanguage} (Specifies the language to be used for description in the expansions i.e. the language to be used for ValueSet.expansion.contains.display.). This is the underlying object with id, value and extensions. The accessor "getDisplayLanguage" gives direct access to the value
2799     */
2800    public ExpansionProfile setDisplayLanguageElement(CodeType value) { 
2801      this.displayLanguage = value;
2802      return this;
2803    }
2804
2805    /**
2806     * @return Specifies the language to be used for description in the expansions i.e. the language to be used for ValueSet.expansion.contains.display.
2807     */
2808    public String getDisplayLanguage() { 
2809      return this.displayLanguage == null ? null : this.displayLanguage.getValue();
2810    }
2811
2812    /**
2813     * @param value Specifies the language to be used for description in the expansions i.e. the language to be used for ValueSet.expansion.contains.display.
2814     */
2815    public ExpansionProfile setDisplayLanguage(String value) { 
2816      if (Utilities.noString(value))
2817        this.displayLanguage = null;
2818      else {
2819        if (this.displayLanguage == null)
2820          this.displayLanguage = new CodeType();
2821        this.displayLanguage.setValue(value);
2822      }
2823      return this;
2824    }
2825
2826    /**
2827     * @return {@link #limitedExpansion} (If the value set being expanded is incomplete (because it is too big to expand), return a limited expansion (a subset) with an indicator that expansion is incomplete, using the extension [http://hl7.org/fhir/StructureDefinition/valueset-toocostly](extension-valueset-toocostly.html).). This is the underlying object with id, value and extensions. The accessor "getLimitedExpansion" gives direct access to the value
2828     */
2829    public BooleanType getLimitedExpansionElement() { 
2830      if (this.limitedExpansion == null)
2831        if (Configuration.errorOnAutoCreate())
2832          throw new Error("Attempt to auto-create ExpansionProfile.limitedExpansion");
2833        else if (Configuration.doAutoCreate())
2834          this.limitedExpansion = new BooleanType(); // bb
2835      return this.limitedExpansion;
2836    }
2837
2838    public boolean hasLimitedExpansionElement() { 
2839      return this.limitedExpansion != null && !this.limitedExpansion.isEmpty();
2840    }
2841
2842    public boolean hasLimitedExpansion() { 
2843      return this.limitedExpansion != null && !this.limitedExpansion.isEmpty();
2844    }
2845
2846    /**
2847     * @param value {@link #limitedExpansion} (If the value set being expanded is incomplete (because it is too big to expand), return a limited expansion (a subset) with an indicator that expansion is incomplete, using the extension [http://hl7.org/fhir/StructureDefinition/valueset-toocostly](extension-valueset-toocostly.html).). This is the underlying object with id, value and extensions. The accessor "getLimitedExpansion" gives direct access to the value
2848     */
2849    public ExpansionProfile setLimitedExpansionElement(BooleanType value) { 
2850      this.limitedExpansion = value;
2851      return this;
2852    }
2853
2854    /**
2855     * @return If the value set being expanded is incomplete (because it is too big to expand), return a limited expansion (a subset) with an indicator that expansion is incomplete, using the extension [http://hl7.org/fhir/StructureDefinition/valueset-toocostly](extension-valueset-toocostly.html).
2856     */
2857    public boolean getLimitedExpansion() { 
2858      return this.limitedExpansion == null || this.limitedExpansion.isEmpty() ? false : this.limitedExpansion.getValue();
2859    }
2860
2861    /**
2862     * @param value If the value set being expanded is incomplete (because it is too big to expand), return a limited expansion (a subset) with an indicator that expansion is incomplete, using the extension [http://hl7.org/fhir/StructureDefinition/valueset-toocostly](extension-valueset-toocostly.html).
2863     */
2864    public ExpansionProfile setLimitedExpansion(boolean value) { 
2865        if (this.limitedExpansion == null)
2866          this.limitedExpansion = new BooleanType();
2867        this.limitedExpansion.setValue(value);
2868      return this;
2869    }
2870
2871      protected void listChildren(List<Property> children) {
2872        super.listChildren(children);
2873        children.add(new Property("url", "uri", "An absolute URI that is used to identify this expansion profile 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 this expansion profile is (or will be) published.", 0, 1, url));
2874        children.add(new Property("identifier", "Identifier", "A formal identifier that is used to identify this expansion profile when it is represented in other formats, or referenced in a specification, model, design or an instance.", 0, 1, identifier));
2875        children.add(new Property("version", "string", "The identifier that is used to identify this version of the expansion profile when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the expansion profile 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));
2876        children.add(new Property("name", "string", "A natural language name identifying the expansion profile. This name should be usable as an identifier for the module by machine processing applications such as code generation.", 0, 1, name));
2877        children.add(new Property("status", "code", "The status of this expansion profile. Enables tracking the life-cycle of the content.", 0, 1, status));
2878        children.add(new Property("experimental", "boolean", "A Boolean value to indicate that this expansion profile is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.", 0, 1, experimental));
2879        children.add(new Property("date", "dateTime", "The date  (and optionally time) when the expansion profile 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 expansion profile changes.", 0, 1, date));
2880        children.add(new Property("publisher", "string", "The name of the organization or individual that published the expansion profile.", 0, 1, publisher));
2881        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));
2882        children.add(new Property("description", "markdown", "A free text natural language description of the expansion profile from a consumer's perspective.", 0, 1, description));
2883        children.add(new Property("useContext", "UsageContext", "The content was developed with a focus and intent of supporting the contexts that are listed. These terms may be used to assist with indexing and searching for appropriate expansion profile instances.", 0, java.lang.Integer.MAX_VALUE, useContext));
2884        children.add(new Property("jurisdiction", "CodeableConcept", "A legal or geographic region in which the expansion profile is intended to be used.", 0, java.lang.Integer.MAX_VALUE, jurisdiction));
2885        children.add(new Property("fixedVersion", "", "Fix use of a particular code system to a particular version.", 0, java.lang.Integer.MAX_VALUE, fixedVersion));
2886        children.add(new Property("excludedSystem", "", "Code system, or a particular version of a code system to be excluded from value set expansions.", 0, 1, excludedSystem));
2887        children.add(new Property("includeDesignations", "boolean", "Controls whether concept designations are to be included or excluded in value set expansions.", 0, 1, includeDesignations));
2888        children.add(new Property("designation", "", "A set of criteria that provide the constraints imposed on the value set expansion by including or excluding designations.", 0, 1, designation));
2889        children.add(new Property("includeDefinition", "boolean", "Controls whether the value set definition is included or excluded in value set expansions.", 0, 1, includeDefinition));
2890        children.add(new Property("activeOnly", "boolean", "Controls whether inactive concepts are included or excluded in value set expansions.", 0, 1, activeOnly));
2891        children.add(new Property("excludeNested", "boolean", "Controls whether or not the value set expansion nests codes or not (i.e. ValueSet.expansion.contains.contains).", 0, 1, excludeNested));
2892        children.add(new Property("excludeNotForUI", "boolean", "Controls whether or not the value set expansion includes codes which cannot be displayed in user interfaces.", 0, 1, excludeNotForUI));
2893        children.add(new Property("excludePostCoordinated", "boolean", "Controls whether or not the value set expansion includes post coordinated codes.", 0, 1, excludePostCoordinated));
2894        children.add(new Property("displayLanguage", "code", "Specifies the language to be used for description in the expansions i.e. the language to be used for ValueSet.expansion.contains.display.", 0, 1, displayLanguage));
2895        children.add(new Property("limitedExpansion", "boolean", "If the value set being expanded is incomplete (because it is too big to expand), return a limited expansion (a subset) with an indicator that expansion is incomplete, using the extension [http://hl7.org/fhir/StructureDefinition/valueset-toocostly](extension-valueset-toocostly.html).", 0, 1, limitedExpansion));
2896      }
2897
2898      @Override
2899      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2900        switch (_hash) {
2901        case 116079: /*url*/  return new Property("url", "uri", "An absolute URI that is used to identify this expansion profile 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 this expansion profile is (or will be) published.", 0, 1, url);
2902        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "A formal identifier that is used to identify this expansion profile when it is represented in other formats, or referenced in a specification, model, design or an instance.", 0, 1, identifier);
2903        case 351608024: /*version*/  return new Property("version", "string", "The identifier that is used to identify this version of the expansion profile when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the expansion profile 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);
2904        case 3373707: /*name*/  return new Property("name", "string", "A natural language name identifying the expansion profile. This name should be usable as an identifier for the module by machine processing applications such as code generation.", 0, 1, name);
2905        case -892481550: /*status*/  return new Property("status", "code", "The status of this expansion profile. Enables tracking the life-cycle of the content.", 0, 1, status);
2906        case -404562712: /*experimental*/  return new Property("experimental", "boolean", "A Boolean value to indicate that this expansion profile is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.", 0, 1, experimental);
2907        case 3076014: /*date*/  return new Property("date", "dateTime", "The date  (and optionally time) when the expansion profile 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 expansion profile changes.", 0, 1, date);
2908        case 1447404028: /*publisher*/  return new Property("publisher", "string", "The name of the organization or individual that published the expansion profile.", 0, 1, publisher);
2909        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);
2910        case -1724546052: /*description*/  return new Property("description", "markdown", "A free text natural language description of the expansion profile from a consumer's perspective.", 0, 1, description);
2911        case -669707736: /*useContext*/  return new Property("useContext", "UsageContext", "The content was developed with a focus and intent of supporting the contexts that are listed. These terms may be used to assist with indexing and searching for appropriate expansion profile instances.", 0, java.lang.Integer.MAX_VALUE, useContext);
2912        case -507075711: /*jurisdiction*/  return new Property("jurisdiction", "CodeableConcept", "A legal or geographic region in which the expansion profile is intended to be used.", 0, java.lang.Integer.MAX_VALUE, jurisdiction);
2913        case 807748292: /*fixedVersion*/  return new Property("fixedVersion", "", "Fix use of a particular code system to a particular version.", 0, java.lang.Integer.MAX_VALUE, fixedVersion);
2914        case 2125282457: /*excludedSystem*/  return new Property("excludedSystem", "", "Code system, or a particular version of a code system to be excluded from value set expansions.", 0, 1, excludedSystem);
2915        case 461507620: /*includeDesignations*/  return new Property("includeDesignations", "boolean", "Controls whether concept designations are to be included or excluded in value set expansions.", 0, 1, includeDesignations);
2916        case -900931593: /*designation*/  return new Property("designation", "", "A set of criteria that provide the constraints imposed on the value set expansion by including or excluding designations.", 0, 1, designation);
2917        case 127972379: /*includeDefinition*/  return new Property("includeDefinition", "boolean", "Controls whether the value set definition is included or excluded in value set expansions.", 0, 1, includeDefinition);
2918        case 2043813842: /*activeOnly*/  return new Property("activeOnly", "boolean", "Controls whether inactive concepts are included or excluded in value set expansions.", 0, 1, activeOnly);
2919        case 424992625: /*excludeNested*/  return new Property("excludeNested", "boolean", "Controls whether or not the value set expansion nests codes or not (i.e. ValueSet.expansion.contains.contains).", 0, 1, excludeNested);
2920        case 667582980: /*excludeNotForUI*/  return new Property("excludeNotForUI", "boolean", "Controls whether or not the value set expansion includes codes which cannot be displayed in user interfaces.", 0, 1, excludeNotForUI);
2921        case 563335154: /*excludePostCoordinated*/  return new Property("excludePostCoordinated", "boolean", "Controls whether or not the value set expansion includes post coordinated codes.", 0, 1, excludePostCoordinated);
2922        case 1486237242: /*displayLanguage*/  return new Property("displayLanguage", "code", "Specifies the language to be used for description in the expansions i.e. the language to be used for ValueSet.expansion.contains.display.", 0, 1, displayLanguage);
2923        case 597771333: /*limitedExpansion*/  return new Property("limitedExpansion", "boolean", "If the value set being expanded is incomplete (because it is too big to expand), return a limited expansion (a subset) with an indicator that expansion is incomplete, using the extension [http://hl7.org/fhir/StructureDefinition/valueset-toocostly](extension-valueset-toocostly.html).", 0, 1, limitedExpansion);
2924        default: return super.getNamedProperty(_hash, _name, _checkValid);
2925        }
2926
2927      }
2928
2929      @Override
2930      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2931        switch (hash) {
2932        case 116079: /*url*/ return this.url == null ? new Base[0] : new Base[] {this.url}; // UriType
2933        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : new Base[] {this.identifier}; // Identifier
2934        case 351608024: /*version*/ return this.version == null ? new Base[0] : new Base[] {this.version}; // StringType
2935        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // StringType
2936        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<PublicationStatus>
2937        case -404562712: /*experimental*/ return this.experimental == null ? new Base[0] : new Base[] {this.experimental}; // BooleanType
2938        case 3076014: /*date*/ return this.date == null ? new Base[0] : new Base[] {this.date}; // DateTimeType
2939        case 1447404028: /*publisher*/ return this.publisher == null ? new Base[0] : new Base[] {this.publisher}; // StringType
2940        case 951526432: /*contact*/ return this.contact == null ? new Base[0] : this.contact.toArray(new Base[this.contact.size()]); // ContactDetail
2941        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // MarkdownType
2942        case -669707736: /*useContext*/ return this.useContext == null ? new Base[0] : this.useContext.toArray(new Base[this.useContext.size()]); // UsageContext
2943        case -507075711: /*jurisdiction*/ return this.jurisdiction == null ? new Base[0] : this.jurisdiction.toArray(new Base[this.jurisdiction.size()]); // CodeableConcept
2944        case 807748292: /*fixedVersion*/ return this.fixedVersion == null ? new Base[0] : this.fixedVersion.toArray(new Base[this.fixedVersion.size()]); // ExpansionProfileFixedVersionComponent
2945        case 2125282457: /*excludedSystem*/ return this.excludedSystem == null ? new Base[0] : new Base[] {this.excludedSystem}; // ExpansionProfileExcludedSystemComponent
2946        case 461507620: /*includeDesignations*/ return this.includeDesignations == null ? new Base[0] : new Base[] {this.includeDesignations}; // BooleanType
2947        case -900931593: /*designation*/ return this.designation == null ? new Base[0] : new Base[] {this.designation}; // ExpansionProfileDesignationComponent
2948        case 127972379: /*includeDefinition*/ return this.includeDefinition == null ? new Base[0] : new Base[] {this.includeDefinition}; // BooleanType
2949        case 2043813842: /*activeOnly*/ return this.activeOnly == null ? new Base[0] : new Base[] {this.activeOnly}; // BooleanType
2950        case 424992625: /*excludeNested*/ return this.excludeNested == null ? new Base[0] : new Base[] {this.excludeNested}; // BooleanType
2951        case 667582980: /*excludeNotForUI*/ return this.excludeNotForUI == null ? new Base[0] : new Base[] {this.excludeNotForUI}; // BooleanType
2952        case 563335154: /*excludePostCoordinated*/ return this.excludePostCoordinated == null ? new Base[0] : new Base[] {this.excludePostCoordinated}; // BooleanType
2953        case 1486237242: /*displayLanguage*/ return this.displayLanguage == null ? new Base[0] : new Base[] {this.displayLanguage}; // CodeType
2954        case 597771333: /*limitedExpansion*/ return this.limitedExpansion == null ? new Base[0] : new Base[] {this.limitedExpansion}; // BooleanType
2955        default: return super.getProperty(hash, name, checkValid);
2956        }
2957
2958      }
2959
2960      @Override
2961      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2962        switch (hash) {
2963        case 116079: // url
2964          this.url = castToUri(value); // UriType
2965          return value;
2966        case -1618432855: // identifier
2967          this.identifier = castToIdentifier(value); // Identifier
2968          return value;
2969        case 351608024: // version
2970          this.version = castToString(value); // StringType
2971          return value;
2972        case 3373707: // name
2973          this.name = castToString(value); // StringType
2974          return value;
2975        case -892481550: // status
2976          value = new PublicationStatusEnumFactory().fromType(castToCode(value));
2977          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
2978          return value;
2979        case -404562712: // experimental
2980          this.experimental = castToBoolean(value); // BooleanType
2981          return value;
2982        case 3076014: // date
2983          this.date = castToDateTime(value); // DateTimeType
2984          return value;
2985        case 1447404028: // publisher
2986          this.publisher = castToString(value); // StringType
2987          return value;
2988        case 951526432: // contact
2989          this.getContact().add(castToContactDetail(value)); // ContactDetail
2990          return value;
2991        case -1724546052: // description
2992          this.description = castToMarkdown(value); // MarkdownType
2993          return value;
2994        case -669707736: // useContext
2995          this.getUseContext().add(castToUsageContext(value)); // UsageContext
2996          return value;
2997        case -507075711: // jurisdiction
2998          this.getJurisdiction().add(castToCodeableConcept(value)); // CodeableConcept
2999          return value;
3000        case 807748292: // fixedVersion
3001          this.getFixedVersion().add((ExpansionProfileFixedVersionComponent) value); // ExpansionProfileFixedVersionComponent
3002          return value;
3003        case 2125282457: // excludedSystem
3004          this.excludedSystem = (ExpansionProfileExcludedSystemComponent) value; // ExpansionProfileExcludedSystemComponent
3005          return value;
3006        case 461507620: // includeDesignations
3007          this.includeDesignations = castToBoolean(value); // BooleanType
3008          return value;
3009        case -900931593: // designation
3010          this.designation = (ExpansionProfileDesignationComponent) value; // ExpansionProfileDesignationComponent
3011          return value;
3012        case 127972379: // includeDefinition
3013          this.includeDefinition = castToBoolean(value); // BooleanType
3014          return value;
3015        case 2043813842: // activeOnly
3016          this.activeOnly = castToBoolean(value); // BooleanType
3017          return value;
3018        case 424992625: // excludeNested
3019          this.excludeNested = castToBoolean(value); // BooleanType
3020          return value;
3021        case 667582980: // excludeNotForUI
3022          this.excludeNotForUI = castToBoolean(value); // BooleanType
3023          return value;
3024        case 563335154: // excludePostCoordinated
3025          this.excludePostCoordinated = castToBoolean(value); // BooleanType
3026          return value;
3027        case 1486237242: // displayLanguage
3028          this.displayLanguage = castToCode(value); // CodeType
3029          return value;
3030        case 597771333: // limitedExpansion
3031          this.limitedExpansion = castToBoolean(value); // BooleanType
3032          return value;
3033        default: return super.setProperty(hash, name, value);
3034        }
3035
3036      }
3037
3038      @Override
3039      public Base setProperty(String name, Base value) throws FHIRException {
3040        if (name.equals("url")) {
3041          this.url = castToUri(value); // UriType
3042        } else if (name.equals("identifier")) {
3043          this.identifier = castToIdentifier(value); // Identifier
3044        } else if (name.equals("version")) {
3045          this.version = castToString(value); // StringType
3046        } else if (name.equals("name")) {
3047          this.name = castToString(value); // StringType
3048        } else if (name.equals("status")) {
3049          value = new PublicationStatusEnumFactory().fromType(castToCode(value));
3050          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
3051        } else if (name.equals("experimental")) {
3052          this.experimental = castToBoolean(value); // BooleanType
3053        } else if (name.equals("date")) {
3054          this.date = castToDateTime(value); // DateTimeType
3055        } else if (name.equals("publisher")) {
3056          this.publisher = castToString(value); // StringType
3057        } else if (name.equals("contact")) {
3058          this.getContact().add(castToContactDetail(value));
3059        } else if (name.equals("description")) {
3060          this.description = castToMarkdown(value); // MarkdownType
3061        } else if (name.equals("useContext")) {
3062          this.getUseContext().add(castToUsageContext(value));
3063        } else if (name.equals("jurisdiction")) {
3064          this.getJurisdiction().add(castToCodeableConcept(value));
3065        } else if (name.equals("fixedVersion")) {
3066          this.getFixedVersion().add((ExpansionProfileFixedVersionComponent) value);
3067        } else if (name.equals("excludedSystem")) {
3068          this.excludedSystem = (ExpansionProfileExcludedSystemComponent) value; // ExpansionProfileExcludedSystemComponent
3069        } else if (name.equals("includeDesignations")) {
3070          this.includeDesignations = castToBoolean(value); // BooleanType
3071        } else if (name.equals("designation")) {
3072          this.designation = (ExpansionProfileDesignationComponent) value; // ExpansionProfileDesignationComponent
3073        } else if (name.equals("includeDefinition")) {
3074          this.includeDefinition = castToBoolean(value); // BooleanType
3075        } else if (name.equals("activeOnly")) {
3076          this.activeOnly = castToBoolean(value); // BooleanType
3077        } else if (name.equals("excludeNested")) {
3078          this.excludeNested = castToBoolean(value); // BooleanType
3079        } else if (name.equals("excludeNotForUI")) {
3080          this.excludeNotForUI = castToBoolean(value); // BooleanType
3081        } else if (name.equals("excludePostCoordinated")) {
3082          this.excludePostCoordinated = castToBoolean(value); // BooleanType
3083        } else if (name.equals("displayLanguage")) {
3084          this.displayLanguage = castToCode(value); // CodeType
3085        } else if (name.equals("limitedExpansion")) {
3086          this.limitedExpansion = castToBoolean(value); // BooleanType
3087        } else
3088          return super.setProperty(name, value);
3089        return value;
3090      }
3091
3092      @Override
3093      public Base makeProperty(int hash, String name) throws FHIRException {
3094        switch (hash) {
3095        case 116079:  return getUrlElement();
3096        case -1618432855:  return getIdentifier(); 
3097        case 351608024:  return getVersionElement();
3098        case 3373707:  return getNameElement();
3099        case -892481550:  return getStatusElement();
3100        case -404562712:  return getExperimentalElement();
3101        case 3076014:  return getDateElement();
3102        case 1447404028:  return getPublisherElement();
3103        case 951526432:  return addContact(); 
3104        case -1724546052:  return getDescriptionElement();
3105        case -669707736:  return addUseContext(); 
3106        case -507075711:  return addJurisdiction(); 
3107        case 807748292:  return addFixedVersion(); 
3108        case 2125282457:  return getExcludedSystem(); 
3109        case 461507620:  return getIncludeDesignationsElement();
3110        case -900931593:  return getDesignation(); 
3111        case 127972379:  return getIncludeDefinitionElement();
3112        case 2043813842:  return getActiveOnlyElement();
3113        case 424992625:  return getExcludeNestedElement();
3114        case 667582980:  return getExcludeNotForUIElement();
3115        case 563335154:  return getExcludePostCoordinatedElement();
3116        case 1486237242:  return getDisplayLanguageElement();
3117        case 597771333:  return getLimitedExpansionElement();
3118        default: return super.makeProperty(hash, name);
3119        }
3120
3121      }
3122
3123      @Override
3124      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
3125        switch (hash) {
3126        case 116079: /*url*/ return new String[] {"uri"};
3127        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
3128        case 351608024: /*version*/ return new String[] {"string"};
3129        case 3373707: /*name*/ return new String[] {"string"};
3130        case -892481550: /*status*/ return new String[] {"code"};
3131        case -404562712: /*experimental*/ return new String[] {"boolean"};
3132        case 3076014: /*date*/ return new String[] {"dateTime"};
3133        case 1447404028: /*publisher*/ return new String[] {"string"};
3134        case 951526432: /*contact*/ return new String[] {"ContactDetail"};
3135        case -1724546052: /*description*/ return new String[] {"markdown"};
3136        case -669707736: /*useContext*/ return new String[] {"UsageContext"};
3137        case -507075711: /*jurisdiction*/ return new String[] {"CodeableConcept"};
3138        case 807748292: /*fixedVersion*/ return new String[] {};
3139        case 2125282457: /*excludedSystem*/ return new String[] {};
3140        case 461507620: /*includeDesignations*/ return new String[] {"boolean"};
3141        case -900931593: /*designation*/ return new String[] {};
3142        case 127972379: /*includeDefinition*/ return new String[] {"boolean"};
3143        case 2043813842: /*activeOnly*/ return new String[] {"boolean"};
3144        case 424992625: /*excludeNested*/ return new String[] {"boolean"};
3145        case 667582980: /*excludeNotForUI*/ return new String[] {"boolean"};
3146        case 563335154: /*excludePostCoordinated*/ return new String[] {"boolean"};
3147        case 1486237242: /*displayLanguage*/ return new String[] {"code"};
3148        case 597771333: /*limitedExpansion*/ return new String[] {"boolean"};
3149        default: return super.getTypesForProperty(hash, name);
3150        }
3151
3152      }
3153
3154      @Override
3155      public Base addChild(String name) throws FHIRException {
3156        if (name.equals("url")) {
3157          throw new FHIRException("Cannot call addChild on a primitive type ExpansionProfile.url");
3158        }
3159        else if (name.equals("identifier")) {
3160          this.identifier = new Identifier();
3161          return this.identifier;
3162        }
3163        else if (name.equals("version")) {
3164          throw new FHIRException("Cannot call addChild on a primitive type ExpansionProfile.version");
3165        }
3166        else if (name.equals("name")) {
3167          throw new FHIRException("Cannot call addChild on a primitive type ExpansionProfile.name");
3168        }
3169        else if (name.equals("status")) {
3170          throw new FHIRException("Cannot call addChild on a primitive type ExpansionProfile.status");
3171        }
3172        else if (name.equals("experimental")) {
3173          throw new FHIRException("Cannot call addChild on a primitive type ExpansionProfile.experimental");
3174        }
3175        else if (name.equals("date")) {
3176          throw new FHIRException("Cannot call addChild on a primitive type ExpansionProfile.date");
3177        }
3178        else if (name.equals("publisher")) {
3179          throw new FHIRException("Cannot call addChild on a primitive type ExpansionProfile.publisher");
3180        }
3181        else if (name.equals("contact")) {
3182          return addContact();
3183        }
3184        else if (name.equals("description")) {
3185          throw new FHIRException("Cannot call addChild on a primitive type ExpansionProfile.description");
3186        }
3187        else if (name.equals("useContext")) {
3188          return addUseContext();
3189        }
3190        else if (name.equals("jurisdiction")) {
3191          return addJurisdiction();
3192        }
3193        else if (name.equals("fixedVersion")) {
3194          return addFixedVersion();
3195        }
3196        else if (name.equals("excludedSystem")) {
3197          this.excludedSystem = new ExpansionProfileExcludedSystemComponent();
3198          return this.excludedSystem;
3199        }
3200        else if (name.equals("includeDesignations")) {
3201          throw new FHIRException("Cannot call addChild on a primitive type ExpansionProfile.includeDesignations");
3202        }
3203        else if (name.equals("designation")) {
3204          this.designation = new ExpansionProfileDesignationComponent();
3205          return this.designation;
3206        }
3207        else if (name.equals("includeDefinition")) {
3208          throw new FHIRException("Cannot call addChild on a primitive type ExpansionProfile.includeDefinition");
3209        }
3210        else if (name.equals("activeOnly")) {
3211          throw new FHIRException("Cannot call addChild on a primitive type ExpansionProfile.activeOnly");
3212        }
3213        else if (name.equals("excludeNested")) {
3214          throw new FHIRException("Cannot call addChild on a primitive type ExpansionProfile.excludeNested");
3215        }
3216        else if (name.equals("excludeNotForUI")) {
3217          throw new FHIRException("Cannot call addChild on a primitive type ExpansionProfile.excludeNotForUI");
3218        }
3219        else if (name.equals("excludePostCoordinated")) {
3220          throw new FHIRException("Cannot call addChild on a primitive type ExpansionProfile.excludePostCoordinated");
3221        }
3222        else if (name.equals("displayLanguage")) {
3223          throw new FHIRException("Cannot call addChild on a primitive type ExpansionProfile.displayLanguage");
3224        }
3225        else if (name.equals("limitedExpansion")) {
3226          throw new FHIRException("Cannot call addChild on a primitive type ExpansionProfile.limitedExpansion");
3227        }
3228        else
3229          return super.addChild(name);
3230      }
3231
3232  public String fhirType() {
3233    return "ExpansionProfile";
3234
3235  }
3236
3237      public ExpansionProfile copy() {
3238        ExpansionProfile dst = new ExpansionProfile();
3239        copyValues(dst);
3240        dst.url = url == null ? null : url.copy();
3241        dst.identifier = identifier == null ? null : identifier.copy();
3242        dst.version = version == null ? null : version.copy();
3243        dst.name = name == null ? null : name.copy();
3244        dst.status = status == null ? null : status.copy();
3245        dst.experimental = experimental == null ? null : experimental.copy();
3246        dst.date = date == null ? null : date.copy();
3247        dst.publisher = publisher == null ? null : publisher.copy();
3248        if (contact != null) {
3249          dst.contact = new ArrayList<ContactDetail>();
3250          for (ContactDetail i : contact)
3251            dst.contact.add(i.copy());
3252        };
3253        dst.description = description == null ? null : description.copy();
3254        if (useContext != null) {
3255          dst.useContext = new ArrayList<UsageContext>();
3256          for (UsageContext i : useContext)
3257            dst.useContext.add(i.copy());
3258        };
3259        if (jurisdiction != null) {
3260          dst.jurisdiction = new ArrayList<CodeableConcept>();
3261          for (CodeableConcept i : jurisdiction)
3262            dst.jurisdiction.add(i.copy());
3263        };
3264        if (fixedVersion != null) {
3265          dst.fixedVersion = new ArrayList<ExpansionProfileFixedVersionComponent>();
3266          for (ExpansionProfileFixedVersionComponent i : fixedVersion)
3267            dst.fixedVersion.add(i.copy());
3268        };
3269        dst.excludedSystem = excludedSystem == null ? null : excludedSystem.copy();
3270        dst.includeDesignations = includeDesignations == null ? null : includeDesignations.copy();
3271        dst.designation = designation == null ? null : designation.copy();
3272        dst.includeDefinition = includeDefinition == null ? null : includeDefinition.copy();
3273        dst.activeOnly = activeOnly == null ? null : activeOnly.copy();
3274        dst.excludeNested = excludeNested == null ? null : excludeNested.copy();
3275        dst.excludeNotForUI = excludeNotForUI == null ? null : excludeNotForUI.copy();
3276        dst.excludePostCoordinated = excludePostCoordinated == null ? null : excludePostCoordinated.copy();
3277        dst.displayLanguage = displayLanguage == null ? null : displayLanguage.copy();
3278        dst.limitedExpansion = limitedExpansion == null ? null : limitedExpansion.copy();
3279        return dst;
3280      }
3281
3282      protected ExpansionProfile typedCopy() {
3283        return copy();
3284      }
3285
3286      @Override
3287      public boolean equalsDeep(Base other_) {
3288        if (!super.equalsDeep(other_))
3289          return false;
3290        if (!(other_ instanceof ExpansionProfile))
3291          return false;
3292        ExpansionProfile o = (ExpansionProfile) other_;
3293        return compareDeep(identifier, o.identifier, true) && compareDeep(fixedVersion, o.fixedVersion, true)
3294           && compareDeep(excludedSystem, o.excludedSystem, true) && compareDeep(includeDesignations, o.includeDesignations, true)
3295           && compareDeep(designation, o.designation, true) && compareDeep(includeDefinition, o.includeDefinition, true)
3296           && compareDeep(activeOnly, o.activeOnly, true) && compareDeep(excludeNested, o.excludeNested, true)
3297           && compareDeep(excludeNotForUI, o.excludeNotForUI, true) && compareDeep(excludePostCoordinated, o.excludePostCoordinated, true)
3298           && compareDeep(displayLanguage, o.displayLanguage, true) && compareDeep(limitedExpansion, o.limitedExpansion, true)
3299          ;
3300      }
3301
3302      @Override
3303      public boolean equalsShallow(Base other_) {
3304        if (!super.equalsShallow(other_))
3305          return false;
3306        if (!(other_ instanceof ExpansionProfile))
3307          return false;
3308        ExpansionProfile o = (ExpansionProfile) other_;
3309        return compareValues(includeDesignations, o.includeDesignations, true) && compareValues(includeDefinition, o.includeDefinition, true)
3310           && compareValues(activeOnly, o.activeOnly, true) && compareValues(excludeNested, o.excludeNested, true)
3311           && compareValues(excludeNotForUI, o.excludeNotForUI, true) && compareValues(excludePostCoordinated, o.excludePostCoordinated, true)
3312           && compareValues(displayLanguage, o.displayLanguage, true) && compareValues(limitedExpansion, o.limitedExpansion, true)
3313          ;
3314      }
3315
3316      public boolean isEmpty() {
3317        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, fixedVersion, excludedSystem
3318          , includeDesignations, designation, includeDefinition, activeOnly, excludeNested, excludeNotForUI
3319          , excludePostCoordinated, displayLanguage, limitedExpansion);
3320      }
3321
3322  @Override
3323  public ResourceType getResourceType() {
3324    return ResourceType.ExpansionProfile;
3325   }
3326
3327 /**
3328   * Search parameter: <b>date</b>
3329   * <p>
3330   * Description: <b>The expansion profile publication date</b><br>
3331   * Type: <b>date</b><br>
3332   * Path: <b>ExpansionProfile.date</b><br>
3333   * </p>
3334   */
3335  @SearchParamDefinition(name="date", path="ExpansionProfile.date", description="The expansion profile publication date", type="date" )
3336  public static final String SP_DATE = "date";
3337 /**
3338   * <b>Fluent Client</b> search parameter constant for <b>date</b>
3339   * <p>
3340   * Description: <b>The expansion profile publication date</b><br>
3341   * Type: <b>date</b><br>
3342   * Path: <b>ExpansionProfile.date</b><br>
3343   * </p>
3344   */
3345  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_DATE);
3346
3347 /**
3348   * Search parameter: <b>identifier</b>
3349   * <p>
3350   * Description: <b>External identifier for the expansion profile</b><br>
3351   * Type: <b>token</b><br>
3352   * Path: <b>ExpansionProfile.identifier</b><br>
3353   * </p>
3354   */
3355  @SearchParamDefinition(name="identifier", path="ExpansionProfile.identifier", description="External identifier for the expansion profile", type="token" )
3356  public static final String SP_IDENTIFIER = "identifier";
3357 /**
3358   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
3359   * <p>
3360   * Description: <b>External identifier for the expansion profile</b><br>
3361   * Type: <b>token</b><br>
3362   * Path: <b>ExpansionProfile.identifier</b><br>
3363   * </p>
3364   */
3365  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
3366
3367 /**
3368   * Search parameter: <b>jurisdiction</b>
3369   * <p>
3370   * Description: <b>Intended jurisdiction for the expansion profile</b><br>
3371   * Type: <b>token</b><br>
3372   * Path: <b>ExpansionProfile.jurisdiction</b><br>
3373   * </p>
3374   */
3375  @SearchParamDefinition(name="jurisdiction", path="ExpansionProfile.jurisdiction", description="Intended jurisdiction for the expansion profile", type="token" )
3376  public static final String SP_JURISDICTION = "jurisdiction";
3377 /**
3378   * <b>Fluent Client</b> search parameter constant for <b>jurisdiction</b>
3379   * <p>
3380   * Description: <b>Intended jurisdiction for the expansion profile</b><br>
3381   * Type: <b>token</b><br>
3382   * Path: <b>ExpansionProfile.jurisdiction</b><br>
3383   * </p>
3384   */
3385  public static final ca.uhn.fhir.rest.gclient.TokenClientParam JURISDICTION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_JURISDICTION);
3386
3387 /**
3388   * Search parameter: <b>name</b>
3389   * <p>
3390   * Description: <b>Computationally friendly name of the expansion profile</b><br>
3391   * Type: <b>string</b><br>
3392   * Path: <b>ExpansionProfile.name</b><br>
3393   * </p>
3394   */
3395  @SearchParamDefinition(name="name", path="ExpansionProfile.name", description="Computationally friendly name of the expansion profile", type="string" )
3396  public static final String SP_NAME = "name";
3397 /**
3398   * <b>Fluent Client</b> search parameter constant for <b>name</b>
3399   * <p>
3400   * Description: <b>Computationally friendly name of the expansion profile</b><br>
3401   * Type: <b>string</b><br>
3402   * Path: <b>ExpansionProfile.name</b><br>
3403   * </p>
3404   */
3405  public static final ca.uhn.fhir.rest.gclient.StringClientParam NAME = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_NAME);
3406
3407 /**
3408   * Search parameter: <b>description</b>
3409   * <p>
3410   * Description: <b>The description of the expansion profile</b><br>
3411   * Type: <b>string</b><br>
3412   * Path: <b>ExpansionProfile.description</b><br>
3413   * </p>
3414   */
3415  @SearchParamDefinition(name="description", path="ExpansionProfile.description", description="The description of the expansion profile", type="string" )
3416  public static final String SP_DESCRIPTION = "description";
3417 /**
3418   * <b>Fluent Client</b> search parameter constant for <b>description</b>
3419   * <p>
3420   * Description: <b>The description of the expansion profile</b><br>
3421   * Type: <b>string</b><br>
3422   * Path: <b>ExpansionProfile.description</b><br>
3423   * </p>
3424   */
3425  public static final ca.uhn.fhir.rest.gclient.StringClientParam DESCRIPTION = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_DESCRIPTION);
3426
3427 /**
3428   * Search parameter: <b>publisher</b>
3429   * <p>
3430   * Description: <b>Name of the publisher of the expansion profile</b><br>
3431   * Type: <b>string</b><br>
3432   * Path: <b>ExpansionProfile.publisher</b><br>
3433   * </p>
3434   */
3435  @SearchParamDefinition(name="publisher", path="ExpansionProfile.publisher", description="Name of the publisher of the expansion profile", type="string" )
3436  public static final String SP_PUBLISHER = "publisher";
3437 /**
3438   * <b>Fluent Client</b> search parameter constant for <b>publisher</b>
3439   * <p>
3440   * Description: <b>Name of the publisher of the expansion profile</b><br>
3441   * Type: <b>string</b><br>
3442   * Path: <b>ExpansionProfile.publisher</b><br>
3443   * </p>
3444   */
3445  public static final ca.uhn.fhir.rest.gclient.StringClientParam PUBLISHER = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_PUBLISHER);
3446
3447 /**
3448   * Search parameter: <b>version</b>
3449   * <p>
3450   * Description: <b>The business version of the expansion profile</b><br>
3451   * Type: <b>token</b><br>
3452   * Path: <b>ExpansionProfile.version</b><br>
3453   * </p>
3454   */
3455  @SearchParamDefinition(name="version", path="ExpansionProfile.version", description="The business version of the expansion profile", type="token" )
3456  public static final String SP_VERSION = "version";
3457 /**
3458   * <b>Fluent Client</b> search parameter constant for <b>version</b>
3459   * <p>
3460   * Description: <b>The business version of the expansion profile</b><br>
3461   * Type: <b>token</b><br>
3462   * Path: <b>ExpansionProfile.version</b><br>
3463   * </p>
3464   */
3465  public static final ca.uhn.fhir.rest.gclient.TokenClientParam VERSION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_VERSION);
3466
3467 /**
3468   * Search parameter: <b>url</b>
3469   * <p>
3470   * Description: <b>The uri that identifies the expansion profile</b><br>
3471   * Type: <b>uri</b><br>
3472   * Path: <b>ExpansionProfile.url</b><br>
3473   * </p>
3474   */
3475  @SearchParamDefinition(name="url", path="ExpansionProfile.url", description="The uri that identifies the expansion profile", type="uri" )
3476  public static final String SP_URL = "url";
3477 /**
3478   * <b>Fluent Client</b> search parameter constant for <b>url</b>
3479   * <p>
3480   * Description: <b>The uri that identifies the expansion profile</b><br>
3481   * Type: <b>uri</b><br>
3482   * Path: <b>ExpansionProfile.url</b><br>
3483   * </p>
3484   */
3485  public static final ca.uhn.fhir.rest.gclient.UriClientParam URL = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_URL);
3486
3487 /**
3488   * Search parameter: <b>status</b>
3489   * <p>
3490   * Description: <b>The current status of the expansion profile</b><br>
3491   * Type: <b>token</b><br>
3492   * Path: <b>ExpansionProfile.status</b><br>
3493   * </p>
3494   */
3495  @SearchParamDefinition(name="status", path="ExpansionProfile.status", description="The current status of the expansion profile", type="token" )
3496  public static final String SP_STATUS = "status";
3497 /**
3498   * <b>Fluent Client</b> search parameter constant for <b>status</b>
3499   * <p>
3500   * Description: <b>The current status of the expansion profile</b><br>
3501   * Type: <b>token</b><br>
3502   * Path: <b>ExpansionProfile.status</b><br>
3503   * </p>
3504   */
3505  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
3506
3507
3508}
3509