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