001package org.hl7.fhir.r4.model;
002
003/*
004  Copyright (c) 2011+, HL7, Inc.
005  All rights reserved.
006  
007  Redistribution and use in source and binary forms, with or without modification, 
008  are permitted provided that the following conditions are met:
009  
010   * Redistributions of source code must retain the above copyright notice, this 
011     list of conditions and the following disclaimer.
012   * Redistributions in binary form must reproduce the above copyright notice, 
013     this list of conditions and the following disclaimer in the documentation 
014     and/or other materials provided with the distribution.
015   * Neither the name of HL7 nor the names of its contributors may be used to 
016     endorse or promote products derived from this software without specific 
017     prior written permission.
018  
019  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
020  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
021  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
022  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
023  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
024  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
025  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
026  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
027  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
028  POSSIBILITY OF SUCH DAMAGE.
029  
030*/
031
032// Generated on Thu, Sep 13, 2018 09:04-0400 for FHIR v3.5.0
033
034import java.util.*;
035
036import org.hl7.fhir.utilities.Utilities;
037import org.hl7.fhir.r4.model.Enumerations.*;
038import ca.uhn.fhir.model.api.annotation.ResourceDef;
039import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
040import ca.uhn.fhir.model.api.annotation.Child;
041import ca.uhn.fhir.model.api.annotation.ChildOrder;
042import ca.uhn.fhir.model.api.annotation.Description;
043import ca.uhn.fhir.model.api.annotation.Block;
044import org.hl7.fhir.instance.model.api.*;
045import org.hl7.fhir.exceptions.FHIRException;
046/**
047 * A 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/StructureDefinition/StructureDefinition")
050@ChildOrder(names={"url", "identifier", "version", "name", "title", "status", "experimental", "date", "publisher", "contact", "description", "useContext", "jurisdiction", "purpose", "copyright", "keyword", "fhirVersion", "mapping", "kind", "abstract", "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 complex datatype, 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 that is suitable for use in 'resources'. The base specification defines a number of complex types, and other specifications can define additional types. These structures do not have a maintained identity.
060         */
061        COMPLEXTYPE, 
062        /**
063         * A 'resource' - a directed acyclic graph of elements that aggregrates other types into an identifiable entity. The base FHIR resources are defined by the FHIR specification itself but other 'resources' can be defined in additional specifications (though these will not be recognised as 'resources' by the FHIR specification (i.e. they do not get end-points etc, or act as the targets of references in FHIR defined resources - though other specificatiosn can treat them this way).
064         */
065        RESOURCE, 
066        /**
067         * A pattern or a template that is not intended to be a real resource or complex type.
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 complex datatype, 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 that is suitable for use in 'resources'. The base specification defines a number of complex types, and other specifications can define additional types. These structures do not have a maintained identity.";
112            case RESOURCE: return "A 'resource' - a directed acyclic graph of elements that aggregrates other types into an identifiable entity. The base FHIR resources are defined by the FHIR specification itself but other 'resources' can be defined in additional specifications (though these will not be recognised as 'resources' by the FHIR specification (i.e. they do not get end-points etc, or act as the targets of references in FHIR defined resources - though other specificatiosn can treat them this way).";
113            case LOGICAL: return "A pattern or a template that is not intended to be a real resource or complex type.";
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";
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 ExtensionContextType {
178        /**
179         * The context is all elements that match the FHIRPath query found in the expression.
180         */
181        FHIRPATH, 
182        /**
183         * The context is any element that has an ElementDefinition.id that matches that found in the expression. This includes ElementDefinition Ids that have slicing identifiers. The full path for the element is [url]#[elementid]. If there is no #, the Element id is one defined in the base specification.
184         */
185        ELEMENT, 
186        /**
187         * The context is a particular extension from a particular StructureDefinition, and the expression is just a uri that identifies the extension.
188         */
189        EXTENSION, 
190        /**
191         * added to help the parsers with the generic types
192         */
193        NULL;
194        public static ExtensionContextType fromCode(String codeString) throws FHIRException {
195            if (codeString == null || "".equals(codeString))
196                return null;
197        if ("fhirpath".equals(codeString))
198          return FHIRPATH;
199        if ("element".equals(codeString))
200          return ELEMENT;
201        if ("extension".equals(codeString))
202          return EXTENSION;
203        if (Configuration.isAcceptInvalidEnums())
204          return null;
205        else
206          throw new FHIRException("Unknown ExtensionContextType code '"+codeString+"'");
207        }
208        public String toCode() {
209          switch (this) {
210            case FHIRPATH: return "fhirpath";
211            case ELEMENT: return "element";
212            case EXTENSION: return "extension";
213            default: return "?";
214          }
215        }
216        public String getSystem() {
217          switch (this) {
218            case FHIRPATH: return "http://hl7.org/fhir/extension-context-type";
219            case ELEMENT: return "http://hl7.org/fhir/extension-context-type";
220            case EXTENSION: return "http://hl7.org/fhir/extension-context-type";
221            default: return "?";
222          }
223        }
224        public String getDefinition() {
225          switch (this) {
226            case FHIRPATH: return "The context is all elements that match the FHIRPath query found in the expression.";
227            case ELEMENT: return "The context is any element that has an ElementDefinition.id that matches that found in the expression. This includes ElementDefinition Ids that have slicing identifiers. The full path for the element is [url]#[elementid]. If there is no #, the Element id is one defined in the base specification.";
228            case EXTENSION: return "The context is a particular extension from a particular StructureDefinition, and the expression is just a uri that identifies the extension.";
229            default: return "?";
230          }
231        }
232        public String getDisplay() {
233          switch (this) {
234            case FHIRPATH: return "FHIRPath";
235            case ELEMENT: return "Element ID";
236            case EXTENSION: return "Extension URL";
237            default: return "?";
238          }
239        }
240    }
241
242  public static class ExtensionContextTypeEnumFactory implements EnumFactory<ExtensionContextType> {
243    public ExtensionContextType fromCode(String codeString) throws IllegalArgumentException {
244      if (codeString == null || "".equals(codeString))
245            if (codeString == null || "".equals(codeString))
246                return null;
247        if ("fhirpath".equals(codeString))
248          return ExtensionContextType.FHIRPATH;
249        if ("element".equals(codeString))
250          return ExtensionContextType.ELEMENT;
251        if ("extension".equals(codeString))
252          return ExtensionContextType.EXTENSION;
253        throw new IllegalArgumentException("Unknown ExtensionContextType code '"+codeString+"'");
254        }
255        public Enumeration<ExtensionContextType> fromType(Base code) throws FHIRException {
256          if (code == null)
257            return null;
258          if (code.isEmpty())
259            return new Enumeration<ExtensionContextType>(this);
260          String codeString = ((PrimitiveType) code).asStringValue();
261          if (codeString == null || "".equals(codeString))
262            return null;
263        if ("fhirpath".equals(codeString))
264          return new Enumeration<ExtensionContextType>(this, ExtensionContextType.FHIRPATH);
265        if ("element".equals(codeString))
266          return new Enumeration<ExtensionContextType>(this, ExtensionContextType.ELEMENT);
267        if ("extension".equals(codeString))
268          return new Enumeration<ExtensionContextType>(this, ExtensionContextType.EXTENSION);
269        throw new FHIRException("Unknown ExtensionContextType code '"+codeString+"'");
270        }
271    public String toCode(ExtensionContextType code) {
272      if (code == ExtensionContextType.FHIRPATH)
273        return "fhirpath";
274      if (code == ExtensionContextType.ELEMENT)
275        return "element";
276      if (code == ExtensionContextType.EXTENSION)
277        return "extension";
278      return "?";
279      }
280    public String toSystem(ExtensionContextType 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> children) {
617          super.listChildren(children);
618          children.add(new Property("identity", "id", "An Internal id that is used to identify this mapping set when specific mappings are made.", 0, 1, identity));
619          children.add(new Property("uri", "uri", "An absolute URI that identifies the specification that this mapping is expressed to.", 0, 1, uri));
620          children.add(new Property("name", "string", "A name for the specification that is being mapped to.", 0, 1, name));
621          children.add(new Property("comment", "string", "Comments about this mapping, including version notes, issues, scope limitations, and other important notes for usage.", 0, 1, comment));
622        }
623
624        @Override
625        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
626          switch (_hash) {
627          case -135761730: /*identity*/  return new Property("identity", "id", "An Internal id that is used to identify this mapping set when specific mappings are made.", 0, 1, identity);
628          case 116076: /*uri*/  return new Property("uri", "uri", "An absolute URI that identifies the specification that this mapping is expressed to.", 0, 1, uri);
629          case 3373707: /*name*/  return new Property("name", "string", "A name for the specification that is being mapped to.", 0, 1, name);
630          case 950398559: /*comment*/  return new Property("comment", "string", "Comments about this mapping, including version notes, issues, scope limitations, and other important notes for usage.", 0, 1, comment);
631          default: return super.getNamedProperty(_hash, _name, _checkValid);
632          }
633
634        }
635
636      @Override
637      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
638        switch (hash) {
639        case -135761730: /*identity*/ return this.identity == null ? new Base[0] : new Base[] {this.identity}; // IdType
640        case 116076: /*uri*/ return this.uri == null ? new Base[0] : new Base[] {this.uri}; // UriType
641        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // StringType
642        case 950398559: /*comment*/ return this.comment == null ? new Base[0] : new Base[] {this.comment}; // StringType
643        default: return super.getProperty(hash, name, checkValid);
644        }
645
646      }
647
648      @Override
649      public Base setProperty(int hash, String name, Base value) throws FHIRException {
650        switch (hash) {
651        case -135761730: // identity
652          this.identity = castToId(value); // IdType
653          return value;
654        case 116076: // uri
655          this.uri = castToUri(value); // UriType
656          return value;
657        case 3373707: // name
658          this.name = castToString(value); // StringType
659          return value;
660        case 950398559: // comment
661          this.comment = castToString(value); // StringType
662          return value;
663        default: return super.setProperty(hash, name, value);
664        }
665
666      }
667
668      @Override
669      public Base setProperty(String name, Base value) throws FHIRException {
670        if (name.equals("identity")) {
671          this.identity = castToId(value); // IdType
672        } else if (name.equals("uri")) {
673          this.uri = castToUri(value); // UriType
674        } else if (name.equals("name")) {
675          this.name = castToString(value); // StringType
676        } else if (name.equals("comment")) {
677          this.comment = castToString(value); // StringType
678        } else
679          return super.setProperty(name, value);
680        return value;
681      }
682
683      @Override
684      public Base makeProperty(int hash, String name) throws FHIRException {
685        switch (hash) {
686        case -135761730:  return getIdentityElement();
687        case 116076:  return getUriElement();
688        case 3373707:  return getNameElement();
689        case 950398559:  return getCommentElement();
690        default: return super.makeProperty(hash, name);
691        }
692
693      }
694
695      @Override
696      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
697        switch (hash) {
698        case -135761730: /*identity*/ return new String[] {"id"};
699        case 116076: /*uri*/ return new String[] {"uri"};
700        case 3373707: /*name*/ return new String[] {"string"};
701        case 950398559: /*comment*/ return new String[] {"string"};
702        default: return super.getTypesForProperty(hash, name);
703        }
704
705      }
706
707      @Override
708      public Base addChild(String name) throws FHIRException {
709        if (name.equals("identity")) {
710          throw new FHIRException("Cannot call addChild on a primitive type StructureDefinition.identity");
711        }
712        else if (name.equals("uri")) {
713          throw new FHIRException("Cannot call addChild on a primitive type StructureDefinition.uri");
714        }
715        else if (name.equals("name")) {
716          throw new FHIRException("Cannot call addChild on a primitive type StructureDefinition.name");
717        }
718        else if (name.equals("comment")) {
719          throw new FHIRException("Cannot call addChild on a primitive type StructureDefinition.comment");
720        }
721        else
722          return super.addChild(name);
723      }
724
725      public StructureDefinitionMappingComponent copy() {
726        StructureDefinitionMappingComponent dst = new StructureDefinitionMappingComponent();
727        copyValues(dst);
728        dst.identity = identity == null ? null : identity.copy();
729        dst.uri = uri == null ? null : uri.copy();
730        dst.name = name == null ? null : name.copy();
731        dst.comment = comment == null ? null : comment.copy();
732        return dst;
733      }
734
735      @Override
736      public boolean equalsDeep(Base other_) {
737        if (!super.equalsDeep(other_))
738          return false;
739        if (!(other_ instanceof StructureDefinitionMappingComponent))
740          return false;
741        StructureDefinitionMappingComponent o = (StructureDefinitionMappingComponent) other_;
742        return compareDeep(identity, o.identity, true) && compareDeep(uri, o.uri, true) && compareDeep(name, o.name, true)
743           && compareDeep(comment, o.comment, true);
744      }
745
746      @Override
747      public boolean equalsShallow(Base other_) {
748        if (!super.equalsShallow(other_))
749          return false;
750        if (!(other_ instanceof StructureDefinitionMappingComponent))
751          return false;
752        StructureDefinitionMappingComponent o = (StructureDefinitionMappingComponent) other_;
753        return compareValues(identity, o.identity, true) && compareValues(uri, o.uri, true) && compareValues(name, o.name, true)
754           && compareValues(comment, o.comment, true);
755      }
756
757      public boolean isEmpty() {
758        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identity, uri, name, comment
759          );
760      }
761
762  public String fhirType() {
763    return "StructureDefinition.mapping";
764
765  }
766
767  }
768
769    @Block()
770    public static class StructureDefinitionContextComponent extends BackboneElement implements IBaseBackboneElement {
771        /**
772         * Defines how to interpret the expression that defines what the context of the extension is.
773         */
774        @Child(name = "type", type = {CodeType.class}, order=1, min=1, max=1, modifier=false, summary=true)
775        @Description(shortDefinition="fhirpath | element | extension", formalDefinition="Defines how to interpret the expression that defines what the context of the extension is." )
776        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/extension-context-type")
777        protected Enumeration<ExtensionContextType> type;
778
779        /**
780         * An expression that defines where an extension can be used in resources.
781         */
782        @Child(name = "expression", type = {StringType.class}, order=2, min=1, max=1, modifier=false, summary=true)
783        @Description(shortDefinition="Where the extension can be used in instances", formalDefinition="An expression that defines where an extension can be used in resources." )
784        protected StringType expression;
785
786        private static final long serialVersionUID = 1958074856L;
787
788    /**
789     * Constructor
790     */
791      public StructureDefinitionContextComponent() {
792        super();
793      }
794
795    /**
796     * Constructor
797     */
798      public StructureDefinitionContextComponent(Enumeration<ExtensionContextType> type, StringType expression) {
799        super();
800        this.type = type;
801        this.expression = expression;
802      }
803
804        /**
805         * @return {@link #type} (Defines how to interpret the expression that defines what the context of the extension is.). This is the underlying object with id, value and extensions. The accessor "getType" gives direct access to the value
806         */
807        public Enumeration<ExtensionContextType> getTypeElement() { 
808          if (this.type == null)
809            if (Configuration.errorOnAutoCreate())
810              throw new Error("Attempt to auto-create StructureDefinitionContextComponent.type");
811            else if (Configuration.doAutoCreate())
812              this.type = new Enumeration<ExtensionContextType>(new ExtensionContextTypeEnumFactory()); // bb
813          return this.type;
814        }
815
816        public boolean hasTypeElement() { 
817          return this.type != null && !this.type.isEmpty();
818        }
819
820        public boolean hasType() { 
821          return this.type != null && !this.type.isEmpty();
822        }
823
824        /**
825         * @param value {@link #type} (Defines how to interpret the expression that defines what the context of the extension is.). This is the underlying object with id, value and extensions. The accessor "getType" gives direct access to the value
826         */
827        public StructureDefinitionContextComponent setTypeElement(Enumeration<ExtensionContextType> value) { 
828          this.type = value;
829          return this;
830        }
831
832        /**
833         * @return Defines how to interpret the expression that defines what the context of the extension is.
834         */
835        public ExtensionContextType getType() { 
836          return this.type == null ? null : this.type.getValue();
837        }
838
839        /**
840         * @param value Defines how to interpret the expression that defines what the context of the extension is.
841         */
842        public StructureDefinitionContextComponent setType(ExtensionContextType value) { 
843            if (this.type == null)
844              this.type = new Enumeration<ExtensionContextType>(new ExtensionContextTypeEnumFactory());
845            this.type.setValue(value);
846          return this;
847        }
848
849        /**
850         * @return {@link #expression} (An expression that defines where an extension can be used in resources.). This is the underlying object with id, value and extensions. The accessor "getExpression" gives direct access to the value
851         */
852        public StringType getExpressionElement() { 
853          if (this.expression == null)
854            if (Configuration.errorOnAutoCreate())
855              throw new Error("Attempt to auto-create StructureDefinitionContextComponent.expression");
856            else if (Configuration.doAutoCreate())
857              this.expression = new StringType(); // bb
858          return this.expression;
859        }
860
861        public boolean hasExpressionElement() { 
862          return this.expression != null && !this.expression.isEmpty();
863        }
864
865        public boolean hasExpression() { 
866          return this.expression != null && !this.expression.isEmpty();
867        }
868
869        /**
870         * @param value {@link #expression} (An expression that defines where an extension can be used in resources.). This is the underlying object with id, value and extensions. The accessor "getExpression" gives direct access to the value
871         */
872        public StructureDefinitionContextComponent setExpressionElement(StringType value) { 
873          this.expression = value;
874          return this;
875        }
876
877        /**
878         * @return An expression that defines where an extension can be used in resources.
879         */
880        public String getExpression() { 
881          return this.expression == null ? null : this.expression.getValue();
882        }
883
884        /**
885         * @param value An expression that defines where an extension can be used in resources.
886         */
887        public StructureDefinitionContextComponent setExpression(String value) { 
888            if (this.expression == null)
889              this.expression = new StringType();
890            this.expression.setValue(value);
891          return this;
892        }
893
894        protected void listChildren(List<Property> children) {
895          super.listChildren(children);
896          children.add(new Property("type", "code", "Defines how to interpret the expression that defines what the context of the extension is.", 0, 1, type));
897          children.add(new Property("expression", "string", "An expression that defines where an extension can be used in resources.", 0, 1, expression));
898        }
899
900        @Override
901        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
902          switch (_hash) {
903          case 3575610: /*type*/  return new Property("type", "code", "Defines how to interpret the expression that defines what the context of the extension is.", 0, 1, type);
904          case -1795452264: /*expression*/  return new Property("expression", "string", "An expression that defines where an extension can be used in resources.", 0, 1, expression);
905          default: return super.getNamedProperty(_hash, _name, _checkValid);
906          }
907
908        }
909
910      @Override
911      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
912        switch (hash) {
913        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // Enumeration<ExtensionContextType>
914        case -1795452264: /*expression*/ return this.expression == null ? new Base[0] : new Base[] {this.expression}; // StringType
915        default: return super.getProperty(hash, name, checkValid);
916        }
917
918      }
919
920      @Override
921      public Base setProperty(int hash, String name, Base value) throws FHIRException {
922        switch (hash) {
923        case 3575610: // type
924          value = new ExtensionContextTypeEnumFactory().fromType(castToCode(value));
925          this.type = (Enumeration) value; // Enumeration<ExtensionContextType>
926          return value;
927        case -1795452264: // expression
928          this.expression = castToString(value); // StringType
929          return value;
930        default: return super.setProperty(hash, name, value);
931        }
932
933      }
934
935      @Override
936      public Base setProperty(String name, Base value) throws FHIRException {
937        if (name.equals("type")) {
938          value = new ExtensionContextTypeEnumFactory().fromType(castToCode(value));
939          this.type = (Enumeration) value; // Enumeration<ExtensionContextType>
940        } else if (name.equals("expression")) {
941          this.expression = castToString(value); // StringType
942        } else
943          return super.setProperty(name, value);
944        return value;
945      }
946
947      @Override
948      public Base makeProperty(int hash, String name) throws FHIRException {
949        switch (hash) {
950        case 3575610:  return getTypeElement();
951        case -1795452264:  return getExpressionElement();
952        default: return super.makeProperty(hash, name);
953        }
954
955      }
956
957      @Override
958      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
959        switch (hash) {
960        case 3575610: /*type*/ return new String[] {"code"};
961        case -1795452264: /*expression*/ return new String[] {"string"};
962        default: return super.getTypesForProperty(hash, name);
963        }
964
965      }
966
967      @Override
968      public Base addChild(String name) throws FHIRException {
969        if (name.equals("type")) {
970          throw new FHIRException("Cannot call addChild on a primitive type StructureDefinition.type");
971        }
972        else if (name.equals("expression")) {
973          throw new FHIRException("Cannot call addChild on a primitive type StructureDefinition.expression");
974        }
975        else
976          return super.addChild(name);
977      }
978
979      public StructureDefinitionContextComponent copy() {
980        StructureDefinitionContextComponent dst = new StructureDefinitionContextComponent();
981        copyValues(dst);
982        dst.type = type == null ? null : type.copy();
983        dst.expression = expression == null ? null : expression.copy();
984        return dst;
985      }
986
987      @Override
988      public boolean equalsDeep(Base other_) {
989        if (!super.equalsDeep(other_))
990          return false;
991        if (!(other_ instanceof StructureDefinitionContextComponent))
992          return false;
993        StructureDefinitionContextComponent o = (StructureDefinitionContextComponent) other_;
994        return compareDeep(type, o.type, true) && compareDeep(expression, o.expression, true);
995      }
996
997      @Override
998      public boolean equalsShallow(Base other_) {
999        if (!super.equalsShallow(other_))
1000          return false;
1001        if (!(other_ instanceof StructureDefinitionContextComponent))
1002          return false;
1003        StructureDefinitionContextComponent o = (StructureDefinitionContextComponent) other_;
1004        return compareValues(type, o.type, true) && compareValues(expression, o.expression, true);
1005      }
1006
1007      public boolean isEmpty() {
1008        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, expression);
1009      }
1010
1011  public String fhirType() {
1012    return "StructureDefinition.context";
1013
1014  }
1015
1016  }
1017
1018    @Block()
1019    public static class StructureDefinitionSnapshotComponent extends BackboneElement implements IBaseBackboneElement {
1020        /**
1021         * Captures constraints on each element within the resource.
1022         */
1023        @Child(name = "element", type = {ElementDefinition.class}, order=1, min=1, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1024        @Description(shortDefinition="Definition of elements in the resource (if no StructureDefinition)", formalDefinition="Captures constraints on each element within the resource." )
1025        protected List<ElementDefinition> element;
1026
1027        private static final long serialVersionUID = 53896641L;
1028
1029    /**
1030     * Constructor
1031     */
1032      public StructureDefinitionSnapshotComponent() {
1033        super();
1034      }
1035
1036        /**
1037         * @return {@link #element} (Captures constraints on each element within the resource.)
1038         */
1039        public List<ElementDefinition> getElement() { 
1040          if (this.element == null)
1041            this.element = new ArrayList<ElementDefinition>();
1042          return this.element;
1043        }
1044
1045        /**
1046         * @return Returns a reference to <code>this</code> for easy method chaining
1047         */
1048        public StructureDefinitionSnapshotComponent setElement(List<ElementDefinition> theElement) { 
1049          this.element = theElement;
1050          return this;
1051        }
1052
1053        public boolean hasElement() { 
1054          if (this.element == null)
1055            return false;
1056          for (ElementDefinition item : this.element)
1057            if (!item.isEmpty())
1058              return true;
1059          return false;
1060        }
1061
1062        public ElementDefinition addElement() { //3
1063          ElementDefinition t = new ElementDefinition();
1064          if (this.element == null)
1065            this.element = new ArrayList<ElementDefinition>();
1066          this.element.add(t);
1067          return t;
1068        }
1069
1070        public StructureDefinitionSnapshotComponent addElement(ElementDefinition t) { //3
1071          if (t == null)
1072            return this;
1073          if (this.element == null)
1074            this.element = new ArrayList<ElementDefinition>();
1075          this.element.add(t);
1076          return this;
1077        }
1078
1079        /**
1080         * @return The first repetition of repeating field {@link #element}, creating it if it does not already exist
1081         */
1082        public ElementDefinition getElementFirstRep() { 
1083          if (getElement().isEmpty()) {
1084            addElement();
1085          }
1086          return getElement().get(0);
1087        }
1088
1089        protected void listChildren(List<Property> children) {
1090          super.listChildren(children);
1091          children.add(new Property("element", "ElementDefinition", "Captures constraints on each element within the resource.", 0, java.lang.Integer.MAX_VALUE, element));
1092        }
1093
1094        @Override
1095        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1096          switch (_hash) {
1097          case -1662836996: /*element*/  return new Property("element", "ElementDefinition", "Captures constraints on each element within the resource.", 0, java.lang.Integer.MAX_VALUE, element);
1098          default: return super.getNamedProperty(_hash, _name, _checkValid);
1099          }
1100
1101        }
1102
1103      @Override
1104      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1105        switch (hash) {
1106        case -1662836996: /*element*/ return this.element == null ? new Base[0] : this.element.toArray(new Base[this.element.size()]); // ElementDefinition
1107        default: return super.getProperty(hash, name, checkValid);
1108        }
1109
1110      }
1111
1112      @Override
1113      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1114        switch (hash) {
1115        case -1662836996: // element
1116          this.getElement().add(castToElementDefinition(value)); // ElementDefinition
1117          return value;
1118        default: return super.setProperty(hash, name, value);
1119        }
1120
1121      }
1122
1123      @Override
1124      public Base setProperty(String name, Base value) throws FHIRException {
1125        if (name.equals("element")) {
1126          this.getElement().add(castToElementDefinition(value));
1127        } else
1128          return super.setProperty(name, value);
1129        return value;
1130      }
1131
1132      @Override
1133      public Base makeProperty(int hash, String name) throws FHIRException {
1134        switch (hash) {
1135        case -1662836996:  return addElement(); 
1136        default: return super.makeProperty(hash, name);
1137        }
1138
1139      }
1140
1141      @Override
1142      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1143        switch (hash) {
1144        case -1662836996: /*element*/ return new String[] {"ElementDefinition"};
1145        default: return super.getTypesForProperty(hash, name);
1146        }
1147
1148      }
1149
1150      @Override
1151      public Base addChild(String name) throws FHIRException {
1152        if (name.equals("element")) {
1153          return addElement();
1154        }
1155        else
1156          return super.addChild(name);
1157      }
1158
1159      public StructureDefinitionSnapshotComponent copy() {
1160        StructureDefinitionSnapshotComponent dst = new StructureDefinitionSnapshotComponent();
1161        copyValues(dst);
1162        if (element != null) {
1163          dst.element = new ArrayList<ElementDefinition>();
1164          for (ElementDefinition i : element)
1165            dst.element.add(i.copy());
1166        };
1167        return dst;
1168      }
1169
1170      @Override
1171      public boolean equalsDeep(Base other_) {
1172        if (!super.equalsDeep(other_))
1173          return false;
1174        if (!(other_ instanceof StructureDefinitionSnapshotComponent))
1175          return false;
1176        StructureDefinitionSnapshotComponent o = (StructureDefinitionSnapshotComponent) other_;
1177        return compareDeep(element, o.element, true);
1178      }
1179
1180      @Override
1181      public boolean equalsShallow(Base other_) {
1182        if (!super.equalsShallow(other_))
1183          return false;
1184        if (!(other_ instanceof StructureDefinitionSnapshotComponent))
1185          return false;
1186        StructureDefinitionSnapshotComponent o = (StructureDefinitionSnapshotComponent) other_;
1187        return true;
1188      }
1189
1190      public boolean isEmpty() {
1191        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(element);
1192      }
1193
1194  public String fhirType() {
1195    return "StructureDefinition.snapshot";
1196
1197  }
1198
1199  }
1200
1201    @Block()
1202    public static class StructureDefinitionDifferentialComponent extends BackboneElement implements IBaseBackboneElement {
1203        /**
1204         * Captures constraints on each element within the resource.
1205         */
1206        @Child(name = "element", type = {ElementDefinition.class}, order=1, min=1, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1207        @Description(shortDefinition="Definition of elements in the resource (if no StructureDefinition)", formalDefinition="Captures constraints on each element within the resource." )
1208        protected List<ElementDefinition> element;
1209
1210        private static final long serialVersionUID = 53896641L;
1211
1212    /**
1213     * Constructor
1214     */
1215      public StructureDefinitionDifferentialComponent() {
1216        super();
1217      }
1218
1219        /**
1220         * @return {@link #element} (Captures constraints on each element within the resource.)
1221         */
1222        public List<ElementDefinition> getElement() { 
1223          if (this.element == null)
1224            this.element = new ArrayList<ElementDefinition>();
1225          return this.element;
1226        }
1227
1228        /**
1229         * @return Returns a reference to <code>this</code> for easy method chaining
1230         */
1231        public StructureDefinitionDifferentialComponent setElement(List<ElementDefinition> theElement) { 
1232          this.element = theElement;
1233          return this;
1234        }
1235
1236        public boolean hasElement() { 
1237          if (this.element == null)
1238            return false;
1239          for (ElementDefinition item : this.element)
1240            if (!item.isEmpty())
1241              return true;
1242          return false;
1243        }
1244
1245        public ElementDefinition addElement() { //3
1246          ElementDefinition t = new ElementDefinition();
1247          if (this.element == null)
1248            this.element = new ArrayList<ElementDefinition>();
1249          this.element.add(t);
1250          return t;
1251        }
1252
1253        public StructureDefinitionDifferentialComponent addElement(ElementDefinition t) { //3
1254          if (t == null)
1255            return this;
1256          if (this.element == null)
1257            this.element = new ArrayList<ElementDefinition>();
1258          this.element.add(t);
1259          return this;
1260        }
1261
1262        /**
1263         * @return The first repetition of repeating field {@link #element}, creating it if it does not already exist
1264         */
1265        public ElementDefinition getElementFirstRep() { 
1266          if (getElement().isEmpty()) {
1267            addElement();
1268          }
1269          return getElement().get(0);
1270        }
1271
1272        protected void listChildren(List<Property> children) {
1273          super.listChildren(children);
1274          children.add(new Property("element", "ElementDefinition", "Captures constraints on each element within the resource.", 0, java.lang.Integer.MAX_VALUE, element));
1275        }
1276
1277        @Override
1278        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1279          switch (_hash) {
1280          case -1662836996: /*element*/  return new Property("element", "ElementDefinition", "Captures constraints on each element within the resource.", 0, java.lang.Integer.MAX_VALUE, element);
1281          default: return super.getNamedProperty(_hash, _name, _checkValid);
1282          }
1283
1284        }
1285
1286      @Override
1287      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1288        switch (hash) {
1289        case -1662836996: /*element*/ return this.element == null ? new Base[0] : this.element.toArray(new Base[this.element.size()]); // ElementDefinition
1290        default: return super.getProperty(hash, name, checkValid);
1291        }
1292
1293      }
1294
1295      @Override
1296      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1297        switch (hash) {
1298        case -1662836996: // element
1299          this.getElement().add(castToElementDefinition(value)); // ElementDefinition
1300          return value;
1301        default: return super.setProperty(hash, name, value);
1302        }
1303
1304      }
1305
1306      @Override
1307      public Base setProperty(String name, Base value) throws FHIRException {
1308        if (name.equals("element")) {
1309          this.getElement().add(castToElementDefinition(value));
1310        } else
1311          return super.setProperty(name, value);
1312        return value;
1313      }
1314
1315      @Override
1316      public Base makeProperty(int hash, String name) throws FHIRException {
1317        switch (hash) {
1318        case -1662836996:  return addElement(); 
1319        default: return super.makeProperty(hash, name);
1320        }
1321
1322      }
1323
1324      @Override
1325      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1326        switch (hash) {
1327        case -1662836996: /*element*/ return new String[] {"ElementDefinition"};
1328        default: return super.getTypesForProperty(hash, name);
1329        }
1330
1331      }
1332
1333      @Override
1334      public Base addChild(String name) throws FHIRException {
1335        if (name.equals("element")) {
1336          return addElement();
1337        }
1338        else
1339          return super.addChild(name);
1340      }
1341
1342      public StructureDefinitionDifferentialComponent copy() {
1343        StructureDefinitionDifferentialComponent dst = new StructureDefinitionDifferentialComponent();
1344        copyValues(dst);
1345        if (element != null) {
1346          dst.element = new ArrayList<ElementDefinition>();
1347          for (ElementDefinition i : element)
1348            dst.element.add(i.copy());
1349        };
1350        return dst;
1351      }
1352
1353      @Override
1354      public boolean equalsDeep(Base other_) {
1355        if (!super.equalsDeep(other_))
1356          return false;
1357        if (!(other_ instanceof StructureDefinitionDifferentialComponent))
1358          return false;
1359        StructureDefinitionDifferentialComponent o = (StructureDefinitionDifferentialComponent) other_;
1360        return compareDeep(element, o.element, true);
1361      }
1362
1363      @Override
1364      public boolean equalsShallow(Base other_) {
1365        if (!super.equalsShallow(other_))
1366          return false;
1367        if (!(other_ instanceof StructureDefinitionDifferentialComponent))
1368          return false;
1369        StructureDefinitionDifferentialComponent o = (StructureDefinitionDifferentialComponent) other_;
1370        return true;
1371      }
1372
1373      public boolean isEmpty() {
1374        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(element);
1375      }
1376
1377  public String fhirType() {
1378    return "StructureDefinition.differential";
1379
1380  }
1381
1382  }
1383
1384    /**
1385     * 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.
1386     */
1387    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1388    @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." )
1389    protected List<Identifier> identifier;
1390
1391    /**
1392     * Explanation of why this structure definition is needed and why it has been designed as it has.
1393     */
1394    @Child(name = "purpose", type = {MarkdownType.class}, order=1, min=0, max=1, modifier=false, summary=false)
1395    @Description(shortDefinition="Why this structure definition is defined", formalDefinition="Explanation of why this structure definition is needed and why it has been designed as it has." )
1396    protected MarkdownType purpose;
1397
1398    /**
1399     * 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.
1400     */
1401    @Child(name = "copyright", type = {MarkdownType.class}, order=2, min=0, max=1, modifier=false, summary=false)
1402    @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." )
1403    protected MarkdownType copyright;
1404
1405    /**
1406     * A set of key words or terms from external terminologies that may be used to assist with indexing and searching of templates nby describing the use of this structure definition, or the content it describes.
1407     */
1408    @Child(name = "keyword", type = {Coding.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1409    @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 nby describing the use of this structure definition, or the content it describes." )
1410    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/definition-use")
1411    protected List<Coding> keyword;
1412
1413    /**
1414     * 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.5.0. for this version.
1415     */
1416    @Child(name = "fhirVersion", type = {IdType.class}, order=4, min=0, max=1, modifier=false, summary=true)
1417    @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.5.0. for this version." )
1418    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/fhir-versions")
1419    protected IdType fhirVersion;
1420
1421    /**
1422     * An external specification that the content is mapped to.
1423     */
1424    @Child(name = "mapping", type = {}, order=5, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1425    @Description(shortDefinition="External specification that the content is mapped to", formalDefinition="An external specification that the content is mapped to." )
1426    protected List<StructureDefinitionMappingComponent> mapping;
1427
1428    /**
1429     * Defines the kind of structure that this definition is describing.
1430     */
1431    @Child(name = "kind", type = {CodeType.class}, order=6, min=1, max=1, modifier=false, summary=true)
1432    @Description(shortDefinition="primitive-type | complex-type | resource | logical", formalDefinition="Defines the kind of structure that this definition is describing." )
1433    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/structure-definition-kind")
1434    protected Enumeration<StructureDefinitionKind> kind;
1435
1436    /**
1437     * 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.
1438     */
1439    @Child(name = "abstract", type = {BooleanType.class}, order=7, min=1, max=1, modifier=false, summary=true)
1440    @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." )
1441    protected BooleanType abstract_;
1442
1443    /**
1444     * Identifies the types of resource or data type elements to which the extension can be applied.
1445     */
1446    @Child(name = "context", type = {}, order=8, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1447    @Description(shortDefinition="If an extension, where it can be used in instances", formalDefinition="Identifies the types of resource or data type elements to which the extension can be applied." )
1448    protected List<StructureDefinitionContextComponent> context;
1449
1450    /**
1451     * A set of rules as FHIRPath Invariants about when the extension can be used (e.g. co-occurrence variants for the extension). All the rules must be true.
1452     */
1453    @Child(name = "contextInvariant", type = {StringType.class}, order=9, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1454    @Description(shortDefinition="FHIRPath invariants - when the extension can be used", formalDefinition="A set of rules as FHIRPath Invariants about when the extension can be used (e.g. co-occurrence variants for the extension). All the rules must be true." )
1455    protected List<StringType> contextInvariant;
1456
1457    /**
1458     * 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).  References are URLs that are relative to http://hl7.org/fhir/StructureDefinition e.g. "string" is a reference to http://hl7.org/fhir/StructureDefinition/string. Absolute URLs are only allowed in logical models.
1459     */
1460    @Child(name = "type", type = {UriType.class}, order=10, min=1, max=1, modifier=false, summary=true)
1461    @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).  References are URLs that are relative to http://hl7.org/fhir/StructureDefinition e.g. \"string\" is a reference to http://hl7.org/fhir/StructureDefinition/string. Absolute URLs are only allowed in logical models." )
1462    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/defined-types")
1463    protected UriType type;
1464
1465    /**
1466     * An absolute URI that is the base structure from which this type is derived, either by specialization or constraint.
1467     */
1468    @Child(name = "baseDefinition", type = {CanonicalType.class}, order=11, min=0, max=1, modifier=false, summary=true)
1469    @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." )
1470    protected CanonicalType baseDefinition;
1471
1472    /**
1473     * How the type relates to the baseDefinition.
1474     */
1475    @Child(name = "derivation", type = {CodeType.class}, order=12, min=0, max=1, modifier=false, summary=true)
1476    @Description(shortDefinition="specialization | constraint - How relates to base definition", formalDefinition="How the type relates to the baseDefinition." )
1477    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/type-derivation-rule")
1478    protected Enumeration<TypeDerivationRule> derivation;
1479
1480    /**
1481     * A snapshot view is expressed in a standalone form that can be used and interpreted without considering the base StructureDefinition.
1482     */
1483    @Child(name = "snapshot", type = {}, order=13, min=0, max=1, modifier=false, summary=false)
1484    @Description(shortDefinition="Snapshot view of the structure", formalDefinition="A snapshot view is expressed in a standalone form that can be used and interpreted without considering the base StructureDefinition." )
1485    protected StructureDefinitionSnapshotComponent snapshot;
1486
1487    /**
1488     * A differential view is expressed relative to the base StructureDefinition - a statement of differences that it applies.
1489     */
1490    @Child(name = "differential", type = {}, order=14, min=0, max=1, modifier=false, summary=false)
1491    @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." )
1492    protected StructureDefinitionDifferentialComponent differential;
1493
1494    private static final long serialVersionUID = -68406827L;
1495
1496  /**
1497   * Constructor
1498   */
1499    public StructureDefinition() {
1500      super();
1501    }
1502
1503  /**
1504   * Constructor
1505   */
1506    public StructureDefinition(UriType url, StringType name, Enumeration<PublicationStatus> status, Enumeration<StructureDefinitionKind> kind, BooleanType abstract_, UriType type) {
1507      super();
1508      this.url = url;
1509      this.name = name;
1510      this.status = status;
1511      this.kind = kind;
1512      this.abstract_ = abstract_;
1513      this.type = type;
1514    }
1515
1516    /**
1517     * @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; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this structure definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the structure definition is stored on different servers.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
1518     */
1519    public UriType getUrlElement() { 
1520      if (this.url == null)
1521        if (Configuration.errorOnAutoCreate())
1522          throw new Error("Attempt to auto-create StructureDefinition.url");
1523        else if (Configuration.doAutoCreate())
1524          this.url = new UriType(); // bb
1525      return this.url;
1526    }
1527
1528    public boolean hasUrlElement() { 
1529      return this.url != null && !this.url.isEmpty();
1530    }
1531
1532    public boolean hasUrl() { 
1533      return this.url != null && !this.url.isEmpty();
1534    }
1535
1536    /**
1537     * @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; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this structure definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the structure definition is stored on different servers.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
1538     */
1539    public StructureDefinition setUrlElement(UriType value) { 
1540      this.url = value;
1541      return this;
1542    }
1543
1544    /**
1545     * @return An absolute URI that is used to identify this structure definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this structure definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the structure definition is stored on different servers.
1546     */
1547    public String getUrl() { 
1548      return this.url == null ? null : this.url.getValue();
1549    }
1550
1551    /**
1552     * @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; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this structure definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the structure definition is stored on different servers.
1553     */
1554    public StructureDefinition setUrl(String value) { 
1555        if (this.url == null)
1556          this.url = new UriType();
1557        this.url.setValue(value);
1558      return this;
1559    }
1560
1561    /**
1562     * @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.)
1563     */
1564    public List<Identifier> getIdentifier() { 
1565      if (this.identifier == null)
1566        this.identifier = new ArrayList<Identifier>();
1567      return this.identifier;
1568    }
1569
1570    /**
1571     * @return Returns a reference to <code>this</code> for easy method chaining
1572     */
1573    public StructureDefinition setIdentifier(List<Identifier> theIdentifier) { 
1574      this.identifier = theIdentifier;
1575      return this;
1576    }
1577
1578    public boolean hasIdentifier() { 
1579      if (this.identifier == null)
1580        return false;
1581      for (Identifier item : this.identifier)
1582        if (!item.isEmpty())
1583          return true;
1584      return false;
1585    }
1586
1587    public Identifier addIdentifier() { //3
1588      Identifier t = new Identifier();
1589      if (this.identifier == null)
1590        this.identifier = new ArrayList<Identifier>();
1591      this.identifier.add(t);
1592      return t;
1593    }
1594
1595    public StructureDefinition addIdentifier(Identifier t) { //3
1596      if (t == null)
1597        return this;
1598      if (this.identifier == null)
1599        this.identifier = new ArrayList<Identifier>();
1600      this.identifier.add(t);
1601      return this;
1602    }
1603
1604    /**
1605     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist
1606     */
1607    public Identifier getIdentifierFirstRep() { 
1608      if (getIdentifier().isEmpty()) {
1609        addIdentifier();
1610      }
1611      return getIdentifier().get(0);
1612    }
1613
1614    /**
1615     * @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
1616     */
1617    public StringType getVersionElement() { 
1618      if (this.version == null)
1619        if (Configuration.errorOnAutoCreate())
1620          throw new Error("Attempt to auto-create StructureDefinition.version");
1621        else if (Configuration.doAutoCreate())
1622          this.version = new StringType(); // bb
1623      return this.version;
1624    }
1625
1626    public boolean hasVersionElement() { 
1627      return this.version != null && !this.version.isEmpty();
1628    }
1629
1630    public boolean hasVersion() { 
1631      return this.version != null && !this.version.isEmpty();
1632    }
1633
1634    /**
1635     * @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
1636     */
1637    public StructureDefinition setVersionElement(StringType value) { 
1638      this.version = value;
1639      return this;
1640    }
1641
1642    /**
1643     * @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.
1644     */
1645    public String getVersion() { 
1646      return this.version == null ? null : this.version.getValue();
1647    }
1648
1649    /**
1650     * @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.
1651     */
1652    public StructureDefinition setVersion(String value) { 
1653      if (Utilities.noString(value))
1654        this.version = null;
1655      else {
1656        if (this.version == null)
1657          this.version = new StringType();
1658        this.version.setValue(value);
1659      }
1660      return this;
1661    }
1662
1663    /**
1664     * @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
1665     */
1666    public StringType getNameElement() { 
1667      if (this.name == null)
1668        if (Configuration.errorOnAutoCreate())
1669          throw new Error("Attempt to auto-create StructureDefinition.name");
1670        else if (Configuration.doAutoCreate())
1671          this.name = new StringType(); // bb
1672      return this.name;
1673    }
1674
1675    public boolean hasNameElement() { 
1676      return this.name != null && !this.name.isEmpty();
1677    }
1678
1679    public boolean hasName() { 
1680      return this.name != null && !this.name.isEmpty();
1681    }
1682
1683    /**
1684     * @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
1685     */
1686    public StructureDefinition setNameElement(StringType value) { 
1687      this.name = value;
1688      return this;
1689    }
1690
1691    /**
1692     * @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.
1693     */
1694    public String getName() { 
1695      return this.name == null ? null : this.name.getValue();
1696    }
1697
1698    /**
1699     * @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.
1700     */
1701    public StructureDefinition setName(String value) { 
1702        if (this.name == null)
1703          this.name = new StringType();
1704        this.name.setValue(value);
1705      return this;
1706    }
1707
1708    /**
1709     * @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
1710     */
1711    public StringType getTitleElement() { 
1712      if (this.title == null)
1713        if (Configuration.errorOnAutoCreate())
1714          throw new Error("Attempt to auto-create StructureDefinition.title");
1715        else if (Configuration.doAutoCreate())
1716          this.title = new StringType(); // bb
1717      return this.title;
1718    }
1719
1720    public boolean hasTitleElement() { 
1721      return this.title != null && !this.title.isEmpty();
1722    }
1723
1724    public boolean hasTitle() { 
1725      return this.title != null && !this.title.isEmpty();
1726    }
1727
1728    /**
1729     * @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
1730     */
1731    public StructureDefinition setTitleElement(StringType value) { 
1732      this.title = value;
1733      return this;
1734    }
1735
1736    /**
1737     * @return A short, descriptive, user-friendly title for the structure definition.
1738     */
1739    public String getTitle() { 
1740      return this.title == null ? null : this.title.getValue();
1741    }
1742
1743    /**
1744     * @param value A short, descriptive, user-friendly title for the structure definition.
1745     */
1746    public StructureDefinition setTitle(String value) { 
1747      if (Utilities.noString(value))
1748        this.title = null;
1749      else {
1750        if (this.title == null)
1751          this.title = new StringType();
1752        this.title.setValue(value);
1753      }
1754      return this;
1755    }
1756
1757    /**
1758     * @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
1759     */
1760    public Enumeration<PublicationStatus> getStatusElement() { 
1761      if (this.status == null)
1762        if (Configuration.errorOnAutoCreate())
1763          throw new Error("Attempt to auto-create StructureDefinition.status");
1764        else if (Configuration.doAutoCreate())
1765          this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory()); // bb
1766      return this.status;
1767    }
1768
1769    public boolean hasStatusElement() { 
1770      return this.status != null && !this.status.isEmpty();
1771    }
1772
1773    public boolean hasStatus() { 
1774      return this.status != null && !this.status.isEmpty();
1775    }
1776
1777    /**
1778     * @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
1779     */
1780    public StructureDefinition setStatusElement(Enumeration<PublicationStatus> value) { 
1781      this.status = value;
1782      return this;
1783    }
1784
1785    /**
1786     * @return The status of this structure definition. Enables tracking the life-cycle of the content.
1787     */
1788    public PublicationStatus getStatus() { 
1789      return this.status == null ? null : this.status.getValue();
1790    }
1791
1792    /**
1793     * @param value The status of this structure definition. Enables tracking the life-cycle of the content.
1794     */
1795    public StructureDefinition setStatus(PublicationStatus value) { 
1796        if (this.status == null)
1797          this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory());
1798        this.status.setValue(value);
1799      return this;
1800    }
1801
1802    /**
1803     * @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
1804     */
1805    public BooleanType getExperimentalElement() { 
1806      if (this.experimental == null)
1807        if (Configuration.errorOnAutoCreate())
1808          throw new Error("Attempt to auto-create StructureDefinition.experimental");
1809        else if (Configuration.doAutoCreate())
1810          this.experimental = new BooleanType(); // bb
1811      return this.experimental;
1812    }
1813
1814    public boolean hasExperimentalElement() { 
1815      return this.experimental != null && !this.experimental.isEmpty();
1816    }
1817
1818    public boolean hasExperimental() { 
1819      return this.experimental != null && !this.experimental.isEmpty();
1820    }
1821
1822    /**
1823     * @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
1824     */
1825    public StructureDefinition setExperimentalElement(BooleanType value) { 
1826      this.experimental = value;
1827      return this;
1828    }
1829
1830    /**
1831     * @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.
1832     */
1833    public boolean getExperimental() { 
1834      return this.experimental == null || this.experimental.isEmpty() ? false : this.experimental.getValue();
1835    }
1836
1837    /**
1838     * @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.
1839     */
1840    public StructureDefinition setExperimental(boolean value) { 
1841        if (this.experimental == null)
1842          this.experimental = new BooleanType();
1843        this.experimental.setValue(value);
1844      return this;
1845    }
1846
1847    /**
1848     * @return {@link #date} (The date  (and optionally time) when the structure definition was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the structure definition changes.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
1849     */
1850    public DateTimeType getDateElement() { 
1851      if (this.date == null)
1852        if (Configuration.errorOnAutoCreate())
1853          throw new Error("Attempt to auto-create StructureDefinition.date");
1854        else if (Configuration.doAutoCreate())
1855          this.date = new DateTimeType(); // bb
1856      return this.date;
1857    }
1858
1859    public boolean hasDateElement() { 
1860      return this.date != null && !this.date.isEmpty();
1861    }
1862
1863    public boolean hasDate() { 
1864      return this.date != null && !this.date.isEmpty();
1865    }
1866
1867    /**
1868     * @param value {@link #date} (The date  (and optionally time) when the structure definition was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the structure definition changes.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
1869     */
1870    public StructureDefinition setDateElement(DateTimeType value) { 
1871      this.date = value;
1872      return this;
1873    }
1874
1875    /**
1876     * @return The date  (and optionally time) when the structure definition was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the structure definition changes.
1877     */
1878    public Date getDate() { 
1879      return this.date == null ? null : this.date.getValue();
1880    }
1881
1882    /**
1883     * @param value The date  (and optionally time) when the structure definition was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the structure definition changes.
1884     */
1885    public StructureDefinition setDate(Date value) { 
1886      if (value == null)
1887        this.date = null;
1888      else {
1889        if (this.date == null)
1890          this.date = new DateTimeType();
1891        this.date.setValue(value);
1892      }
1893      return this;
1894    }
1895
1896    /**
1897     * @return {@link #publisher} (The name of the organization or individual that published the structure definition.). This is the underlying object with id, value and extensions. The accessor "getPublisher" gives direct access to the value
1898     */
1899    public StringType getPublisherElement() { 
1900      if (this.publisher == null)
1901        if (Configuration.errorOnAutoCreate())
1902          throw new Error("Attempt to auto-create StructureDefinition.publisher");
1903        else if (Configuration.doAutoCreate())
1904          this.publisher = new StringType(); // bb
1905      return this.publisher;
1906    }
1907
1908    public boolean hasPublisherElement() { 
1909      return this.publisher != null && !this.publisher.isEmpty();
1910    }
1911
1912    public boolean hasPublisher() { 
1913      return this.publisher != null && !this.publisher.isEmpty();
1914    }
1915
1916    /**
1917     * @param value {@link #publisher} (The name of the organization or individual that published the structure definition.). This is the underlying object with id, value and extensions. The accessor "getPublisher" gives direct access to the value
1918     */
1919    public StructureDefinition setPublisherElement(StringType value) { 
1920      this.publisher = value;
1921      return this;
1922    }
1923
1924    /**
1925     * @return The name of the organization or individual that published the structure definition.
1926     */
1927    public String getPublisher() { 
1928      return this.publisher == null ? null : this.publisher.getValue();
1929    }
1930
1931    /**
1932     * @param value The name of the organization or individual that published the structure definition.
1933     */
1934    public StructureDefinition setPublisher(String value) { 
1935      if (Utilities.noString(value))
1936        this.publisher = null;
1937      else {
1938        if (this.publisher == null)
1939          this.publisher = new StringType();
1940        this.publisher.setValue(value);
1941      }
1942      return this;
1943    }
1944
1945    /**
1946     * @return {@link #contact} (Contact details to assist a user in finding and communicating with the publisher.)
1947     */
1948    public List<ContactDetail> getContact() { 
1949      if (this.contact == null)
1950        this.contact = new ArrayList<ContactDetail>();
1951      return this.contact;
1952    }
1953
1954    /**
1955     * @return Returns a reference to <code>this</code> for easy method chaining
1956     */
1957    public StructureDefinition setContact(List<ContactDetail> theContact) { 
1958      this.contact = theContact;
1959      return this;
1960    }
1961
1962    public boolean hasContact() { 
1963      if (this.contact == null)
1964        return false;
1965      for (ContactDetail item : this.contact)
1966        if (!item.isEmpty())
1967          return true;
1968      return false;
1969    }
1970
1971    public ContactDetail addContact() { //3
1972      ContactDetail t = new ContactDetail();
1973      if (this.contact == null)
1974        this.contact = new ArrayList<ContactDetail>();
1975      this.contact.add(t);
1976      return t;
1977    }
1978
1979    public StructureDefinition addContact(ContactDetail t) { //3
1980      if (t == null)
1981        return this;
1982      if (this.contact == null)
1983        this.contact = new ArrayList<ContactDetail>();
1984      this.contact.add(t);
1985      return this;
1986    }
1987
1988    /**
1989     * @return The first repetition of repeating field {@link #contact}, creating it if it does not already exist
1990     */
1991    public ContactDetail getContactFirstRep() { 
1992      if (getContact().isEmpty()) {
1993        addContact();
1994      }
1995      return getContact().get(0);
1996    }
1997
1998    /**
1999     * @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
2000     */
2001    public MarkdownType getDescriptionElement() { 
2002      if (this.description == null)
2003        if (Configuration.errorOnAutoCreate())
2004          throw new Error("Attempt to auto-create StructureDefinition.description");
2005        else if (Configuration.doAutoCreate())
2006          this.description = new MarkdownType(); // bb
2007      return this.description;
2008    }
2009
2010    public boolean hasDescriptionElement() { 
2011      return this.description != null && !this.description.isEmpty();
2012    }
2013
2014    public boolean hasDescription() { 
2015      return this.description != null && !this.description.isEmpty();
2016    }
2017
2018    /**
2019     * @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
2020     */
2021    public StructureDefinition setDescriptionElement(MarkdownType value) { 
2022      this.description = value;
2023      return this;
2024    }
2025
2026    /**
2027     * @return A free text natural language description of the structure definition from a consumer's perspective.
2028     */
2029    public String getDescription() { 
2030      return this.description == null ? null : this.description.getValue();
2031    }
2032
2033    /**
2034     * @param value A free text natural language description of the structure definition from a consumer's perspective.
2035     */
2036    public StructureDefinition setDescription(String value) { 
2037      if (value == null)
2038        this.description = null;
2039      else {
2040        if (this.description == null)
2041          this.description = new MarkdownType();
2042        this.description.setValue(value);
2043      }
2044      return this;
2045    }
2046
2047    /**
2048     * @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.)
2049     */
2050    public List<UsageContext> getUseContext() { 
2051      if (this.useContext == null)
2052        this.useContext = new ArrayList<UsageContext>();
2053      return this.useContext;
2054    }
2055
2056    /**
2057     * @return Returns a reference to <code>this</code> for easy method chaining
2058     */
2059    public StructureDefinition setUseContext(List<UsageContext> theUseContext) { 
2060      this.useContext = theUseContext;
2061      return this;
2062    }
2063
2064    public boolean hasUseContext() { 
2065      if (this.useContext == null)
2066        return false;
2067      for (UsageContext item : this.useContext)
2068        if (!item.isEmpty())
2069          return true;
2070      return false;
2071    }
2072
2073    public UsageContext addUseContext() { //3
2074      UsageContext t = new UsageContext();
2075      if (this.useContext == null)
2076        this.useContext = new ArrayList<UsageContext>();
2077      this.useContext.add(t);
2078      return t;
2079    }
2080
2081    public StructureDefinition addUseContext(UsageContext t) { //3
2082      if (t == null)
2083        return this;
2084      if (this.useContext == null)
2085        this.useContext = new ArrayList<UsageContext>();
2086      this.useContext.add(t);
2087      return this;
2088    }
2089
2090    /**
2091     * @return The first repetition of repeating field {@link #useContext}, creating it if it does not already exist
2092     */
2093    public UsageContext getUseContextFirstRep() { 
2094      if (getUseContext().isEmpty()) {
2095        addUseContext();
2096      }
2097      return getUseContext().get(0);
2098    }
2099
2100    /**
2101     * @return {@link #jurisdiction} (A legal or geographic region in which the structure definition is intended to be used.)
2102     */
2103    public List<CodeableConcept> getJurisdiction() { 
2104      if (this.jurisdiction == null)
2105        this.jurisdiction = new ArrayList<CodeableConcept>();
2106      return this.jurisdiction;
2107    }
2108
2109    /**
2110     * @return Returns a reference to <code>this</code> for easy method chaining
2111     */
2112    public StructureDefinition setJurisdiction(List<CodeableConcept> theJurisdiction) { 
2113      this.jurisdiction = theJurisdiction;
2114      return this;
2115    }
2116
2117    public boolean hasJurisdiction() { 
2118      if (this.jurisdiction == null)
2119        return false;
2120      for (CodeableConcept item : this.jurisdiction)
2121        if (!item.isEmpty())
2122          return true;
2123      return false;
2124    }
2125
2126    public CodeableConcept addJurisdiction() { //3
2127      CodeableConcept t = new CodeableConcept();
2128      if (this.jurisdiction == null)
2129        this.jurisdiction = new ArrayList<CodeableConcept>();
2130      this.jurisdiction.add(t);
2131      return t;
2132    }
2133
2134    public StructureDefinition addJurisdiction(CodeableConcept t) { //3
2135      if (t == null)
2136        return this;
2137      if (this.jurisdiction == null)
2138        this.jurisdiction = new ArrayList<CodeableConcept>();
2139      this.jurisdiction.add(t);
2140      return this;
2141    }
2142
2143    /**
2144     * @return The first repetition of repeating field {@link #jurisdiction}, creating it if it does not already exist
2145     */
2146    public CodeableConcept getJurisdictionFirstRep() { 
2147      if (getJurisdiction().isEmpty()) {
2148        addJurisdiction();
2149      }
2150      return getJurisdiction().get(0);
2151    }
2152
2153    /**
2154     * @return {@link #purpose} (Explanation 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
2155     */
2156    public MarkdownType getPurposeElement() { 
2157      if (this.purpose == null)
2158        if (Configuration.errorOnAutoCreate())
2159          throw new Error("Attempt to auto-create StructureDefinition.purpose");
2160        else if (Configuration.doAutoCreate())
2161          this.purpose = new MarkdownType(); // bb
2162      return this.purpose;
2163    }
2164
2165    public boolean hasPurposeElement() { 
2166      return this.purpose != null && !this.purpose.isEmpty();
2167    }
2168
2169    public boolean hasPurpose() { 
2170      return this.purpose != null && !this.purpose.isEmpty();
2171    }
2172
2173    /**
2174     * @param value {@link #purpose} (Explanation 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
2175     */
2176    public StructureDefinition setPurposeElement(MarkdownType value) { 
2177      this.purpose = value;
2178      return this;
2179    }
2180
2181    /**
2182     * @return Explanation of why this structure definition is needed and why it has been designed as it has.
2183     */
2184    public String getPurpose() { 
2185      return this.purpose == null ? null : this.purpose.getValue();
2186    }
2187
2188    /**
2189     * @param value Explanation of why this structure definition is needed and why it has been designed as it has.
2190     */
2191    public StructureDefinition setPurpose(String value) { 
2192      if (value == null)
2193        this.purpose = null;
2194      else {
2195        if (this.purpose == null)
2196          this.purpose = new MarkdownType();
2197        this.purpose.setValue(value);
2198      }
2199      return this;
2200    }
2201
2202    /**
2203     * @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
2204     */
2205    public MarkdownType getCopyrightElement() { 
2206      if (this.copyright == null)
2207        if (Configuration.errorOnAutoCreate())
2208          throw new Error("Attempt to auto-create StructureDefinition.copyright");
2209        else if (Configuration.doAutoCreate())
2210          this.copyright = new MarkdownType(); // bb
2211      return this.copyright;
2212    }
2213
2214    public boolean hasCopyrightElement() { 
2215      return this.copyright != null && !this.copyright.isEmpty();
2216    }
2217
2218    public boolean hasCopyright() { 
2219      return this.copyright != null && !this.copyright.isEmpty();
2220    }
2221
2222    /**
2223     * @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
2224     */
2225    public StructureDefinition setCopyrightElement(MarkdownType value) { 
2226      this.copyright = value;
2227      return this;
2228    }
2229
2230    /**
2231     * @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.
2232     */
2233    public String getCopyright() { 
2234      return this.copyright == null ? null : this.copyright.getValue();
2235    }
2236
2237    /**
2238     * @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.
2239     */
2240    public StructureDefinition setCopyright(String value) { 
2241      if (value == null)
2242        this.copyright = null;
2243      else {
2244        if (this.copyright == null)
2245          this.copyright = new MarkdownType();
2246        this.copyright.setValue(value);
2247      }
2248      return this;
2249    }
2250
2251    /**
2252     * @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 nby describing the use of this structure definition, or the content it describes.)
2253     */
2254    public List<Coding> getKeyword() { 
2255      if (this.keyword == null)
2256        this.keyword = new ArrayList<Coding>();
2257      return this.keyword;
2258    }
2259
2260    /**
2261     * @return Returns a reference to <code>this</code> for easy method chaining
2262     */
2263    public StructureDefinition setKeyword(List<Coding> theKeyword) { 
2264      this.keyword = theKeyword;
2265      return this;
2266    }
2267
2268    public boolean hasKeyword() { 
2269      if (this.keyword == null)
2270        return false;
2271      for (Coding item : this.keyword)
2272        if (!item.isEmpty())
2273          return true;
2274      return false;
2275    }
2276
2277    public Coding addKeyword() { //3
2278      Coding t = new Coding();
2279      if (this.keyword == null)
2280        this.keyword = new ArrayList<Coding>();
2281      this.keyword.add(t);
2282      return t;
2283    }
2284
2285    public StructureDefinition addKeyword(Coding t) { //3
2286      if (t == null)
2287        return this;
2288      if (this.keyword == null)
2289        this.keyword = new ArrayList<Coding>();
2290      this.keyword.add(t);
2291      return this;
2292    }
2293
2294    /**
2295     * @return The first repetition of repeating field {@link #keyword}, creating it if it does not already exist
2296     */
2297    public Coding getKeywordFirstRep() { 
2298      if (getKeyword().isEmpty()) {
2299        addKeyword();
2300      }
2301      return getKeyword().get(0);
2302    }
2303
2304    /**
2305     * @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.5.0. for this version.). This is the underlying object with id, value and extensions. The accessor "getFhirVersion" gives direct access to the value
2306     */
2307    public IdType getFhirVersionElement() { 
2308      if (this.fhirVersion == null)
2309        if (Configuration.errorOnAutoCreate())
2310          throw new Error("Attempt to auto-create StructureDefinition.fhirVersion");
2311        else if (Configuration.doAutoCreate())
2312          this.fhirVersion = new IdType(); // bb
2313      return this.fhirVersion;
2314    }
2315
2316    public boolean hasFhirVersionElement() { 
2317      return this.fhirVersion != null && !this.fhirVersion.isEmpty();
2318    }
2319
2320    public boolean hasFhirVersion() { 
2321      return this.fhirVersion != null && !this.fhirVersion.isEmpty();
2322    }
2323
2324    /**
2325     * @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.5.0. for this version.). This is the underlying object with id, value and extensions. The accessor "getFhirVersion" gives direct access to the value
2326     */
2327    public StructureDefinition setFhirVersionElement(IdType value) { 
2328      this.fhirVersion = value;
2329      return this;
2330    }
2331
2332    /**
2333     * @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.5.0. for this version.
2334     */
2335    public String getFhirVersion() { 
2336      return this.fhirVersion == null ? null : this.fhirVersion.getValue();
2337    }
2338
2339    /**
2340     * @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.5.0. for this version.
2341     */
2342    public StructureDefinition setFhirVersion(String value) { 
2343      if (Utilities.noString(value))
2344        this.fhirVersion = null;
2345      else {
2346        if (this.fhirVersion == null)
2347          this.fhirVersion = new IdType();
2348        this.fhirVersion.setValue(value);
2349      }
2350      return this;
2351    }
2352
2353    /**
2354     * @return {@link #mapping} (An external specification that the content is mapped to.)
2355     */
2356    public List<StructureDefinitionMappingComponent> getMapping() { 
2357      if (this.mapping == null)
2358        this.mapping = new ArrayList<StructureDefinitionMappingComponent>();
2359      return this.mapping;
2360    }
2361
2362    /**
2363     * @return Returns a reference to <code>this</code> for easy method chaining
2364     */
2365    public StructureDefinition setMapping(List<StructureDefinitionMappingComponent> theMapping) { 
2366      this.mapping = theMapping;
2367      return this;
2368    }
2369
2370    public boolean hasMapping() { 
2371      if (this.mapping == null)
2372        return false;
2373      for (StructureDefinitionMappingComponent item : this.mapping)
2374        if (!item.isEmpty())
2375          return true;
2376      return false;
2377    }
2378
2379    public StructureDefinitionMappingComponent addMapping() { //3
2380      StructureDefinitionMappingComponent t = new StructureDefinitionMappingComponent();
2381      if (this.mapping == null)
2382        this.mapping = new ArrayList<StructureDefinitionMappingComponent>();
2383      this.mapping.add(t);
2384      return t;
2385    }
2386
2387    public StructureDefinition addMapping(StructureDefinitionMappingComponent t) { //3
2388      if (t == null)
2389        return this;
2390      if (this.mapping == null)
2391        this.mapping = new ArrayList<StructureDefinitionMappingComponent>();
2392      this.mapping.add(t);
2393      return this;
2394    }
2395
2396    /**
2397     * @return The first repetition of repeating field {@link #mapping}, creating it if it does not already exist
2398     */
2399    public StructureDefinitionMappingComponent getMappingFirstRep() { 
2400      if (getMapping().isEmpty()) {
2401        addMapping();
2402      }
2403      return getMapping().get(0);
2404    }
2405
2406    /**
2407     * @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
2408     */
2409    public Enumeration<StructureDefinitionKind> getKindElement() { 
2410      if (this.kind == null)
2411        if (Configuration.errorOnAutoCreate())
2412          throw new Error("Attempt to auto-create StructureDefinition.kind");
2413        else if (Configuration.doAutoCreate())
2414          this.kind = new Enumeration<StructureDefinitionKind>(new StructureDefinitionKindEnumFactory()); // bb
2415      return this.kind;
2416    }
2417
2418    public boolean hasKindElement() { 
2419      return this.kind != null && !this.kind.isEmpty();
2420    }
2421
2422    public boolean hasKind() { 
2423      return this.kind != null && !this.kind.isEmpty();
2424    }
2425
2426    /**
2427     * @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
2428     */
2429    public StructureDefinition setKindElement(Enumeration<StructureDefinitionKind> value) { 
2430      this.kind = value;
2431      return this;
2432    }
2433
2434    /**
2435     * @return Defines the kind of structure that this definition is describing.
2436     */
2437    public StructureDefinitionKind getKind() { 
2438      return this.kind == null ? null : this.kind.getValue();
2439    }
2440
2441    /**
2442     * @param value Defines the kind of structure that this definition is describing.
2443     */
2444    public StructureDefinition setKind(StructureDefinitionKind value) { 
2445        if (this.kind == null)
2446          this.kind = new Enumeration<StructureDefinitionKind>(new StructureDefinitionKindEnumFactory());
2447        this.kind.setValue(value);
2448      return this;
2449    }
2450
2451    /**
2452     * @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
2453     */
2454    public BooleanType getAbstractElement() { 
2455      if (this.abstract_ == null)
2456        if (Configuration.errorOnAutoCreate())
2457          throw new Error("Attempt to auto-create StructureDefinition.abstract_");
2458        else if (Configuration.doAutoCreate())
2459          this.abstract_ = new BooleanType(); // bb
2460      return this.abstract_;
2461    }
2462
2463    public boolean hasAbstractElement() { 
2464      return this.abstract_ != null && !this.abstract_.isEmpty();
2465    }
2466
2467    public boolean hasAbstract() { 
2468      return this.abstract_ != null && !this.abstract_.isEmpty();
2469    }
2470
2471    /**
2472     * @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
2473     */
2474    public StructureDefinition setAbstractElement(BooleanType value) { 
2475      this.abstract_ = value;
2476      return this;
2477    }
2478
2479    /**
2480     * @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.
2481     */
2482    public boolean getAbstract() { 
2483      return this.abstract_ == null || this.abstract_.isEmpty() ? false : this.abstract_.getValue();
2484    }
2485
2486    /**
2487     * @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.
2488     */
2489    public StructureDefinition setAbstract(boolean value) { 
2490        if (this.abstract_ == null)
2491          this.abstract_ = new BooleanType();
2492        this.abstract_.setValue(value);
2493      return this;
2494    }
2495
2496    /**
2497     * @return {@link #context} (Identifies the types of resource or data type elements to which the extension can be applied.)
2498     */
2499    public List<StructureDefinitionContextComponent> getContext() { 
2500      if (this.context == null)
2501        this.context = new ArrayList<StructureDefinitionContextComponent>();
2502      return this.context;
2503    }
2504
2505    /**
2506     * @return Returns a reference to <code>this</code> for easy method chaining
2507     */
2508    public StructureDefinition setContext(List<StructureDefinitionContextComponent> theContext) { 
2509      this.context = theContext;
2510      return this;
2511    }
2512
2513    public boolean hasContext() { 
2514      if (this.context == null)
2515        return false;
2516      for (StructureDefinitionContextComponent item : this.context)
2517        if (!item.isEmpty())
2518          return true;
2519      return false;
2520    }
2521
2522    public StructureDefinitionContextComponent addContext() { //3
2523      StructureDefinitionContextComponent t = new StructureDefinitionContextComponent();
2524      if (this.context == null)
2525        this.context = new ArrayList<StructureDefinitionContextComponent>();
2526      this.context.add(t);
2527      return t;
2528    }
2529
2530    public StructureDefinition addContext(StructureDefinitionContextComponent t) { //3
2531      if (t == null)
2532        return this;
2533      if (this.context == null)
2534        this.context = new ArrayList<StructureDefinitionContextComponent>();
2535      this.context.add(t);
2536      return this;
2537    }
2538
2539    /**
2540     * @return The first repetition of repeating field {@link #context}, creating it if it does not already exist
2541     */
2542    public StructureDefinitionContextComponent getContextFirstRep() { 
2543      if (getContext().isEmpty()) {
2544        addContext();
2545      }
2546      return getContext().get(0);
2547    }
2548
2549    /**
2550     * @return {@link #contextInvariant} (A set of rules as FHIRPath Invariants about when the extension can be used (e.g. co-occurrence variants for the extension). All the rules must be true.)
2551     */
2552    public List<StringType> getContextInvariant() { 
2553      if (this.contextInvariant == null)
2554        this.contextInvariant = new ArrayList<StringType>();
2555      return this.contextInvariant;
2556    }
2557
2558    /**
2559     * @return Returns a reference to <code>this</code> for easy method chaining
2560     */
2561    public StructureDefinition setContextInvariant(List<StringType> theContextInvariant) { 
2562      this.contextInvariant = theContextInvariant;
2563      return this;
2564    }
2565
2566    public boolean hasContextInvariant() { 
2567      if (this.contextInvariant == null)
2568        return false;
2569      for (StringType item : this.contextInvariant)
2570        if (!item.isEmpty())
2571          return true;
2572      return false;
2573    }
2574
2575    /**
2576     * @return {@link #contextInvariant} (A set of rules as FHIRPath Invariants about when the extension can be used (e.g. co-occurrence variants for the extension). All the rules must be true.)
2577     */
2578    public StringType addContextInvariantElement() {//2 
2579      StringType t = new StringType();
2580      if (this.contextInvariant == null)
2581        this.contextInvariant = new ArrayList<StringType>();
2582      this.contextInvariant.add(t);
2583      return t;
2584    }
2585
2586    /**
2587     * @param value {@link #contextInvariant} (A set of rules as FHIRPath Invariants about when the extension can be used (e.g. co-occurrence variants for the extension). All the rules must be true.)
2588     */
2589    public StructureDefinition addContextInvariant(String value) { //1
2590      StringType t = new StringType();
2591      t.setValue(value);
2592      if (this.contextInvariant == null)
2593        this.contextInvariant = new ArrayList<StringType>();
2594      this.contextInvariant.add(t);
2595      return this;
2596    }
2597
2598    /**
2599     * @param value {@link #contextInvariant} (A set of rules as FHIRPath Invariants about when the extension can be used (e.g. co-occurrence variants for the extension). All the rules must be true.)
2600     */
2601    public boolean hasContextInvariant(String value) { 
2602      if (this.contextInvariant == null)
2603        return false;
2604      for (StringType v : this.contextInvariant)
2605        if (v.getValue().equals(value)) // string
2606          return true;
2607      return false;
2608    }
2609
2610    /**
2611     * @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).  References are URLs that are relative to http://hl7.org/fhir/StructureDefinition e.g. "string" is a reference to http://hl7.org/fhir/StructureDefinition/string. Absolute URLs are only allowed in logical models.). This is the underlying object with id, value and extensions. The accessor "getType" gives direct access to the value
2612     */
2613    public UriType getTypeElement() { 
2614      if (this.type == null)
2615        if (Configuration.errorOnAutoCreate())
2616          throw new Error("Attempt to auto-create StructureDefinition.type");
2617        else if (Configuration.doAutoCreate())
2618          this.type = new UriType(); // bb
2619      return this.type;
2620    }
2621
2622    public boolean hasTypeElement() { 
2623      return this.type != null && !this.type.isEmpty();
2624    }
2625
2626    public boolean hasType() { 
2627      return this.type != null && !this.type.isEmpty();
2628    }
2629
2630    /**
2631     * @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).  References are URLs that are relative to http://hl7.org/fhir/StructureDefinition e.g. "string" is a reference to http://hl7.org/fhir/StructureDefinition/string. Absolute URLs are only allowed in logical models.). This is the underlying object with id, value and extensions. The accessor "getType" gives direct access to the value
2632     */
2633    public StructureDefinition setTypeElement(UriType value) { 
2634      this.type = value;
2635      return this;
2636    }
2637
2638    /**
2639     * @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).  References are URLs that are relative to http://hl7.org/fhir/StructureDefinition e.g. "string" is a reference to http://hl7.org/fhir/StructureDefinition/string. Absolute URLs are only allowed in logical models.
2640     */
2641    public String getType() { 
2642      return this.type == null ? null : this.type.getValue();
2643    }
2644
2645    /**
2646     * @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).  References are URLs that are relative to http://hl7.org/fhir/StructureDefinition e.g. "string" is a reference to http://hl7.org/fhir/StructureDefinition/string. Absolute URLs are only allowed in logical models.
2647     */
2648    public StructureDefinition setType(String value) { 
2649        if (this.type == null)
2650          this.type = new UriType();
2651        this.type.setValue(value);
2652      return this;
2653    }
2654
2655    /**
2656     * @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
2657     */
2658    public CanonicalType getBaseDefinitionElement() { 
2659      if (this.baseDefinition == null)
2660        if (Configuration.errorOnAutoCreate())
2661          throw new Error("Attempt to auto-create StructureDefinition.baseDefinition");
2662        else if (Configuration.doAutoCreate())
2663          this.baseDefinition = new CanonicalType(); // bb
2664      return this.baseDefinition;
2665    }
2666
2667    public boolean hasBaseDefinitionElement() { 
2668      return this.baseDefinition != null && !this.baseDefinition.isEmpty();
2669    }
2670
2671    public boolean hasBaseDefinition() { 
2672      return this.baseDefinition != null && !this.baseDefinition.isEmpty();
2673    }
2674
2675    /**
2676     * @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
2677     */
2678    public StructureDefinition setBaseDefinitionElement(CanonicalType value) { 
2679      this.baseDefinition = value;
2680      return this;
2681    }
2682
2683    /**
2684     * @return An absolute URI that is the base structure from which this type is derived, either by specialization or constraint.
2685     */
2686    public String getBaseDefinition() { 
2687      return this.baseDefinition == null ? null : this.baseDefinition.getValue();
2688    }
2689
2690    /**
2691     * @param value An absolute URI that is the base structure from which this type is derived, either by specialization or constraint.
2692     */
2693    public StructureDefinition setBaseDefinition(String value) { 
2694      if (Utilities.noString(value))
2695        this.baseDefinition = null;
2696      else {
2697        if (this.baseDefinition == null)
2698          this.baseDefinition = new CanonicalType();
2699        this.baseDefinition.setValue(value);
2700      }
2701      return this;
2702    }
2703
2704    /**
2705     * @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
2706     */
2707    public Enumeration<TypeDerivationRule> getDerivationElement() { 
2708      if (this.derivation == null)
2709        if (Configuration.errorOnAutoCreate())
2710          throw new Error("Attempt to auto-create StructureDefinition.derivation");
2711        else if (Configuration.doAutoCreate())
2712          this.derivation = new Enumeration<TypeDerivationRule>(new TypeDerivationRuleEnumFactory()); // bb
2713      return this.derivation;
2714    }
2715
2716    public boolean hasDerivationElement() { 
2717      return this.derivation != null && !this.derivation.isEmpty();
2718    }
2719
2720    public boolean hasDerivation() { 
2721      return this.derivation != null && !this.derivation.isEmpty();
2722    }
2723
2724    /**
2725     * @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
2726     */
2727    public StructureDefinition setDerivationElement(Enumeration<TypeDerivationRule> value) { 
2728      this.derivation = value;
2729      return this;
2730    }
2731
2732    /**
2733     * @return How the type relates to the baseDefinition.
2734     */
2735    public TypeDerivationRule getDerivation() { 
2736      return this.derivation == null ? null : this.derivation.getValue();
2737    }
2738
2739    /**
2740     * @param value How the type relates to the baseDefinition.
2741     */
2742    public StructureDefinition setDerivation(TypeDerivationRule value) { 
2743      if (value == null)
2744        this.derivation = null;
2745      else {
2746        if (this.derivation == null)
2747          this.derivation = new Enumeration<TypeDerivationRule>(new TypeDerivationRuleEnumFactory());
2748        this.derivation.setValue(value);
2749      }
2750      return this;
2751    }
2752
2753    /**
2754     * @return {@link #snapshot} (A snapshot view is expressed in a standalone form that can be used and interpreted without considering the base StructureDefinition.)
2755     */
2756    public StructureDefinitionSnapshotComponent getSnapshot() { 
2757      if (this.snapshot == null)
2758        if (Configuration.errorOnAutoCreate())
2759          throw new Error("Attempt to auto-create StructureDefinition.snapshot");
2760        else if (Configuration.doAutoCreate())
2761          this.snapshot = new StructureDefinitionSnapshotComponent(); // cc
2762      return this.snapshot;
2763    }
2764
2765    public boolean hasSnapshot() { 
2766      return this.snapshot != null && !this.snapshot.isEmpty();
2767    }
2768
2769    /**
2770     * @param value {@link #snapshot} (A snapshot view is expressed in a standalone form that can be used and interpreted without considering the base StructureDefinition.)
2771     */
2772    public StructureDefinition setSnapshot(StructureDefinitionSnapshotComponent value) { 
2773      this.snapshot = value;
2774      return this;
2775    }
2776
2777    /**
2778     * @return {@link #differential} (A differential view is expressed relative to the base StructureDefinition - a statement of differences that it applies.)
2779     */
2780    public StructureDefinitionDifferentialComponent getDifferential() { 
2781      if (this.differential == null)
2782        if (Configuration.errorOnAutoCreate())
2783          throw new Error("Attempt to auto-create StructureDefinition.differential");
2784        else if (Configuration.doAutoCreate())
2785          this.differential = new StructureDefinitionDifferentialComponent(); // cc
2786      return this.differential;
2787    }
2788
2789    public boolean hasDifferential() { 
2790      return this.differential != null && !this.differential.isEmpty();
2791    }
2792
2793    /**
2794     * @param value {@link #differential} (A differential view is expressed relative to the base StructureDefinition - a statement of differences that it applies.)
2795     */
2796    public StructureDefinition setDifferential(StructureDefinitionDifferentialComponent value) { 
2797      this.differential = value;
2798      return this;
2799    }
2800
2801      protected void listChildren(List<Property> children) {
2802        super.listChildren(children);
2803        children.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; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this structure definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the structure definition is stored on different servers.", 0, 1, url));
2804        children.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));
2805        children.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, 1, version));
2806        children.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, 1, name));
2807        children.add(new Property("title", "string", "A short, descriptive, user-friendly title for the structure definition.", 0, 1, title));
2808        children.add(new Property("status", "code", "The status of this structure definition. Enables tracking the life-cycle of the content.", 0, 1, status));
2809        children.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, 1, experimental));
2810        children.add(new Property("date", "dateTime", "The date  (and optionally time) when the structure definition was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the structure definition changes.", 0, 1, date));
2811        children.add(new Property("publisher", "string", "The name of the organization or individual that published the structure definition.", 0, 1, publisher));
2812        children.add(new Property("contact", "ContactDetail", "Contact details to assist a user in finding and communicating with the publisher.", 0, java.lang.Integer.MAX_VALUE, contact));
2813        children.add(new Property("description", "markdown", "A free text natural language description of the structure definition from a consumer's perspective.", 0, 1, description));
2814        children.add(new Property("useContext", "UsageContext", "The content was developed with a focus and intent of supporting the contexts that are listed. These terms may be used to assist with indexing and searching for appropriate structure definition instances.", 0, java.lang.Integer.MAX_VALUE, useContext));
2815        children.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));
2816        children.add(new Property("purpose", "markdown", "Explanation of why this structure definition is needed and why it has been designed as it has.", 0, 1, purpose));
2817        children.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, 1, copyright));
2818        children.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 nby describing the use of this structure definition, or the content it describes.", 0, java.lang.Integer.MAX_VALUE, keyword));
2819        children.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.5.0. for this version.", 0, 1, fhirVersion));
2820        children.add(new Property("mapping", "", "An external specification that the content is mapped to.", 0, java.lang.Integer.MAX_VALUE, mapping));
2821        children.add(new Property("kind", "code", "Defines the kind of structure that this definition is describing.", 0, 1, kind));
2822        children.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, 1, abstract_));
2823        children.add(new Property("context", "", "Identifies the types of resource or data type elements to which the extension can be applied.", 0, java.lang.Integer.MAX_VALUE, context));
2824        children.add(new Property("contextInvariant", "string", "A set of rules as FHIRPath Invariants about when the extension can be used (e.g. co-occurrence variants for the extension). All the rules must be true.", 0, java.lang.Integer.MAX_VALUE, contextInvariant));
2825        children.add(new Property("type", "uri", "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).  References are URLs that are relative to http://hl7.org/fhir/StructureDefinition e.g. \"string\" is a reference to http://hl7.org/fhir/StructureDefinition/string. Absolute URLs are only allowed in logical models.", 0, 1, type));
2826        children.add(new Property("baseDefinition", "canonical(StructureDefinition)", "An absolute URI that is the base structure from which this type is derived, either by specialization or constraint.", 0, 1, baseDefinition));
2827        children.add(new Property("derivation", "code", "How the type relates to the baseDefinition.", 0, 1, derivation));
2828        children.add(new Property("snapshot", "", "A snapshot view is expressed in a standalone form that can be used and interpreted without considering the base StructureDefinition.", 0, 1, snapshot));
2829        children.add(new Property("differential", "", "A differential view is expressed relative to the base StructureDefinition - a statement of differences that it applies.", 0, 1, differential));
2830      }
2831
2832      @Override
2833      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2834        switch (_hash) {
2835        case 116079: /*url*/  return 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; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this structure definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the structure definition is stored on different servers.", 0, 1, url);
2836        case -1618432855: /*identifier*/  return 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);
2837        case 351608024: /*version*/  return 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, 1, version);
2838        case 3373707: /*name*/  return 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, 1, name);
2839        case 110371416: /*title*/  return new Property("title", "string", "A short, descriptive, user-friendly title for the structure definition.", 0, 1, title);
2840        case -892481550: /*status*/  return new Property("status", "code", "The status of this structure definition. Enables tracking the life-cycle of the content.", 0, 1, status);
2841        case -404562712: /*experimental*/  return 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, 1, experimental);
2842        case 3076014: /*date*/  return new Property("date", "dateTime", "The date  (and optionally time) when the structure definition was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the structure definition changes.", 0, 1, date);
2843        case 1447404028: /*publisher*/  return new Property("publisher", "string", "The name of the organization or individual that published the structure definition.", 0, 1, publisher);
2844        case 951526432: /*contact*/  return new Property("contact", "ContactDetail", "Contact details to assist a user in finding and communicating with the publisher.", 0, java.lang.Integer.MAX_VALUE, contact);
2845        case -1724546052: /*description*/  return new Property("description", "markdown", "A free text natural language description of the structure definition from a consumer's perspective.", 0, 1, description);
2846        case -669707736: /*useContext*/  return new Property("useContext", "UsageContext", "The content was developed with a focus and intent of supporting the contexts that are listed. These terms may be used to assist with indexing and searching for appropriate structure definition instances.", 0, java.lang.Integer.MAX_VALUE, useContext);
2847        case -507075711: /*jurisdiction*/  return 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);
2848        case -220463842: /*purpose*/  return new Property("purpose", "markdown", "Explanation of why this structure definition is needed and why it has been designed as it has.", 0, 1, purpose);
2849        case 1522889671: /*copyright*/  return 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, 1, copyright);
2850        case -814408215: /*keyword*/  return 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 nby describing the use of this structure definition, or the content it describes.", 0, java.lang.Integer.MAX_VALUE, keyword);
2851        case 461006061: /*fhirVersion*/  return 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.5.0. for this version.", 0, 1, fhirVersion);
2852        case 837556430: /*mapping*/  return new Property("mapping", "", "An external specification that the content is mapped to.", 0, java.lang.Integer.MAX_VALUE, mapping);
2853        case 3292052: /*kind*/  return new Property("kind", "code", "Defines the kind of structure that this definition is describing.", 0, 1, kind);
2854        case 1732898850: /*abstract*/  return 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, 1, abstract_);
2855        case 951530927: /*context*/  return new Property("context", "", "Identifies the types of resource or data type elements to which the extension can be applied.", 0, java.lang.Integer.MAX_VALUE, context);
2856        case -802505007: /*contextInvariant*/  return new Property("contextInvariant", "string", "A set of rules as FHIRPath Invariants about when the extension can be used (e.g. co-occurrence variants for the extension). All the rules must be true.", 0, java.lang.Integer.MAX_VALUE, contextInvariant);
2857        case 3575610: /*type*/  return new Property("type", "uri", "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).  References are URLs that are relative to http://hl7.org/fhir/StructureDefinition e.g. \"string\" is a reference to http://hl7.org/fhir/StructureDefinition/string. Absolute URLs are only allowed in logical models.", 0, 1, type);
2858        case 1139771140: /*baseDefinition*/  return new Property("baseDefinition", "canonical(StructureDefinition)", "An absolute URI that is the base structure from which this type is derived, either by specialization or constraint.", 0, 1, baseDefinition);
2859        case -1353885513: /*derivation*/  return new Property("derivation", "code", "How the type relates to the baseDefinition.", 0, 1, derivation);
2860        case 284874180: /*snapshot*/  return new Property("snapshot", "", "A snapshot view is expressed in a standalone form that can be used and interpreted without considering the base StructureDefinition.", 0, 1, snapshot);
2861        case -1196150917: /*differential*/  return new Property("differential", "", "A differential view is expressed relative to the base StructureDefinition - a statement of differences that it applies.", 0, 1, differential);
2862        default: return super.getNamedProperty(_hash, _name, _checkValid);
2863        }
2864
2865      }
2866
2867      @Override
2868      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2869        switch (hash) {
2870        case 116079: /*url*/ return this.url == null ? new Base[0] : new Base[] {this.url}; // UriType
2871        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
2872        case 351608024: /*version*/ return this.version == null ? new Base[0] : new Base[] {this.version}; // StringType
2873        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // StringType
2874        case 110371416: /*title*/ return this.title == null ? new Base[0] : new Base[] {this.title}; // StringType
2875        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<PublicationStatus>
2876        case -404562712: /*experimental*/ return this.experimental == null ? new Base[0] : new Base[] {this.experimental}; // BooleanType
2877        case 3076014: /*date*/ return this.date == null ? new Base[0] : new Base[] {this.date}; // DateTimeType
2878        case 1447404028: /*publisher*/ return this.publisher == null ? new Base[0] : new Base[] {this.publisher}; // StringType
2879        case 951526432: /*contact*/ return this.contact == null ? new Base[0] : this.contact.toArray(new Base[this.contact.size()]); // ContactDetail
2880        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // MarkdownType
2881        case -669707736: /*useContext*/ return this.useContext == null ? new Base[0] : this.useContext.toArray(new Base[this.useContext.size()]); // UsageContext
2882        case -507075711: /*jurisdiction*/ return this.jurisdiction == null ? new Base[0] : this.jurisdiction.toArray(new Base[this.jurisdiction.size()]); // CodeableConcept
2883        case -220463842: /*purpose*/ return this.purpose == null ? new Base[0] : new Base[] {this.purpose}; // MarkdownType
2884        case 1522889671: /*copyright*/ return this.copyright == null ? new Base[0] : new Base[] {this.copyright}; // MarkdownType
2885        case -814408215: /*keyword*/ return this.keyword == null ? new Base[0] : this.keyword.toArray(new Base[this.keyword.size()]); // Coding
2886        case 461006061: /*fhirVersion*/ return this.fhirVersion == null ? new Base[0] : new Base[] {this.fhirVersion}; // IdType
2887        case 837556430: /*mapping*/ return this.mapping == null ? new Base[0] : this.mapping.toArray(new Base[this.mapping.size()]); // StructureDefinitionMappingComponent
2888        case 3292052: /*kind*/ return this.kind == null ? new Base[0] : new Base[] {this.kind}; // Enumeration<StructureDefinitionKind>
2889        case 1732898850: /*abstract*/ return this.abstract_ == null ? new Base[0] : new Base[] {this.abstract_}; // BooleanType
2890        case 951530927: /*context*/ return this.context == null ? new Base[0] : this.context.toArray(new Base[this.context.size()]); // StructureDefinitionContextComponent
2891        case -802505007: /*contextInvariant*/ return this.contextInvariant == null ? new Base[0] : this.contextInvariant.toArray(new Base[this.contextInvariant.size()]); // StringType
2892        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // UriType
2893        case 1139771140: /*baseDefinition*/ return this.baseDefinition == null ? new Base[0] : new Base[] {this.baseDefinition}; // CanonicalType
2894        case -1353885513: /*derivation*/ return this.derivation == null ? new Base[0] : new Base[] {this.derivation}; // Enumeration<TypeDerivationRule>
2895        case 284874180: /*snapshot*/ return this.snapshot == null ? new Base[0] : new Base[] {this.snapshot}; // StructureDefinitionSnapshotComponent
2896        case -1196150917: /*differential*/ return this.differential == null ? new Base[0] : new Base[] {this.differential}; // StructureDefinitionDifferentialComponent
2897        default: return super.getProperty(hash, name, checkValid);
2898        }
2899
2900      }
2901
2902      @Override
2903      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2904        switch (hash) {
2905        case 116079: // url
2906          this.url = castToUri(value); // UriType
2907          return value;
2908        case -1618432855: // identifier
2909          this.getIdentifier().add(castToIdentifier(value)); // Identifier
2910          return value;
2911        case 351608024: // version
2912          this.version = castToString(value); // StringType
2913          return value;
2914        case 3373707: // name
2915          this.name = castToString(value); // StringType
2916          return value;
2917        case 110371416: // title
2918          this.title = castToString(value); // StringType
2919          return value;
2920        case -892481550: // status
2921          value = new PublicationStatusEnumFactory().fromType(castToCode(value));
2922          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
2923          return value;
2924        case -404562712: // experimental
2925          this.experimental = castToBoolean(value); // BooleanType
2926          return value;
2927        case 3076014: // date
2928          this.date = castToDateTime(value); // DateTimeType
2929          return value;
2930        case 1447404028: // publisher
2931          this.publisher = castToString(value); // StringType
2932          return value;
2933        case 951526432: // contact
2934          this.getContact().add(castToContactDetail(value)); // ContactDetail
2935          return value;
2936        case -1724546052: // description
2937          this.description = castToMarkdown(value); // MarkdownType
2938          return value;
2939        case -669707736: // useContext
2940          this.getUseContext().add(castToUsageContext(value)); // UsageContext
2941          return value;
2942        case -507075711: // jurisdiction
2943          this.getJurisdiction().add(castToCodeableConcept(value)); // CodeableConcept
2944          return value;
2945        case -220463842: // purpose
2946          this.purpose = castToMarkdown(value); // MarkdownType
2947          return value;
2948        case 1522889671: // copyright
2949          this.copyright = castToMarkdown(value); // MarkdownType
2950          return value;
2951        case -814408215: // keyword
2952          this.getKeyword().add(castToCoding(value)); // Coding
2953          return value;
2954        case 461006061: // fhirVersion
2955          this.fhirVersion = castToId(value); // IdType
2956          return value;
2957        case 837556430: // mapping
2958          this.getMapping().add((StructureDefinitionMappingComponent) value); // StructureDefinitionMappingComponent
2959          return value;
2960        case 3292052: // kind
2961          value = new StructureDefinitionKindEnumFactory().fromType(castToCode(value));
2962          this.kind = (Enumeration) value; // Enumeration<StructureDefinitionKind>
2963          return value;
2964        case 1732898850: // abstract
2965          this.abstract_ = castToBoolean(value); // BooleanType
2966          return value;
2967        case 951530927: // context
2968          this.getContext().add((StructureDefinitionContextComponent) value); // StructureDefinitionContextComponent
2969          return value;
2970        case -802505007: // contextInvariant
2971          this.getContextInvariant().add(castToString(value)); // StringType
2972          return value;
2973        case 3575610: // type
2974          this.type = castToUri(value); // UriType
2975          return value;
2976        case 1139771140: // baseDefinition
2977          this.baseDefinition = castToCanonical(value); // CanonicalType
2978          return value;
2979        case -1353885513: // derivation
2980          value = new TypeDerivationRuleEnumFactory().fromType(castToCode(value));
2981          this.derivation = (Enumeration) value; // Enumeration<TypeDerivationRule>
2982          return value;
2983        case 284874180: // snapshot
2984          this.snapshot = (StructureDefinitionSnapshotComponent) value; // StructureDefinitionSnapshotComponent
2985          return value;
2986        case -1196150917: // differential
2987          this.differential = (StructureDefinitionDifferentialComponent) value; // StructureDefinitionDifferentialComponent
2988          return value;
2989        default: return super.setProperty(hash, name, value);
2990        }
2991
2992      }
2993
2994      @Override
2995      public Base setProperty(String name, Base value) throws FHIRException {
2996        if (name.equals("url")) {
2997          this.url = castToUri(value); // UriType
2998        } else if (name.equals("identifier")) {
2999          this.getIdentifier().add(castToIdentifier(value));
3000        } else if (name.equals("version")) {
3001          this.version = castToString(value); // StringType
3002        } else if (name.equals("name")) {
3003          this.name = castToString(value); // StringType
3004        } else if (name.equals("title")) {
3005          this.title = castToString(value); // StringType
3006        } else if (name.equals("status")) {
3007          value = new PublicationStatusEnumFactory().fromType(castToCode(value));
3008          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
3009        } else if (name.equals("experimental")) {
3010          this.experimental = castToBoolean(value); // BooleanType
3011        } else if (name.equals("date")) {
3012          this.date = castToDateTime(value); // DateTimeType
3013        } else if (name.equals("publisher")) {
3014          this.publisher = castToString(value); // StringType
3015        } else if (name.equals("contact")) {
3016          this.getContact().add(castToContactDetail(value));
3017        } else if (name.equals("description")) {
3018          this.description = castToMarkdown(value); // MarkdownType
3019        } else if (name.equals("useContext")) {
3020          this.getUseContext().add(castToUsageContext(value));
3021        } else if (name.equals("jurisdiction")) {
3022          this.getJurisdiction().add(castToCodeableConcept(value));
3023        } else if (name.equals("purpose")) {
3024          this.purpose = castToMarkdown(value); // MarkdownType
3025        } else if (name.equals("copyright")) {
3026          this.copyright = castToMarkdown(value); // MarkdownType
3027        } else if (name.equals("keyword")) {
3028          this.getKeyword().add(castToCoding(value));
3029        } else if (name.equals("fhirVersion")) {
3030          this.fhirVersion = castToId(value); // IdType
3031        } else if (name.equals("mapping")) {
3032          this.getMapping().add((StructureDefinitionMappingComponent) value);
3033        } else if (name.equals("kind")) {
3034          value = new StructureDefinitionKindEnumFactory().fromType(castToCode(value));
3035          this.kind = (Enumeration) value; // Enumeration<StructureDefinitionKind>
3036        } else if (name.equals("abstract")) {
3037          this.abstract_ = castToBoolean(value); // BooleanType
3038        } else if (name.equals("context")) {
3039          this.getContext().add((StructureDefinitionContextComponent) value);
3040        } else if (name.equals("contextInvariant")) {
3041          this.getContextInvariant().add(castToString(value));
3042        } else if (name.equals("type")) {
3043          this.type = castToUri(value); // UriType
3044        } else if (name.equals("baseDefinition")) {
3045          this.baseDefinition = castToCanonical(value); // CanonicalType
3046        } else if (name.equals("derivation")) {
3047          value = new TypeDerivationRuleEnumFactory().fromType(castToCode(value));
3048          this.derivation = (Enumeration) value; // Enumeration<TypeDerivationRule>
3049        } else if (name.equals("snapshot")) {
3050          this.snapshot = (StructureDefinitionSnapshotComponent) value; // StructureDefinitionSnapshotComponent
3051        } else if (name.equals("differential")) {
3052          this.differential = (StructureDefinitionDifferentialComponent) value; // StructureDefinitionDifferentialComponent
3053        } else
3054          return super.setProperty(name, value);
3055        return value;
3056      }
3057
3058      @Override
3059      public Base makeProperty(int hash, String name) throws FHIRException {
3060        switch (hash) {
3061        case 116079:  return getUrlElement();
3062        case -1618432855:  return addIdentifier(); 
3063        case 351608024:  return getVersionElement();
3064        case 3373707:  return getNameElement();
3065        case 110371416:  return getTitleElement();
3066        case -892481550:  return getStatusElement();
3067        case -404562712:  return getExperimentalElement();
3068        case 3076014:  return getDateElement();
3069        case 1447404028:  return getPublisherElement();
3070        case 951526432:  return addContact(); 
3071        case -1724546052:  return getDescriptionElement();
3072        case -669707736:  return addUseContext(); 
3073        case -507075711:  return addJurisdiction(); 
3074        case -220463842:  return getPurposeElement();
3075        case 1522889671:  return getCopyrightElement();
3076        case -814408215:  return addKeyword(); 
3077        case 461006061:  return getFhirVersionElement();
3078        case 837556430:  return addMapping(); 
3079        case 3292052:  return getKindElement();
3080        case 1732898850:  return getAbstractElement();
3081        case 951530927:  return addContext(); 
3082        case -802505007:  return addContextInvariantElement();
3083        case 3575610:  return getTypeElement();
3084        case 1139771140:  return getBaseDefinitionElement();
3085        case -1353885513:  return getDerivationElement();
3086        case 284874180:  return getSnapshot(); 
3087        case -1196150917:  return getDifferential(); 
3088        default: return super.makeProperty(hash, name);
3089        }
3090
3091      }
3092
3093      @Override
3094      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
3095        switch (hash) {
3096        case 116079: /*url*/ return new String[] {"uri"};
3097        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
3098        case 351608024: /*version*/ return new String[] {"string"};
3099        case 3373707: /*name*/ return new String[] {"string"};
3100        case 110371416: /*title*/ return new String[] {"string"};
3101        case -892481550: /*status*/ return new String[] {"code"};
3102        case -404562712: /*experimental*/ return new String[] {"boolean"};
3103        case 3076014: /*date*/ return new String[] {"dateTime"};
3104        case 1447404028: /*publisher*/ return new String[] {"string"};
3105        case 951526432: /*contact*/ return new String[] {"ContactDetail"};
3106        case -1724546052: /*description*/ return new String[] {"markdown"};
3107        case -669707736: /*useContext*/ return new String[] {"UsageContext"};
3108        case -507075711: /*jurisdiction*/ return new String[] {"CodeableConcept"};
3109        case -220463842: /*purpose*/ return new String[] {"markdown"};
3110        case 1522889671: /*copyright*/ return new String[] {"markdown"};
3111        case -814408215: /*keyword*/ return new String[] {"Coding"};
3112        case 461006061: /*fhirVersion*/ return new String[] {"id"};
3113        case 837556430: /*mapping*/ return new String[] {};
3114        case 3292052: /*kind*/ return new String[] {"code"};
3115        case 1732898850: /*abstract*/ return new String[] {"boolean"};
3116        case 951530927: /*context*/ return new String[] {};
3117        case -802505007: /*contextInvariant*/ return new String[] {"string"};
3118        case 3575610: /*type*/ return new String[] {"uri"};
3119        case 1139771140: /*baseDefinition*/ return new String[] {"canonical"};
3120        case -1353885513: /*derivation*/ return new String[] {"code"};
3121        case 284874180: /*snapshot*/ return new String[] {};
3122        case -1196150917: /*differential*/ return new String[] {};
3123        default: return super.getTypesForProperty(hash, name);
3124        }
3125
3126      }
3127
3128      @Override
3129      public Base addChild(String name) throws FHIRException {
3130        if (name.equals("url")) {
3131          throw new FHIRException("Cannot call addChild on a primitive type StructureDefinition.url");
3132        }
3133        else if (name.equals("identifier")) {
3134          return addIdentifier();
3135        }
3136        else if (name.equals("version")) {
3137          throw new FHIRException("Cannot call addChild on a primitive type StructureDefinition.version");
3138        }
3139        else if (name.equals("name")) {
3140          throw new FHIRException("Cannot call addChild on a primitive type StructureDefinition.name");
3141        }
3142        else if (name.equals("title")) {
3143          throw new FHIRException("Cannot call addChild on a primitive type StructureDefinition.title");
3144        }
3145        else if (name.equals("status")) {
3146          throw new FHIRException("Cannot call addChild on a primitive type StructureDefinition.status");
3147        }
3148        else if (name.equals("experimental")) {
3149          throw new FHIRException("Cannot call addChild on a primitive type StructureDefinition.experimental");
3150        }
3151        else if (name.equals("date")) {
3152          throw new FHIRException("Cannot call addChild on a primitive type StructureDefinition.date");
3153        }
3154        else if (name.equals("publisher")) {
3155          throw new FHIRException("Cannot call addChild on a primitive type StructureDefinition.publisher");
3156        }
3157        else if (name.equals("contact")) {
3158          return addContact();
3159        }
3160        else if (name.equals("description")) {
3161          throw new FHIRException("Cannot call addChild on a primitive type StructureDefinition.description");
3162        }
3163        else if (name.equals("useContext")) {
3164          return addUseContext();
3165        }
3166        else if (name.equals("jurisdiction")) {
3167          return addJurisdiction();
3168        }
3169        else if (name.equals("purpose")) {
3170          throw new FHIRException("Cannot call addChild on a primitive type StructureDefinition.purpose");
3171        }
3172        else if (name.equals("copyright")) {
3173          throw new FHIRException("Cannot call addChild on a primitive type StructureDefinition.copyright");
3174        }
3175        else if (name.equals("keyword")) {
3176          return addKeyword();
3177        }
3178        else if (name.equals("fhirVersion")) {
3179          throw new FHIRException("Cannot call addChild on a primitive type StructureDefinition.fhirVersion");
3180        }
3181        else if (name.equals("mapping")) {
3182          return addMapping();
3183        }
3184        else if (name.equals("kind")) {
3185          throw new FHIRException("Cannot call addChild on a primitive type StructureDefinition.kind");
3186        }
3187        else if (name.equals("abstract")) {
3188          throw new FHIRException("Cannot call addChild on a primitive type StructureDefinition.abstract");
3189        }
3190        else if (name.equals("context")) {
3191          return addContext();
3192        }
3193        else if (name.equals("contextInvariant")) {
3194          throw new FHIRException("Cannot call addChild on a primitive type StructureDefinition.contextInvariant");
3195        }
3196        else if (name.equals("type")) {
3197          throw new FHIRException("Cannot call addChild on a primitive type StructureDefinition.type");
3198        }
3199        else if (name.equals("baseDefinition")) {
3200          throw new FHIRException("Cannot call addChild on a primitive type StructureDefinition.baseDefinition");
3201        }
3202        else if (name.equals("derivation")) {
3203          throw new FHIRException("Cannot call addChild on a primitive type StructureDefinition.derivation");
3204        }
3205        else if (name.equals("snapshot")) {
3206          this.snapshot = new StructureDefinitionSnapshotComponent();
3207          return this.snapshot;
3208        }
3209        else if (name.equals("differential")) {
3210          this.differential = new StructureDefinitionDifferentialComponent();
3211          return this.differential;
3212        }
3213        else
3214          return super.addChild(name);
3215      }
3216
3217  public String fhirType() {
3218    return "StructureDefinition";
3219
3220  }
3221
3222      public StructureDefinition copy() {
3223        StructureDefinition dst = new StructureDefinition();
3224        copyValues(dst);
3225        dst.url = url == null ? null : url.copy();
3226        if (identifier != null) {
3227          dst.identifier = new ArrayList<Identifier>();
3228          for (Identifier i : identifier)
3229            dst.identifier.add(i.copy());
3230        };
3231        dst.version = version == null ? null : version.copy();
3232        dst.name = name == null ? null : name.copy();
3233        dst.title = title == null ? null : title.copy();
3234        dst.status = status == null ? null : status.copy();
3235        dst.experimental = experimental == null ? null : experimental.copy();
3236        dst.date = date == null ? null : date.copy();
3237        dst.publisher = publisher == null ? null : publisher.copy();
3238        if (contact != null) {
3239          dst.contact = new ArrayList<ContactDetail>();
3240          for (ContactDetail i : contact)
3241            dst.contact.add(i.copy());
3242        };
3243        dst.description = description == null ? null : description.copy();
3244        if (useContext != null) {
3245          dst.useContext = new ArrayList<UsageContext>();
3246          for (UsageContext i : useContext)
3247            dst.useContext.add(i.copy());
3248        };
3249        if (jurisdiction != null) {
3250          dst.jurisdiction = new ArrayList<CodeableConcept>();
3251          for (CodeableConcept i : jurisdiction)
3252            dst.jurisdiction.add(i.copy());
3253        };
3254        dst.purpose = purpose == null ? null : purpose.copy();
3255        dst.copyright = copyright == null ? null : copyright.copy();
3256        if (keyword != null) {
3257          dst.keyword = new ArrayList<Coding>();
3258          for (Coding i : keyword)
3259            dst.keyword.add(i.copy());
3260        };
3261        dst.fhirVersion = fhirVersion == null ? null : fhirVersion.copy();
3262        if (mapping != null) {
3263          dst.mapping = new ArrayList<StructureDefinitionMappingComponent>();
3264          for (StructureDefinitionMappingComponent i : mapping)
3265            dst.mapping.add(i.copy());
3266        };
3267        dst.kind = kind == null ? null : kind.copy();
3268        dst.abstract_ = abstract_ == null ? null : abstract_.copy();
3269        if (context != null) {
3270          dst.context = new ArrayList<StructureDefinitionContextComponent>();
3271          for (StructureDefinitionContextComponent i : context)
3272            dst.context.add(i.copy());
3273        };
3274        if (contextInvariant != null) {
3275          dst.contextInvariant = new ArrayList<StringType>();
3276          for (StringType i : contextInvariant)
3277            dst.contextInvariant.add(i.copy());
3278        };
3279        dst.type = type == null ? null : type.copy();
3280        dst.baseDefinition = baseDefinition == null ? null : baseDefinition.copy();
3281        dst.derivation = derivation == null ? null : derivation.copy();
3282        dst.snapshot = snapshot == null ? null : snapshot.copy();
3283        dst.differential = differential == null ? null : differential.copy();
3284        return dst;
3285      }
3286
3287      protected StructureDefinition typedCopy() {
3288        return copy();
3289      }
3290
3291      @Override
3292      public boolean equalsDeep(Base other_) {
3293        if (!super.equalsDeep(other_))
3294          return false;
3295        if (!(other_ instanceof StructureDefinition))
3296          return false;
3297        StructureDefinition o = (StructureDefinition) other_;
3298        return compareDeep(identifier, o.identifier, true) && compareDeep(purpose, o.purpose, true) && compareDeep(copyright, o.copyright, true)
3299           && compareDeep(keyword, o.keyword, true) && compareDeep(fhirVersion, o.fhirVersion, true) && compareDeep(mapping, o.mapping, true)
3300           && compareDeep(kind, o.kind, true) && compareDeep(abstract_, o.abstract_, true) && compareDeep(context, o.context, true)
3301           && compareDeep(contextInvariant, o.contextInvariant, true) && compareDeep(type, o.type, true) && compareDeep(baseDefinition, o.baseDefinition, true)
3302           && compareDeep(derivation, o.derivation, true) && compareDeep(snapshot, o.snapshot, true) && compareDeep(differential, o.differential, true)
3303          ;
3304      }
3305
3306      @Override
3307      public boolean equalsShallow(Base other_) {
3308        if (!super.equalsShallow(other_))
3309          return false;
3310        if (!(other_ instanceof StructureDefinition))
3311          return false;
3312        StructureDefinition o = (StructureDefinition) other_;
3313        return compareValues(purpose, o.purpose, true) && compareValues(copyright, o.copyright, true) && compareValues(fhirVersion, o.fhirVersion, true)
3314           && compareValues(kind, o.kind, true) && compareValues(abstract_, o.abstract_, true) && compareValues(contextInvariant, o.contextInvariant, true)
3315           && compareValues(type, o.type, true) && compareValues(derivation, o.derivation, true);
3316      }
3317
3318      public boolean isEmpty() {
3319        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, purpose, copyright
3320          , keyword, fhirVersion, mapping, kind, abstract_, context, contextInvariant, type
3321          , baseDefinition, derivation, snapshot, differential);
3322      }
3323
3324  @Override
3325  public ResourceType getResourceType() {
3326    return ResourceType.StructureDefinition;
3327   }
3328
3329 /**
3330   * Search parameter: <b>date</b>
3331   * <p>
3332   * Description: <b>The structure definition publication date</b><br>
3333   * Type: <b>date</b><br>
3334   * Path: <b>StructureDefinition.date</b><br>
3335   * </p>
3336   */
3337  @SearchParamDefinition(name="date", path="StructureDefinition.date", description="The structure definition publication date", type="date" )
3338  public static final String SP_DATE = "date";
3339 /**
3340   * <b>Fluent Client</b> search parameter constant for <b>date</b>
3341   * <p>
3342   * Description: <b>The structure definition publication date</b><br>
3343   * Type: <b>date</b><br>
3344   * Path: <b>StructureDefinition.date</b><br>
3345   * </p>
3346   */
3347  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_DATE);
3348
3349 /**
3350   * Search parameter: <b>context-type-value</b>
3351   * <p>
3352   * Description: <b>A use context type and value assigned to the structure definition</b><br>
3353   * Type: <b>composite</b><br>
3354   * Path: <b></b><br>
3355   * </p>
3356   */
3357  @SearchParamDefinition(name="context-type-value", path="StructureDefinition.useContext", description="A use context type and value assigned to the structure definition", type="composite", compositeOf={"context-type", "context"} )
3358  public static final String SP_CONTEXT_TYPE_VALUE = "context-type-value";
3359 /**
3360   * <b>Fluent Client</b> search parameter constant for <b>context-type-value</b>
3361   * <p>
3362   * Description: <b>A use context type and value assigned to the structure definition</b><br>
3363   * Type: <b>composite</b><br>
3364   * Path: <b></b><br>
3365   * </p>
3366   */
3367  public static final ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.TokenClientParam> CONTEXT_TYPE_VALUE = new ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.TokenClientParam>(SP_CONTEXT_TYPE_VALUE);
3368
3369 /**
3370   * Search parameter: <b>jurisdiction</b>
3371   * <p>
3372   * Description: <b>Intended jurisdiction for the structure definition</b><br>
3373   * Type: <b>token</b><br>
3374   * Path: <b>StructureDefinition.jurisdiction</b><br>
3375   * </p>
3376   */
3377  @SearchParamDefinition(name="jurisdiction", path="StructureDefinition.jurisdiction", description="Intended jurisdiction for the structure definition", type="token" )
3378  public static final String SP_JURISDICTION = "jurisdiction";
3379 /**
3380   * <b>Fluent Client</b> search parameter constant for <b>jurisdiction</b>
3381   * <p>
3382   * Description: <b>Intended jurisdiction for the structure definition</b><br>
3383   * Type: <b>token</b><br>
3384   * Path: <b>StructureDefinition.jurisdiction</b><br>
3385   * </p>
3386   */
3387  public static final ca.uhn.fhir.rest.gclient.TokenClientParam JURISDICTION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_JURISDICTION);
3388
3389 /**
3390   * Search parameter: <b>description</b>
3391   * <p>
3392   * Description: <b>The description of the structure definition</b><br>
3393   * Type: <b>string</b><br>
3394   * Path: <b>StructureDefinition.description</b><br>
3395   * </p>
3396   */
3397  @SearchParamDefinition(name="description", path="StructureDefinition.description", description="The description of the structure definition", type="string" )
3398  public static final String SP_DESCRIPTION = "description";
3399 /**
3400   * <b>Fluent Client</b> search parameter constant for <b>description</b>
3401   * <p>
3402   * Description: <b>The description of the structure definition</b><br>
3403   * Type: <b>string</b><br>
3404   * Path: <b>StructureDefinition.description</b><br>
3405   * </p>
3406   */
3407  public static final ca.uhn.fhir.rest.gclient.StringClientParam DESCRIPTION = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_DESCRIPTION);
3408
3409 /**
3410   * Search parameter: <b>context-type</b>
3411   * <p>
3412   * Description: <b>A type of use context assigned to the structure definition</b><br>
3413   * Type: <b>token</b><br>
3414   * Path: <b>StructureDefinition.useContext.code</b><br>
3415   * </p>
3416   */
3417  @SearchParamDefinition(name="context-type", path="StructureDefinition.useContext.code", description="A type of use context assigned to the structure definition", type="token" )
3418  public static final String SP_CONTEXT_TYPE = "context-type";
3419 /**
3420   * <b>Fluent Client</b> search parameter constant for <b>context-type</b>
3421   * <p>
3422   * Description: <b>A type of use context assigned to the structure definition</b><br>
3423   * Type: <b>token</b><br>
3424   * Path: <b>StructureDefinition.useContext.code</b><br>
3425   * </p>
3426   */
3427  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CONTEXT_TYPE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CONTEXT_TYPE);
3428
3429 /**
3430   * Search parameter: <b>experimental</b>
3431   * <p>
3432   * Description: <b>For testing purposes, not real usage</b><br>
3433   * Type: <b>token</b><br>
3434   * Path: <b>StructureDefinition.experimental</b><br>
3435   * </p>
3436   */
3437  @SearchParamDefinition(name="experimental", path="StructureDefinition.experimental", description="For testing purposes, not real usage", type="token" )
3438  public static final String SP_EXPERIMENTAL = "experimental";
3439 /**
3440   * <b>Fluent Client</b> search parameter constant for <b>experimental</b>
3441   * <p>
3442   * Description: <b>For testing purposes, not real usage</b><br>
3443   * Type: <b>token</b><br>
3444   * Path: <b>StructureDefinition.experimental</b><br>
3445   * </p>
3446   */
3447  public static final ca.uhn.fhir.rest.gclient.TokenClientParam EXPERIMENTAL = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_EXPERIMENTAL);
3448
3449 /**
3450   * Search parameter: <b>title</b>
3451   * <p>
3452   * Description: <b>The human-friendly name of the structure definition</b><br>
3453   * Type: <b>string</b><br>
3454   * Path: <b>StructureDefinition.title</b><br>
3455   * </p>
3456   */
3457  @SearchParamDefinition(name="title", path="StructureDefinition.title", description="The human-friendly name of the structure definition", type="string" )
3458  public static final String SP_TITLE = "title";
3459 /**
3460   * <b>Fluent Client</b> search parameter constant for <b>title</b>
3461   * <p>
3462   * Description: <b>The human-friendly name of the structure definition</b><br>
3463   * Type: <b>string</b><br>
3464   * Path: <b>StructureDefinition.title</b><br>
3465   * </p>
3466   */
3467  public static final ca.uhn.fhir.rest.gclient.StringClientParam TITLE = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_TITLE);
3468
3469 /**
3470   * Search parameter: <b>type</b>
3471   * <p>
3472   * Description: <b>Type defined or constrained by this structure</b><br>
3473   * Type: <b>uri</b><br>
3474   * Path: <b>StructureDefinition.type</b><br>
3475   * </p>
3476   */
3477  @SearchParamDefinition(name="type", path="StructureDefinition.type", description="Type defined or constrained by this structure", type="uri" )
3478  public static final String SP_TYPE = "type";
3479 /**
3480   * <b>Fluent Client</b> search parameter constant for <b>type</b>
3481   * <p>
3482   * Description: <b>Type defined or constrained by this structure</b><br>
3483   * Type: <b>uri</b><br>
3484   * Path: <b>StructureDefinition.type</b><br>
3485   * </p>
3486   */
3487  public static final ca.uhn.fhir.rest.gclient.UriClientParam TYPE = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_TYPE);
3488
3489 /**
3490   * Search parameter: <b>context-quantity</b>
3491   * <p>
3492   * Description: <b>A quantity- or range-valued use context assigned to the structure definition</b><br>
3493   * Type: <b>quantity</b><br>
3494   * Path: <b>StructureDefinition.useContext.valueQuantity, StructureDefinition.useContext.valueRange</b><br>
3495   * </p>
3496   */
3497  @SearchParamDefinition(name="context-quantity", path="(StructureDefinition.useContext.value as Quantity) | (StructureDefinition.useContext.value as Range)", description="A quantity- or range-valued use context assigned to the structure definition", type="quantity" )
3498  public static final String SP_CONTEXT_QUANTITY = "context-quantity";
3499 /**
3500   * <b>Fluent Client</b> search parameter constant for <b>context-quantity</b>
3501   * <p>
3502   * Description: <b>A quantity- or range-valued use context assigned to the structure definition</b><br>
3503   * Type: <b>quantity</b><br>
3504   * Path: <b>StructureDefinition.useContext.valueQuantity, StructureDefinition.useContext.valueRange</b><br>
3505   * </p>
3506   */
3507  public static final ca.uhn.fhir.rest.gclient.QuantityClientParam CONTEXT_QUANTITY = new ca.uhn.fhir.rest.gclient.QuantityClientParam(SP_CONTEXT_QUANTITY);
3508
3509 /**
3510   * Search parameter: <b>path</b>
3511   * <p>
3512   * Description: <b>A path that is constrained in the StructureDefinition</b><br>
3513   * Type: <b>token</b><br>
3514   * Path: <b>StructureDefinition.snapshot.element.path, StructureDefinition.differential.element.path</b><br>
3515   * </p>
3516   */
3517  @SearchParamDefinition(name="path", path="StructureDefinition.snapshot.element.path | StructureDefinition.differential.element.path", description="A path that is constrained in the StructureDefinition", type="token" )
3518  public static final String SP_PATH = "path";
3519 /**
3520   * <b>Fluent Client</b> search parameter constant for <b>path</b>
3521   * <p>
3522   * Description: <b>A path that is constrained in the StructureDefinition</b><br>
3523   * Type: <b>token</b><br>
3524   * Path: <b>StructureDefinition.snapshot.element.path, StructureDefinition.differential.element.path</b><br>
3525   * </p>
3526   */
3527  public static final ca.uhn.fhir.rest.gclient.TokenClientParam PATH = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_PATH);
3528
3529 /**
3530   * Search parameter: <b>context</b>
3531   * <p>
3532   * Description: <b>A use context assigned to the structure definition</b><br>
3533   * Type: <b>token</b><br>
3534   * Path: <b>StructureDefinition.useContext.valueCodeableConcept</b><br>
3535   * </p>
3536   */
3537  @SearchParamDefinition(name="context", path="(StructureDefinition.useContext.value as CodeableConcept)", description="A use context assigned to the structure definition", type="token" )
3538  public static final String SP_CONTEXT = "context";
3539 /**
3540   * <b>Fluent Client</b> search parameter constant for <b>context</b>
3541   * <p>
3542   * Description: <b>A use context assigned to the structure definition</b><br>
3543   * Type: <b>token</b><br>
3544   * Path: <b>StructureDefinition.useContext.valueCodeableConcept</b><br>
3545   * </p>
3546   */
3547  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CONTEXT = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CONTEXT);
3548
3549 /**
3550   * Search parameter: <b>base-path</b>
3551   * <p>
3552   * Description: <b>Path that identifies the base element</b><br>
3553   * Type: <b>token</b><br>
3554   * Path: <b>StructureDefinition.snapshot.element.base.path, StructureDefinition.differential.element.base.path</b><br>
3555   * </p>
3556   */
3557  @SearchParamDefinition(name="base-path", path="StructureDefinition.snapshot.element.base.path | StructureDefinition.differential.element.base.path", description="Path that identifies the base element", type="token" )
3558  public static final String SP_BASE_PATH = "base-path";
3559 /**
3560   * <b>Fluent Client</b> search parameter constant for <b>base-path</b>
3561   * <p>
3562   * Description: <b>Path that identifies the base element</b><br>
3563   * Type: <b>token</b><br>
3564   * Path: <b>StructureDefinition.snapshot.element.base.path, StructureDefinition.differential.element.base.path</b><br>
3565   * </p>
3566   */
3567  public static final ca.uhn.fhir.rest.gclient.TokenClientParam BASE_PATH = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_BASE_PATH);
3568
3569 /**
3570   * Search parameter: <b>keyword</b>
3571   * <p>
3572   * Description: <b>A code for the StructureDefinition</b><br>
3573   * Type: <b>token</b><br>
3574   * Path: <b>StructureDefinition.keyword</b><br>
3575   * </p>
3576   */
3577  @SearchParamDefinition(name="keyword", path="StructureDefinition.keyword", description="A code for the StructureDefinition", type="token" )
3578  public static final String SP_KEYWORD = "keyword";
3579 /**
3580   * <b>Fluent Client</b> search parameter constant for <b>keyword</b>
3581   * <p>
3582   * Description: <b>A code for the StructureDefinition</b><br>
3583   * Type: <b>token</b><br>
3584   * Path: <b>StructureDefinition.keyword</b><br>
3585   * </p>
3586   */
3587  public static final ca.uhn.fhir.rest.gclient.TokenClientParam KEYWORD = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_KEYWORD);
3588
3589 /**
3590   * Search parameter: <b>context-type-quantity</b>
3591   * <p>
3592   * Description: <b>A use context type and quantity- or range-based value assigned to the structure definition</b><br>
3593   * Type: <b>composite</b><br>
3594   * Path: <b></b><br>
3595   * </p>
3596   */
3597  @SearchParamDefinition(name="context-type-quantity", path="StructureDefinition.useContext", description="A use context type and quantity- or range-based value assigned to the structure definition", type="composite", compositeOf={"context-type", "context-quantity"} )
3598  public static final String SP_CONTEXT_TYPE_QUANTITY = "context-type-quantity";
3599 /**
3600   * <b>Fluent Client</b> search parameter constant for <b>context-type-quantity</b>
3601   * <p>
3602   * Description: <b>A use context type and quantity- or range-based value assigned to the structure definition</b><br>
3603   * Type: <b>composite</b><br>
3604   * Path: <b></b><br>
3605   * </p>
3606   */
3607  public static final ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.QuantityClientParam> CONTEXT_TYPE_QUANTITY = new ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.QuantityClientParam>(SP_CONTEXT_TYPE_QUANTITY);
3608
3609 /**
3610   * Search parameter: <b>identifier</b>
3611   * <p>
3612   * Description: <b>External identifier for the structure definition</b><br>
3613   * Type: <b>token</b><br>
3614   * Path: <b>StructureDefinition.identifier</b><br>
3615   * </p>
3616   */
3617  @SearchParamDefinition(name="identifier", path="StructureDefinition.identifier", description="External identifier for the structure definition", type="token" )
3618  public static final String SP_IDENTIFIER = "identifier";
3619 /**
3620   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
3621   * <p>
3622   * Description: <b>External identifier for the structure definition</b><br>
3623   * Type: <b>token</b><br>
3624   * Path: <b>StructureDefinition.identifier</b><br>
3625   * </p>
3626   */
3627  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
3628
3629 /**
3630   * Search parameter: <b>valueset</b>
3631   * <p>
3632   * Description: <b>A vocabulary binding reference</b><br>
3633   * Type: <b>reference</b><br>
3634   * Path: <b>StructureDefinition.snapshot.element.binding.valueSet</b><br>
3635   * </p>
3636   */
3637  @SearchParamDefinition(name="valueset", path="StructureDefinition.snapshot.element.binding.valueSet", description="A vocabulary binding reference", type="reference", target={ValueSet.class } )
3638  public static final String SP_VALUESET = "valueset";
3639 /**
3640   * <b>Fluent Client</b> search parameter constant for <b>valueset</b>
3641   * <p>
3642   * Description: <b>A vocabulary binding reference</b><br>
3643   * Type: <b>reference</b><br>
3644   * Path: <b>StructureDefinition.snapshot.element.binding.valueSet</b><br>
3645   * </p>
3646   */
3647  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam VALUESET = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_VALUESET);
3648
3649/**
3650   * Constant for fluent queries to be used to add include statements. Specifies
3651   * the path value of "<b>StructureDefinition:valueset</b>".
3652   */
3653  public static final ca.uhn.fhir.model.api.Include INCLUDE_VALUESET = new ca.uhn.fhir.model.api.Include("StructureDefinition:valueset").toLocked();
3654
3655 /**
3656   * Search parameter: <b>kind</b>
3657   * <p>
3658   * Description: <b>primitive-type | complex-type | resource | logical</b><br>
3659   * Type: <b>token</b><br>
3660   * Path: <b>StructureDefinition.kind</b><br>
3661   * </p>
3662   */
3663  @SearchParamDefinition(name="kind", path="StructureDefinition.kind", description="primitive-type | complex-type | resource | logical", type="token" )
3664  public static final String SP_KIND = "kind";
3665 /**
3666   * <b>Fluent Client</b> search parameter constant for <b>kind</b>
3667   * <p>
3668   * Description: <b>primitive-type | complex-type | resource | logical</b><br>
3669   * Type: <b>token</b><br>
3670   * Path: <b>StructureDefinition.kind</b><br>
3671   * </p>
3672   */
3673  public static final ca.uhn.fhir.rest.gclient.TokenClientParam KIND = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_KIND);
3674
3675 /**
3676   * Search parameter: <b>abstract</b>
3677   * <p>
3678   * Description: <b>Whether the structure is abstract</b><br>
3679   * Type: <b>token</b><br>
3680   * Path: <b>StructureDefinition.abstract</b><br>
3681   * </p>
3682   */
3683  @SearchParamDefinition(name="abstract", path="StructureDefinition.abstract", description="Whether the structure is abstract", type="token" )
3684  public static final String SP_ABSTRACT = "abstract";
3685 /**
3686   * <b>Fluent Client</b> search parameter constant for <b>abstract</b>
3687   * <p>
3688   * Description: <b>Whether the structure is abstract</b><br>
3689   * Type: <b>token</b><br>
3690   * Path: <b>StructureDefinition.abstract</b><br>
3691   * </p>
3692   */
3693  public static final ca.uhn.fhir.rest.gclient.TokenClientParam ABSTRACT = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_ABSTRACT);
3694
3695 /**
3696   * Search parameter: <b>version</b>
3697   * <p>
3698   * Description: <b>The business version of the structure definition</b><br>
3699   * Type: <b>token</b><br>
3700   * Path: <b>StructureDefinition.version</b><br>
3701   * </p>
3702   */
3703  @SearchParamDefinition(name="version", path="StructureDefinition.version", description="The business version of the structure definition", type="token" )
3704  public static final String SP_VERSION = "version";
3705 /**
3706   * <b>Fluent Client</b> search parameter constant for <b>version</b>
3707   * <p>
3708   * Description: <b>The business version of the structure definition</b><br>
3709   * Type: <b>token</b><br>
3710   * Path: <b>StructureDefinition.version</b><br>
3711   * </p>
3712   */
3713  public static final ca.uhn.fhir.rest.gclient.TokenClientParam VERSION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_VERSION);
3714
3715 /**
3716   * Search parameter: <b>url</b>
3717   * <p>
3718   * Description: <b>The uri that identifies the structure definition</b><br>
3719   * Type: <b>uri</b><br>
3720   * Path: <b>StructureDefinition.url</b><br>
3721   * </p>
3722   */
3723  @SearchParamDefinition(name="url", path="StructureDefinition.url", description="The uri that identifies the structure definition", type="uri" )
3724  public static final String SP_URL = "url";
3725 /**
3726   * <b>Fluent Client</b> search parameter constant for <b>url</b>
3727   * <p>
3728   * Description: <b>The uri that identifies the structure definition</b><br>
3729   * Type: <b>uri</b><br>
3730   * Path: <b>StructureDefinition.url</b><br>
3731   * </p>
3732   */
3733  public static final ca.uhn.fhir.rest.gclient.UriClientParam URL = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_URL);
3734
3735 /**
3736   * Search parameter: <b>ext-context</b>
3737   * <p>
3738   * Description: <b>The system is the URL for the context-type: e.g. http://hl7.org/fhir/extension-context-type#element|CodeableConcept.text</b><br>
3739   * Type: <b>token</b><br>
3740   * Path: <b>StructureDefinition.context</b><br>
3741   * </p>
3742   */
3743  @SearchParamDefinition(name="ext-context", path="StructureDefinition.context", description="The system is the URL for the context-type: e.g. http://hl7.org/fhir/extension-context-type#element|CodeableConcept.text", type="token" )
3744  public static final String SP_EXT_CONTEXT = "ext-context";
3745 /**
3746   * <b>Fluent Client</b> search parameter constant for <b>ext-context</b>
3747   * <p>
3748   * Description: <b>The system is the URL for the context-type: e.g. http://hl7.org/fhir/extension-context-type#element|CodeableConcept.text</b><br>
3749   * Type: <b>token</b><br>
3750   * Path: <b>StructureDefinition.context</b><br>
3751   * </p>
3752   */
3753  public static final ca.uhn.fhir.rest.gclient.TokenClientParam EXT_CONTEXT = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_EXT_CONTEXT);
3754
3755 /**
3756   * Search parameter: <b>name</b>
3757   * <p>
3758   * Description: <b>Computationally friendly name of the structure definition</b><br>
3759   * Type: <b>string</b><br>
3760   * Path: <b>StructureDefinition.name</b><br>
3761   * </p>
3762   */
3763  @SearchParamDefinition(name="name", path="StructureDefinition.name", description="Computationally friendly name of the structure definition", type="string" )
3764  public static final String SP_NAME = "name";
3765 /**
3766   * <b>Fluent Client</b> search parameter constant for <b>name</b>
3767   * <p>
3768   * Description: <b>Computationally friendly name of the structure definition</b><br>
3769   * Type: <b>string</b><br>
3770   * Path: <b>StructureDefinition.name</b><br>
3771   * </p>
3772   */
3773  public static final ca.uhn.fhir.rest.gclient.StringClientParam NAME = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_NAME);
3774
3775 /**
3776   * Search parameter: <b>publisher</b>
3777   * <p>
3778   * Description: <b>Name of the publisher of the structure definition</b><br>
3779   * Type: <b>string</b><br>
3780   * Path: <b>StructureDefinition.publisher</b><br>
3781   * </p>
3782   */
3783  @SearchParamDefinition(name="publisher", path="StructureDefinition.publisher", description="Name of the publisher of the structure definition", type="string" )
3784  public static final String SP_PUBLISHER = "publisher";
3785 /**
3786   * <b>Fluent Client</b> search parameter constant for <b>publisher</b>
3787   * <p>
3788   * Description: <b>Name of the publisher of the structure definition</b><br>
3789   * Type: <b>string</b><br>
3790   * Path: <b>StructureDefinition.publisher</b><br>
3791   * </p>
3792   */
3793  public static final ca.uhn.fhir.rest.gclient.StringClientParam PUBLISHER = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_PUBLISHER);
3794
3795 /**
3796   * Search parameter: <b>derivation</b>
3797   * <p>
3798   * Description: <b>specialization | constraint - How relates to base definition</b><br>
3799   * Type: <b>token</b><br>
3800   * Path: <b>StructureDefinition.derivation</b><br>
3801   * </p>
3802   */
3803  @SearchParamDefinition(name="derivation", path="StructureDefinition.derivation", description="specialization | constraint - How relates to base definition", type="token" )
3804  public static final String SP_DERIVATION = "derivation";
3805 /**
3806   * <b>Fluent Client</b> search parameter constant for <b>derivation</b>
3807   * <p>
3808   * Description: <b>specialization | constraint - How relates to base definition</b><br>
3809   * Type: <b>token</b><br>
3810   * Path: <b>StructureDefinition.derivation</b><br>
3811   * </p>
3812   */
3813  public static final ca.uhn.fhir.rest.gclient.TokenClientParam DERIVATION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_DERIVATION);
3814
3815 /**
3816   * Search parameter: <b>status</b>
3817   * <p>
3818   * Description: <b>The current status of the structure definition</b><br>
3819   * Type: <b>token</b><br>
3820   * Path: <b>StructureDefinition.status</b><br>
3821   * </p>
3822   */
3823  @SearchParamDefinition(name="status", path="StructureDefinition.status", description="The current status of the structure definition", type="token" )
3824  public static final String SP_STATUS = "status";
3825 /**
3826   * <b>Fluent Client</b> search parameter constant for <b>status</b>
3827   * <p>
3828   * Description: <b>The current status of the structure definition</b><br>
3829   * Type: <b>token</b><br>
3830   * Path: <b>StructureDefinition.status</b><br>
3831   * </p>
3832   */
3833  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
3834
3835 /**
3836   * Search parameter: <b>base</b>
3837   * <p>
3838   * Description: <b>Definition that this type is constrained/specialized from</b><br>
3839   * Type: <b>reference</b><br>
3840   * Path: <b>StructureDefinition.baseDefinition</b><br>
3841   * </p>
3842   */
3843  @SearchParamDefinition(name="base", path="StructureDefinition.baseDefinition", description="Definition that this type is constrained/specialized from", type="reference", target={StructureDefinition.class } )
3844  public static final String SP_BASE = "base";
3845 /**
3846   * <b>Fluent Client</b> search parameter constant for <b>base</b>
3847   * <p>
3848   * Description: <b>Definition that this type is constrained/specialized from</b><br>
3849   * Type: <b>reference</b><br>
3850   * Path: <b>StructureDefinition.baseDefinition</b><br>
3851   * </p>
3852   */
3853  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam BASE = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_BASE);
3854
3855/**
3856   * Constant for fluent queries to be used to add include statements. Specifies
3857   * the path value of "<b>StructureDefinition:base</b>".
3858   */
3859  public static final ca.uhn.fhir.model.api.Include INCLUDE_BASE = new ca.uhn.fhir.model.api.Include("StructureDefinition:base").toLocked();
3860
3861
3862}
3863