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