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