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