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