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 * Address Type: An address expressed using postal conventions (as opposed to GPS or other location definition formats).  This data type may be used to convey addresses for use in delivering mail as well as for visiting locations which might not be valid for mail delivery.  There are a variety of postal address formats defined around the world.
050The ISO21090-codedString may be used to provide a coded representation of the contents of strings in an Address.
051 */
052@DatatypeDef(name="Address")
053public class Address extends DataType implements ICompositeType {
054
055    public enum AddressType {
056        /**
057         * Mailing addresses - PO Boxes and care-of addresses.
058         */
059        POSTAL, 
060        /**
061         * A physical address that can be visited.
062         */
063        PHYSICAL, 
064        /**
065         * An address that is both physical and postal.
066         */
067        BOTH, 
068        /**
069         * added to help the parsers with the generic types
070         */
071        NULL;
072        public static AddressType fromCode(String codeString) throws FHIRException {
073            if (codeString == null || "".equals(codeString))
074                return null;
075        if ("postal".equals(codeString))
076          return POSTAL;
077        if ("physical".equals(codeString))
078          return PHYSICAL;
079        if ("both".equals(codeString))
080          return BOTH;
081        if (Configuration.isAcceptInvalidEnums())
082          return null;
083        else
084          throw new FHIRException("Unknown AddressType code '"+codeString+"'");
085        }
086        public String toCode() {
087          switch (this) {
088            case POSTAL: return "postal";
089            case PHYSICAL: return "physical";
090            case BOTH: return "both";
091            case NULL: return null;
092            default: return "?";
093          }
094        }
095        public String getSystem() {
096          switch (this) {
097            case POSTAL: return "http://hl7.org/fhir/address-type";
098            case PHYSICAL: return "http://hl7.org/fhir/address-type";
099            case BOTH: return "http://hl7.org/fhir/address-type";
100            case NULL: return null;
101            default: return "?";
102          }
103        }
104        public String getDefinition() {
105          switch (this) {
106            case POSTAL: return "Mailing addresses - PO Boxes and care-of addresses.";
107            case PHYSICAL: return "A physical address that can be visited.";
108            case BOTH: return "An address that is both physical and postal.";
109            case NULL: return null;
110            default: return "?";
111          }
112        }
113        public String getDisplay() {
114          switch (this) {
115            case POSTAL: return "Postal";
116            case PHYSICAL: return "Physical";
117            case BOTH: return "Postal & Physical";
118            case NULL: return null;
119            default: return "?";
120          }
121        }
122    }
123
124  public static class AddressTypeEnumFactory implements EnumFactory<AddressType> {
125    public AddressType fromCode(String codeString) throws IllegalArgumentException {
126      if (codeString == null || "".equals(codeString))
127            if (codeString == null || "".equals(codeString))
128                return null;
129        if ("postal".equals(codeString))
130          return AddressType.POSTAL;
131        if ("physical".equals(codeString))
132          return AddressType.PHYSICAL;
133        if ("both".equals(codeString))
134          return AddressType.BOTH;
135        throw new IllegalArgumentException("Unknown AddressType code '"+codeString+"'");
136        }
137        public Enumeration<AddressType> fromType(PrimitiveType<?> code) throws FHIRException {
138          if (code == null)
139            return null;
140          if (code.isEmpty())
141            return new Enumeration<AddressType>(this, AddressType.NULL, code);
142          String codeString = ((PrimitiveType) code).asStringValue();
143          if (codeString == null || "".equals(codeString))
144            return new Enumeration<AddressType>(this, AddressType.NULL, code);
145        if ("postal".equals(codeString))
146          return new Enumeration<AddressType>(this, AddressType.POSTAL, code);
147        if ("physical".equals(codeString))
148          return new Enumeration<AddressType>(this, AddressType.PHYSICAL, code);
149        if ("both".equals(codeString))
150          return new Enumeration<AddressType>(this, AddressType.BOTH, code);
151        throw new FHIRException("Unknown AddressType code '"+codeString+"'");
152        }
153    public String toCode(AddressType code) {
154      if (code == AddressType.POSTAL)
155        return "postal";
156      if (code == AddressType.PHYSICAL)
157        return "physical";
158      if (code == AddressType.BOTH)
159        return "both";
160      return "?";
161      }
162    public String toSystem(AddressType code) {
163      return code.getSystem();
164      }
165    }
166
167    public enum AddressUse {
168        /**
169         * A communication address at a home.
170         */
171        HOME, 
172        /**
173         * An office address. First choice for business related contacts during business hours.
174         */
175        WORK, 
176        /**
177         * A temporary address. The period can provide more detailed information.
178         */
179        TEMP, 
180        /**
181         * This address is no longer in use (or was never correct but retained for records).
182         */
183        OLD, 
184        /**
185         * An address to be used to send bills, invoices, receipts etc.
186         */
187        BILLING, 
188        /**
189         * added to help the parsers with the generic types
190         */
191        NULL;
192        public static AddressUse fromCode(String codeString) throws FHIRException {
193            if (codeString == null || "".equals(codeString))
194                return null;
195        if ("home".equals(codeString))
196          return HOME;
197        if ("work".equals(codeString))
198          return WORK;
199        if ("temp".equals(codeString))
200          return TEMP;
201        if ("old".equals(codeString))
202          return OLD;
203        if ("billing".equals(codeString))
204          return BILLING;
205        if (Configuration.isAcceptInvalidEnums())
206          return null;
207        else
208          throw new FHIRException("Unknown AddressUse code '"+codeString+"'");
209        }
210        public String toCode() {
211          switch (this) {
212            case HOME: return "home";
213            case WORK: return "work";
214            case TEMP: return "temp";
215            case OLD: return "old";
216            case BILLING: return "billing";
217            case NULL: return null;
218            default: return "?";
219          }
220        }
221        public String getSystem() {
222          switch (this) {
223            case HOME: return "http://hl7.org/fhir/address-use";
224            case WORK: return "http://hl7.org/fhir/address-use";
225            case TEMP: return "http://hl7.org/fhir/address-use";
226            case OLD: return "http://hl7.org/fhir/address-use";
227            case BILLING: return "http://hl7.org/fhir/address-use";
228            case NULL: return null;
229            default: return "?";
230          }
231        }
232        public String getDefinition() {
233          switch (this) {
234            case HOME: return "A communication address at a home.";
235            case WORK: return "An office address. First choice for business related contacts during business hours.";
236            case TEMP: return "A temporary address. The period can provide more detailed information.";
237            case OLD: return "This address is no longer in use (or was never correct but retained for records).";
238            case BILLING: return "An address to be used to send bills, invoices, receipts etc.";
239            case NULL: return null;
240            default: return "?";
241          }
242        }
243        public String getDisplay() {
244          switch (this) {
245            case HOME: return "Home";
246            case WORK: return "Work";
247            case TEMP: return "Temporary";
248            case OLD: return "Old / Incorrect";
249            case BILLING: return "Billing";
250            case NULL: return null;
251            default: return "?";
252          }
253        }
254    }
255
256  public static class AddressUseEnumFactory implements EnumFactory<AddressUse> {
257    public AddressUse fromCode(String codeString) throws IllegalArgumentException {
258      if (codeString == null || "".equals(codeString))
259            if (codeString == null || "".equals(codeString))
260                return null;
261        if ("home".equals(codeString))
262          return AddressUse.HOME;
263        if ("work".equals(codeString))
264          return AddressUse.WORK;
265        if ("temp".equals(codeString))
266          return AddressUse.TEMP;
267        if ("old".equals(codeString))
268          return AddressUse.OLD;
269        if ("billing".equals(codeString))
270          return AddressUse.BILLING;
271        throw new IllegalArgumentException("Unknown AddressUse code '"+codeString+"'");
272        }
273        public Enumeration<AddressUse> fromType(PrimitiveType<?> code) throws FHIRException {
274          if (code == null)
275            return null;
276          if (code.isEmpty())
277            return new Enumeration<AddressUse>(this, AddressUse.NULL, code);
278          String codeString = ((PrimitiveType) code).asStringValue();
279          if (codeString == null || "".equals(codeString))
280            return new Enumeration<AddressUse>(this, AddressUse.NULL, code);
281        if ("home".equals(codeString))
282          return new Enumeration<AddressUse>(this, AddressUse.HOME, code);
283        if ("work".equals(codeString))
284          return new Enumeration<AddressUse>(this, AddressUse.WORK, code);
285        if ("temp".equals(codeString))
286          return new Enumeration<AddressUse>(this, AddressUse.TEMP, code);
287        if ("old".equals(codeString))
288          return new Enumeration<AddressUse>(this, AddressUse.OLD, code);
289        if ("billing".equals(codeString))
290          return new Enumeration<AddressUse>(this, AddressUse.BILLING, code);
291        throw new FHIRException("Unknown AddressUse code '"+codeString+"'");
292        }
293    public String toCode(AddressUse code) {
294      if (code == AddressUse.HOME)
295        return "home";
296      if (code == AddressUse.WORK)
297        return "work";
298      if (code == AddressUse.TEMP)
299        return "temp";
300      if (code == AddressUse.OLD)
301        return "old";
302      if (code == AddressUse.BILLING)
303        return "billing";
304      return "?";
305      }
306    public String toSystem(AddressUse code) {
307      return code.getSystem();
308      }
309    }
310
311    /**
312     * The purpose of this address.
313     */
314    @Child(name = "use", type = {CodeType.class}, order=0, min=0, max=1, modifier=true, summary=true)
315    @Description(shortDefinition="home | work | temp | old | billing - purpose of this address", formalDefinition="The purpose of this address." )
316    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/address-use")
317    protected Enumeration<AddressUse> use;
318
319    /**
320     * Distinguishes between physical addresses (those you can visit) and mailing addresses (e.g. PO Boxes and care-of addresses). Most addresses are both.
321     */
322    @Child(name = "type", type = {CodeType.class}, order=1, min=0, max=1, modifier=false, summary=true)
323    @Description(shortDefinition="postal | physical | both", formalDefinition="Distinguishes between physical addresses (those you can visit) and mailing addresses (e.g. PO Boxes and care-of addresses). Most addresses are both." )
324    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/address-type")
325    protected Enumeration<AddressType> type;
326
327    /**
328     * Specifies the entire address as it should be displayed e.g. on a postal label. This may be provided instead of or as well as the specific parts.
329     */
330    @Child(name = "text", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=true)
331    @Description(shortDefinition="Text representation of the address", formalDefinition="Specifies the entire address as it should be displayed e.g. on a postal label. This may be provided instead of or as well as the specific parts." )
332    protected StringType text;
333
334    /**
335     * This component contains the house number, apartment number, street name, street direction,  P.O. Box number, delivery hints, and similar address information.
336     */
337    @Child(name = "line", type = {StringType.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
338    @Description(shortDefinition="Street name, number, direction & P.O. Box etc.", formalDefinition="This component contains the house number, apartment number, street name, street direction,  P.O. Box number, delivery hints, and similar address information." )
339    protected List<StringType> line;
340
341    /**
342     * The name of the city, town, suburb, village or other community or delivery center.
343     */
344    @Child(name = "city", type = {StringType.class}, order=4, min=0, max=1, modifier=false, summary=true)
345    @Description(shortDefinition="Name of city, town etc.", formalDefinition="The name of the city, town, suburb, village or other community or delivery center." )
346    protected StringType city;
347
348    /**
349     * The name of the administrative area (county).
350     */
351    @Child(name = "district", type = {StringType.class}, order=5, min=0, max=1, modifier=false, summary=true)
352    @Description(shortDefinition="District name (aka county)", formalDefinition="The name of the administrative area (county)." )
353    protected StringType district;
354
355    /**
356     * Sub-unit of a country with limited sovereignty in a federally organized country. A code may be used if codes are in common use (e.g. US 2 letter state codes).
357     */
358    @Child(name = "state", type = {StringType.class}, order=6, min=0, max=1, modifier=false, summary=true)
359    @Description(shortDefinition="Sub-unit of country (abbreviations ok)", formalDefinition="Sub-unit of a country with limited sovereignty in a federally organized country. A code may be used if codes are in common use (e.g. US 2 letter state codes)." )
360    protected StringType state;
361
362    /**
363     * A postal code designating a region defined by the postal service.
364     */
365    @Child(name = "postalCode", type = {StringType.class}, order=7, min=0, max=1, modifier=false, summary=true)
366    @Description(shortDefinition="Postal code for area", formalDefinition="A postal code designating a region defined by the postal service." )
367    protected StringType postalCode;
368
369    /**
370     * Country - a nation as commonly understood or generally accepted.
371     */
372    @Child(name = "country", type = {StringType.class}, order=8, min=0, max=1, modifier=false, summary=true)
373    @Description(shortDefinition="Country (e.g. may be ISO 3166 2 or 3 letter code)", formalDefinition="Country - a nation as commonly understood or generally accepted." )
374    protected StringType country;
375
376    /**
377     * Time period when address was/is in use.
378     */
379    @Child(name = "period", type = {Period.class}, order=9, min=0, max=1, modifier=false, summary=true)
380    @Description(shortDefinition="Time period when address was/is in use", formalDefinition="Time period when address was/is in use." )
381    protected Period period;
382
383    private static final long serialVersionUID = 561490318L;
384
385  /**
386   * Constructor
387   */
388    public Address() {
389      super();
390    }
391
392    /**
393     * @return {@link #use} (The purpose of this address.). This is the underlying object with id, value and extensions. The accessor "getUse" gives direct access to the value
394     */
395    public Enumeration<AddressUse> getUseElement() { 
396      if (this.use == null)
397        if (Configuration.errorOnAutoCreate())
398          throw new Error("Attempt to auto-create Address.use");
399        else if (Configuration.doAutoCreate())
400          this.use = new Enumeration<AddressUse>(new AddressUseEnumFactory()); // bb
401      return this.use;
402    }
403
404    public boolean hasUseElement() { 
405      return this.use != null && !this.use.isEmpty();
406    }
407
408    public boolean hasUse() { 
409      return this.use != null && !this.use.isEmpty();
410    }
411
412    /**
413     * @param value {@link #use} (The purpose of this address.). This is the underlying object with id, value and extensions. The accessor "getUse" gives direct access to the value
414     */
415    public Address setUseElement(Enumeration<AddressUse> value) { 
416      this.use = value;
417      return this;
418    }
419
420    /**
421     * @return The purpose of this address.
422     */
423    public AddressUse getUse() { 
424      return this.use == null ? null : this.use.getValue();
425    }
426
427    /**
428     * @param value The purpose of this address.
429     */
430    public Address setUse(AddressUse value) { 
431      if (value == null)
432        this.use = null;
433      else {
434        if (this.use == null)
435          this.use = new Enumeration<AddressUse>(new AddressUseEnumFactory());
436        this.use.setValue(value);
437      }
438      return this;
439    }
440
441    /**
442     * @return {@link #type} (Distinguishes between physical addresses (those you can visit) and mailing addresses (e.g. PO Boxes and care-of addresses). Most addresses are both.). This is the underlying object with id, value and extensions. The accessor "getType" gives direct access to the value
443     */
444    public Enumeration<AddressType> getTypeElement() { 
445      if (this.type == null)
446        if (Configuration.errorOnAutoCreate())
447          throw new Error("Attempt to auto-create Address.type");
448        else if (Configuration.doAutoCreate())
449          this.type = new Enumeration<AddressType>(new AddressTypeEnumFactory()); // bb
450      return this.type;
451    }
452
453    public boolean hasTypeElement() { 
454      return this.type != null && !this.type.isEmpty();
455    }
456
457    public boolean hasType() { 
458      return this.type != null && !this.type.isEmpty();
459    }
460
461    /**
462     * @param value {@link #type} (Distinguishes between physical addresses (those you can visit) and mailing addresses (e.g. PO Boxes and care-of addresses). Most addresses are both.). This is the underlying object with id, value and extensions. The accessor "getType" gives direct access to the value
463     */
464    public Address setTypeElement(Enumeration<AddressType> value) { 
465      this.type = value;
466      return this;
467    }
468
469    /**
470     * @return Distinguishes between physical addresses (those you can visit) and mailing addresses (e.g. PO Boxes and care-of addresses). Most addresses are both.
471     */
472    public AddressType getType() { 
473      return this.type == null ? null : this.type.getValue();
474    }
475
476    /**
477     * @param value Distinguishes between physical addresses (those you can visit) and mailing addresses (e.g. PO Boxes and care-of addresses). Most addresses are both.
478     */
479    public Address setType(AddressType value) { 
480      if (value == null)
481        this.type = null;
482      else {
483        if (this.type == null)
484          this.type = new Enumeration<AddressType>(new AddressTypeEnumFactory());
485        this.type.setValue(value);
486      }
487      return this;
488    }
489
490    /**
491     * @return {@link #text} (Specifies the entire address as it should be displayed e.g. on a postal label. 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
492     */
493    public StringType getTextElement() { 
494      if (this.text == null)
495        if (Configuration.errorOnAutoCreate())
496          throw new Error("Attempt to auto-create Address.text");
497        else if (Configuration.doAutoCreate())
498          this.text = new StringType(); // bb
499      return this.text;
500    }
501
502    public boolean hasTextElement() { 
503      return this.text != null && !this.text.isEmpty();
504    }
505
506    public boolean hasText() { 
507      return this.text != null && !this.text.isEmpty();
508    }
509
510    /**
511     * @param value {@link #text} (Specifies the entire address as it should be displayed e.g. on a postal label. 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
512     */
513    public Address setTextElement(StringType value) { 
514      this.text = value;
515      return this;
516    }
517
518    /**
519     * @return Specifies the entire address as it should be displayed e.g. on a postal label. This may be provided instead of or as well as the specific parts.
520     */
521    public String getText() { 
522      return this.text == null ? null : this.text.getValue();
523    }
524
525    /**
526     * @param value Specifies the entire address as it should be displayed e.g. on a postal label. This may be provided instead of or as well as the specific parts.
527     */
528    public Address setText(String value) { 
529      if (Utilities.noString(value))
530        this.text = null;
531      else {
532        if (this.text == null)
533          this.text = new StringType();
534        this.text.setValue(value);
535      }
536      return this;
537    }
538
539    /**
540     * @return {@link #line} (This component contains the house number, apartment number, street name, street direction,  P.O. Box number, delivery hints, and similar address information.)
541     */
542    public List<StringType> getLine() { 
543      if (this.line == null)
544        this.line = new ArrayList<StringType>();
545      return this.line;
546    }
547
548    /**
549     * @return Returns a reference to <code>this</code> for easy method chaining
550     */
551    public Address setLine(List<StringType> theLine) { 
552      this.line = theLine;
553      return this;
554    }
555
556    public boolean hasLine() { 
557      if (this.line == null)
558        return false;
559      for (StringType item : this.line)
560        if (!item.isEmpty())
561          return true;
562      return false;
563    }
564
565    /**
566     * @return {@link #line} (This component contains the house number, apartment number, street name, street direction,  P.O. Box number, delivery hints, and similar address information.)
567     */
568    public StringType addLineElement() {//2 
569      StringType t = new StringType();
570      if (this.line == null)
571        this.line = new ArrayList<StringType>();
572      this.line.add(t);
573      return t;
574    }
575
576    /**
577     * @param value {@link #line} (This component contains the house number, apartment number, street name, street direction,  P.O. Box number, delivery hints, and similar address information.)
578     */
579    public Address addLine(String value) { //1
580      StringType t = new StringType();
581      t.setValue(value);
582      if (this.line == null)
583        this.line = new ArrayList<StringType>();
584      this.line.add(t);
585      return this;
586    }
587
588    /**
589     * @param value {@link #line} (This component contains the house number, apartment number, street name, street direction,  P.O. Box number, delivery hints, and similar address information.)
590     */
591    public boolean hasLine(String value) { 
592      if (this.line == null)
593        return false;
594      for (StringType v : this.line)
595        if (v.getValue().equals(value)) // string
596          return true;
597      return false;
598    }
599
600    /**
601     * @return {@link #city} (The name of the city, town, suburb, village or other community or delivery center.). This is the underlying object with id, value and extensions. The accessor "getCity" gives direct access to the value
602     */
603    public StringType getCityElement() { 
604      if (this.city == null)
605        if (Configuration.errorOnAutoCreate())
606          throw new Error("Attempt to auto-create Address.city");
607        else if (Configuration.doAutoCreate())
608          this.city = new StringType(); // bb
609      return this.city;
610    }
611
612    public boolean hasCityElement() { 
613      return this.city != null && !this.city.isEmpty();
614    }
615
616    public boolean hasCity() { 
617      return this.city != null && !this.city.isEmpty();
618    }
619
620    /**
621     * @param value {@link #city} (The name of the city, town, suburb, village or other community or delivery center.). This is the underlying object with id, value and extensions. The accessor "getCity" gives direct access to the value
622     */
623    public Address setCityElement(StringType value) { 
624      this.city = value;
625      return this;
626    }
627
628    /**
629     * @return The name of the city, town, suburb, village or other community or delivery center.
630     */
631    public String getCity() { 
632      return this.city == null ? null : this.city.getValue();
633    }
634
635    /**
636     * @param value The name of the city, town, suburb, village or other community or delivery center.
637     */
638    public Address setCity(String value) { 
639      if (Utilities.noString(value))
640        this.city = null;
641      else {
642        if (this.city == null)
643          this.city = new StringType();
644        this.city.setValue(value);
645      }
646      return this;
647    }
648
649    /**
650     * @return {@link #district} (The name of the administrative area (county).). This is the underlying object with id, value and extensions. The accessor "getDistrict" gives direct access to the value
651     */
652    public StringType getDistrictElement() { 
653      if (this.district == null)
654        if (Configuration.errorOnAutoCreate())
655          throw new Error("Attempt to auto-create Address.district");
656        else if (Configuration.doAutoCreate())
657          this.district = new StringType(); // bb
658      return this.district;
659    }
660
661    public boolean hasDistrictElement() { 
662      return this.district != null && !this.district.isEmpty();
663    }
664
665    public boolean hasDistrict() { 
666      return this.district != null && !this.district.isEmpty();
667    }
668
669    /**
670     * @param value {@link #district} (The name of the administrative area (county).). This is the underlying object with id, value and extensions. The accessor "getDistrict" gives direct access to the value
671     */
672    public Address setDistrictElement(StringType value) { 
673      this.district = value;
674      return this;
675    }
676
677    /**
678     * @return The name of the administrative area (county).
679     */
680    public String getDistrict() { 
681      return this.district == null ? null : this.district.getValue();
682    }
683
684    /**
685     * @param value The name of the administrative area (county).
686     */
687    public Address setDistrict(String value) { 
688      if (Utilities.noString(value))
689        this.district = null;
690      else {
691        if (this.district == null)
692          this.district = new StringType();
693        this.district.setValue(value);
694      }
695      return this;
696    }
697
698    /**
699     * @return {@link #state} (Sub-unit of a country with limited sovereignty in a federally organized country. A code may be used if codes are in common use (e.g. US 2 letter state codes).). This is the underlying object with id, value and extensions. The accessor "getState" gives direct access to the value
700     */
701    public StringType getStateElement() { 
702      if (this.state == null)
703        if (Configuration.errorOnAutoCreate())
704          throw new Error("Attempt to auto-create Address.state");
705        else if (Configuration.doAutoCreate())
706          this.state = new StringType(); // bb
707      return this.state;
708    }
709
710    public boolean hasStateElement() { 
711      return this.state != null && !this.state.isEmpty();
712    }
713
714    public boolean hasState() { 
715      return this.state != null && !this.state.isEmpty();
716    }
717
718    /**
719     * @param value {@link #state} (Sub-unit of a country with limited sovereignty in a federally organized country. A code may be used if codes are in common use (e.g. US 2 letter state codes).). This is the underlying object with id, value and extensions. The accessor "getState" gives direct access to the value
720     */
721    public Address setStateElement(StringType value) { 
722      this.state = value;
723      return this;
724    }
725
726    /**
727     * @return Sub-unit of a country with limited sovereignty in a federally organized country. A code may be used if codes are in common use (e.g. US 2 letter state codes).
728     */
729    public String getState() { 
730      return this.state == null ? null : this.state.getValue();
731    }
732
733    /**
734     * @param value Sub-unit of a country with limited sovereignty in a federally organized country. A code may be used if codes are in common use (e.g. US 2 letter state codes).
735     */
736    public Address setState(String value) { 
737      if (Utilities.noString(value))
738        this.state = null;
739      else {
740        if (this.state == null)
741          this.state = new StringType();
742        this.state.setValue(value);
743      }
744      return this;
745    }
746
747    /**
748     * @return {@link #postalCode} (A postal code designating a region defined by the postal service.). This is the underlying object with id, value and extensions. The accessor "getPostalCode" gives direct access to the value
749     */
750    public StringType getPostalCodeElement() { 
751      if (this.postalCode == null)
752        if (Configuration.errorOnAutoCreate())
753          throw new Error("Attempt to auto-create Address.postalCode");
754        else if (Configuration.doAutoCreate())
755          this.postalCode = new StringType(); // bb
756      return this.postalCode;
757    }
758
759    public boolean hasPostalCodeElement() { 
760      return this.postalCode != null && !this.postalCode.isEmpty();
761    }
762
763    public boolean hasPostalCode() { 
764      return this.postalCode != null && !this.postalCode.isEmpty();
765    }
766
767    /**
768     * @param value {@link #postalCode} (A postal code designating a region defined by the postal service.). This is the underlying object with id, value and extensions. The accessor "getPostalCode" gives direct access to the value
769     */
770    public Address setPostalCodeElement(StringType value) { 
771      this.postalCode = value;
772      return this;
773    }
774
775    /**
776     * @return A postal code designating a region defined by the postal service.
777     */
778    public String getPostalCode() { 
779      return this.postalCode == null ? null : this.postalCode.getValue();
780    }
781
782    /**
783     * @param value A postal code designating a region defined by the postal service.
784     */
785    public Address setPostalCode(String value) { 
786      if (Utilities.noString(value))
787        this.postalCode = null;
788      else {
789        if (this.postalCode == null)
790          this.postalCode = new StringType();
791        this.postalCode.setValue(value);
792      }
793      return this;
794    }
795
796    /**
797     * @return {@link #country} (Country - a nation as commonly understood or generally accepted.). This is the underlying object with id, value and extensions. The accessor "getCountry" gives direct access to the value
798     */
799    public StringType getCountryElement() { 
800      if (this.country == null)
801        if (Configuration.errorOnAutoCreate())
802          throw new Error("Attempt to auto-create Address.country");
803        else if (Configuration.doAutoCreate())
804          this.country = new StringType(); // bb
805      return this.country;
806    }
807
808    public boolean hasCountryElement() { 
809      return this.country != null && !this.country.isEmpty();
810    }
811
812    public boolean hasCountry() { 
813      return this.country != null && !this.country.isEmpty();
814    }
815
816    /**
817     * @param value {@link #country} (Country - a nation as commonly understood or generally accepted.). This is the underlying object with id, value and extensions. The accessor "getCountry" gives direct access to the value
818     */
819    public Address setCountryElement(StringType value) { 
820      this.country = value;
821      return this;
822    }
823
824    /**
825     * @return Country - a nation as commonly understood or generally accepted.
826     */
827    public String getCountry() { 
828      return this.country == null ? null : this.country.getValue();
829    }
830
831    /**
832     * @param value Country - a nation as commonly understood or generally accepted.
833     */
834    public Address setCountry(String value) { 
835      if (Utilities.noString(value))
836        this.country = null;
837      else {
838        if (this.country == null)
839          this.country = new StringType();
840        this.country.setValue(value);
841      }
842      return this;
843    }
844
845    /**
846     * @return {@link #period} (Time period when address was/is in use.)
847     */
848    public Period getPeriod() { 
849      if (this.period == null)
850        if (Configuration.errorOnAutoCreate())
851          throw new Error("Attempt to auto-create Address.period");
852        else if (Configuration.doAutoCreate())
853          this.period = new Period(); // cc
854      return this.period;
855    }
856
857    public boolean hasPeriod() { 
858      return this.period != null && !this.period.isEmpty();
859    }
860
861    /**
862     * @param value {@link #period} (Time period when address was/is in use.)
863     */
864    public Address setPeriod(Period value) { 
865      this.period = value;
866      return this;
867    }
868
869      protected void listChildren(List<Property> children) {
870        super.listChildren(children);
871        children.add(new Property("use", "code", "The purpose of this address.", 0, 1, use));
872        children.add(new Property("type", "code", "Distinguishes between physical addresses (those you can visit) and mailing addresses (e.g. PO Boxes and care-of addresses). Most addresses are both.", 0, 1, type));
873        children.add(new Property("text", "string", "Specifies the entire address as it should be displayed e.g. on a postal label. This may be provided instead of or as well as the specific parts.", 0, 1, text));
874        children.add(new Property("line", "string", "This component contains the house number, apartment number, street name, street direction,  P.O. Box number, delivery hints, and similar address information.", 0, java.lang.Integer.MAX_VALUE, line));
875        children.add(new Property("city", "string", "The name of the city, town, suburb, village or other community or delivery center.", 0, 1, city));
876        children.add(new Property("district", "string", "The name of the administrative area (county).", 0, 1, district));
877        children.add(new Property("state", "string", "Sub-unit of a country with limited sovereignty in a federally organized country. A code may be used if codes are in common use (e.g. US 2 letter state codes).", 0, 1, state));
878        children.add(new Property("postalCode", "string", "A postal code designating a region defined by the postal service.", 0, 1, postalCode));
879        children.add(new Property("country", "string", "Country - a nation as commonly understood or generally accepted.", 0, 1, country));
880        children.add(new Property("period", "Period", "Time period when address was/is in use.", 0, 1, period));
881      }
882
883      @Override
884      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
885        switch (_hash) {
886        case 116103: /*use*/  return new Property("use", "code", "The purpose of this address.", 0, 1, use);
887        case 3575610: /*type*/  return new Property("type", "code", "Distinguishes between physical addresses (those you can visit) and mailing addresses (e.g. PO Boxes and care-of addresses). Most addresses are both.", 0, 1, type);
888        case 3556653: /*text*/  return new Property("text", "string", "Specifies the entire address as it should be displayed e.g. on a postal label. This may be provided instead of or as well as the specific parts.", 0, 1, text);
889        case 3321844: /*line*/  return new Property("line", "string", "This component contains the house number, apartment number, street name, street direction,  P.O. Box number, delivery hints, and similar address information.", 0, java.lang.Integer.MAX_VALUE, line);
890        case 3053931: /*city*/  return new Property("city", "string", "The name of the city, town, suburb, village or other community or delivery center.", 0, 1, city);
891        case 288961422: /*district*/  return new Property("district", "string", "The name of the administrative area (county).", 0, 1, district);
892        case 109757585: /*state*/  return new Property("state", "string", "Sub-unit of a country with limited sovereignty in a federally organized country. A code may be used if codes are in common use (e.g. US 2 letter state codes).", 0, 1, state);
893        case 2011152728: /*postalCode*/  return new Property("postalCode", "string", "A postal code designating a region defined by the postal service.", 0, 1, postalCode);
894        case 957831062: /*country*/  return new Property("country", "string", "Country - a nation as commonly understood or generally accepted.", 0, 1, country);
895        case -991726143: /*period*/  return new Property("period", "Period", "Time period when address was/is in use.", 0, 1, period);
896        default: return super.getNamedProperty(_hash, _name, _checkValid);
897        }
898
899      }
900
901      @Override
902      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
903        switch (hash) {
904        case 116103: /*use*/ return this.use == null ? new Base[0] : new Base[] {this.use}; // Enumeration<AddressUse>
905        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // Enumeration<AddressType>
906        case 3556653: /*text*/ return this.text == null ? new Base[0] : new Base[] {this.text}; // StringType
907        case 3321844: /*line*/ return this.line == null ? new Base[0] : this.line.toArray(new Base[this.line.size()]); // StringType
908        case 3053931: /*city*/ return this.city == null ? new Base[0] : new Base[] {this.city}; // StringType
909        case 288961422: /*district*/ return this.district == null ? new Base[0] : new Base[] {this.district}; // StringType
910        case 109757585: /*state*/ return this.state == null ? new Base[0] : new Base[] {this.state}; // StringType
911        case 2011152728: /*postalCode*/ return this.postalCode == null ? new Base[0] : new Base[] {this.postalCode}; // StringType
912        case 957831062: /*country*/ return this.country == null ? new Base[0] : new Base[] {this.country}; // StringType
913        case -991726143: /*period*/ return this.period == null ? new Base[0] : new Base[] {this.period}; // Period
914        default: return super.getProperty(hash, name, checkValid);
915        }
916
917      }
918
919      @Override
920      public Base setProperty(int hash, String name, Base value) throws FHIRException {
921        switch (hash) {
922        case 116103: // use
923          value = new AddressUseEnumFactory().fromType(TypeConvertor.castToCode(value));
924          this.use = (Enumeration) value; // Enumeration<AddressUse>
925          return value;
926        case 3575610: // type
927          value = new AddressTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
928          this.type = (Enumeration) value; // Enumeration<AddressType>
929          return value;
930        case 3556653: // text
931          this.text = TypeConvertor.castToString(value); // StringType
932          return value;
933        case 3321844: // line
934          this.getLine().add(TypeConvertor.castToString(value)); // StringType
935          return value;
936        case 3053931: // city
937          this.city = TypeConvertor.castToString(value); // StringType
938          return value;
939        case 288961422: // district
940          this.district = TypeConvertor.castToString(value); // StringType
941          return value;
942        case 109757585: // state
943          this.state = TypeConvertor.castToString(value); // StringType
944          return value;
945        case 2011152728: // postalCode
946          this.postalCode = TypeConvertor.castToString(value); // StringType
947          return value;
948        case 957831062: // country
949          this.country = TypeConvertor.castToString(value); // StringType
950          return value;
951        case -991726143: // period
952          this.period = TypeConvertor.castToPeriod(value); // Period
953          return value;
954        default: return super.setProperty(hash, name, value);
955        }
956
957      }
958
959      @Override
960      public Base setProperty(String name, Base value) throws FHIRException {
961        if (name.equals("use")) {
962          value = new AddressUseEnumFactory().fromType(TypeConvertor.castToCode(value));
963          this.use = (Enumeration) value; // Enumeration<AddressUse>
964        } else if (name.equals("type")) {
965          value = new AddressTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
966          this.type = (Enumeration) value; // Enumeration<AddressType>
967        } else if (name.equals("text")) {
968          this.text = TypeConvertor.castToString(value); // StringType
969        } else if (name.equals("line")) {
970          this.getLine().add(TypeConvertor.castToString(value));
971        } else if (name.equals("city")) {
972          this.city = TypeConvertor.castToString(value); // StringType
973        } else if (name.equals("district")) {
974          this.district = TypeConvertor.castToString(value); // StringType
975        } else if (name.equals("state")) {
976          this.state = TypeConvertor.castToString(value); // StringType
977        } else if (name.equals("postalCode")) {
978          this.postalCode = TypeConvertor.castToString(value); // StringType
979        } else if (name.equals("country")) {
980          this.country = TypeConvertor.castToString(value); // StringType
981        } else if (name.equals("period")) {
982          this.period = TypeConvertor.castToPeriod(value); // Period
983        } else
984          return super.setProperty(name, value);
985        return value;
986      }
987
988  @Override
989  public void removeChild(String name, Base value) throws FHIRException {
990        if (name.equals("use")) {
991          value = new AddressUseEnumFactory().fromType(TypeConvertor.castToCode(value));
992          this.use = (Enumeration) value; // Enumeration<AddressUse>
993        } else if (name.equals("type")) {
994          value = new AddressTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
995          this.type = (Enumeration) value; // Enumeration<AddressType>
996        } else if (name.equals("text")) {
997          this.text = null;
998        } else if (name.equals("line")) {
999          this.getLine().remove(value);
1000        } else if (name.equals("city")) {
1001          this.city = null;
1002        } else if (name.equals("district")) {
1003          this.district = null;
1004        } else if (name.equals("state")) {
1005          this.state = null;
1006        } else if (name.equals("postalCode")) {
1007          this.postalCode = null;
1008        } else if (name.equals("country")) {
1009          this.country = null;
1010        } else if (name.equals("period")) {
1011          this.period = null;
1012        } else
1013          super.removeChild(name, value);
1014        
1015      }
1016
1017      @Override
1018      public Base makeProperty(int hash, String name) throws FHIRException {
1019        switch (hash) {
1020        case 116103:  return getUseElement();
1021        case 3575610:  return getTypeElement();
1022        case 3556653:  return getTextElement();
1023        case 3321844:  return addLineElement();
1024        case 3053931:  return getCityElement();
1025        case 288961422:  return getDistrictElement();
1026        case 109757585:  return getStateElement();
1027        case 2011152728:  return getPostalCodeElement();
1028        case 957831062:  return getCountryElement();
1029        case -991726143:  return getPeriod();
1030        default: return super.makeProperty(hash, name);
1031        }
1032
1033      }
1034
1035      @Override
1036      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1037        switch (hash) {
1038        case 116103: /*use*/ return new String[] {"code"};
1039        case 3575610: /*type*/ return new String[] {"code"};
1040        case 3556653: /*text*/ return new String[] {"string"};
1041        case 3321844: /*line*/ return new String[] {"string"};
1042        case 3053931: /*city*/ return new String[] {"string"};
1043        case 288961422: /*district*/ return new String[] {"string"};
1044        case 109757585: /*state*/ return new String[] {"string"};
1045        case 2011152728: /*postalCode*/ return new String[] {"string"};
1046        case 957831062: /*country*/ return new String[] {"string"};
1047        case -991726143: /*period*/ return new String[] {"Period"};
1048        default: return super.getTypesForProperty(hash, name);
1049        }
1050
1051      }
1052
1053      @Override
1054      public Base addChild(String name) throws FHIRException {
1055        if (name.equals("use")) {
1056          throw new FHIRException("Cannot call addChild on a singleton property Address.use");
1057        }
1058        else if (name.equals("type")) {
1059          throw new FHIRException("Cannot call addChild on a singleton property Address.type");
1060        }
1061        else if (name.equals("text")) {
1062          throw new FHIRException("Cannot call addChild on a singleton property Address.text");
1063        }
1064        else if (name.equals("line")) {
1065          throw new FHIRException("Cannot call addChild on a singleton property Address.line");
1066        }
1067        else if (name.equals("city")) {
1068          throw new FHIRException("Cannot call addChild on a singleton property Address.city");
1069        }
1070        else if (name.equals("district")) {
1071          throw new FHIRException("Cannot call addChild on a singleton property Address.district");
1072        }
1073        else if (name.equals("state")) {
1074          throw new FHIRException("Cannot call addChild on a singleton property Address.state");
1075        }
1076        else if (name.equals("postalCode")) {
1077          throw new FHIRException("Cannot call addChild on a singleton property Address.postalCode");
1078        }
1079        else if (name.equals("country")) {
1080          throw new FHIRException("Cannot call addChild on a singleton property Address.country");
1081        }
1082        else if (name.equals("period")) {
1083          this.period = new Period();
1084          return this.period;
1085        }
1086        else
1087          return super.addChild(name);
1088      }
1089
1090  public String fhirType() {
1091    return "Address";
1092
1093  }
1094
1095      public Address copy() {
1096        Address dst = new Address();
1097        copyValues(dst);
1098        return dst;
1099      }
1100
1101      public void copyValues(Address dst) {
1102        super.copyValues(dst);
1103        dst.use = use == null ? null : use.copy();
1104        dst.type = type == null ? null : type.copy();
1105        dst.text = text == null ? null : text.copy();
1106        if (line != null) {
1107          dst.line = new ArrayList<StringType>();
1108          for (StringType i : line)
1109            dst.line.add(i.copy());
1110        };
1111        dst.city = city == null ? null : city.copy();
1112        dst.district = district == null ? null : district.copy();
1113        dst.state = state == null ? null : state.copy();
1114        dst.postalCode = postalCode == null ? null : postalCode.copy();
1115        dst.country = country == null ? null : country.copy();
1116        dst.period = period == null ? null : period.copy();
1117      }
1118
1119      protected Address typedCopy() {
1120        return copy();
1121      }
1122
1123      @Override
1124      public boolean equalsDeep(Base other_) {
1125        if (!super.equalsDeep(other_))
1126          return false;
1127        if (!(other_ instanceof Address))
1128          return false;
1129        Address o = (Address) other_;
1130        return compareDeep(use, o.use, true) && compareDeep(type, o.type, true) && compareDeep(text, o.text, true)
1131           && compareDeep(line, o.line, true) && compareDeep(city, o.city, true) && compareDeep(district, o.district, true)
1132           && compareDeep(state, o.state, true) && compareDeep(postalCode, o.postalCode, true) && compareDeep(country, o.country, true)
1133           && compareDeep(period, o.period, true);
1134      }
1135
1136      @Override
1137      public boolean equalsShallow(Base other_) {
1138        if (!super.equalsShallow(other_))
1139          return false;
1140        if (!(other_ instanceof Address))
1141          return false;
1142        Address o = (Address) other_;
1143        return compareValues(use, o.use, true) && compareValues(type, o.type, true) && compareValues(text, o.text, true)
1144           && compareValues(line, o.line, true) && compareValues(city, o.city, true) && compareValues(district, o.district, true)
1145           && compareValues(state, o.state, true) && compareValues(postalCode, o.postalCode, true) && compareValues(country, o.country, true)
1146          ;
1147      }
1148
1149      public boolean isEmpty() {
1150        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(use, type, text, line
1151          , city, district, state, postalCode, country, period);
1152      }
1153
1154
1155}
1156