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.ArrayList; 034import java.util.List; 035 036import org.hl7.fhir.exceptions.FHIRException; 037import org.hl7.fhir.instance.model.api.ICompositeType; 038import org.hl7.fhir.utilities.Utilities; 039 040import ca.uhn.fhir.model.api.annotation.Child; 041import ca.uhn.fhir.model.api.annotation.DatatypeDef; 042import ca.uhn.fhir.model.api.annotation.Description; 043 044/** 045 * Specifies contact information for a person or organization. 046 */ 047@DatatypeDef(name = "ContactDetail") 048public class ContactDetail extends Type implements ICompositeType { 049 050 /** 051 * The name of an individual to contact. 052 */ 053 @Child(name = "name", type = { StringType.class }, order = 0, min = 0, max = 1, modifier = false, summary = true) 054 @Description(shortDefinition = "Name of an individual to contact", formalDefinition = "The name of an individual to contact.") 055 protected StringType name; 056 057 /** 058 * The contact details for the individual (if a name was provided) or the 059 * organization. 060 */ 061 @Child(name = "telecom", type = { 062 ContactPoint.class }, order = 1, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = true) 063 @Description(shortDefinition = "Contact details for individual or organization", formalDefinition = "The contact details for the individual (if a name was provided) or the organization.") 064 protected List<ContactPoint> telecom; 065 066 private static final long serialVersionUID = 816838773L; 067 068 /** 069 * Constructor 070 */ 071 public ContactDetail() { 072 super(); 073 } 074 075 /** 076 * @return {@link #name} (The name of an individual to contact.). This is the 077 * underlying object with id, value and extensions. The accessor 078 * "getName" gives direct access to the value 079 */ 080 public StringType getNameElement() { 081 if (this.name == null) 082 if (Configuration.errorOnAutoCreate()) 083 throw new Error("Attempt to auto-create ContactDetail.name"); 084 else if (Configuration.doAutoCreate()) 085 this.name = new StringType(); // bb 086 return this.name; 087 } 088 089 public boolean hasNameElement() { 090 return this.name != null && !this.name.isEmpty(); 091 } 092 093 public boolean hasName() { 094 return this.name != null && !this.name.isEmpty(); 095 } 096 097 /** 098 * @param value {@link #name} (The name of an individual to contact.). This is 099 * the underlying object with id, value and extensions. The 100 * accessor "getName" gives direct access to the value 101 */ 102 public ContactDetail setNameElement(StringType value) { 103 this.name = value; 104 return this; 105 } 106 107 /** 108 * @return The name of an individual to contact. 109 */ 110 public String getName() { 111 return this.name == null ? null : this.name.getValue(); 112 } 113 114 /** 115 * @param value The name of an individual to contact. 116 */ 117 public ContactDetail setName(String value) { 118 if (Utilities.noString(value)) 119 this.name = null; 120 else { 121 if (this.name == null) 122 this.name = new StringType(); 123 this.name.setValue(value); 124 } 125 return this; 126 } 127 128 /** 129 * @return {@link #telecom} (The contact details for the individual (if a name 130 * was provided) or the organization.) 131 */ 132 public List<ContactPoint> getTelecom() { 133 if (this.telecom == null) 134 this.telecom = new ArrayList<ContactPoint>(); 135 return this.telecom; 136 } 137 138 /** 139 * @return Returns a reference to <code>this</code> for easy method chaining 140 */ 141 public ContactDetail setTelecom(List<ContactPoint> theTelecom) { 142 this.telecom = theTelecom; 143 return this; 144 } 145 146 public boolean hasTelecom() { 147 if (this.telecom == null) 148 return false; 149 for (ContactPoint item : this.telecom) 150 if (!item.isEmpty()) 151 return true; 152 return false; 153 } 154 155 public ContactPoint addTelecom() { // 3 156 ContactPoint t = new ContactPoint(); 157 if (this.telecom == null) 158 this.telecom = new ArrayList<ContactPoint>(); 159 this.telecom.add(t); 160 return t; 161 } 162 163 public ContactDetail addTelecom(ContactPoint t) { // 3 164 if (t == null) 165 return this; 166 if (this.telecom == null) 167 this.telecom = new ArrayList<ContactPoint>(); 168 this.telecom.add(t); 169 return this; 170 } 171 172 /** 173 * @return The first repetition of repeating field {@link #telecom}, creating it 174 * if it does not already exist 175 */ 176 public ContactPoint getTelecomFirstRep() { 177 if (getTelecom().isEmpty()) { 178 addTelecom(); 179 } 180 return getTelecom().get(0); 181 } 182 183 protected void listChildren(List<Property> children) { 184 super.listChildren(children); 185 children.add(new Property("name", "string", "The name of an individual to contact.", 0, 1, name)); 186 children.add(new Property("telecom", "ContactPoint", 187 "The contact details for the individual (if a name was provided) or the organization.", 0, 188 java.lang.Integer.MAX_VALUE, telecom)); 189 } 190 191 @Override 192 public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException { 193 switch (_hash) { 194 case 3373707: 195 /* name */ return new Property("name", "string", "The name of an individual to contact.", 0, 1, name); 196 case -1429363305: 197 /* telecom */ return new Property("telecom", "ContactPoint", 198 "The contact details for the individual (if a name was provided) or the organization.", 0, 199 java.lang.Integer.MAX_VALUE, telecom); 200 default: 201 return super.getNamedProperty(_hash, _name, _checkValid); 202 } 203 204 } 205 206 @Override 207 public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException { 208 switch (hash) { 209 case 3373707: 210 /* name */ return this.name == null ? new Base[0] : new Base[] { this.name }; // StringType 211 case -1429363305: 212 /* telecom */ return this.telecom == null ? new Base[0] : this.telecom.toArray(new Base[this.telecom.size()]); // ContactPoint 213 default: 214 return super.getProperty(hash, name, checkValid); 215 } 216 217 } 218 219 @Override 220 public Base setProperty(int hash, String name, Base value) throws FHIRException { 221 switch (hash) { 222 case 3373707: // name 223 this.name = castToString(value); // StringType 224 return value; 225 case -1429363305: // telecom 226 this.getTelecom().add(castToContactPoint(value)); // ContactPoint 227 return value; 228 default: 229 return super.setProperty(hash, name, value); 230 } 231 232 } 233 234 @Override 235 public Base setProperty(String name, Base value) throws FHIRException { 236 if (name.equals("name")) { 237 this.name = castToString(value); // StringType 238 } else if (name.equals("telecom")) { 239 this.getTelecom().add(castToContactPoint(value)); 240 } else 241 return super.setProperty(name, value); 242 return value; 243 } 244 245 @Override 246 public void removeChild(String name, Base value) throws FHIRException { 247 if (name.equals("name")) { 248 this.name = null; 249 } else if (name.equals("telecom")) { 250 this.getTelecom().remove(castToContactPoint(value)); 251 } else 252 super.removeChild(name, value); 253 254 } 255 256 @Override 257 public Base makeProperty(int hash, String name) throws FHIRException { 258 switch (hash) { 259 case 3373707: 260 return getNameElement(); 261 case -1429363305: 262 return addTelecom(); 263 default: 264 return super.makeProperty(hash, name); 265 } 266 267 } 268 269 @Override 270 public String[] getTypesForProperty(int hash, String name) throws FHIRException { 271 switch (hash) { 272 case 3373707: 273 /* name */ return new String[] { "string" }; 274 case -1429363305: 275 /* telecom */ return new String[] { "ContactPoint" }; 276 default: 277 return super.getTypesForProperty(hash, name); 278 } 279 280 } 281 282 @Override 283 public Base addChild(String name) throws FHIRException { 284 if (name.equals("name")) { 285 throw new FHIRException("Cannot call addChild on a singleton property ContactDetail.name"); 286 } else if (name.equals("telecom")) { 287 return addTelecom(); 288 } else 289 return super.addChild(name); 290 } 291 292 public String fhirType() { 293 return "ContactDetail"; 294 295 } 296 297 public ContactDetail copy() { 298 ContactDetail dst = new ContactDetail(); 299 copyValues(dst); 300 return dst; 301 } 302 303 public void copyValues(ContactDetail dst) { 304 super.copyValues(dst); 305 dst.name = name == null ? null : name.copy(); 306 if (telecom != null) { 307 dst.telecom = new ArrayList<ContactPoint>(); 308 for (ContactPoint i : telecom) 309 dst.telecom.add(i.copy()); 310 } 311 ; 312 } 313 314 protected ContactDetail typedCopy() { 315 return copy(); 316 } 317 318 @Override 319 public boolean equalsDeep(Base other_) { 320 if (!super.equalsDeep(other_)) 321 return false; 322 if (!(other_ instanceof ContactDetail)) 323 return false; 324 ContactDetail o = (ContactDetail) other_; 325 return compareDeep(name, o.name, true) && compareDeep(telecom, o.telecom, true); 326 } 327 328 @Override 329 public boolean equalsShallow(Base other_) { 330 if (!super.equalsShallow(other_)) 331 return false; 332 if (!(other_ instanceof ContactDetail)) 333 return false; 334 ContactDetail o = (ContactDetail) other_; 335 return compareValues(name, o.name, true); 336 } 337 338 public boolean isEmpty() { 339 return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(name, telecom); 340 } 341 342}