001package org.hl7.fhir.r5.model;
002
003
004/*
005  Copyright (c) 2011+, HL7, Inc.
006  All rights reserved.
007  
008  Redistribution and use in source and binary forms, with or without modification, \
009  are permitted provided that the following conditions are met:
010  
011   * Redistributions of source code must retain the above copyright notice, this \
012     list of conditions and the following disclaimer.
013   * Redistributions in binary form must reproduce the above copyright notice, \
014     this list of conditions and the following disclaimer in the documentation \
015     and/or other materials provided with the distribution.
016   * Neither the name of HL7 nor the names of its contributors may be used to 
017     endorse or promote products derived from this software without specific 
018     prior written permission.
019  
020  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND \
021  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED \
022  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. \
023  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, \
024  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT \
025  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR \
026  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, \
027  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) \
028  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE \
029  POSSIBILITY OF SUCH DAMAGE.
030  */
031
032// Generated on Tue, May 4, 2021 07:17+1000 for FHIR v5.0.0-snapshot2
033
034import java.util.ArrayList;
035import java.util.Date;
036import java.util.List;
037import org.hl7.fhir.utilities.Utilities;
038import org.hl7.fhir.r5.model.Enumerations.*;
039import org.hl7.fhir.instance.model.api.IBaseDatatypeElement;
040import org.hl7.fhir.exceptions.FHIRException;
041import org.hl7.fhir.instance.model.api.ICompositeType;
042import ca.uhn.fhir.model.api.annotation.Child;
043import ca.uhn.fhir.model.api.annotation.ChildOrder;
044import ca.uhn.fhir.model.api.annotation.DatatypeDef;
045import ca.uhn.fhir.model.api.annotation.Description;
046import ca.uhn.fhir.model.api.annotation.Block;
047
048/**
049 * Base StructureDefinition for OrderedDistribution Type: An ordered list (distribution) of statistics.
050 */
051@DatatypeDef(name="OrderedDistribution")
052public class OrderedDistribution extends BackboneType implements ICompositeType {
053
054    @Block()
055    public static class OrderedDistributionIntervalComponent extends Element implements IBaseDatatypeElement {
056        /**
057         * Relative order of interval.
058         */
059        @Child(name = "rankOrder", type = {IntegerType.class}, order=1, min=1, max=1, modifier=false, summary=true)
060        @Description(shortDefinition="Relative order of interval", formalDefinition="Relative order of interval." )
061        protected IntegerType rankOrder;
062
063        /**
064         * Values and parameters for a single statistic related to the interval.
065         */
066        @Child(name = "intervalStatistic", type = {Statistic.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
067        @Description(shortDefinition="Values and parameters for a single statistic related to the interval", formalDefinition="Values and parameters for a single statistic related to the interval." )
068        protected List<Statistic> intervalStatistic;
069
070        private static final long serialVersionUID = 1714817635L;
071
072    /**
073     * Constructor
074     */
075      public OrderedDistributionIntervalComponent() {
076        super();
077      }
078
079    /**
080     * Constructor
081     */
082      public OrderedDistributionIntervalComponent(int rankOrder) {
083        super();
084        this.setRankOrder(rankOrder);
085      }
086
087        /**
088         * @return {@link #rankOrder} (Relative order of interval.). This is the underlying object with id, value and extensions. The accessor "getRankOrder" gives direct access to the value
089         */
090        public IntegerType getRankOrderElement() { 
091          if (this.rankOrder == null)
092            if (Configuration.errorOnAutoCreate())
093              throw new Error("Attempt to auto-create OrderedDistributionIntervalComponent.rankOrder");
094            else if (Configuration.doAutoCreate())
095              this.rankOrder = new IntegerType(); // bb
096          return this.rankOrder;
097        }
098
099        public boolean hasRankOrderElement() { 
100          return this.rankOrder != null && !this.rankOrder.isEmpty();
101        }
102
103        public boolean hasRankOrder() { 
104          return this.rankOrder != null && !this.rankOrder.isEmpty();
105        }
106
107        /**
108         * @param value {@link #rankOrder} (Relative order of interval.). This is the underlying object with id, value and extensions. The accessor "getRankOrder" gives direct access to the value
109         */
110        public OrderedDistributionIntervalComponent setRankOrderElement(IntegerType value) { 
111          this.rankOrder = value;
112          return this;
113        }
114
115        /**
116         * @return Relative order of interval.
117         */
118        public int getRankOrder() { 
119          return this.rankOrder == null || this.rankOrder.isEmpty() ? 0 : this.rankOrder.getValue();
120        }
121
122        /**
123         * @param value Relative order of interval.
124         */
125        public OrderedDistributionIntervalComponent setRankOrder(int value) { 
126            if (this.rankOrder == null)
127              this.rankOrder = new IntegerType();
128            this.rankOrder.setValue(value);
129          return this;
130        }
131
132        /**
133         * @return {@link #intervalStatistic} (Values and parameters for a single statistic related to the interval.)
134         */
135        public List<Statistic> getIntervalStatistic() { 
136          if (this.intervalStatistic == null)
137            this.intervalStatistic = new ArrayList<Statistic>();
138          return this.intervalStatistic;
139        }
140
141        /**
142         * @return Returns a reference to <code>this</code> for easy method chaining
143         */
144        public OrderedDistributionIntervalComponent setIntervalStatistic(List<Statistic> theIntervalStatistic) { 
145          this.intervalStatistic = theIntervalStatistic;
146          return this;
147        }
148
149        public boolean hasIntervalStatistic() { 
150          if (this.intervalStatistic == null)
151            return false;
152          for (Statistic item : this.intervalStatistic)
153            if (!item.isEmpty())
154              return true;
155          return false;
156        }
157
158        public Statistic addIntervalStatistic() { //3
159          Statistic t = new Statistic();
160          if (this.intervalStatistic == null)
161            this.intervalStatistic = new ArrayList<Statistic>();
162          this.intervalStatistic.add(t);
163          return t;
164        }
165
166        public OrderedDistributionIntervalComponent addIntervalStatistic(Statistic t) { //3
167          if (t == null)
168            return this;
169          if (this.intervalStatistic == null)
170            this.intervalStatistic = new ArrayList<Statistic>();
171          this.intervalStatistic.add(t);
172          return this;
173        }
174
175        /**
176         * @return The first repetition of repeating field {@link #intervalStatistic}, creating it if it does not already exist {3}
177         */
178        public Statistic getIntervalStatisticFirstRep() { 
179          if (getIntervalStatistic().isEmpty()) {
180            addIntervalStatistic();
181          }
182          return getIntervalStatistic().get(0);
183        }
184
185        protected void listChildren(List<Property> children) {
186          super.listChildren(children);
187          children.add(new Property("rankOrder", "integer", "Relative order of interval.", 0, 1, rankOrder));
188          children.add(new Property("intervalStatistic", "Statistic", "Values and parameters for a single statistic related to the interval.", 0, java.lang.Integer.MAX_VALUE, intervalStatistic));
189        }
190
191        @Override
192        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
193          switch (_hash) {
194          case -656537982: /*rankOrder*/  return new Property("rankOrder", "integer", "Relative order of interval.", 0, 1, rankOrder);
195          case 227099147: /*intervalStatistic*/  return new Property("intervalStatistic", "Statistic", "Values and parameters for a single statistic related to the interval.", 0, java.lang.Integer.MAX_VALUE, intervalStatistic);
196          default: return super.getNamedProperty(_hash, _name, _checkValid);
197          }
198
199        }
200
201      @Override
202      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
203        switch (hash) {
204        case -656537982: /*rankOrder*/ return this.rankOrder == null ? new Base[0] : new Base[] {this.rankOrder}; // IntegerType
205        case 227099147: /*intervalStatistic*/ return this.intervalStatistic == null ? new Base[0] : this.intervalStatistic.toArray(new Base[this.intervalStatistic.size()]); // Statistic
206        default: return super.getProperty(hash, name, checkValid);
207        }
208
209      }
210
211      @Override
212      public Base setProperty(int hash, String name, Base value) throws FHIRException {
213        switch (hash) {
214        case -656537982: // rankOrder
215          this.rankOrder = TypeConvertor.castToInteger(value); // IntegerType
216          return value;
217        case 227099147: // intervalStatistic
218          this.getIntervalStatistic().add(TypeConvertor.castToStatistic(value)); // Statistic
219          return value;
220        default: return super.setProperty(hash, name, value);
221        }
222
223      }
224
225      @Override
226      public Base setProperty(String name, Base value) throws FHIRException {
227        if (name.equals("rankOrder")) {
228          this.rankOrder = TypeConvertor.castToInteger(value); // IntegerType
229        } else if (name.equals("intervalStatistic")) {
230          this.getIntervalStatistic().add(TypeConvertor.castToStatistic(value));
231        } else
232          return super.setProperty(name, value);
233        return value;
234      }
235
236      @Override
237      public Base makeProperty(int hash, String name) throws FHIRException {
238        switch (hash) {
239        case -656537982:  return getRankOrderElement();
240        case 227099147:  return addIntervalStatistic(); 
241        default: return super.makeProperty(hash, name);
242        }
243
244      }
245
246      @Override
247      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
248        switch (hash) {
249        case -656537982: /*rankOrder*/ return new String[] {"integer"};
250        case 227099147: /*intervalStatistic*/ return new String[] {"Statistic"};
251        default: return super.getTypesForProperty(hash, name);
252        }
253
254      }
255
256      @Override
257      public Base addChild(String name) throws FHIRException {
258        if (name.equals("rankOrder")) {
259          throw new FHIRException("Cannot call addChild on a singleton property OrderedDistribution.interval.rankOrder");
260        }
261        else if (name.equals("intervalStatistic")) {
262          return addIntervalStatistic();
263        }
264        else
265          return super.addChild(name);
266      }
267
268      public OrderedDistributionIntervalComponent copy() {
269        OrderedDistributionIntervalComponent dst = new OrderedDistributionIntervalComponent();
270        copyValues(dst);
271        return dst;
272      }
273
274      public void copyValues(OrderedDistributionIntervalComponent dst) {
275        super.copyValues(dst);
276        dst.rankOrder = rankOrder == null ? null : rankOrder.copy();
277        if (intervalStatistic != null) {
278          dst.intervalStatistic = new ArrayList<Statistic>();
279          for (Statistic i : intervalStatistic)
280            dst.intervalStatistic.add(i.copy());
281        };
282      }
283
284      @Override
285      public boolean equalsDeep(Base other_) {
286        if (!super.equalsDeep(other_))
287          return false;
288        if (!(other_ instanceof OrderedDistributionIntervalComponent))
289          return false;
290        OrderedDistributionIntervalComponent o = (OrderedDistributionIntervalComponent) other_;
291        return compareDeep(rankOrder, o.rankOrder, true) && compareDeep(intervalStatistic, o.intervalStatistic, true)
292          ;
293      }
294
295      @Override
296      public boolean equalsShallow(Base other_) {
297        if (!super.equalsShallow(other_))
298          return false;
299        if (!(other_ instanceof OrderedDistributionIntervalComponent))
300          return false;
301        OrderedDistributionIntervalComponent o = (OrderedDistributionIntervalComponent) other_;
302        return compareValues(rankOrder, o.rankOrder, true);
303      }
304
305      public boolean isEmpty() {
306        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(rankOrder, intervalStatistic
307          );
308      }
309
310  public String fhirType() {
311    return "OrderedDistribution.interval";
312
313  }
314
315  }
316
317    /**
318     * A description of the content and value of the statistic.
319     */
320    @Child(name = "description", type = {StringType.class}, order=0, min=0, max=1, modifier=false, summary=false)
321    @Description(shortDefinition="A description of the content and value of the statistic", formalDefinition="A description of the content and value of the statistic." )
322    protected StringType description;
323
324    /**
325     * Footnotes and/or explanatory notes.
326     */
327    @Child(name = "note", type = {Annotation.class}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
328    @Description(shortDefinition="Footnotes and/or explanatory notes", formalDefinition="Footnotes and/or explanatory notes." )
329    protected List<Annotation> note;
330
331    /**
332     * Number of intervals in an array, eg 4 for quartiles.
333     */
334    @Child(name = "numberOfIntervals", type = {IntegerType.class}, order=2, min=1, max=1, modifier=false, summary=true)
335    @Description(shortDefinition="Number of intervals in an array, eg 4 for quartiles", formalDefinition="Number of intervals in an array, eg 4 for quartiles." )
336    protected IntegerType numberOfIntervals;
337
338    /**
339     * Bottom of first interval.
340     */
341    @Child(name = "bottomOfFirstInterval", type = {Quantity.class}, order=3, min=0, max=1, modifier=false, summary=false)
342    @Description(shortDefinition="Bottom of first interval", formalDefinition="Bottom of first interval." )
343    protected Quantity bottomOfFirstInterval;
344
345    /**
346     * Interval.
347     */
348    @Child(name = "interval", type = {}, order=4, min=1, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
349    @Description(shortDefinition="Interval", formalDefinition="Interval." )
350    protected List<OrderedDistributionIntervalComponent> interval;
351
352    /**
353     * Singular value of the statistic at the upper bound of the interval.
354     */
355    @Child(name = "topOfInterval", type = {Quantity.class}, order=5, min=0, max=1, modifier=false, summary=false)
356    @Description(shortDefinition="Singular value of the statistic at the upper bound of the interval", formalDefinition="Singular value of the statistic at the upper bound of the interval." )
357    protected Quantity topOfInterval;
358
359    private static final long serialVersionUID = -1559333328L;
360
361  /**
362   * Constructor
363   */
364    public OrderedDistribution() {
365      super();
366    }
367
368  /**
369   * Constructor
370   */
371    public OrderedDistribution(int numberOfIntervals, OrderedDistributionIntervalComponent interval) {
372      super();
373      this.setNumberOfIntervals(numberOfIntervals);
374      this.addInterval(interval);
375    }
376
377    /**
378     * @return {@link #description} (A description of the content and value of the statistic.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
379     */
380    public StringType getDescriptionElement() { 
381      if (this.description == null)
382        if (Configuration.errorOnAutoCreate())
383          throw new Error("Attempt to auto-create OrderedDistribution.description");
384        else if (Configuration.doAutoCreate())
385          this.description = new StringType(); // bb
386      return this.description;
387    }
388
389    public boolean hasDescriptionElement() { 
390      return this.description != null && !this.description.isEmpty();
391    }
392
393    public boolean hasDescription() { 
394      return this.description != null && !this.description.isEmpty();
395    }
396
397    /**
398     * @param value {@link #description} (A description of the content and value of the statistic.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
399     */
400    public OrderedDistribution setDescriptionElement(StringType value) { 
401      this.description = value;
402      return this;
403    }
404
405    /**
406     * @return A description of the content and value of the statistic.
407     */
408    public String getDescription() { 
409      return this.description == null ? null : this.description.getValue();
410    }
411
412    /**
413     * @param value A description of the content and value of the statistic.
414     */
415    public OrderedDistribution setDescription(String value) { 
416      if (Utilities.noString(value))
417        this.description = null;
418      else {
419        if (this.description == null)
420          this.description = new StringType();
421        this.description.setValue(value);
422      }
423      return this;
424    }
425
426    /**
427     * @return {@link #note} (Footnotes and/or explanatory notes.)
428     */
429    public List<Annotation> getNote() { 
430      if (this.note == null)
431        this.note = new ArrayList<Annotation>();
432      return this.note;
433    }
434
435    /**
436     * @return Returns a reference to <code>this</code> for easy method chaining
437     */
438    public OrderedDistribution setNote(List<Annotation> theNote) { 
439      this.note = theNote;
440      return this;
441    }
442
443    public boolean hasNote() { 
444      if (this.note == null)
445        return false;
446      for (Annotation item : this.note)
447        if (!item.isEmpty())
448          return true;
449      return false;
450    }
451
452    public Annotation addNote() { //3
453      Annotation t = new Annotation();
454      if (this.note == null)
455        this.note = new ArrayList<Annotation>();
456      this.note.add(t);
457      return t;
458    }
459
460    public OrderedDistribution addNote(Annotation t) { //3
461      if (t == null)
462        return this;
463      if (this.note == null)
464        this.note = new ArrayList<Annotation>();
465      this.note.add(t);
466      return this;
467    }
468
469    /**
470     * @return The first repetition of repeating field {@link #note}, creating it if it does not already exist {3}
471     */
472    public Annotation getNoteFirstRep() { 
473      if (getNote().isEmpty()) {
474        addNote();
475      }
476      return getNote().get(0);
477    }
478
479    /**
480     * @return {@link #numberOfIntervals} (Number of intervals in an array, eg 4 for quartiles.). This is the underlying object with id, value and extensions. The accessor "getNumberOfIntervals" gives direct access to the value
481     */
482    public IntegerType getNumberOfIntervalsElement() { 
483      if (this.numberOfIntervals == null)
484        if (Configuration.errorOnAutoCreate())
485          throw new Error("Attempt to auto-create OrderedDistribution.numberOfIntervals");
486        else if (Configuration.doAutoCreate())
487          this.numberOfIntervals = new IntegerType(); // bb
488      return this.numberOfIntervals;
489    }
490
491    public boolean hasNumberOfIntervalsElement() { 
492      return this.numberOfIntervals != null && !this.numberOfIntervals.isEmpty();
493    }
494
495    public boolean hasNumberOfIntervals() { 
496      return this.numberOfIntervals != null && !this.numberOfIntervals.isEmpty();
497    }
498
499    /**
500     * @param value {@link #numberOfIntervals} (Number of intervals in an array, eg 4 for quartiles.). This is the underlying object with id, value and extensions. The accessor "getNumberOfIntervals" gives direct access to the value
501     */
502    public OrderedDistribution setNumberOfIntervalsElement(IntegerType value) { 
503      this.numberOfIntervals = value;
504      return this;
505    }
506
507    /**
508     * @return Number of intervals in an array, eg 4 for quartiles.
509     */
510    public int getNumberOfIntervals() { 
511      return this.numberOfIntervals == null || this.numberOfIntervals.isEmpty() ? 0 : this.numberOfIntervals.getValue();
512    }
513
514    /**
515     * @param value Number of intervals in an array, eg 4 for quartiles.
516     */
517    public OrderedDistribution setNumberOfIntervals(int value) { 
518        if (this.numberOfIntervals == null)
519          this.numberOfIntervals = new IntegerType();
520        this.numberOfIntervals.setValue(value);
521      return this;
522    }
523
524    /**
525     * @return {@link #bottomOfFirstInterval} (Bottom of first interval.)
526     */
527    public Quantity getBottomOfFirstInterval() { 
528      if (this.bottomOfFirstInterval == null)
529        if (Configuration.errorOnAutoCreate())
530          throw new Error("Attempt to auto-create OrderedDistribution.bottomOfFirstInterval");
531        else if (Configuration.doAutoCreate())
532          this.bottomOfFirstInterval = new Quantity(); // cc
533      return this.bottomOfFirstInterval;
534    }
535
536    public boolean hasBottomOfFirstInterval() { 
537      return this.bottomOfFirstInterval != null && !this.bottomOfFirstInterval.isEmpty();
538    }
539
540    /**
541     * @param value {@link #bottomOfFirstInterval} (Bottom of first interval.)
542     */
543    public OrderedDistribution setBottomOfFirstInterval(Quantity value) { 
544      this.bottomOfFirstInterval = value;
545      return this;
546    }
547
548    /**
549     * @return {@link #interval} (Interval.)
550     */
551    public List<OrderedDistributionIntervalComponent> getInterval() { 
552      if (this.interval == null)
553        this.interval = new ArrayList<OrderedDistributionIntervalComponent>();
554      return this.interval;
555    }
556
557    /**
558     * @return Returns a reference to <code>this</code> for easy method chaining
559     */
560    public OrderedDistribution setInterval(List<OrderedDistributionIntervalComponent> theInterval) { 
561      this.interval = theInterval;
562      return this;
563    }
564
565    public boolean hasInterval() { 
566      if (this.interval == null)
567        return false;
568      for (OrderedDistributionIntervalComponent item : this.interval)
569        if (!item.isEmpty())
570          return true;
571      return false;
572    }
573
574    public OrderedDistributionIntervalComponent addInterval() { //3
575      OrderedDistributionIntervalComponent t = new OrderedDistributionIntervalComponent();
576      if (this.interval == null)
577        this.interval = new ArrayList<OrderedDistributionIntervalComponent>();
578      this.interval.add(t);
579      return t;
580    }
581
582    public OrderedDistribution addInterval(OrderedDistributionIntervalComponent t) { //3
583      if (t == null)
584        return this;
585      if (this.interval == null)
586        this.interval = new ArrayList<OrderedDistributionIntervalComponent>();
587      this.interval.add(t);
588      return this;
589    }
590
591    /**
592     * @return The first repetition of repeating field {@link #interval}, creating it if it does not already exist {3}
593     */
594    public OrderedDistributionIntervalComponent getIntervalFirstRep() { 
595      if (getInterval().isEmpty()) {
596        addInterval();
597      }
598      return getInterval().get(0);
599    }
600
601    /**
602     * @return {@link #topOfInterval} (Singular value of the statistic at the upper bound of the interval.)
603     */
604    public Quantity getTopOfInterval() { 
605      if (this.topOfInterval == null)
606        if (Configuration.errorOnAutoCreate())
607          throw new Error("Attempt to auto-create OrderedDistribution.topOfInterval");
608        else if (Configuration.doAutoCreate())
609          this.topOfInterval = new Quantity(); // cc
610      return this.topOfInterval;
611    }
612
613    public boolean hasTopOfInterval() { 
614      return this.topOfInterval != null && !this.topOfInterval.isEmpty();
615    }
616
617    /**
618     * @param value {@link #topOfInterval} (Singular value of the statistic at the upper bound of the interval.)
619     */
620    public OrderedDistribution setTopOfInterval(Quantity value) { 
621      this.topOfInterval = value;
622      return this;
623    }
624
625      protected void listChildren(List<Property> children) {
626        super.listChildren(children);
627        children.add(new Property("description", "string", "A description of the content and value of the statistic.", 0, 1, description));
628        children.add(new Property("note", "Annotation", "Footnotes and/or explanatory notes.", 0, java.lang.Integer.MAX_VALUE, note));
629        children.add(new Property("numberOfIntervals", "integer", "Number of intervals in an array, eg 4 for quartiles.", 0, 1, numberOfIntervals));
630        children.add(new Property("bottomOfFirstInterval", "Quantity", "Bottom of first interval.", 0, 1, bottomOfFirstInterval));
631        children.add(new Property("interval", "", "Interval.", 0, java.lang.Integer.MAX_VALUE, interval));
632        children.add(new Property("topOfInterval", "Quantity", "Singular value of the statistic at the upper bound of the interval.", 0, 1, topOfInterval));
633      }
634
635      @Override
636      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
637        switch (_hash) {
638        case -1724546052: /*description*/  return new Property("description", "string", "A description of the content and value of the statistic.", 0, 1, description);
639        case 3387378: /*note*/  return new Property("note", "Annotation", "Footnotes and/or explanatory notes.", 0, java.lang.Integer.MAX_VALUE, note);
640        case -569541330: /*numberOfIntervals*/  return new Property("numberOfIntervals", "integer", "Number of intervals in an array, eg 4 for quartiles.", 0, 1, numberOfIntervals);
641        case 37889363: /*bottomOfFirstInterval*/  return new Property("bottomOfFirstInterval", "Quantity", "Bottom of first interval.", 0, 1, bottomOfFirstInterval);
642        case 570418373: /*interval*/  return new Property("interval", "", "Interval.", 0, java.lang.Integer.MAX_VALUE, interval);
643        case 691816177: /*topOfInterval*/  return new Property("topOfInterval", "Quantity", "Singular value of the statistic at the upper bound of the interval.", 0, 1, topOfInterval);
644        default: return super.getNamedProperty(_hash, _name, _checkValid);
645        }
646
647      }
648
649      @Override
650      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
651        switch (hash) {
652        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // StringType
653        case 3387378: /*note*/ return this.note == null ? new Base[0] : this.note.toArray(new Base[this.note.size()]); // Annotation
654        case -569541330: /*numberOfIntervals*/ return this.numberOfIntervals == null ? new Base[0] : new Base[] {this.numberOfIntervals}; // IntegerType
655        case 37889363: /*bottomOfFirstInterval*/ return this.bottomOfFirstInterval == null ? new Base[0] : new Base[] {this.bottomOfFirstInterval}; // Quantity
656        case 570418373: /*interval*/ return this.interval == null ? new Base[0] : this.interval.toArray(new Base[this.interval.size()]); // OrderedDistributionIntervalComponent
657        case 691816177: /*topOfInterval*/ return this.topOfInterval == null ? new Base[0] : new Base[] {this.topOfInterval}; // Quantity
658        default: return super.getProperty(hash, name, checkValid);
659        }
660
661      }
662
663      @Override
664      public Base setProperty(int hash, String name, Base value) throws FHIRException {
665        switch (hash) {
666        case -1724546052: // description
667          this.description = TypeConvertor.castToString(value); // StringType
668          return value;
669        case 3387378: // note
670          this.getNote().add(TypeConvertor.castToAnnotation(value)); // Annotation
671          return value;
672        case -569541330: // numberOfIntervals
673          this.numberOfIntervals = TypeConvertor.castToInteger(value); // IntegerType
674          return value;
675        case 37889363: // bottomOfFirstInterval
676          this.bottomOfFirstInterval = TypeConvertor.castToQuantity(value); // Quantity
677          return value;
678        case 570418373: // interval
679          this.getInterval().add((OrderedDistributionIntervalComponent) value); // OrderedDistributionIntervalComponent
680          return value;
681        case 691816177: // topOfInterval
682          this.topOfInterval = TypeConvertor.castToQuantity(value); // Quantity
683          return value;
684        default: return super.setProperty(hash, name, value);
685        }
686
687      }
688
689      @Override
690      public Base setProperty(String name, Base value) throws FHIRException {
691        if (name.equals("description")) {
692          this.description = TypeConvertor.castToString(value); // StringType
693        } else if (name.equals("note")) {
694          this.getNote().add(TypeConvertor.castToAnnotation(value));
695        } else if (name.equals("numberOfIntervals")) {
696          this.numberOfIntervals = TypeConvertor.castToInteger(value); // IntegerType
697        } else if (name.equals("bottomOfFirstInterval")) {
698          this.bottomOfFirstInterval = TypeConvertor.castToQuantity(value); // Quantity
699        } else if (name.equals("interval")) {
700          this.getInterval().add((OrderedDistributionIntervalComponent) value);
701        } else if (name.equals("topOfInterval")) {
702          this.topOfInterval = TypeConvertor.castToQuantity(value); // Quantity
703        } else
704          return super.setProperty(name, value);
705        return value;
706      }
707
708      @Override
709      public Base makeProperty(int hash, String name) throws FHIRException {
710        switch (hash) {
711        case -1724546052:  return getDescriptionElement();
712        case 3387378:  return addNote(); 
713        case -569541330:  return getNumberOfIntervalsElement();
714        case 37889363:  return getBottomOfFirstInterval();
715        case 570418373:  return addInterval(); 
716        case 691816177:  return getTopOfInterval();
717        default: return super.makeProperty(hash, name);
718        }
719
720      }
721
722      @Override
723      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
724        switch (hash) {
725        case -1724546052: /*description*/ return new String[] {"string"};
726        case 3387378: /*note*/ return new String[] {"Annotation"};
727        case -569541330: /*numberOfIntervals*/ return new String[] {"integer"};
728        case 37889363: /*bottomOfFirstInterval*/ return new String[] {"Quantity"};
729        case 570418373: /*interval*/ return new String[] {};
730        case 691816177: /*topOfInterval*/ return new String[] {"Quantity"};
731        default: return super.getTypesForProperty(hash, name);
732        }
733
734      }
735
736      @Override
737      public Base addChild(String name) throws FHIRException {
738        if (name.equals("description")) {
739          throw new FHIRException("Cannot call addChild on a singleton property OrderedDistribution.description");
740        }
741        else if (name.equals("note")) {
742          return addNote();
743        }
744        else if (name.equals("numberOfIntervals")) {
745          throw new FHIRException("Cannot call addChild on a singleton property OrderedDistribution.numberOfIntervals");
746        }
747        else if (name.equals("bottomOfFirstInterval")) {
748          this.bottomOfFirstInterval = new Quantity();
749          return this.bottomOfFirstInterval;
750        }
751        else if (name.equals("interval")) {
752          return addInterval();
753        }
754        else if (name.equals("topOfInterval")) {
755          this.topOfInterval = new Quantity();
756          return this.topOfInterval;
757        }
758        else
759          return super.addChild(name);
760      }
761
762  public String fhirType() {
763    return "OrderedDistribution";
764
765  }
766
767      public OrderedDistribution copy() {
768        OrderedDistribution dst = new OrderedDistribution();
769        copyValues(dst);
770        return dst;
771      }
772
773      public void copyValues(OrderedDistribution dst) {
774        super.copyValues(dst);
775        dst.description = description == null ? null : description.copy();
776        if (note != null) {
777          dst.note = new ArrayList<Annotation>();
778          for (Annotation i : note)
779            dst.note.add(i.copy());
780        };
781        dst.numberOfIntervals = numberOfIntervals == null ? null : numberOfIntervals.copy();
782        dst.bottomOfFirstInterval = bottomOfFirstInterval == null ? null : bottomOfFirstInterval.copy();
783        if (interval != null) {
784          dst.interval = new ArrayList<OrderedDistributionIntervalComponent>();
785          for (OrderedDistributionIntervalComponent i : interval)
786            dst.interval.add(i.copy());
787        };
788        dst.topOfInterval = topOfInterval == null ? null : topOfInterval.copy();
789      }
790
791      protected OrderedDistribution typedCopy() {
792        return copy();
793      }
794
795      @Override
796      public boolean equalsDeep(Base other_) {
797        if (!super.equalsDeep(other_))
798          return false;
799        if (!(other_ instanceof OrderedDistribution))
800          return false;
801        OrderedDistribution o = (OrderedDistribution) other_;
802        return compareDeep(description, o.description, true) && compareDeep(note, o.note, true) && compareDeep(numberOfIntervals, o.numberOfIntervals, true)
803           && compareDeep(bottomOfFirstInterval, o.bottomOfFirstInterval, true) && compareDeep(interval, o.interval, true)
804           && compareDeep(topOfInterval, o.topOfInterval, true);
805      }
806
807      @Override
808      public boolean equalsShallow(Base other_) {
809        if (!super.equalsShallow(other_))
810          return false;
811        if (!(other_ instanceof OrderedDistribution))
812          return false;
813        OrderedDistribution o = (OrderedDistribution) other_;
814        return compareValues(description, o.description, true) && compareValues(numberOfIntervals, o.numberOfIntervals, true)
815          ;
816      }
817
818      public boolean isEmpty() {
819        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(description, note, numberOfIntervals
820          , bottomOfFirstInterval, interval, topOfInterval);
821      }
822
823
824}
825