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