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.Date; 034import java.util.List; 035 036import org.hl7.fhir.exceptions.FHIRException; 037import org.hl7.fhir.instance.model.api.ICompositeType; 038 039import ca.uhn.fhir.model.api.annotation.Child; 040import ca.uhn.fhir.model.api.annotation.DatatypeDef; 041import ca.uhn.fhir.model.api.annotation.Description; 042 043/** 044 * A text note which also contains information about who made the statement and 045 * when. 046 */ 047@DatatypeDef(name = "Annotation") 048public class Annotation extends Type implements ICompositeType { 049 050 /** 051 * The individual responsible for making the annotation. 052 */ 053 @Child(name = "author", type = { Practitioner.class, Patient.class, RelatedPerson.class, Organization.class, 054 StringType.class }, order = 0, min = 0, max = 1, modifier = false, summary = true) 055 @Description(shortDefinition = "Individual responsible for the annotation", formalDefinition = "The individual responsible for making the annotation.") 056 protected Type author; 057 058 /** 059 * Indicates when this particular annotation was made. 060 */ 061 @Child(name = "time", type = { DateTimeType.class }, order = 1, min = 0, max = 1, modifier = false, summary = true) 062 @Description(shortDefinition = "When the annotation was made", formalDefinition = "Indicates when this particular annotation was made.") 063 protected DateTimeType time; 064 065 /** 066 * The text of the annotation in markdown format. 067 */ 068 @Child(name = "text", type = { MarkdownType.class }, order = 2, min = 1, max = 1, modifier = false, summary = true) 069 @Description(shortDefinition = "The annotation - text content (as markdown)", formalDefinition = "The text of the annotation in markdown format.") 070 protected MarkdownType text; 071 072 private static final long serialVersionUID = 1324090545L; 073 074 /** 075 * Constructor 076 */ 077 public Annotation() { 078 super(); 079 } 080 081 /** 082 * Constructor 083 */ 084 public Annotation(MarkdownType text) { 085 super(); 086 this.text = text; 087 } 088 089 /** 090 * @return {@link #author} (The individual responsible for making the 091 * annotation.) 092 */ 093 public Type getAuthor() { 094 return this.author; 095 } 096 097 /** 098 * @return {@link #author} (The individual responsible for making the 099 * annotation.) 100 */ 101 public Reference getAuthorReference() throws FHIRException { 102 if (this.author == null) 103 this.author = new Reference(); 104 if (!(this.author instanceof Reference)) 105 throw new FHIRException("Type mismatch: the type Reference was expected, but " + this.author.getClass().getName() 106 + " was encountered"); 107 return (Reference) this.author; 108 } 109 110 public boolean hasAuthorReference() { 111 return this != null && this.author instanceof Reference; 112 } 113 114 /** 115 * @return {@link #author} (The individual responsible for making the 116 * annotation.) 117 */ 118 public StringType getAuthorStringType() throws FHIRException { 119 if (this.author == null) 120 this.author = new StringType(); 121 if (!(this.author instanceof StringType)) 122 throw new FHIRException("Type mismatch: the type StringType was expected, but " + this.author.getClass().getName() 123 + " was encountered"); 124 return (StringType) this.author; 125 } 126 127 public boolean hasAuthorStringType() { 128 return this != null && this.author instanceof StringType; 129 } 130 131 public boolean hasAuthor() { 132 return this.author != null && !this.author.isEmpty(); 133 } 134 135 /** 136 * @param value {@link #author} (The individual responsible for making the 137 * annotation.) 138 */ 139 public Annotation setAuthor(Type value) { 140 if (value != null && !(value instanceof Reference || value instanceof StringType)) 141 throw new Error("Not the right type for Annotation.author[x]: " + value.fhirType()); 142 this.author = value; 143 return this; 144 } 145 146 /** 147 * @return {@link #time} (Indicates when this particular annotation was made.). 148 * This is the underlying object with id, value and extensions. The 149 * accessor "getTime" gives direct access to the value 150 */ 151 public DateTimeType getTimeElement() { 152 if (this.time == null) 153 if (Configuration.errorOnAutoCreate()) 154 throw new Error("Attempt to auto-create Annotation.time"); 155 else if (Configuration.doAutoCreate()) 156 this.time = new DateTimeType(); // bb 157 return this.time; 158 } 159 160 public boolean hasTimeElement() { 161 return this.time != null && !this.time.isEmpty(); 162 } 163 164 public boolean hasTime() { 165 return this.time != null && !this.time.isEmpty(); 166 } 167 168 /** 169 * @param value {@link #time} (Indicates when this particular annotation was 170 * made.). This is the underlying object with id, value and 171 * extensions. The accessor "getTime" gives direct access to the 172 * value 173 */ 174 public Annotation setTimeElement(DateTimeType value) { 175 this.time = value; 176 return this; 177 } 178 179 /** 180 * @return Indicates when this particular annotation was made. 181 */ 182 public Date getTime() { 183 return this.time == null ? null : this.time.getValue(); 184 } 185 186 /** 187 * @param value Indicates when this particular annotation was made. 188 */ 189 public Annotation setTime(Date value) { 190 if (value == null) 191 this.time = null; 192 else { 193 if (this.time == null) 194 this.time = new DateTimeType(); 195 this.time.setValue(value); 196 } 197 return this; 198 } 199 200 /** 201 * @return {@link #text} (The text of the annotation in markdown format.). This 202 * is the underlying object with id, value and extensions. The accessor 203 * "getText" gives direct access to the value 204 */ 205 public MarkdownType getTextElement() { 206 if (this.text == null) 207 if (Configuration.errorOnAutoCreate()) 208 throw new Error("Attempt to auto-create Annotation.text"); 209 else if (Configuration.doAutoCreate()) 210 this.text = new MarkdownType(); // bb 211 return this.text; 212 } 213 214 public boolean hasTextElement() { 215 return this.text != null && !this.text.isEmpty(); 216 } 217 218 public boolean hasText() { 219 return this.text != null && !this.text.isEmpty(); 220 } 221 222 /** 223 * @param value {@link #text} (The text of the annotation in markdown format.). 224 * This is the underlying object with id, value and extensions. The 225 * accessor "getText" gives direct access to the value 226 */ 227 public Annotation setTextElement(MarkdownType value) { 228 this.text = value; 229 return this; 230 } 231 232 /** 233 * @return The text of the annotation in markdown format. 234 */ 235 public String getText() { 236 return this.text == null ? null : this.text.getValue(); 237 } 238 239 /** 240 * @param value The text of the annotation in markdown format. 241 */ 242 public Annotation setText(String value) { 243 if (this.text == null) 244 this.text = new MarkdownType(); 245 this.text.setValue(value); 246 return this; 247 } 248 249 protected void listChildren(List<Property> children) { 250 super.listChildren(children); 251 children.add(new Property("author[x]", "Reference(Practitioner|Patient|RelatedPerson|Organization)|string", 252 "The individual responsible for making the annotation.", 0, 1, author)); 253 children.add(new Property("time", "dateTime", "Indicates when this particular annotation was made.", 0, 1, time)); 254 children.add(new Property("text", "markdown", "The text of the annotation in markdown format.", 0, 1, text)); 255 } 256 257 @Override 258 public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException { 259 switch (_hash) { 260 case 1475597077: 261 /* author[x] */ return new Property("author[x]", 262 "Reference(Practitioner|Patient|RelatedPerson|Organization)|string", 263 "The individual responsible for making the annotation.", 0, 1, author); 264 case -1406328437: 265 /* author */ return new Property("author[x]", "Reference(Practitioner|Patient|RelatedPerson|Organization)|string", 266 "The individual responsible for making the annotation.", 0, 1, author); 267 case 305515008: 268 /* authorReference */ return new Property("author[x]", 269 "Reference(Practitioner|Patient|RelatedPerson|Organization)|string", 270 "The individual responsible for making the annotation.", 0, 1, author); 271 case 290249084: 272 /* authorString */ return new Property("author[x]", 273 "Reference(Practitioner|Patient|RelatedPerson|Organization)|string", 274 "The individual responsible for making the annotation.", 0, 1, author); 275 case 3560141: 276 /* time */ return new Property("time", "dateTime", "Indicates when this particular annotation was made.", 0, 1, 277 time); 278 case 3556653: 279 /* text */ return new Property("text", "markdown", "The text of the annotation in markdown format.", 0, 1, text); 280 default: 281 return super.getNamedProperty(_hash, _name, _checkValid); 282 } 283 284 } 285 286 @Override 287 public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException { 288 switch (hash) { 289 case -1406328437: 290 /* author */ return this.author == null ? new Base[0] : new Base[] { this.author }; // Type 291 case 3560141: 292 /* time */ return this.time == null ? new Base[0] : new Base[] { this.time }; // DateTimeType 293 case 3556653: 294 /* text */ return this.text == null ? new Base[0] : new Base[] { this.text }; // MarkdownType 295 default: 296 return super.getProperty(hash, name, checkValid); 297 } 298 299 } 300 301 @Override 302 public Base setProperty(int hash, String name, Base value) throws FHIRException { 303 switch (hash) { 304 case -1406328437: // author 305 this.author = castToType(value); // Type 306 return value; 307 case 3560141: // time 308 this.time = castToDateTime(value); // DateTimeType 309 return value; 310 case 3556653: // text 311 this.text = castToMarkdown(value); // MarkdownType 312 return value; 313 default: 314 return super.setProperty(hash, name, value); 315 } 316 317 } 318 319 @Override 320 public Base setProperty(String name, Base value) throws FHIRException { 321 if (name.equals("author[x]")) { 322 this.author = castToType(value); // Type 323 } else if (name.equals("time")) { 324 this.time = castToDateTime(value); // DateTimeType 325 } else if (name.equals("text")) { 326 this.text = castToMarkdown(value); // MarkdownType 327 } else 328 return super.setProperty(name, value); 329 return value; 330 } 331 332 @Override 333 public void removeChild(String name, Base value) throws FHIRException { 334 if (name.equals("author[x]")) { 335 this.author = null; 336 } else if (name.equals("time")) { 337 this.time = null; 338 } else if (name.equals("text")) { 339 this.text = null; 340 } else 341 super.removeChild(name, value); 342 343 } 344 345 @Override 346 public Base makeProperty(int hash, String name) throws FHIRException { 347 switch (hash) { 348 case 1475597077: 349 return getAuthor(); 350 case -1406328437: 351 return getAuthor(); 352 case 3560141: 353 return getTimeElement(); 354 case 3556653: 355 return getTextElement(); 356 default: 357 return super.makeProperty(hash, name); 358 } 359 360 } 361 362 @Override 363 public String[] getTypesForProperty(int hash, String name) throws FHIRException { 364 switch (hash) { 365 case -1406328437: 366 /* author */ return new String[] { "Reference", "string" }; 367 case 3560141: 368 /* time */ return new String[] { "dateTime" }; 369 case 3556653: 370 /* text */ return new String[] { "markdown" }; 371 default: 372 return super.getTypesForProperty(hash, name); 373 } 374 375 } 376 377 @Override 378 public Base addChild(String name) throws FHIRException { 379 if (name.equals("authorReference")) { 380 this.author = new Reference(); 381 return this.author; 382 } else if (name.equals("authorString")) { 383 this.author = new StringType(); 384 return this.author; 385 } else if (name.equals("time")) { 386 throw new FHIRException("Cannot call addChild on a singleton property Annotation.time"); 387 } else if (name.equals("text")) { 388 throw new FHIRException("Cannot call addChild on a singleton property Annotation.text"); 389 } else 390 return super.addChild(name); 391 } 392 393 public String fhirType() { 394 return "Annotation"; 395 396 } 397 398 public Annotation copy() { 399 Annotation dst = new Annotation(); 400 copyValues(dst); 401 return dst; 402 } 403 404 public void copyValues(Annotation dst) { 405 super.copyValues(dst); 406 dst.author = author == null ? null : author.copy(); 407 dst.time = time == null ? null : time.copy(); 408 dst.text = text == null ? null : text.copy(); 409 } 410 411 protected Annotation typedCopy() { 412 return copy(); 413 } 414 415 @Override 416 public boolean equalsDeep(Base other_) { 417 if (!super.equalsDeep(other_)) 418 return false; 419 if (!(other_ instanceof Annotation)) 420 return false; 421 Annotation o = (Annotation) other_; 422 return compareDeep(author, o.author, true) && compareDeep(time, o.time, true) && compareDeep(text, o.text, true); 423 } 424 425 @Override 426 public boolean equalsShallow(Base other_) { 427 if (!super.equalsShallow(other_)) 428 return false; 429 if (!(other_ instanceof Annotation)) 430 return false; 431 Annotation o = (Annotation) other_; 432 return compareValues(time, o.time, true) && compareValues(text, o.text, true); 433 } 434 435 public boolean isEmpty() { 436 return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(author, time, text); 437 } 438 439}