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