001package org.hl7.fhir.dstu3.model;
002
003/*
004  Copyright (c) 2011+, HL7, Inc.
005  All rights reserved.
006  
007  Redistribution and use in source and binary forms, with or without modification, 
008  are permitted provided that the following conditions are met:
009  
010   * Redistributions of source code must retain the above copyright notice, this 
011     list of conditions and the following disclaimer.
012   * Redistributions in binary form must reproduce the above copyright notice, 
013     this list of conditions and the following disclaimer in the documentation 
014     and/or other materials provided with the distribution.
015   * Neither the name of HL7 nor the names of its contributors may be used to 
016     endorse or promote products derived from this software without specific 
017     prior written permission.
018  
019  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
020  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
021  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
022  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
023  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
024  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
025  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
026  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
027  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
028  POSSIBILITY OF SUCH DAMAGE.
029  
030*/
031
032// Generated on Mon, Apr 17, 2017 17:38-0400 for FHIR v3.0.1
033
034import java.util.*;
035
036import org.hl7.fhir.utilities.Utilities;
037import org.hl7.fhir.dstu3.model.Enumerations.*;
038import ca.uhn.fhir.model.api.annotation.ResourceDef;
039import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
040import ca.uhn.fhir.model.api.annotation.Child;
041import ca.uhn.fhir.model.api.annotation.ChildOrder;
042import ca.uhn.fhir.model.api.annotation.Description;
043import ca.uhn.fhir.model.api.annotation.Block;
044import org.hl7.fhir.instance.model.api.*;
045import org.hl7.fhir.exceptions.FHIRException;
046/**
047 * The formal description of a single piece of information that can be gathered and reported.
048 */
049@ResourceDef(name="DataElement", profile="http://hl7.org/fhir/Profile/DataElement")
050@ChildOrder(names={"url", "identifier", "version", "status", "experimental", "date", "publisher", "name", "title", "contact", "useContext", "jurisdiction", "copyright", "stringency", "mapping", "element"})
051public class DataElement extends MetadataResource {
052
053    public enum DataElementStringency {
054        /**
055         * The data element is sufficiently well-constrained that multiple pieces of data captured according to the constraints of the data element will be comparable (though in some cases, a degree of automated conversion/normalization may be required).
056         */
057        COMPARABLE, 
058        /**
059         * The data element is fully specified down to a single value set, single unit of measure, single data type, etc.  Multiple pieces of data associated with this data element are fully comparable.
060         */
061        FULLYSPECIFIED, 
062        /**
063         * The data element allows multiple units of measure having equivalent meaning; e.g. "cc" (cubic centimeter) and "mL" (milliliter).
064         */
065        EQUIVALENT, 
066        /**
067         * The data element allows multiple units of measure that are convertable between each other (e.g. inches and centimeters) and/or allows data to be captured in multiple value sets for which a known mapping exists allowing conversion of meaning.
068         */
069        CONVERTABLE, 
070        /**
071         * A convertable data element where unit conversions are different only by a power of 10; e.g. g, mg, kg.
072         */
073        SCALEABLE, 
074        /**
075         * The data element is unconstrained in units, choice of data types and/or choice of vocabulary such that automated comparison of data captured using the data element is not possible.
076         */
077        FLEXIBLE, 
078        /**
079         * added to help the parsers with the generic types
080         */
081        NULL;
082        public static DataElementStringency fromCode(String codeString) throws FHIRException {
083            if (codeString == null || "".equals(codeString))
084                return null;
085        if ("comparable".equals(codeString))
086          return COMPARABLE;
087        if ("fully-specified".equals(codeString))
088          return FULLYSPECIFIED;
089        if ("equivalent".equals(codeString))
090          return EQUIVALENT;
091        if ("convertable".equals(codeString))
092          return CONVERTABLE;
093        if ("scaleable".equals(codeString))
094          return SCALEABLE;
095        if ("flexible".equals(codeString))
096          return FLEXIBLE;
097        if (Configuration.isAcceptInvalidEnums())
098          return null;
099        else
100          throw new FHIRException("Unknown DataElementStringency code '"+codeString+"'");
101        }
102        public String toCode() {
103          switch (this) {
104            case COMPARABLE: return "comparable";
105            case FULLYSPECIFIED: return "fully-specified";
106            case EQUIVALENT: return "equivalent";
107            case CONVERTABLE: return "convertable";
108            case SCALEABLE: return "scaleable";
109            case FLEXIBLE: return "flexible";
110            default: return "?";
111          }
112        }
113        public String getSystem() {
114          switch (this) {
115            case COMPARABLE: return "http://hl7.org/fhir/dataelement-stringency";
116            case FULLYSPECIFIED: return "http://hl7.org/fhir/dataelement-stringency";
117            case EQUIVALENT: return "http://hl7.org/fhir/dataelement-stringency";
118            case CONVERTABLE: return "http://hl7.org/fhir/dataelement-stringency";
119            case SCALEABLE: return "http://hl7.org/fhir/dataelement-stringency";
120            case FLEXIBLE: return "http://hl7.org/fhir/dataelement-stringency";
121            default: return "?";
122          }
123        }
124        public String getDefinition() {
125          switch (this) {
126            case COMPARABLE: return "The data element is sufficiently well-constrained that multiple pieces of data captured according to the constraints of the data element will be comparable (though in some cases, a degree of automated conversion/normalization may be required).";
127            case FULLYSPECIFIED: return "The data element is fully specified down to a single value set, single unit of measure, single data type, etc.  Multiple pieces of data associated with this data element are fully comparable.";
128            case EQUIVALENT: return "The data element allows multiple units of measure having equivalent meaning; e.g. \"cc\" (cubic centimeter) and \"mL\" (milliliter).";
129            case CONVERTABLE: return "The data element allows multiple units of measure that are convertable between each other (e.g. inches and centimeters) and/or allows data to be captured in multiple value sets for which a known mapping exists allowing conversion of meaning.";
130            case SCALEABLE: return "A convertable data element where unit conversions are different only by a power of 10; e.g. g, mg, kg.";
131            case FLEXIBLE: return "The data element is unconstrained in units, choice of data types and/or choice of vocabulary such that automated comparison of data captured using the data element is not possible.";
132            default: return "?";
133          }
134        }
135        public String getDisplay() {
136          switch (this) {
137            case COMPARABLE: return "Comparable";
138            case FULLYSPECIFIED: return "Fully Specified";
139            case EQUIVALENT: return "Equivalent";
140            case CONVERTABLE: return "Convertable";
141            case SCALEABLE: return "Scaleable";
142            case FLEXIBLE: return "Flexible";
143            default: return "?";
144          }
145        }
146    }
147
148  public static class DataElementStringencyEnumFactory implements EnumFactory<DataElementStringency> {
149    public DataElementStringency fromCode(String codeString) throws IllegalArgumentException {
150      if (codeString == null || "".equals(codeString))
151            if (codeString == null || "".equals(codeString))
152                return null;
153        if ("comparable".equals(codeString))
154          return DataElementStringency.COMPARABLE;
155        if ("fully-specified".equals(codeString))
156          return DataElementStringency.FULLYSPECIFIED;
157        if ("equivalent".equals(codeString))
158          return DataElementStringency.EQUIVALENT;
159        if ("convertable".equals(codeString))
160          return DataElementStringency.CONVERTABLE;
161        if ("scaleable".equals(codeString))
162          return DataElementStringency.SCALEABLE;
163        if ("flexible".equals(codeString))
164          return DataElementStringency.FLEXIBLE;
165        throw new IllegalArgumentException("Unknown DataElementStringency code '"+codeString+"'");
166        }
167        public Enumeration<DataElementStringency> fromType(Base code) throws FHIRException {
168          if (code == null)
169            return null;
170          if (code.isEmpty())
171            return new Enumeration<DataElementStringency>(this);
172          String codeString = ((PrimitiveType) code).asStringValue();
173          if (codeString == null || "".equals(codeString))
174            return null;
175        if ("comparable".equals(codeString))
176          return new Enumeration<DataElementStringency>(this, DataElementStringency.COMPARABLE);
177        if ("fully-specified".equals(codeString))
178          return new Enumeration<DataElementStringency>(this, DataElementStringency.FULLYSPECIFIED);
179        if ("equivalent".equals(codeString))
180          return new Enumeration<DataElementStringency>(this, DataElementStringency.EQUIVALENT);
181        if ("convertable".equals(codeString))
182          return new Enumeration<DataElementStringency>(this, DataElementStringency.CONVERTABLE);
183        if ("scaleable".equals(codeString))
184          return new Enumeration<DataElementStringency>(this, DataElementStringency.SCALEABLE);
185        if ("flexible".equals(codeString))
186          return new Enumeration<DataElementStringency>(this, DataElementStringency.FLEXIBLE);
187        throw new FHIRException("Unknown DataElementStringency code '"+codeString+"'");
188        }
189    public String toCode(DataElementStringency code) {
190      if (code == DataElementStringency.COMPARABLE)
191        return "comparable";
192      if (code == DataElementStringency.FULLYSPECIFIED)
193        return "fully-specified";
194      if (code == DataElementStringency.EQUIVALENT)
195        return "equivalent";
196      if (code == DataElementStringency.CONVERTABLE)
197        return "convertable";
198      if (code == DataElementStringency.SCALEABLE)
199        return "scaleable";
200      if (code == DataElementStringency.FLEXIBLE)
201        return "flexible";
202      return "?";
203      }
204    public String toSystem(DataElementStringency code) {
205      return code.getSystem();
206      }
207    }
208
209    @Block()
210    public static class DataElementMappingComponent extends BackboneElement implements IBaseBackboneElement {
211        /**
212         * An internal id that is used to identify this mapping set when specific mappings are made on a per-element basis.
213         */
214        @Child(name = "identity", type = {IdType.class}, order=1, min=1, max=1, modifier=false, summary=false)
215        @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 on a per-element basis." )
216        protected IdType identity;
217
218        /**
219         * An absolute URI that identifies the specification that this mapping is expressed to.
220         */
221        @Child(name = "uri", type = {UriType.class}, order=2, min=0, max=1, modifier=false, summary=false)
222        @Description(shortDefinition="Identifies what this mapping refers to", formalDefinition="An absolute URI that identifies the specification that this mapping is expressed to." )
223        protected UriType uri;
224
225        /**
226         * A name for the specification that is being mapped to.
227         */
228        @Child(name = "name", type = {StringType.class}, order=3, min=0, max=1, modifier=false, summary=false)
229        @Description(shortDefinition="Names what this mapping refers to", formalDefinition="A name for the specification that is being mapped to." )
230        protected StringType name;
231
232        /**
233         * Comments about this mapping, including version notes, issues, scope limitations, and other important notes for usage.
234         */
235        @Child(name = "comment", type = {StringType.class}, order=4, min=0, max=1, modifier=false, summary=false)
236        @Description(shortDefinition="Versions, issues, scope limitations, etc.", formalDefinition="Comments about this mapping, including version notes, issues, scope limitations, and other important notes for usage." )
237        protected StringType comment;
238
239        private static final long serialVersionUID = 9610265L;
240
241    /**
242     * Constructor
243     */
244      public DataElementMappingComponent() {
245        super();
246      }
247
248    /**
249     * Constructor
250     */
251      public DataElementMappingComponent(IdType identity) {
252        super();
253        this.identity = identity;
254      }
255
256        /**
257         * @return {@link #identity} (An internal id that is used to identify this mapping set when specific mappings are made on a per-element basis.). This is the underlying object with id, value and extensions. The accessor "getIdentity" gives direct access to the value
258         */
259        public IdType getIdentityElement() { 
260          if (this.identity == null)
261            if (Configuration.errorOnAutoCreate())
262              throw new Error("Attempt to auto-create DataElementMappingComponent.identity");
263            else if (Configuration.doAutoCreate())
264              this.identity = new IdType(); // bb
265          return this.identity;
266        }
267
268        public boolean hasIdentityElement() { 
269          return this.identity != null && !this.identity.isEmpty();
270        }
271
272        public boolean hasIdentity() { 
273          return this.identity != null && !this.identity.isEmpty();
274        }
275
276        /**
277         * @param value {@link #identity} (An internal id that is used to identify this mapping set when specific mappings are made on a per-element basis.). This is the underlying object with id, value and extensions. The accessor "getIdentity" gives direct access to the value
278         */
279        public DataElementMappingComponent setIdentityElement(IdType value) { 
280          this.identity = value;
281          return this;
282        }
283
284        /**
285         * @return An internal id that is used to identify this mapping set when specific mappings are made on a per-element basis.
286         */
287        public String getIdentity() { 
288          return this.identity == null ? null : this.identity.getValue();
289        }
290
291        /**
292         * @param value An internal id that is used to identify this mapping set when specific mappings are made on a per-element basis.
293         */
294        public DataElementMappingComponent setIdentity(String value) { 
295            if (this.identity == null)
296              this.identity = new IdType();
297            this.identity.setValue(value);
298          return this;
299        }
300
301        /**
302         * @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
303         */
304        public UriType getUriElement() { 
305          if (this.uri == null)
306            if (Configuration.errorOnAutoCreate())
307              throw new Error("Attempt to auto-create DataElementMappingComponent.uri");
308            else if (Configuration.doAutoCreate())
309              this.uri = new UriType(); // bb
310          return this.uri;
311        }
312
313        public boolean hasUriElement() { 
314          return this.uri != null && !this.uri.isEmpty();
315        }
316
317        public boolean hasUri() { 
318          return this.uri != null && !this.uri.isEmpty();
319        }
320
321        /**
322         * @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
323         */
324        public DataElementMappingComponent setUriElement(UriType value) { 
325          this.uri = value;
326          return this;
327        }
328
329        /**
330         * @return An absolute URI that identifies the specification that this mapping is expressed to.
331         */
332        public String getUri() { 
333          return this.uri == null ? null : this.uri.getValue();
334        }
335
336        /**
337         * @param value An absolute URI that identifies the specification that this mapping is expressed to.
338         */
339        public DataElementMappingComponent setUri(String value) { 
340          if (Utilities.noString(value))
341            this.uri = null;
342          else {
343            if (this.uri == null)
344              this.uri = new UriType();
345            this.uri.setValue(value);
346          }
347          return this;
348        }
349
350        /**
351         * @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
352         */
353        public StringType getNameElement() { 
354          if (this.name == null)
355            if (Configuration.errorOnAutoCreate())
356              throw new Error("Attempt to auto-create DataElementMappingComponent.name");
357            else if (Configuration.doAutoCreate())
358              this.name = new StringType(); // bb
359          return this.name;
360        }
361
362        public boolean hasNameElement() { 
363          return this.name != null && !this.name.isEmpty();
364        }
365
366        public boolean hasName() { 
367          return this.name != null && !this.name.isEmpty();
368        }
369
370        /**
371         * @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
372         */
373        public DataElementMappingComponent setNameElement(StringType value) { 
374          this.name = value;
375          return this;
376        }
377
378        /**
379         * @return A name for the specification that is being mapped to.
380         */
381        public String getName() { 
382          return this.name == null ? null : this.name.getValue();
383        }
384
385        /**
386         * @param value A name for the specification that is being mapped to.
387         */
388        public DataElementMappingComponent setName(String value) { 
389          if (Utilities.noString(value))
390            this.name = null;
391          else {
392            if (this.name == null)
393              this.name = new StringType();
394            this.name.setValue(value);
395          }
396          return this;
397        }
398
399        /**
400         * @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
401         */
402        public StringType getCommentElement() { 
403          if (this.comment == null)
404            if (Configuration.errorOnAutoCreate())
405              throw new Error("Attempt to auto-create DataElementMappingComponent.comment");
406            else if (Configuration.doAutoCreate())
407              this.comment = new StringType(); // bb
408          return this.comment;
409        }
410
411        public boolean hasCommentElement() { 
412          return this.comment != null && !this.comment.isEmpty();
413        }
414
415        public boolean hasComment() { 
416          return this.comment != null && !this.comment.isEmpty();
417        }
418
419        /**
420         * @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
421         */
422        public DataElementMappingComponent setCommentElement(StringType value) { 
423          this.comment = value;
424          return this;
425        }
426
427        /**
428         * @return Comments about this mapping, including version notes, issues, scope limitations, and other important notes for usage.
429         */
430        public String getComment() { 
431          return this.comment == null ? null : this.comment.getValue();
432        }
433
434        /**
435         * @param value Comments about this mapping, including version notes, issues, scope limitations, and other important notes for usage.
436         */
437        public DataElementMappingComponent setComment(String value) { 
438          if (Utilities.noString(value))
439            this.comment = null;
440          else {
441            if (this.comment == null)
442              this.comment = new StringType();
443            this.comment.setValue(value);
444          }
445          return this;
446        }
447
448        protected void listChildren(List<Property> childrenList) {
449          super.listChildren(childrenList);
450          childrenList.add(new Property("identity", "id", "An internal id that is used to identify this mapping set when specific mappings are made on a per-element basis.", 0, java.lang.Integer.MAX_VALUE, identity));
451          childrenList.add(new Property("uri", "uri", "An absolute URI that identifies the specification that this mapping is expressed to.", 0, java.lang.Integer.MAX_VALUE, uri));
452          childrenList.add(new Property("name", "string", "A name for the specification that is being mapped to.", 0, java.lang.Integer.MAX_VALUE, name));
453          childrenList.add(new Property("comment", "string", "Comments about this mapping, including version notes, issues, scope limitations, and other important notes for usage.", 0, java.lang.Integer.MAX_VALUE, comment));
454        }
455
456      @Override
457      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
458        switch (hash) {
459        case -135761730: /*identity*/ return this.identity == null ? new Base[0] : new Base[] {this.identity}; // IdType
460        case 116076: /*uri*/ return this.uri == null ? new Base[0] : new Base[] {this.uri}; // UriType
461        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // StringType
462        case 950398559: /*comment*/ return this.comment == null ? new Base[0] : new Base[] {this.comment}; // StringType
463        default: return super.getProperty(hash, name, checkValid);
464        }
465
466      }
467
468      @Override
469      public Base setProperty(int hash, String name, Base value) throws FHIRException {
470        switch (hash) {
471        case -135761730: // identity
472          this.identity = castToId(value); // IdType
473          return value;
474        case 116076: // uri
475          this.uri = castToUri(value); // UriType
476          return value;
477        case 3373707: // name
478          this.name = castToString(value); // StringType
479          return value;
480        case 950398559: // comment
481          this.comment = castToString(value); // StringType
482          return value;
483        default: return super.setProperty(hash, name, value);
484        }
485
486      }
487
488      @Override
489      public Base setProperty(String name, Base value) throws FHIRException {
490        if (name.equals("identity")) {
491          this.identity = castToId(value); // IdType
492        } else if (name.equals("uri")) {
493          this.uri = castToUri(value); // UriType
494        } else if (name.equals("name")) {
495          this.name = castToString(value); // StringType
496        } else if (name.equals("comment")) {
497          this.comment = castToString(value); // StringType
498        } else
499          return super.setProperty(name, value);
500        return value;
501      }
502
503      @Override
504      public Base makeProperty(int hash, String name) throws FHIRException {
505        switch (hash) {
506        case -135761730:  return getIdentityElement();
507        case 116076:  return getUriElement();
508        case 3373707:  return getNameElement();
509        case 950398559:  return getCommentElement();
510        default: return super.makeProperty(hash, name);
511        }
512
513      }
514
515      @Override
516      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
517        switch (hash) {
518        case -135761730: /*identity*/ return new String[] {"id"};
519        case 116076: /*uri*/ return new String[] {"uri"};
520        case 3373707: /*name*/ return new String[] {"string"};
521        case 950398559: /*comment*/ return new String[] {"string"};
522        default: return super.getTypesForProperty(hash, name);
523        }
524
525      }
526
527      @Override
528      public Base addChild(String name) throws FHIRException {
529        if (name.equals("identity")) {
530          throw new FHIRException("Cannot call addChild on a primitive type DataElement.identity");
531        }
532        else if (name.equals("uri")) {
533          throw new FHIRException("Cannot call addChild on a primitive type DataElement.uri");
534        }
535        else if (name.equals("name")) {
536          throw new FHIRException("Cannot call addChild on a primitive type DataElement.name");
537        }
538        else if (name.equals("comment")) {
539          throw new FHIRException("Cannot call addChild on a primitive type DataElement.comment");
540        }
541        else
542          return super.addChild(name);
543      }
544
545      public DataElementMappingComponent copy() {
546        DataElementMappingComponent dst = new DataElementMappingComponent();
547        copyValues(dst);
548        dst.identity = identity == null ? null : identity.copy();
549        dst.uri = uri == null ? null : uri.copy();
550        dst.name = name == null ? null : name.copy();
551        dst.comment = comment == null ? null : comment.copy();
552        return dst;
553      }
554
555      @Override
556      public boolean equalsDeep(Base other) {
557        if (!super.equalsDeep(other))
558          return false;
559        if (!(other instanceof DataElementMappingComponent))
560          return false;
561        DataElementMappingComponent o = (DataElementMappingComponent) other;
562        return compareDeep(identity, o.identity, true) && compareDeep(uri, o.uri, true) && compareDeep(name, o.name, true)
563           && compareDeep(comment, o.comment, true);
564      }
565
566      @Override
567      public boolean equalsShallow(Base other) {
568        if (!super.equalsShallow(other))
569          return false;
570        if (!(other instanceof DataElementMappingComponent))
571          return false;
572        DataElementMappingComponent o = (DataElementMappingComponent) other;
573        return compareValues(identity, o.identity, true) && compareValues(uri, o.uri, true) && compareValues(name, o.name, true)
574           && compareValues(comment, o.comment, true);
575      }
576
577      public boolean isEmpty() {
578        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identity, uri, name, comment
579          );
580      }
581
582  public String fhirType() {
583    return "DataElement.mapping";
584
585  }
586
587  }
588
589    /**
590     * A formal identifier that is used to identify this data element when it is represented in other formats, or referenced in a specification, model, design or an instance.
591     */
592    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
593    @Description(shortDefinition="Additional identifier for the data element", formalDefinition="A formal identifier that is used to identify this data element when it is represented in other formats, or referenced in a specification, model, design or an instance." )
594    protected List<Identifier> identifier;
595
596    /**
597     * A copyright statement relating to the data element and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the data element.
598     */
599    @Child(name = "copyright", type = {MarkdownType.class}, order=1, min=0, max=1, modifier=false, summary=false)
600    @Description(shortDefinition="Use and/or publishing restrictions", formalDefinition="A copyright statement relating to the data element and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the data element." )
601    protected MarkdownType copyright;
602
603    /**
604     * Identifies how precise the data element is in its definition.
605     */
606    @Child(name = "stringency", type = {CodeType.class}, order=2, min=0, max=1, modifier=false, summary=true)
607    @Description(shortDefinition="comparable | fully-specified | equivalent | convertable | scaleable | flexible", formalDefinition="Identifies how precise the data element is in its definition." )
608    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/dataelement-stringency")
609    protected Enumeration<DataElementStringency> stringency;
610
611    /**
612     * Identifies a specification (other than a terminology) that the elements which make up the DataElement have some correspondence with.
613     */
614    @Child(name = "mapping", type = {}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
615    @Description(shortDefinition="External specification mapped to", formalDefinition="Identifies a specification (other than a terminology) that the elements which make up the DataElement have some correspondence with." )
616    protected List<DataElementMappingComponent> mapping;
617
618    /**
619     * Defines the structure, type, allowed values and other constraining characteristics of the data element.
620     */
621    @Child(name = "element", type = {ElementDefinition.class}, order=4, min=1, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
622    @Description(shortDefinition="Definition of element", formalDefinition="Defines the structure, type, allowed values and other constraining characteristics of the data element." )
623    protected List<ElementDefinition> element;
624
625    private static final long serialVersionUID = 634422795L;
626
627  /**
628   * Constructor
629   */
630    public DataElement() {
631      super();
632    }
633
634  /**
635   * Constructor
636   */
637    public DataElement(Enumeration<PublicationStatus> status) {
638      super();
639      this.status = status;
640    }
641
642    /**
643     * @return {@link #url} (An absolute URI that is used to identify this data element when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this data element is (or will be) published. The URL SHOULD include the major version of the data element. For more information see [Technical and Business Versions](resource.html#versions).). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
644     */
645    public UriType getUrlElement() { 
646      if (this.url == null)
647        if (Configuration.errorOnAutoCreate())
648          throw new Error("Attempt to auto-create DataElement.url");
649        else if (Configuration.doAutoCreate())
650          this.url = new UriType(); // bb
651      return this.url;
652    }
653
654    public boolean hasUrlElement() { 
655      return this.url != null && !this.url.isEmpty();
656    }
657
658    public boolean hasUrl() { 
659      return this.url != null && !this.url.isEmpty();
660    }
661
662    /**
663     * @param value {@link #url} (An absolute URI that is used to identify this data element when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this data element is (or will be) published. The URL SHOULD include the major version of the data element. For more information see [Technical and Business Versions](resource.html#versions).). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
664     */
665    public DataElement setUrlElement(UriType value) { 
666      this.url = value;
667      return this;
668    }
669
670    /**
671     * @return An absolute URI that is used to identify this data element when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this data element is (or will be) published. The URL SHOULD include the major version of the data element. For more information see [Technical and Business Versions](resource.html#versions).
672     */
673    public String getUrl() { 
674      return this.url == null ? null : this.url.getValue();
675    }
676
677    /**
678     * @param value An absolute URI that is used to identify this data element when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this data element is (or will be) published. The URL SHOULD include the major version of the data element. For more information see [Technical and Business Versions](resource.html#versions).
679     */
680    public DataElement setUrl(String value) { 
681      if (Utilities.noString(value))
682        this.url = null;
683      else {
684        if (this.url == null)
685          this.url = new UriType();
686        this.url.setValue(value);
687      }
688      return this;
689    }
690
691    /**
692     * @return {@link #identifier} (A formal identifier that is used to identify this data element when it is represented in other formats, or referenced in a specification, model, design or an instance.)
693     */
694    public List<Identifier> getIdentifier() { 
695      if (this.identifier == null)
696        this.identifier = new ArrayList<Identifier>();
697      return this.identifier;
698    }
699
700    /**
701     * @return Returns a reference to <code>this</code> for easy method chaining
702     */
703    public DataElement setIdentifier(List<Identifier> theIdentifier) { 
704      this.identifier = theIdentifier;
705      return this;
706    }
707
708    public boolean hasIdentifier() { 
709      if (this.identifier == null)
710        return false;
711      for (Identifier item : this.identifier)
712        if (!item.isEmpty())
713          return true;
714      return false;
715    }
716
717    public Identifier addIdentifier() { //3
718      Identifier t = new Identifier();
719      if (this.identifier == null)
720        this.identifier = new ArrayList<Identifier>();
721      this.identifier.add(t);
722      return t;
723    }
724
725    public DataElement addIdentifier(Identifier t) { //3
726      if (t == null)
727        return this;
728      if (this.identifier == null)
729        this.identifier = new ArrayList<Identifier>();
730      this.identifier.add(t);
731      return this;
732    }
733
734    /**
735     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist
736     */
737    public Identifier getIdentifierFirstRep() { 
738      if (getIdentifier().isEmpty()) {
739        addIdentifier();
740      }
741      return getIdentifier().get(0);
742    }
743
744    /**
745     * @return {@link #version} (The identifier that is used to identify this version of the data element when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the data element 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
746     */
747    public StringType getVersionElement() { 
748      if (this.version == null)
749        if (Configuration.errorOnAutoCreate())
750          throw new Error("Attempt to auto-create DataElement.version");
751        else if (Configuration.doAutoCreate())
752          this.version = new StringType(); // bb
753      return this.version;
754    }
755
756    public boolean hasVersionElement() { 
757      return this.version != null && !this.version.isEmpty();
758    }
759
760    public boolean hasVersion() { 
761      return this.version != null && !this.version.isEmpty();
762    }
763
764    /**
765     * @param value {@link #version} (The identifier that is used to identify this version of the data element when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the data element 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
766     */
767    public DataElement setVersionElement(StringType value) { 
768      this.version = value;
769      return this;
770    }
771
772    /**
773     * @return The identifier that is used to identify this version of the data element when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the data element 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.
774     */
775    public String getVersion() { 
776      return this.version == null ? null : this.version.getValue();
777    }
778
779    /**
780     * @param value The identifier that is used to identify this version of the data element when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the data element 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.
781     */
782    public DataElement setVersion(String value) { 
783      if (Utilities.noString(value))
784        this.version = null;
785      else {
786        if (this.version == null)
787          this.version = new StringType();
788        this.version.setValue(value);
789      }
790      return this;
791    }
792
793    /**
794     * @return {@link #status} (The status of this data element. 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
795     */
796    public Enumeration<PublicationStatus> getStatusElement() { 
797      if (this.status == null)
798        if (Configuration.errorOnAutoCreate())
799          throw new Error("Attempt to auto-create DataElement.status");
800        else if (Configuration.doAutoCreate())
801          this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory()); // bb
802      return this.status;
803    }
804
805    public boolean hasStatusElement() { 
806      return this.status != null && !this.status.isEmpty();
807    }
808
809    public boolean hasStatus() { 
810      return this.status != null && !this.status.isEmpty();
811    }
812
813    /**
814     * @param value {@link #status} (The status of this data element. 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
815     */
816    public DataElement setStatusElement(Enumeration<PublicationStatus> value) { 
817      this.status = value;
818      return this;
819    }
820
821    /**
822     * @return The status of this data element. Enables tracking the life-cycle of the content.
823     */
824    public PublicationStatus getStatus() { 
825      return this.status == null ? null : this.status.getValue();
826    }
827
828    /**
829     * @param value The status of this data element. Enables tracking the life-cycle of the content.
830     */
831    public DataElement setStatus(PublicationStatus value) { 
832        if (this.status == null)
833          this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory());
834        this.status.setValue(value);
835      return this;
836    }
837
838    /**
839     * @return {@link #experimental} (A boolean value to indicate that this data element 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
840     */
841    public BooleanType getExperimentalElement() { 
842      if (this.experimental == null)
843        if (Configuration.errorOnAutoCreate())
844          throw new Error("Attempt to auto-create DataElement.experimental");
845        else if (Configuration.doAutoCreate())
846          this.experimental = new BooleanType(); // bb
847      return this.experimental;
848    }
849
850    public boolean hasExperimentalElement() { 
851      return this.experimental != null && !this.experimental.isEmpty();
852    }
853
854    public boolean hasExperimental() { 
855      return this.experimental != null && !this.experimental.isEmpty();
856    }
857
858    /**
859     * @param value {@link #experimental} (A boolean value to indicate that this data element 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
860     */
861    public DataElement setExperimentalElement(BooleanType value) { 
862      this.experimental = value;
863      return this;
864    }
865
866    /**
867     * @return A boolean value to indicate that this data element is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.
868     */
869    public boolean getExperimental() { 
870      return this.experimental == null || this.experimental.isEmpty() ? false : this.experimental.getValue();
871    }
872
873    /**
874     * @param value A boolean value to indicate that this data element is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.
875     */
876    public DataElement setExperimental(boolean value) { 
877        if (this.experimental == null)
878          this.experimental = new BooleanType();
879        this.experimental.setValue(value);
880      return this;
881    }
882
883    /**
884     * @return {@link #date} (The date  (and optionally time) when the data element was published. The date must change if and when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the data element changes.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
885     */
886    public DateTimeType getDateElement() { 
887      if (this.date == null)
888        if (Configuration.errorOnAutoCreate())
889          throw new Error("Attempt to auto-create DataElement.date");
890        else if (Configuration.doAutoCreate())
891          this.date = new DateTimeType(); // bb
892      return this.date;
893    }
894
895    public boolean hasDateElement() { 
896      return this.date != null && !this.date.isEmpty();
897    }
898
899    public boolean hasDate() { 
900      return this.date != null && !this.date.isEmpty();
901    }
902
903    /**
904     * @param value {@link #date} (The date  (and optionally time) when the data element was published. The date must change if and when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the data element changes.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
905     */
906    public DataElement setDateElement(DateTimeType value) { 
907      this.date = value;
908      return this;
909    }
910
911    /**
912     * @return The date  (and optionally time) when the data element was published. The date must change if and when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the data element changes.
913     */
914    public Date getDate() { 
915      return this.date == null ? null : this.date.getValue();
916    }
917
918    /**
919     * @param value The date  (and optionally time) when the data element was published. The date must change if and when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the data element changes.
920     */
921    public DataElement setDate(Date value) { 
922      if (value == null)
923        this.date = null;
924      else {
925        if (this.date == null)
926          this.date = new DateTimeType();
927        this.date.setValue(value);
928      }
929      return this;
930    }
931
932    /**
933     * @return {@link #publisher} (The name of the individual or organization that published the data element.). This is the underlying object with id, value and extensions. The accessor "getPublisher" gives direct access to the value
934     */
935    public StringType getPublisherElement() { 
936      if (this.publisher == null)
937        if (Configuration.errorOnAutoCreate())
938          throw new Error("Attempt to auto-create DataElement.publisher");
939        else if (Configuration.doAutoCreate())
940          this.publisher = new StringType(); // bb
941      return this.publisher;
942    }
943
944    public boolean hasPublisherElement() { 
945      return this.publisher != null && !this.publisher.isEmpty();
946    }
947
948    public boolean hasPublisher() { 
949      return this.publisher != null && !this.publisher.isEmpty();
950    }
951
952    /**
953     * @param value {@link #publisher} (The name of the individual or organization that published the data element.). This is the underlying object with id, value and extensions. The accessor "getPublisher" gives direct access to the value
954     */
955    public DataElement setPublisherElement(StringType value) { 
956      this.publisher = value;
957      return this;
958    }
959
960    /**
961     * @return The name of the individual or organization that published the data element.
962     */
963    public String getPublisher() { 
964      return this.publisher == null ? null : this.publisher.getValue();
965    }
966
967    /**
968     * @param value The name of the individual or organization that published the data element.
969     */
970    public DataElement setPublisher(String value) { 
971      if (Utilities.noString(value))
972        this.publisher = null;
973      else {
974        if (this.publisher == null)
975          this.publisher = new StringType();
976        this.publisher.setValue(value);
977      }
978      return this;
979    }
980
981    /**
982     * @return {@link #name} (A natural language name identifying the data element. 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
983     */
984    public StringType getNameElement() { 
985      if (this.name == null)
986        if (Configuration.errorOnAutoCreate())
987          throw new Error("Attempt to auto-create DataElement.name");
988        else if (Configuration.doAutoCreate())
989          this.name = new StringType(); // bb
990      return this.name;
991    }
992
993    public boolean hasNameElement() { 
994      return this.name != null && !this.name.isEmpty();
995    }
996
997    public boolean hasName() { 
998      return this.name != null && !this.name.isEmpty();
999    }
1000
1001    /**
1002     * @param value {@link #name} (A natural language name identifying the data element. 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
1003     */
1004    public DataElement setNameElement(StringType value) { 
1005      this.name = value;
1006      return this;
1007    }
1008
1009    /**
1010     * @return A natural language name identifying the data element. This name should be usable as an identifier for the module by machine processing applications such as code generation.
1011     */
1012    public String getName() { 
1013      return this.name == null ? null : this.name.getValue();
1014    }
1015
1016    /**
1017     * @param value A natural language name identifying the data element. This name should be usable as an identifier for the module by machine processing applications such as code generation.
1018     */
1019    public DataElement setName(String value) { 
1020      if (Utilities.noString(value))
1021        this.name = null;
1022      else {
1023        if (this.name == null)
1024          this.name = new StringType();
1025        this.name.setValue(value);
1026      }
1027      return this;
1028    }
1029
1030    /**
1031     * @return {@link #title} (A short, descriptive, user-friendly title for the data element.). This is the underlying object with id, value and extensions. The accessor "getTitle" gives direct access to the value
1032     */
1033    public StringType getTitleElement() { 
1034      if (this.title == null)
1035        if (Configuration.errorOnAutoCreate())
1036          throw new Error("Attempt to auto-create DataElement.title");
1037        else if (Configuration.doAutoCreate())
1038          this.title = new StringType(); // bb
1039      return this.title;
1040    }
1041
1042    public boolean hasTitleElement() { 
1043      return this.title != null && !this.title.isEmpty();
1044    }
1045
1046    public boolean hasTitle() { 
1047      return this.title != null && !this.title.isEmpty();
1048    }
1049
1050    /**
1051     * @param value {@link #title} (A short, descriptive, user-friendly title for the data element.). This is the underlying object with id, value and extensions. The accessor "getTitle" gives direct access to the value
1052     */
1053    public DataElement setTitleElement(StringType value) { 
1054      this.title = value;
1055      return this;
1056    }
1057
1058    /**
1059     * @return A short, descriptive, user-friendly title for the data element.
1060     */
1061    public String getTitle() { 
1062      return this.title == null ? null : this.title.getValue();
1063    }
1064
1065    /**
1066     * @param value A short, descriptive, user-friendly title for the data element.
1067     */
1068    public DataElement setTitle(String value) { 
1069      if (Utilities.noString(value))
1070        this.title = null;
1071      else {
1072        if (this.title == null)
1073          this.title = new StringType();
1074        this.title.setValue(value);
1075      }
1076      return this;
1077    }
1078
1079    /**
1080     * @return {@link #contact} (Contact details to assist a user in finding and communicating with the publisher.)
1081     */
1082    public List<ContactDetail> getContact() { 
1083      if (this.contact == null)
1084        this.contact = new ArrayList<ContactDetail>();
1085      return this.contact;
1086    }
1087
1088    /**
1089     * @return Returns a reference to <code>this</code> for easy method chaining
1090     */
1091    public DataElement setContact(List<ContactDetail> theContact) { 
1092      this.contact = theContact;
1093      return this;
1094    }
1095
1096    public boolean hasContact() { 
1097      if (this.contact == null)
1098        return false;
1099      for (ContactDetail item : this.contact)
1100        if (!item.isEmpty())
1101          return true;
1102      return false;
1103    }
1104
1105    public ContactDetail addContact() { //3
1106      ContactDetail t = new ContactDetail();
1107      if (this.contact == null)
1108        this.contact = new ArrayList<ContactDetail>();
1109      this.contact.add(t);
1110      return t;
1111    }
1112
1113    public DataElement addContact(ContactDetail t) { //3
1114      if (t == null)
1115        return this;
1116      if (this.contact == null)
1117        this.contact = new ArrayList<ContactDetail>();
1118      this.contact.add(t);
1119      return this;
1120    }
1121
1122    /**
1123     * @return The first repetition of repeating field {@link #contact}, creating it if it does not already exist
1124     */
1125    public ContactDetail getContactFirstRep() { 
1126      if (getContact().isEmpty()) {
1127        addContact();
1128      }
1129      return getContact().get(0);
1130    }
1131
1132    /**
1133     * @return {@link #useContext} (The content was developed with a focus and intent of supporting the contexts that are listed. These terms may be used to assist with indexing and searching for appropriate data element instances.)
1134     */
1135    public List<UsageContext> getUseContext() { 
1136      if (this.useContext == null)
1137        this.useContext = new ArrayList<UsageContext>();
1138      return this.useContext;
1139    }
1140
1141    /**
1142     * @return Returns a reference to <code>this</code> for easy method chaining
1143     */
1144    public DataElement setUseContext(List<UsageContext> theUseContext) { 
1145      this.useContext = theUseContext;
1146      return this;
1147    }
1148
1149    public boolean hasUseContext() { 
1150      if (this.useContext == null)
1151        return false;
1152      for (UsageContext item : this.useContext)
1153        if (!item.isEmpty())
1154          return true;
1155      return false;
1156    }
1157
1158    public UsageContext addUseContext() { //3
1159      UsageContext t = new UsageContext();
1160      if (this.useContext == null)
1161        this.useContext = new ArrayList<UsageContext>();
1162      this.useContext.add(t);
1163      return t;
1164    }
1165
1166    public DataElement addUseContext(UsageContext t) { //3
1167      if (t == null)
1168        return this;
1169      if (this.useContext == null)
1170        this.useContext = new ArrayList<UsageContext>();
1171      this.useContext.add(t);
1172      return this;
1173    }
1174
1175    /**
1176     * @return The first repetition of repeating field {@link #useContext}, creating it if it does not already exist
1177     */
1178    public UsageContext getUseContextFirstRep() { 
1179      if (getUseContext().isEmpty()) {
1180        addUseContext();
1181      }
1182      return getUseContext().get(0);
1183    }
1184
1185    /**
1186     * @return {@link #jurisdiction} (A legal or geographic region in which the data element is intended to be used.)
1187     */
1188    public List<CodeableConcept> getJurisdiction() { 
1189      if (this.jurisdiction == null)
1190        this.jurisdiction = new ArrayList<CodeableConcept>();
1191      return this.jurisdiction;
1192    }
1193
1194    /**
1195     * @return Returns a reference to <code>this</code> for easy method chaining
1196     */
1197    public DataElement setJurisdiction(List<CodeableConcept> theJurisdiction) { 
1198      this.jurisdiction = theJurisdiction;
1199      return this;
1200    }
1201
1202    public boolean hasJurisdiction() { 
1203      if (this.jurisdiction == null)
1204        return false;
1205      for (CodeableConcept item : this.jurisdiction)
1206        if (!item.isEmpty())
1207          return true;
1208      return false;
1209    }
1210
1211    public CodeableConcept addJurisdiction() { //3
1212      CodeableConcept t = new CodeableConcept();
1213      if (this.jurisdiction == null)
1214        this.jurisdiction = new ArrayList<CodeableConcept>();
1215      this.jurisdiction.add(t);
1216      return t;
1217    }
1218
1219    public DataElement addJurisdiction(CodeableConcept t) { //3
1220      if (t == null)
1221        return this;
1222      if (this.jurisdiction == null)
1223        this.jurisdiction = new ArrayList<CodeableConcept>();
1224      this.jurisdiction.add(t);
1225      return this;
1226    }
1227
1228    /**
1229     * @return The first repetition of repeating field {@link #jurisdiction}, creating it if it does not already exist
1230     */
1231    public CodeableConcept getJurisdictionFirstRep() { 
1232      if (getJurisdiction().isEmpty()) {
1233        addJurisdiction();
1234      }
1235      return getJurisdiction().get(0);
1236    }
1237
1238    /**
1239     * @return {@link #copyright} (A copyright statement relating to the data element and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the data element.). This is the underlying object with id, value and extensions. The accessor "getCopyright" gives direct access to the value
1240     */
1241    public MarkdownType getCopyrightElement() { 
1242      if (this.copyright == null)
1243        if (Configuration.errorOnAutoCreate())
1244          throw new Error("Attempt to auto-create DataElement.copyright");
1245        else if (Configuration.doAutoCreate())
1246          this.copyright = new MarkdownType(); // bb
1247      return this.copyright;
1248    }
1249
1250    public boolean hasCopyrightElement() { 
1251      return this.copyright != null && !this.copyright.isEmpty();
1252    }
1253
1254    public boolean hasCopyright() { 
1255      return this.copyright != null && !this.copyright.isEmpty();
1256    }
1257
1258    /**
1259     * @param value {@link #copyright} (A copyright statement relating to the data element and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the data element.). This is the underlying object with id, value and extensions. The accessor "getCopyright" gives direct access to the value
1260     */
1261    public DataElement setCopyrightElement(MarkdownType value) { 
1262      this.copyright = value;
1263      return this;
1264    }
1265
1266    /**
1267     * @return A copyright statement relating to the data element and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the data element.
1268     */
1269    public String getCopyright() { 
1270      return this.copyright == null ? null : this.copyright.getValue();
1271    }
1272
1273    /**
1274     * @param value A copyright statement relating to the data element and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the data element.
1275     */
1276    public DataElement setCopyright(String value) { 
1277      if (value == null)
1278        this.copyright = null;
1279      else {
1280        if (this.copyright == null)
1281          this.copyright = new MarkdownType();
1282        this.copyright.setValue(value);
1283      }
1284      return this;
1285    }
1286
1287    /**
1288     * @return {@link #stringency} (Identifies how precise the data element is in its definition.). This is the underlying object with id, value and extensions. The accessor "getStringency" gives direct access to the value
1289     */
1290    public Enumeration<DataElementStringency> getStringencyElement() { 
1291      if (this.stringency == null)
1292        if (Configuration.errorOnAutoCreate())
1293          throw new Error("Attempt to auto-create DataElement.stringency");
1294        else if (Configuration.doAutoCreate())
1295          this.stringency = new Enumeration<DataElementStringency>(new DataElementStringencyEnumFactory()); // bb
1296      return this.stringency;
1297    }
1298
1299    public boolean hasStringencyElement() { 
1300      return this.stringency != null && !this.stringency.isEmpty();
1301    }
1302
1303    public boolean hasStringency() { 
1304      return this.stringency != null && !this.stringency.isEmpty();
1305    }
1306
1307    /**
1308     * @param value {@link #stringency} (Identifies how precise the data element is in its definition.). This is the underlying object with id, value and extensions. The accessor "getStringency" gives direct access to the value
1309     */
1310    public DataElement setStringencyElement(Enumeration<DataElementStringency> value) { 
1311      this.stringency = value;
1312      return this;
1313    }
1314
1315    /**
1316     * @return Identifies how precise the data element is in its definition.
1317     */
1318    public DataElementStringency getStringency() { 
1319      return this.stringency == null ? null : this.stringency.getValue();
1320    }
1321
1322    /**
1323     * @param value Identifies how precise the data element is in its definition.
1324     */
1325    public DataElement setStringency(DataElementStringency value) { 
1326      if (value == null)
1327        this.stringency = null;
1328      else {
1329        if (this.stringency == null)
1330          this.stringency = new Enumeration<DataElementStringency>(new DataElementStringencyEnumFactory());
1331        this.stringency.setValue(value);
1332      }
1333      return this;
1334    }
1335
1336    /**
1337     * @return {@link #mapping} (Identifies a specification (other than a terminology) that the elements which make up the DataElement have some correspondence with.)
1338     */
1339    public List<DataElementMappingComponent> getMapping() { 
1340      if (this.mapping == null)
1341        this.mapping = new ArrayList<DataElementMappingComponent>();
1342      return this.mapping;
1343    }
1344
1345    /**
1346     * @return Returns a reference to <code>this</code> for easy method chaining
1347     */
1348    public DataElement setMapping(List<DataElementMappingComponent> theMapping) { 
1349      this.mapping = theMapping;
1350      return this;
1351    }
1352
1353    public boolean hasMapping() { 
1354      if (this.mapping == null)
1355        return false;
1356      for (DataElementMappingComponent item : this.mapping)
1357        if (!item.isEmpty())
1358          return true;
1359      return false;
1360    }
1361
1362    public DataElementMappingComponent addMapping() { //3
1363      DataElementMappingComponent t = new DataElementMappingComponent();
1364      if (this.mapping == null)
1365        this.mapping = new ArrayList<DataElementMappingComponent>();
1366      this.mapping.add(t);
1367      return t;
1368    }
1369
1370    public DataElement addMapping(DataElementMappingComponent t) { //3
1371      if (t == null)
1372        return this;
1373      if (this.mapping == null)
1374        this.mapping = new ArrayList<DataElementMappingComponent>();
1375      this.mapping.add(t);
1376      return this;
1377    }
1378
1379    /**
1380     * @return The first repetition of repeating field {@link #mapping}, creating it if it does not already exist
1381     */
1382    public DataElementMappingComponent getMappingFirstRep() { 
1383      if (getMapping().isEmpty()) {
1384        addMapping();
1385      }
1386      return getMapping().get(0);
1387    }
1388
1389    /**
1390     * @return {@link #element} (Defines the structure, type, allowed values and other constraining characteristics of the data element.)
1391     */
1392    public List<ElementDefinition> getElement() { 
1393      if (this.element == null)
1394        this.element = new ArrayList<ElementDefinition>();
1395      return this.element;
1396    }
1397
1398    /**
1399     * @return Returns a reference to <code>this</code> for easy method chaining
1400     */
1401    public DataElement setElement(List<ElementDefinition> theElement) { 
1402      this.element = theElement;
1403      return this;
1404    }
1405
1406    public boolean hasElement() { 
1407      if (this.element == null)
1408        return false;
1409      for (ElementDefinition item : this.element)
1410        if (!item.isEmpty())
1411          return true;
1412      return false;
1413    }
1414
1415    public ElementDefinition addElement() { //3
1416      ElementDefinition t = new ElementDefinition();
1417      if (this.element == null)
1418        this.element = new ArrayList<ElementDefinition>();
1419      this.element.add(t);
1420      return t;
1421    }
1422
1423    public DataElement addElement(ElementDefinition t) { //3
1424      if (t == null)
1425        return this;
1426      if (this.element == null)
1427        this.element = new ArrayList<ElementDefinition>();
1428      this.element.add(t);
1429      return this;
1430    }
1431
1432    /**
1433     * @return The first repetition of repeating field {@link #element}, creating it if it does not already exist
1434     */
1435    public ElementDefinition getElementFirstRep() { 
1436      if (getElement().isEmpty()) {
1437        addElement();
1438      }
1439      return getElement().get(0);
1440    }
1441
1442      protected void listChildren(List<Property> childrenList) {
1443        super.listChildren(childrenList);
1444        childrenList.add(new Property("url", "uri", "An absolute URI that is used to identify this data element when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this data element is (or will be) published. The URL SHOULD include the major version of the data element. For more information see [Technical and Business Versions](resource.html#versions).", 0, java.lang.Integer.MAX_VALUE, url));
1445        childrenList.add(new Property("identifier", "Identifier", "A formal identifier that is used to identify this data element when it is represented in other formats, or referenced in a specification, model, design or an instance.", 0, java.lang.Integer.MAX_VALUE, identifier));
1446        childrenList.add(new Property("version", "string", "The identifier that is used to identify this version of the data element when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the data element author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.", 0, java.lang.Integer.MAX_VALUE, version));
1447        childrenList.add(new Property("status", "code", "The status of this data element. Enables tracking the life-cycle of the content.", 0, java.lang.Integer.MAX_VALUE, status));
1448        childrenList.add(new Property("experimental", "boolean", "A boolean value to indicate that this data element is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.", 0, java.lang.Integer.MAX_VALUE, experimental));
1449        childrenList.add(new Property("date", "dateTime", "The date  (and optionally time) when the data element was published. The date must change if and when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the data element changes.", 0, java.lang.Integer.MAX_VALUE, date));
1450        childrenList.add(new Property("publisher", "string", "The name of the individual or organization that published the data element.", 0, java.lang.Integer.MAX_VALUE, publisher));
1451        childrenList.add(new Property("name", "string", "A natural language name identifying the data element. This name should be usable as an identifier for the module by machine processing applications such as code generation.", 0, java.lang.Integer.MAX_VALUE, name));
1452        childrenList.add(new Property("title", "string", "A short, descriptive, user-friendly title for the data element.", 0, java.lang.Integer.MAX_VALUE, title));
1453        childrenList.add(new Property("contact", "ContactDetail", "Contact details to assist a user in finding and communicating with the publisher.", 0, java.lang.Integer.MAX_VALUE, contact));
1454        childrenList.add(new Property("useContext", "UsageContext", "The content was developed with a focus and intent of supporting the contexts that are listed. These terms may be used to assist with indexing and searching for appropriate data element instances.", 0, java.lang.Integer.MAX_VALUE, useContext));
1455        childrenList.add(new Property("jurisdiction", "CodeableConcept", "A legal or geographic region in which the data element is intended to be used.", 0, java.lang.Integer.MAX_VALUE, jurisdiction));
1456        childrenList.add(new Property("copyright", "markdown", "A copyright statement relating to the data element and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the data element.", 0, java.lang.Integer.MAX_VALUE, copyright));
1457        childrenList.add(new Property("stringency", "code", "Identifies how precise the data element is in its definition.", 0, java.lang.Integer.MAX_VALUE, stringency));
1458        childrenList.add(new Property("mapping", "", "Identifies a specification (other than a terminology) that the elements which make up the DataElement have some correspondence with.", 0, java.lang.Integer.MAX_VALUE, mapping));
1459        childrenList.add(new Property("element", "ElementDefinition", "Defines the structure, type, allowed values and other constraining characteristics of the data element.", 0, java.lang.Integer.MAX_VALUE, element));
1460      }
1461
1462      @Override
1463      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1464        switch (hash) {
1465        case 116079: /*url*/ return this.url == null ? new Base[0] : new Base[] {this.url}; // UriType
1466        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
1467        case 351608024: /*version*/ return this.version == null ? new Base[0] : new Base[] {this.version}; // StringType
1468        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<PublicationStatus>
1469        case -404562712: /*experimental*/ return this.experimental == null ? new Base[0] : new Base[] {this.experimental}; // BooleanType
1470        case 3076014: /*date*/ return this.date == null ? new Base[0] : new Base[] {this.date}; // DateTimeType
1471        case 1447404028: /*publisher*/ return this.publisher == null ? new Base[0] : new Base[] {this.publisher}; // StringType
1472        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // StringType
1473        case 110371416: /*title*/ return this.title == null ? new Base[0] : new Base[] {this.title}; // StringType
1474        case 951526432: /*contact*/ return this.contact == null ? new Base[0] : this.contact.toArray(new Base[this.contact.size()]); // ContactDetail
1475        case -669707736: /*useContext*/ return this.useContext == null ? new Base[0] : this.useContext.toArray(new Base[this.useContext.size()]); // UsageContext
1476        case -507075711: /*jurisdiction*/ return this.jurisdiction == null ? new Base[0] : this.jurisdiction.toArray(new Base[this.jurisdiction.size()]); // CodeableConcept
1477        case 1522889671: /*copyright*/ return this.copyright == null ? new Base[0] : new Base[] {this.copyright}; // MarkdownType
1478        case -1572568464: /*stringency*/ return this.stringency == null ? new Base[0] : new Base[] {this.stringency}; // Enumeration<DataElementStringency>
1479        case 837556430: /*mapping*/ return this.mapping == null ? new Base[0] : this.mapping.toArray(new Base[this.mapping.size()]); // DataElementMappingComponent
1480        case -1662836996: /*element*/ return this.element == null ? new Base[0] : this.element.toArray(new Base[this.element.size()]); // ElementDefinition
1481        default: return super.getProperty(hash, name, checkValid);
1482        }
1483
1484      }
1485
1486      @Override
1487      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1488        switch (hash) {
1489        case 116079: // url
1490          this.url = castToUri(value); // UriType
1491          return value;
1492        case -1618432855: // identifier
1493          this.getIdentifier().add(castToIdentifier(value)); // Identifier
1494          return value;
1495        case 351608024: // version
1496          this.version = castToString(value); // StringType
1497          return value;
1498        case -892481550: // status
1499          value = new PublicationStatusEnumFactory().fromType(castToCode(value));
1500          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
1501          return value;
1502        case -404562712: // experimental
1503          this.experimental = castToBoolean(value); // BooleanType
1504          return value;
1505        case 3076014: // date
1506          this.date = castToDateTime(value); // DateTimeType
1507          return value;
1508        case 1447404028: // publisher
1509          this.publisher = castToString(value); // StringType
1510          return value;
1511        case 3373707: // name
1512          this.name = castToString(value); // StringType
1513          return value;
1514        case 110371416: // title
1515          this.title = castToString(value); // StringType
1516          return value;
1517        case 951526432: // contact
1518          this.getContact().add(castToContactDetail(value)); // ContactDetail
1519          return value;
1520        case -669707736: // useContext
1521          this.getUseContext().add(castToUsageContext(value)); // UsageContext
1522          return value;
1523        case -507075711: // jurisdiction
1524          this.getJurisdiction().add(castToCodeableConcept(value)); // CodeableConcept
1525          return value;
1526        case 1522889671: // copyright
1527          this.copyright = castToMarkdown(value); // MarkdownType
1528          return value;
1529        case -1572568464: // stringency
1530          value = new DataElementStringencyEnumFactory().fromType(castToCode(value));
1531          this.stringency = (Enumeration) value; // Enumeration<DataElementStringency>
1532          return value;
1533        case 837556430: // mapping
1534          this.getMapping().add((DataElementMappingComponent) value); // DataElementMappingComponent
1535          return value;
1536        case -1662836996: // element
1537          this.getElement().add(castToElementDefinition(value)); // ElementDefinition
1538          return value;
1539        default: return super.setProperty(hash, name, value);
1540        }
1541
1542      }
1543
1544      @Override
1545      public Base setProperty(String name, Base value) throws FHIRException {
1546        if (name.equals("url")) {
1547          this.url = castToUri(value); // UriType
1548        } else if (name.equals("identifier")) {
1549          this.getIdentifier().add(castToIdentifier(value));
1550        } else if (name.equals("version")) {
1551          this.version = castToString(value); // StringType
1552        } else if (name.equals("status")) {
1553          value = new PublicationStatusEnumFactory().fromType(castToCode(value));
1554          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
1555        } else if (name.equals("experimental")) {
1556          this.experimental = castToBoolean(value); // BooleanType
1557        } else if (name.equals("date")) {
1558          this.date = castToDateTime(value); // DateTimeType
1559        } else if (name.equals("publisher")) {
1560          this.publisher = castToString(value); // StringType
1561        } else if (name.equals("name")) {
1562          this.name = castToString(value); // StringType
1563        } else if (name.equals("title")) {
1564          this.title = castToString(value); // StringType
1565        } else if (name.equals("contact")) {
1566          this.getContact().add(castToContactDetail(value));
1567        } else if (name.equals("useContext")) {
1568          this.getUseContext().add(castToUsageContext(value));
1569        } else if (name.equals("jurisdiction")) {
1570          this.getJurisdiction().add(castToCodeableConcept(value));
1571        } else if (name.equals("copyright")) {
1572          this.copyright = castToMarkdown(value); // MarkdownType
1573        } else if (name.equals("stringency")) {
1574          value = new DataElementStringencyEnumFactory().fromType(castToCode(value));
1575          this.stringency = (Enumeration) value; // Enumeration<DataElementStringency>
1576        } else if (name.equals("mapping")) {
1577          this.getMapping().add((DataElementMappingComponent) value);
1578        } else if (name.equals("element")) {
1579          this.getElement().add(castToElementDefinition(value));
1580        } else
1581          return super.setProperty(name, value);
1582        return value;
1583      }
1584
1585      @Override
1586      public Base makeProperty(int hash, String name) throws FHIRException {
1587        switch (hash) {
1588        case 116079:  return getUrlElement();
1589        case -1618432855:  return addIdentifier(); 
1590        case 351608024:  return getVersionElement();
1591        case -892481550:  return getStatusElement();
1592        case -404562712:  return getExperimentalElement();
1593        case 3076014:  return getDateElement();
1594        case 1447404028:  return getPublisherElement();
1595        case 3373707:  return getNameElement();
1596        case 110371416:  return getTitleElement();
1597        case 951526432:  return addContact(); 
1598        case -669707736:  return addUseContext(); 
1599        case -507075711:  return addJurisdiction(); 
1600        case 1522889671:  return getCopyrightElement();
1601        case -1572568464:  return getStringencyElement();
1602        case 837556430:  return addMapping(); 
1603        case -1662836996:  return addElement(); 
1604        default: return super.makeProperty(hash, name);
1605        }
1606
1607      }
1608
1609      @Override
1610      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1611        switch (hash) {
1612        case 116079: /*url*/ return new String[] {"uri"};
1613        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
1614        case 351608024: /*version*/ return new String[] {"string"};
1615        case -892481550: /*status*/ return new String[] {"code"};
1616        case -404562712: /*experimental*/ return new String[] {"boolean"};
1617        case 3076014: /*date*/ return new String[] {"dateTime"};
1618        case 1447404028: /*publisher*/ return new String[] {"string"};
1619        case 3373707: /*name*/ return new String[] {"string"};
1620        case 110371416: /*title*/ return new String[] {"string"};
1621        case 951526432: /*contact*/ return new String[] {"ContactDetail"};
1622        case -669707736: /*useContext*/ return new String[] {"UsageContext"};
1623        case -507075711: /*jurisdiction*/ return new String[] {"CodeableConcept"};
1624        case 1522889671: /*copyright*/ return new String[] {"markdown"};
1625        case -1572568464: /*stringency*/ return new String[] {"code"};
1626        case 837556430: /*mapping*/ return new String[] {};
1627        case -1662836996: /*element*/ return new String[] {"ElementDefinition"};
1628        default: return super.getTypesForProperty(hash, name);
1629        }
1630
1631      }
1632
1633      @Override
1634      public Base addChild(String name) throws FHIRException {
1635        if (name.equals("url")) {
1636          throw new FHIRException("Cannot call addChild on a primitive type DataElement.url");
1637        }
1638        else if (name.equals("identifier")) {
1639          return addIdentifier();
1640        }
1641        else if (name.equals("version")) {
1642          throw new FHIRException("Cannot call addChild on a primitive type DataElement.version");
1643        }
1644        else if (name.equals("status")) {
1645          throw new FHIRException("Cannot call addChild on a primitive type DataElement.status");
1646        }
1647        else if (name.equals("experimental")) {
1648          throw new FHIRException("Cannot call addChild on a primitive type DataElement.experimental");
1649        }
1650        else if (name.equals("date")) {
1651          throw new FHIRException("Cannot call addChild on a primitive type DataElement.date");
1652        }
1653        else if (name.equals("publisher")) {
1654          throw new FHIRException("Cannot call addChild on a primitive type DataElement.publisher");
1655        }
1656        else if (name.equals("name")) {
1657          throw new FHIRException("Cannot call addChild on a primitive type DataElement.name");
1658        }
1659        else if (name.equals("title")) {
1660          throw new FHIRException("Cannot call addChild on a primitive type DataElement.title");
1661        }
1662        else if (name.equals("contact")) {
1663          return addContact();
1664        }
1665        else if (name.equals("useContext")) {
1666          return addUseContext();
1667        }
1668        else if (name.equals("jurisdiction")) {
1669          return addJurisdiction();
1670        }
1671        else if (name.equals("copyright")) {
1672          throw new FHIRException("Cannot call addChild on a primitive type DataElement.copyright");
1673        }
1674        else if (name.equals("stringency")) {
1675          throw new FHIRException("Cannot call addChild on a primitive type DataElement.stringency");
1676        }
1677        else if (name.equals("mapping")) {
1678          return addMapping();
1679        }
1680        else if (name.equals("element")) {
1681          return addElement();
1682        }
1683        else
1684          return super.addChild(name);
1685      }
1686
1687  public String fhirType() {
1688    return "DataElement";
1689
1690  }
1691
1692      public DataElement copy() {
1693        DataElement dst = new DataElement();
1694        copyValues(dst);
1695        dst.url = url == null ? null : url.copy();
1696        if (identifier != null) {
1697          dst.identifier = new ArrayList<Identifier>();
1698          for (Identifier i : identifier)
1699            dst.identifier.add(i.copy());
1700        };
1701        dst.version = version == null ? null : version.copy();
1702        dst.status = status == null ? null : status.copy();
1703        dst.experimental = experimental == null ? null : experimental.copy();
1704        dst.date = date == null ? null : date.copy();
1705        dst.publisher = publisher == null ? null : publisher.copy();
1706        dst.name = name == null ? null : name.copy();
1707        dst.title = title == null ? null : title.copy();
1708        if (contact != null) {
1709          dst.contact = new ArrayList<ContactDetail>();
1710          for (ContactDetail i : contact)
1711            dst.contact.add(i.copy());
1712        };
1713        if (useContext != null) {
1714          dst.useContext = new ArrayList<UsageContext>();
1715          for (UsageContext i : useContext)
1716            dst.useContext.add(i.copy());
1717        };
1718        if (jurisdiction != null) {
1719          dst.jurisdiction = new ArrayList<CodeableConcept>();
1720          for (CodeableConcept i : jurisdiction)
1721            dst.jurisdiction.add(i.copy());
1722        };
1723        dst.copyright = copyright == null ? null : copyright.copy();
1724        dst.stringency = stringency == null ? null : stringency.copy();
1725        if (mapping != null) {
1726          dst.mapping = new ArrayList<DataElementMappingComponent>();
1727          for (DataElementMappingComponent i : mapping)
1728            dst.mapping.add(i.copy());
1729        };
1730        if (element != null) {
1731          dst.element = new ArrayList<ElementDefinition>();
1732          for (ElementDefinition i : element)
1733            dst.element.add(i.copy());
1734        };
1735        return dst;
1736      }
1737
1738      protected DataElement typedCopy() {
1739        return copy();
1740      }
1741
1742      @Override
1743      public boolean equalsDeep(Base other) {
1744        if (!super.equalsDeep(other))
1745          return false;
1746        if (!(other instanceof DataElement))
1747          return false;
1748        DataElement o = (DataElement) other;
1749        return compareDeep(identifier, o.identifier, true) && compareDeep(copyright, o.copyright, true)
1750           && compareDeep(stringency, o.stringency, true) && compareDeep(mapping, o.mapping, true) && compareDeep(element, o.element, true)
1751          ;
1752      }
1753
1754      @Override
1755      public boolean equalsShallow(Base other) {
1756        if (!super.equalsShallow(other))
1757          return false;
1758        if (!(other instanceof DataElement))
1759          return false;
1760        DataElement o = (DataElement) other;
1761        return compareValues(copyright, o.copyright, true) && compareValues(stringency, o.stringency, true)
1762          ;
1763      }
1764
1765      public boolean isEmpty() {
1766        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, copyright, stringency
1767          , mapping, element);
1768      }
1769
1770  @Override
1771  public ResourceType getResourceType() {
1772    return ResourceType.DataElement;
1773   }
1774
1775 /**
1776   * Search parameter: <b>date</b>
1777   * <p>
1778   * Description: <b>The data element publication date</b><br>
1779   * Type: <b>date</b><br>
1780   * Path: <b>DataElement.date</b><br>
1781   * </p>
1782   */
1783  @SearchParamDefinition(name="date", path="DataElement.date", description="The data element publication date", type="date" )
1784  public static final String SP_DATE = "date";
1785 /**
1786   * <b>Fluent Client</b> search parameter constant for <b>date</b>
1787   * <p>
1788   * Description: <b>The data element publication date</b><br>
1789   * Type: <b>date</b><br>
1790   * Path: <b>DataElement.date</b><br>
1791   * </p>
1792   */
1793  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_DATE);
1794
1795 /**
1796   * Search parameter: <b>identifier</b>
1797   * <p>
1798   * Description: <b>External identifier for the data element</b><br>
1799   * Type: <b>token</b><br>
1800   * Path: <b>DataElement.identifier</b><br>
1801   * </p>
1802   */
1803  @SearchParamDefinition(name="identifier", path="DataElement.identifier", description="External identifier for the data element", type="token" )
1804  public static final String SP_IDENTIFIER = "identifier";
1805 /**
1806   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
1807   * <p>
1808   * Description: <b>External identifier for the data element</b><br>
1809   * Type: <b>token</b><br>
1810   * Path: <b>DataElement.identifier</b><br>
1811   * </p>
1812   */
1813  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
1814
1815 /**
1816   * Search parameter: <b>code</b>
1817   * <p>
1818   * Description: <b>A code for the data element (server may choose to do subsumption)</b><br>
1819   * Type: <b>token</b><br>
1820   * Path: <b>DataElement.element.code</b><br>
1821   * </p>
1822   */
1823  @SearchParamDefinition(name="code", path="DataElement.element.code", description="A code for the data element (server may choose to do subsumption)", type="token" )
1824  public static final String SP_CODE = "code";
1825 /**
1826   * <b>Fluent Client</b> search parameter constant for <b>code</b>
1827   * <p>
1828   * Description: <b>A code for the data element (server may choose to do subsumption)</b><br>
1829   * Type: <b>token</b><br>
1830   * Path: <b>DataElement.element.code</b><br>
1831   * </p>
1832   */
1833  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CODE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CODE);
1834
1835 /**
1836   * Search parameter: <b>stringency</b>
1837   * <p>
1838   * Description: <b>The stringency of the data element definition</b><br>
1839   * Type: <b>token</b><br>
1840   * Path: <b>DataElement.stringency</b><br>
1841   * </p>
1842   */
1843  @SearchParamDefinition(name="stringency", path="DataElement.stringency", description="The stringency of the data element definition", type="token" )
1844  public static final String SP_STRINGENCY = "stringency";
1845 /**
1846   * <b>Fluent Client</b> search parameter constant for <b>stringency</b>
1847   * <p>
1848   * Description: <b>The stringency of the data element definition</b><br>
1849   * Type: <b>token</b><br>
1850   * Path: <b>DataElement.stringency</b><br>
1851   * </p>
1852   */
1853  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STRINGENCY = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STRINGENCY);
1854
1855 /**
1856   * Search parameter: <b>jurisdiction</b>
1857   * <p>
1858   * Description: <b>Intended jurisdiction for the data element</b><br>
1859   * Type: <b>token</b><br>
1860   * Path: <b>DataElement.jurisdiction</b><br>
1861   * </p>
1862   */
1863  @SearchParamDefinition(name="jurisdiction", path="DataElement.jurisdiction", description="Intended jurisdiction for the data element", type="token" )
1864  public static final String SP_JURISDICTION = "jurisdiction";
1865 /**
1866   * <b>Fluent Client</b> search parameter constant for <b>jurisdiction</b>
1867   * <p>
1868   * Description: <b>Intended jurisdiction for the data element</b><br>
1869   * Type: <b>token</b><br>
1870   * Path: <b>DataElement.jurisdiction</b><br>
1871   * </p>
1872   */
1873  public static final ca.uhn.fhir.rest.gclient.TokenClientParam JURISDICTION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_JURISDICTION);
1874
1875 /**
1876   * Search parameter: <b>name</b>
1877   * <p>
1878   * Description: <b>Computationally friendly name of the data element</b><br>
1879   * Type: <b>string</b><br>
1880   * Path: <b>DataElement.name</b><br>
1881   * </p>
1882   */
1883  @SearchParamDefinition(name="name", path="DataElement.name", description="Computationally friendly name of the data element", type="string" )
1884  public static final String SP_NAME = "name";
1885 /**
1886   * <b>Fluent Client</b> search parameter constant for <b>name</b>
1887   * <p>
1888   * Description: <b>Computationally friendly name of the data element</b><br>
1889   * Type: <b>string</b><br>
1890   * Path: <b>DataElement.name</b><br>
1891   * </p>
1892   */
1893  public static final ca.uhn.fhir.rest.gclient.StringClientParam NAME = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_NAME);
1894
1895 /**
1896   * Search parameter: <b>publisher</b>
1897   * <p>
1898   * Description: <b>Name of the publisher of the data element</b><br>
1899   * Type: <b>string</b><br>
1900   * Path: <b>DataElement.publisher</b><br>
1901   * </p>
1902   */
1903  @SearchParamDefinition(name="publisher", path="DataElement.publisher", description="Name of the publisher of the data element", type="string" )
1904  public static final String SP_PUBLISHER = "publisher";
1905 /**
1906   * <b>Fluent Client</b> search parameter constant for <b>publisher</b>
1907   * <p>
1908   * Description: <b>Name of the publisher of the data element</b><br>
1909   * Type: <b>string</b><br>
1910   * Path: <b>DataElement.publisher</b><br>
1911   * </p>
1912   */
1913  public static final ca.uhn.fhir.rest.gclient.StringClientParam PUBLISHER = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_PUBLISHER);
1914
1915 /**
1916   * Search parameter: <b>description</b>
1917   * <p>
1918   * Description: <b>Text search in the description of the data element.  This corresponds to the definition of the first DataElement.element.</b><br>
1919   * Type: <b>string</b><br>
1920   * Path: <b>DataElement.element.definition</b><br>
1921   * </p>
1922   */
1923  @SearchParamDefinition(name="description", path="DataElement.element.definition", description="Text search in the description of the data element.  This corresponds to the definition of the first DataElement.element.", type="string" )
1924  public static final String SP_DESCRIPTION = "description";
1925 /**
1926   * <b>Fluent Client</b> search parameter constant for <b>description</b>
1927   * <p>
1928   * Description: <b>Text search in the description of the data element.  This corresponds to the definition of the first DataElement.element.</b><br>
1929   * Type: <b>string</b><br>
1930   * Path: <b>DataElement.element.definition</b><br>
1931   * </p>
1932   */
1933  public static final ca.uhn.fhir.rest.gclient.StringClientParam DESCRIPTION = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_DESCRIPTION);
1934
1935 /**
1936   * Search parameter: <b>title</b>
1937   * <p>
1938   * Description: <b>The human-friendly name of the data element</b><br>
1939   * Type: <b>string</b><br>
1940   * Path: <b>DataElement.title</b><br>
1941   * </p>
1942   */
1943  @SearchParamDefinition(name="title", path="DataElement.title", description="The human-friendly name of the data element", type="string" )
1944  public static final String SP_TITLE = "title";
1945 /**
1946   * <b>Fluent Client</b> search parameter constant for <b>title</b>
1947   * <p>
1948   * Description: <b>The human-friendly name of the data element</b><br>
1949   * Type: <b>string</b><br>
1950   * Path: <b>DataElement.title</b><br>
1951   * </p>
1952   */
1953  public static final ca.uhn.fhir.rest.gclient.StringClientParam TITLE = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_TITLE);
1954
1955 /**
1956   * Search parameter: <b>version</b>
1957   * <p>
1958   * Description: <b>The business version of the data element</b><br>
1959   * Type: <b>token</b><br>
1960   * Path: <b>DataElement.version</b><br>
1961   * </p>
1962   */
1963  @SearchParamDefinition(name="version", path="DataElement.version", description="The business version of the data element", type="token" )
1964  public static final String SP_VERSION = "version";
1965 /**
1966   * <b>Fluent Client</b> search parameter constant for <b>version</b>
1967   * <p>
1968   * Description: <b>The business version of the data element</b><br>
1969   * Type: <b>token</b><br>
1970   * Path: <b>DataElement.version</b><br>
1971   * </p>
1972   */
1973  public static final ca.uhn.fhir.rest.gclient.TokenClientParam VERSION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_VERSION);
1974
1975 /**
1976   * Search parameter: <b>url</b>
1977   * <p>
1978   * Description: <b>The uri that identifies the data element</b><br>
1979   * Type: <b>uri</b><br>
1980   * Path: <b>DataElement.url</b><br>
1981   * </p>
1982   */
1983  @SearchParamDefinition(name="url", path="DataElement.url", description="The uri that identifies the data element", type="uri" )
1984  public static final String SP_URL = "url";
1985 /**
1986   * <b>Fluent Client</b> search parameter constant for <b>url</b>
1987   * <p>
1988   * Description: <b>The uri that identifies the data element</b><br>
1989   * Type: <b>uri</b><br>
1990   * Path: <b>DataElement.url</b><br>
1991   * </p>
1992   */
1993  public static final ca.uhn.fhir.rest.gclient.UriClientParam URL = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_URL);
1994
1995 /**
1996   * Search parameter: <b>status</b>
1997   * <p>
1998   * Description: <b>The current status of the data element</b><br>
1999   * Type: <b>token</b><br>
2000   * Path: <b>DataElement.status</b><br>
2001   * </p>
2002   */
2003  @SearchParamDefinition(name="status", path="DataElement.status", description="The current status of the data element", type="token" )
2004  public static final String SP_STATUS = "status";
2005 /**
2006   * <b>Fluent Client</b> search parameter constant for <b>status</b>
2007   * <p>
2008   * Description: <b>The current status of the data element</b><br>
2009   * Type: <b>token</b><br>
2010   * Path: <b>DataElement.status</b><br>
2011   * </p>
2012   */
2013  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
2014
2015
2016}
2017