001package org.hl7.fhir.dstu3.model;
002
003/*
004  Copyright (c) 2011+, HL7, Inc.
005  All rights reserved.
006  
007  Redistribution and use in source and binary forms, with or without modification, 
008  are permitted provided that the following conditions are met:
009  
010   * Redistributions of source code must retain the above copyright notice, this 
011     list of conditions and the following disclaimer.
012   * Redistributions in binary form must reproduce the above copyright notice, 
013     this list of conditions and the following disclaimer in the documentation 
014     and/or other materials provided with the distribution.
015   * Neither the name of HL7 nor the names of its contributors may be used to 
016     endorse or promote products derived from this software without specific 
017     prior written permission.
018  
019  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
020  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
021  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
022  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
023  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
024  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
025  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
026  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
027  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
028  POSSIBILITY OF SUCH DAMAGE.
029  
030*/
031
032// Generated on Mon, Apr 17, 2017 17:38-0400 for FHIR v3.0.1
033
034import java.util.*;
035
036import org.hl7.fhir.utilities.Utilities;
037import ca.uhn.fhir.model.api.annotation.ResourceDef;
038import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
039import ca.uhn.fhir.model.api.annotation.Child;
040import ca.uhn.fhir.model.api.annotation.ChildOrder;
041import ca.uhn.fhir.model.api.annotation.Description;
042import ca.uhn.fhir.model.api.annotation.Block;
043import org.hl7.fhir.instance.model.api.*;
044import org.hl7.fhir.exceptions.FHIRException;
045/**
046 * The details of a healthcare service available at a location.
047 */
048@ResourceDef(name="HealthcareService", profile="http://hl7.org/fhir/Profile/HealthcareService")
049public class HealthcareService extends DomainResource {
050
051    public enum DaysOfWeek {
052        /**
053         * Monday
054         */
055        MON, 
056        /**
057         * Tuesday
058         */
059        TUE, 
060        /**
061         * Wednesday
062         */
063        WED, 
064        /**
065         * Thursday
066         */
067        THU, 
068        /**
069         * Friday
070         */
071        FRI, 
072        /**
073         * Saturday
074         */
075        SAT, 
076        /**
077         * Sunday
078         */
079        SUN, 
080        /**
081         * added to help the parsers with the generic types
082         */
083        NULL;
084        public static DaysOfWeek fromCode(String codeString) throws FHIRException {
085            if (codeString == null || "".equals(codeString))
086                return null;
087        if ("mon".equals(codeString))
088          return MON;
089        if ("tue".equals(codeString))
090          return TUE;
091        if ("wed".equals(codeString))
092          return WED;
093        if ("thu".equals(codeString))
094          return THU;
095        if ("fri".equals(codeString))
096          return FRI;
097        if ("sat".equals(codeString))
098          return SAT;
099        if ("sun".equals(codeString))
100          return SUN;
101        if (Configuration.isAcceptInvalidEnums())
102          return null;
103        else
104          throw new FHIRException("Unknown DaysOfWeek code '"+codeString+"'");
105        }
106        public String toCode() {
107          switch (this) {
108            case MON: return "mon";
109            case TUE: return "tue";
110            case WED: return "wed";
111            case THU: return "thu";
112            case FRI: return "fri";
113            case SAT: return "sat";
114            case SUN: return "sun";
115            default: return "?";
116          }
117        }
118        public String getSystem() {
119          switch (this) {
120            case MON: return "http://hl7.org/fhir/days-of-week";
121            case TUE: return "http://hl7.org/fhir/days-of-week";
122            case WED: return "http://hl7.org/fhir/days-of-week";
123            case THU: return "http://hl7.org/fhir/days-of-week";
124            case FRI: return "http://hl7.org/fhir/days-of-week";
125            case SAT: return "http://hl7.org/fhir/days-of-week";
126            case SUN: return "http://hl7.org/fhir/days-of-week";
127            default: return "?";
128          }
129        }
130        public String getDefinition() {
131          switch (this) {
132            case MON: return "Monday";
133            case TUE: return "Tuesday";
134            case WED: return "Wednesday";
135            case THU: return "Thursday";
136            case FRI: return "Friday";
137            case SAT: return "Saturday";
138            case SUN: return "Sunday";
139            default: return "?";
140          }
141        }
142        public String getDisplay() {
143          switch (this) {
144            case MON: return "Monday";
145            case TUE: return "Tuesday";
146            case WED: return "Wednesday";
147            case THU: return "Thursday";
148            case FRI: return "Friday";
149            case SAT: return "Saturday";
150            case SUN: return "Sunday";
151            default: return "?";
152          }
153        }
154    }
155
156  public static class DaysOfWeekEnumFactory implements EnumFactory<DaysOfWeek> {
157    public DaysOfWeek fromCode(String codeString) throws IllegalArgumentException {
158      if (codeString == null || "".equals(codeString))
159            if (codeString == null || "".equals(codeString))
160                return null;
161        if ("mon".equals(codeString))
162          return DaysOfWeek.MON;
163        if ("tue".equals(codeString))
164          return DaysOfWeek.TUE;
165        if ("wed".equals(codeString))
166          return DaysOfWeek.WED;
167        if ("thu".equals(codeString))
168          return DaysOfWeek.THU;
169        if ("fri".equals(codeString))
170          return DaysOfWeek.FRI;
171        if ("sat".equals(codeString))
172          return DaysOfWeek.SAT;
173        if ("sun".equals(codeString))
174          return DaysOfWeek.SUN;
175        throw new IllegalArgumentException("Unknown DaysOfWeek code '"+codeString+"'");
176        }
177        public Enumeration<DaysOfWeek> fromType(Base code) throws FHIRException {
178          if (code == null)
179            return null;
180          if (code.isEmpty())
181            return new Enumeration<DaysOfWeek>(this);
182          String codeString = ((PrimitiveType) code).asStringValue();
183          if (codeString == null || "".equals(codeString))
184            return null;
185        if ("mon".equals(codeString))
186          return new Enumeration<DaysOfWeek>(this, DaysOfWeek.MON);
187        if ("tue".equals(codeString))
188          return new Enumeration<DaysOfWeek>(this, DaysOfWeek.TUE);
189        if ("wed".equals(codeString))
190          return new Enumeration<DaysOfWeek>(this, DaysOfWeek.WED);
191        if ("thu".equals(codeString))
192          return new Enumeration<DaysOfWeek>(this, DaysOfWeek.THU);
193        if ("fri".equals(codeString))
194          return new Enumeration<DaysOfWeek>(this, DaysOfWeek.FRI);
195        if ("sat".equals(codeString))
196          return new Enumeration<DaysOfWeek>(this, DaysOfWeek.SAT);
197        if ("sun".equals(codeString))
198          return new Enumeration<DaysOfWeek>(this, DaysOfWeek.SUN);
199        throw new FHIRException("Unknown DaysOfWeek code '"+codeString+"'");
200        }
201    public String toCode(DaysOfWeek code) {
202      if (code == DaysOfWeek.MON)
203        return "mon";
204      if (code == DaysOfWeek.TUE)
205        return "tue";
206      if (code == DaysOfWeek.WED)
207        return "wed";
208      if (code == DaysOfWeek.THU)
209        return "thu";
210      if (code == DaysOfWeek.FRI)
211        return "fri";
212      if (code == DaysOfWeek.SAT)
213        return "sat";
214      if (code == DaysOfWeek.SUN)
215        return "sun";
216      return "?";
217      }
218    public String toSystem(DaysOfWeek code) {
219      return code.getSystem();
220      }
221    }
222
223    @Block()
224    public static class HealthcareServiceAvailableTimeComponent extends BackboneElement implements IBaseBackboneElement {
225        /**
226         * Indicates which days of the week are available between the start and end Times.
227         */
228        @Child(name = "daysOfWeek", type = {CodeType.class}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
229        @Description(shortDefinition="mon | tue | wed | thu | fri | sat | sun", formalDefinition="Indicates which days of the week are available between the start and end Times." )
230        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/days-of-week")
231        protected List<Enumeration<DaysOfWeek>> daysOfWeek;
232
233        /**
234         * Is this always available? (hence times are irrelevant) e.g. 24 hour service.
235         */
236        @Child(name = "allDay", type = {BooleanType.class}, order=2, min=0, max=1, modifier=false, summary=false)
237        @Description(shortDefinition="Always available? e.g. 24 hour service", formalDefinition="Is this always available? (hence times are irrelevant) e.g. 24 hour service." )
238        protected BooleanType allDay;
239
240        /**
241         * The opening time of day. Note: If the AllDay flag is set, then this time is ignored.
242         */
243        @Child(name = "availableStartTime", type = {TimeType.class}, order=3, min=0, max=1, modifier=false, summary=false)
244        @Description(shortDefinition="Opening time of day (ignored if allDay = true)", formalDefinition="The opening time of day. Note: If the AllDay flag is set, then this time is ignored." )
245        protected TimeType availableStartTime;
246
247        /**
248         * The closing time of day. Note: If the AllDay flag is set, then this time is ignored.
249         */
250        @Child(name = "availableEndTime", type = {TimeType.class}, order=4, min=0, max=1, modifier=false, summary=false)
251        @Description(shortDefinition="Closing time of day (ignored if allDay = true)", formalDefinition="The closing time of day. Note: If the AllDay flag is set, then this time is ignored." )
252        protected TimeType availableEndTime;
253
254        private static final long serialVersionUID = -2139510127L;
255
256    /**
257     * Constructor
258     */
259      public HealthcareServiceAvailableTimeComponent() {
260        super();
261      }
262
263        /**
264         * @return {@link #daysOfWeek} (Indicates which days of the week are available between the start and end Times.)
265         */
266        public List<Enumeration<DaysOfWeek>> getDaysOfWeek() { 
267          if (this.daysOfWeek == null)
268            this.daysOfWeek = new ArrayList<Enumeration<DaysOfWeek>>();
269          return this.daysOfWeek;
270        }
271
272        /**
273         * @return Returns a reference to <code>this</code> for easy method chaining
274         */
275        public HealthcareServiceAvailableTimeComponent setDaysOfWeek(List<Enumeration<DaysOfWeek>> theDaysOfWeek) { 
276          this.daysOfWeek = theDaysOfWeek;
277          return this;
278        }
279
280        public boolean hasDaysOfWeek() { 
281          if (this.daysOfWeek == null)
282            return false;
283          for (Enumeration<DaysOfWeek> item : this.daysOfWeek)
284            if (!item.isEmpty())
285              return true;
286          return false;
287        }
288
289        /**
290         * @return {@link #daysOfWeek} (Indicates which days of the week are available between the start and end Times.)
291         */
292        public Enumeration<DaysOfWeek> addDaysOfWeekElement() {//2 
293          Enumeration<DaysOfWeek> t = new Enumeration<DaysOfWeek>(new DaysOfWeekEnumFactory());
294          if (this.daysOfWeek == null)
295            this.daysOfWeek = new ArrayList<Enumeration<DaysOfWeek>>();
296          this.daysOfWeek.add(t);
297          return t;
298        }
299
300        /**
301         * @param value {@link #daysOfWeek} (Indicates which days of the week are available between the start and end Times.)
302         */
303        public HealthcareServiceAvailableTimeComponent addDaysOfWeek(DaysOfWeek value) { //1
304          Enumeration<DaysOfWeek> t = new Enumeration<DaysOfWeek>(new DaysOfWeekEnumFactory());
305          t.setValue(value);
306          if (this.daysOfWeek == null)
307            this.daysOfWeek = new ArrayList<Enumeration<DaysOfWeek>>();
308          this.daysOfWeek.add(t);
309          return this;
310        }
311
312        /**
313         * @param value {@link #daysOfWeek} (Indicates which days of the week are available between the start and end Times.)
314         */
315        public boolean hasDaysOfWeek(DaysOfWeek value) { 
316          if (this.daysOfWeek == null)
317            return false;
318          for (Enumeration<DaysOfWeek> v : this.daysOfWeek)
319            if (v.getValue().equals(value)) // code
320              return true;
321          return false;
322        }
323
324        /**
325         * @return {@link #allDay} (Is this always available? (hence times are irrelevant) e.g. 24 hour service.). This is the underlying object with id, value and extensions. The accessor "getAllDay" gives direct access to the value
326         */
327        public BooleanType getAllDayElement() { 
328          if (this.allDay == null)
329            if (Configuration.errorOnAutoCreate())
330              throw new Error("Attempt to auto-create HealthcareServiceAvailableTimeComponent.allDay");
331            else if (Configuration.doAutoCreate())
332              this.allDay = new BooleanType(); // bb
333          return this.allDay;
334        }
335
336        public boolean hasAllDayElement() { 
337          return this.allDay != null && !this.allDay.isEmpty();
338        }
339
340        public boolean hasAllDay() { 
341          return this.allDay != null && !this.allDay.isEmpty();
342        }
343
344        /**
345         * @param value {@link #allDay} (Is this always available? (hence times are irrelevant) e.g. 24 hour service.). This is the underlying object with id, value and extensions. The accessor "getAllDay" gives direct access to the value
346         */
347        public HealthcareServiceAvailableTimeComponent setAllDayElement(BooleanType value) { 
348          this.allDay = value;
349          return this;
350        }
351
352        /**
353         * @return Is this always available? (hence times are irrelevant) e.g. 24 hour service.
354         */
355        public boolean getAllDay() { 
356          return this.allDay == null || this.allDay.isEmpty() ? false : this.allDay.getValue();
357        }
358
359        /**
360         * @param value Is this always available? (hence times are irrelevant) e.g. 24 hour service.
361         */
362        public HealthcareServiceAvailableTimeComponent setAllDay(boolean value) { 
363            if (this.allDay == null)
364              this.allDay = new BooleanType();
365            this.allDay.setValue(value);
366          return this;
367        }
368
369        /**
370         * @return {@link #availableStartTime} (The opening time of day. Note: If the AllDay flag is set, then this time is ignored.). This is the underlying object with id, value and extensions. The accessor "getAvailableStartTime" gives direct access to the value
371         */
372        public TimeType getAvailableStartTimeElement() { 
373          if (this.availableStartTime == null)
374            if (Configuration.errorOnAutoCreate())
375              throw new Error("Attempt to auto-create HealthcareServiceAvailableTimeComponent.availableStartTime");
376            else if (Configuration.doAutoCreate())
377              this.availableStartTime = new TimeType(); // bb
378          return this.availableStartTime;
379        }
380
381        public boolean hasAvailableStartTimeElement() { 
382          return this.availableStartTime != null && !this.availableStartTime.isEmpty();
383        }
384
385        public boolean hasAvailableStartTime() { 
386          return this.availableStartTime != null && !this.availableStartTime.isEmpty();
387        }
388
389        /**
390         * @param value {@link #availableStartTime} (The opening time of day. Note: If the AllDay flag is set, then this time is ignored.). This is the underlying object with id, value and extensions. The accessor "getAvailableStartTime" gives direct access to the value
391         */
392        public HealthcareServiceAvailableTimeComponent setAvailableStartTimeElement(TimeType value) { 
393          this.availableStartTime = value;
394          return this;
395        }
396
397        /**
398         * @return The opening time of day. Note: If the AllDay flag is set, then this time is ignored.
399         */
400        public String getAvailableStartTime() { 
401          return this.availableStartTime == null ? null : this.availableStartTime.getValue();
402        }
403
404        /**
405         * @param value The opening time of day. Note: If the AllDay flag is set, then this time is ignored.
406         */
407        public HealthcareServiceAvailableTimeComponent setAvailableStartTime(String value) { 
408          if (value == null)
409            this.availableStartTime = null;
410          else {
411            if (this.availableStartTime == null)
412              this.availableStartTime = new TimeType();
413            this.availableStartTime.setValue(value);
414          }
415          return this;
416        }
417
418        /**
419         * @return {@link #availableEndTime} (The closing time of day. Note: If the AllDay flag is set, then this time is ignored.). This is the underlying object with id, value and extensions. The accessor "getAvailableEndTime" gives direct access to the value
420         */
421        public TimeType getAvailableEndTimeElement() { 
422          if (this.availableEndTime == null)
423            if (Configuration.errorOnAutoCreate())
424              throw new Error("Attempt to auto-create HealthcareServiceAvailableTimeComponent.availableEndTime");
425            else if (Configuration.doAutoCreate())
426              this.availableEndTime = new TimeType(); // bb
427          return this.availableEndTime;
428        }
429
430        public boolean hasAvailableEndTimeElement() { 
431          return this.availableEndTime != null && !this.availableEndTime.isEmpty();
432        }
433
434        public boolean hasAvailableEndTime() { 
435          return this.availableEndTime != null && !this.availableEndTime.isEmpty();
436        }
437
438        /**
439         * @param value {@link #availableEndTime} (The closing time of day. Note: If the AllDay flag is set, then this time is ignored.). This is the underlying object with id, value and extensions. The accessor "getAvailableEndTime" gives direct access to the value
440         */
441        public HealthcareServiceAvailableTimeComponent setAvailableEndTimeElement(TimeType value) { 
442          this.availableEndTime = value;
443          return this;
444        }
445
446        /**
447         * @return The closing time of day. Note: If the AllDay flag is set, then this time is ignored.
448         */
449        public String getAvailableEndTime() { 
450          return this.availableEndTime == null ? null : this.availableEndTime.getValue();
451        }
452
453        /**
454         * @param value The closing time of day. Note: If the AllDay flag is set, then this time is ignored.
455         */
456        public HealthcareServiceAvailableTimeComponent setAvailableEndTime(String value) { 
457          if (value == null)
458            this.availableEndTime = null;
459          else {
460            if (this.availableEndTime == null)
461              this.availableEndTime = new TimeType();
462            this.availableEndTime.setValue(value);
463          }
464          return this;
465        }
466
467        protected void listChildren(List<Property> childrenList) {
468          super.listChildren(childrenList);
469          childrenList.add(new Property("daysOfWeek", "code", "Indicates which days of the week are available between the start and end Times.", 0, java.lang.Integer.MAX_VALUE, daysOfWeek));
470          childrenList.add(new Property("allDay", "boolean", "Is this always available? (hence times are irrelevant) e.g. 24 hour service.", 0, java.lang.Integer.MAX_VALUE, allDay));
471          childrenList.add(new Property("availableStartTime", "time", "The opening time of day. Note: If the AllDay flag is set, then this time is ignored.", 0, java.lang.Integer.MAX_VALUE, availableStartTime));
472          childrenList.add(new Property("availableEndTime", "time", "The closing time of day. Note: If the AllDay flag is set, then this time is ignored.", 0, java.lang.Integer.MAX_VALUE, availableEndTime));
473        }
474
475      @Override
476      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
477        switch (hash) {
478        case 68050338: /*daysOfWeek*/ return this.daysOfWeek == null ? new Base[0] : this.daysOfWeek.toArray(new Base[this.daysOfWeek.size()]); // Enumeration<DaysOfWeek>
479        case -1414913477: /*allDay*/ return this.allDay == null ? new Base[0] : new Base[] {this.allDay}; // BooleanType
480        case -1039453818: /*availableStartTime*/ return this.availableStartTime == null ? new Base[0] : new Base[] {this.availableStartTime}; // TimeType
481        case 101151551: /*availableEndTime*/ return this.availableEndTime == null ? new Base[0] : new Base[] {this.availableEndTime}; // TimeType
482        default: return super.getProperty(hash, name, checkValid);
483        }
484
485      }
486
487      @Override
488      public Base setProperty(int hash, String name, Base value) throws FHIRException {
489        switch (hash) {
490        case 68050338: // daysOfWeek
491          value = new DaysOfWeekEnumFactory().fromType(castToCode(value));
492          this.getDaysOfWeek().add((Enumeration) value); // Enumeration<DaysOfWeek>
493          return value;
494        case -1414913477: // allDay
495          this.allDay = castToBoolean(value); // BooleanType
496          return value;
497        case -1039453818: // availableStartTime
498          this.availableStartTime = castToTime(value); // TimeType
499          return value;
500        case 101151551: // availableEndTime
501          this.availableEndTime = castToTime(value); // TimeType
502          return value;
503        default: return super.setProperty(hash, name, value);
504        }
505
506      }
507
508      @Override
509      public Base setProperty(String name, Base value) throws FHIRException {
510        if (name.equals("daysOfWeek")) {
511          value = new DaysOfWeekEnumFactory().fromType(castToCode(value));
512          this.getDaysOfWeek().add((Enumeration) value);
513        } else if (name.equals("allDay")) {
514          this.allDay = castToBoolean(value); // BooleanType
515        } else if (name.equals("availableStartTime")) {
516          this.availableStartTime = castToTime(value); // TimeType
517        } else if (name.equals("availableEndTime")) {
518          this.availableEndTime = castToTime(value); // TimeType
519        } else
520          return super.setProperty(name, value);
521        return value;
522      }
523
524      @Override
525      public Base makeProperty(int hash, String name) throws FHIRException {
526        switch (hash) {
527        case 68050338:  return addDaysOfWeekElement();
528        case -1414913477:  return getAllDayElement();
529        case -1039453818:  return getAvailableStartTimeElement();
530        case 101151551:  return getAvailableEndTimeElement();
531        default: return super.makeProperty(hash, name);
532        }
533
534      }
535
536      @Override
537      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
538        switch (hash) {
539        case 68050338: /*daysOfWeek*/ return new String[] {"code"};
540        case -1414913477: /*allDay*/ return new String[] {"boolean"};
541        case -1039453818: /*availableStartTime*/ return new String[] {"time"};
542        case 101151551: /*availableEndTime*/ return new String[] {"time"};
543        default: return super.getTypesForProperty(hash, name);
544        }
545
546      }
547
548      @Override
549      public Base addChild(String name) throws FHIRException {
550        if (name.equals("daysOfWeek")) {
551          throw new FHIRException("Cannot call addChild on a primitive type HealthcareService.daysOfWeek");
552        }
553        else if (name.equals("allDay")) {
554          throw new FHIRException("Cannot call addChild on a primitive type HealthcareService.allDay");
555        }
556        else if (name.equals("availableStartTime")) {
557          throw new FHIRException("Cannot call addChild on a primitive type HealthcareService.availableStartTime");
558        }
559        else if (name.equals("availableEndTime")) {
560          throw new FHIRException("Cannot call addChild on a primitive type HealthcareService.availableEndTime");
561        }
562        else
563          return super.addChild(name);
564      }
565
566      public HealthcareServiceAvailableTimeComponent copy() {
567        HealthcareServiceAvailableTimeComponent dst = new HealthcareServiceAvailableTimeComponent();
568        copyValues(dst);
569        if (daysOfWeek != null) {
570          dst.daysOfWeek = new ArrayList<Enumeration<DaysOfWeek>>();
571          for (Enumeration<DaysOfWeek> i : daysOfWeek)
572            dst.daysOfWeek.add(i.copy());
573        };
574        dst.allDay = allDay == null ? null : allDay.copy();
575        dst.availableStartTime = availableStartTime == null ? null : availableStartTime.copy();
576        dst.availableEndTime = availableEndTime == null ? null : availableEndTime.copy();
577        return dst;
578      }
579
580      @Override
581      public boolean equalsDeep(Base other) {
582        if (!super.equalsDeep(other))
583          return false;
584        if (!(other instanceof HealthcareServiceAvailableTimeComponent))
585          return false;
586        HealthcareServiceAvailableTimeComponent o = (HealthcareServiceAvailableTimeComponent) other;
587        return compareDeep(daysOfWeek, o.daysOfWeek, true) && compareDeep(allDay, o.allDay, true) && compareDeep(availableStartTime, o.availableStartTime, true)
588           && compareDeep(availableEndTime, o.availableEndTime, true);
589      }
590
591      @Override
592      public boolean equalsShallow(Base other) {
593        if (!super.equalsShallow(other))
594          return false;
595        if (!(other instanceof HealthcareServiceAvailableTimeComponent))
596          return false;
597        HealthcareServiceAvailableTimeComponent o = (HealthcareServiceAvailableTimeComponent) other;
598        return compareValues(daysOfWeek, o.daysOfWeek, true) && compareValues(allDay, o.allDay, true) && compareValues(availableStartTime, o.availableStartTime, true)
599           && compareValues(availableEndTime, o.availableEndTime, true);
600      }
601
602      public boolean isEmpty() {
603        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(daysOfWeek, allDay, availableStartTime
604          , availableEndTime);
605      }
606
607  public String fhirType() {
608    return "HealthcareService.availableTime";
609
610  }
611
612  }
613
614    @Block()
615    public static class HealthcareServiceNotAvailableComponent extends BackboneElement implements IBaseBackboneElement {
616        /**
617         * The reason that can be presented to the user as to why this time is not available.
618         */
619        @Child(name = "description", type = {StringType.class}, order=1, min=1, max=1, modifier=false, summary=false)
620        @Description(shortDefinition="Reason presented to the user explaining why time not available", formalDefinition="The reason that can be presented to the user as to why this time is not available." )
621        protected StringType description;
622
623        /**
624         * Service is not available (seasonally or for a public holiday) from this date.
625         */
626        @Child(name = "during", type = {Period.class}, order=2, min=0, max=1, modifier=false, summary=false)
627        @Description(shortDefinition="Service not availablefrom this date", formalDefinition="Service is not available (seasonally or for a public holiday) from this date." )
628        protected Period during;
629
630        private static final long serialVersionUID = 310849929L;
631
632    /**
633     * Constructor
634     */
635      public HealthcareServiceNotAvailableComponent() {
636        super();
637      }
638
639    /**
640     * Constructor
641     */
642      public HealthcareServiceNotAvailableComponent(StringType description) {
643        super();
644        this.description = description;
645      }
646
647        /**
648         * @return {@link #description} (The reason that can be presented to the user as to why this time is not available.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
649         */
650        public StringType getDescriptionElement() { 
651          if (this.description == null)
652            if (Configuration.errorOnAutoCreate())
653              throw new Error("Attempt to auto-create HealthcareServiceNotAvailableComponent.description");
654            else if (Configuration.doAutoCreate())
655              this.description = new StringType(); // bb
656          return this.description;
657        }
658
659        public boolean hasDescriptionElement() { 
660          return this.description != null && !this.description.isEmpty();
661        }
662
663        public boolean hasDescription() { 
664          return this.description != null && !this.description.isEmpty();
665        }
666
667        /**
668         * @param value {@link #description} (The reason that can be presented to the user as to why this time is not available.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
669         */
670        public HealthcareServiceNotAvailableComponent setDescriptionElement(StringType value) { 
671          this.description = value;
672          return this;
673        }
674
675        /**
676         * @return The reason that can be presented to the user as to why this time is not available.
677         */
678        public String getDescription() { 
679          return this.description == null ? null : this.description.getValue();
680        }
681
682        /**
683         * @param value The reason that can be presented to the user as to why this time is not available.
684         */
685        public HealthcareServiceNotAvailableComponent setDescription(String value) { 
686            if (this.description == null)
687              this.description = new StringType();
688            this.description.setValue(value);
689          return this;
690        }
691
692        /**
693         * @return {@link #during} (Service is not available (seasonally or for a public holiday) from this date.)
694         */
695        public Period getDuring() { 
696          if (this.during == null)
697            if (Configuration.errorOnAutoCreate())
698              throw new Error("Attempt to auto-create HealthcareServiceNotAvailableComponent.during");
699            else if (Configuration.doAutoCreate())
700              this.during = new Period(); // cc
701          return this.during;
702        }
703
704        public boolean hasDuring() { 
705          return this.during != null && !this.during.isEmpty();
706        }
707
708        /**
709         * @param value {@link #during} (Service is not available (seasonally or for a public holiday) from this date.)
710         */
711        public HealthcareServiceNotAvailableComponent setDuring(Period value) { 
712          this.during = value;
713          return this;
714        }
715
716        protected void listChildren(List<Property> childrenList) {
717          super.listChildren(childrenList);
718          childrenList.add(new Property("description", "string", "The reason that can be presented to the user as to why this time is not available.", 0, java.lang.Integer.MAX_VALUE, description));
719          childrenList.add(new Property("during", "Period", "Service is not available (seasonally or for a public holiday) from this date.", 0, java.lang.Integer.MAX_VALUE, during));
720        }
721
722      @Override
723      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
724        switch (hash) {
725        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // StringType
726        case -1320499647: /*during*/ return this.during == null ? new Base[0] : new Base[] {this.during}; // Period
727        default: return super.getProperty(hash, name, checkValid);
728        }
729
730      }
731
732      @Override
733      public Base setProperty(int hash, String name, Base value) throws FHIRException {
734        switch (hash) {
735        case -1724546052: // description
736          this.description = castToString(value); // StringType
737          return value;
738        case -1320499647: // during
739          this.during = castToPeriod(value); // Period
740          return value;
741        default: return super.setProperty(hash, name, value);
742        }
743
744      }
745
746      @Override
747      public Base setProperty(String name, Base value) throws FHIRException {
748        if (name.equals("description")) {
749          this.description = castToString(value); // StringType
750        } else if (name.equals("during")) {
751          this.during = castToPeriod(value); // Period
752        } else
753          return super.setProperty(name, value);
754        return value;
755      }
756
757      @Override
758      public Base makeProperty(int hash, String name) throws FHIRException {
759        switch (hash) {
760        case -1724546052:  return getDescriptionElement();
761        case -1320499647:  return getDuring(); 
762        default: return super.makeProperty(hash, name);
763        }
764
765      }
766
767      @Override
768      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
769        switch (hash) {
770        case -1724546052: /*description*/ return new String[] {"string"};
771        case -1320499647: /*during*/ return new String[] {"Period"};
772        default: return super.getTypesForProperty(hash, name);
773        }
774
775      }
776
777      @Override
778      public Base addChild(String name) throws FHIRException {
779        if (name.equals("description")) {
780          throw new FHIRException("Cannot call addChild on a primitive type HealthcareService.description");
781        }
782        else if (name.equals("during")) {
783          this.during = new Period();
784          return this.during;
785        }
786        else
787          return super.addChild(name);
788      }
789
790      public HealthcareServiceNotAvailableComponent copy() {
791        HealthcareServiceNotAvailableComponent dst = new HealthcareServiceNotAvailableComponent();
792        copyValues(dst);
793        dst.description = description == null ? null : description.copy();
794        dst.during = during == null ? null : during.copy();
795        return dst;
796      }
797
798      @Override
799      public boolean equalsDeep(Base other) {
800        if (!super.equalsDeep(other))
801          return false;
802        if (!(other instanceof HealthcareServiceNotAvailableComponent))
803          return false;
804        HealthcareServiceNotAvailableComponent o = (HealthcareServiceNotAvailableComponent) other;
805        return compareDeep(description, o.description, true) && compareDeep(during, o.during, true);
806      }
807
808      @Override
809      public boolean equalsShallow(Base other) {
810        if (!super.equalsShallow(other))
811          return false;
812        if (!(other instanceof HealthcareServiceNotAvailableComponent))
813          return false;
814        HealthcareServiceNotAvailableComponent o = (HealthcareServiceNotAvailableComponent) other;
815        return compareValues(description, o.description, true);
816      }
817
818      public boolean isEmpty() {
819        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(description, during);
820      }
821
822  public String fhirType() {
823    return "HealthcareService.notAvailable";
824
825  }
826
827  }
828
829    /**
830     * External identifiers for this item.
831     */
832    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
833    @Description(shortDefinition="External identifiers for this item", formalDefinition="External identifiers for this item." )
834    protected List<Identifier> identifier;
835
836    /**
837     * Whether this healthcareservice record is in active use.
838     */
839    @Child(name = "active", type = {BooleanType.class}, order=1, min=0, max=1, modifier=true, summary=true)
840    @Description(shortDefinition="Whether this healthcareservice is in active use", formalDefinition="Whether this healthcareservice record is in active use." )
841    protected BooleanType active;
842
843    /**
844     * The organization that provides this healthcare service.
845     */
846    @Child(name = "providedBy", type = {Organization.class}, order=2, min=0, max=1, modifier=false, summary=true)
847    @Description(shortDefinition="Organization that provides this service", formalDefinition="The organization that provides this healthcare service." )
848    protected Reference providedBy;
849
850    /**
851     * The actual object that is the target of the reference (The organization that provides this healthcare service.)
852     */
853    protected Organization providedByTarget;
854
855    /**
856     * Identifies the broad category of service being performed or delivered.
857     */
858    @Child(name = "category", type = {CodeableConcept.class}, order=3, min=0, max=1, modifier=false, summary=true)
859    @Description(shortDefinition="Broad category of service being performed or delivered", formalDefinition="Identifies the broad category of service being performed or delivered." )
860    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/service-category")
861    protected CodeableConcept category;
862
863    /**
864     * The specific type of service that may be delivered or performed.
865     */
866    @Child(name = "type", type = {CodeableConcept.class}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
867    @Description(shortDefinition="Type of service that may be delivered or performed", formalDefinition="The specific type of service that may be delivered or performed." )
868    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/service-type")
869    protected List<CodeableConcept> type;
870
871    /**
872     * Collection of specialties handled by the service site. This is more of a medical term.
873     */
874    @Child(name = "specialty", type = {CodeableConcept.class}, order=5, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
875    @Description(shortDefinition="Specialties handled by the HealthcareService", formalDefinition="Collection of specialties handled by the service site. This is more of a medical term." )
876    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/c80-practice-codes")
877    protected List<CodeableConcept> specialty;
878
879    /**
880     * The location(s) where this healthcare service may be provided.
881     */
882    @Child(name = "location", type = {Location.class}, order=6, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
883    @Description(shortDefinition="Location(s) where service may be provided", formalDefinition="The location(s) where this healthcare service may be provided." )
884    protected List<Reference> location;
885    /**
886     * The actual objects that are the target of the reference (The location(s) where this healthcare service may be provided.)
887     */
888    protected List<Location> locationTarget;
889
890
891    /**
892     * Further description of the service as it would be presented to a consumer while searching.
893     */
894    @Child(name = "name", type = {StringType.class}, order=7, min=0, max=1, modifier=false, summary=true)
895    @Description(shortDefinition="Description of service as presented to a consumer while searching", formalDefinition="Further description of the service as it would be presented to a consumer while searching." )
896    protected StringType name;
897
898    /**
899     * Any additional description of the service and/or any specific issues not covered by the other attributes, which can be displayed as further detail under the serviceName.
900     */
901    @Child(name = "comment", type = {StringType.class}, order=8, min=0, max=1, modifier=false, summary=true)
902    @Description(shortDefinition="Additional description and/or any specific issues not covered elsewhere", formalDefinition="Any additional description of the service and/or any specific issues not covered by the other attributes, which can be displayed as further detail under the serviceName." )
903    protected StringType comment;
904
905    /**
906     * Extra details about the service that can't be placed in the other fields.
907     */
908    @Child(name = "extraDetails", type = {StringType.class}, order=9, min=0, max=1, modifier=false, summary=false)
909    @Description(shortDefinition="Extra details about the service that can't be placed in the other fields", formalDefinition="Extra details about the service that can't be placed in the other fields." )
910    protected StringType extraDetails;
911
912    /**
913     * If there is a photo/symbol associated with this HealthcareService, it may be included here to facilitate quick identification of the service in a list.
914     */
915    @Child(name = "photo", type = {Attachment.class}, order=10, min=0, max=1, modifier=false, summary=true)
916    @Description(shortDefinition="Facilitates quick identification of the service", formalDefinition="If there is a photo/symbol associated with this HealthcareService, it may be included here to facilitate quick identification of the service in a list." )
917    protected Attachment photo;
918
919    /**
920     * List of contacts related to this specific healthcare service.
921     */
922    @Child(name = "telecom", type = {ContactPoint.class}, order=11, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
923    @Description(shortDefinition="Contacts related to the healthcare service", formalDefinition="List of contacts related to this specific healthcare service." )
924    protected List<ContactPoint> telecom;
925
926    /**
927     * The location(s) that this service is available to (not where the service is provided).
928     */
929    @Child(name = "coverageArea", type = {Location.class}, order=12, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
930    @Description(shortDefinition="Location(s) service is inteded for/available to", formalDefinition="The location(s) that this service is available to (not where the service is provided)." )
931    protected List<Reference> coverageArea;
932    /**
933     * The actual objects that are the target of the reference (The location(s) that this service is available to (not where the service is provided).)
934     */
935    protected List<Location> coverageAreaTarget;
936
937
938    /**
939     * The code(s) that detail the conditions under which the healthcare service is available/offered.
940     */
941    @Child(name = "serviceProvisionCode", type = {CodeableConcept.class}, order=13, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
942    @Description(shortDefinition="Conditions under which service is available/offered", formalDefinition="The code(s) that detail the conditions under which the healthcare service is available/offered." )
943    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/service-provision-conditions")
944    protected List<CodeableConcept> serviceProvisionCode;
945
946    /**
947     * Does this service have specific eligibility requirements that need to be met in order to use the service?
948     */
949    @Child(name = "eligibility", type = {CodeableConcept.class}, order=14, min=0, max=1, modifier=false, summary=false)
950    @Description(shortDefinition="Specific eligibility requirements required to use the service", formalDefinition="Does this service have specific eligibility requirements that need to be met in order to use the service?" )
951    protected CodeableConcept eligibility;
952
953    /**
954     * Describes the eligibility conditions for the service.
955     */
956    @Child(name = "eligibilityNote", type = {StringType.class}, order=15, min=0, max=1, modifier=false, summary=false)
957    @Description(shortDefinition="Describes the eligibility conditions for the service", formalDefinition="Describes the eligibility conditions for the service." )
958    protected StringType eligibilityNote;
959
960    /**
961     * Program Names that can be used to categorize the service.
962     */
963    @Child(name = "programName", type = {StringType.class}, order=16, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
964    @Description(shortDefinition="Program Names that categorize the service", formalDefinition="Program Names that can be used to categorize the service." )
965    protected List<StringType> programName;
966
967    /**
968     * Collection of characteristics (attributes).
969     */
970    @Child(name = "characteristic", type = {CodeableConcept.class}, order=17, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
971    @Description(shortDefinition="Collection of characteristics (attributes)", formalDefinition="Collection of characteristics (attributes)." )
972    protected List<CodeableConcept> characteristic;
973
974    /**
975     * Ways that the service accepts referrals, if this is not provided then it is implied that no referral is required.
976     */
977    @Child(name = "referralMethod", type = {CodeableConcept.class}, order=18, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
978    @Description(shortDefinition="Ways that the service accepts referrals", formalDefinition="Ways that the service accepts referrals, if this is not provided then it is implied that no referral is required." )
979    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/service-referral-method")
980    protected List<CodeableConcept> referralMethod;
981
982    /**
983     * Indicates whether or not a prospective consumer will require an appointment for a particular service at a site to be provided by the Organization. Indicates if an appointment is required for access to this service.
984     */
985    @Child(name = "appointmentRequired", type = {BooleanType.class}, order=19, min=0, max=1, modifier=false, summary=false)
986    @Description(shortDefinition="If an appointment is required for access to this service", formalDefinition="Indicates whether or not a prospective consumer will require an appointment for a particular service at a site to be provided by the Organization. Indicates if an appointment is required for access to this service." )
987    protected BooleanType appointmentRequired;
988
989    /**
990     * A collection of times that the Service Site is available.
991     */
992    @Child(name = "availableTime", type = {}, order=20, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
993    @Description(shortDefinition="Times the Service Site is available", formalDefinition="A collection of times that the Service Site is available." )
994    protected List<HealthcareServiceAvailableTimeComponent> availableTime;
995
996    /**
997     * The HealthcareService is not available during this period of time due to the provided reason.
998     */
999    @Child(name = "notAvailable", type = {}, order=21, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1000    @Description(shortDefinition="Not available during this time due to provided reason", formalDefinition="The HealthcareService is not available during this period of time due to the provided reason." )
1001    protected List<HealthcareServiceNotAvailableComponent> notAvailable;
1002
1003    /**
1004     * A description of site availability exceptions, e.g. public holiday availability. Succinctly describing all possible exceptions to normal site availability as details in the available Times and not available Times.
1005     */
1006    @Child(name = "availabilityExceptions", type = {StringType.class}, order=22, min=0, max=1, modifier=false, summary=false)
1007    @Description(shortDefinition="Description of availability exceptions", formalDefinition="A description of site availability exceptions, e.g. public holiday availability. Succinctly describing all possible exceptions to normal site availability as details in the available Times and not available Times." )
1008    protected StringType availabilityExceptions;
1009
1010    /**
1011     * Technical endpoints providing access to services operated for the specific healthcare services defined at this resource.
1012     */
1013    @Child(name = "endpoint", type = {Endpoint.class}, order=23, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1014    @Description(shortDefinition="Technical endpoints providing access to services operated for the location", formalDefinition="Technical endpoints providing access to services operated for the specific healthcare services defined at this resource." )
1015    protected List<Reference> endpoint;
1016    /**
1017     * The actual objects that are the target of the reference (Technical endpoints providing access to services operated for the specific healthcare services defined at this resource.)
1018     */
1019    protected List<Endpoint> endpointTarget;
1020
1021
1022    private static final long serialVersionUID = -202805485L;
1023
1024  /**
1025   * Constructor
1026   */
1027    public HealthcareService() {
1028      super();
1029    }
1030
1031    /**
1032     * @return {@link #identifier} (External identifiers for this item.)
1033     */
1034    public List<Identifier> getIdentifier() { 
1035      if (this.identifier == null)
1036        this.identifier = new ArrayList<Identifier>();
1037      return this.identifier;
1038    }
1039
1040    /**
1041     * @return Returns a reference to <code>this</code> for easy method chaining
1042     */
1043    public HealthcareService setIdentifier(List<Identifier> theIdentifier) { 
1044      this.identifier = theIdentifier;
1045      return this;
1046    }
1047
1048    public boolean hasIdentifier() { 
1049      if (this.identifier == null)
1050        return false;
1051      for (Identifier item : this.identifier)
1052        if (!item.isEmpty())
1053          return true;
1054      return false;
1055    }
1056
1057    public Identifier addIdentifier() { //3
1058      Identifier t = new Identifier();
1059      if (this.identifier == null)
1060        this.identifier = new ArrayList<Identifier>();
1061      this.identifier.add(t);
1062      return t;
1063    }
1064
1065    public HealthcareService addIdentifier(Identifier t) { //3
1066      if (t == null)
1067        return this;
1068      if (this.identifier == null)
1069        this.identifier = new ArrayList<Identifier>();
1070      this.identifier.add(t);
1071      return this;
1072    }
1073
1074    /**
1075     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist
1076     */
1077    public Identifier getIdentifierFirstRep() { 
1078      if (getIdentifier().isEmpty()) {
1079        addIdentifier();
1080      }
1081      return getIdentifier().get(0);
1082    }
1083
1084    /**
1085     * @return {@link #active} (Whether this healthcareservice record is in active use.). This is the underlying object with id, value and extensions. The accessor "getActive" gives direct access to the value
1086     */
1087    public BooleanType getActiveElement() { 
1088      if (this.active == null)
1089        if (Configuration.errorOnAutoCreate())
1090          throw new Error("Attempt to auto-create HealthcareService.active");
1091        else if (Configuration.doAutoCreate())
1092          this.active = new BooleanType(); // bb
1093      return this.active;
1094    }
1095
1096    public boolean hasActiveElement() { 
1097      return this.active != null && !this.active.isEmpty();
1098    }
1099
1100    public boolean hasActive() { 
1101      return this.active != null && !this.active.isEmpty();
1102    }
1103
1104    /**
1105     * @param value {@link #active} (Whether this healthcareservice record is in active use.). This is the underlying object with id, value and extensions. The accessor "getActive" gives direct access to the value
1106     */
1107    public HealthcareService setActiveElement(BooleanType value) { 
1108      this.active = value;
1109      return this;
1110    }
1111
1112    /**
1113     * @return Whether this healthcareservice record is in active use.
1114     */
1115    public boolean getActive() { 
1116      return this.active == null || this.active.isEmpty() ? false : this.active.getValue();
1117    }
1118
1119    /**
1120     * @param value Whether this healthcareservice record is in active use.
1121     */
1122    public HealthcareService setActive(boolean value) { 
1123        if (this.active == null)
1124          this.active = new BooleanType();
1125        this.active.setValue(value);
1126      return this;
1127    }
1128
1129    /**
1130     * @return {@link #providedBy} (The organization that provides this healthcare service.)
1131     */
1132    public Reference getProvidedBy() { 
1133      if (this.providedBy == null)
1134        if (Configuration.errorOnAutoCreate())
1135          throw new Error("Attempt to auto-create HealthcareService.providedBy");
1136        else if (Configuration.doAutoCreate())
1137          this.providedBy = new Reference(); // cc
1138      return this.providedBy;
1139    }
1140
1141    public boolean hasProvidedBy() { 
1142      return this.providedBy != null && !this.providedBy.isEmpty();
1143    }
1144
1145    /**
1146     * @param value {@link #providedBy} (The organization that provides this healthcare service.)
1147     */
1148    public HealthcareService setProvidedBy(Reference value) { 
1149      this.providedBy = value;
1150      return this;
1151    }
1152
1153    /**
1154     * @return {@link #providedBy} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (The organization that provides this healthcare service.)
1155     */
1156    public Organization getProvidedByTarget() { 
1157      if (this.providedByTarget == null)
1158        if (Configuration.errorOnAutoCreate())
1159          throw new Error("Attempt to auto-create HealthcareService.providedBy");
1160        else if (Configuration.doAutoCreate())
1161          this.providedByTarget = new Organization(); // aa
1162      return this.providedByTarget;
1163    }
1164
1165    /**
1166     * @param value {@link #providedBy} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (The organization that provides this healthcare service.)
1167     */
1168    public HealthcareService setProvidedByTarget(Organization value) { 
1169      this.providedByTarget = value;
1170      return this;
1171    }
1172
1173    /**
1174     * @return {@link #category} (Identifies the broad category of service being performed or delivered.)
1175     */
1176    public CodeableConcept getCategory() { 
1177      if (this.category == null)
1178        if (Configuration.errorOnAutoCreate())
1179          throw new Error("Attempt to auto-create HealthcareService.category");
1180        else if (Configuration.doAutoCreate())
1181          this.category = new CodeableConcept(); // cc
1182      return this.category;
1183    }
1184
1185    public boolean hasCategory() { 
1186      return this.category != null && !this.category.isEmpty();
1187    }
1188
1189    /**
1190     * @param value {@link #category} (Identifies the broad category of service being performed or delivered.)
1191     */
1192    public HealthcareService setCategory(CodeableConcept value) { 
1193      this.category = value;
1194      return this;
1195    }
1196
1197    /**
1198     * @return {@link #type} (The specific type of service that may be delivered or performed.)
1199     */
1200    public List<CodeableConcept> getType() { 
1201      if (this.type == null)
1202        this.type = new ArrayList<CodeableConcept>();
1203      return this.type;
1204    }
1205
1206    /**
1207     * @return Returns a reference to <code>this</code> for easy method chaining
1208     */
1209    public HealthcareService setType(List<CodeableConcept> theType) { 
1210      this.type = theType;
1211      return this;
1212    }
1213
1214    public boolean hasType() { 
1215      if (this.type == null)
1216        return false;
1217      for (CodeableConcept item : this.type)
1218        if (!item.isEmpty())
1219          return true;
1220      return false;
1221    }
1222
1223    public CodeableConcept addType() { //3
1224      CodeableConcept t = new CodeableConcept();
1225      if (this.type == null)
1226        this.type = new ArrayList<CodeableConcept>();
1227      this.type.add(t);
1228      return t;
1229    }
1230
1231    public HealthcareService addType(CodeableConcept t) { //3
1232      if (t == null)
1233        return this;
1234      if (this.type == null)
1235        this.type = new ArrayList<CodeableConcept>();
1236      this.type.add(t);
1237      return this;
1238    }
1239
1240    /**
1241     * @return The first repetition of repeating field {@link #type}, creating it if it does not already exist
1242     */
1243    public CodeableConcept getTypeFirstRep() { 
1244      if (getType().isEmpty()) {
1245        addType();
1246      }
1247      return getType().get(0);
1248    }
1249
1250    /**
1251     * @return {@link #specialty} (Collection of specialties handled by the service site. This is more of a medical term.)
1252     */
1253    public List<CodeableConcept> getSpecialty() { 
1254      if (this.specialty == null)
1255        this.specialty = new ArrayList<CodeableConcept>();
1256      return this.specialty;
1257    }
1258
1259    /**
1260     * @return Returns a reference to <code>this</code> for easy method chaining
1261     */
1262    public HealthcareService setSpecialty(List<CodeableConcept> theSpecialty) { 
1263      this.specialty = theSpecialty;
1264      return this;
1265    }
1266
1267    public boolean hasSpecialty() { 
1268      if (this.specialty == null)
1269        return false;
1270      for (CodeableConcept item : this.specialty)
1271        if (!item.isEmpty())
1272          return true;
1273      return false;
1274    }
1275
1276    public CodeableConcept addSpecialty() { //3
1277      CodeableConcept t = new CodeableConcept();
1278      if (this.specialty == null)
1279        this.specialty = new ArrayList<CodeableConcept>();
1280      this.specialty.add(t);
1281      return t;
1282    }
1283
1284    public HealthcareService addSpecialty(CodeableConcept t) { //3
1285      if (t == null)
1286        return this;
1287      if (this.specialty == null)
1288        this.specialty = new ArrayList<CodeableConcept>();
1289      this.specialty.add(t);
1290      return this;
1291    }
1292
1293    /**
1294     * @return The first repetition of repeating field {@link #specialty}, creating it if it does not already exist
1295     */
1296    public CodeableConcept getSpecialtyFirstRep() { 
1297      if (getSpecialty().isEmpty()) {
1298        addSpecialty();
1299      }
1300      return getSpecialty().get(0);
1301    }
1302
1303    /**
1304     * @return {@link #location} (The location(s) where this healthcare service may be provided.)
1305     */
1306    public List<Reference> getLocation() { 
1307      if (this.location == null)
1308        this.location = new ArrayList<Reference>();
1309      return this.location;
1310    }
1311
1312    /**
1313     * @return Returns a reference to <code>this</code> for easy method chaining
1314     */
1315    public HealthcareService setLocation(List<Reference> theLocation) { 
1316      this.location = theLocation;
1317      return this;
1318    }
1319
1320    public boolean hasLocation() { 
1321      if (this.location == null)
1322        return false;
1323      for (Reference item : this.location)
1324        if (!item.isEmpty())
1325          return true;
1326      return false;
1327    }
1328
1329    public Reference addLocation() { //3
1330      Reference t = new Reference();
1331      if (this.location == null)
1332        this.location = new ArrayList<Reference>();
1333      this.location.add(t);
1334      return t;
1335    }
1336
1337    public HealthcareService addLocation(Reference t) { //3
1338      if (t == null)
1339        return this;
1340      if (this.location == null)
1341        this.location = new ArrayList<Reference>();
1342      this.location.add(t);
1343      return this;
1344    }
1345
1346    /**
1347     * @return The first repetition of repeating field {@link #location}, creating it if it does not already exist
1348     */
1349    public Reference getLocationFirstRep() { 
1350      if (getLocation().isEmpty()) {
1351        addLocation();
1352      }
1353      return getLocation().get(0);
1354    }
1355
1356    /**
1357     * @deprecated Use Reference#setResource(IBaseResource) instead
1358     */
1359    @Deprecated
1360    public List<Location> getLocationTarget() { 
1361      if (this.locationTarget == null)
1362        this.locationTarget = new ArrayList<Location>();
1363      return this.locationTarget;
1364    }
1365
1366    /**
1367     * @deprecated Use Reference#setResource(IBaseResource) instead
1368     */
1369    @Deprecated
1370    public Location addLocationTarget() { 
1371      Location r = new Location();
1372      if (this.locationTarget == null)
1373        this.locationTarget = new ArrayList<Location>();
1374      this.locationTarget.add(r);
1375      return r;
1376    }
1377
1378    /**
1379     * @return {@link #name} (Further description of the service as it would be presented to a consumer while searching.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
1380     */
1381    public StringType getNameElement() { 
1382      if (this.name == null)
1383        if (Configuration.errorOnAutoCreate())
1384          throw new Error("Attempt to auto-create HealthcareService.name");
1385        else if (Configuration.doAutoCreate())
1386          this.name = new StringType(); // bb
1387      return this.name;
1388    }
1389
1390    public boolean hasNameElement() { 
1391      return this.name != null && !this.name.isEmpty();
1392    }
1393
1394    public boolean hasName() { 
1395      return this.name != null && !this.name.isEmpty();
1396    }
1397
1398    /**
1399     * @param value {@link #name} (Further description of the service as it would be presented to a consumer while searching.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
1400     */
1401    public HealthcareService setNameElement(StringType value) { 
1402      this.name = value;
1403      return this;
1404    }
1405
1406    /**
1407     * @return Further description of the service as it would be presented to a consumer while searching.
1408     */
1409    public String getName() { 
1410      return this.name == null ? null : this.name.getValue();
1411    }
1412
1413    /**
1414     * @param value Further description of the service as it would be presented to a consumer while searching.
1415     */
1416    public HealthcareService setName(String value) { 
1417      if (Utilities.noString(value))
1418        this.name = null;
1419      else {
1420        if (this.name == null)
1421          this.name = new StringType();
1422        this.name.setValue(value);
1423      }
1424      return this;
1425    }
1426
1427    /**
1428     * @return {@link #comment} (Any additional description of the service and/or any specific issues not covered by the other attributes, which can be displayed as further detail under the serviceName.). This is the underlying object with id, value and extensions. The accessor "getComment" gives direct access to the value
1429     */
1430    public StringType getCommentElement() { 
1431      if (this.comment == null)
1432        if (Configuration.errorOnAutoCreate())
1433          throw new Error("Attempt to auto-create HealthcareService.comment");
1434        else if (Configuration.doAutoCreate())
1435          this.comment = new StringType(); // bb
1436      return this.comment;
1437    }
1438
1439    public boolean hasCommentElement() { 
1440      return this.comment != null && !this.comment.isEmpty();
1441    }
1442
1443    public boolean hasComment() { 
1444      return this.comment != null && !this.comment.isEmpty();
1445    }
1446
1447    /**
1448     * @param value {@link #comment} (Any additional description of the service and/or any specific issues not covered by the other attributes, which can be displayed as further detail under the serviceName.). This is the underlying object with id, value and extensions. The accessor "getComment" gives direct access to the value
1449     */
1450    public HealthcareService setCommentElement(StringType value) { 
1451      this.comment = value;
1452      return this;
1453    }
1454
1455    /**
1456     * @return Any additional description of the service and/or any specific issues not covered by the other attributes, which can be displayed as further detail under the serviceName.
1457     */
1458    public String getComment() { 
1459      return this.comment == null ? null : this.comment.getValue();
1460    }
1461
1462    /**
1463     * @param value Any additional description of the service and/or any specific issues not covered by the other attributes, which can be displayed as further detail under the serviceName.
1464     */
1465    public HealthcareService setComment(String value) { 
1466      if (Utilities.noString(value))
1467        this.comment = null;
1468      else {
1469        if (this.comment == null)
1470          this.comment = new StringType();
1471        this.comment.setValue(value);
1472      }
1473      return this;
1474    }
1475
1476    /**
1477     * @return {@link #extraDetails} (Extra details about the service that can't be placed in the other fields.). This is the underlying object with id, value and extensions. The accessor "getExtraDetails" gives direct access to the value
1478     */
1479    public StringType getExtraDetailsElement() { 
1480      if (this.extraDetails == null)
1481        if (Configuration.errorOnAutoCreate())
1482          throw new Error("Attempt to auto-create HealthcareService.extraDetails");
1483        else if (Configuration.doAutoCreate())
1484          this.extraDetails = new StringType(); // bb
1485      return this.extraDetails;
1486    }
1487
1488    public boolean hasExtraDetailsElement() { 
1489      return this.extraDetails != null && !this.extraDetails.isEmpty();
1490    }
1491
1492    public boolean hasExtraDetails() { 
1493      return this.extraDetails != null && !this.extraDetails.isEmpty();
1494    }
1495
1496    /**
1497     * @param value {@link #extraDetails} (Extra details about the service that can't be placed in the other fields.). This is the underlying object with id, value and extensions. The accessor "getExtraDetails" gives direct access to the value
1498     */
1499    public HealthcareService setExtraDetailsElement(StringType value) { 
1500      this.extraDetails = value;
1501      return this;
1502    }
1503
1504    /**
1505     * @return Extra details about the service that can't be placed in the other fields.
1506     */
1507    public String getExtraDetails() { 
1508      return this.extraDetails == null ? null : this.extraDetails.getValue();
1509    }
1510
1511    /**
1512     * @param value Extra details about the service that can't be placed in the other fields.
1513     */
1514    public HealthcareService setExtraDetails(String value) { 
1515      if (Utilities.noString(value))
1516        this.extraDetails = null;
1517      else {
1518        if (this.extraDetails == null)
1519          this.extraDetails = new StringType();
1520        this.extraDetails.setValue(value);
1521      }
1522      return this;
1523    }
1524
1525    /**
1526     * @return {@link #photo} (If there is a photo/symbol associated with this HealthcareService, it may be included here to facilitate quick identification of the service in a list.)
1527     */
1528    public Attachment getPhoto() { 
1529      if (this.photo == null)
1530        if (Configuration.errorOnAutoCreate())
1531          throw new Error("Attempt to auto-create HealthcareService.photo");
1532        else if (Configuration.doAutoCreate())
1533          this.photo = new Attachment(); // cc
1534      return this.photo;
1535    }
1536
1537    public boolean hasPhoto() { 
1538      return this.photo != null && !this.photo.isEmpty();
1539    }
1540
1541    /**
1542     * @param value {@link #photo} (If there is a photo/symbol associated with this HealthcareService, it may be included here to facilitate quick identification of the service in a list.)
1543     */
1544    public HealthcareService setPhoto(Attachment value) { 
1545      this.photo = value;
1546      return this;
1547    }
1548
1549    /**
1550     * @return {@link #telecom} (List of contacts related to this specific healthcare service.)
1551     */
1552    public List<ContactPoint> getTelecom() { 
1553      if (this.telecom == null)
1554        this.telecom = new ArrayList<ContactPoint>();
1555      return this.telecom;
1556    }
1557
1558    /**
1559     * @return Returns a reference to <code>this</code> for easy method chaining
1560     */
1561    public HealthcareService setTelecom(List<ContactPoint> theTelecom) { 
1562      this.telecom = theTelecom;
1563      return this;
1564    }
1565
1566    public boolean hasTelecom() { 
1567      if (this.telecom == null)
1568        return false;
1569      for (ContactPoint item : this.telecom)
1570        if (!item.isEmpty())
1571          return true;
1572      return false;
1573    }
1574
1575    public ContactPoint addTelecom() { //3
1576      ContactPoint t = new ContactPoint();
1577      if (this.telecom == null)
1578        this.telecom = new ArrayList<ContactPoint>();
1579      this.telecom.add(t);
1580      return t;
1581    }
1582
1583    public HealthcareService addTelecom(ContactPoint t) { //3
1584      if (t == null)
1585        return this;
1586      if (this.telecom == null)
1587        this.telecom = new ArrayList<ContactPoint>();
1588      this.telecom.add(t);
1589      return this;
1590    }
1591
1592    /**
1593     * @return The first repetition of repeating field {@link #telecom}, creating it if it does not already exist
1594     */
1595    public ContactPoint getTelecomFirstRep() { 
1596      if (getTelecom().isEmpty()) {
1597        addTelecom();
1598      }
1599      return getTelecom().get(0);
1600    }
1601
1602    /**
1603     * @return {@link #coverageArea} (The location(s) that this service is available to (not where the service is provided).)
1604     */
1605    public List<Reference> getCoverageArea() { 
1606      if (this.coverageArea == null)
1607        this.coverageArea = new ArrayList<Reference>();
1608      return this.coverageArea;
1609    }
1610
1611    /**
1612     * @return Returns a reference to <code>this</code> for easy method chaining
1613     */
1614    public HealthcareService setCoverageArea(List<Reference> theCoverageArea) { 
1615      this.coverageArea = theCoverageArea;
1616      return this;
1617    }
1618
1619    public boolean hasCoverageArea() { 
1620      if (this.coverageArea == null)
1621        return false;
1622      for (Reference item : this.coverageArea)
1623        if (!item.isEmpty())
1624          return true;
1625      return false;
1626    }
1627
1628    public Reference addCoverageArea() { //3
1629      Reference t = new Reference();
1630      if (this.coverageArea == null)
1631        this.coverageArea = new ArrayList<Reference>();
1632      this.coverageArea.add(t);
1633      return t;
1634    }
1635
1636    public HealthcareService addCoverageArea(Reference t) { //3
1637      if (t == null)
1638        return this;
1639      if (this.coverageArea == null)
1640        this.coverageArea = new ArrayList<Reference>();
1641      this.coverageArea.add(t);
1642      return this;
1643    }
1644
1645    /**
1646     * @return The first repetition of repeating field {@link #coverageArea}, creating it if it does not already exist
1647     */
1648    public Reference getCoverageAreaFirstRep() { 
1649      if (getCoverageArea().isEmpty()) {
1650        addCoverageArea();
1651      }
1652      return getCoverageArea().get(0);
1653    }
1654
1655    /**
1656     * @deprecated Use Reference#setResource(IBaseResource) instead
1657     */
1658    @Deprecated
1659    public List<Location> getCoverageAreaTarget() { 
1660      if (this.coverageAreaTarget == null)
1661        this.coverageAreaTarget = new ArrayList<Location>();
1662      return this.coverageAreaTarget;
1663    }
1664
1665    /**
1666     * @deprecated Use Reference#setResource(IBaseResource) instead
1667     */
1668    @Deprecated
1669    public Location addCoverageAreaTarget() { 
1670      Location r = new Location();
1671      if (this.coverageAreaTarget == null)
1672        this.coverageAreaTarget = new ArrayList<Location>();
1673      this.coverageAreaTarget.add(r);
1674      return r;
1675    }
1676
1677    /**
1678     * @return {@link #serviceProvisionCode} (The code(s) that detail the conditions under which the healthcare service is available/offered.)
1679     */
1680    public List<CodeableConcept> getServiceProvisionCode() { 
1681      if (this.serviceProvisionCode == null)
1682        this.serviceProvisionCode = new ArrayList<CodeableConcept>();
1683      return this.serviceProvisionCode;
1684    }
1685
1686    /**
1687     * @return Returns a reference to <code>this</code> for easy method chaining
1688     */
1689    public HealthcareService setServiceProvisionCode(List<CodeableConcept> theServiceProvisionCode) { 
1690      this.serviceProvisionCode = theServiceProvisionCode;
1691      return this;
1692    }
1693
1694    public boolean hasServiceProvisionCode() { 
1695      if (this.serviceProvisionCode == null)
1696        return false;
1697      for (CodeableConcept item : this.serviceProvisionCode)
1698        if (!item.isEmpty())
1699          return true;
1700      return false;
1701    }
1702
1703    public CodeableConcept addServiceProvisionCode() { //3
1704      CodeableConcept t = new CodeableConcept();
1705      if (this.serviceProvisionCode == null)
1706        this.serviceProvisionCode = new ArrayList<CodeableConcept>();
1707      this.serviceProvisionCode.add(t);
1708      return t;
1709    }
1710
1711    public HealthcareService addServiceProvisionCode(CodeableConcept t) { //3
1712      if (t == null)
1713        return this;
1714      if (this.serviceProvisionCode == null)
1715        this.serviceProvisionCode = new ArrayList<CodeableConcept>();
1716      this.serviceProvisionCode.add(t);
1717      return this;
1718    }
1719
1720    /**
1721     * @return The first repetition of repeating field {@link #serviceProvisionCode}, creating it if it does not already exist
1722     */
1723    public CodeableConcept getServiceProvisionCodeFirstRep() { 
1724      if (getServiceProvisionCode().isEmpty()) {
1725        addServiceProvisionCode();
1726      }
1727      return getServiceProvisionCode().get(0);
1728    }
1729
1730    /**
1731     * @return {@link #eligibility} (Does this service have specific eligibility requirements that need to be met in order to use the service?)
1732     */
1733    public CodeableConcept getEligibility() { 
1734      if (this.eligibility == null)
1735        if (Configuration.errorOnAutoCreate())
1736          throw new Error("Attempt to auto-create HealthcareService.eligibility");
1737        else if (Configuration.doAutoCreate())
1738          this.eligibility = new CodeableConcept(); // cc
1739      return this.eligibility;
1740    }
1741
1742    public boolean hasEligibility() { 
1743      return this.eligibility != null && !this.eligibility.isEmpty();
1744    }
1745
1746    /**
1747     * @param value {@link #eligibility} (Does this service have specific eligibility requirements that need to be met in order to use the service?)
1748     */
1749    public HealthcareService setEligibility(CodeableConcept value) { 
1750      this.eligibility = value;
1751      return this;
1752    }
1753
1754    /**
1755     * @return {@link #eligibilityNote} (Describes the eligibility conditions for the service.). This is the underlying object with id, value and extensions. The accessor "getEligibilityNote" gives direct access to the value
1756     */
1757    public StringType getEligibilityNoteElement() { 
1758      if (this.eligibilityNote == null)
1759        if (Configuration.errorOnAutoCreate())
1760          throw new Error("Attempt to auto-create HealthcareService.eligibilityNote");
1761        else if (Configuration.doAutoCreate())
1762          this.eligibilityNote = new StringType(); // bb
1763      return this.eligibilityNote;
1764    }
1765
1766    public boolean hasEligibilityNoteElement() { 
1767      return this.eligibilityNote != null && !this.eligibilityNote.isEmpty();
1768    }
1769
1770    public boolean hasEligibilityNote() { 
1771      return this.eligibilityNote != null && !this.eligibilityNote.isEmpty();
1772    }
1773
1774    /**
1775     * @param value {@link #eligibilityNote} (Describes the eligibility conditions for the service.). This is the underlying object with id, value and extensions. The accessor "getEligibilityNote" gives direct access to the value
1776     */
1777    public HealthcareService setEligibilityNoteElement(StringType value) { 
1778      this.eligibilityNote = value;
1779      return this;
1780    }
1781
1782    /**
1783     * @return Describes the eligibility conditions for the service.
1784     */
1785    public String getEligibilityNote() { 
1786      return this.eligibilityNote == null ? null : this.eligibilityNote.getValue();
1787    }
1788
1789    /**
1790     * @param value Describes the eligibility conditions for the service.
1791     */
1792    public HealthcareService setEligibilityNote(String value) { 
1793      if (Utilities.noString(value))
1794        this.eligibilityNote = null;
1795      else {
1796        if (this.eligibilityNote == null)
1797          this.eligibilityNote = new StringType();
1798        this.eligibilityNote.setValue(value);
1799      }
1800      return this;
1801    }
1802
1803    /**
1804     * @return {@link #programName} (Program Names that can be used to categorize the service.)
1805     */
1806    public List<StringType> getProgramName() { 
1807      if (this.programName == null)
1808        this.programName = new ArrayList<StringType>();
1809      return this.programName;
1810    }
1811
1812    /**
1813     * @return Returns a reference to <code>this</code> for easy method chaining
1814     */
1815    public HealthcareService setProgramName(List<StringType> theProgramName) { 
1816      this.programName = theProgramName;
1817      return this;
1818    }
1819
1820    public boolean hasProgramName() { 
1821      if (this.programName == null)
1822        return false;
1823      for (StringType item : this.programName)
1824        if (!item.isEmpty())
1825          return true;
1826      return false;
1827    }
1828
1829    /**
1830     * @return {@link #programName} (Program Names that can be used to categorize the service.)
1831     */
1832    public StringType addProgramNameElement() {//2 
1833      StringType t = new StringType();
1834      if (this.programName == null)
1835        this.programName = new ArrayList<StringType>();
1836      this.programName.add(t);
1837      return t;
1838    }
1839
1840    /**
1841     * @param value {@link #programName} (Program Names that can be used to categorize the service.)
1842     */
1843    public HealthcareService addProgramName(String value) { //1
1844      StringType t = new StringType();
1845      t.setValue(value);
1846      if (this.programName == null)
1847        this.programName = new ArrayList<StringType>();
1848      this.programName.add(t);
1849      return this;
1850    }
1851
1852    /**
1853     * @param value {@link #programName} (Program Names that can be used to categorize the service.)
1854     */
1855    public boolean hasProgramName(String value) { 
1856      if (this.programName == null)
1857        return false;
1858      for (StringType v : this.programName)
1859        if (v.equals(value)) // string
1860          return true;
1861      return false;
1862    }
1863
1864    /**
1865     * @return {@link #characteristic} (Collection of characteristics (attributes).)
1866     */
1867    public List<CodeableConcept> getCharacteristic() { 
1868      if (this.characteristic == null)
1869        this.characteristic = new ArrayList<CodeableConcept>();
1870      return this.characteristic;
1871    }
1872
1873    /**
1874     * @return Returns a reference to <code>this</code> for easy method chaining
1875     */
1876    public HealthcareService setCharacteristic(List<CodeableConcept> theCharacteristic) { 
1877      this.characteristic = theCharacteristic;
1878      return this;
1879    }
1880
1881    public boolean hasCharacteristic() { 
1882      if (this.characteristic == null)
1883        return false;
1884      for (CodeableConcept item : this.characteristic)
1885        if (!item.isEmpty())
1886          return true;
1887      return false;
1888    }
1889
1890    public CodeableConcept addCharacteristic() { //3
1891      CodeableConcept t = new CodeableConcept();
1892      if (this.characteristic == null)
1893        this.characteristic = new ArrayList<CodeableConcept>();
1894      this.characteristic.add(t);
1895      return t;
1896    }
1897
1898    public HealthcareService addCharacteristic(CodeableConcept t) { //3
1899      if (t == null)
1900        return this;
1901      if (this.characteristic == null)
1902        this.characteristic = new ArrayList<CodeableConcept>();
1903      this.characteristic.add(t);
1904      return this;
1905    }
1906
1907    /**
1908     * @return The first repetition of repeating field {@link #characteristic}, creating it if it does not already exist
1909     */
1910    public CodeableConcept getCharacteristicFirstRep() { 
1911      if (getCharacteristic().isEmpty()) {
1912        addCharacteristic();
1913      }
1914      return getCharacteristic().get(0);
1915    }
1916
1917    /**
1918     * @return {@link #referralMethod} (Ways that the service accepts referrals, if this is not provided then it is implied that no referral is required.)
1919     */
1920    public List<CodeableConcept> getReferralMethod() { 
1921      if (this.referralMethod == null)
1922        this.referralMethod = new ArrayList<CodeableConcept>();
1923      return this.referralMethod;
1924    }
1925
1926    /**
1927     * @return Returns a reference to <code>this</code> for easy method chaining
1928     */
1929    public HealthcareService setReferralMethod(List<CodeableConcept> theReferralMethod) { 
1930      this.referralMethod = theReferralMethod;
1931      return this;
1932    }
1933
1934    public boolean hasReferralMethod() { 
1935      if (this.referralMethod == null)
1936        return false;
1937      for (CodeableConcept item : this.referralMethod)
1938        if (!item.isEmpty())
1939          return true;
1940      return false;
1941    }
1942
1943    public CodeableConcept addReferralMethod() { //3
1944      CodeableConcept t = new CodeableConcept();
1945      if (this.referralMethod == null)
1946        this.referralMethod = new ArrayList<CodeableConcept>();
1947      this.referralMethod.add(t);
1948      return t;
1949    }
1950
1951    public HealthcareService addReferralMethod(CodeableConcept t) { //3
1952      if (t == null)
1953        return this;
1954      if (this.referralMethod == null)
1955        this.referralMethod = new ArrayList<CodeableConcept>();
1956      this.referralMethod.add(t);
1957      return this;
1958    }
1959
1960    /**
1961     * @return The first repetition of repeating field {@link #referralMethod}, creating it if it does not already exist
1962     */
1963    public CodeableConcept getReferralMethodFirstRep() { 
1964      if (getReferralMethod().isEmpty()) {
1965        addReferralMethod();
1966      }
1967      return getReferralMethod().get(0);
1968    }
1969
1970    /**
1971     * @return {@link #appointmentRequired} (Indicates whether or not a prospective consumer will require an appointment for a particular service at a site to be provided by the Organization. Indicates if an appointment is required for access to this service.). This is the underlying object with id, value and extensions. The accessor "getAppointmentRequired" gives direct access to the value
1972     */
1973    public BooleanType getAppointmentRequiredElement() { 
1974      if (this.appointmentRequired == null)
1975        if (Configuration.errorOnAutoCreate())
1976          throw new Error("Attempt to auto-create HealthcareService.appointmentRequired");
1977        else if (Configuration.doAutoCreate())
1978          this.appointmentRequired = new BooleanType(); // bb
1979      return this.appointmentRequired;
1980    }
1981
1982    public boolean hasAppointmentRequiredElement() { 
1983      return this.appointmentRequired != null && !this.appointmentRequired.isEmpty();
1984    }
1985
1986    public boolean hasAppointmentRequired() { 
1987      return this.appointmentRequired != null && !this.appointmentRequired.isEmpty();
1988    }
1989
1990    /**
1991     * @param value {@link #appointmentRequired} (Indicates whether or not a prospective consumer will require an appointment for a particular service at a site to be provided by the Organization. Indicates if an appointment is required for access to this service.). This is the underlying object with id, value and extensions. The accessor "getAppointmentRequired" gives direct access to the value
1992     */
1993    public HealthcareService setAppointmentRequiredElement(BooleanType value) { 
1994      this.appointmentRequired = value;
1995      return this;
1996    }
1997
1998    /**
1999     * @return Indicates whether or not a prospective consumer will require an appointment for a particular service at a site to be provided by the Organization. Indicates if an appointment is required for access to this service.
2000     */
2001    public boolean getAppointmentRequired() { 
2002      return this.appointmentRequired == null || this.appointmentRequired.isEmpty() ? false : this.appointmentRequired.getValue();
2003    }
2004
2005    /**
2006     * @param value Indicates whether or not a prospective consumer will require an appointment for a particular service at a site to be provided by the Organization. Indicates if an appointment is required for access to this service.
2007     */
2008    public HealthcareService setAppointmentRequired(boolean value) { 
2009        if (this.appointmentRequired == null)
2010          this.appointmentRequired = new BooleanType();
2011        this.appointmentRequired.setValue(value);
2012      return this;
2013    }
2014
2015    /**
2016     * @return {@link #availableTime} (A collection of times that the Service Site is available.)
2017     */
2018    public List<HealthcareServiceAvailableTimeComponent> getAvailableTime() { 
2019      if (this.availableTime == null)
2020        this.availableTime = new ArrayList<HealthcareServiceAvailableTimeComponent>();
2021      return this.availableTime;
2022    }
2023
2024    /**
2025     * @return Returns a reference to <code>this</code> for easy method chaining
2026     */
2027    public HealthcareService setAvailableTime(List<HealthcareServiceAvailableTimeComponent> theAvailableTime) { 
2028      this.availableTime = theAvailableTime;
2029      return this;
2030    }
2031
2032    public boolean hasAvailableTime() { 
2033      if (this.availableTime == null)
2034        return false;
2035      for (HealthcareServiceAvailableTimeComponent item : this.availableTime)
2036        if (!item.isEmpty())
2037          return true;
2038      return false;
2039    }
2040
2041    public HealthcareServiceAvailableTimeComponent addAvailableTime() { //3
2042      HealthcareServiceAvailableTimeComponent t = new HealthcareServiceAvailableTimeComponent();
2043      if (this.availableTime == null)
2044        this.availableTime = new ArrayList<HealthcareServiceAvailableTimeComponent>();
2045      this.availableTime.add(t);
2046      return t;
2047    }
2048
2049    public HealthcareService addAvailableTime(HealthcareServiceAvailableTimeComponent t) { //3
2050      if (t == null)
2051        return this;
2052      if (this.availableTime == null)
2053        this.availableTime = new ArrayList<HealthcareServiceAvailableTimeComponent>();
2054      this.availableTime.add(t);
2055      return this;
2056    }
2057
2058    /**
2059     * @return The first repetition of repeating field {@link #availableTime}, creating it if it does not already exist
2060     */
2061    public HealthcareServiceAvailableTimeComponent getAvailableTimeFirstRep() { 
2062      if (getAvailableTime().isEmpty()) {
2063        addAvailableTime();
2064      }
2065      return getAvailableTime().get(0);
2066    }
2067
2068    /**
2069     * @return {@link #notAvailable} (The HealthcareService is not available during this period of time due to the provided reason.)
2070     */
2071    public List<HealthcareServiceNotAvailableComponent> getNotAvailable() { 
2072      if (this.notAvailable == null)
2073        this.notAvailable = new ArrayList<HealthcareServiceNotAvailableComponent>();
2074      return this.notAvailable;
2075    }
2076
2077    /**
2078     * @return Returns a reference to <code>this</code> for easy method chaining
2079     */
2080    public HealthcareService setNotAvailable(List<HealthcareServiceNotAvailableComponent> theNotAvailable) { 
2081      this.notAvailable = theNotAvailable;
2082      return this;
2083    }
2084
2085    public boolean hasNotAvailable() { 
2086      if (this.notAvailable == null)
2087        return false;
2088      for (HealthcareServiceNotAvailableComponent item : this.notAvailable)
2089        if (!item.isEmpty())
2090          return true;
2091      return false;
2092    }
2093
2094    public HealthcareServiceNotAvailableComponent addNotAvailable() { //3
2095      HealthcareServiceNotAvailableComponent t = new HealthcareServiceNotAvailableComponent();
2096      if (this.notAvailable == null)
2097        this.notAvailable = new ArrayList<HealthcareServiceNotAvailableComponent>();
2098      this.notAvailable.add(t);
2099      return t;
2100    }
2101
2102    public HealthcareService addNotAvailable(HealthcareServiceNotAvailableComponent t) { //3
2103      if (t == null)
2104        return this;
2105      if (this.notAvailable == null)
2106        this.notAvailable = new ArrayList<HealthcareServiceNotAvailableComponent>();
2107      this.notAvailable.add(t);
2108      return this;
2109    }
2110
2111    /**
2112     * @return The first repetition of repeating field {@link #notAvailable}, creating it if it does not already exist
2113     */
2114    public HealthcareServiceNotAvailableComponent getNotAvailableFirstRep() { 
2115      if (getNotAvailable().isEmpty()) {
2116        addNotAvailable();
2117      }
2118      return getNotAvailable().get(0);
2119    }
2120
2121    /**
2122     * @return {@link #availabilityExceptions} (A description of site availability exceptions, e.g. public holiday availability. Succinctly describing all possible exceptions to normal site availability as details in the available Times and not available Times.). This is the underlying object with id, value and extensions. The accessor "getAvailabilityExceptions" gives direct access to the value
2123     */
2124    public StringType getAvailabilityExceptionsElement() { 
2125      if (this.availabilityExceptions == null)
2126        if (Configuration.errorOnAutoCreate())
2127          throw new Error("Attempt to auto-create HealthcareService.availabilityExceptions");
2128        else if (Configuration.doAutoCreate())
2129          this.availabilityExceptions = new StringType(); // bb
2130      return this.availabilityExceptions;
2131    }
2132
2133    public boolean hasAvailabilityExceptionsElement() { 
2134      return this.availabilityExceptions != null && !this.availabilityExceptions.isEmpty();
2135    }
2136
2137    public boolean hasAvailabilityExceptions() { 
2138      return this.availabilityExceptions != null && !this.availabilityExceptions.isEmpty();
2139    }
2140
2141    /**
2142     * @param value {@link #availabilityExceptions} (A description of site availability exceptions, e.g. public holiday availability. Succinctly describing all possible exceptions to normal site availability as details in the available Times and not available Times.). This is the underlying object with id, value and extensions. The accessor "getAvailabilityExceptions" gives direct access to the value
2143     */
2144    public HealthcareService setAvailabilityExceptionsElement(StringType value) { 
2145      this.availabilityExceptions = value;
2146      return this;
2147    }
2148
2149    /**
2150     * @return A description of site availability exceptions, e.g. public holiday availability. Succinctly describing all possible exceptions to normal site availability as details in the available Times and not available Times.
2151     */
2152    public String getAvailabilityExceptions() { 
2153      return this.availabilityExceptions == null ? null : this.availabilityExceptions.getValue();
2154    }
2155
2156    /**
2157     * @param value A description of site availability exceptions, e.g. public holiday availability. Succinctly describing all possible exceptions to normal site availability as details in the available Times and not available Times.
2158     */
2159    public HealthcareService setAvailabilityExceptions(String value) { 
2160      if (Utilities.noString(value))
2161        this.availabilityExceptions = null;
2162      else {
2163        if (this.availabilityExceptions == null)
2164          this.availabilityExceptions = new StringType();
2165        this.availabilityExceptions.setValue(value);
2166      }
2167      return this;
2168    }
2169
2170    /**
2171     * @return {@link #endpoint} (Technical endpoints providing access to services operated for the specific healthcare services defined at this resource.)
2172     */
2173    public List<Reference> getEndpoint() { 
2174      if (this.endpoint == null)
2175        this.endpoint = new ArrayList<Reference>();
2176      return this.endpoint;
2177    }
2178
2179    /**
2180     * @return Returns a reference to <code>this</code> for easy method chaining
2181     */
2182    public HealthcareService setEndpoint(List<Reference> theEndpoint) { 
2183      this.endpoint = theEndpoint;
2184      return this;
2185    }
2186
2187    public boolean hasEndpoint() { 
2188      if (this.endpoint == null)
2189        return false;
2190      for (Reference item : this.endpoint)
2191        if (!item.isEmpty())
2192          return true;
2193      return false;
2194    }
2195
2196    public Reference addEndpoint() { //3
2197      Reference t = new Reference();
2198      if (this.endpoint == null)
2199        this.endpoint = new ArrayList<Reference>();
2200      this.endpoint.add(t);
2201      return t;
2202    }
2203
2204    public HealthcareService addEndpoint(Reference t) { //3
2205      if (t == null)
2206        return this;
2207      if (this.endpoint == null)
2208        this.endpoint = new ArrayList<Reference>();
2209      this.endpoint.add(t);
2210      return this;
2211    }
2212
2213    /**
2214     * @return The first repetition of repeating field {@link #endpoint}, creating it if it does not already exist
2215     */
2216    public Reference getEndpointFirstRep() { 
2217      if (getEndpoint().isEmpty()) {
2218        addEndpoint();
2219      }
2220      return getEndpoint().get(0);
2221    }
2222
2223    /**
2224     * @deprecated Use Reference#setResource(IBaseResource) instead
2225     */
2226    @Deprecated
2227    public List<Endpoint> getEndpointTarget() { 
2228      if (this.endpointTarget == null)
2229        this.endpointTarget = new ArrayList<Endpoint>();
2230      return this.endpointTarget;
2231    }
2232
2233    /**
2234     * @deprecated Use Reference#setResource(IBaseResource) instead
2235     */
2236    @Deprecated
2237    public Endpoint addEndpointTarget() { 
2238      Endpoint r = new Endpoint();
2239      if (this.endpointTarget == null)
2240        this.endpointTarget = new ArrayList<Endpoint>();
2241      this.endpointTarget.add(r);
2242      return r;
2243    }
2244
2245      protected void listChildren(List<Property> childrenList) {
2246        super.listChildren(childrenList);
2247        childrenList.add(new Property("identifier", "Identifier", "External identifiers for this item.", 0, java.lang.Integer.MAX_VALUE, identifier));
2248        childrenList.add(new Property("active", "boolean", "Whether this healthcareservice record is in active use.", 0, java.lang.Integer.MAX_VALUE, active));
2249        childrenList.add(new Property("providedBy", "Reference(Organization)", "The organization that provides this healthcare service.", 0, java.lang.Integer.MAX_VALUE, providedBy));
2250        childrenList.add(new Property("category", "CodeableConcept", "Identifies the broad category of service being performed or delivered.", 0, java.lang.Integer.MAX_VALUE, category));
2251        childrenList.add(new Property("type", "CodeableConcept", "The specific type of service that may be delivered or performed.", 0, java.lang.Integer.MAX_VALUE, type));
2252        childrenList.add(new Property("specialty", "CodeableConcept", "Collection of specialties handled by the service site. This is more of a medical term.", 0, java.lang.Integer.MAX_VALUE, specialty));
2253        childrenList.add(new Property("location", "Reference(Location)", "The location(s) where this healthcare service may be provided.", 0, java.lang.Integer.MAX_VALUE, location));
2254        childrenList.add(new Property("name", "string", "Further description of the service as it would be presented to a consumer while searching.", 0, java.lang.Integer.MAX_VALUE, name));
2255        childrenList.add(new Property("comment", "string", "Any additional description of the service and/or any specific issues not covered by the other attributes, which can be displayed as further detail under the serviceName.", 0, java.lang.Integer.MAX_VALUE, comment));
2256        childrenList.add(new Property("extraDetails", "string", "Extra details about the service that can't be placed in the other fields.", 0, java.lang.Integer.MAX_VALUE, extraDetails));
2257        childrenList.add(new Property("photo", "Attachment", "If there is a photo/symbol associated with this HealthcareService, it may be included here to facilitate quick identification of the service in a list.", 0, java.lang.Integer.MAX_VALUE, photo));
2258        childrenList.add(new Property("telecom", "ContactPoint", "List of contacts related to this specific healthcare service.", 0, java.lang.Integer.MAX_VALUE, telecom));
2259        childrenList.add(new Property("coverageArea", "Reference(Location)", "The location(s) that this service is available to (not where the service is provided).", 0, java.lang.Integer.MAX_VALUE, coverageArea));
2260        childrenList.add(new Property("serviceProvisionCode", "CodeableConcept", "The code(s) that detail the conditions under which the healthcare service is available/offered.", 0, java.lang.Integer.MAX_VALUE, serviceProvisionCode));
2261        childrenList.add(new Property("eligibility", "CodeableConcept", "Does this service have specific eligibility requirements that need to be met in order to use the service?", 0, java.lang.Integer.MAX_VALUE, eligibility));
2262        childrenList.add(new Property("eligibilityNote", "string", "Describes the eligibility conditions for the service.", 0, java.lang.Integer.MAX_VALUE, eligibilityNote));
2263        childrenList.add(new Property("programName", "string", "Program Names that can be used to categorize the service.", 0, java.lang.Integer.MAX_VALUE, programName));
2264        childrenList.add(new Property("characteristic", "CodeableConcept", "Collection of characteristics (attributes).", 0, java.lang.Integer.MAX_VALUE, characteristic));
2265        childrenList.add(new Property("referralMethod", "CodeableConcept", "Ways that the service accepts referrals, if this is not provided then it is implied that no referral is required.", 0, java.lang.Integer.MAX_VALUE, referralMethod));
2266        childrenList.add(new Property("appointmentRequired", "boolean", "Indicates whether or not a prospective consumer will require an appointment for a particular service at a site to be provided by the Organization. Indicates if an appointment is required for access to this service.", 0, java.lang.Integer.MAX_VALUE, appointmentRequired));
2267        childrenList.add(new Property("availableTime", "", "A collection of times that the Service Site is available.", 0, java.lang.Integer.MAX_VALUE, availableTime));
2268        childrenList.add(new Property("notAvailable", "", "The HealthcareService is not available during this period of time due to the provided reason.", 0, java.lang.Integer.MAX_VALUE, notAvailable));
2269        childrenList.add(new Property("availabilityExceptions", "string", "A description of site availability exceptions, e.g. public holiday availability. Succinctly describing all possible exceptions to normal site availability as details in the available Times and not available Times.", 0, java.lang.Integer.MAX_VALUE, availabilityExceptions));
2270        childrenList.add(new Property("endpoint", "Reference(Endpoint)", "Technical endpoints providing access to services operated for the specific healthcare services defined at this resource.", 0, java.lang.Integer.MAX_VALUE, endpoint));
2271      }
2272
2273      @Override
2274      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2275        switch (hash) {
2276        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
2277        case -1422950650: /*active*/ return this.active == null ? new Base[0] : new Base[] {this.active}; // BooleanType
2278        case 205136282: /*providedBy*/ return this.providedBy == null ? new Base[0] : new Base[] {this.providedBy}; // Reference
2279        case 50511102: /*category*/ return this.category == null ? new Base[0] : new Base[] {this.category}; // CodeableConcept
2280        case 3575610: /*type*/ return this.type == null ? new Base[0] : this.type.toArray(new Base[this.type.size()]); // CodeableConcept
2281        case -1694759682: /*specialty*/ return this.specialty == null ? new Base[0] : this.specialty.toArray(new Base[this.specialty.size()]); // CodeableConcept
2282        case 1901043637: /*location*/ return this.location == null ? new Base[0] : this.location.toArray(new Base[this.location.size()]); // Reference
2283        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // StringType
2284        case 950398559: /*comment*/ return this.comment == null ? new Base[0] : new Base[] {this.comment}; // StringType
2285        case -1469168622: /*extraDetails*/ return this.extraDetails == null ? new Base[0] : new Base[] {this.extraDetails}; // StringType
2286        case 106642994: /*photo*/ return this.photo == null ? new Base[0] : new Base[] {this.photo}; // Attachment
2287        case -1429363305: /*telecom*/ return this.telecom == null ? new Base[0] : this.telecom.toArray(new Base[this.telecom.size()]); // ContactPoint
2288        case -1532328299: /*coverageArea*/ return this.coverageArea == null ? new Base[0] : this.coverageArea.toArray(new Base[this.coverageArea.size()]); // Reference
2289        case 1504575405: /*serviceProvisionCode*/ return this.serviceProvisionCode == null ? new Base[0] : this.serviceProvisionCode.toArray(new Base[this.serviceProvisionCode.size()]); // CodeableConcept
2290        case -930847859: /*eligibility*/ return this.eligibility == null ? new Base[0] : new Base[] {this.eligibility}; // CodeableConcept
2291        case 1635973407: /*eligibilityNote*/ return this.eligibilityNote == null ? new Base[0] : new Base[] {this.eligibilityNote}; // StringType
2292        case 1010379567: /*programName*/ return this.programName == null ? new Base[0] : this.programName.toArray(new Base[this.programName.size()]); // StringType
2293        case 366313883: /*characteristic*/ return this.characteristic == null ? new Base[0] : this.characteristic.toArray(new Base[this.characteristic.size()]); // CodeableConcept
2294        case -2092740898: /*referralMethod*/ return this.referralMethod == null ? new Base[0] : this.referralMethod.toArray(new Base[this.referralMethod.size()]); // CodeableConcept
2295        case 427220062: /*appointmentRequired*/ return this.appointmentRequired == null ? new Base[0] : new Base[] {this.appointmentRequired}; // BooleanType
2296        case 1873069366: /*availableTime*/ return this.availableTime == null ? new Base[0] : this.availableTime.toArray(new Base[this.availableTime.size()]); // HealthcareServiceAvailableTimeComponent
2297        case -629572298: /*notAvailable*/ return this.notAvailable == null ? new Base[0] : this.notAvailable.toArray(new Base[this.notAvailable.size()]); // HealthcareServiceNotAvailableComponent
2298        case -1149143617: /*availabilityExceptions*/ return this.availabilityExceptions == null ? new Base[0] : new Base[] {this.availabilityExceptions}; // StringType
2299        case 1741102485: /*endpoint*/ return this.endpoint == null ? new Base[0] : this.endpoint.toArray(new Base[this.endpoint.size()]); // Reference
2300        default: return super.getProperty(hash, name, checkValid);
2301        }
2302
2303      }
2304
2305      @Override
2306      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2307        switch (hash) {
2308        case -1618432855: // identifier
2309          this.getIdentifier().add(castToIdentifier(value)); // Identifier
2310          return value;
2311        case -1422950650: // active
2312          this.active = castToBoolean(value); // BooleanType
2313          return value;
2314        case 205136282: // providedBy
2315          this.providedBy = castToReference(value); // Reference
2316          return value;
2317        case 50511102: // category
2318          this.category = castToCodeableConcept(value); // CodeableConcept
2319          return value;
2320        case 3575610: // type
2321          this.getType().add(castToCodeableConcept(value)); // CodeableConcept
2322          return value;
2323        case -1694759682: // specialty
2324          this.getSpecialty().add(castToCodeableConcept(value)); // CodeableConcept
2325          return value;
2326        case 1901043637: // location
2327          this.getLocation().add(castToReference(value)); // Reference
2328          return value;
2329        case 3373707: // name
2330          this.name = castToString(value); // StringType
2331          return value;
2332        case 950398559: // comment
2333          this.comment = castToString(value); // StringType
2334          return value;
2335        case -1469168622: // extraDetails
2336          this.extraDetails = castToString(value); // StringType
2337          return value;
2338        case 106642994: // photo
2339          this.photo = castToAttachment(value); // Attachment
2340          return value;
2341        case -1429363305: // telecom
2342          this.getTelecom().add(castToContactPoint(value)); // ContactPoint
2343          return value;
2344        case -1532328299: // coverageArea
2345          this.getCoverageArea().add(castToReference(value)); // Reference
2346          return value;
2347        case 1504575405: // serviceProvisionCode
2348          this.getServiceProvisionCode().add(castToCodeableConcept(value)); // CodeableConcept
2349          return value;
2350        case -930847859: // eligibility
2351          this.eligibility = castToCodeableConcept(value); // CodeableConcept
2352          return value;
2353        case 1635973407: // eligibilityNote
2354          this.eligibilityNote = castToString(value); // StringType
2355          return value;
2356        case 1010379567: // programName
2357          this.getProgramName().add(castToString(value)); // StringType
2358          return value;
2359        case 366313883: // characteristic
2360          this.getCharacteristic().add(castToCodeableConcept(value)); // CodeableConcept
2361          return value;
2362        case -2092740898: // referralMethod
2363          this.getReferralMethod().add(castToCodeableConcept(value)); // CodeableConcept
2364          return value;
2365        case 427220062: // appointmentRequired
2366          this.appointmentRequired = castToBoolean(value); // BooleanType
2367          return value;
2368        case 1873069366: // availableTime
2369          this.getAvailableTime().add((HealthcareServiceAvailableTimeComponent) value); // HealthcareServiceAvailableTimeComponent
2370          return value;
2371        case -629572298: // notAvailable
2372          this.getNotAvailable().add((HealthcareServiceNotAvailableComponent) value); // HealthcareServiceNotAvailableComponent
2373          return value;
2374        case -1149143617: // availabilityExceptions
2375          this.availabilityExceptions = castToString(value); // StringType
2376          return value;
2377        case 1741102485: // endpoint
2378          this.getEndpoint().add(castToReference(value)); // Reference
2379          return value;
2380        default: return super.setProperty(hash, name, value);
2381        }
2382
2383      }
2384
2385      @Override
2386      public Base setProperty(String name, Base value) throws FHIRException {
2387        if (name.equals("identifier")) {
2388          this.getIdentifier().add(castToIdentifier(value));
2389        } else if (name.equals("active")) {
2390          this.active = castToBoolean(value); // BooleanType
2391        } else if (name.equals("providedBy")) {
2392          this.providedBy = castToReference(value); // Reference
2393        } else if (name.equals("category")) {
2394          this.category = castToCodeableConcept(value); // CodeableConcept
2395        } else if (name.equals("type")) {
2396          this.getType().add(castToCodeableConcept(value));
2397        } else if (name.equals("specialty")) {
2398          this.getSpecialty().add(castToCodeableConcept(value));
2399        } else if (name.equals("location")) {
2400          this.getLocation().add(castToReference(value));
2401        } else if (name.equals("name")) {
2402          this.name = castToString(value); // StringType
2403        } else if (name.equals("comment")) {
2404          this.comment = castToString(value); // StringType
2405        } else if (name.equals("extraDetails")) {
2406          this.extraDetails = castToString(value); // StringType
2407        } else if (name.equals("photo")) {
2408          this.photo = castToAttachment(value); // Attachment
2409        } else if (name.equals("telecom")) {
2410          this.getTelecom().add(castToContactPoint(value));
2411        } else if (name.equals("coverageArea")) {
2412          this.getCoverageArea().add(castToReference(value));
2413        } else if (name.equals("serviceProvisionCode")) {
2414          this.getServiceProvisionCode().add(castToCodeableConcept(value));
2415        } else if (name.equals("eligibility")) {
2416          this.eligibility = castToCodeableConcept(value); // CodeableConcept
2417        } else if (name.equals("eligibilityNote")) {
2418          this.eligibilityNote = castToString(value); // StringType
2419        } else if (name.equals("programName")) {
2420          this.getProgramName().add(castToString(value));
2421        } else if (name.equals("characteristic")) {
2422          this.getCharacteristic().add(castToCodeableConcept(value));
2423        } else if (name.equals("referralMethod")) {
2424          this.getReferralMethod().add(castToCodeableConcept(value));
2425        } else if (name.equals("appointmentRequired")) {
2426          this.appointmentRequired = castToBoolean(value); // BooleanType
2427        } else if (name.equals("availableTime")) {
2428          this.getAvailableTime().add((HealthcareServiceAvailableTimeComponent) value);
2429        } else if (name.equals("notAvailable")) {
2430          this.getNotAvailable().add((HealthcareServiceNotAvailableComponent) value);
2431        } else if (name.equals("availabilityExceptions")) {
2432          this.availabilityExceptions = castToString(value); // StringType
2433        } else if (name.equals("endpoint")) {
2434          this.getEndpoint().add(castToReference(value));
2435        } else
2436          return super.setProperty(name, value);
2437        return value;
2438      }
2439
2440      @Override
2441      public Base makeProperty(int hash, String name) throws FHIRException {
2442        switch (hash) {
2443        case -1618432855:  return addIdentifier(); 
2444        case -1422950650:  return getActiveElement();
2445        case 205136282:  return getProvidedBy(); 
2446        case 50511102:  return getCategory(); 
2447        case 3575610:  return addType(); 
2448        case -1694759682:  return addSpecialty(); 
2449        case 1901043637:  return addLocation(); 
2450        case 3373707:  return getNameElement();
2451        case 950398559:  return getCommentElement();
2452        case -1469168622:  return getExtraDetailsElement();
2453        case 106642994:  return getPhoto(); 
2454        case -1429363305:  return addTelecom(); 
2455        case -1532328299:  return addCoverageArea(); 
2456        case 1504575405:  return addServiceProvisionCode(); 
2457        case -930847859:  return getEligibility(); 
2458        case 1635973407:  return getEligibilityNoteElement();
2459        case 1010379567:  return addProgramNameElement();
2460        case 366313883:  return addCharacteristic(); 
2461        case -2092740898:  return addReferralMethod(); 
2462        case 427220062:  return getAppointmentRequiredElement();
2463        case 1873069366:  return addAvailableTime(); 
2464        case -629572298:  return addNotAvailable(); 
2465        case -1149143617:  return getAvailabilityExceptionsElement();
2466        case 1741102485:  return addEndpoint(); 
2467        default: return super.makeProperty(hash, name);
2468        }
2469
2470      }
2471
2472      @Override
2473      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2474        switch (hash) {
2475        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
2476        case -1422950650: /*active*/ return new String[] {"boolean"};
2477        case 205136282: /*providedBy*/ return new String[] {"Reference"};
2478        case 50511102: /*category*/ return new String[] {"CodeableConcept"};
2479        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
2480        case -1694759682: /*specialty*/ return new String[] {"CodeableConcept"};
2481        case 1901043637: /*location*/ return new String[] {"Reference"};
2482        case 3373707: /*name*/ return new String[] {"string"};
2483        case 950398559: /*comment*/ return new String[] {"string"};
2484        case -1469168622: /*extraDetails*/ return new String[] {"string"};
2485        case 106642994: /*photo*/ return new String[] {"Attachment"};
2486        case -1429363305: /*telecom*/ return new String[] {"ContactPoint"};
2487        case -1532328299: /*coverageArea*/ return new String[] {"Reference"};
2488        case 1504575405: /*serviceProvisionCode*/ return new String[] {"CodeableConcept"};
2489        case -930847859: /*eligibility*/ return new String[] {"CodeableConcept"};
2490        case 1635973407: /*eligibilityNote*/ return new String[] {"string"};
2491        case 1010379567: /*programName*/ return new String[] {"string"};
2492        case 366313883: /*characteristic*/ return new String[] {"CodeableConcept"};
2493        case -2092740898: /*referralMethod*/ return new String[] {"CodeableConcept"};
2494        case 427220062: /*appointmentRequired*/ return new String[] {"boolean"};
2495        case 1873069366: /*availableTime*/ return new String[] {};
2496        case -629572298: /*notAvailable*/ return new String[] {};
2497        case -1149143617: /*availabilityExceptions*/ return new String[] {"string"};
2498        case 1741102485: /*endpoint*/ return new String[] {"Reference"};
2499        default: return super.getTypesForProperty(hash, name);
2500        }
2501
2502      }
2503
2504      @Override
2505      public Base addChild(String name) throws FHIRException {
2506        if (name.equals("identifier")) {
2507          return addIdentifier();
2508        }
2509        else if (name.equals("active")) {
2510          throw new FHIRException("Cannot call addChild on a primitive type HealthcareService.active");
2511        }
2512        else if (name.equals("providedBy")) {
2513          this.providedBy = new Reference();
2514          return this.providedBy;
2515        }
2516        else if (name.equals("category")) {
2517          this.category = new CodeableConcept();
2518          return this.category;
2519        }
2520        else if (name.equals("type")) {
2521          return addType();
2522        }
2523        else if (name.equals("specialty")) {
2524          return addSpecialty();
2525        }
2526        else if (name.equals("location")) {
2527          return addLocation();
2528        }
2529        else if (name.equals("name")) {
2530          throw new FHIRException("Cannot call addChild on a primitive type HealthcareService.name");
2531        }
2532        else if (name.equals("comment")) {
2533          throw new FHIRException("Cannot call addChild on a primitive type HealthcareService.comment");
2534        }
2535        else if (name.equals("extraDetails")) {
2536          throw new FHIRException("Cannot call addChild on a primitive type HealthcareService.extraDetails");
2537        }
2538        else if (name.equals("photo")) {
2539          this.photo = new Attachment();
2540          return this.photo;
2541        }
2542        else if (name.equals("telecom")) {
2543          return addTelecom();
2544        }
2545        else if (name.equals("coverageArea")) {
2546          return addCoverageArea();
2547        }
2548        else if (name.equals("serviceProvisionCode")) {
2549          return addServiceProvisionCode();
2550        }
2551        else if (name.equals("eligibility")) {
2552          this.eligibility = new CodeableConcept();
2553          return this.eligibility;
2554        }
2555        else if (name.equals("eligibilityNote")) {
2556          throw new FHIRException("Cannot call addChild on a primitive type HealthcareService.eligibilityNote");
2557        }
2558        else if (name.equals("programName")) {
2559          throw new FHIRException("Cannot call addChild on a primitive type HealthcareService.programName");
2560        }
2561        else if (name.equals("characteristic")) {
2562          return addCharacteristic();
2563        }
2564        else if (name.equals("referralMethod")) {
2565          return addReferralMethod();
2566        }
2567        else if (name.equals("appointmentRequired")) {
2568          throw new FHIRException("Cannot call addChild on a primitive type HealthcareService.appointmentRequired");
2569        }
2570        else if (name.equals("availableTime")) {
2571          return addAvailableTime();
2572        }
2573        else if (name.equals("notAvailable")) {
2574          return addNotAvailable();
2575        }
2576        else if (name.equals("availabilityExceptions")) {
2577          throw new FHIRException("Cannot call addChild on a primitive type HealthcareService.availabilityExceptions");
2578        }
2579        else if (name.equals("endpoint")) {
2580          return addEndpoint();
2581        }
2582        else
2583          return super.addChild(name);
2584      }
2585
2586  public String fhirType() {
2587    return "HealthcareService";
2588
2589  }
2590
2591      public HealthcareService copy() {
2592        HealthcareService dst = new HealthcareService();
2593        copyValues(dst);
2594        if (identifier != null) {
2595          dst.identifier = new ArrayList<Identifier>();
2596          for (Identifier i : identifier)
2597            dst.identifier.add(i.copy());
2598        };
2599        dst.active = active == null ? null : active.copy();
2600        dst.providedBy = providedBy == null ? null : providedBy.copy();
2601        dst.category = category == null ? null : category.copy();
2602        if (type != null) {
2603          dst.type = new ArrayList<CodeableConcept>();
2604          for (CodeableConcept i : type)
2605            dst.type.add(i.copy());
2606        };
2607        if (specialty != null) {
2608          dst.specialty = new ArrayList<CodeableConcept>();
2609          for (CodeableConcept i : specialty)
2610            dst.specialty.add(i.copy());
2611        };
2612        if (location != null) {
2613          dst.location = new ArrayList<Reference>();
2614          for (Reference i : location)
2615            dst.location.add(i.copy());
2616        };
2617        dst.name = name == null ? null : name.copy();
2618        dst.comment = comment == null ? null : comment.copy();
2619        dst.extraDetails = extraDetails == null ? null : extraDetails.copy();
2620        dst.photo = photo == null ? null : photo.copy();
2621        if (telecom != null) {
2622          dst.telecom = new ArrayList<ContactPoint>();
2623          for (ContactPoint i : telecom)
2624            dst.telecom.add(i.copy());
2625        };
2626        if (coverageArea != null) {
2627          dst.coverageArea = new ArrayList<Reference>();
2628          for (Reference i : coverageArea)
2629            dst.coverageArea.add(i.copy());
2630        };
2631        if (serviceProvisionCode != null) {
2632          dst.serviceProvisionCode = new ArrayList<CodeableConcept>();
2633          for (CodeableConcept i : serviceProvisionCode)
2634            dst.serviceProvisionCode.add(i.copy());
2635        };
2636        dst.eligibility = eligibility == null ? null : eligibility.copy();
2637        dst.eligibilityNote = eligibilityNote == null ? null : eligibilityNote.copy();
2638        if (programName != null) {
2639          dst.programName = new ArrayList<StringType>();
2640          for (StringType i : programName)
2641            dst.programName.add(i.copy());
2642        };
2643        if (characteristic != null) {
2644          dst.characteristic = new ArrayList<CodeableConcept>();
2645          for (CodeableConcept i : characteristic)
2646            dst.characteristic.add(i.copy());
2647        };
2648        if (referralMethod != null) {
2649          dst.referralMethod = new ArrayList<CodeableConcept>();
2650          for (CodeableConcept i : referralMethod)
2651            dst.referralMethod.add(i.copy());
2652        };
2653        dst.appointmentRequired = appointmentRequired == null ? null : appointmentRequired.copy();
2654        if (availableTime != null) {
2655          dst.availableTime = new ArrayList<HealthcareServiceAvailableTimeComponent>();
2656          for (HealthcareServiceAvailableTimeComponent i : availableTime)
2657            dst.availableTime.add(i.copy());
2658        };
2659        if (notAvailable != null) {
2660          dst.notAvailable = new ArrayList<HealthcareServiceNotAvailableComponent>();
2661          for (HealthcareServiceNotAvailableComponent i : notAvailable)
2662            dst.notAvailable.add(i.copy());
2663        };
2664        dst.availabilityExceptions = availabilityExceptions == null ? null : availabilityExceptions.copy();
2665        if (endpoint != null) {
2666          dst.endpoint = new ArrayList<Reference>();
2667          for (Reference i : endpoint)
2668            dst.endpoint.add(i.copy());
2669        };
2670        return dst;
2671      }
2672
2673      protected HealthcareService typedCopy() {
2674        return copy();
2675      }
2676
2677      @Override
2678      public boolean equalsDeep(Base other) {
2679        if (!super.equalsDeep(other))
2680          return false;
2681        if (!(other instanceof HealthcareService))
2682          return false;
2683        HealthcareService o = (HealthcareService) other;
2684        return compareDeep(identifier, o.identifier, true) && compareDeep(active, o.active, true) && compareDeep(providedBy, o.providedBy, true)
2685           && compareDeep(category, o.category, true) && compareDeep(type, o.type, true) && compareDeep(specialty, o.specialty, true)
2686           && compareDeep(location, o.location, true) && compareDeep(name, o.name, true) && compareDeep(comment, o.comment, true)
2687           && compareDeep(extraDetails, o.extraDetails, true) && compareDeep(photo, o.photo, true) && compareDeep(telecom, o.telecom, true)
2688           && compareDeep(coverageArea, o.coverageArea, true) && compareDeep(serviceProvisionCode, o.serviceProvisionCode, true)
2689           && compareDeep(eligibility, o.eligibility, true) && compareDeep(eligibilityNote, o.eligibilityNote, true)
2690           && compareDeep(programName, o.programName, true) && compareDeep(characteristic, o.characteristic, true)
2691           && compareDeep(referralMethod, o.referralMethod, true) && compareDeep(appointmentRequired, o.appointmentRequired, true)
2692           && compareDeep(availableTime, o.availableTime, true) && compareDeep(notAvailable, o.notAvailable, true)
2693           && compareDeep(availabilityExceptions, o.availabilityExceptions, true) && compareDeep(endpoint, o.endpoint, true)
2694          ;
2695      }
2696
2697      @Override
2698      public boolean equalsShallow(Base other) {
2699        if (!super.equalsShallow(other))
2700          return false;
2701        if (!(other instanceof HealthcareService))
2702          return false;
2703        HealthcareService o = (HealthcareService) other;
2704        return compareValues(active, o.active, true) && compareValues(name, o.name, true) && compareValues(comment, o.comment, true)
2705           && compareValues(extraDetails, o.extraDetails, true) && compareValues(eligibilityNote, o.eligibilityNote, true)
2706           && compareValues(programName, o.programName, true) && compareValues(appointmentRequired, o.appointmentRequired, true)
2707           && compareValues(availabilityExceptions, o.availabilityExceptions, true);
2708      }
2709
2710      public boolean isEmpty() {
2711        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, active, providedBy
2712          , category, type, specialty, location, name, comment, extraDetails, photo, telecom
2713          , coverageArea, serviceProvisionCode, eligibility, eligibilityNote, programName, characteristic
2714          , referralMethod, appointmentRequired, availableTime, notAvailable, availabilityExceptions
2715          , endpoint);
2716      }
2717
2718  @Override
2719  public ResourceType getResourceType() {
2720    return ResourceType.HealthcareService;
2721   }
2722
2723 /**
2724   * Search parameter: <b>identifier</b>
2725   * <p>
2726   * Description: <b>External identifiers for this item</b><br>
2727   * Type: <b>token</b><br>
2728   * Path: <b>HealthcareService.identifier</b><br>
2729   * </p>
2730   */
2731  @SearchParamDefinition(name="identifier", path="HealthcareService.identifier", description="External identifiers for this item", type="token" )
2732  public static final String SP_IDENTIFIER = "identifier";
2733 /**
2734   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
2735   * <p>
2736   * Description: <b>External identifiers for this item</b><br>
2737   * Type: <b>token</b><br>
2738   * Path: <b>HealthcareService.identifier</b><br>
2739   * </p>
2740   */
2741  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
2742
2743 /**
2744   * Search parameter: <b>endpoint</b>
2745   * <p>
2746   * Description: <b>Technical endpoints providing access to services operated for the location</b><br>
2747   * Type: <b>reference</b><br>
2748   * Path: <b>HealthcareService.endpoint</b><br>
2749   * </p>
2750   */
2751  @SearchParamDefinition(name="endpoint", path="HealthcareService.endpoint", description="Technical endpoints providing access to services operated for the location", type="reference", target={Endpoint.class } )
2752  public static final String SP_ENDPOINT = "endpoint";
2753 /**
2754   * <b>Fluent Client</b> search parameter constant for <b>endpoint</b>
2755   * <p>
2756   * Description: <b>Technical endpoints providing access to services operated for the location</b><br>
2757   * Type: <b>reference</b><br>
2758   * Path: <b>HealthcareService.endpoint</b><br>
2759   * </p>
2760   */
2761  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ENDPOINT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ENDPOINT);
2762
2763/**
2764   * Constant for fluent queries to be used to add include statements. Specifies
2765   * the path value of "<b>HealthcareService:endpoint</b>".
2766   */
2767  public static final ca.uhn.fhir.model.api.Include INCLUDE_ENDPOINT = new ca.uhn.fhir.model.api.Include("HealthcareService:endpoint").toLocked();
2768
2769 /**
2770   * Search parameter: <b>organization</b>
2771   * <p>
2772   * Description: <b>The organization that provides this Healthcare Service</b><br>
2773   * Type: <b>reference</b><br>
2774   * Path: <b>HealthcareService.providedBy</b><br>
2775   * </p>
2776   */
2777  @SearchParamDefinition(name="organization", path="HealthcareService.providedBy", description="The organization that provides this Healthcare Service", type="reference", target={Organization.class } )
2778  public static final String SP_ORGANIZATION = "organization";
2779 /**
2780   * <b>Fluent Client</b> search parameter constant for <b>organization</b>
2781   * <p>
2782   * Description: <b>The organization that provides this Healthcare Service</b><br>
2783   * Type: <b>reference</b><br>
2784   * Path: <b>HealthcareService.providedBy</b><br>
2785   * </p>
2786   */
2787  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ORGANIZATION = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ORGANIZATION);
2788
2789/**
2790   * Constant for fluent queries to be used to add include statements. Specifies
2791   * the path value of "<b>HealthcareService:organization</b>".
2792   */
2793  public static final ca.uhn.fhir.model.api.Include INCLUDE_ORGANIZATION = new ca.uhn.fhir.model.api.Include("HealthcareService:organization").toLocked();
2794
2795 /**
2796   * Search parameter: <b>name</b>
2797   * <p>
2798   * Description: <b>A portion of the Healthcare service name</b><br>
2799   * Type: <b>string</b><br>
2800   * Path: <b>HealthcareService.name</b><br>
2801   * </p>
2802   */
2803  @SearchParamDefinition(name="name", path="HealthcareService.name", description="A portion of the Healthcare service name", type="string" )
2804  public static final String SP_NAME = "name";
2805 /**
2806   * <b>Fluent Client</b> search parameter constant for <b>name</b>
2807   * <p>
2808   * Description: <b>A portion of the Healthcare service name</b><br>
2809   * Type: <b>string</b><br>
2810   * Path: <b>HealthcareService.name</b><br>
2811   * </p>
2812   */
2813  public static final ca.uhn.fhir.rest.gclient.StringClientParam NAME = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_NAME);
2814
2815 /**
2816   * Search parameter: <b>programname</b>
2817   * <p>
2818   * Description: <b>One of the Program Names serviced by this HealthcareService</b><br>
2819   * Type: <b>string</b><br>
2820   * Path: <b>HealthcareService.programName</b><br>
2821   * </p>
2822   */
2823  @SearchParamDefinition(name="programname", path="HealthcareService.programName", description="One of the Program Names serviced by this HealthcareService", type="string" )
2824  public static final String SP_PROGRAMNAME = "programname";
2825 /**
2826   * <b>Fluent Client</b> search parameter constant for <b>programname</b>
2827   * <p>
2828   * Description: <b>One of the Program Names serviced by this HealthcareService</b><br>
2829   * Type: <b>string</b><br>
2830   * Path: <b>HealthcareService.programName</b><br>
2831   * </p>
2832   */
2833  public static final ca.uhn.fhir.rest.gclient.StringClientParam PROGRAMNAME = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_PROGRAMNAME);
2834
2835 /**
2836   * Search parameter: <b>active</b>
2837   * <p>
2838   * Description: <b>The Healthcare Service is currently marked as active</b><br>
2839   * Type: <b>token</b><br>
2840   * Path: <b>HealthcareService.active</b><br>
2841   * </p>
2842   */
2843  @SearchParamDefinition(name="active", path="HealthcareService.active", description="The Healthcare Service is currently marked as active", type="token" )
2844  public static final String SP_ACTIVE = "active";
2845 /**
2846   * <b>Fluent Client</b> search parameter constant for <b>active</b>
2847   * <p>
2848   * Description: <b>The Healthcare Service is currently marked as active</b><br>
2849   * Type: <b>token</b><br>
2850   * Path: <b>HealthcareService.active</b><br>
2851   * </p>
2852   */
2853  public static final ca.uhn.fhir.rest.gclient.TokenClientParam ACTIVE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_ACTIVE);
2854
2855 /**
2856   * Search parameter: <b>location</b>
2857   * <p>
2858   * Description: <b>The location of the Healthcare Service</b><br>
2859   * Type: <b>reference</b><br>
2860   * Path: <b>HealthcareService.location</b><br>
2861   * </p>
2862   */
2863  @SearchParamDefinition(name="location", path="HealthcareService.location", description="The location of the Healthcare Service", type="reference", target={Location.class } )
2864  public static final String SP_LOCATION = "location";
2865 /**
2866   * <b>Fluent Client</b> search parameter constant for <b>location</b>
2867   * <p>
2868   * Description: <b>The location of the Healthcare Service</b><br>
2869   * Type: <b>reference</b><br>
2870   * Path: <b>HealthcareService.location</b><br>
2871   * </p>
2872   */
2873  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam LOCATION = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_LOCATION);
2874
2875/**
2876   * Constant for fluent queries to be used to add include statements. Specifies
2877   * the path value of "<b>HealthcareService:location</b>".
2878   */
2879  public static final ca.uhn.fhir.model.api.Include INCLUDE_LOCATION = new ca.uhn.fhir.model.api.Include("HealthcareService:location").toLocked();
2880
2881 /**
2882   * Search parameter: <b>category</b>
2883   * <p>
2884   * Description: <b>Service Category of the Healthcare Service</b><br>
2885   * Type: <b>token</b><br>
2886   * Path: <b>HealthcareService.category</b><br>
2887   * </p>
2888   */
2889  @SearchParamDefinition(name="category", path="HealthcareService.category", description="Service Category of the Healthcare Service", type="token" )
2890  public static final String SP_CATEGORY = "category";
2891 /**
2892   * <b>Fluent Client</b> search parameter constant for <b>category</b>
2893   * <p>
2894   * Description: <b>Service Category of the Healthcare Service</b><br>
2895   * Type: <b>token</b><br>
2896   * Path: <b>HealthcareService.category</b><br>
2897   * </p>
2898   */
2899  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CATEGORY = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CATEGORY);
2900
2901 /**
2902   * Search parameter: <b>type</b>
2903   * <p>
2904   * Description: <b>The type of service provided by this healthcare service</b><br>
2905   * Type: <b>token</b><br>
2906   * Path: <b>HealthcareService.type</b><br>
2907   * </p>
2908   */
2909  @SearchParamDefinition(name="type", path="HealthcareService.type", description="The type of service provided by this healthcare service", type="token" )
2910  public static final String SP_TYPE = "type";
2911 /**
2912   * <b>Fluent Client</b> search parameter constant for <b>type</b>
2913   * <p>
2914   * Description: <b>The type of service provided by this healthcare service</b><br>
2915   * Type: <b>token</b><br>
2916   * Path: <b>HealthcareService.type</b><br>
2917   * </p>
2918   */
2919  public static final ca.uhn.fhir.rest.gclient.TokenClientParam TYPE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_TYPE);
2920
2921 /**
2922   * Search parameter: <b>characteristic</b>
2923   * <p>
2924   * Description: <b>One of the HealthcareService's characteristics</b><br>
2925   * Type: <b>token</b><br>
2926   * Path: <b>HealthcareService.characteristic</b><br>
2927   * </p>
2928   */
2929  @SearchParamDefinition(name="characteristic", path="HealthcareService.characteristic", description="One of the HealthcareService's characteristics", type="token" )
2930  public static final String SP_CHARACTERISTIC = "characteristic";
2931 /**
2932   * <b>Fluent Client</b> search parameter constant for <b>characteristic</b>
2933   * <p>
2934   * Description: <b>One of the HealthcareService's characteristics</b><br>
2935   * Type: <b>token</b><br>
2936   * Path: <b>HealthcareService.characteristic</b><br>
2937   * </p>
2938   */
2939  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CHARACTERISTIC = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CHARACTERISTIC);
2940
2941
2942}
2943