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