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 * Specifies clinical/business/etc. metadata that can be used to retrieve, index 044 * and/or categorize an artifact. This metadata can either be specific to the 045 * applicable population (e.g., age category, DRG) or the specific context of 046 * care (e.g., venue, care setting, provider of care). 047 */ 048@DatatypeDef(name = "UsageContext") 049public class UsageContext extends Type implements ICompositeType { 050 051 /** 052 * A code that identifies the type of context being specified by this usage 053 * context. 054 */ 055 @Child(name = "code", type = { Coding.class }, order = 0, min = 1, max = 1, modifier = false, summary = true) 056 @Description(shortDefinition = "Type of context being specified", formalDefinition = "A code that identifies the type of context being specified by this usage context.") 057 @ca.uhn.fhir.model.api.annotation.Binding(valueSet = "http://hl7.org/fhir/ValueSet/usage-context-type") 058 protected Coding code; 059 060 /** 061 * A value that defines the context specified in this context of use. The 062 * interpretation of the value is defined by the code. 063 */ 064 @Child(name = "value", type = { CodeableConcept.class, Quantity.class, Range.class, PlanDefinition.class, 065 ResearchStudy.class, InsurancePlan.class, HealthcareService.class, Group.class, Location.class, 066 Organization.class }, order = 1, min = 1, max = 1, modifier = false, summary = true) 067 @Description(shortDefinition = "Value that defines the context", formalDefinition = "A value that defines the context specified in this context of use. The interpretation of the value is defined by the code.") 068 @ca.uhn.fhir.model.api.annotation.Binding(valueSet = "http://hl7.org/fhir/ValueSet/use-context") 069 protected Type value; 070 071 private static final long serialVersionUID = -1092486508L; 072 073 /** 074 * Constructor 075 */ 076 public UsageContext() { 077 super(); 078 } 079 080 /** 081 * Constructor 082 */ 083 public UsageContext(Coding code, Type value) { 084 super(); 085 this.code = code; 086 this.value = value; 087 } 088 089 /** 090 * @return {@link #code} (A code that identifies the type of context being 091 * specified by this usage context.) 092 */ 093 public Coding getCode() { 094 if (this.code == null) 095 if (Configuration.errorOnAutoCreate()) 096 throw new Error("Attempt to auto-create UsageContext.code"); 097 else if (Configuration.doAutoCreate()) 098 this.code = new Coding(); // cc 099 return this.code; 100 } 101 102 public boolean hasCode() { 103 return this.code != null && !this.code.isEmpty(); 104 } 105 106 /** 107 * @param value {@link #code} (A code that identifies the type of context being 108 * specified by this usage context.) 109 */ 110 public UsageContext setCode(Coding value) { 111 this.code = value; 112 return this; 113 } 114 115 /** 116 * @return {@link #value} (A value that defines the context specified in this 117 * context of use. The interpretation of the value is defined by the 118 * code.) 119 */ 120 public Type getValue() { 121 return this.value; 122 } 123 124 /** 125 * @return {@link #value} (A value that defines the context specified in this 126 * context of use. The interpretation of the value is defined by the 127 * code.) 128 */ 129 public CodeableConcept getValueCodeableConcept() throws FHIRException { 130 if (this.value == null) 131 this.value = new CodeableConcept(); 132 if (!(this.value instanceof CodeableConcept)) 133 throw new FHIRException("Type mismatch: the type CodeableConcept was expected, but " 134 + this.value.getClass().getName() + " was encountered"); 135 return (CodeableConcept) this.value; 136 } 137 138 public boolean hasValueCodeableConcept() { 139 return this != null && this.value instanceof CodeableConcept; 140 } 141 142 /** 143 * @return {@link #value} (A value that defines the context specified in this 144 * context of use. The interpretation of the value is defined by the 145 * code.) 146 */ 147 public Quantity getValueQuantity() throws FHIRException { 148 if (this.value == null) 149 this.value = new Quantity(); 150 if (!(this.value instanceof Quantity)) 151 throw new FHIRException( 152 "Type mismatch: the type Quantity was expected, but " + this.value.getClass().getName() + " was encountered"); 153 return (Quantity) this.value; 154 } 155 156 public boolean hasValueQuantity() { 157 return this != null && this.value instanceof Quantity; 158 } 159 160 /** 161 * @return {@link #value} (A value that defines the context specified in this 162 * context of use. The interpretation of the value is defined by the 163 * code.) 164 */ 165 public Range getValueRange() throws FHIRException { 166 if (this.value == null) 167 this.value = new Range(); 168 if (!(this.value instanceof Range)) 169 throw new FHIRException( 170 "Type mismatch: the type Range was expected, but " + this.value.getClass().getName() + " was encountered"); 171 return (Range) this.value; 172 } 173 174 public boolean hasValueRange() { 175 return this != null && this.value instanceof Range; 176 } 177 178 /** 179 * @return {@link #value} (A value that defines the context specified in this 180 * context of use. The interpretation of the value is defined by the 181 * code.) 182 */ 183 public Reference getValueReference() throws FHIRException { 184 if (this.value == null) 185 this.value = new Reference(); 186 if (!(this.value instanceof Reference)) 187 throw new FHIRException("Type mismatch: the type Reference was expected, but " + this.value.getClass().getName() 188 + " was encountered"); 189 return (Reference) this.value; 190 } 191 192 public boolean hasValueReference() { 193 return this != null && this.value instanceof Reference; 194 } 195 196 public boolean hasValue() { 197 return this.value != null && !this.value.isEmpty(); 198 } 199 200 /** 201 * @param value {@link #value} (A value that defines the context specified in 202 * this context of use. The interpretation of the value is defined 203 * by the code.) 204 */ 205 public UsageContext setValue(Type value) { 206 if (value != null && !(value instanceof CodeableConcept || value instanceof Quantity || value instanceof Range 207 || value instanceof Reference)) 208 throw new Error("Not the right type for UsageContext.value[x]: " + value.fhirType()); 209 this.value = value; 210 return this; 211 } 212 213 protected void listChildren(List<Property> children) { 214 super.listChildren(children); 215 children.add(new Property("code", "Coding", 216 "A code that identifies the type of context being specified by this usage context.", 0, 1, code)); 217 children.add(new Property("value[x]", 218 "CodeableConcept|Quantity|Range|Reference(PlanDefinition|ResearchStudy|InsurancePlan|HealthcareService|Group|Location|Organization)", 219 "A value that defines the context specified in this context of use. The interpretation of the value is defined by the code.", 220 0, 1, value)); 221 } 222 223 @Override 224 public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException { 225 switch (_hash) { 226 case 3059181: 227 /* code */ return new Property("code", "Coding", 228 "A code that identifies the type of context being specified by this usage context.", 0, 1, code); 229 case -1410166417: 230 /* value[x] */ return new Property("value[x]", 231 "CodeableConcept|Quantity|Range|Reference(PlanDefinition|ResearchStudy|InsurancePlan|HealthcareService|Group|Location|Organization)", 232 "A value that defines the context specified in this context of use. The interpretation of the value is defined by the code.", 233 0, 1, value); 234 case 111972721: 235 /* value */ return new Property("value[x]", 236 "CodeableConcept|Quantity|Range|Reference(PlanDefinition|ResearchStudy|InsurancePlan|HealthcareService|Group|Location|Organization)", 237 "A value that defines the context specified in this context of use. The interpretation of the value is defined by the code.", 238 0, 1, value); 239 case 924902896: 240 /* valueCodeableConcept */ return new Property("value[x]", 241 "CodeableConcept|Quantity|Range|Reference(PlanDefinition|ResearchStudy|InsurancePlan|HealthcareService|Group|Location|Organization)", 242 "A value that defines the context specified in this context of use. The interpretation of the value is defined by the code.", 243 0, 1, value); 244 case -2029823716: 245 /* valueQuantity */ return new Property("value[x]", 246 "CodeableConcept|Quantity|Range|Reference(PlanDefinition|ResearchStudy|InsurancePlan|HealthcareService|Group|Location|Organization)", 247 "A value that defines the context specified in this context of use. The interpretation of the value is defined by the code.", 248 0, 1, value); 249 case 2030761548: 250 /* valueRange */ return new Property("value[x]", 251 "CodeableConcept|Quantity|Range|Reference(PlanDefinition|ResearchStudy|InsurancePlan|HealthcareService|Group|Location|Organization)", 252 "A value that defines the context specified in this context of use. The interpretation of the value is defined by the code.", 253 0, 1, value); 254 case 1755241690: 255 /* valueReference */ return new Property("value[x]", 256 "CodeableConcept|Quantity|Range|Reference(PlanDefinition|ResearchStudy|InsurancePlan|HealthcareService|Group|Location|Organization)", 257 "A value that defines the context specified in this context of use. The interpretation of the value is defined by the code.", 258 0, 1, value); 259 default: 260 return super.getNamedProperty(_hash, _name, _checkValid); 261 } 262 263 } 264 265 @Override 266 public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException { 267 switch (hash) { 268 case 3059181: 269 /* code */ return this.code == null ? new Base[0] : new Base[] { this.code }; // Coding 270 case 111972721: 271 /* value */ return this.value == null ? new Base[0] : new Base[] { this.value }; // Type 272 default: 273 return super.getProperty(hash, name, checkValid); 274 } 275 276 } 277 278 @Override 279 public Base setProperty(int hash, String name, Base value) throws FHIRException { 280 switch (hash) { 281 case 3059181: // code 282 this.code = castToCoding(value); // Coding 283 return value; 284 case 111972721: // value 285 this.value = castToType(value); // Type 286 return value; 287 default: 288 return super.setProperty(hash, name, value); 289 } 290 291 } 292 293 @Override 294 public Base setProperty(String name, Base value) throws FHIRException { 295 if (name.equals("code")) { 296 this.code = castToCoding(value); // Coding 297 } else if (name.equals("value[x]")) { 298 this.value = castToType(value); // Type 299 } else 300 return super.setProperty(name, value); 301 return value; 302 } 303 304 @Override 305 public void removeChild(String name, Base value) throws FHIRException { 306 if (name.equals("code")) { 307 this.code = null; 308 } else if (name.equals("value[x]")) { 309 this.value = null; 310 } else 311 super.removeChild(name, value); 312 313 } 314 315 @Override 316 public Base makeProperty(int hash, String name) throws FHIRException { 317 switch (hash) { 318 case 3059181: 319 return getCode(); 320 case -1410166417: 321 return getValue(); 322 case 111972721: 323 return getValue(); 324 default: 325 return super.makeProperty(hash, name); 326 } 327 328 } 329 330 @Override 331 public String[] getTypesForProperty(int hash, String name) throws FHIRException { 332 switch (hash) { 333 case 3059181: 334 /* code */ return new String[] { "Coding" }; 335 case 111972721: 336 /* value */ return new String[] { "CodeableConcept", "Quantity", "Range", "Reference" }; 337 default: 338 return super.getTypesForProperty(hash, name); 339 } 340 341 } 342 343 @Override 344 public Base addChild(String name) throws FHIRException { 345 if (name.equals("code")) { 346 this.code = new Coding(); 347 return this.code; 348 } else if (name.equals("valueCodeableConcept")) { 349 this.value = new CodeableConcept(); 350 return this.value; 351 } else if (name.equals("valueQuantity")) { 352 this.value = new Quantity(); 353 return this.value; 354 } else if (name.equals("valueRange")) { 355 this.value = new Range(); 356 return this.value; 357 } else if (name.equals("valueReference")) { 358 this.value = new Reference(); 359 return this.value; 360 } else 361 return super.addChild(name); 362 } 363 364 public String fhirType() { 365 return "UsageContext"; 366 367 } 368 369 public UsageContext copy() { 370 UsageContext dst = new UsageContext(); 371 copyValues(dst); 372 return dst; 373 } 374 375 public void copyValues(UsageContext dst) { 376 super.copyValues(dst); 377 dst.code = code == null ? null : code.copy(); 378 dst.value = value == null ? null : value.copy(); 379 } 380 381 protected UsageContext typedCopy() { 382 return copy(); 383 } 384 385 @Override 386 public boolean equalsDeep(Base other_) { 387 if (!super.equalsDeep(other_)) 388 return false; 389 if (!(other_ instanceof UsageContext)) 390 return false; 391 UsageContext o = (UsageContext) other_; 392 return compareDeep(code, o.code, true) && compareDeep(value, o.value, true); 393 } 394 395 @Override 396 public boolean equalsShallow(Base other_) { 397 if (!super.equalsShallow(other_)) 398 return false; 399 if (!(other_ instanceof UsageContext)) 400 return false; 401 UsageContext o = (UsageContext) other_; 402 return true; 403 } 404 405 public boolean isEmpty() { 406 return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(code, value); 407 } 408 409}