001package org.hl7.fhir.r4.model;
002
003/*
004  Copyright (c) 2011+, HL7, Inc.
005  All rights reserved.
006  
007  Redistribution and use in source and binary forms, with or without modification, 
008  are permitted provided that the following conditions are met:
009  
010   * Redistributions of source code must retain the above copyright notice, this 
011     list of conditions and the following disclaimer.
012   * Redistributions in binary form must reproduce the above copyright notice, 
013     this list of conditions and the following disclaimer in the documentation 
014     and/or other materials provided with the distribution.
015   * Neither the name of HL7 nor the names of its contributors may be used to 
016     endorse or promote products derived from this software without specific 
017     prior written permission.
018  
019  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
020  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
021  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
022  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
023  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
024  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
025  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
026  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
027  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
028  POSSIBILITY OF SUCH DAMAGE.
029  
030*/
031
032// Generated on Tue, May 12, 2020 07:26+1000 for FHIR v4.0.1
033import java.util.List;
034
035import org.hl7.fhir.exceptions.FHIRException;
036import org.hl7.fhir.instance.model.api.ICompositeType;
037
038import ca.uhn.fhir.model.api.annotation.Child;
039import ca.uhn.fhir.model.api.annotation.DatatypeDef;
040import ca.uhn.fhir.model.api.annotation.Description;
041
042/**
043 * A relationship of two Quantity values - expressed as a numerator and a
044 * denominator.
045 */
046@DatatypeDef(name = "Ratio")
047public class Ratio extends Type implements ICompositeType {
048
049  /**
050   * The value of the numerator.
051   */
052  @Child(name = "numerator", type = { Quantity.class }, order = 0, min = 0, max = 1, modifier = false, summary = true)
053  @Description(shortDefinition = "Numerator value", formalDefinition = "The value of the numerator.")
054  protected Quantity numerator;
055
056  /**
057   * The value of the denominator.
058   */
059  @Child(name = "denominator", type = { Quantity.class }, order = 1, min = 0, max = 1, modifier = false, summary = true)
060  @Description(shortDefinition = "Denominator value", formalDefinition = "The value of the denominator.")
061  protected Quantity denominator;
062
063  private static final long serialVersionUID = 479922563L;
064
065  /**
066   * Constructor
067   */
068  public Ratio() {
069    super();
070  }
071
072  /**
073   * @return {@link #numerator} (The value of the numerator.)
074   */
075  public Quantity getNumerator() {
076    if (this.numerator == null)
077      if (Configuration.errorOnAutoCreate())
078        throw new Error("Attempt to auto-create Ratio.numerator");
079      else if (Configuration.doAutoCreate())
080        this.numerator = new Quantity(); // cc
081    return this.numerator;
082  }
083
084  public boolean hasNumerator() {
085    return this.numerator != null && !this.numerator.isEmpty();
086  }
087
088  /**
089   * @param value {@link #numerator} (The value of the numerator.)
090   */
091  public Ratio setNumerator(Quantity value) {
092    this.numerator = value;
093    return this;
094  }
095
096  /**
097   * @return {@link #denominator} (The value of the denominator.)
098   */
099  public Quantity getDenominator() {
100    if (this.denominator == null)
101      if (Configuration.errorOnAutoCreate())
102        throw new Error("Attempt to auto-create Ratio.denominator");
103      else if (Configuration.doAutoCreate())
104        this.denominator = new Quantity(); // cc
105    return this.denominator;
106  }
107
108  public boolean hasDenominator() {
109    return this.denominator != null && !this.denominator.isEmpty();
110  }
111
112  /**
113   * @param value {@link #denominator} (The value of the denominator.)
114   */
115  public Ratio setDenominator(Quantity value) {
116    this.denominator = value;
117    return this;
118  }
119
120  protected void listChildren(List<Property> children) {
121    super.listChildren(children);
122    children.add(new Property("numerator", "Quantity", "The value of the numerator.", 0, 1, numerator));
123    children.add(new Property("denominator", "Quantity", "The value of the denominator.", 0, 1, denominator));
124  }
125
126  @Override
127  public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
128    switch (_hash) {
129    case 1747334793:
130      /* numerator */ return new Property("numerator", "Quantity", "The value of the numerator.", 0, 1, numerator);
131    case -1983274394:
132      /* denominator */ return new Property("denominator", "Quantity", "The value of the denominator.", 0, 1,
133          denominator);
134    default:
135      return super.getNamedProperty(_hash, _name, _checkValid);
136    }
137
138  }
139
140  @Override
141  public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
142    switch (hash) {
143    case 1747334793:
144      /* numerator */ return this.numerator == null ? new Base[0] : new Base[] { this.numerator }; // Quantity
145    case -1983274394:
146      /* denominator */ return this.denominator == null ? new Base[0] : new Base[] { this.denominator }; // Quantity
147    default:
148      return super.getProperty(hash, name, checkValid);
149    }
150
151  }
152
153  @Override
154  public Base setProperty(int hash, String name, Base value) throws FHIRException {
155    switch (hash) {
156    case 1747334793: // numerator
157      this.numerator = castToQuantity(value); // Quantity
158      return value;
159    case -1983274394: // denominator
160      this.denominator = castToQuantity(value); // Quantity
161      return value;
162    default:
163      return super.setProperty(hash, name, value);
164    }
165
166  }
167
168  @Override
169  public Base setProperty(String name, Base value) throws FHIRException {
170    if (name.equals("numerator")) {
171      this.numerator = castToQuantity(value); // Quantity
172    } else if (name.equals("denominator")) {
173      this.denominator = castToQuantity(value); // Quantity
174    } else
175      return super.setProperty(name, value);
176    return value;
177  }
178
179  @Override
180  public Base makeProperty(int hash, String name) throws FHIRException {
181    switch (hash) {
182    case 1747334793:
183      return getNumerator();
184    case -1983274394:
185      return getDenominator();
186    default:
187      return super.makeProperty(hash, name);
188    }
189
190  }
191
192  @Override
193  public String[] getTypesForProperty(int hash, String name) throws FHIRException {
194    switch (hash) {
195    case 1747334793:
196      /* numerator */ return new String[] { "Quantity" };
197    case -1983274394:
198      /* denominator */ return new String[] { "Quantity" };
199    default:
200      return super.getTypesForProperty(hash, name);
201    }
202
203  }
204
205  @Override
206  public Base addChild(String name) throws FHIRException {
207    if (name.equals("numerator")) {
208      this.numerator = new Quantity();
209      return this.numerator;
210    } else if (name.equals("denominator")) {
211      this.denominator = new Quantity();
212      return this.denominator;
213    } else
214      return super.addChild(name);
215  }
216
217  public String fhirType() {
218    return "Ratio";
219
220  }
221
222  public Ratio copy() {
223    Ratio dst = new Ratio();
224    copyValues(dst);
225    return dst;
226  }
227
228  public void copyValues(Ratio dst) {
229    super.copyValues(dst);
230    dst.numerator = numerator == null ? null : numerator.copy();
231    dst.denominator = denominator == null ? null : denominator.copy();
232  }
233
234  protected Ratio typedCopy() {
235    return copy();
236  }
237
238  @Override
239  public boolean equalsDeep(Base other_) {
240    if (!super.equalsDeep(other_))
241      return false;
242    if (!(other_ instanceof Ratio))
243      return false;
244    Ratio o = (Ratio) other_;
245    return compareDeep(numerator, o.numerator, true) && compareDeep(denominator, o.denominator, true);
246  }
247
248  @Override
249  public boolean equalsShallow(Base other_) {
250    if (!super.equalsShallow(other_))
251      return false;
252    if (!(other_ instanceof Ratio))
253      return false;
254    Ratio o = (Ratio) other_;
255    return true;
256  }
257
258  public boolean isEmpty() {
259    return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(numerator, denominator);
260  }
261
262}