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