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 048import ca.uhn.fhir.util.DatatypeUtil; 049import org.hl7.fhir.instance.model.api.IPrimitiveType; 050/** 051 * HumanName Type: A name, normally of a human, that can be used for other living entities (e.g. animals but not organizations) that have been assigned names by a human and may need the use of name parts or the need for usage information. 052 */ 053@DatatypeDef(name="HumanName") 054public class HumanName extends DataType implements ICompositeType { 055 056 public enum NameUse { 057 /** 058 * Known as/conventional/the one you normally use. 059 */ 060 USUAL, 061 /** 062 * The formal name as registered in an official (government) registry, but which name might not be commonly used. May be called \"legal name\". 063 */ 064 OFFICIAL, 065 /** 066 * A temporary name. Name.period can provide more detailed information. This may also be used for temporary names assigned at birth or in emergency situations. 067 */ 068 TEMP, 069 /** 070 * A name that is used to address the person in an informal manner, but is not part of their formal or usual name. 071 */ 072 NICKNAME, 073 /** 074 * Anonymous assigned name, alias, or pseudonym (used to protect a person's identity for privacy reasons). 075 */ 076 ANONYMOUS, 077 /** 078 * This name is no longer in use (or was never correct, but retained for records). 079 */ 080 OLD, 081 /** 082 * A name used prior to changing name because of marriage. This name use is for use by applications that collect and store names that were used prior to a marriage. Marriage naming customs vary greatly around the world, and are constantly changing. This term is not gender specific. The use of this term does not imply any particular history for a person's name. 083 */ 084 MAIDEN, 085 /** 086 * added to help the parsers with the generic types 087 */ 088 NULL; 089 public static NameUse fromCode(String codeString) throws FHIRException { 090 if (codeString == null || "".equals(codeString)) 091 return null; 092 if ("usual".equals(codeString)) 093 return USUAL; 094 if ("official".equals(codeString)) 095 return OFFICIAL; 096 if ("temp".equals(codeString)) 097 return TEMP; 098 if ("nickname".equals(codeString)) 099 return NICKNAME; 100 if ("anonymous".equals(codeString)) 101 return ANONYMOUS; 102 if ("old".equals(codeString)) 103 return OLD; 104 if ("maiden".equals(codeString)) 105 return MAIDEN; 106 if (Configuration.isAcceptInvalidEnums()) 107 return null; 108 else 109 throw new FHIRException("Unknown NameUse code '"+codeString+"'"); 110 } 111 public String toCode() { 112 switch (this) { 113 case USUAL: return "usual"; 114 case OFFICIAL: return "official"; 115 case TEMP: return "temp"; 116 case NICKNAME: return "nickname"; 117 case ANONYMOUS: return "anonymous"; 118 case OLD: return "old"; 119 case MAIDEN: return "maiden"; 120 case NULL: return null; 121 default: return "?"; 122 } 123 } 124 public String getSystem() { 125 switch (this) { 126 case USUAL: return "http://hl7.org/fhir/name-use"; 127 case OFFICIAL: return "http://hl7.org/fhir/name-use"; 128 case TEMP: return "http://hl7.org/fhir/name-use"; 129 case NICKNAME: return "http://hl7.org/fhir/name-use"; 130 case ANONYMOUS: return "http://hl7.org/fhir/name-use"; 131 case OLD: return "http://hl7.org/fhir/name-use"; 132 case MAIDEN: return "http://hl7.org/fhir/name-use"; 133 case NULL: return null; 134 default: return "?"; 135 } 136 } 137 public String getDefinition() { 138 switch (this) { 139 case USUAL: return "Known as/conventional/the one you normally use."; 140 case OFFICIAL: return "The formal name as registered in an official (government) registry, but which name might not be commonly used. May be called \"legal name\"."; 141 case TEMP: return "A temporary name. Name.period can provide more detailed information. This may also be used for temporary names assigned at birth or in emergency situations."; 142 case NICKNAME: return "A name that is used to address the person in an informal manner, but is not part of their formal or usual name."; 143 case ANONYMOUS: return "Anonymous assigned name, alias, or pseudonym (used to protect a person's identity for privacy reasons)."; 144 case OLD: return "This name is no longer in use (or was never correct, but retained for records)."; 145 case MAIDEN: return "A name used prior to changing name because of marriage. This name use is for use by applications that collect and store names that were used prior to a marriage. Marriage naming customs vary greatly around the world, and are constantly changing. This term is not gender specific. The use of this term does not imply any particular history for a person's name."; 146 case NULL: return null; 147 default: return "?"; 148 } 149 } 150 public String getDisplay() { 151 switch (this) { 152 case USUAL: return "Usual"; 153 case OFFICIAL: return "Official"; 154 case TEMP: return "Temp"; 155 case NICKNAME: return "Nickname"; 156 case ANONYMOUS: return "Anonymous"; 157 case OLD: return "Old"; 158 case MAIDEN: return "Name changed for Marriage"; 159 case NULL: return null; 160 default: return "?"; 161 } 162 } 163 } 164 165 public static class NameUseEnumFactory implements EnumFactory<NameUse> { 166 public NameUse fromCode(String codeString) throws IllegalArgumentException { 167 if (codeString == null || "".equals(codeString)) 168 if (codeString == null || "".equals(codeString)) 169 return null; 170 if ("usual".equals(codeString)) 171 return NameUse.USUAL; 172 if ("official".equals(codeString)) 173 return NameUse.OFFICIAL; 174 if ("temp".equals(codeString)) 175 return NameUse.TEMP; 176 if ("nickname".equals(codeString)) 177 return NameUse.NICKNAME; 178 if ("anonymous".equals(codeString)) 179 return NameUse.ANONYMOUS; 180 if ("old".equals(codeString)) 181 return NameUse.OLD; 182 if ("maiden".equals(codeString)) 183 return NameUse.MAIDEN; 184 throw new IllegalArgumentException("Unknown NameUse code '"+codeString+"'"); 185 } 186 public Enumeration<NameUse> fromType(PrimitiveType<?> code) throws FHIRException { 187 if (code == null) 188 return null; 189 if (code.isEmpty()) 190 return new Enumeration<NameUse>(this, NameUse.NULL, code); 191 String codeString = ((PrimitiveType) code).asStringValue(); 192 if (codeString == null || "".equals(codeString)) 193 return new Enumeration<NameUse>(this, NameUse.NULL, code); 194 if ("usual".equals(codeString)) 195 return new Enumeration<NameUse>(this, NameUse.USUAL, code); 196 if ("official".equals(codeString)) 197 return new Enumeration<NameUse>(this, NameUse.OFFICIAL, code); 198 if ("temp".equals(codeString)) 199 return new Enumeration<NameUse>(this, NameUse.TEMP, code); 200 if ("nickname".equals(codeString)) 201 return new Enumeration<NameUse>(this, NameUse.NICKNAME, code); 202 if ("anonymous".equals(codeString)) 203 return new Enumeration<NameUse>(this, NameUse.ANONYMOUS, code); 204 if ("old".equals(codeString)) 205 return new Enumeration<NameUse>(this, NameUse.OLD, code); 206 if ("maiden".equals(codeString)) 207 return new Enumeration<NameUse>(this, NameUse.MAIDEN, code); 208 throw new FHIRException("Unknown NameUse code '"+codeString+"'"); 209 } 210 public String toCode(NameUse code) { 211 if (code == NameUse.USUAL) 212 return "usual"; 213 if (code == NameUse.OFFICIAL) 214 return "official"; 215 if (code == NameUse.TEMP) 216 return "temp"; 217 if (code == NameUse.NICKNAME) 218 return "nickname"; 219 if (code == NameUse.ANONYMOUS) 220 return "anonymous"; 221 if (code == NameUse.OLD) 222 return "old"; 223 if (code == NameUse.MAIDEN) 224 return "maiden"; 225 return "?"; 226 } 227 public String toSystem(NameUse code) { 228 return code.getSystem(); 229 } 230 } 231 232 /** 233 * Identifies the purpose for this name. 234 */ 235 @Child(name = "use", type = {CodeType.class}, order=0, min=0, max=1, modifier=true, summary=true) 236 @Description(shortDefinition="usual | official | temp | nickname | anonymous | old | maiden", formalDefinition="Identifies the purpose for this name." ) 237 @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/name-use") 238 protected Enumeration<NameUse> use; 239 240 /** 241 * Specifies the entire name as it should be displayed e.g. on an application UI. This may be provided instead of or as well as the specific parts. 242 */ 243 @Child(name = "text", type = {StringType.class}, order=1, min=0, max=1, modifier=false, summary=true) 244 @Description(shortDefinition="Text representation of the full name", formalDefinition="Specifies the entire name as it should be displayed e.g. on an application UI. This may be provided instead of or as well as the specific parts." ) 245 protected StringType text; 246 247 /** 248 * The part of a name that links to the genealogy. In some cultures (e.g. Eritrea) the family name of a son is the first name of his father. 249 */ 250 @Child(name = "family", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=true) 251 @Description(shortDefinition="Family name (often called 'Surname')", formalDefinition="The part of a name that links to the genealogy. In some cultures (e.g. Eritrea) the family name of a son is the first name of his father." ) 252 protected StringType family; 253 254 /** 255 * Given name. 256 */ 257 @Child(name = "given", type = {StringType.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true) 258 @Description(shortDefinition="Given names (not always 'first'). Includes middle names", formalDefinition="Given name." ) 259 protected List<StringType> given; 260 261 /** 262 * Part of the name that is acquired as a title due to academic, legal, employment or nobility status, etc. and that appears at the start of the name. 263 */ 264 @Child(name = "prefix", type = {StringType.class}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true) 265 @Description(shortDefinition="Parts that come before the name", formalDefinition="Part of the name that is acquired as a title due to academic, legal, employment or nobility status, etc. and that appears at the start of the name." ) 266 protected List<StringType> prefix; 267 268 /** 269 * Part of the name that is acquired as a title due to academic, legal, employment or nobility status, etc. and that appears at the end of the name. 270 */ 271 @Child(name = "suffix", type = {StringType.class}, order=5, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true) 272 @Description(shortDefinition="Parts that come after the name", formalDefinition="Part of the name that is acquired as a title due to academic, legal, employment or nobility status, etc. and that appears at the end of the name." ) 273 protected List<StringType> suffix; 274 275 /** 276 * Indicates the period of time when this name was valid for the named person. 277 */ 278 @Child(name = "period", type = {Period.class}, order=6, min=0, max=1, modifier=false, summary=true) 279 @Description(shortDefinition="Time period when name was/is in use", formalDefinition="Indicates the period of time when this name was valid for the named person." ) 280 protected Period period; 281 282 private static final long serialVersionUID = -507469160L; 283 284 /** 285 * Constructor 286 */ 287 public HumanName() { 288 super(); 289 } 290 291 /** 292 * @return {@link #use} (Identifies the purpose for this name.). This is the underlying object with id, value and extensions. The accessor "getUse" gives direct access to the value 293 */ 294 public Enumeration<NameUse> getUseElement() { 295 if (this.use == null) 296 if (Configuration.errorOnAutoCreate()) 297 throw new Error("Attempt to auto-create HumanName.use"); 298 else if (Configuration.doAutoCreate()) 299 this.use = new Enumeration<NameUse>(new NameUseEnumFactory()); // bb 300 return this.use; 301 } 302 303 public boolean hasUseElement() { 304 return this.use != null && !this.use.isEmpty(); 305 } 306 307 public boolean hasUse() { 308 return this.use != null && !this.use.isEmpty(); 309 } 310 311 /** 312 * @param value {@link #use} (Identifies the purpose for this name.). This is the underlying object with id, value and extensions. The accessor "getUse" gives direct access to the value 313 */ 314 public HumanName setUseElement(Enumeration<NameUse> value) { 315 this.use = value; 316 return this; 317 } 318 319 /** 320 * @return Identifies the purpose for this name. 321 */ 322 public NameUse getUse() { 323 return this.use == null ? null : this.use.getValue(); 324 } 325 326 /** 327 * @param value Identifies the purpose for this name. 328 */ 329 public HumanName setUse(NameUse value) { 330 if (value == null) 331 this.use = null; 332 else { 333 if (this.use == null) 334 this.use = new Enumeration<NameUse>(new NameUseEnumFactory()); 335 this.use.setValue(value); 336 } 337 return this; 338 } 339 340 /** 341 * @return {@link #text} (Specifies the entire name as it should be displayed e.g. on an application UI. This may be provided instead of or as well as the specific parts.). This is the underlying object with id, value and extensions. The accessor "getText" gives direct access to the value 342 */ 343 public StringType getTextElement() { 344 if (this.text == null) 345 if (Configuration.errorOnAutoCreate()) 346 throw new Error("Attempt to auto-create HumanName.text"); 347 else if (Configuration.doAutoCreate()) 348 this.text = new StringType(); // bb 349 return this.text; 350 } 351 352 public boolean hasTextElement() { 353 return this.text != null && !this.text.isEmpty(); 354 } 355 356 public boolean hasText() { 357 return this.text != null && !this.text.isEmpty(); 358 } 359 360 /** 361 * @param value {@link #text} (Specifies the entire name as it should be displayed e.g. on an application UI. This may be provided instead of or as well as the specific parts.). This is the underlying object with id, value and extensions. The accessor "getText" gives direct access to the value 362 */ 363 public HumanName setTextElement(StringType value) { 364 this.text = value; 365 return this; 366 } 367 368 /** 369 * @return Specifies the entire name as it should be displayed e.g. on an application UI. This may be provided instead of or as well as the specific parts. 370 */ 371 public String getText() { 372 return this.text == null ? null : this.text.getValue(); 373 } 374 375 /** 376 * @param value Specifies the entire name as it should be displayed e.g. on an application UI. This may be provided instead of or as well as the specific parts. 377 */ 378 public HumanName setText(String value) { 379 if (Utilities.noString(value)) 380 this.text = null; 381 else { 382 if (this.text == null) 383 this.text = new StringType(); 384 this.text.setValue(value); 385 } 386 return this; 387 } 388 389 /** 390 * @return {@link #family} (The part of a name that links to the genealogy. In some cultures (e.g. Eritrea) the family name of a son is the first name of his father.). This is the underlying object with id, value and extensions. The accessor "getFamily" gives direct access to the value 391 */ 392 public StringType getFamilyElement() { 393 if (this.family == null) 394 if (Configuration.errorOnAutoCreate()) 395 throw new Error("Attempt to auto-create HumanName.family"); 396 else if (Configuration.doAutoCreate()) 397 this.family = new StringType(); // bb 398 return this.family; 399 } 400 401 public boolean hasFamilyElement() { 402 return this.family != null && !this.family.isEmpty(); 403 } 404 405 public boolean hasFamily() { 406 return this.family != null && !this.family.isEmpty(); 407 } 408 409 /** 410 * @param value {@link #family} (The part of a name that links to the genealogy. In some cultures (e.g. Eritrea) the family name of a son is the first name of his father.). This is the underlying object with id, value and extensions. The accessor "getFamily" gives direct access to the value 411 */ 412 public HumanName setFamilyElement(StringType value) { 413 this.family = value; 414 return this; 415 } 416 417 /** 418 * @return The part of a name that links to the genealogy. In some cultures (e.g. Eritrea) the family name of a son is the first name of his father. 419 */ 420 public String getFamily() { 421 return this.family == null ? null : this.family.getValue(); 422 } 423 424 /** 425 * @param value The part of a name that links to the genealogy. In some cultures (e.g. Eritrea) the family name of a son is the first name of his father. 426 */ 427 public HumanName setFamily(String value) { 428 if (Utilities.noString(value)) 429 this.family = null; 430 else { 431 if (this.family == null) 432 this.family = new StringType(); 433 this.family.setValue(value); 434 } 435 return this; 436 } 437 438 /** 439 * @return {@link #given} (Given name.) 440 */ 441 public List<StringType> getGiven() { 442 if (this.given == null) 443 this.given = new ArrayList<StringType>(); 444 return this.given; 445 } 446 447 /** 448 * @return Returns a reference to <code>this</code> for easy method chaining 449 */ 450 public HumanName setGiven(List<StringType> theGiven) { 451 this.given = theGiven; 452 return this; 453 } 454 455 public boolean hasGiven() { 456 if (this.given == null) 457 return false; 458 for (StringType item : this.given) 459 if (!item.isEmpty()) 460 return true; 461 return false; 462 } 463 464 /** 465 * @return {@link #given} (Given name.) 466 */ 467 public StringType addGivenElement() {//2 468 StringType t = new StringType(); 469 if (this.given == null) 470 this.given = new ArrayList<StringType>(); 471 this.given.add(t); 472 return t; 473 } 474 475 /** 476 * @param value {@link #given} (Given name.) 477 */ 478 public HumanName addGiven(String value) { //1 479 StringType t = new StringType(); 480 t.setValue(value); 481 if (this.given == null) 482 this.given = new ArrayList<StringType>(); 483 this.given.add(t); 484 return this; 485 } 486 487 /** 488 * @param value {@link #given} (Given name.) 489 */ 490 public boolean hasGiven(String value) { 491 if (this.given == null) 492 return false; 493 for (StringType v : this.given) 494 if (v.getValue().equals(value)) // string 495 return true; 496 return false; 497 } 498 499 /** 500 * @return {@link #prefix} (Part of the name that is acquired as a title due to academic, legal, employment or nobility status, etc. and that appears at the start of the name.) 501 */ 502 public List<StringType> getPrefix() { 503 if (this.prefix == null) 504 this.prefix = new ArrayList<StringType>(); 505 return this.prefix; 506 } 507 508 /** 509 * @return Returns a reference to <code>this</code> for easy method chaining 510 */ 511 public HumanName setPrefix(List<StringType> thePrefix) { 512 this.prefix = thePrefix; 513 return this; 514 } 515 516 public boolean hasPrefix() { 517 if (this.prefix == null) 518 return false; 519 for (StringType item : this.prefix) 520 if (!item.isEmpty()) 521 return true; 522 return false; 523 } 524 525 /** 526 * @return {@link #prefix} (Part of the name that is acquired as a title due to academic, legal, employment or nobility status, etc. and that appears at the start of the name.) 527 */ 528 public StringType addPrefixElement() {//2 529 StringType t = new StringType(); 530 if (this.prefix == null) 531 this.prefix = new ArrayList<StringType>(); 532 this.prefix.add(t); 533 return t; 534 } 535 536 /** 537 * @param value {@link #prefix} (Part of the name that is acquired as a title due to academic, legal, employment or nobility status, etc. and that appears at the start of the name.) 538 */ 539 public HumanName addPrefix(String value) { //1 540 StringType t = new StringType(); 541 t.setValue(value); 542 if (this.prefix == null) 543 this.prefix = new ArrayList<StringType>(); 544 this.prefix.add(t); 545 return this; 546 } 547 548 /** 549 * @param value {@link #prefix} (Part of the name that is acquired as a title due to academic, legal, employment or nobility status, etc. and that appears at the start of the name.) 550 */ 551 public boolean hasPrefix(String value) { 552 if (this.prefix == null) 553 return false; 554 for (StringType v : this.prefix) 555 if (v.getValue().equals(value)) // string 556 return true; 557 return false; 558 } 559 560 /** 561 * @return {@link #suffix} (Part of the name that is acquired as a title due to academic, legal, employment or nobility status, etc. and that appears at the end of the name.) 562 */ 563 public List<StringType> getSuffix() { 564 if (this.suffix == null) 565 this.suffix = new ArrayList<StringType>(); 566 return this.suffix; 567 } 568 569 /** 570 * @return Returns a reference to <code>this</code> for easy method chaining 571 */ 572 public HumanName setSuffix(List<StringType> theSuffix) { 573 this.suffix = theSuffix; 574 return this; 575 } 576 577 public boolean hasSuffix() { 578 if (this.suffix == null) 579 return false; 580 for (StringType item : this.suffix) 581 if (!item.isEmpty()) 582 return true; 583 return false; 584 } 585 586 /** 587 * @return {@link #suffix} (Part of the name that is acquired as a title due to academic, legal, employment or nobility status, etc. and that appears at the end of the name.) 588 */ 589 public StringType addSuffixElement() {//2 590 StringType t = new StringType(); 591 if (this.suffix == null) 592 this.suffix = new ArrayList<StringType>(); 593 this.suffix.add(t); 594 return t; 595 } 596 597 /** 598 * @param value {@link #suffix} (Part of the name that is acquired as a title due to academic, legal, employment or nobility status, etc. and that appears at the end of the name.) 599 */ 600 public HumanName addSuffix(String value) { //1 601 StringType t = new StringType(); 602 t.setValue(value); 603 if (this.suffix == null) 604 this.suffix = new ArrayList<StringType>(); 605 this.suffix.add(t); 606 return this; 607 } 608 609 /** 610 * @param value {@link #suffix} (Part of the name that is acquired as a title due to academic, legal, employment or nobility status, etc. and that appears at the end of the name.) 611 */ 612 public boolean hasSuffix(String value) { 613 if (this.suffix == null) 614 return false; 615 for (StringType v : this.suffix) 616 if (v.getValue().equals(value)) // string 617 return true; 618 return false; 619 } 620 621 /** 622 * @return {@link #period} (Indicates the period of time when this name was valid for the named person.) 623 */ 624 public Period getPeriod() { 625 if (this.period == null) 626 if (Configuration.errorOnAutoCreate()) 627 throw new Error("Attempt to auto-create HumanName.period"); 628 else if (Configuration.doAutoCreate()) 629 this.period = new Period(); // cc 630 return this.period; 631 } 632 633 public boolean hasPeriod() { 634 return this.period != null && !this.period.isEmpty(); 635 } 636 637 /** 638 * @param value {@link #period} (Indicates the period of time when this name was valid for the named person.) 639 */ 640 public HumanName setPeriod(Period value) { 641 this.period = value; 642 return this; 643 } 644 645 protected void listChildren(List<Property> children) { 646 super.listChildren(children); 647 children.add(new Property("use", "code", "Identifies the purpose for this name.", 0, 1, use)); 648 children.add(new Property("text", "string", "Specifies the entire name as it should be displayed e.g. on an application UI. This may be provided instead of or as well as the specific parts.", 0, 1, text)); 649 children.add(new Property("family", "string", "The part of a name that links to the genealogy. In some cultures (e.g. Eritrea) the family name of a son is the first name of his father.", 0, 1, family)); 650 children.add(new Property("given", "string", "Given name.", 0, java.lang.Integer.MAX_VALUE, given)); 651 children.add(new Property("prefix", "string", "Part of the name that is acquired as a title due to academic, legal, employment or nobility status, etc. and that appears at the start of the name.", 0, java.lang.Integer.MAX_VALUE, prefix)); 652 children.add(new Property("suffix", "string", "Part of the name that is acquired as a title due to academic, legal, employment or nobility status, etc. and that appears at the end of the name.", 0, java.lang.Integer.MAX_VALUE, suffix)); 653 children.add(new Property("period", "Period", "Indicates the period of time when this name was valid for the named person.", 0, 1, period)); 654 } 655 656 @Override 657 public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException { 658 switch (_hash) { 659 case 116103: /*use*/ return new Property("use", "code", "Identifies the purpose for this name.", 0, 1, use); 660 case 3556653: /*text*/ return new Property("text", "string", "Specifies the entire name as it should be displayed e.g. on an application UI. This may be provided instead of or as well as the specific parts.", 0, 1, text); 661 case -1281860764: /*family*/ return new Property("family", "string", "The part of a name that links to the genealogy. In some cultures (e.g. Eritrea) the family name of a son is the first name of his father.", 0, 1, family); 662 case 98367357: /*given*/ return new Property("given", "string", "Given name.", 0, java.lang.Integer.MAX_VALUE, given); 663 case -980110702: /*prefix*/ return new Property("prefix", "string", "Part of the name that is acquired as a title due to academic, legal, employment or nobility status, etc. and that appears at the start of the name.", 0, java.lang.Integer.MAX_VALUE, prefix); 664 case -891422895: /*suffix*/ return new Property("suffix", "string", "Part of the name that is acquired as a title due to academic, legal, employment or nobility status, etc. and that appears at the end of the name.", 0, java.lang.Integer.MAX_VALUE, suffix); 665 case -991726143: /*period*/ return new Property("period", "Period", "Indicates the period of time when this name was valid for the named person.", 0, 1, period); 666 default: return super.getNamedProperty(_hash, _name, _checkValid); 667 } 668 669 } 670 671 @Override 672 public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException { 673 switch (hash) { 674 case 116103: /*use*/ return this.use == null ? new Base[0] : new Base[] {this.use}; // Enumeration<NameUse> 675 case 3556653: /*text*/ return this.text == null ? new Base[0] : new Base[] {this.text}; // StringType 676 case -1281860764: /*family*/ return this.family == null ? new Base[0] : new Base[] {this.family}; // StringType 677 case 98367357: /*given*/ return this.given == null ? new Base[0] : this.given.toArray(new Base[this.given.size()]); // StringType 678 case -980110702: /*prefix*/ return this.prefix == null ? new Base[0] : this.prefix.toArray(new Base[this.prefix.size()]); // StringType 679 case -891422895: /*suffix*/ return this.suffix == null ? new Base[0] : this.suffix.toArray(new Base[this.suffix.size()]); // StringType 680 case -991726143: /*period*/ return this.period == null ? new Base[0] : new Base[] {this.period}; // Period 681 default: return super.getProperty(hash, name, checkValid); 682 } 683 684 } 685 686 @Override 687 public Base setProperty(int hash, String name, Base value) throws FHIRException { 688 switch (hash) { 689 case 116103: // use 690 value = new NameUseEnumFactory().fromType(TypeConvertor.castToCode(value)); 691 this.use = (Enumeration) value; // Enumeration<NameUse> 692 return value; 693 case 3556653: // text 694 this.text = TypeConvertor.castToString(value); // StringType 695 return value; 696 case -1281860764: // family 697 this.family = TypeConvertor.castToString(value); // StringType 698 return value; 699 case 98367357: // given 700 this.getGiven().add(TypeConvertor.castToString(value)); // StringType 701 return value; 702 case -980110702: // prefix 703 this.getPrefix().add(TypeConvertor.castToString(value)); // StringType 704 return value; 705 case -891422895: // suffix 706 this.getSuffix().add(TypeConvertor.castToString(value)); // StringType 707 return value; 708 case -991726143: // period 709 this.period = TypeConvertor.castToPeriod(value); // Period 710 return value; 711 default: return super.setProperty(hash, name, value); 712 } 713 714 } 715 716 @Override 717 public Base setProperty(String name, Base value) throws FHIRException { 718 if (name.equals("use")) { 719 value = new NameUseEnumFactory().fromType(TypeConvertor.castToCode(value)); 720 this.use = (Enumeration) value; // Enumeration<NameUse> 721 } else if (name.equals("text")) { 722 this.text = TypeConvertor.castToString(value); // StringType 723 } else if (name.equals("family")) { 724 this.family = TypeConvertor.castToString(value); // StringType 725 } else if (name.equals("given")) { 726 this.getGiven().add(TypeConvertor.castToString(value)); 727 } else if (name.equals("prefix")) { 728 this.getPrefix().add(TypeConvertor.castToString(value)); 729 } else if (name.equals("suffix")) { 730 this.getSuffix().add(TypeConvertor.castToString(value)); 731 } else if (name.equals("period")) { 732 this.period = TypeConvertor.castToPeriod(value); // Period 733 } else 734 return super.setProperty(name, value); 735 return value; 736 } 737 738 @Override 739 public void removeChild(String name, Base value) throws FHIRException { 740 if (name.equals("use")) { 741 value = new NameUseEnumFactory().fromType(TypeConvertor.castToCode(value)); 742 this.use = (Enumeration) value; // Enumeration<NameUse> 743 } else if (name.equals("text")) { 744 this.text = null; 745 } else if (name.equals("family")) { 746 this.family = null; 747 } else if (name.equals("given")) { 748 this.getGiven().remove(value); 749 } else if (name.equals("prefix")) { 750 this.getPrefix().remove(value); 751 } else if (name.equals("suffix")) { 752 this.getSuffix().remove(value); 753 } else if (name.equals("period")) { 754 this.period = null; 755 } else 756 super.removeChild(name, value); 757 758 } 759 760 @Override 761 public Base makeProperty(int hash, String name) throws FHIRException { 762 switch (hash) { 763 case 116103: return getUseElement(); 764 case 3556653: return getTextElement(); 765 case -1281860764: return getFamilyElement(); 766 case 98367357: return addGivenElement(); 767 case -980110702: return addPrefixElement(); 768 case -891422895: return addSuffixElement(); 769 case -991726143: return getPeriod(); 770 default: return super.makeProperty(hash, name); 771 } 772 773 } 774 775 @Override 776 public String[] getTypesForProperty(int hash, String name) throws FHIRException { 777 switch (hash) { 778 case 116103: /*use*/ return new String[] {"code"}; 779 case 3556653: /*text*/ return new String[] {"string"}; 780 case -1281860764: /*family*/ return new String[] {"string"}; 781 case 98367357: /*given*/ return new String[] {"string"}; 782 case -980110702: /*prefix*/ return new String[] {"string"}; 783 case -891422895: /*suffix*/ return new String[] {"string"}; 784 case -991726143: /*period*/ return new String[] {"Period"}; 785 default: return super.getTypesForProperty(hash, name); 786 } 787 788 } 789 790 @Override 791 public Base addChild(String name) throws FHIRException { 792 if (name.equals("use")) { 793 throw new FHIRException("Cannot call addChild on a singleton property HumanName.use"); 794 } 795 else if (name.equals("text")) { 796 throw new FHIRException("Cannot call addChild on a singleton property HumanName.text"); 797 } 798 else if (name.equals("family")) { 799 throw new FHIRException("Cannot call addChild on a singleton property HumanName.family"); 800 } 801 else if (name.equals("given")) { 802 throw new FHIRException("Cannot call addChild on a singleton property HumanName.given"); 803 } 804 else if (name.equals("prefix")) { 805 throw new FHIRException("Cannot call addChild on a singleton property HumanName.prefix"); 806 } 807 else if (name.equals("suffix")) { 808 throw new FHIRException("Cannot call addChild on a singleton property HumanName.suffix"); 809 } 810 else if (name.equals("period")) { 811 this.period = new Period(); 812 return this.period; 813 } 814 else 815 return super.addChild(name); 816 } 817 818 public String fhirType() { 819 return "HumanName"; 820 821 } 822 823 public HumanName copy() { 824 HumanName dst = new HumanName(); 825 copyValues(dst); 826 return dst; 827 } 828 829 public void copyValues(HumanName dst) { 830 super.copyValues(dst); 831 dst.use = use == null ? null : use.copy(); 832 dst.text = text == null ? null : text.copy(); 833 dst.family = family == null ? null : family.copy(); 834 if (given != null) { 835 dst.given = new ArrayList<StringType>(); 836 for (StringType i : given) 837 dst.given.add(i.copy()); 838 }; 839 if (prefix != null) { 840 dst.prefix = new ArrayList<StringType>(); 841 for (StringType i : prefix) 842 dst.prefix.add(i.copy()); 843 }; 844 if (suffix != null) { 845 dst.suffix = new ArrayList<StringType>(); 846 for (StringType i : suffix) 847 dst.suffix.add(i.copy()); 848 }; 849 dst.period = period == null ? null : period.copy(); 850 } 851 852 protected HumanName typedCopy() { 853 return copy(); 854 } 855 856 @Override 857 public boolean equalsDeep(Base other_) { 858 if (!super.equalsDeep(other_)) 859 return false; 860 if (!(other_ instanceof HumanName)) 861 return false; 862 HumanName o = (HumanName) other_; 863 return compareDeep(use, o.use, true) && compareDeep(text, o.text, true) && compareDeep(family, o.family, true) 864 && compareDeep(given, o.given, true) && compareDeep(prefix, o.prefix, true) && compareDeep(suffix, o.suffix, true) 865 && compareDeep(period, o.period, true); 866 } 867 868 @Override 869 public boolean equalsShallow(Base other_) { 870 if (!super.equalsShallow(other_)) 871 return false; 872 if (!(other_ instanceof HumanName)) 873 return false; 874 HumanName o = (HumanName) other_; 875 return compareValues(use, o.use, true) && compareValues(text, o.text, true) && compareValues(family, o.family, true) 876 && compareValues(given, o.given, true) && compareValues(prefix, o.prefix, true) && compareValues(suffix, o.suffix, true) 877 ; 878 } 879 880 public boolean isEmpty() { 881 return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(use, text, family, given 882 , prefix, suffix, period); 883 } 884 885// Manual code (from Configuration.txt): 886/** 887 /** 888 * Returns all repetitions of {@link #getGiven() given name} as a space separated string 889 * 890 * @see DatatypeUtil#joinStringsSpaceSeparated(List) 891 */ 892 public String getGivenAsSingleString() { 893 return joinStringsSpaceSeparated(getGiven()); 894 } 895 896 /** 897 * Returns all repetitions of {@link #getPrefix() prefix name} as a space separated string 898 * 899 * @see DatatypeUtil#joinStringsSpaceSeparated(List) 900 */ 901 public String getPrefixAsSingleString() { 902 return joinStringsSpaceSeparated(getPrefix()); 903 } 904 905 /** 906 * Returns all repetitions of {@link #getSuffix() suffix} as a space separated string 907 * 908 * @see DatatypeUtil#joinStringsSpaceSeparated(List) 909 */ 910 public String getSuffixAsSingleString() { 911 return joinStringsSpaceSeparated(getSuffix()); 912 } 913 914 /** 915 * <p>Returns the {@link #getTextElement() text} element value if it is not null.</p> 916 917 * <p>If the {@link #getTextElement() text} element value is null, returns all the components of the name (prefix, 918 * given, family, suffix) as a single string with a single spaced string separating each part. </p> 919 * 920 * @return the human name as a single string 921 */ 922 public String getNameAsSingleString() { 923 if (hasText()) { 924 return getText().toString(); 925 } 926 927 List<StringType> nameParts = new ArrayList<StringType>(); 928 nameParts.addAll(getPrefix()); 929 nameParts.addAll(getGiven()); 930 if (hasFamilyElement()) { 931 nameParts.add(getFamilyElement()); 932 } 933 nameParts.addAll(getSuffix()); 934 if (nameParts.size() > 0) { 935 return joinStringsSpaceSeparated(nameParts); 936 } else { 937 return getTextElement().getValue(); 938 } 939 } 940 941 /** 942 * Joins a list of strings with a single space (' ') between each string 943 * 944 * TODO: replace with call to ca.uhn.fhir.util.DatatypeUtil.joinStringsSpaceSeparated when HAPI upgrades to 1.4 945 */ 946 private static String joinStringsSpaceSeparated(List<? extends IPrimitiveType<String>> theStrings) { 947 StringBuilder stringBuilder = new StringBuilder(); 948 for (IPrimitiveType<String> string : theStrings) { 949 if (string.isEmpty()) { 950 continue; 951 } 952 if (stringBuilder.length() > 0) { 953 stringBuilder.append(' '); 954 } 955 stringBuilder.append(string.getValue()); 956 } 957 return stringBuilder.toString(); 958 } 959// end addition 960 961} 962