001package org.hl7.fhir.dstu3.model;
002
003/*
004  Copyright (c) 2011+, HL7, Inc.
005  All rights reserved.
006  
007  Redistribution and use in source and binary forms, with or without modification, 
008  are permitted provided that the following conditions are met:
009  
010   * Redistributions of source code must retain the above copyright notice, this 
011     list of conditions and the following disclaimer.
012   * Redistributions in binary form must reproduce the above copyright notice, 
013     this list of conditions and the following disclaimer in the documentation 
014     and/or other materials provided with the distribution.
015   * Neither the name of HL7 nor the names of its contributors may be used to 
016     endorse or promote products derived from this software without specific 
017     prior written permission.
018  
019  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
020  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
021  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
022  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
023  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
024  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
025  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
026  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
027  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
028  POSSIBILITY OF SUCH DAMAGE.
029  
030*/
031
032// Generated on Mon, Apr 17, 2017 17:38-0400 for FHIR v3.0.1
033
034import java.util.*;
035
036import ca.uhn.fhir.model.api.annotation.Child;
037import ca.uhn.fhir.model.api.annotation.ChildOrder;
038import ca.uhn.fhir.model.api.annotation.Description;
039import ca.uhn.fhir.model.api.annotation.DatatypeDef;
040import ca.uhn.fhir.model.api.annotation.Block;
041import org.hl7.fhir.instance.model.api.*;
042import org.hl7.fhir.exceptions.FHIRException;
043/**
044 * A relationship of two Quantity values - expressed as a numerator and a 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> childrenList) {
121        super.listChildren(childrenList);
122        childrenList.add(new Property("numerator", "Quantity", "The value of the numerator.", 0, java.lang.Integer.MAX_VALUE, numerator));
123        childrenList.add(new Property("denominator", "Quantity", "The value of the denominator.", 0, java.lang.Integer.MAX_VALUE, denominator));
124      }
125
126      @Override
127      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
128        switch (hash) {
129        case 1747334793: /*numerator*/ return this.numerator == null ? new Base[0] : new Base[] {this.numerator}; // Quantity
130        case -1983274394: /*denominator*/ return this.denominator == null ? new Base[0] : new Base[] {this.denominator}; // Quantity
131        default: return super.getProperty(hash, name, checkValid);
132        }
133
134      }
135
136      @Override
137      public Base setProperty(int hash, String name, Base value) throws FHIRException {
138        switch (hash) {
139        case 1747334793: // numerator
140          this.numerator = castToQuantity(value); // Quantity
141          return value;
142        case -1983274394: // denominator
143          this.denominator = castToQuantity(value); // Quantity
144          return value;
145        default: return super.setProperty(hash, name, value);
146        }
147
148      }
149
150      @Override
151      public Base setProperty(String name, Base value) throws FHIRException {
152        if (name.equals("numerator")) {
153          this.numerator = castToQuantity(value); // Quantity
154        } else if (name.equals("denominator")) {
155          this.denominator = castToQuantity(value); // Quantity
156        } else
157          return super.setProperty(name, value);
158        return value;
159      }
160
161      @Override
162      public Base makeProperty(int hash, String name) throws FHIRException {
163        switch (hash) {
164        case 1747334793:  return getNumerator(); 
165        case -1983274394:  return getDenominator(); 
166        default: return super.makeProperty(hash, name);
167        }
168
169      }
170
171      @Override
172      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
173        switch (hash) {
174        case 1747334793: /*numerator*/ return new String[] {"Quantity"};
175        case -1983274394: /*denominator*/ return new String[] {"Quantity"};
176        default: return super.getTypesForProperty(hash, name);
177        }
178
179      }
180
181      @Override
182      public Base addChild(String name) throws FHIRException {
183        if (name.equals("numerator")) {
184          this.numerator = new Quantity();
185          return this.numerator;
186        }
187        else if (name.equals("denominator")) {
188          this.denominator = new Quantity();
189          return this.denominator;
190        }
191        else
192          return super.addChild(name);
193      }
194
195  public String fhirType() {
196    return "Ratio";
197
198  }
199
200      public Ratio copy() {
201        Ratio dst = new Ratio();
202        copyValues(dst);
203        dst.numerator = numerator == null ? null : numerator.copy();
204        dst.denominator = denominator == null ? null : denominator.copy();
205        return dst;
206      }
207
208      protected Ratio typedCopy() {
209        return copy();
210      }
211
212      @Override
213      public boolean equalsDeep(Base other) {
214        if (!super.equalsDeep(other))
215          return false;
216        if (!(other instanceof Ratio))
217          return false;
218        Ratio o = (Ratio) other;
219        return compareDeep(numerator, o.numerator, true) && compareDeep(denominator, o.denominator, true)
220          ;
221      }
222
223      @Override
224      public boolean equalsShallow(Base other) {
225        if (!super.equalsShallow(other))
226          return false;
227        if (!(other instanceof Ratio))
228          return false;
229        Ratio o = (Ratio) other;
230        return true;
231      }
232
233      public boolean isEmpty() {
234        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(numerator, denominator);
235      }
236
237
238}
239