001package org.hl7.fhir.dstu3.model; 002 003 004 005/* 006 Copyright (c) 2011+, HL7, Inc. 007 All rights reserved. 008 009 Redistribution and use in source and binary forms, with or without modification, 010 are permitted provided that the following conditions are met: 011 012 * Redistributions of source code must retain the above copyright notice, this 013 list of conditions and the following disclaimer. 014 * Redistributions in binary form must reproduce the above copyright notice, 015 this list of conditions and the following disclaimer in the documentation 016 and/or other materials provided with the distribution. 017 * Neither the name of HL7 nor the names of its contributors may be used to 018 endorse or promote products derived from this software without specific 019 prior written permission. 020 021 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 022 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 023 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 024 IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 025 INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 026 NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 027 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 028 WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 029 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 030 POSSIBILITY OF SUCH DAMAGE. 031 032*/ 033 034// Generated on Fri, Mar 16, 2018 15:21+1100 for FHIR v3.0.x 035import java.util.ArrayList; 036import java.util.List; 037 038import org.hl7.fhir.exceptions.FHIRException; 039import org.hl7.fhir.instance.model.api.ICompositeType; 040import org.hl7.fhir.utilities.Utilities; 041 042import ca.uhn.fhir.model.api.annotation.Child; 043import ca.uhn.fhir.model.api.annotation.DatatypeDef; 044import ca.uhn.fhir.model.api.annotation.Description; 045/** 046 * A concept that may be defined by a formal reference to a terminology or ontology or may be provided by text. 047 */ 048@DatatypeDef(name="CodeableConcept") 049public class CodeableConcept extends Type implements ICompositeType { 050 051 /** 052 * A reference to a code defined by a terminology system. 053 */ 054 @Child(name = "coding", type = {Coding.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true) 055 @Description(shortDefinition="Code defined by a terminology system", formalDefinition="A reference to a code defined by a terminology system." ) 056 protected List<Coding> coding; 057 058 /** 059 * A human language representation of the concept as seen/selected/uttered by the user who entered the data and/or which represents the intended meaning of the user. 060 */ 061 @Child(name = "text", type = {StringType.class}, order=1, min=0, max=1, modifier=false, summary=true) 062 @Description(shortDefinition="Plain text representation of the concept", formalDefinition="A human language representation of the concept as seen/selected/uttered by the user who entered the data and/or which represents the intended meaning of the user." ) 063 protected StringType text; 064 065 private static final long serialVersionUID = 760353246L; 066 067 /** 068 * Constructor 069 */ 070 public CodeableConcept() { 071 super(); 072 } 073 074 /** 075 * @return {@link #coding} (A reference to a code defined by a terminology system.) 076 */ 077 public List<Coding> getCoding() { 078 if (this.coding == null) 079 this.coding = new ArrayList<Coding>(); 080 return this.coding; 081 } 082 083 /** 084 * @return Returns a reference to <code>this</code> for easy method chaining 085 */ 086 public CodeableConcept setCoding(List<Coding> theCoding) { 087 this.coding = theCoding; 088 return this; 089 } 090 091 public boolean hasCoding() { 092 if (this.coding == null) 093 return false; 094 for (Coding item : this.coding) 095 if (!item.isEmpty()) 096 return true; 097 return false; 098 } 099 100 public Coding addCoding() { //3 101 Coding t = new Coding(); 102 if (this.coding == null) 103 this.coding = new ArrayList<Coding>(); 104 this.coding.add(t); 105 return t; 106 } 107 108 public CodeableConcept addCoding(Coding t) { //3 109 if (t == null) 110 return this; 111 if (this.coding == null) 112 this.coding = new ArrayList<Coding>(); 113 this.coding.add(t); 114 return this; 115 } 116 117 /** 118 * @return The first repetition of repeating field {@link #coding}, creating it if it does not already exist 119 */ 120 public Coding getCodingFirstRep() { 121 if (getCoding().isEmpty()) { 122 addCoding(); 123 } 124 return getCoding().get(0); 125 } 126 127 /** 128 * @return {@link #text} (A human language representation of the concept as seen/selected/uttered by the user who entered the data and/or which represents the intended meaning of the user.). This is the underlying object with id, value and extensions. The accessor "getText" gives direct access to the value 129 */ 130 public StringType getTextElement() { 131 if (this.text == null) 132 if (Configuration.errorOnAutoCreate()) 133 throw new Error("Attempt to auto-create CodeableConcept.text"); 134 else if (Configuration.doAutoCreate()) 135 this.text = new StringType(); // bb 136 return this.text; 137 } 138 139 public boolean hasTextElement() { 140 return this.text != null && !this.text.isEmpty(); 141 } 142 143 public boolean hasText() { 144 return this.text != null && !this.text.isEmpty(); 145 } 146 147 /** 148 * @param value {@link #text} (A human language representation of the concept as seen/selected/uttered by the user who entered the data and/or which represents the intended meaning of the user.). This is the underlying object with id, value and extensions. The accessor "getText" gives direct access to the value 149 */ 150 public CodeableConcept setTextElement(StringType value) { 151 this.text = value; 152 return this; 153 } 154 155 /** 156 * @return A human language representation of the concept as seen/selected/uttered by the user who entered the data and/or which represents the intended meaning of the user. 157 */ 158 public String getText() { 159 return this.text == null ? null : this.text.getValue(); 160 } 161 162 /** 163 * @param value A human language representation of the concept as seen/selected/uttered by the user who entered the data and/or which represents the intended meaning of the user. 164 */ 165 public CodeableConcept setText(String value) { 166 if (Utilities.noString(value)) 167 this.text = null; 168 else { 169 if (this.text == null) 170 this.text = new StringType(); 171 this.text.setValue(value); 172 } 173 return this; 174 } 175 176 protected void listChildren(List<Property> children) { 177 super.listChildren(children); 178 children.add(new Property("coding", "Coding", "A reference to a code defined by a terminology system.", 0, java.lang.Integer.MAX_VALUE, coding)); 179 children.add(new Property("text", "string", "A human language representation of the concept as seen/selected/uttered by the user who entered the data and/or which represents the intended meaning of the user.", 0, 1, text)); 180 } 181 182 @Override 183 public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException { 184 switch (_hash) { 185 case -1355086998: /*coding*/ return new Property("coding", "Coding", "A reference to a code defined by a terminology system.", 0, java.lang.Integer.MAX_VALUE, coding); 186 case 3556653: /*text*/ return new Property("text", "string", "A human language representation of the concept as seen/selected/uttered by the user who entered the data and/or which represents the intended meaning of the user.", 0, 1, text); 187 default: return super.getNamedProperty(_hash, _name, _checkValid); 188 } 189 190 } 191 192 @Override 193 public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException { 194 switch (hash) { 195 case -1355086998: /*coding*/ return this.coding == null ? new Base[0] : this.coding.toArray(new Base[this.coding.size()]); // Coding 196 case 3556653: /*text*/ return this.text == null ? new Base[0] : new Base[] {this.text}; // StringType 197 default: return super.getProperty(hash, name, checkValid); 198 } 199 200 } 201 202 @Override 203 public Base setProperty(int hash, String name, Base value) throws FHIRException { 204 switch (hash) { 205 case -1355086998: // coding 206 this.getCoding().add(castToCoding(value)); // Coding 207 return value; 208 case 3556653: // text 209 this.text = castToString(value); // StringType 210 return value; 211 default: return super.setProperty(hash, name, value); 212 } 213 214 } 215 216 @Override 217 public Base setProperty(String name, Base value) throws FHIRException { 218 if (name.equals("coding")) { 219 this.getCoding().add(castToCoding(value)); 220 } else if (name.equals("text")) { 221 this.text = castToString(value); // StringType 222 } else 223 return super.setProperty(name, value); 224 return value; 225 } 226 227 @Override 228 public Base makeProperty(int hash, String name) throws FHIRException { 229 switch (hash) { 230 case -1355086998: return addCoding(); 231 case 3556653: return getTextElement(); 232 default: return super.makeProperty(hash, name); 233 } 234 235 } 236 237 @Override 238 public String[] getTypesForProperty(int hash, String name) throws FHIRException { 239 switch (hash) { 240 case -1355086998: /*coding*/ return new String[] {"Coding"}; 241 case 3556653: /*text*/ return new String[] {"string"}; 242 default: return super.getTypesForProperty(hash, name); 243 } 244 245 } 246 247 @Override 248 public Base addChild(String name) throws FHIRException { 249 if (name.equals("coding")) { 250 return addCoding(); 251 } 252 else if (name.equals("text")) { 253 throw new FHIRException("Cannot call addChild on a singleton property CodeableConcept.text"); 254 } 255 else 256 return super.addChild(name); 257 } 258 259 public String fhirType() { 260 return "CodeableConcept"; 261 262 } 263 264 public CodeableConcept copy() { 265 CodeableConcept dst = new CodeableConcept(); 266 copyValues(dst); 267 if (coding != null) { 268 dst.coding = new ArrayList<Coding>(); 269 for (Coding i : coding) 270 dst.coding.add(i.copy()); 271 }; 272 dst.text = text == null ? null : text.copy(); 273 return dst; 274 } 275 276 protected CodeableConcept typedCopy() { 277 return copy(); 278 } 279 280 @Override 281 public boolean equalsDeep(Base other_) { 282 if (!super.equalsDeep(other_)) 283 return false; 284 if (!(other_ instanceof CodeableConcept)) 285 return false; 286 CodeableConcept o = (CodeableConcept) other_; 287 return compareDeep(coding, o.coding, true) && compareDeep(text, o.text, true); 288 } 289 290 @Override 291 public boolean equalsShallow(Base other_) { 292 if (!super.equalsShallow(other_)) 293 return false; 294 if (!(other_ instanceof CodeableConcept)) 295 return false; 296 CodeableConcept o = (CodeableConcept) other_; 297 return compareValues(text, o.text, true); 298 } 299 300 public boolean isEmpty() { 301 return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(coding, text); 302 } 303 304 // added from java-adornments.txt: 305 306 public boolean hasCoding(String system, String code) { 307 for (Coding c : getCoding()) { 308 if (system.equals(c.getSystem()) && code.equals(c.getCode())) 309 return true; 310 } 311 return false; 312 } 313 314 public CodeableConcept(Coding code) { 315 super(); 316 addCoding(code); 317 } 318 319 320 321 // end addition 322 323 324}