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.utilities.Utilities; 038import org.hl7.fhir.r5.model.Enumerations.*; 039import org.hl7.fhir.instance.model.api.IBaseDatatypeElement; 040import org.hl7.fhir.exceptions.FHIRException; 041import org.hl7.fhir.instance.model.api.ICompositeType; 042import ca.uhn.fhir.model.api.annotation.Child; 043import ca.uhn.fhir.model.api.annotation.ChildOrder; 044import ca.uhn.fhir.model.api.annotation.DatatypeDef; 045import ca.uhn.fhir.model.api.annotation.Description; 046import ca.uhn.fhir.model.api.annotation.Block; 047 048/** 049 * Availability Type: Availability data for an {item}. 050 */ 051@DatatypeDef(name="Availability") 052public class Availability extends DataType implements ICompositeType { 053 054 @Block() 055 public static class AvailabilityAvailableTimeComponent extends Element implements IBaseDatatypeElement { 056 /** 057 * mon | tue | wed | thu | fri | sat | sun. 058 */ 059 @Child(name = "daysOfWeek", type = {CodeType.class}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true) 060 @Description(shortDefinition="mon | tue | wed | thu | fri | sat | sun", formalDefinition="mon | tue | wed | thu | fri | sat | sun." ) 061 @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/days-of-week") 062 protected List<Enumeration<DaysOfWeek>> daysOfWeek; 063 064 /** 065 * Always available? i.e. 24 hour service. 066 */ 067 @Child(name = "allDay", type = {BooleanType.class}, order=2, min=0, max=1, modifier=false, summary=true) 068 @Description(shortDefinition="Always available? i.e. 24 hour service", formalDefinition="Always available? i.e. 24 hour service." ) 069 protected BooleanType allDay; 070 071 /** 072 * Opening time of day (ignored if allDay = true). 073 */ 074 @Child(name = "availableStartTime", type = {TimeType.class}, order=3, min=0, max=1, modifier=false, summary=true) 075 @Description(shortDefinition="Opening time of day (ignored if allDay = true)", formalDefinition="Opening time of day (ignored if allDay = true)." ) 076 protected TimeType availableStartTime; 077 078 /** 079 * Closing time of day (ignored if allDay = true). 080 */ 081 @Child(name = "availableEndTime", type = {TimeType.class}, order=4, min=0, max=1, modifier=false, summary=true) 082 @Description(shortDefinition="Closing time of day (ignored if allDay = true)", formalDefinition="Closing time of day (ignored if allDay = true)." ) 083 protected TimeType availableEndTime; 084 085 private static final long serialVersionUID = -2139510127L; 086 087 /** 088 * Constructor 089 */ 090 public AvailabilityAvailableTimeComponent() { 091 super(); 092 } 093 094 /** 095 * @return {@link #daysOfWeek} (mon | tue | wed | thu | fri | sat | sun.) 096 */ 097 public List<Enumeration<DaysOfWeek>> getDaysOfWeek() { 098 if (this.daysOfWeek == null) 099 this.daysOfWeek = new ArrayList<Enumeration<DaysOfWeek>>(); 100 return this.daysOfWeek; 101 } 102 103 /** 104 * @return Returns a reference to <code>this</code> for easy method chaining 105 */ 106 public AvailabilityAvailableTimeComponent setDaysOfWeek(List<Enumeration<DaysOfWeek>> theDaysOfWeek) { 107 this.daysOfWeek = theDaysOfWeek; 108 return this; 109 } 110 111 public boolean hasDaysOfWeek() { 112 if (this.daysOfWeek == null) 113 return false; 114 for (Enumeration<DaysOfWeek> item : this.daysOfWeek) 115 if (!item.isEmpty()) 116 return true; 117 return false; 118 } 119 120 /** 121 * @return {@link #daysOfWeek} (mon | tue | wed | thu | fri | sat | sun.) 122 */ 123 public Enumeration<DaysOfWeek> addDaysOfWeekElement() {//2 124 Enumeration<DaysOfWeek> t = new Enumeration<DaysOfWeek>(new DaysOfWeekEnumFactory()); 125 if (this.daysOfWeek == null) 126 this.daysOfWeek = new ArrayList<Enumeration<DaysOfWeek>>(); 127 this.daysOfWeek.add(t); 128 return t; 129 } 130 131 /** 132 * @param value {@link #daysOfWeek} (mon | tue | wed | thu | fri | sat | sun.) 133 */ 134 public AvailabilityAvailableTimeComponent addDaysOfWeek(DaysOfWeek value) { //1 135 Enumeration<DaysOfWeek> t = new Enumeration<DaysOfWeek>(new DaysOfWeekEnumFactory()); 136 t.setValue(value); 137 if (this.daysOfWeek == null) 138 this.daysOfWeek = new ArrayList<Enumeration<DaysOfWeek>>(); 139 this.daysOfWeek.add(t); 140 return this; 141 } 142 143 /** 144 * @param value {@link #daysOfWeek} (mon | tue | wed | thu | fri | sat | sun.) 145 */ 146 public boolean hasDaysOfWeek(DaysOfWeek value) { 147 if (this.daysOfWeek == null) 148 return false; 149 for (Enumeration<DaysOfWeek> v : this.daysOfWeek) 150 if (v.getValue().equals(value)) // code 151 return true; 152 return false; 153 } 154 155 /** 156 * @return {@link #allDay} (Always available? i.e. 24 hour service.). This is the underlying object with id, value and extensions. The accessor "getAllDay" gives direct access to the value 157 */ 158 public BooleanType getAllDayElement() { 159 if (this.allDay == null) 160 if (Configuration.errorOnAutoCreate()) 161 throw new Error("Attempt to auto-create AvailabilityAvailableTimeComponent.allDay"); 162 else if (Configuration.doAutoCreate()) 163 this.allDay = new BooleanType(); // bb 164 return this.allDay; 165 } 166 167 public boolean hasAllDayElement() { 168 return this.allDay != null && !this.allDay.isEmpty(); 169 } 170 171 public boolean hasAllDay() { 172 return this.allDay != null && !this.allDay.isEmpty(); 173 } 174 175 /** 176 * @param value {@link #allDay} (Always available? i.e. 24 hour service.). This is the underlying object with id, value and extensions. The accessor "getAllDay" gives direct access to the value 177 */ 178 public AvailabilityAvailableTimeComponent setAllDayElement(BooleanType value) { 179 this.allDay = value; 180 return this; 181 } 182 183 /** 184 * @return Always available? i.e. 24 hour service. 185 */ 186 public boolean getAllDay() { 187 return this.allDay == null || this.allDay.isEmpty() ? false : this.allDay.getValue(); 188 } 189 190 /** 191 * @param value Always available? i.e. 24 hour service. 192 */ 193 public AvailabilityAvailableTimeComponent setAllDay(boolean value) { 194 if (this.allDay == null) 195 this.allDay = new BooleanType(); 196 this.allDay.setValue(value); 197 return this; 198 } 199 200 /** 201 * @return {@link #availableStartTime} (Opening time of day (ignored if allDay = true).). This is the underlying object with id, value and extensions. The accessor "getAvailableStartTime" gives direct access to the value 202 */ 203 public TimeType getAvailableStartTimeElement() { 204 if (this.availableStartTime == null) 205 if (Configuration.errorOnAutoCreate()) 206 throw new Error("Attempt to auto-create AvailabilityAvailableTimeComponent.availableStartTime"); 207 else if (Configuration.doAutoCreate()) 208 this.availableStartTime = new TimeType(); // bb 209 return this.availableStartTime; 210 } 211 212 public boolean hasAvailableStartTimeElement() { 213 return this.availableStartTime != null && !this.availableStartTime.isEmpty(); 214 } 215 216 public boolean hasAvailableStartTime() { 217 return this.availableStartTime != null && !this.availableStartTime.isEmpty(); 218 } 219 220 /** 221 * @param value {@link #availableStartTime} (Opening time of day (ignored if allDay = true).). This is the underlying object with id, value and extensions. The accessor "getAvailableStartTime" gives direct access to the value 222 */ 223 public AvailabilityAvailableTimeComponent setAvailableStartTimeElement(TimeType value) { 224 this.availableStartTime = value; 225 return this; 226 } 227 228 /** 229 * @return Opening time of day (ignored if allDay = true). 230 */ 231 public String getAvailableStartTime() { 232 return this.availableStartTime == null ? null : this.availableStartTime.getValue(); 233 } 234 235 /** 236 * @param value Opening time of day (ignored if allDay = true). 237 */ 238 public AvailabilityAvailableTimeComponent setAvailableStartTime(String value) { 239 if (value == null) 240 this.availableStartTime = null; 241 else { 242 if (this.availableStartTime == null) 243 this.availableStartTime = new TimeType(); 244 this.availableStartTime.setValue(value); 245 } 246 return this; 247 } 248 249 /** 250 * @return {@link #availableEndTime} (Closing time of day (ignored if allDay = true).). This is the underlying object with id, value and extensions. The accessor "getAvailableEndTime" gives direct access to the value 251 */ 252 public TimeType getAvailableEndTimeElement() { 253 if (this.availableEndTime == null) 254 if (Configuration.errorOnAutoCreate()) 255 throw new Error("Attempt to auto-create AvailabilityAvailableTimeComponent.availableEndTime"); 256 else if (Configuration.doAutoCreate()) 257 this.availableEndTime = new TimeType(); // bb 258 return this.availableEndTime; 259 } 260 261 public boolean hasAvailableEndTimeElement() { 262 return this.availableEndTime != null && !this.availableEndTime.isEmpty(); 263 } 264 265 public boolean hasAvailableEndTime() { 266 return this.availableEndTime != null && !this.availableEndTime.isEmpty(); 267 } 268 269 /** 270 * @param value {@link #availableEndTime} (Closing time of day (ignored if allDay = true).). This is the underlying object with id, value and extensions. The accessor "getAvailableEndTime" gives direct access to the value 271 */ 272 public AvailabilityAvailableTimeComponent setAvailableEndTimeElement(TimeType value) { 273 this.availableEndTime = value; 274 return this; 275 } 276 277 /** 278 * @return Closing time of day (ignored if allDay = true). 279 */ 280 public String getAvailableEndTime() { 281 return this.availableEndTime == null ? null : this.availableEndTime.getValue(); 282 } 283 284 /** 285 * @param value Closing time of day (ignored if allDay = true). 286 */ 287 public AvailabilityAvailableTimeComponent setAvailableEndTime(String value) { 288 if (value == null) 289 this.availableEndTime = null; 290 else { 291 if (this.availableEndTime == null) 292 this.availableEndTime = new TimeType(); 293 this.availableEndTime.setValue(value); 294 } 295 return this; 296 } 297 298 protected void listChildren(List<Property> children) { 299 super.listChildren(children); 300 children.add(new Property("daysOfWeek", "code", "mon | tue | wed | thu | fri | sat | sun.", 0, java.lang.Integer.MAX_VALUE, daysOfWeek)); 301 children.add(new Property("allDay", "boolean", "Always available? i.e. 24 hour service.", 0, 1, allDay)); 302 children.add(new Property("availableStartTime", "time", "Opening time of day (ignored if allDay = true).", 0, 1, availableStartTime)); 303 children.add(new Property("availableEndTime", "time", "Closing time of day (ignored if allDay = true).", 0, 1, availableEndTime)); 304 } 305 306 @Override 307 public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException { 308 switch (_hash) { 309 case 68050338: /*daysOfWeek*/ return new Property("daysOfWeek", "code", "mon | tue | wed | thu | fri | sat | sun.", 0, java.lang.Integer.MAX_VALUE, daysOfWeek); 310 case -1414913477: /*allDay*/ return new Property("allDay", "boolean", "Always available? i.e. 24 hour service.", 0, 1, allDay); 311 case -1039453818: /*availableStartTime*/ return new Property("availableStartTime", "time", "Opening time of day (ignored if allDay = true).", 0, 1, availableStartTime); 312 case 101151551: /*availableEndTime*/ return new Property("availableEndTime", "time", "Closing time of day (ignored if allDay = true).", 0, 1, availableEndTime); 313 default: return super.getNamedProperty(_hash, _name, _checkValid); 314 } 315 316 } 317 318 @Override 319 public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException { 320 switch (hash) { 321 case 68050338: /*daysOfWeek*/ return this.daysOfWeek == null ? new Base[0] : this.daysOfWeek.toArray(new Base[this.daysOfWeek.size()]); // Enumeration<DaysOfWeek> 322 case -1414913477: /*allDay*/ return this.allDay == null ? new Base[0] : new Base[] {this.allDay}; // BooleanType 323 case -1039453818: /*availableStartTime*/ return this.availableStartTime == null ? new Base[0] : new Base[] {this.availableStartTime}; // TimeType 324 case 101151551: /*availableEndTime*/ return this.availableEndTime == null ? new Base[0] : new Base[] {this.availableEndTime}; // TimeType 325 default: return super.getProperty(hash, name, checkValid); 326 } 327 328 } 329 330 @Override 331 public Base setProperty(int hash, String name, Base value) throws FHIRException { 332 switch (hash) { 333 case 68050338: // daysOfWeek 334 value = new DaysOfWeekEnumFactory().fromType(TypeConvertor.castToCode(value)); 335 this.getDaysOfWeek().add((Enumeration) value); // Enumeration<DaysOfWeek> 336 return value; 337 case -1414913477: // allDay 338 this.allDay = TypeConvertor.castToBoolean(value); // BooleanType 339 return value; 340 case -1039453818: // availableStartTime 341 this.availableStartTime = TypeConvertor.castToTime(value); // TimeType 342 return value; 343 case 101151551: // availableEndTime 344 this.availableEndTime = TypeConvertor.castToTime(value); // TimeType 345 return value; 346 default: return super.setProperty(hash, name, value); 347 } 348 349 } 350 351 @Override 352 public Base setProperty(String name, Base value) throws FHIRException { 353 if (name.equals("daysOfWeek")) { 354 value = new DaysOfWeekEnumFactory().fromType(TypeConvertor.castToCode(value)); 355 this.getDaysOfWeek().add((Enumeration) value); 356 } else if (name.equals("allDay")) { 357 this.allDay = TypeConvertor.castToBoolean(value); // BooleanType 358 } else if (name.equals("availableStartTime")) { 359 this.availableStartTime = TypeConvertor.castToTime(value); // TimeType 360 } else if (name.equals("availableEndTime")) { 361 this.availableEndTime = TypeConvertor.castToTime(value); // TimeType 362 } else 363 return super.setProperty(name, value); 364 return value; 365 } 366 367 @Override 368 public void removeChild(String name, Base value) throws FHIRException { 369 if (name.equals("daysOfWeek")) { 370 value = new DaysOfWeekEnumFactory().fromType(TypeConvertor.castToCode(value)); 371 this.getDaysOfWeek().remove((Enumeration) value); 372 } else if (name.equals("allDay")) { 373 this.allDay = null; 374 } else if (name.equals("availableStartTime")) { 375 this.availableStartTime = null; 376 } else if (name.equals("availableEndTime")) { 377 this.availableEndTime = null; 378 } else 379 super.removeChild(name, value); 380 381 } 382 383 @Override 384 public Base makeProperty(int hash, String name) throws FHIRException { 385 switch (hash) { 386 case 68050338: return addDaysOfWeekElement(); 387 case -1414913477: return getAllDayElement(); 388 case -1039453818: return getAvailableStartTimeElement(); 389 case 101151551: return getAvailableEndTimeElement(); 390 default: return super.makeProperty(hash, name); 391 } 392 393 } 394 395 @Override 396 public String[] getTypesForProperty(int hash, String name) throws FHIRException { 397 switch (hash) { 398 case 68050338: /*daysOfWeek*/ return new String[] {"code"}; 399 case -1414913477: /*allDay*/ return new String[] {"boolean"}; 400 case -1039453818: /*availableStartTime*/ return new String[] {"time"}; 401 case 101151551: /*availableEndTime*/ return new String[] {"time"}; 402 default: return super.getTypesForProperty(hash, name); 403 } 404 405 } 406 407 @Override 408 public Base addChild(String name) throws FHIRException { 409 if (name.equals("daysOfWeek")) { 410 throw new FHIRException("Cannot call addChild on a singleton property Availability.availableTime.daysOfWeek"); 411 } 412 else if (name.equals("allDay")) { 413 throw new FHIRException("Cannot call addChild on a singleton property Availability.availableTime.allDay"); 414 } 415 else if (name.equals("availableStartTime")) { 416 throw new FHIRException("Cannot call addChild on a singleton property Availability.availableTime.availableStartTime"); 417 } 418 else if (name.equals("availableEndTime")) { 419 throw new FHIRException("Cannot call addChild on a singleton property Availability.availableTime.availableEndTime"); 420 } 421 else 422 return super.addChild(name); 423 } 424 425 public AvailabilityAvailableTimeComponent copy() { 426 AvailabilityAvailableTimeComponent dst = new AvailabilityAvailableTimeComponent(); 427 copyValues(dst); 428 return dst; 429 } 430 431 public void copyValues(AvailabilityAvailableTimeComponent dst) { 432 super.copyValues(dst); 433 if (daysOfWeek != null) { 434 dst.daysOfWeek = new ArrayList<Enumeration<DaysOfWeek>>(); 435 for (Enumeration<DaysOfWeek> i : daysOfWeek) 436 dst.daysOfWeek.add(i.copy()); 437 }; 438 dst.allDay = allDay == null ? null : allDay.copy(); 439 dst.availableStartTime = availableStartTime == null ? null : availableStartTime.copy(); 440 dst.availableEndTime = availableEndTime == null ? null : availableEndTime.copy(); 441 } 442 443 @Override 444 public boolean equalsDeep(Base other_) { 445 if (!super.equalsDeep(other_)) 446 return false; 447 if (!(other_ instanceof AvailabilityAvailableTimeComponent)) 448 return false; 449 AvailabilityAvailableTimeComponent o = (AvailabilityAvailableTimeComponent) other_; 450 return compareDeep(daysOfWeek, o.daysOfWeek, true) && compareDeep(allDay, o.allDay, true) && compareDeep(availableStartTime, o.availableStartTime, true) 451 && compareDeep(availableEndTime, o.availableEndTime, true); 452 } 453 454 @Override 455 public boolean equalsShallow(Base other_) { 456 if (!super.equalsShallow(other_)) 457 return false; 458 if (!(other_ instanceof AvailabilityAvailableTimeComponent)) 459 return false; 460 AvailabilityAvailableTimeComponent o = (AvailabilityAvailableTimeComponent) other_; 461 return compareValues(daysOfWeek, o.daysOfWeek, true) && compareValues(allDay, o.allDay, true) && compareValues(availableStartTime, o.availableStartTime, true) 462 && compareValues(availableEndTime, o.availableEndTime, true); 463 } 464 465 public boolean isEmpty() { 466 return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(daysOfWeek, allDay, availableStartTime 467 , availableEndTime); 468 } 469 470 public String fhirType() { 471 return "Availability.availableTime"; 472 473 } 474 475 } 476 477 @Block() 478 public static class AvailabilityNotAvailableTimeComponent extends Element implements IBaseDatatypeElement { 479 /** 480 * Reason presented to the user explaining why time not available. 481 */ 482 @Child(name = "description", type = {StringType.class}, order=1, min=0, max=1, modifier=false, summary=true) 483 @Description(shortDefinition="Reason presented to the user explaining why time not available", formalDefinition="Reason presented to the user explaining why time not available." ) 484 protected StringType description; 485 486 /** 487 * Service not available during this period. 488 */ 489 @Child(name = "during", type = {Period.class}, order=2, min=0, max=1, modifier=false, summary=true) 490 @Description(shortDefinition="Service not available during this period", formalDefinition="Service not available during this period." ) 491 protected Period during; 492 493 private static final long serialVersionUID = 310849929L; 494 495 /** 496 * Constructor 497 */ 498 public AvailabilityNotAvailableTimeComponent() { 499 super(); 500 } 501 502 /** 503 * @return {@link #description} (Reason presented to the user explaining why time not available.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value 504 */ 505 public StringType getDescriptionElement() { 506 if (this.description == null) 507 if (Configuration.errorOnAutoCreate()) 508 throw new Error("Attempt to auto-create AvailabilityNotAvailableTimeComponent.description"); 509 else if (Configuration.doAutoCreate()) 510 this.description = new StringType(); // bb 511 return this.description; 512 } 513 514 public boolean hasDescriptionElement() { 515 return this.description != null && !this.description.isEmpty(); 516 } 517 518 public boolean hasDescription() { 519 return this.description != null && !this.description.isEmpty(); 520 } 521 522 /** 523 * @param value {@link #description} (Reason presented to the user explaining why time not available.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value 524 */ 525 public AvailabilityNotAvailableTimeComponent setDescriptionElement(StringType value) { 526 this.description = value; 527 return this; 528 } 529 530 /** 531 * @return Reason presented to the user explaining why time not available. 532 */ 533 public String getDescription() { 534 return this.description == null ? null : this.description.getValue(); 535 } 536 537 /** 538 * @param value Reason presented to the user explaining why time not available. 539 */ 540 public AvailabilityNotAvailableTimeComponent setDescription(String value) { 541 if (Utilities.noString(value)) 542 this.description = null; 543 else { 544 if (this.description == null) 545 this.description = new StringType(); 546 this.description.setValue(value); 547 } 548 return this; 549 } 550 551 /** 552 * @return {@link #during} (Service not available during this period.) 553 */ 554 public Period getDuring() { 555 if (this.during == null) 556 if (Configuration.errorOnAutoCreate()) 557 throw new Error("Attempt to auto-create AvailabilityNotAvailableTimeComponent.during"); 558 else if (Configuration.doAutoCreate()) 559 this.during = new Period(); // cc 560 return this.during; 561 } 562 563 public boolean hasDuring() { 564 return this.during != null && !this.during.isEmpty(); 565 } 566 567 /** 568 * @param value {@link #during} (Service not available during this period.) 569 */ 570 public AvailabilityNotAvailableTimeComponent setDuring(Period value) { 571 this.during = value; 572 return this; 573 } 574 575 protected void listChildren(List<Property> children) { 576 super.listChildren(children); 577 children.add(new Property("description", "string", "Reason presented to the user explaining why time not available.", 0, 1, description)); 578 children.add(new Property("during", "Period", "Service not available during this period.", 0, 1, during)); 579 } 580 581 @Override 582 public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException { 583 switch (_hash) { 584 case -1724546052: /*description*/ return new Property("description", "string", "Reason presented to the user explaining why time not available.", 0, 1, description); 585 case -1320499647: /*during*/ return new Property("during", "Period", "Service not available during this period.", 0, 1, during); 586 default: return super.getNamedProperty(_hash, _name, _checkValid); 587 } 588 589 } 590 591 @Override 592 public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException { 593 switch (hash) { 594 case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // StringType 595 case -1320499647: /*during*/ return this.during == null ? new Base[0] : new Base[] {this.during}; // Period 596 default: return super.getProperty(hash, name, checkValid); 597 } 598 599 } 600 601 @Override 602 public Base setProperty(int hash, String name, Base value) throws FHIRException { 603 switch (hash) { 604 case -1724546052: // description 605 this.description = TypeConvertor.castToString(value); // StringType 606 return value; 607 case -1320499647: // during 608 this.during = TypeConvertor.castToPeriod(value); // Period 609 return value; 610 default: return super.setProperty(hash, name, value); 611 } 612 613 } 614 615 @Override 616 public Base setProperty(String name, Base value) throws FHIRException { 617 if (name.equals("description")) { 618 this.description = TypeConvertor.castToString(value); // StringType 619 } else if (name.equals("during")) { 620 this.during = TypeConvertor.castToPeriod(value); // Period 621 } else 622 return super.setProperty(name, value); 623 return value; 624 } 625 626 @Override 627 public void removeChild(String name, Base value) throws FHIRException { 628 if (name.equals("description")) { 629 this.description = null; 630 } else if (name.equals("during")) { 631 this.during = null; 632 } else 633 super.removeChild(name, value); 634 635 } 636 637 @Override 638 public Base makeProperty(int hash, String name) throws FHIRException { 639 switch (hash) { 640 case -1724546052: return getDescriptionElement(); 641 case -1320499647: return getDuring(); 642 default: return super.makeProperty(hash, name); 643 } 644 645 } 646 647 @Override 648 public String[] getTypesForProperty(int hash, String name) throws FHIRException { 649 switch (hash) { 650 case -1724546052: /*description*/ return new String[] {"string"}; 651 case -1320499647: /*during*/ return new String[] {"Period"}; 652 default: return super.getTypesForProperty(hash, name); 653 } 654 655 } 656 657 @Override 658 public Base addChild(String name) throws FHIRException { 659 if (name.equals("description")) { 660 throw new FHIRException("Cannot call addChild on a singleton property Availability.notAvailableTime.description"); 661 } 662 else if (name.equals("during")) { 663 this.during = new Period(); 664 return this.during; 665 } 666 else 667 return super.addChild(name); 668 } 669 670 public AvailabilityNotAvailableTimeComponent copy() { 671 AvailabilityNotAvailableTimeComponent dst = new AvailabilityNotAvailableTimeComponent(); 672 copyValues(dst); 673 return dst; 674 } 675 676 public void copyValues(AvailabilityNotAvailableTimeComponent dst) { 677 super.copyValues(dst); 678 dst.description = description == null ? null : description.copy(); 679 dst.during = during == null ? null : during.copy(); 680 } 681 682 @Override 683 public boolean equalsDeep(Base other_) { 684 if (!super.equalsDeep(other_)) 685 return false; 686 if (!(other_ instanceof AvailabilityNotAvailableTimeComponent)) 687 return false; 688 AvailabilityNotAvailableTimeComponent o = (AvailabilityNotAvailableTimeComponent) other_; 689 return compareDeep(description, o.description, true) && compareDeep(during, o.during, true); 690 } 691 692 @Override 693 public boolean equalsShallow(Base other_) { 694 if (!super.equalsShallow(other_)) 695 return false; 696 if (!(other_ instanceof AvailabilityNotAvailableTimeComponent)) 697 return false; 698 AvailabilityNotAvailableTimeComponent o = (AvailabilityNotAvailableTimeComponent) other_; 699 return compareValues(description, o.description, true); 700 } 701 702 public boolean isEmpty() { 703 return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(description, during); 704 } 705 706 public String fhirType() { 707 return "Availability.notAvailableTime"; 708 709 } 710 711 } 712 713 /** 714 * Times the {item} is available. 715 */ 716 @Child(name = "availableTime", type = {}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true) 717 @Description(shortDefinition="Times the {item} is available", formalDefinition="Times the {item} is available." ) 718 protected List<AvailabilityAvailableTimeComponent> availableTime; 719 720 /** 721 * Not available during this time due to provided reason. 722 */ 723 @Child(name = "notAvailableTime", type = {}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true) 724 @Description(shortDefinition="Not available during this time due to provided reason", formalDefinition="Not available during this time due to provided reason." ) 725 protected List<AvailabilityNotAvailableTimeComponent> notAvailableTime; 726 727 private static final long serialVersionUID = -444820754L; 728 729 /** 730 * Constructor 731 */ 732 public Availability() { 733 super(); 734 } 735 736 /** 737 * @return {@link #availableTime} (Times the {item} is available.) 738 */ 739 public List<AvailabilityAvailableTimeComponent> getAvailableTime() { 740 if (this.availableTime == null) 741 this.availableTime = new ArrayList<AvailabilityAvailableTimeComponent>(); 742 return this.availableTime; 743 } 744 745 /** 746 * @return Returns a reference to <code>this</code> for easy method chaining 747 */ 748 public Availability setAvailableTime(List<AvailabilityAvailableTimeComponent> theAvailableTime) { 749 this.availableTime = theAvailableTime; 750 return this; 751 } 752 753 public boolean hasAvailableTime() { 754 if (this.availableTime == null) 755 return false; 756 for (AvailabilityAvailableTimeComponent item : this.availableTime) 757 if (!item.isEmpty()) 758 return true; 759 return false; 760 } 761 762 public AvailabilityAvailableTimeComponent addAvailableTime() { //3 763 AvailabilityAvailableTimeComponent t = new AvailabilityAvailableTimeComponent(); 764 if (this.availableTime == null) 765 this.availableTime = new ArrayList<AvailabilityAvailableTimeComponent>(); 766 this.availableTime.add(t); 767 return t; 768 } 769 770 public Availability addAvailableTime(AvailabilityAvailableTimeComponent t) { //3 771 if (t == null) 772 return this; 773 if (this.availableTime == null) 774 this.availableTime = new ArrayList<AvailabilityAvailableTimeComponent>(); 775 this.availableTime.add(t); 776 return this; 777 } 778 779 /** 780 * @return The first repetition of repeating field {@link #availableTime}, creating it if it does not already exist {3} 781 */ 782 public AvailabilityAvailableTimeComponent getAvailableTimeFirstRep() { 783 if (getAvailableTime().isEmpty()) { 784 addAvailableTime(); 785 } 786 return getAvailableTime().get(0); 787 } 788 789 /** 790 * @return {@link #notAvailableTime} (Not available during this time due to provided reason.) 791 */ 792 public List<AvailabilityNotAvailableTimeComponent> getNotAvailableTime() { 793 if (this.notAvailableTime == null) 794 this.notAvailableTime = new ArrayList<AvailabilityNotAvailableTimeComponent>(); 795 return this.notAvailableTime; 796 } 797 798 /** 799 * @return Returns a reference to <code>this</code> for easy method chaining 800 */ 801 public Availability setNotAvailableTime(List<AvailabilityNotAvailableTimeComponent> theNotAvailableTime) { 802 this.notAvailableTime = theNotAvailableTime; 803 return this; 804 } 805 806 public boolean hasNotAvailableTime() { 807 if (this.notAvailableTime == null) 808 return false; 809 for (AvailabilityNotAvailableTimeComponent item : this.notAvailableTime) 810 if (!item.isEmpty()) 811 return true; 812 return false; 813 } 814 815 public AvailabilityNotAvailableTimeComponent addNotAvailableTime() { //3 816 AvailabilityNotAvailableTimeComponent t = new AvailabilityNotAvailableTimeComponent(); 817 if (this.notAvailableTime == null) 818 this.notAvailableTime = new ArrayList<AvailabilityNotAvailableTimeComponent>(); 819 this.notAvailableTime.add(t); 820 return t; 821 } 822 823 public Availability addNotAvailableTime(AvailabilityNotAvailableTimeComponent t) { //3 824 if (t == null) 825 return this; 826 if (this.notAvailableTime == null) 827 this.notAvailableTime = new ArrayList<AvailabilityNotAvailableTimeComponent>(); 828 this.notAvailableTime.add(t); 829 return this; 830 } 831 832 /** 833 * @return The first repetition of repeating field {@link #notAvailableTime}, creating it if it does not already exist {3} 834 */ 835 public AvailabilityNotAvailableTimeComponent getNotAvailableTimeFirstRep() { 836 if (getNotAvailableTime().isEmpty()) { 837 addNotAvailableTime(); 838 } 839 return getNotAvailableTime().get(0); 840 } 841 842 protected void listChildren(List<Property> children) { 843 super.listChildren(children); 844 children.add(new Property("availableTime", "", "Times the {item} is available.", 0, java.lang.Integer.MAX_VALUE, availableTime)); 845 children.add(new Property("notAvailableTime", "", "Not available during this time due to provided reason.", 0, java.lang.Integer.MAX_VALUE, notAvailableTime)); 846 } 847 848 @Override 849 public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException { 850 switch (_hash) { 851 case 1873069366: /*availableTime*/ return new Property("availableTime", "", "Times the {item} is available.", 0, java.lang.Integer.MAX_VALUE, availableTime); 852 case -627853021: /*notAvailableTime*/ return new Property("notAvailableTime", "", "Not available during this time due to provided reason.", 0, java.lang.Integer.MAX_VALUE, notAvailableTime); 853 default: return super.getNamedProperty(_hash, _name, _checkValid); 854 } 855 856 } 857 858 @Override 859 public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException { 860 switch (hash) { 861 case 1873069366: /*availableTime*/ return this.availableTime == null ? new Base[0] : this.availableTime.toArray(new Base[this.availableTime.size()]); // AvailabilityAvailableTimeComponent 862 case -627853021: /*notAvailableTime*/ return this.notAvailableTime == null ? new Base[0] : this.notAvailableTime.toArray(new Base[this.notAvailableTime.size()]); // AvailabilityNotAvailableTimeComponent 863 default: return super.getProperty(hash, name, checkValid); 864 } 865 866 } 867 868 @Override 869 public Base setProperty(int hash, String name, Base value) throws FHIRException { 870 switch (hash) { 871 case 1873069366: // availableTime 872 this.getAvailableTime().add((AvailabilityAvailableTimeComponent) value); // AvailabilityAvailableTimeComponent 873 return value; 874 case -627853021: // notAvailableTime 875 this.getNotAvailableTime().add((AvailabilityNotAvailableTimeComponent) value); // AvailabilityNotAvailableTimeComponent 876 return value; 877 default: return super.setProperty(hash, name, value); 878 } 879 880 } 881 882 @Override 883 public Base setProperty(String name, Base value) throws FHIRException { 884 if (name.equals("availableTime")) { 885 this.getAvailableTime().add((AvailabilityAvailableTimeComponent) value); 886 } else if (name.equals("notAvailableTime")) { 887 this.getNotAvailableTime().add((AvailabilityNotAvailableTimeComponent) value); 888 } else 889 return super.setProperty(name, value); 890 return value; 891 } 892 893 @Override 894 public void removeChild(String name, Base value) throws FHIRException { 895 if (name.equals("availableTime")) { 896 this.getAvailableTime().remove((AvailabilityAvailableTimeComponent) value); 897 } else if (name.equals("notAvailableTime")) { 898 this.getNotAvailableTime().remove((AvailabilityNotAvailableTimeComponent) value); 899 } else 900 super.removeChild(name, value); 901 902 } 903 904 @Override 905 public Base makeProperty(int hash, String name) throws FHIRException { 906 switch (hash) { 907 case 1873069366: return addAvailableTime(); 908 case -627853021: return addNotAvailableTime(); 909 default: return super.makeProperty(hash, name); 910 } 911 912 } 913 914 @Override 915 public String[] getTypesForProperty(int hash, String name) throws FHIRException { 916 switch (hash) { 917 case 1873069366: /*availableTime*/ return new String[] {}; 918 case -627853021: /*notAvailableTime*/ return new String[] {}; 919 default: return super.getTypesForProperty(hash, name); 920 } 921 922 } 923 924 @Override 925 public Base addChild(String name) throws FHIRException { 926 if (name.equals("availableTime")) { 927 return addAvailableTime(); 928 } 929 else if (name.equals("notAvailableTime")) { 930 return addNotAvailableTime(); 931 } 932 else 933 return super.addChild(name); 934 } 935 936 public String fhirType() { 937 return "Availability"; 938 939 } 940 941 public Availability copy() { 942 Availability dst = new Availability(); 943 copyValues(dst); 944 return dst; 945 } 946 947 public void copyValues(Availability dst) { 948 super.copyValues(dst); 949 if (availableTime != null) { 950 dst.availableTime = new ArrayList<AvailabilityAvailableTimeComponent>(); 951 for (AvailabilityAvailableTimeComponent i : availableTime) 952 dst.availableTime.add(i.copy()); 953 }; 954 if (notAvailableTime != null) { 955 dst.notAvailableTime = new ArrayList<AvailabilityNotAvailableTimeComponent>(); 956 for (AvailabilityNotAvailableTimeComponent i : notAvailableTime) 957 dst.notAvailableTime.add(i.copy()); 958 }; 959 } 960 961 protected Availability typedCopy() { 962 return copy(); 963 } 964 965 @Override 966 public boolean equalsDeep(Base other_) { 967 if (!super.equalsDeep(other_)) 968 return false; 969 if (!(other_ instanceof Availability)) 970 return false; 971 Availability o = (Availability) other_; 972 return compareDeep(availableTime, o.availableTime, true) && compareDeep(notAvailableTime, o.notAvailableTime, true) 973 ; 974 } 975 976 @Override 977 public boolean equalsShallow(Base other_) { 978 if (!super.equalsShallow(other_)) 979 return false; 980 if (!(other_ instanceof Availability)) 981 return false; 982 Availability o = (Availability) other_; 983 return true; 984 } 985 986 public boolean isEmpty() { 987 return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(availableTime, notAvailableTime 988 ); 989 } 990 991 992} 993