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