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 Thu, Mar 23, 2023 19:59+1100 for FHIR v5.0.0
033
034import java.util.ArrayList;
035import java.util.Date;
036import java.util.List;
037import org.hl7.fhir.r5.model.Enumerations.*;
038import org.hl7.fhir.instance.model.api.IBaseDatatypeElement;
039import org.hl7.fhir.exceptions.FHIRException;
040import org.hl7.fhir.instance.model.api.ICompositeType;
041import ca.uhn.fhir.model.api.annotation.Child;
042import ca.uhn.fhir.model.api.annotation.ChildOrder;
043import ca.uhn.fhir.model.api.annotation.DatatypeDef;
044import ca.uhn.fhir.model.api.annotation.Description;
045import ca.uhn.fhir.model.api.annotation.Block;
046
047/**
048 * CodeableReference Type: A reference to a resource (by instance), or instead, a reference to a concept defined in a terminology or ontology (by class).
049 */
050@DatatypeDef(name="CodeableReference")
051public class CodeableReference extends DataType implements ICompositeType {
052
053    /**
054     * A reference to a concept - e.g. the information is identified by its general class to the degree of precision found in the terminology.
055     */
056    @Child(name = "concept", type = {CodeableConcept.class}, order=0, min=0, max=1, modifier=false, summary=true)
057    @Description(shortDefinition="Reference to a concept (by class)", formalDefinition="A reference to a concept - e.g. the information is identified by its general class to the degree of precision found in the terminology." )
058    protected CodeableConcept concept;
059
060    /**
061     * A reference to a resource the provides exact details about the information being referenced.
062     */
063    @Child(name = "reference", type = {Reference.class}, order=1, min=0, max=1, modifier=false, summary=true)
064    @Description(shortDefinition="Reference to a resource (by instance)", formalDefinition="A reference to a resource the provides exact details about the information being referenced." )
065    protected Reference reference;
066
067    private static final long serialVersionUID = 2070287445L;
068
069  /**
070   * Constructor
071   */
072    public CodeableReference() {
073      super();
074    }
075
076    /**
077     * @return {@link #concept} (A reference to a concept - e.g. the information is identified by its general class to the degree of precision found in the terminology.)
078     */
079    public CodeableConcept getConcept() { 
080      if (this.concept == null)
081        if (Configuration.errorOnAutoCreate())
082          throw new Error("Attempt to auto-create CodeableReference.concept");
083        else if (Configuration.doAutoCreate())
084          this.concept = new CodeableConcept(); // cc
085      return this.concept;
086    }
087
088    public boolean hasConcept() { 
089      return this.concept != null && !this.concept.isEmpty();
090    }
091
092    /**
093     * @param value {@link #concept} (A reference to a concept - e.g. the information is identified by its general class to the degree of precision found in the terminology.)
094     */
095    public CodeableReference setConcept(CodeableConcept value) { 
096      this.concept = value;
097      return this;
098    }
099
100    /**
101     * @return {@link #reference} (A reference to a resource the provides exact details about the information being referenced.)
102     */
103    public Reference getReference() { 
104      if (this.reference == null)
105        if (Configuration.errorOnAutoCreate())
106          throw new Error("Attempt to auto-create CodeableReference.reference");
107        else if (Configuration.doAutoCreate())
108          this.reference = new Reference(); // cc
109      return this.reference;
110    }
111
112    public boolean hasReference() { 
113      return this.reference != null && !this.reference.isEmpty();
114    }
115
116    /**
117     * @param value {@link #reference} (A reference to a resource the provides exact details about the information being referenced.)
118     */
119    public CodeableReference setReference(Reference value) { 
120      this.reference = value;
121      return this;
122    }
123
124      protected void listChildren(List<Property> children) {
125        super.listChildren(children);
126        children.add(new Property("concept", "CodeableConcept", "A reference to a concept - e.g. the information is identified by its general class to the degree of precision found in the terminology.", 0, 1, concept));
127        children.add(new Property("reference", "Reference", "A reference to a resource the provides exact details about the information being referenced.", 0, 1, reference));
128      }
129
130      @Override
131      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
132        switch (_hash) {
133        case 951024232: /*concept*/  return new Property("concept", "CodeableConcept", "A reference to a concept - e.g. the information is identified by its general class to the degree of precision found in the terminology.", 0, 1, concept);
134        case -925155509: /*reference*/  return new Property("reference", "Reference", "A reference to a resource the provides exact details about the information being referenced.", 0, 1, reference);
135        default: 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 951024232: /*concept*/ return this.concept == null ? new Base[0] : new Base[] {this.concept}; // CodeableConcept
144        case -925155509: /*reference*/ return this.reference == null ? new Base[0] : new Base[] {this.reference}; // Reference
145        default: return super.getProperty(hash, name, checkValid);
146        }
147
148      }
149
150      @Override
151      public Base setProperty(int hash, String name, Base value) throws FHIRException {
152        switch (hash) {
153        case 951024232: // concept
154          this.concept = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
155          return value;
156        case -925155509: // reference
157          this.reference = TypeConvertor.castToReference(value); // Reference
158          return value;
159        default: return super.setProperty(hash, name, value);
160        }
161
162      }
163
164      @Override
165      public Base setProperty(String name, Base value) throws FHIRException {
166        if (name.equals("concept")) {
167          this.concept = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
168        } else if (name.equals("reference")) {
169          this.reference = TypeConvertor.castToReference(value); // Reference
170        } else
171          return super.setProperty(name, value);
172        return value;
173      }
174
175  @Override
176  public void removeChild(String name, Base value) throws FHIRException {
177        if (name.equals("concept")) {
178          this.concept = null;
179        } else if (name.equals("reference")) {
180          this.reference = null;
181        } else
182          super.removeChild(name, value);
183        
184      }
185
186      @Override
187      public Base makeProperty(int hash, String name) throws FHIRException {
188        switch (hash) {
189        case 951024232:  return getConcept();
190        case -925155509:  return getReference();
191        default: return super.makeProperty(hash, name);
192        }
193
194      }
195
196      @Override
197      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
198        switch (hash) {
199        case 951024232: /*concept*/ return new String[] {"CodeableConcept"};
200        case -925155509: /*reference*/ return new String[] {"Reference"};
201        default: return super.getTypesForProperty(hash, name);
202        }
203
204      }
205
206      @Override
207      public Base addChild(String name) throws FHIRException {
208        if (name.equals("concept")) {
209          this.concept = new CodeableConcept();
210          return this.concept;
211        }
212        else if (name.equals("reference")) {
213          this.reference = new Reference();
214          return this.reference;
215        }
216        else
217          return super.addChild(name);
218      }
219
220  public String fhirType() {
221    return "CodeableReference";
222
223  }
224
225      public CodeableReference copy() {
226        CodeableReference dst = new CodeableReference();
227        copyValues(dst);
228        return dst;
229      }
230
231      public void copyValues(CodeableReference dst) {
232        super.copyValues(dst);
233        dst.concept = concept == null ? null : concept.copy();
234        dst.reference = reference == null ? null : reference.copy();
235      }
236
237      protected CodeableReference typedCopy() {
238        return copy();
239      }
240
241      @Override
242      public boolean equalsDeep(Base other_) {
243        if (!super.equalsDeep(other_))
244          return false;
245        if (!(other_ instanceof CodeableReference))
246          return false;
247        CodeableReference o = (CodeableReference) other_;
248        return compareDeep(concept, o.concept, true) && compareDeep(reference, o.reference, true);
249      }
250
251      @Override
252      public boolean equalsShallow(Base other_) {
253        if (!super.equalsShallow(other_))
254          return false;
255        if (!(other_ instanceof CodeableReference))
256          return false;
257        CodeableReference o = (CodeableReference) other_;
258        return true;
259      }
260
261      public boolean isEmpty() {
262        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(concept, reference);
263      }
264
265// Manual code (from Configuration.txt):
266
267      public CodeableReference(CodeableConcept cc) {
268        super();
269        setConcept(cc);
270      }
271
272      public CodeableReference(Reference ref) {
273        super();
274        setReference(ref);
275      }
276
277// end addition
278
279}
280