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