001package org.hl7.fhir.r4.model; 002 003/* 004 Copyright (c) 2011+, HL7, Inc. 005 All rights reserved. 006 007 Redistribution and use in source and binary forms, with or without modification, 008 are permitted provided that the following conditions are met: 009 010 * Redistributions of source code must retain the above copyright notice, this 011 list of conditions and the following disclaimer. 012 * Redistributions in binary form must reproduce the above copyright notice, 013 this list of conditions and the following disclaimer in the documentation 014 and/or other materials provided with the distribution. 015 * Neither the name of HL7 nor the names of its contributors may be used to 016 endorse or promote products derived from this software without specific 017 prior written permission. 018 019 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 020 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 021 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 022 IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 023 INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 024 NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 025 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 026 WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 027 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 028 POSSIBILITY OF SUCH DAMAGE. 029 030*/ 031 032// Generated on Tue, May 12, 2020 07:26+1000 for FHIR v4.0.1 033import java.util.List; 034 035import org.hl7.fhir.exceptions.FHIRException; 036import org.hl7.fhir.instance.model.api.ICompositeType; 037import org.hl7.fhir.utilities.Utilities; 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 expression that is evaluated in a specified context and returns a value. 045 * The context of use of the expression must specify the context in which the 046 * expression is evaluated, and how the result of the expression is used. 047 */ 048@DatatypeDef(name = "Expression") 049public class Expression extends Type implements ICompositeType { 050 051 public enum ExpressionLanguage { 052 /** 053 * Clinical Quality Language. 054 */ 055 TEXT_CQL, 056 /** 057 * FHIRPath. 058 */ 059 TEXT_FHIRPATH, 060 /** 061 * FHIR's RESTful query syntax - typically independent of base URL. 062 */ 063 APPLICATION_XFHIRQUERY, 064 /** 065 * added to help the parsers with the generic types 066 */ 067 NULL; 068 069 public static ExpressionLanguage fromCode(String codeString) throws FHIRException { 070 if (codeString == null || "".equals(codeString)) 071 return null; 072 if ("text/cql".equals(codeString)) 073 return TEXT_CQL; 074 if ("text/fhirpath".equals(codeString)) 075 return TEXT_FHIRPATH; 076 if ("application/x-fhir-query".equals(codeString)) 077 return APPLICATION_XFHIRQUERY; 078 if (Configuration.isAcceptInvalidEnums()) 079 return null; 080 else 081 throw new FHIRException("Unknown ExpressionLanguage code '" + codeString + "'"); 082 } 083 084 public String toCode() { 085 switch (this) { 086 case TEXT_CQL: 087 return "text/cql"; 088 case TEXT_FHIRPATH: 089 return "text/fhirpath"; 090 case APPLICATION_XFHIRQUERY: 091 return "application/x-fhir-query"; 092 case NULL: 093 return null; 094 default: 095 return "?"; 096 } 097 } 098 099 public String getSystem() { 100 switch (this) { 101 case TEXT_CQL: 102 return "http://hl7.org/fhir/expression-language"; 103 case TEXT_FHIRPATH: 104 return "http://hl7.org/fhir/expression-language"; 105 case APPLICATION_XFHIRQUERY: 106 return "http://hl7.org/fhir/expression-language"; 107 case NULL: 108 return null; 109 default: 110 return "?"; 111 } 112 } 113 114 public String getDefinition() { 115 switch (this) { 116 case TEXT_CQL: 117 return "Clinical Quality Language."; 118 case TEXT_FHIRPATH: 119 return "FHIRPath."; 120 case APPLICATION_XFHIRQUERY: 121 return "FHIR's RESTful query syntax - typically independent of base URL."; 122 case NULL: 123 return null; 124 default: 125 return "?"; 126 } 127 } 128 129 public String getDisplay() { 130 switch (this) { 131 case TEXT_CQL: 132 return "CQL"; 133 case TEXT_FHIRPATH: 134 return "FHIRPath"; 135 case APPLICATION_XFHIRQUERY: 136 return "FHIR Query"; 137 case NULL: 138 return null; 139 default: 140 return "?"; 141 } 142 } 143 } 144 145 public static class ExpressionLanguageEnumFactory implements EnumFactory<ExpressionLanguage> { 146 public ExpressionLanguage fromCode(String codeString) throws IllegalArgumentException { 147 if (codeString == null || "".equals(codeString)) 148 if (codeString == null || "".equals(codeString)) 149 return null; 150 if ("text/cql".equals(codeString)) 151 return ExpressionLanguage.TEXT_CQL; 152 if ("text/fhirpath".equals(codeString)) 153 return ExpressionLanguage.TEXT_FHIRPATH; 154 if ("application/x-fhir-query".equals(codeString)) 155 return ExpressionLanguage.APPLICATION_XFHIRQUERY; 156 throw new IllegalArgumentException("Unknown ExpressionLanguage code '" + codeString + "'"); 157 } 158 159 public Enumeration<ExpressionLanguage> fromType(PrimitiveType<?> code) throws FHIRException { 160 if (code == null) 161 return null; 162 if (code.isEmpty()) 163 return new Enumeration<ExpressionLanguage>(this, ExpressionLanguage.NULL, code); 164 String codeString = code.asStringValue(); 165 if (codeString == null || "".equals(codeString)) 166 return new Enumeration<ExpressionLanguage>(this, ExpressionLanguage.NULL, code); 167 if ("text/cql".equals(codeString)) 168 return new Enumeration<ExpressionLanguage>(this, ExpressionLanguage.TEXT_CQL, code); 169 if ("text/fhirpath".equals(codeString)) 170 return new Enumeration<ExpressionLanguage>(this, ExpressionLanguage.TEXT_FHIRPATH, code); 171 if ("application/x-fhir-query".equals(codeString)) 172 return new Enumeration<ExpressionLanguage>(this, ExpressionLanguage.APPLICATION_XFHIRQUERY, code); 173 throw new FHIRException("Unknown ExpressionLanguage code '" + codeString + "'"); 174 } 175 176 public String toCode(ExpressionLanguage code) { 177 if (code == ExpressionLanguage.TEXT_CQL) 178 return "text/cql"; 179 if (code == ExpressionLanguage.TEXT_FHIRPATH) 180 return "text/fhirpath"; 181 if (code == ExpressionLanguage.APPLICATION_XFHIRQUERY) 182 return "application/x-fhir-query"; 183 return "?"; 184 } 185 186 public String toSystem(ExpressionLanguage code) { 187 return code.getSystem(); 188 } 189 } 190 191 /** 192 * A brief, natural language description of the condition that effectively 193 * communicates the intended semantics. 194 */ 195 @Child(name = "description", type = { 196 StringType.class }, order = 0, min = 0, max = 1, modifier = false, summary = true) 197 @Description(shortDefinition = "Natural language description of the condition", formalDefinition = "A brief, natural language description of the condition that effectively communicates the intended semantics.") 198 protected StringType description; 199 200 /** 201 * A short name assigned to the expression to allow for multiple reuse of the 202 * expression in the context where it is defined. 203 */ 204 @Child(name = "name", type = { IdType.class }, order = 1, min = 0, max = 1, modifier = false, summary = true) 205 @Description(shortDefinition = "Short name assigned to expression for reuse", formalDefinition = "A short name assigned to the expression to allow for multiple reuse of the expression in the context where it is defined.") 206 protected IdType name; 207 208 /** 209 * The media type of the language for the expression. 210 */ 211 @Child(name = "language", type = { CodeType.class }, order = 2, min = 1, max = 1, modifier = false, summary = true) 212 @Description(shortDefinition = "text/cql | text/fhirpath | application/x-fhir-query | etc.", formalDefinition = "The media type of the language for the expression.") 213 @ca.uhn.fhir.model.api.annotation.Binding(valueSet = "http://hl7.org/fhir/ValueSet/expression-language") 214 protected CodeType language; 215 216 /** 217 * An expression in the specified language that returns a value. 218 */ 219 @Child(name = "expression", type = { 220 StringType.class }, order = 3, min = 0, max = 1, modifier = false, summary = true) 221 @Description(shortDefinition = "Expression in specified language", formalDefinition = "An expression in the specified language that returns a value.") 222 protected StringType expression; 223 224 /** 225 * A URI that defines where the expression is found. 226 */ 227 @Child(name = "reference", type = { UriType.class }, order = 4, min = 0, max = 1, modifier = false, summary = true) 228 @Description(shortDefinition = "Where the expression is found", formalDefinition = "A URI that defines where the expression is found.") 229 protected UriType reference; 230 231 private static final long serialVersionUID = -941986742L; 232 233 /** 234 * Constructor 235 */ 236 public Expression() { 237 super(); 238 } 239 240 /** 241 * Constructor 242 */ 243 public Expression(CodeType language) { 244 super(); 245 this.language = language; 246 } 247 248 /** 249 * @return {@link #description} (A brief, natural language description of the 250 * condition that effectively communicates the intended semantics.). 251 * This is the underlying object with id, value and extensions. The 252 * accessor "getDescription" gives direct access to the value 253 */ 254 public StringType getDescriptionElement() { 255 if (this.description == null) 256 if (Configuration.errorOnAutoCreate()) 257 throw new Error("Attempt to auto-create Expression.description"); 258 else if (Configuration.doAutoCreate()) 259 this.description = new StringType(); // bb 260 return this.description; 261 } 262 263 public boolean hasDescriptionElement() { 264 return this.description != null && !this.description.isEmpty(); 265 } 266 267 public boolean hasDescription() { 268 return this.description != null && !this.description.isEmpty(); 269 } 270 271 /** 272 * @param value {@link #description} (A brief, natural language description of 273 * the condition that effectively communicates the intended 274 * semantics.). This is the underlying object with id, value and 275 * extensions. The accessor "getDescription" gives direct access to 276 * the value 277 */ 278 public Expression setDescriptionElement(StringType value) { 279 this.description = value; 280 return this; 281 } 282 283 /** 284 * @return A brief, natural language description of the condition that 285 * effectively communicates the intended semantics. 286 */ 287 public String getDescription() { 288 return this.description == null ? null : this.description.getValue(); 289 } 290 291 /** 292 * @param value A brief, natural language description of the condition that 293 * effectively communicates the intended semantics. 294 */ 295 public Expression setDescription(String value) { 296 if (Utilities.noString(value)) 297 this.description = null; 298 else { 299 if (this.description == null) 300 this.description = new StringType(); 301 this.description.setValue(value); 302 } 303 return this; 304 } 305 306 /** 307 * @return {@link #name} (A short name assigned to the expression to allow for 308 * multiple reuse of the expression in the context where it is 309 * defined.). This is the underlying object with id, value and 310 * extensions. The accessor "getName" gives direct access to the value 311 */ 312 public IdType getNameElement() { 313 if (this.name == null) 314 if (Configuration.errorOnAutoCreate()) 315 throw new Error("Attempt to auto-create Expression.name"); 316 else if (Configuration.doAutoCreate()) 317 this.name = new IdType(); // bb 318 return this.name; 319 } 320 321 public boolean hasNameElement() { 322 return this.name != null && !this.name.isEmpty(); 323 } 324 325 public boolean hasName() { 326 return this.name != null && !this.name.isEmpty(); 327 } 328 329 /** 330 * @param value {@link #name} (A short name assigned to the expression to allow 331 * for multiple reuse of the expression in the context where it is 332 * defined.). This is the underlying object with id, value and 333 * extensions. The accessor "getName" gives direct access to the 334 * value 335 */ 336 public Expression setNameElement(IdType value) { 337 this.name = value; 338 return this; 339 } 340 341 /** 342 * @return A short name assigned to the expression to allow for multiple reuse 343 * of the expression in the context where it is defined. 344 */ 345 public String getName() { 346 return this.name == null ? null : this.name.getValue(); 347 } 348 349 /** 350 * @param value A short name assigned to the expression to allow for multiple 351 * reuse of the expression in the context where it is defined. 352 */ 353 public Expression setName(String value) { 354 if (Utilities.noString(value)) 355 this.name = null; 356 else { 357 if (this.name == null) 358 this.name = new IdType(); 359 this.name.setValue(value); 360 } 361 return this; 362 } 363 364 /** 365 * @return {@link #language} (The media type of the language for the 366 * expression.). This is the underlying object with id, value and 367 * extensions. The accessor "getLanguage" gives direct access to the 368 * value 369 */ 370 public CodeType getLanguageElement() { 371 if (this.language == null) 372 if (Configuration.errorOnAutoCreate()) 373 throw new Error("Attempt to auto-create Expression.language"); 374 else if (Configuration.doAutoCreate()) 375 this.language = new CodeType(); // bb 376 return this.language; 377 } 378 379 public boolean hasLanguageElement() { 380 return this.language != null && !this.language.isEmpty(); 381 } 382 383 public boolean hasLanguage() { 384 return this.language != null && !this.language.isEmpty(); 385 } 386 387 /** 388 * @param value {@link #language} (The media type of the language for the 389 * expression.). This is the underlying object with id, value and 390 * extensions. The accessor "getLanguage" gives direct access to 391 * the value 392 */ 393 public Expression setLanguageElement(CodeType value) { 394 this.language = value; 395 return this; 396 } 397 398 /** 399 * @return The media type of the language for the expression. 400 */ 401 public String getLanguage() { 402 return this.language == null ? null : this.language.getValue(); 403 } 404 405 /** 406 * @param value The media type of the language for the expression. 407 */ 408 public Expression setLanguage(String value) { 409 if (this.language == null) 410 this.language = new CodeType(); 411 this.language.setValue(value); 412 return this; 413 } 414 415 /** 416 * @return {@link #expression} (An expression in the specified language that 417 * returns a value.). This is the underlying object with id, value and 418 * extensions. The accessor "getExpression" gives direct access to the 419 * value 420 */ 421 public StringType getExpressionElement() { 422 if (this.expression == null) 423 if (Configuration.errorOnAutoCreate()) 424 throw new Error("Attempt to auto-create Expression.expression"); 425 else if (Configuration.doAutoCreate()) 426 this.expression = new StringType(); // bb 427 return this.expression; 428 } 429 430 public boolean hasExpressionElement() { 431 return this.expression != null && !this.expression.isEmpty(); 432 } 433 434 public boolean hasExpression() { 435 return this.expression != null && !this.expression.isEmpty(); 436 } 437 438 /** 439 * @param value {@link #expression} (An expression in the specified language 440 * that returns a value.). This is the underlying object with id, 441 * value and extensions. The accessor "getExpression" gives direct 442 * access to the value 443 */ 444 public Expression setExpressionElement(StringType value) { 445 this.expression = value; 446 return this; 447 } 448 449 /** 450 * @return An expression in the specified language that returns a value. 451 */ 452 public String getExpression() { 453 return this.expression == null ? null : this.expression.getValue(); 454 } 455 456 /** 457 * @param value An expression in the specified language that returns a value. 458 */ 459 public Expression setExpression(String value) { 460 if (Utilities.noString(value)) 461 this.expression = null; 462 else { 463 if (this.expression == null) 464 this.expression = new StringType(); 465 this.expression.setValue(value); 466 } 467 return this; 468 } 469 470 /** 471 * @return {@link #reference} (A URI that defines where the expression is 472 * found.). This is the underlying object with id, value and extensions. 473 * The accessor "getReference" gives direct access to the value 474 */ 475 public UriType getReferenceElement() { 476 if (this.reference == null) 477 if (Configuration.errorOnAutoCreate()) 478 throw new Error("Attempt to auto-create Expression.reference"); 479 else if (Configuration.doAutoCreate()) 480 this.reference = new UriType(); // bb 481 return this.reference; 482 } 483 484 public boolean hasReferenceElement() { 485 return this.reference != null && !this.reference.isEmpty(); 486 } 487 488 public boolean hasReference() { 489 return this.reference != null && !this.reference.isEmpty(); 490 } 491 492 /** 493 * @param value {@link #reference} (A URI that defines where the expression is 494 * found.). This is the underlying object with id, value and 495 * extensions. The accessor "getReference" gives direct access to 496 * the value 497 */ 498 public Expression setReferenceElement(UriType value) { 499 this.reference = value; 500 return this; 501 } 502 503 /** 504 * @return A URI that defines where the expression is found. 505 */ 506 public String getReference() { 507 return this.reference == null ? null : this.reference.getValue(); 508 } 509 510 /** 511 * @param value A URI that defines where the expression is found. 512 */ 513 public Expression setReference(String value) { 514 if (Utilities.noString(value)) 515 this.reference = null; 516 else { 517 if (this.reference == null) 518 this.reference = new UriType(); 519 this.reference.setValue(value); 520 } 521 return this; 522 } 523 524 protected void listChildren(List<Property> children) { 525 super.listChildren(children); 526 children.add(new Property("description", "string", 527 "A brief, natural language description of the condition that effectively communicates the intended semantics.", 528 0, 1, description)); 529 children.add(new Property("name", "id", 530 "A short name assigned to the expression to allow for multiple reuse of the expression in the context where it is defined.", 531 0, 1, name)); 532 children 533 .add(new Property("language", "code", "The media type of the language for the expression.", 0, 1, language)); 534 children.add(new Property("expression", "string", "An expression in the specified language that returns a value.", 535 0, 1, expression)); 536 children 537 .add(new Property("reference", "uri", "A URI that defines where the expression is found.", 0, 1, reference)); 538 } 539 540 @Override 541 public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException { 542 switch (_hash) { 543 case -1724546052: 544 /* description */ return new Property("description", "string", 545 "A brief, natural language description of the condition that effectively communicates the intended semantics.", 546 0, 1, description); 547 case 3373707: 548 /* name */ return new Property("name", "id", 549 "A short name assigned to the expression to allow for multiple reuse of the expression in the context where it is defined.", 550 0, 1, name); 551 case -1613589672: 552 /* language */ return new Property("language", "code", "The media type of the language for the expression.", 0, 1, 553 language); 554 case -1795452264: 555 /* expression */ return new Property("expression", "string", 556 "An expression in the specified language that returns a value.", 0, 1, expression); 557 case -925155509: 558 /* reference */ return new Property("reference", "uri", "A URI that defines where the expression is found.", 0, 1, 559 reference); 560 default: 561 return super.getNamedProperty(_hash, _name, _checkValid); 562 } 563 564 } 565 566 @Override 567 public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException { 568 switch (hash) { 569 case -1724546052: 570 /* description */ return this.description == null ? new Base[0] : new Base[] { this.description }; // StringType 571 case 3373707: 572 /* name */ return this.name == null ? new Base[0] : new Base[] { this.name }; // IdType 573 case -1613589672: 574 /* language */ return this.language == null ? new Base[0] : new Base[] { this.language }; // Enumeration<ExpressionLanguage> 575 case -1795452264: 576 /* expression */ return this.expression == null ? new Base[0] : new Base[] { this.expression }; // StringType 577 case -925155509: 578 /* reference */ return this.reference == null ? new Base[0] : new Base[] { this.reference }; // UriType 579 default: 580 return super.getProperty(hash, name, checkValid); 581 } 582 583 } 584 585 @Override 586 public Base setProperty(int hash, String name, Base value) throws FHIRException { 587 switch (hash) { 588 case -1724546052: // description 589 this.description = castToString(value); // StringType 590 return value; 591 case 3373707: // name 592 this.name = castToId(value); // IdType 593 return value; 594 case -1613589672: // language 595 this.language = castToCode(value); // Enumeration<ExpressionLanguage> 596 return value; 597 case -1795452264: // expression 598 this.expression = castToString(value); // StringType 599 return value; 600 case -925155509: // reference 601 this.reference = castToUri(value); // UriType 602 return value; 603 default: 604 return super.setProperty(hash, name, value); 605 } 606 607 } 608 609 @Override 610 public Base setProperty(String name, Base value) throws FHIRException { 611 if (name.equals("description")) { 612 this.description = castToString(value); // StringType 613 } else if (name.equals("name")) { 614 this.name = castToId(value); // IdType 615 } else if (name.equals("language")) { 616 this.language = castToCode(value); // Enumeration<ExpressionLanguage> 617 } else if (name.equals("expression")) { 618 this.expression = castToString(value); // StringType 619 } else if (name.equals("reference")) { 620 this.reference = castToUri(value); // UriType 621 } else 622 return super.setProperty(name, value); 623 return value; 624 } 625 626 @Override 627 public Base makeProperty(int hash, String name) throws FHIRException { 628 switch (hash) { 629 case -1724546052: 630 return getDescriptionElement(); 631 case 3373707: 632 return getNameElement(); 633 case -1613589672: 634 return getLanguageElement(); 635 case -1795452264: 636 return getExpressionElement(); 637 case -925155509: 638 return getReferenceElement(); 639 default: 640 return super.makeProperty(hash, name); 641 } 642 643 } 644 645 @Override 646 public String[] getTypesForProperty(int hash, String name) throws FHIRException { 647 switch (hash) { 648 case -1724546052: 649 /* description */ return new String[] { "string" }; 650 case 3373707: 651 /* name */ return new String[] { "id" }; 652 case -1613589672: 653 /* language */ return new String[] { "code" }; 654 case -1795452264: 655 /* expression */ return new String[] { "string" }; 656 case -925155509: 657 /* reference */ return new String[] { "uri" }; 658 default: 659 return super.getTypesForProperty(hash, name); 660 } 661 662 } 663 664 @Override 665 public Base addChild(String name) throws FHIRException { 666 if (name.equals("description")) { 667 throw new FHIRException("Cannot call addChild on a singleton property Expression.description"); 668 } else if (name.equals("name")) { 669 throw new FHIRException("Cannot call addChild on a singleton property Expression.name"); 670 } else if (name.equals("language")) { 671 throw new FHIRException("Cannot call addChild on a singleton property Expression.language"); 672 } else if (name.equals("expression")) { 673 throw new FHIRException("Cannot call addChild on a singleton property Expression.expression"); 674 } else if (name.equals("reference")) { 675 throw new FHIRException("Cannot call addChild on a singleton property Expression.reference"); 676 } else 677 return super.addChild(name); 678 } 679 680 public String fhirType() { 681 return "Expression"; 682 683 } 684 685 public Expression copy() { 686 Expression dst = new Expression(); 687 copyValues(dst); 688 return dst; 689 } 690 691 public void copyValues(Expression dst) { 692 super.copyValues(dst); 693 dst.description = description == null ? null : description.copy(); 694 dst.name = name == null ? null : name.copy(); 695 dst.language = language == null ? null : language.copy(); 696 dst.expression = expression == null ? null : expression.copy(); 697 dst.reference = reference == null ? null : reference.copy(); 698 } 699 700 protected Expression typedCopy() { 701 return copy(); 702 } 703 704 @Override 705 public boolean equalsDeep(Base other_) { 706 if (!super.equalsDeep(other_)) 707 return false; 708 if (!(other_ instanceof Expression)) 709 return false; 710 Expression o = (Expression) other_; 711 return compareDeep(description, o.description, true) && compareDeep(name, o.name, true) 712 && compareDeep(language, o.language, true) && compareDeep(expression, o.expression, true) 713 && compareDeep(reference, o.reference, true); 714 } 715 716 @Override 717 public boolean equalsShallow(Base other_) { 718 if (!super.equalsShallow(other_)) 719 return false; 720 if (!(other_ instanceof Expression)) 721 return false; 722 Expression o = (Expression) other_; 723 return compareValues(description, o.description, true) && compareValues(name, o.name, true) 724 && compareValues(language, o.language, true) && compareValues(expression, o.expression, true) 725 && compareValues(reference, o.reference, true); 726 } 727 728 public boolean isEmpty() { 729 return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(description, name, language, expression, reference); 730 } 731 732}