001package org.hl7.fhir.dstu3.model;
002
003
004
005/*
006  Copyright (c) 2011+, HL7, Inc.
007  All rights reserved.
008  
009  Redistribution and use in source and binary forms, with or without modification, 
010  are permitted provided that the following conditions are met:
011  
012   * Redistributions of source code must retain the above copyright notice, this 
013     list of conditions and the following disclaimer.
014   * Redistributions in binary form must reproduce the above copyright notice, 
015     this list of conditions and the following disclaimer in the documentation 
016     and/or other materials provided with the distribution.
017   * Neither the name of HL7 nor the names of its contributors may be used to 
018     endorse or promote products derived from this software without specific 
019     prior written permission.
020  
021  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
022  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
023  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
024  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
025  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
026  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
027  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
028  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
029  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
030  POSSIBILITY OF SUCH DAMAGE.
031  
032*/
033
034// Generated on Fri, Mar 16, 2018 15:21+1100 for FHIR v3.0.x
035import java.util.ArrayList;
036import java.util.Date;
037import java.util.List;
038
039import org.hl7.fhir.exceptions.FHIRException;
040import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
041import org.hl7.fhir.utilities.Utilities;
042
043import ca.uhn.fhir.model.api.annotation.Block;
044import ca.uhn.fhir.model.api.annotation.Child;
045import ca.uhn.fhir.model.api.annotation.Description;
046import ca.uhn.fhir.model.api.annotation.ResourceDef;
047import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
048/**
049 * Representation of the content produced in a DICOM imaging study. A study comprises a set of series, each of which includes a set of Service-Object Pair Instances (SOP Instances - images or other data) acquired or produced in a common context.  A series is of only one modality (e.g. X-ray, CT, MR, ultrasound), but a study may have multiple series of different modalities.
050 */
051@ResourceDef(name="ImagingStudy", profile="http://hl7.org/fhir/Profile/ImagingStudy")
052public class ImagingStudy extends DomainResource {
053
054    public enum InstanceAvailability {
055        /**
056         * null
057         */
058        ONLINE, 
059        /**
060         * null
061         */
062        OFFLINE, 
063        /**
064         * null
065         */
066        NEARLINE, 
067        /**
068         * null
069         */
070        UNAVAILABLE, 
071        /**
072         * added to help the parsers with the generic types
073         */
074        NULL;
075        public static InstanceAvailability fromCode(String codeString) throws FHIRException {
076            if (codeString == null || "".equals(codeString))
077                return null;
078        if ("ONLINE".equals(codeString))
079          return ONLINE;
080        if ("OFFLINE".equals(codeString))
081          return OFFLINE;
082        if ("NEARLINE".equals(codeString))
083          return NEARLINE;
084        if ("UNAVAILABLE".equals(codeString))
085          return UNAVAILABLE;
086        if (Configuration.isAcceptInvalidEnums())
087          return null;
088        else
089          throw new FHIRException("Unknown InstanceAvailability code '"+codeString+"'");
090        }
091        public String toCode() {
092          switch (this) {
093            case ONLINE: return "ONLINE";
094            case OFFLINE: return "OFFLINE";
095            case NEARLINE: return "NEARLINE";
096            case UNAVAILABLE: return "UNAVAILABLE";
097            case NULL: return null;
098            default: return "?";
099          }
100        }
101        public String getSystem() {
102          switch (this) {
103            case ONLINE: return "http://dicom.nema.org/resources/ontology/DCM";
104            case OFFLINE: return "http://dicom.nema.org/resources/ontology/DCM";
105            case NEARLINE: return "http://dicom.nema.org/resources/ontology/DCM";
106            case UNAVAILABLE: return "http://dicom.nema.org/resources/ontology/DCM";
107            case NULL: return null;
108            default: return "?";
109          }
110        }
111        public String getDefinition() {
112          switch (this) {
113            case ONLINE: return "";
114            case OFFLINE: return "";
115            case NEARLINE: return "";
116            case UNAVAILABLE: return "";
117            case NULL: return null;
118            default: return "?";
119          }
120        }
121        public String getDisplay() {
122          switch (this) {
123            case ONLINE: return "ONLINE";
124            case OFFLINE: return "OFFLINE";
125            case NEARLINE: return "NEARLINE";
126            case UNAVAILABLE: return "UNAVAILABLE";
127            case NULL: return null;
128            default: return "?";
129          }
130        }
131    }
132
133  public static class InstanceAvailabilityEnumFactory implements EnumFactory<InstanceAvailability> {
134    public InstanceAvailability fromCode(String codeString) throws IllegalArgumentException {
135      if (codeString == null || "".equals(codeString))
136            if (codeString == null || "".equals(codeString))
137                return null;
138        if ("ONLINE".equals(codeString))
139          return InstanceAvailability.ONLINE;
140        if ("OFFLINE".equals(codeString))
141          return InstanceAvailability.OFFLINE;
142        if ("NEARLINE".equals(codeString))
143          return InstanceAvailability.NEARLINE;
144        if ("UNAVAILABLE".equals(codeString))
145          return InstanceAvailability.UNAVAILABLE;
146        throw new IllegalArgumentException("Unknown InstanceAvailability code '"+codeString+"'");
147        }
148        public Enumeration<InstanceAvailability> fromType(PrimitiveType<?> code) throws FHIRException {
149          if (code == null)
150            return null;
151          if (code.isEmpty())
152            return new Enumeration<InstanceAvailability>(this);
153          String codeString = code.asStringValue();
154          if (codeString == null || "".equals(codeString))
155            return null;
156        if ("ONLINE".equals(codeString))
157          return new Enumeration<InstanceAvailability>(this, InstanceAvailability.ONLINE);
158        if ("OFFLINE".equals(codeString))
159          return new Enumeration<InstanceAvailability>(this, InstanceAvailability.OFFLINE);
160        if ("NEARLINE".equals(codeString))
161          return new Enumeration<InstanceAvailability>(this, InstanceAvailability.NEARLINE);
162        if ("UNAVAILABLE".equals(codeString))
163          return new Enumeration<InstanceAvailability>(this, InstanceAvailability.UNAVAILABLE);
164        throw new FHIRException("Unknown InstanceAvailability code '"+codeString+"'");
165        }
166    public String toCode(InstanceAvailability code) {
167      if (code == InstanceAvailability.ONLINE)
168        return "ONLINE";
169      if (code == InstanceAvailability.OFFLINE)
170        return "OFFLINE";
171      if (code == InstanceAvailability.NEARLINE)
172        return "NEARLINE";
173      if (code == InstanceAvailability.UNAVAILABLE)
174        return "UNAVAILABLE";
175      return "?";
176      }
177    public String toSystem(InstanceAvailability code) {
178      return code.getSystem();
179      }
180    }
181
182    @Block()
183    public static class ImagingStudySeriesComponent extends BackboneElement implements IBaseBackboneElement {
184        /**
185         * Formal identifier for this series.
186         */
187        @Child(name = "uid", type = {OidType.class}, order=1, min=1, max=1, modifier=false, summary=true)
188        @Description(shortDefinition="Formal DICOM identifier for this series", formalDefinition="Formal identifier for this series." )
189        protected OidType uid;
190
191        /**
192         * The numeric identifier of this series in the study.
193         */
194        @Child(name = "number", type = {UnsignedIntType.class}, order=2, min=0, max=1, modifier=false, summary=true)
195        @Description(shortDefinition="Numeric identifier of this series", formalDefinition="The numeric identifier of this series in the study." )
196        protected UnsignedIntType number;
197
198        /**
199         * The modality of this series sequence.
200         */
201        @Child(name = "modality", type = {Coding.class}, order=3, min=1, max=1, modifier=false, summary=true)
202        @Description(shortDefinition="The modality of the instances in the series", formalDefinition="The modality of this series sequence." )
203        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/dicom-cid29")
204        protected Coding modality;
205
206        /**
207         * A description of the series.
208         */
209        @Child(name = "description", type = {StringType.class}, order=4, min=0, max=1, modifier=false, summary=true)
210        @Description(shortDefinition="A short human readable summary of the series", formalDefinition="A description of the series." )
211        protected StringType description;
212
213        /**
214         * Number of SOP Instances in the Study. The value given may be larger than the number of instance elements this resource contains due to resource availability, security, or other factors. This element should be present if any instance elements are present.
215         */
216        @Child(name = "numberOfInstances", type = {UnsignedIntType.class}, order=5, min=0, max=1, modifier=false, summary=true)
217        @Description(shortDefinition="Number of Series Related Instances", formalDefinition="Number of SOP Instances in the Study. The value given may be larger than the number of instance elements this resource contains due to resource availability, security, or other factors. This element should be present if any instance elements are present." )
218        protected UnsignedIntType numberOfInstances;
219
220        /**
221         * Availability of series (online, offline or nearline).
222         */
223        @Child(name = "availability", type = {CodeType.class}, order=6, min=0, max=1, modifier=false, summary=true)
224        @Description(shortDefinition="ONLINE | OFFLINE | NEARLINE | UNAVAILABLE", formalDefinition="Availability of series (online, offline or nearline)." )
225        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/instance-availability")
226        protected Enumeration<InstanceAvailability> availability;
227
228        /**
229         * The network service providing access (e.g., query, view, or retrieval) for this series. See implementation notes for information about using DICOM endpoints. A series-level endpoint, if present, has precedence over a study-level endpoint with the same Endpoint.type.
230         */
231        @Child(name = "endpoint", type = {Endpoint.class}, order=7, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
232        @Description(shortDefinition="Series access endpoint", formalDefinition="The network service providing access (e.g., query, view, or retrieval) for this series. See implementation notes for information about using DICOM endpoints. A series-level endpoint, if present, has precedence over a study-level endpoint with the same Endpoint.type." )
233        protected List<Reference> endpoint;
234        /**
235         * The actual objects that are the target of the reference (The network service providing access (e.g., query, view, or retrieval) for this series. See implementation notes for information about using DICOM endpoints. A series-level endpoint, if present, has precedence over a study-level endpoint with the same Endpoint.type.)
236         */
237        protected List<Endpoint> endpointTarget;
238
239
240        /**
241         * The anatomic structures examined. See DICOM Part 16 Annex L (http://dicom.nema.org/medical/dicom/current/output/chtml/part16/chapter_L.html) for DICOM to SNOMED-CT mappings. The bodySite may indicate the laterality of body part imaged; if so, it shall be consistent with any content of ImagingStudy.series.laterality.
242         */
243        @Child(name = "bodySite", type = {Coding.class}, order=8, min=0, max=1, modifier=false, summary=true)
244        @Description(shortDefinition="Body part examined", formalDefinition="The anatomic structures examined. See DICOM Part 16 Annex L (http://dicom.nema.org/medical/dicom/current/output/chtml/part16/chapter_L.html) for DICOM to SNOMED-CT mappings. The bodySite may indicate the laterality of body part imaged; if so, it shall be consistent with any content of ImagingStudy.series.laterality." )
245        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/body-site")
246        protected Coding bodySite;
247
248        /**
249         * The laterality of the (possibly paired) anatomic structures examined. E.g., the left knee, both lungs, or unpaired abdomen. If present, shall be consistent with any laterality information indicated in ImagingStudy.series.bodySite.
250         */
251        @Child(name = "laterality", type = {Coding.class}, order=9, min=0, max=1, modifier=false, summary=true)
252        @Description(shortDefinition="Body part laterality", formalDefinition="The laterality of the (possibly paired) anatomic structures examined. E.g., the left knee, both lungs, or unpaired abdomen. If present, shall be consistent with any laterality information indicated in ImagingStudy.series.bodySite." )
253        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/bodysite-laterality")
254        protected Coding laterality;
255
256        /**
257         * The date and time the series was started.
258         */
259        @Child(name = "started", type = {DateTimeType.class}, order=10, min=0, max=1, modifier=false, summary=true)
260        @Description(shortDefinition="When the series started", formalDefinition="The date and time the series was started." )
261        protected DateTimeType started;
262
263        /**
264         * The physician or operator (often the radiology technician)  who performed the series. The performer is recorded at the series level, since each series in a study may be performed by a different practitioner, at different times, and using different devices. A series may be performed by multiple practitioners.
265         */
266        @Child(name = "performer", type = {Practitioner.class}, order=11, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
267        @Description(shortDefinition="Who performed the series", formalDefinition="The physician or operator (often the radiology technician)  who performed the series. The performer is recorded at the series level, since each series in a study may be performed by a different practitioner, at different times, and using different devices. A series may be performed by multiple practitioners." )
268        protected List<Reference> performer;
269        /**
270         * The actual objects that are the target of the reference (The physician or operator (often the radiology technician)  who performed the series. The performer is recorded at the series level, since each series in a study may be performed by a different practitioner, at different times, and using different devices. A series may be performed by multiple practitioners.)
271         */
272        protected List<Practitioner> performerTarget;
273
274
275        /**
276         * A single SOP instance within the series, e.g. an image, or presentation state.
277         */
278        @Child(name = "instance", type = {}, order=12, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
279        @Description(shortDefinition="A single SOP instance from the series", formalDefinition="A single SOP instance within the series, e.g. an image, or presentation state." )
280        protected List<ImagingStudySeriesInstanceComponent> instance;
281
282        private static final long serialVersionUID = -1469376087L;
283
284    /**
285     * Constructor
286     */
287      public ImagingStudySeriesComponent() {
288        super();
289      }
290
291    /**
292     * Constructor
293     */
294      public ImagingStudySeriesComponent(OidType uid, Coding modality) {
295        super();
296        this.uid = uid;
297        this.modality = modality;
298      }
299
300        /**
301         * @return {@link #uid} (Formal identifier for this series.). This is the underlying object with id, value and extensions. The accessor "getUid" gives direct access to the value
302         */
303        public OidType getUidElement() { 
304          if (this.uid == null)
305            if (Configuration.errorOnAutoCreate())
306              throw new Error("Attempt to auto-create ImagingStudySeriesComponent.uid");
307            else if (Configuration.doAutoCreate())
308              this.uid = new OidType(); // bb
309          return this.uid;
310        }
311
312        public boolean hasUidElement() { 
313          return this.uid != null && !this.uid.isEmpty();
314        }
315
316        public boolean hasUid() { 
317          return this.uid != null && !this.uid.isEmpty();
318        }
319
320        /**
321         * @param value {@link #uid} (Formal identifier for this series.). This is the underlying object with id, value and extensions. The accessor "getUid" gives direct access to the value
322         */
323        public ImagingStudySeriesComponent setUidElement(OidType value) { 
324          this.uid = value;
325          return this;
326        }
327
328        /**
329         * @return Formal identifier for this series.
330         */
331        public String getUid() { 
332          return this.uid == null ? null : this.uid.getValue();
333        }
334
335        /**
336         * @param value Formal identifier for this series.
337         */
338        public ImagingStudySeriesComponent setUid(String value) { 
339            if (this.uid == null)
340              this.uid = new OidType();
341            this.uid.setValue(value);
342          return this;
343        }
344
345        /**
346         * @return {@link #number} (The numeric identifier of this series in the study.). This is the underlying object with id, value and extensions. The accessor "getNumber" gives direct access to the value
347         */
348        public UnsignedIntType getNumberElement() { 
349          if (this.number == null)
350            if (Configuration.errorOnAutoCreate())
351              throw new Error("Attempt to auto-create ImagingStudySeriesComponent.number");
352            else if (Configuration.doAutoCreate())
353              this.number = new UnsignedIntType(); // bb
354          return this.number;
355        }
356
357        public boolean hasNumberElement() { 
358          return this.number != null && !this.number.isEmpty();
359        }
360
361        public boolean hasNumber() { 
362          return this.number != null && !this.number.isEmpty();
363        }
364
365        /**
366         * @param value {@link #number} (The numeric identifier of this series in the study.). This is the underlying object with id, value and extensions. The accessor "getNumber" gives direct access to the value
367         */
368        public ImagingStudySeriesComponent setNumberElement(UnsignedIntType value) { 
369          this.number = value;
370          return this;
371        }
372
373        /**
374         * @return The numeric identifier of this series in the study.
375         */
376        public int getNumber() { 
377          return this.number == null || this.number.isEmpty() ? 0 : this.number.getValue();
378        }
379
380        /**
381         * @param value The numeric identifier of this series in the study.
382         */
383        public ImagingStudySeriesComponent setNumber(int value) { 
384            if (this.number == null)
385              this.number = new UnsignedIntType();
386            this.number.setValue(value);
387          return this;
388        }
389
390        /**
391         * @return {@link #modality} (The modality of this series sequence.)
392         */
393        public Coding getModality() { 
394          if (this.modality == null)
395            if (Configuration.errorOnAutoCreate())
396              throw new Error("Attempt to auto-create ImagingStudySeriesComponent.modality");
397            else if (Configuration.doAutoCreate())
398              this.modality = new Coding(); // cc
399          return this.modality;
400        }
401
402        public boolean hasModality() { 
403          return this.modality != null && !this.modality.isEmpty();
404        }
405
406        /**
407         * @param value {@link #modality} (The modality of this series sequence.)
408         */
409        public ImagingStudySeriesComponent setModality(Coding value)  { 
410          this.modality = value;
411          return this;
412        }
413
414        /**
415         * @return {@link #description} (A description of the series.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
416         */
417        public StringType getDescriptionElement() { 
418          if (this.description == null)
419            if (Configuration.errorOnAutoCreate())
420              throw new Error("Attempt to auto-create ImagingStudySeriesComponent.description");
421            else if (Configuration.doAutoCreate())
422              this.description = new StringType(); // bb
423          return this.description;
424        }
425
426        public boolean hasDescriptionElement() { 
427          return this.description != null && !this.description.isEmpty();
428        }
429
430        public boolean hasDescription() { 
431          return this.description != null && !this.description.isEmpty();
432        }
433
434        /**
435         * @param value {@link #description} (A description of the series.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
436         */
437        public ImagingStudySeriesComponent setDescriptionElement(StringType value) { 
438          this.description = value;
439          return this;
440        }
441
442        /**
443         * @return A description of the series.
444         */
445        public String getDescription() { 
446          return this.description == null ? null : this.description.getValue();
447        }
448
449        /**
450         * @param value A description of the series.
451         */
452        public ImagingStudySeriesComponent setDescription(String value) { 
453          if (Utilities.noString(value))
454            this.description = null;
455          else {
456            if (this.description == null)
457              this.description = new StringType();
458            this.description.setValue(value);
459          }
460          return this;
461        }
462
463        /**
464         * @return {@link #numberOfInstances} (Number of SOP Instances in the Study. The value given may be larger than the number of instance elements this resource contains due to resource availability, security, or other factors. This element should be present if any instance elements are present.). This is the underlying object with id, value and extensions. The accessor "getNumberOfInstances" gives direct access to the value
465         */
466        public UnsignedIntType getNumberOfInstancesElement() { 
467          if (this.numberOfInstances == null)
468            if (Configuration.errorOnAutoCreate())
469              throw new Error("Attempt to auto-create ImagingStudySeriesComponent.numberOfInstances");
470            else if (Configuration.doAutoCreate())
471              this.numberOfInstances = new UnsignedIntType(); // bb
472          return this.numberOfInstances;
473        }
474
475        public boolean hasNumberOfInstancesElement() { 
476          return this.numberOfInstances != null && !this.numberOfInstances.isEmpty();
477        }
478
479        public boolean hasNumberOfInstances() { 
480          return this.numberOfInstances != null && !this.numberOfInstances.isEmpty();
481        }
482
483        /**
484         * @param value {@link #numberOfInstances} (Number of SOP Instances in the Study. The value given may be larger than the number of instance elements this resource contains due to resource availability, security, or other factors. This element should be present if any instance elements are present.). This is the underlying object with id, value and extensions. The accessor "getNumberOfInstances" gives direct access to the value
485         */
486        public ImagingStudySeriesComponent setNumberOfInstancesElement(UnsignedIntType value) { 
487          this.numberOfInstances = value;
488          return this;
489        }
490
491        /**
492         * @return Number of SOP Instances in the Study. The value given may be larger than the number of instance elements this resource contains due to resource availability, security, or other factors. This element should be present if any instance elements are present.
493         */
494        public int getNumberOfInstances() { 
495          return this.numberOfInstances == null || this.numberOfInstances.isEmpty() ? 0 : this.numberOfInstances.getValue();
496        }
497
498        /**
499         * @param value Number of SOP Instances in the Study. The value given may be larger than the number of instance elements this resource contains due to resource availability, security, or other factors. This element should be present if any instance elements are present.
500         */
501        public ImagingStudySeriesComponent setNumberOfInstances(int value) { 
502            if (this.numberOfInstances == null)
503              this.numberOfInstances = new UnsignedIntType();
504            this.numberOfInstances.setValue(value);
505          return this;
506        }
507
508        /**
509         * @return {@link #availability} (Availability of series (online, offline or nearline).). This is the underlying object with id, value and extensions. The accessor "getAvailability" gives direct access to the value
510         */
511        public Enumeration<InstanceAvailability> getAvailabilityElement() { 
512          if (this.availability == null)
513            if (Configuration.errorOnAutoCreate())
514              throw new Error("Attempt to auto-create ImagingStudySeriesComponent.availability");
515            else if (Configuration.doAutoCreate())
516              this.availability = new Enumeration<InstanceAvailability>(new InstanceAvailabilityEnumFactory()); // bb
517          return this.availability;
518        }
519
520        public boolean hasAvailabilityElement() { 
521          return this.availability != null && !this.availability.isEmpty();
522        }
523
524        public boolean hasAvailability() { 
525          return this.availability != null && !this.availability.isEmpty();
526        }
527
528        /**
529         * @param value {@link #availability} (Availability of series (online, offline or nearline).). This is the underlying object with id, value and extensions. The accessor "getAvailability" gives direct access to the value
530         */
531        public ImagingStudySeriesComponent setAvailabilityElement(Enumeration<InstanceAvailability> value) { 
532          this.availability = value;
533          return this;
534        }
535
536        /**
537         * @return Availability of series (online, offline or nearline).
538         */
539        public InstanceAvailability getAvailability() { 
540          return this.availability == null ? null : this.availability.getValue();
541        }
542
543        /**
544         * @param value Availability of series (online, offline or nearline).
545         */
546        public ImagingStudySeriesComponent setAvailability(InstanceAvailability value) { 
547          if (value == null)
548            this.availability = null;
549          else {
550            if (this.availability == null)
551              this.availability = new Enumeration<InstanceAvailability>(new InstanceAvailabilityEnumFactory());
552            this.availability.setValue(value);
553          }
554          return this;
555        }
556
557        /**
558         * @return {@link #endpoint} (The network service providing access (e.g., query, view, or retrieval) for this series. See implementation notes for information about using DICOM endpoints. A series-level endpoint, if present, has precedence over a study-level endpoint with the same Endpoint.type.)
559         */
560        public List<Reference> getEndpoint() { 
561          if (this.endpoint == null)
562            this.endpoint = new ArrayList<Reference>();
563          return this.endpoint;
564        }
565
566        /**
567         * @return Returns a reference to <code>this</code> for easy method chaining
568         */
569        public ImagingStudySeriesComponent setEndpoint(List<Reference> theEndpoint) { 
570          this.endpoint = theEndpoint;
571          return this;
572        }
573
574        public boolean hasEndpoint() { 
575          if (this.endpoint == null)
576            return false;
577          for (Reference item : this.endpoint)
578            if (!item.isEmpty())
579              return true;
580          return false;
581        }
582
583        public Reference addEndpoint() { //3
584          Reference t = new Reference();
585          if (this.endpoint == null)
586            this.endpoint = new ArrayList<Reference>();
587          this.endpoint.add(t);
588          return t;
589        }
590
591        public ImagingStudySeriesComponent addEndpoint(Reference t) { //3
592          if (t == null)
593            return this;
594          if (this.endpoint == null)
595            this.endpoint = new ArrayList<Reference>();
596          this.endpoint.add(t);
597          return this;
598        }
599
600        /**
601         * @return The first repetition of repeating field {@link #endpoint}, creating it if it does not already exist
602         */
603        public Reference getEndpointFirstRep() { 
604          if (getEndpoint().isEmpty()) {
605            addEndpoint();
606          }
607          return getEndpoint().get(0);
608        }
609
610        /**
611         * @deprecated Use Reference#setResource(IBaseResource) instead
612         */
613        @Deprecated
614        public List<Endpoint> getEndpointTarget() { 
615          if (this.endpointTarget == null)
616            this.endpointTarget = new ArrayList<Endpoint>();
617          return this.endpointTarget;
618        }
619
620        /**
621         * @deprecated Use Reference#setResource(IBaseResource) instead
622         */
623        @Deprecated
624        public Endpoint addEndpointTarget() { 
625          Endpoint r = new Endpoint();
626          if (this.endpointTarget == null)
627            this.endpointTarget = new ArrayList<Endpoint>();
628          this.endpointTarget.add(r);
629          return r;
630        }
631
632        /**
633         * @return {@link #bodySite} (The anatomic structures examined. See DICOM Part 16 Annex L (http://dicom.nema.org/medical/dicom/current/output/chtml/part16/chapter_L.html) for DICOM to SNOMED-CT mappings. The bodySite may indicate the laterality of body part imaged; if so, it shall be consistent with any content of ImagingStudy.series.laterality.)
634         */
635        public Coding getBodySite() { 
636          if (this.bodySite == null)
637            if (Configuration.errorOnAutoCreate())
638              throw new Error("Attempt to auto-create ImagingStudySeriesComponent.bodySite");
639            else if (Configuration.doAutoCreate())
640              this.bodySite = new Coding(); // cc
641          return this.bodySite;
642        }
643
644        public boolean hasBodySite() { 
645          return this.bodySite != null && !this.bodySite.isEmpty();
646        }
647
648        /**
649         * @param value {@link #bodySite} (The anatomic structures examined. See DICOM Part 16 Annex L (http://dicom.nema.org/medical/dicom/current/output/chtml/part16/chapter_L.html) for DICOM to SNOMED-CT mappings. The bodySite may indicate the laterality of body part imaged; if so, it shall be consistent with any content of ImagingStudy.series.laterality.)
650         */
651        public ImagingStudySeriesComponent setBodySite(Coding value)  { 
652          this.bodySite = value;
653          return this;
654        }
655
656        /**
657         * @return {@link #laterality} (The laterality of the (possibly paired) anatomic structures examined. E.g., the left knee, both lungs, or unpaired abdomen. If present, shall be consistent with any laterality information indicated in ImagingStudy.series.bodySite.)
658         */
659        public Coding getLaterality() { 
660          if (this.laterality == null)
661            if (Configuration.errorOnAutoCreate())
662              throw new Error("Attempt to auto-create ImagingStudySeriesComponent.laterality");
663            else if (Configuration.doAutoCreate())
664              this.laterality = new Coding(); // cc
665          return this.laterality;
666        }
667
668        public boolean hasLaterality() { 
669          return this.laterality != null && !this.laterality.isEmpty();
670        }
671
672        /**
673         * @param value {@link #laterality} (The laterality of the (possibly paired) anatomic structures examined. E.g., the left knee, both lungs, or unpaired abdomen. If present, shall be consistent with any laterality information indicated in ImagingStudy.series.bodySite.)
674         */
675        public ImagingStudySeriesComponent setLaterality(Coding value)  { 
676          this.laterality = value;
677          return this;
678        }
679
680        /**
681         * @return {@link #started} (The date and time the series was started.). This is the underlying object with id, value and extensions. The accessor "getStarted" gives direct access to the value
682         */
683        public DateTimeType getStartedElement() { 
684          if (this.started == null)
685            if (Configuration.errorOnAutoCreate())
686              throw new Error("Attempt to auto-create ImagingStudySeriesComponent.started");
687            else if (Configuration.doAutoCreate())
688              this.started = new DateTimeType(); // bb
689          return this.started;
690        }
691
692        public boolean hasStartedElement() { 
693          return this.started != null && !this.started.isEmpty();
694        }
695
696        public boolean hasStarted() { 
697          return this.started != null && !this.started.isEmpty();
698        }
699
700        /**
701         * @param value {@link #started} (The date and time the series was started.). This is the underlying object with id, value and extensions. The accessor "getStarted" gives direct access to the value
702         */
703        public ImagingStudySeriesComponent setStartedElement(DateTimeType value) { 
704          this.started = value;
705          return this;
706        }
707
708        /**
709         * @return The date and time the series was started.
710         */
711        public Date getStarted() { 
712          return this.started == null ? null : this.started.getValue();
713        }
714
715        /**
716         * @param value The date and time the series was started.
717         */
718        public ImagingStudySeriesComponent setStarted(Date value) { 
719          if (value == null)
720            this.started = null;
721          else {
722            if (this.started == null)
723              this.started = new DateTimeType();
724            this.started.setValue(value);
725          }
726          return this;
727        }
728
729        /**
730         * @return {@link #performer} (The physician or operator (often the radiology technician)  who performed the series. The performer is recorded at the series level, since each series in a study may be performed by a different practitioner, at different times, and using different devices. A series may be performed by multiple practitioners.)
731         */
732        public List<Reference> getPerformer() { 
733          if (this.performer == null)
734            this.performer = new ArrayList<Reference>();
735          return this.performer;
736        }
737
738        /**
739         * @return Returns a reference to <code>this</code> for easy method chaining
740         */
741        public ImagingStudySeriesComponent setPerformer(List<Reference> thePerformer) { 
742          this.performer = thePerformer;
743          return this;
744        }
745
746        public boolean hasPerformer() { 
747          if (this.performer == null)
748            return false;
749          for (Reference item : this.performer)
750            if (!item.isEmpty())
751              return true;
752          return false;
753        }
754
755        public Reference addPerformer() { //3
756          Reference t = new Reference();
757          if (this.performer == null)
758            this.performer = new ArrayList<Reference>();
759          this.performer.add(t);
760          return t;
761        }
762
763        public ImagingStudySeriesComponent addPerformer(Reference t) { //3
764          if (t == null)
765            return this;
766          if (this.performer == null)
767            this.performer = new ArrayList<Reference>();
768          this.performer.add(t);
769          return this;
770        }
771
772        /**
773         * @return The first repetition of repeating field {@link #performer}, creating it if it does not already exist
774         */
775        public Reference getPerformerFirstRep() { 
776          if (getPerformer().isEmpty()) {
777            addPerformer();
778          }
779          return getPerformer().get(0);
780        }
781
782        /**
783         * @deprecated Use Reference#setResource(IBaseResource) instead
784         */
785        @Deprecated
786        public List<Practitioner> getPerformerTarget() { 
787          if (this.performerTarget == null)
788            this.performerTarget = new ArrayList<Practitioner>();
789          return this.performerTarget;
790        }
791
792        /**
793         * @deprecated Use Reference#setResource(IBaseResource) instead
794         */
795        @Deprecated
796        public Practitioner addPerformerTarget() { 
797          Practitioner r = new Practitioner();
798          if (this.performerTarget == null)
799            this.performerTarget = new ArrayList<Practitioner>();
800          this.performerTarget.add(r);
801          return r;
802        }
803
804        /**
805         * @return {@link #instance} (A single SOP instance within the series, e.g. an image, or presentation state.)
806         */
807        public List<ImagingStudySeriesInstanceComponent> getInstance() { 
808          if (this.instance == null)
809            this.instance = new ArrayList<ImagingStudySeriesInstanceComponent>();
810          return this.instance;
811        }
812
813        /**
814         * @return Returns a reference to <code>this</code> for easy method chaining
815         */
816        public ImagingStudySeriesComponent setInstance(List<ImagingStudySeriesInstanceComponent> theInstance) { 
817          this.instance = theInstance;
818          return this;
819        }
820
821        public boolean hasInstance() { 
822          if (this.instance == null)
823            return false;
824          for (ImagingStudySeriesInstanceComponent item : this.instance)
825            if (!item.isEmpty())
826              return true;
827          return false;
828        }
829
830        public ImagingStudySeriesInstanceComponent addInstance() { //3
831          ImagingStudySeriesInstanceComponent t = new ImagingStudySeriesInstanceComponent();
832          if (this.instance == null)
833            this.instance = new ArrayList<ImagingStudySeriesInstanceComponent>();
834          this.instance.add(t);
835          return t;
836        }
837
838        public ImagingStudySeriesComponent addInstance(ImagingStudySeriesInstanceComponent t) { //3
839          if (t == null)
840            return this;
841          if (this.instance == null)
842            this.instance = new ArrayList<ImagingStudySeriesInstanceComponent>();
843          this.instance.add(t);
844          return this;
845        }
846
847        /**
848         * @return The first repetition of repeating field {@link #instance}, creating it if it does not already exist
849         */
850        public ImagingStudySeriesInstanceComponent getInstanceFirstRep() { 
851          if (getInstance().isEmpty()) {
852            addInstance();
853          }
854          return getInstance().get(0);
855        }
856
857        protected void listChildren(List<Property> children) {
858          super.listChildren(children);
859          children.add(new Property("uid", "oid", "Formal identifier for this series.", 0, 1, uid));
860          children.add(new Property("number", "unsignedInt", "The numeric identifier of this series in the study.", 0, 1, number));
861          children.add(new Property("modality", "Coding", "The modality of this series sequence.", 0, 1, modality));
862          children.add(new Property("description", "string", "A description of the series.", 0, 1, description));
863          children.add(new Property("numberOfInstances", "unsignedInt", "Number of SOP Instances in the Study. The value given may be larger than the number of instance elements this resource contains due to resource availability, security, or other factors. This element should be present if any instance elements are present.", 0, 1, numberOfInstances));
864          children.add(new Property("availability", "code", "Availability of series (online, offline or nearline).", 0, 1, availability));
865          children.add(new Property("endpoint", "Reference(Endpoint)", "The network service providing access (e.g., query, view, or retrieval) for this series. See implementation notes for information about using DICOM endpoints. A series-level endpoint, if present, has precedence over a study-level endpoint with the same Endpoint.type.", 0, java.lang.Integer.MAX_VALUE, endpoint));
866          children.add(new Property("bodySite", "Coding", "The anatomic structures examined. See DICOM Part 16 Annex L (http://dicom.nema.org/medical/dicom/current/output/chtml/part16/chapter_L.html) for DICOM to SNOMED-CT mappings. The bodySite may indicate the laterality of body part imaged; if so, it shall be consistent with any content of ImagingStudy.series.laterality.", 0, 1, bodySite));
867          children.add(new Property("laterality", "Coding", "The laterality of the (possibly paired) anatomic structures examined. E.g., the left knee, both lungs, or unpaired abdomen. If present, shall be consistent with any laterality information indicated in ImagingStudy.series.bodySite.", 0, 1, laterality));
868          children.add(new Property("started", "dateTime", "The date and time the series was started.", 0, 1, started));
869          children.add(new Property("performer", "Reference(Practitioner)", "The physician or operator (often the radiology technician)  who performed the series. The performer is recorded at the series level, since each series in a study may be performed by a different practitioner, at different times, and using different devices. A series may be performed by multiple practitioners.", 0, java.lang.Integer.MAX_VALUE, performer));
870          children.add(new Property("instance", "", "A single SOP instance within the series, e.g. an image, or presentation state.", 0, java.lang.Integer.MAX_VALUE, instance));
871        }
872
873        @Override
874        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
875          switch (_hash) {
876          case 115792: /*uid*/  return new Property("uid", "oid", "Formal identifier for this series.", 0, 1, uid);
877          case -1034364087: /*number*/  return new Property("number", "unsignedInt", "The numeric identifier of this series in the study.", 0, 1, number);
878          case -622722335: /*modality*/  return new Property("modality", "Coding", "The modality of this series sequence.", 0, 1, modality);
879          case -1724546052: /*description*/  return new Property("description", "string", "A description of the series.", 0, 1, description);
880          case -1043544226: /*numberOfInstances*/  return new Property("numberOfInstances", "unsignedInt", "Number of SOP Instances in the Study. The value given may be larger than the number of instance elements this resource contains due to resource availability, security, or other factors. This element should be present if any instance elements are present.", 0, 1, numberOfInstances);
881          case 1997542747: /*availability*/  return new Property("availability", "code", "Availability of series (online, offline or nearline).", 0, 1, availability);
882          case 1741102485: /*endpoint*/  return new Property("endpoint", "Reference(Endpoint)", "The network service providing access (e.g., query, view, or retrieval) for this series. See implementation notes for information about using DICOM endpoints. A series-level endpoint, if present, has precedence over a study-level endpoint with the same Endpoint.type.", 0, java.lang.Integer.MAX_VALUE, endpoint);
883          case 1702620169: /*bodySite*/  return new Property("bodySite", "Coding", "The anatomic structures examined. See DICOM Part 16 Annex L (http://dicom.nema.org/medical/dicom/current/output/chtml/part16/chapter_L.html) for DICOM to SNOMED-CT mappings. The bodySite may indicate the laterality of body part imaged; if so, it shall be consistent with any content of ImagingStudy.series.laterality.", 0, 1, bodySite);
884          case -170291817: /*laterality*/  return new Property("laterality", "Coding", "The laterality of the (possibly paired) anatomic structures examined. E.g., the left knee, both lungs, or unpaired abdomen. If present, shall be consistent with any laterality information indicated in ImagingStudy.series.bodySite.", 0, 1, laterality);
885          case -1897185151: /*started*/  return new Property("started", "dateTime", "The date and time the series was started.", 0, 1, started);
886          case 481140686: /*performer*/  return new Property("performer", "Reference(Practitioner)", "The physician or operator (often the radiology technician)  who performed the series. The performer is recorded at the series level, since each series in a study may be performed by a different practitioner, at different times, and using different devices. A series may be performed by multiple practitioners.", 0, java.lang.Integer.MAX_VALUE, performer);
887          case 555127957: /*instance*/  return new Property("instance", "", "A single SOP instance within the series, e.g. an image, or presentation state.", 0, java.lang.Integer.MAX_VALUE, instance);
888          default: return super.getNamedProperty(_hash, _name, _checkValid);
889          }
890
891        }
892
893      @Override
894      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
895        switch (hash) {
896        case 115792: /*uid*/ return this.uid == null ? new Base[0] : new Base[] {this.uid}; // OidType
897        case -1034364087: /*number*/ return this.number == null ? new Base[0] : new Base[] {this.number}; // UnsignedIntType
898        case -622722335: /*modality*/ return this.modality == null ? new Base[0] : new Base[] {this.modality}; // Coding
899        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // StringType
900        case -1043544226: /*numberOfInstances*/ return this.numberOfInstances == null ? new Base[0] : new Base[] {this.numberOfInstances}; // UnsignedIntType
901        case 1997542747: /*availability*/ return this.availability == null ? new Base[0] : new Base[] {this.availability}; // Enumeration<InstanceAvailability>
902        case 1741102485: /*endpoint*/ return this.endpoint == null ? new Base[0] : this.endpoint.toArray(new Base[this.endpoint.size()]); // Reference
903        case 1702620169: /*bodySite*/ return this.bodySite == null ? new Base[0] : new Base[] {this.bodySite}; // Coding
904        case -170291817: /*laterality*/ return this.laterality == null ? new Base[0] : new Base[] {this.laterality}; // Coding
905        case -1897185151: /*started*/ return this.started == null ? new Base[0] : new Base[] {this.started}; // DateTimeType
906        case 481140686: /*performer*/ return this.performer == null ? new Base[0] : this.performer.toArray(new Base[this.performer.size()]); // Reference
907        case 555127957: /*instance*/ return this.instance == null ? new Base[0] : this.instance.toArray(new Base[this.instance.size()]); // ImagingStudySeriesInstanceComponent
908        default: return super.getProperty(hash, name, checkValid);
909        }
910
911      }
912
913      @Override
914      public Base setProperty(int hash, String name, Base value) throws FHIRException {
915        switch (hash) {
916        case 115792: // uid
917          this.uid = castToOid(value); // OidType
918          return value;
919        case -1034364087: // number
920          this.number = castToUnsignedInt(value); // UnsignedIntType
921          return value;
922        case -622722335: // modality
923          this.modality = castToCoding(value); // Coding
924          return value;
925        case -1724546052: // description
926          this.description = castToString(value); // StringType
927          return value;
928        case -1043544226: // numberOfInstances
929          this.numberOfInstances = castToUnsignedInt(value); // UnsignedIntType
930          return value;
931        case 1997542747: // availability
932          value = new InstanceAvailabilityEnumFactory().fromType(castToCode(value));
933          this.availability = (Enumeration) value; // Enumeration<InstanceAvailability>
934          return value;
935        case 1741102485: // endpoint
936          this.getEndpoint().add(castToReference(value)); // Reference
937          return value;
938        case 1702620169: // bodySite
939          this.bodySite = castToCoding(value); // Coding
940          return value;
941        case -170291817: // laterality
942          this.laterality = castToCoding(value); // Coding
943          return value;
944        case -1897185151: // started
945          this.started = castToDateTime(value); // DateTimeType
946          return value;
947        case 481140686: // performer
948          this.getPerformer().add(castToReference(value)); // Reference
949          return value;
950        case 555127957: // instance
951          this.getInstance().add((ImagingStudySeriesInstanceComponent) value); // ImagingStudySeriesInstanceComponent
952          return value;
953        default: return super.setProperty(hash, name, value);
954        }
955
956      }
957
958      @Override
959      public Base setProperty(String name, Base value) throws FHIRException {
960        if (name.equals("uid")) {
961          this.uid = castToOid(value); // OidType
962        } else if (name.equals("number")) {
963          this.number = castToUnsignedInt(value); // UnsignedIntType
964        } else if (name.equals("modality")) {
965          this.modality = castToCoding(value); // Coding
966        } else if (name.equals("description")) {
967          this.description = castToString(value); // StringType
968        } else if (name.equals("numberOfInstances")) {
969          this.numberOfInstances = castToUnsignedInt(value); // UnsignedIntType
970        } else if (name.equals("availability")) {
971          value = new InstanceAvailabilityEnumFactory().fromType(castToCode(value));
972          this.availability = (Enumeration) value; // Enumeration<InstanceAvailability>
973        } else if (name.equals("endpoint")) {
974          this.getEndpoint().add(castToReference(value));
975        } else if (name.equals("bodySite")) {
976          this.bodySite = castToCoding(value); // Coding
977        } else if (name.equals("laterality")) {
978          this.laterality = castToCoding(value); // Coding
979        } else if (name.equals("started")) {
980          this.started = castToDateTime(value); // DateTimeType
981        } else if (name.equals("performer")) {
982          this.getPerformer().add(castToReference(value));
983        } else if (name.equals("instance")) {
984          this.getInstance().add((ImagingStudySeriesInstanceComponent) value);
985        } else
986          return super.setProperty(name, value);
987        return value;
988      }
989
990      @Override
991      public Base makeProperty(int hash, String name) throws FHIRException {
992        switch (hash) {
993        case 115792:  return getUidElement();
994        case -1034364087:  return getNumberElement();
995        case -622722335:  return getModality(); 
996        case -1724546052:  return getDescriptionElement();
997        case -1043544226:  return getNumberOfInstancesElement();
998        case 1997542747:  return getAvailabilityElement();
999        case 1741102485:  return addEndpoint(); 
1000        case 1702620169:  return getBodySite(); 
1001        case -170291817:  return getLaterality(); 
1002        case -1897185151:  return getStartedElement();
1003        case 481140686:  return addPerformer(); 
1004        case 555127957:  return addInstance(); 
1005        default: return super.makeProperty(hash, name);
1006        }
1007
1008      }
1009
1010      @Override
1011      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1012        switch (hash) {
1013        case 115792: /*uid*/ return new String[] {"oid"};
1014        case -1034364087: /*number*/ return new String[] {"unsignedInt"};
1015        case -622722335: /*modality*/ return new String[] {"Coding"};
1016        case -1724546052: /*description*/ return new String[] {"string"};
1017        case -1043544226: /*numberOfInstances*/ return new String[] {"unsignedInt"};
1018        case 1997542747: /*availability*/ return new String[] {"code"};
1019        case 1741102485: /*endpoint*/ return new String[] {"Reference"};
1020        case 1702620169: /*bodySite*/ return new String[] {"Coding"};
1021        case -170291817: /*laterality*/ return new String[] {"Coding"};
1022        case -1897185151: /*started*/ return new String[] {"dateTime"};
1023        case 481140686: /*performer*/ return new String[] {"Reference"};
1024        case 555127957: /*instance*/ return new String[] {};
1025        default: return super.getTypesForProperty(hash, name);
1026        }
1027
1028      }
1029
1030      @Override
1031      public Base addChild(String name) throws FHIRException {
1032        if (name.equals("uid")) {
1033          throw new FHIRException("Cannot call addChild on a singleton property ImagingStudy.uid");
1034        }
1035        else if (name.equals("number")) {
1036          throw new FHIRException("Cannot call addChild on a singleton property ImagingStudy.number");
1037        }
1038        else if (name.equals("modality")) {
1039          this.modality = new Coding();
1040          return this.modality;
1041        }
1042        else if (name.equals("description")) {
1043          throw new FHIRException("Cannot call addChild on a singleton property ImagingStudy.description");
1044        }
1045        else if (name.equals("numberOfInstances")) {
1046          throw new FHIRException("Cannot call addChild on a singleton property ImagingStudy.numberOfInstances");
1047        }
1048        else if (name.equals("availability")) {
1049          throw new FHIRException("Cannot call addChild on a singleton property ImagingStudy.availability");
1050        }
1051        else if (name.equals("endpoint")) {
1052          return addEndpoint();
1053        }
1054        else if (name.equals("bodySite")) {
1055          this.bodySite = new Coding();
1056          return this.bodySite;
1057        }
1058        else if (name.equals("laterality")) {
1059          this.laterality = new Coding();
1060          return this.laterality;
1061        }
1062        else if (name.equals("started")) {
1063          throw new FHIRException("Cannot call addChild on a singleton property ImagingStudy.started");
1064        }
1065        else if (name.equals("performer")) {
1066          return addPerformer();
1067        }
1068        else if (name.equals("instance")) {
1069          return addInstance();
1070        }
1071        else
1072          return super.addChild(name);
1073      }
1074
1075      public ImagingStudySeriesComponent copy() {
1076        ImagingStudySeriesComponent dst = new ImagingStudySeriesComponent();
1077        copyValues(dst);
1078        dst.uid = uid == null ? null : uid.copy();
1079        dst.number = number == null ? null : number.copy();
1080        dst.modality = modality == null ? null : modality.copy();
1081        dst.description = description == null ? null : description.copy();
1082        dst.numberOfInstances = numberOfInstances == null ? null : numberOfInstances.copy();
1083        dst.availability = availability == null ? null : availability.copy();
1084        if (endpoint != null) {
1085          dst.endpoint = new ArrayList<Reference>();
1086          for (Reference i : endpoint)
1087            dst.endpoint.add(i.copy());
1088        };
1089        dst.bodySite = bodySite == null ? null : bodySite.copy();
1090        dst.laterality = laterality == null ? null : laterality.copy();
1091        dst.started = started == null ? null : started.copy();
1092        if (performer != null) {
1093          dst.performer = new ArrayList<Reference>();
1094          for (Reference i : performer)
1095            dst.performer.add(i.copy());
1096        };
1097        if (instance != null) {
1098          dst.instance = new ArrayList<ImagingStudySeriesInstanceComponent>();
1099          for (ImagingStudySeriesInstanceComponent i : instance)
1100            dst.instance.add(i.copy());
1101        };
1102        return dst;
1103      }
1104
1105      @Override
1106      public boolean equalsDeep(Base other_) {
1107        if (!super.equalsDeep(other_))
1108          return false;
1109        if (!(other_ instanceof ImagingStudySeriesComponent))
1110          return false;
1111        ImagingStudySeriesComponent o = (ImagingStudySeriesComponent) other_;
1112        return compareDeep(uid, o.uid, true) && compareDeep(number, o.number, true) && compareDeep(modality, o.modality, true)
1113           && compareDeep(description, o.description, true) && compareDeep(numberOfInstances, o.numberOfInstances, true)
1114           && compareDeep(availability, o.availability, true) && compareDeep(endpoint, o.endpoint, true) && compareDeep(bodySite, o.bodySite, true)
1115           && compareDeep(laterality, o.laterality, true) && compareDeep(started, o.started, true) && compareDeep(performer, o.performer, true)
1116           && compareDeep(instance, o.instance, true);
1117      }
1118
1119      @Override
1120      public boolean equalsShallow(Base other_) {
1121        if (!super.equalsShallow(other_))
1122          return false;
1123        if (!(other_ instanceof ImagingStudySeriesComponent))
1124          return false;
1125        ImagingStudySeriesComponent o = (ImagingStudySeriesComponent) other_;
1126        return compareValues(uid, o.uid, true) && compareValues(number, o.number, true) && compareValues(description, o.description, true)
1127           && compareValues(numberOfInstances, o.numberOfInstances, true) && compareValues(availability, o.availability, true)
1128           && compareValues(started, o.started, true);
1129      }
1130
1131      public boolean isEmpty() {
1132        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(uid, number, modality, description
1133          , numberOfInstances, availability, endpoint, bodySite, laterality, started, performer
1134          , instance);
1135      }
1136
1137  public String fhirType() {
1138    return "ImagingStudy.series";
1139
1140  }
1141
1142  }
1143
1144    @Block()
1145    public static class ImagingStudySeriesInstanceComponent extends BackboneElement implements IBaseBackboneElement {
1146        /**
1147         * Formal identifier for this image or other content.
1148         */
1149        @Child(name = "uid", type = {OidType.class}, order=1, min=1, max=1, modifier=false, summary=false)
1150        @Description(shortDefinition="Formal DICOM identifier for this instance", formalDefinition="Formal identifier for this image or other content." )
1151        protected OidType uid;
1152
1153        /**
1154         * The number of instance in the series.
1155         */
1156        @Child(name = "number", type = {UnsignedIntType.class}, order=2, min=0, max=1, modifier=false, summary=false)
1157        @Description(shortDefinition="The number of this instance in the series", formalDefinition="The number of instance in the series." )
1158        protected UnsignedIntType number;
1159
1160        /**
1161         * DICOM instance  type.
1162         */
1163        @Child(name = "sopClass", type = {OidType.class}, order=3, min=1, max=1, modifier=false, summary=false)
1164        @Description(shortDefinition="DICOM class type", formalDefinition="DICOM instance  type." )
1165        protected OidType sopClass;
1166
1167        /**
1168         * The description of the instance.
1169         */
1170        @Child(name = "title", type = {StringType.class}, order=4, min=0, max=1, modifier=false, summary=false)
1171        @Description(shortDefinition="Description of instance", formalDefinition="The description of the instance." )
1172        protected StringType title;
1173
1174        private static final long serialVersionUID = -771526344L;
1175
1176    /**
1177     * Constructor
1178     */
1179      public ImagingStudySeriesInstanceComponent() {
1180        super();
1181      }
1182
1183    /**
1184     * Constructor
1185     */
1186      public ImagingStudySeriesInstanceComponent(OidType uid, OidType sopClass) {
1187        super();
1188        this.uid = uid;
1189        this.sopClass = sopClass;
1190      }
1191
1192        /**
1193         * @return {@link #uid} (Formal identifier for this image or other content.). This is the underlying object with id, value and extensions. The accessor "getUid" gives direct access to the value
1194         */
1195        public OidType getUidElement() { 
1196          if (this.uid == null)
1197            if (Configuration.errorOnAutoCreate())
1198              throw new Error("Attempt to auto-create ImagingStudySeriesInstanceComponent.uid");
1199            else if (Configuration.doAutoCreate())
1200              this.uid = new OidType(); // bb
1201          return this.uid;
1202        }
1203
1204        public boolean hasUidElement() { 
1205          return this.uid != null && !this.uid.isEmpty();
1206        }
1207
1208        public boolean hasUid() { 
1209          return this.uid != null && !this.uid.isEmpty();
1210        }
1211
1212        /**
1213         * @param value {@link #uid} (Formal identifier for this image or other content.). This is the underlying object with id, value and extensions. The accessor "getUid" gives direct access to the value
1214         */
1215        public ImagingStudySeriesInstanceComponent setUidElement(OidType value) { 
1216          this.uid = value;
1217          return this;
1218        }
1219
1220        /**
1221         * @return Formal identifier for this image or other content.
1222         */
1223        public String getUid() { 
1224          return this.uid == null ? null : this.uid.getValue();
1225        }
1226
1227        /**
1228         * @param value Formal identifier for this image or other content.
1229         */
1230        public ImagingStudySeriesInstanceComponent setUid(String value) { 
1231            if (this.uid == null)
1232              this.uid = new OidType();
1233            this.uid.setValue(value);
1234          return this;
1235        }
1236
1237        /**
1238         * @return {@link #number} (The number of instance in the series.). This is the underlying object with id, value and extensions. The accessor "getNumber" gives direct access to the value
1239         */
1240        public UnsignedIntType getNumberElement() { 
1241          if (this.number == null)
1242            if (Configuration.errorOnAutoCreate())
1243              throw new Error("Attempt to auto-create ImagingStudySeriesInstanceComponent.number");
1244            else if (Configuration.doAutoCreate())
1245              this.number = new UnsignedIntType(); // bb
1246          return this.number;
1247        }
1248
1249        public boolean hasNumberElement() { 
1250          return this.number != null && !this.number.isEmpty();
1251        }
1252
1253        public boolean hasNumber() { 
1254          return this.number != null && !this.number.isEmpty();
1255        }
1256
1257        /**
1258         * @param value {@link #number} (The number of instance in the series.). This is the underlying object with id, value and extensions. The accessor "getNumber" gives direct access to the value
1259         */
1260        public ImagingStudySeriesInstanceComponent setNumberElement(UnsignedIntType value) { 
1261          this.number = value;
1262          return this;
1263        }
1264
1265        /**
1266         * @return The number of instance in the series.
1267         */
1268        public int getNumber() { 
1269          return this.number == null || this.number.isEmpty() ? 0 : this.number.getValue();
1270        }
1271
1272        /**
1273         * @param value The number of instance in the series.
1274         */
1275        public ImagingStudySeriesInstanceComponent setNumber(int value) { 
1276            if (this.number == null)
1277              this.number = new UnsignedIntType();
1278            this.number.setValue(value);
1279          return this;
1280        }
1281
1282        /**
1283         * @return {@link #sopClass} (DICOM instance  type.). This is the underlying object with id, value and extensions. The accessor "getSopClass" gives direct access to the value
1284         */
1285        public OidType getSopClassElement() { 
1286          if (this.sopClass == null)
1287            if (Configuration.errorOnAutoCreate())
1288              throw new Error("Attempt to auto-create ImagingStudySeriesInstanceComponent.sopClass");
1289            else if (Configuration.doAutoCreate())
1290              this.sopClass = new OidType(); // bb
1291          return this.sopClass;
1292        }
1293
1294        public boolean hasSopClassElement() { 
1295          return this.sopClass != null && !this.sopClass.isEmpty();
1296        }
1297
1298        public boolean hasSopClass() { 
1299          return this.sopClass != null && !this.sopClass.isEmpty();
1300        }
1301
1302        /**
1303         * @param value {@link #sopClass} (DICOM instance  type.). This is the underlying object with id, value and extensions. The accessor "getSopClass" gives direct access to the value
1304         */
1305        public ImagingStudySeriesInstanceComponent setSopClassElement(OidType value) { 
1306          this.sopClass = value;
1307          return this;
1308        }
1309
1310        /**
1311         * @return DICOM instance  type.
1312         */
1313        public String getSopClass() { 
1314          return this.sopClass == null ? null : this.sopClass.getValue();
1315        }
1316
1317        /**
1318         * @param value DICOM instance  type.
1319         */
1320        public ImagingStudySeriesInstanceComponent setSopClass(String value) { 
1321            if (this.sopClass == null)
1322              this.sopClass = new OidType();
1323            this.sopClass.setValue(value);
1324          return this;
1325        }
1326
1327        /**
1328         * @return {@link #title} (The description of the instance.). This is the underlying object with id, value and extensions. The accessor "getTitle" gives direct access to the value
1329         */
1330        public StringType getTitleElement() { 
1331          if (this.title == null)
1332            if (Configuration.errorOnAutoCreate())
1333              throw new Error("Attempt to auto-create ImagingStudySeriesInstanceComponent.title");
1334            else if (Configuration.doAutoCreate())
1335              this.title = new StringType(); // bb
1336          return this.title;
1337        }
1338
1339        public boolean hasTitleElement() { 
1340          return this.title != null && !this.title.isEmpty();
1341        }
1342
1343        public boolean hasTitle() { 
1344          return this.title != null && !this.title.isEmpty();
1345        }
1346
1347        /**
1348         * @param value {@link #title} (The description of the instance.). This is the underlying object with id, value and extensions. The accessor "getTitle" gives direct access to the value
1349         */
1350        public ImagingStudySeriesInstanceComponent setTitleElement(StringType value) { 
1351          this.title = value;
1352          return this;
1353        }
1354
1355        /**
1356         * @return The description of the instance.
1357         */
1358        public String getTitle() { 
1359          return this.title == null ? null : this.title.getValue();
1360        }
1361
1362        /**
1363         * @param value The description of the instance.
1364         */
1365        public ImagingStudySeriesInstanceComponent setTitle(String value) { 
1366          if (Utilities.noString(value))
1367            this.title = null;
1368          else {
1369            if (this.title == null)
1370              this.title = new StringType();
1371            this.title.setValue(value);
1372          }
1373          return this;
1374        }
1375
1376        protected void listChildren(List<Property> children) {
1377          super.listChildren(children);
1378          children.add(new Property("uid", "oid", "Formal identifier for this image or other content.", 0, 1, uid));
1379          children.add(new Property("number", "unsignedInt", "The number of instance in the series.", 0, 1, number));
1380          children.add(new Property("sopClass", "oid", "DICOM instance  type.", 0, 1, sopClass));
1381          children.add(new Property("title", "string", "The description of the instance.", 0, 1, title));
1382        }
1383
1384        @Override
1385        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1386          switch (_hash) {
1387          case 115792: /*uid*/  return new Property("uid", "oid", "Formal identifier for this image or other content.", 0, 1, uid);
1388          case -1034364087: /*number*/  return new Property("number", "unsignedInt", "The number of instance in the series.", 0, 1, number);
1389          case 1560041540: /*sopClass*/  return new Property("sopClass", "oid", "DICOM instance  type.", 0, 1, sopClass);
1390          case 110371416: /*title*/  return new Property("title", "string", "The description of the instance.", 0, 1, title);
1391          default: return super.getNamedProperty(_hash, _name, _checkValid);
1392          }
1393
1394        }
1395
1396      @Override
1397      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1398        switch (hash) {
1399        case 115792: /*uid*/ return this.uid == null ? new Base[0] : new Base[] {this.uid}; // OidType
1400        case -1034364087: /*number*/ return this.number == null ? new Base[0] : new Base[] {this.number}; // UnsignedIntType
1401        case 1560041540: /*sopClass*/ return this.sopClass == null ? new Base[0] : new Base[] {this.sopClass}; // OidType
1402        case 110371416: /*title*/ return this.title == null ? new Base[0] : new Base[] {this.title}; // StringType
1403        default: return super.getProperty(hash, name, checkValid);
1404        }
1405
1406      }
1407
1408      @Override
1409      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1410        switch (hash) {
1411        case 115792: // uid
1412          this.uid = castToOid(value); // OidType
1413          return value;
1414        case -1034364087: // number
1415          this.number = castToUnsignedInt(value); // UnsignedIntType
1416          return value;
1417        case 1560041540: // sopClass
1418          this.sopClass = castToOid(value); // OidType
1419          return value;
1420        case 110371416: // title
1421          this.title = castToString(value); // StringType
1422          return value;
1423        default: return super.setProperty(hash, name, value);
1424        }
1425
1426      }
1427
1428      @Override
1429      public Base setProperty(String name, Base value) throws FHIRException {
1430        if (name.equals("uid")) {
1431          this.uid = castToOid(value); // OidType
1432        } else if (name.equals("number")) {
1433          this.number = castToUnsignedInt(value); // UnsignedIntType
1434        } else if (name.equals("sopClass")) {
1435          this.sopClass = castToOid(value); // OidType
1436        } else if (name.equals("title")) {
1437          this.title = castToString(value); // StringType
1438        } else
1439          return super.setProperty(name, value);
1440        return value;
1441      }
1442
1443      @Override
1444      public Base makeProperty(int hash, String name) throws FHIRException {
1445        switch (hash) {
1446        case 115792:  return getUidElement();
1447        case -1034364087:  return getNumberElement();
1448        case 1560041540:  return getSopClassElement();
1449        case 110371416:  return getTitleElement();
1450        default: return super.makeProperty(hash, name);
1451        }
1452
1453      }
1454
1455      @Override
1456      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1457        switch (hash) {
1458        case 115792: /*uid*/ return new String[] {"oid"};
1459        case -1034364087: /*number*/ return new String[] {"unsignedInt"};
1460        case 1560041540: /*sopClass*/ return new String[] {"oid"};
1461        case 110371416: /*title*/ return new String[] {"string"};
1462        default: return super.getTypesForProperty(hash, name);
1463        }
1464
1465      }
1466
1467      @Override
1468      public Base addChild(String name) throws FHIRException {
1469        if (name.equals("uid")) {
1470          throw new FHIRException("Cannot call addChild on a singleton property ImagingStudy.uid");
1471        }
1472        else if (name.equals("number")) {
1473          throw new FHIRException("Cannot call addChild on a singleton property ImagingStudy.number");
1474        }
1475        else if (name.equals("sopClass")) {
1476          throw new FHIRException("Cannot call addChild on a singleton property ImagingStudy.sopClass");
1477        }
1478        else if (name.equals("title")) {
1479          throw new FHIRException("Cannot call addChild on a singleton property ImagingStudy.title");
1480        }
1481        else
1482          return super.addChild(name);
1483      }
1484
1485      public ImagingStudySeriesInstanceComponent copy() {
1486        ImagingStudySeriesInstanceComponent dst = new ImagingStudySeriesInstanceComponent();
1487        copyValues(dst);
1488        dst.uid = uid == null ? null : uid.copy();
1489        dst.number = number == null ? null : number.copy();
1490        dst.sopClass = sopClass == null ? null : sopClass.copy();
1491        dst.title = title == null ? null : title.copy();
1492        return dst;
1493      }
1494
1495      @Override
1496      public boolean equalsDeep(Base other_) {
1497        if (!super.equalsDeep(other_))
1498          return false;
1499        if (!(other_ instanceof ImagingStudySeriesInstanceComponent))
1500          return false;
1501        ImagingStudySeriesInstanceComponent o = (ImagingStudySeriesInstanceComponent) other_;
1502        return compareDeep(uid, o.uid, true) && compareDeep(number, o.number, true) && compareDeep(sopClass, o.sopClass, true)
1503           && compareDeep(title, o.title, true);
1504      }
1505
1506      @Override
1507      public boolean equalsShallow(Base other_) {
1508        if (!super.equalsShallow(other_))
1509          return false;
1510        if (!(other_ instanceof ImagingStudySeriesInstanceComponent))
1511          return false;
1512        ImagingStudySeriesInstanceComponent o = (ImagingStudySeriesInstanceComponent) other_;
1513        return compareValues(uid, o.uid, true) && compareValues(number, o.number, true) && compareValues(sopClass, o.sopClass, true)
1514           && compareValues(title, o.title, true);
1515      }
1516
1517      public boolean isEmpty() {
1518        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(uid, number, sopClass, title
1519          );
1520      }
1521
1522  public String fhirType() {
1523    return "ImagingStudy.series.instance";
1524
1525  }
1526
1527  }
1528
1529    /**
1530     * Formal identifier for the study.
1531     */
1532    @Child(name = "uid", type = {OidType.class}, order=0, min=1, max=1, modifier=false, summary=true)
1533    @Description(shortDefinition="Formal DICOM identifier for the study", formalDefinition="Formal identifier for the study." )
1534    protected OidType uid;
1535
1536    /**
1537     * Accession Number is an identifier related to some aspect of imaging workflow and data management. Usage may vary across different institutions.  See for instance [IHE Radiology Technical Framework Volume 1 Appendix A](http://www.ihe.net/uploadedFiles/Documents/Radiology/IHE_RAD_TF_Rev13.0_Vol1_FT_2014-07-30.pdf).
1538     */
1539    @Child(name = "accession", type = {Identifier.class}, order=1, min=0, max=1, modifier=false, summary=true)
1540    @Description(shortDefinition="Related workflow identifier (\"Accession Number\")", formalDefinition="Accession Number is an identifier related to some aspect of imaging workflow and data management. Usage may vary across different institutions.  See for instance [IHE Radiology Technical Framework Volume 1 Appendix A](http://www.ihe.net/uploadedFiles/Documents/Radiology/IHE_RAD_TF_Rev13.0_Vol1_FT_2014-07-30.pdf)." )
1541    protected Identifier accession;
1542
1543    /**
1544     * Other identifiers for the study.
1545     */
1546    @Child(name = "identifier", type = {Identifier.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1547    @Description(shortDefinition="Other identifiers for the study", formalDefinition="Other identifiers for the study." )
1548    protected List<Identifier> identifier;
1549
1550    /**
1551     * Availability of study (online, offline, or nearline).
1552     */
1553    @Child(name = "availability", type = {CodeType.class}, order=3, min=0, max=1, modifier=false, summary=true)
1554    @Description(shortDefinition="ONLINE | OFFLINE | NEARLINE | UNAVAILABLE", formalDefinition="Availability of study (online, offline, or nearline)." )
1555    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/instance-availability")
1556    protected Enumeration<InstanceAvailability> availability;
1557
1558    /**
1559     * A list of all the Series.ImageModality values that are actual acquisition modalities, i.e. those in the DICOM Context Group 29 (value set OID 1.2.840.10008.6.1.19).
1560     */
1561    @Child(name = "modalityList", type = {Coding.class}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1562    @Description(shortDefinition="All series modality if actual acquisition modalities", formalDefinition="A list of all the Series.ImageModality values that are actual acquisition modalities, i.e. those in the DICOM Context Group 29 (value set OID 1.2.840.10008.6.1.19)." )
1563    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/dicom-cid29")
1564    protected List<Coding> modalityList;
1565
1566    /**
1567     * The patient imaged in the study.
1568     */
1569    @Child(name = "patient", type = {Patient.class}, order=5, min=1, max=1, modifier=false, summary=true)
1570    @Description(shortDefinition="Who the images are of", formalDefinition="The patient imaged in the study." )
1571    protected Reference patient;
1572
1573    /**
1574     * The actual object that is the target of the reference (The patient imaged in the study.)
1575     */
1576    protected Patient patientTarget;
1577
1578    /**
1579     * The encounter or episode at which the request is initiated.
1580     */
1581    @Child(name = "context", type = {Encounter.class, EpisodeOfCare.class}, order=6, min=0, max=1, modifier=false, summary=true)
1582    @Description(shortDefinition="Originating context", formalDefinition="The encounter or episode at which the request is initiated." )
1583    protected Reference context;
1584
1585    /**
1586     * The actual object that is the target of the reference (The encounter or episode at which the request is initiated.)
1587     */
1588    protected Resource contextTarget;
1589
1590    /**
1591     * Date and time the study started.
1592     */
1593    @Child(name = "started", type = {DateTimeType.class}, order=7, min=0, max=1, modifier=false, summary=true)
1594    @Description(shortDefinition="When the study was started", formalDefinition="Date and time the study started." )
1595    protected DateTimeType started;
1596
1597    /**
1598     * A list of the diagnostic requests that resulted in this imaging study being performed.
1599     */
1600    @Child(name = "basedOn", type = {ReferralRequest.class, CarePlan.class, ProcedureRequest.class}, order=8, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1601    @Description(shortDefinition="Request fulfilled", formalDefinition="A list of the diagnostic requests that resulted in this imaging study being performed." )
1602    protected List<Reference> basedOn;
1603    /**
1604     * The actual objects that are the target of the reference (A list of the diagnostic requests that resulted in this imaging study being performed.)
1605     */
1606    protected List<Resource> basedOnTarget;
1607
1608
1609    /**
1610     * The requesting/referring physician.
1611     */
1612    @Child(name = "referrer", type = {Practitioner.class}, order=9, min=0, max=1, modifier=false, summary=true)
1613    @Description(shortDefinition="Referring physician", formalDefinition="The requesting/referring physician." )
1614    protected Reference referrer;
1615
1616    /**
1617     * The actual object that is the target of the reference (The requesting/referring physician.)
1618     */
1619    protected Practitioner referrerTarget;
1620
1621    /**
1622     * Who read the study and interpreted the images or other content.
1623     */
1624    @Child(name = "interpreter", type = {Practitioner.class}, order=10, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1625    @Description(shortDefinition="Who interpreted images", formalDefinition="Who read the study and interpreted the images or other content." )
1626    protected List<Reference> interpreter;
1627    /**
1628     * The actual objects that are the target of the reference (Who read the study and interpreted the images or other content.)
1629     */
1630    protected List<Practitioner> interpreterTarget;
1631
1632
1633    /**
1634     * The network service providing access (e.g., query, view, or retrieval) for the study. See implementation notes for information about using DICOM endpoints. A study-level endpoint applies to each series in the study, unless overridden by a series-level endpoint with the same Endpoint.type.
1635     */
1636    @Child(name = "endpoint", type = {Endpoint.class}, order=11, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1637    @Description(shortDefinition="Study access endpoint", formalDefinition="The network service providing access (e.g., query, view, or retrieval) for the study. See implementation notes for information about using DICOM endpoints. A study-level endpoint applies to each series in the study, unless overridden by a series-level endpoint with the same Endpoint.type." )
1638    protected List<Reference> endpoint;
1639    /**
1640     * The actual objects that are the target of the reference (The network service providing access (e.g., query, view, or retrieval) for the study. See implementation notes for information about using DICOM endpoints. A study-level endpoint applies to each series in the study, unless overridden by a series-level endpoint with the same Endpoint.type.)
1641     */
1642    protected List<Endpoint> endpointTarget;
1643
1644
1645    /**
1646     * Number of Series in the Study. This value given may be larger than the number of series elements this Resource contains due to resource availability, security, or other factors. This element should be present if any series elements are present.
1647     */
1648    @Child(name = "numberOfSeries", type = {UnsignedIntType.class}, order=12, min=0, max=1, modifier=false, summary=true)
1649    @Description(shortDefinition="Number of Study Related Series", formalDefinition="Number of Series in the Study. This value given may be larger than the number of series elements this Resource contains due to resource availability, security, or other factors. This element should be present if any series elements are present." )
1650    protected UnsignedIntType numberOfSeries;
1651
1652    /**
1653     * Number of SOP Instances in Study. This value given may be larger than the number of instance elements this resource contains due to resource availability, security, or other factors. This element should be present if any instance elements are present.
1654     */
1655    @Child(name = "numberOfInstances", type = {UnsignedIntType.class}, order=13, min=0, max=1, modifier=false, summary=true)
1656    @Description(shortDefinition="Number of Study Related Instances", formalDefinition="Number of SOP Instances in Study. This value given may be larger than the number of instance elements this resource contains due to resource availability, security, or other factors. This element should be present if any instance elements are present." )
1657    protected UnsignedIntType numberOfInstances;
1658
1659    /**
1660     * A reference to the performed Procedure.
1661     */
1662    @Child(name = "procedureReference", type = {Procedure.class}, order=14, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1663    @Description(shortDefinition="The performed Procedure reference", formalDefinition="A reference to the performed Procedure." )
1664    protected List<Reference> procedureReference;
1665    /**
1666     * The actual objects that are the target of the reference (A reference to the performed Procedure.)
1667     */
1668    protected List<Procedure> procedureReferenceTarget;
1669
1670
1671    /**
1672     * The code for the performed procedure type.
1673     */
1674    @Child(name = "procedureCode", type = {CodeableConcept.class}, order=15, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1675    @Description(shortDefinition="The performed procedure code", formalDefinition="The code for the performed procedure type." )
1676    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/procedure-code")
1677    protected List<CodeableConcept> procedureCode;
1678
1679    /**
1680     * Description of clinical condition indicating why the ImagingStudy was requested.
1681     */
1682    @Child(name = "reason", type = {CodeableConcept.class}, order=16, min=0, max=1, modifier=false, summary=true)
1683    @Description(shortDefinition="Why the study was requested", formalDefinition="Description of clinical condition indicating why the ImagingStudy was requested." )
1684    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/procedure-reason")
1685    protected CodeableConcept reason;
1686
1687    /**
1688     * Institution-generated description or classification of the Study performed.
1689     */
1690    @Child(name = "description", type = {StringType.class}, order=17, min=0, max=1, modifier=false, summary=true)
1691    @Description(shortDefinition="Institution-generated description", formalDefinition="Institution-generated description or classification of the Study performed." )
1692    protected StringType description;
1693
1694    /**
1695     * Each study has one or more series of images or other content.
1696     */
1697    @Child(name = "series", type = {}, order=18, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1698    @Description(shortDefinition="Each study has one or more series of instances", formalDefinition="Each study has one or more series of images or other content." )
1699    protected List<ImagingStudySeriesComponent> series;
1700
1701    private static final long serialVersionUID = -1987354693L;
1702
1703  /**
1704   * Constructor
1705   */
1706    public ImagingStudy() {
1707      super();
1708    }
1709
1710  /**
1711   * Constructor
1712   */
1713    public ImagingStudy(OidType uid, Reference patient) {
1714      super();
1715      this.uid = uid;
1716      this.patient = patient;
1717    }
1718
1719    /**
1720     * @return {@link #uid} (Formal identifier for the study.). This is the underlying object with id, value and extensions. The accessor "getUid" gives direct access to the value
1721     */
1722    public OidType getUidElement() { 
1723      if (this.uid == null)
1724        if (Configuration.errorOnAutoCreate())
1725          throw new Error("Attempt to auto-create ImagingStudy.uid");
1726        else if (Configuration.doAutoCreate())
1727          this.uid = new OidType(); // bb
1728      return this.uid;
1729    }
1730
1731    public boolean hasUidElement() { 
1732      return this.uid != null && !this.uid.isEmpty();
1733    }
1734
1735    public boolean hasUid() { 
1736      return this.uid != null && !this.uid.isEmpty();
1737    }
1738
1739    /**
1740     * @param value {@link #uid} (Formal identifier for the study.). This is the underlying object with id, value and extensions. The accessor "getUid" gives direct access to the value
1741     */
1742    public ImagingStudy setUidElement(OidType value) { 
1743      this.uid = value;
1744      return this;
1745    }
1746
1747    /**
1748     * @return Formal identifier for the study.
1749     */
1750    public String getUid() { 
1751      return this.uid == null ? null : this.uid.getValue();
1752    }
1753
1754    /**
1755     * @param value Formal identifier for the study.
1756     */
1757    public ImagingStudy setUid(String value) { 
1758        if (this.uid == null)
1759          this.uid = new OidType();
1760        this.uid.setValue(value);
1761      return this;
1762    }
1763
1764    /**
1765     * @return {@link #accession} (Accession Number is an identifier related to some aspect of imaging workflow and data management. Usage may vary across different institutions.  See for instance [IHE Radiology Technical Framework Volume 1 Appendix A](http://www.ihe.net/uploadedFiles/Documents/Radiology/IHE_RAD_TF_Rev13.0_Vol1_FT_2014-07-30.pdf).)
1766     */
1767    public Identifier getAccession() { 
1768      if (this.accession == null)
1769        if (Configuration.errorOnAutoCreate())
1770          throw new Error("Attempt to auto-create ImagingStudy.accession");
1771        else if (Configuration.doAutoCreate())
1772          this.accession = new Identifier(); // cc
1773      return this.accession;
1774    }
1775
1776    public boolean hasAccession() { 
1777      return this.accession != null && !this.accession.isEmpty();
1778    }
1779
1780    /**
1781     * @param value {@link #accession} (Accession Number is an identifier related to some aspect of imaging workflow and data management. Usage may vary across different institutions.  See for instance [IHE Radiology Technical Framework Volume 1 Appendix A](http://www.ihe.net/uploadedFiles/Documents/Radiology/IHE_RAD_TF_Rev13.0_Vol1_FT_2014-07-30.pdf).)
1782     */
1783    public ImagingStudy setAccession(Identifier value)  { 
1784      this.accession = value;
1785      return this;
1786    }
1787
1788    /**
1789     * @return {@link #identifier} (Other identifiers for the study.)
1790     */
1791    public List<Identifier> getIdentifier() { 
1792      if (this.identifier == null)
1793        this.identifier = new ArrayList<Identifier>();
1794      return this.identifier;
1795    }
1796
1797    /**
1798     * @return Returns a reference to <code>this</code> for easy method chaining
1799     */
1800    public ImagingStudy setIdentifier(List<Identifier> theIdentifier) { 
1801      this.identifier = theIdentifier;
1802      return this;
1803    }
1804
1805    public boolean hasIdentifier() { 
1806      if (this.identifier == null)
1807        return false;
1808      for (Identifier item : this.identifier)
1809        if (!item.isEmpty())
1810          return true;
1811      return false;
1812    }
1813
1814    public Identifier addIdentifier() { //3
1815      Identifier t = new Identifier();
1816      if (this.identifier == null)
1817        this.identifier = new ArrayList<Identifier>();
1818      this.identifier.add(t);
1819      return t;
1820    }
1821
1822    public ImagingStudy addIdentifier(Identifier t) { //3
1823      if (t == null)
1824        return this;
1825      if (this.identifier == null)
1826        this.identifier = new ArrayList<Identifier>();
1827      this.identifier.add(t);
1828      return this;
1829    }
1830
1831    /**
1832     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist
1833     */
1834    public Identifier getIdentifierFirstRep() { 
1835      if (getIdentifier().isEmpty()) {
1836        addIdentifier();
1837      }
1838      return getIdentifier().get(0);
1839    }
1840
1841    /**
1842     * @return {@link #availability} (Availability of study (online, offline, or nearline).). This is the underlying object with id, value and extensions. The accessor "getAvailability" gives direct access to the value
1843     */
1844    public Enumeration<InstanceAvailability> getAvailabilityElement() { 
1845      if (this.availability == null)
1846        if (Configuration.errorOnAutoCreate())
1847          throw new Error("Attempt to auto-create ImagingStudy.availability");
1848        else if (Configuration.doAutoCreate())
1849          this.availability = new Enumeration<InstanceAvailability>(new InstanceAvailabilityEnumFactory()); // bb
1850      return this.availability;
1851    }
1852
1853    public boolean hasAvailabilityElement() { 
1854      return this.availability != null && !this.availability.isEmpty();
1855    }
1856
1857    public boolean hasAvailability() { 
1858      return this.availability != null && !this.availability.isEmpty();
1859    }
1860
1861    /**
1862     * @param value {@link #availability} (Availability of study (online, offline, or nearline).). This is the underlying object with id, value and extensions. The accessor "getAvailability" gives direct access to the value
1863     */
1864    public ImagingStudy setAvailabilityElement(Enumeration<InstanceAvailability> value) { 
1865      this.availability = value;
1866      return this;
1867    }
1868
1869    /**
1870     * @return Availability of study (online, offline, or nearline).
1871     */
1872    public InstanceAvailability getAvailability() { 
1873      return this.availability == null ? null : this.availability.getValue();
1874    }
1875
1876    /**
1877     * @param value Availability of study (online, offline, or nearline).
1878     */
1879    public ImagingStudy setAvailability(InstanceAvailability value) { 
1880      if (value == null)
1881        this.availability = null;
1882      else {
1883        if (this.availability == null)
1884          this.availability = new Enumeration<InstanceAvailability>(new InstanceAvailabilityEnumFactory());
1885        this.availability.setValue(value);
1886      }
1887      return this;
1888    }
1889
1890    /**
1891     * @return {@link #modalityList} (A list of all the Series.ImageModality values that are actual acquisition modalities, i.e. those in the DICOM Context Group 29 (value set OID 1.2.840.10008.6.1.19).)
1892     */
1893    public List<Coding> getModalityList() { 
1894      if (this.modalityList == null)
1895        this.modalityList = new ArrayList<Coding>();
1896      return this.modalityList;
1897    }
1898
1899    /**
1900     * @return Returns a reference to <code>this</code> for easy method chaining
1901     */
1902    public ImagingStudy setModalityList(List<Coding> theModalityList) { 
1903      this.modalityList = theModalityList;
1904      return this;
1905    }
1906
1907    public boolean hasModalityList() { 
1908      if (this.modalityList == null)
1909        return false;
1910      for (Coding item : this.modalityList)
1911        if (!item.isEmpty())
1912          return true;
1913      return false;
1914    }
1915
1916    public Coding addModalityList() { //3
1917      Coding t = new Coding();
1918      if (this.modalityList == null)
1919        this.modalityList = new ArrayList<Coding>();
1920      this.modalityList.add(t);
1921      return t;
1922    }
1923
1924    public ImagingStudy addModalityList(Coding t) { //3
1925      if (t == null)
1926        return this;
1927      if (this.modalityList == null)
1928        this.modalityList = new ArrayList<Coding>();
1929      this.modalityList.add(t);
1930      return this;
1931    }
1932
1933    /**
1934     * @return The first repetition of repeating field {@link #modalityList}, creating it if it does not already exist
1935     */
1936    public Coding getModalityListFirstRep() { 
1937      if (getModalityList().isEmpty()) {
1938        addModalityList();
1939      }
1940      return getModalityList().get(0);
1941    }
1942
1943    /**
1944     * @return {@link #patient} (The patient imaged in the study.)
1945     */
1946    public Reference getPatient() { 
1947      if (this.patient == null)
1948        if (Configuration.errorOnAutoCreate())
1949          throw new Error("Attempt to auto-create ImagingStudy.patient");
1950        else if (Configuration.doAutoCreate())
1951          this.patient = new Reference(); // cc
1952      return this.patient;
1953    }
1954
1955    public boolean hasPatient() { 
1956      return this.patient != null && !this.patient.isEmpty();
1957    }
1958
1959    /**
1960     * @param value {@link #patient} (The patient imaged in the study.)
1961     */
1962    public ImagingStudy setPatient(Reference value)  { 
1963      this.patient = value;
1964      return this;
1965    }
1966
1967    /**
1968     * @return {@link #patient} 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 patient imaged in the study.)
1969     */
1970    public Patient getPatientTarget() { 
1971      if (this.patientTarget == null)
1972        if (Configuration.errorOnAutoCreate())
1973          throw new Error("Attempt to auto-create ImagingStudy.patient");
1974        else if (Configuration.doAutoCreate())
1975          this.patientTarget = new Patient(); // aa
1976      return this.patientTarget;
1977    }
1978
1979    /**
1980     * @param value {@link #patient} 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 patient imaged in the study.)
1981     */
1982    public ImagingStudy setPatientTarget(Patient value) { 
1983      this.patientTarget = value;
1984      return this;
1985    }
1986
1987    /**
1988     * @return {@link #context} (The encounter or episode at which the request is initiated.)
1989     */
1990    public Reference getContext() { 
1991      if (this.context == null)
1992        if (Configuration.errorOnAutoCreate())
1993          throw new Error("Attempt to auto-create ImagingStudy.context");
1994        else if (Configuration.doAutoCreate())
1995          this.context = new Reference(); // cc
1996      return this.context;
1997    }
1998
1999    public boolean hasContext() { 
2000      return this.context != null && !this.context.isEmpty();
2001    }
2002
2003    /**
2004     * @param value {@link #context} (The encounter or episode at which the request is initiated.)
2005     */
2006    public ImagingStudy setContext(Reference value)  { 
2007      this.context = value;
2008      return this;
2009    }
2010
2011    /**
2012     * @return {@link #context} 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 encounter or episode at which the request is initiated.)
2013     */
2014    public Resource getContextTarget() { 
2015      return this.contextTarget;
2016    }
2017
2018    /**
2019     * @param value {@link #context} 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 encounter or episode at which the request is initiated.)
2020     */
2021    public ImagingStudy setContextTarget(Resource value) { 
2022      this.contextTarget = value;
2023      return this;
2024    }
2025
2026    /**
2027     * @return {@link #started} (Date and time the study started.). This is the underlying object with id, value and extensions. The accessor "getStarted" gives direct access to the value
2028     */
2029    public DateTimeType getStartedElement() { 
2030      if (this.started == null)
2031        if (Configuration.errorOnAutoCreate())
2032          throw new Error("Attempt to auto-create ImagingStudy.started");
2033        else if (Configuration.doAutoCreate())
2034          this.started = new DateTimeType(); // bb
2035      return this.started;
2036    }
2037
2038    public boolean hasStartedElement() { 
2039      return this.started != null && !this.started.isEmpty();
2040    }
2041
2042    public boolean hasStarted() { 
2043      return this.started != null && !this.started.isEmpty();
2044    }
2045
2046    /**
2047     * @param value {@link #started} (Date and time the study started.). This is the underlying object with id, value and extensions. The accessor "getStarted" gives direct access to the value
2048     */
2049    public ImagingStudy setStartedElement(DateTimeType value) { 
2050      this.started = value;
2051      return this;
2052    }
2053
2054    /**
2055     * @return Date and time the study started.
2056     */
2057    public Date getStarted() { 
2058      return this.started == null ? null : this.started.getValue();
2059    }
2060
2061    /**
2062     * @param value Date and time the study started.
2063     */
2064    public ImagingStudy setStarted(Date value) { 
2065      if (value == null)
2066        this.started = null;
2067      else {
2068        if (this.started == null)
2069          this.started = new DateTimeType();
2070        this.started.setValue(value);
2071      }
2072      return this;
2073    }
2074
2075    /**
2076     * @return {@link #basedOn} (A list of the diagnostic requests that resulted in this imaging study being performed.)
2077     */
2078    public List<Reference> getBasedOn() { 
2079      if (this.basedOn == null)
2080        this.basedOn = new ArrayList<Reference>();
2081      return this.basedOn;
2082    }
2083
2084    /**
2085     * @return Returns a reference to <code>this</code> for easy method chaining
2086     */
2087    public ImagingStudy setBasedOn(List<Reference> theBasedOn) { 
2088      this.basedOn = theBasedOn;
2089      return this;
2090    }
2091
2092    public boolean hasBasedOn() { 
2093      if (this.basedOn == null)
2094        return false;
2095      for (Reference item : this.basedOn)
2096        if (!item.isEmpty())
2097          return true;
2098      return false;
2099    }
2100
2101    public Reference addBasedOn() { //3
2102      Reference t = new Reference();
2103      if (this.basedOn == null)
2104        this.basedOn = new ArrayList<Reference>();
2105      this.basedOn.add(t);
2106      return t;
2107    }
2108
2109    public ImagingStudy addBasedOn(Reference t) { //3
2110      if (t == null)
2111        return this;
2112      if (this.basedOn == null)
2113        this.basedOn = new ArrayList<Reference>();
2114      this.basedOn.add(t);
2115      return this;
2116    }
2117
2118    /**
2119     * @return The first repetition of repeating field {@link #basedOn}, creating it if it does not already exist
2120     */
2121    public Reference getBasedOnFirstRep() { 
2122      if (getBasedOn().isEmpty()) {
2123        addBasedOn();
2124      }
2125      return getBasedOn().get(0);
2126    }
2127
2128    /**
2129     * @deprecated Use Reference#setResource(IBaseResource) instead
2130     */
2131    @Deprecated
2132    public List<Resource> getBasedOnTarget() { 
2133      if (this.basedOnTarget == null)
2134        this.basedOnTarget = new ArrayList<Resource>();
2135      return this.basedOnTarget;
2136    }
2137
2138    /**
2139     * @return {@link #referrer} (The requesting/referring physician.)
2140     */
2141    public Reference getReferrer() { 
2142      if (this.referrer == null)
2143        if (Configuration.errorOnAutoCreate())
2144          throw new Error("Attempt to auto-create ImagingStudy.referrer");
2145        else if (Configuration.doAutoCreate())
2146          this.referrer = new Reference(); // cc
2147      return this.referrer;
2148    }
2149
2150    public boolean hasReferrer() { 
2151      return this.referrer != null && !this.referrer.isEmpty();
2152    }
2153
2154    /**
2155     * @param value {@link #referrer} (The requesting/referring physician.)
2156     */
2157    public ImagingStudy setReferrer(Reference value)  { 
2158      this.referrer = value;
2159      return this;
2160    }
2161
2162    /**
2163     * @return {@link #referrer} 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 requesting/referring physician.)
2164     */
2165    public Practitioner getReferrerTarget() { 
2166      if (this.referrerTarget == null)
2167        if (Configuration.errorOnAutoCreate())
2168          throw new Error("Attempt to auto-create ImagingStudy.referrer");
2169        else if (Configuration.doAutoCreate())
2170          this.referrerTarget = new Practitioner(); // aa
2171      return this.referrerTarget;
2172    }
2173
2174    /**
2175     * @param value {@link #referrer} 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 requesting/referring physician.)
2176     */
2177    public ImagingStudy setReferrerTarget(Practitioner value) { 
2178      this.referrerTarget = value;
2179      return this;
2180    }
2181
2182    /**
2183     * @return {@link #interpreter} (Who read the study and interpreted the images or other content.)
2184     */
2185    public List<Reference> getInterpreter() { 
2186      if (this.interpreter == null)
2187        this.interpreter = new ArrayList<Reference>();
2188      return this.interpreter;
2189    }
2190
2191    /**
2192     * @return Returns a reference to <code>this</code> for easy method chaining
2193     */
2194    public ImagingStudy setInterpreter(List<Reference> theInterpreter) { 
2195      this.interpreter = theInterpreter;
2196      return this;
2197    }
2198
2199    public boolean hasInterpreter() { 
2200      if (this.interpreter == null)
2201        return false;
2202      for (Reference item : this.interpreter)
2203        if (!item.isEmpty())
2204          return true;
2205      return false;
2206    }
2207
2208    public Reference addInterpreter() { //3
2209      Reference t = new Reference();
2210      if (this.interpreter == null)
2211        this.interpreter = new ArrayList<Reference>();
2212      this.interpreter.add(t);
2213      return t;
2214    }
2215
2216    public ImagingStudy addInterpreter(Reference t) { //3
2217      if (t == null)
2218        return this;
2219      if (this.interpreter == null)
2220        this.interpreter = new ArrayList<Reference>();
2221      this.interpreter.add(t);
2222      return this;
2223    }
2224
2225    /**
2226     * @return The first repetition of repeating field {@link #interpreter}, creating it if it does not already exist
2227     */
2228    public Reference getInterpreterFirstRep() { 
2229      if (getInterpreter().isEmpty()) {
2230        addInterpreter();
2231      }
2232      return getInterpreter().get(0);
2233    }
2234
2235    /**
2236     * @deprecated Use Reference#setResource(IBaseResource) instead
2237     */
2238    @Deprecated
2239    public List<Practitioner> getInterpreterTarget() { 
2240      if (this.interpreterTarget == null)
2241        this.interpreterTarget = new ArrayList<Practitioner>();
2242      return this.interpreterTarget;
2243    }
2244
2245    /**
2246     * @deprecated Use Reference#setResource(IBaseResource) instead
2247     */
2248    @Deprecated
2249    public Practitioner addInterpreterTarget() { 
2250      Practitioner r = new Practitioner();
2251      if (this.interpreterTarget == null)
2252        this.interpreterTarget = new ArrayList<Practitioner>();
2253      this.interpreterTarget.add(r);
2254      return r;
2255    }
2256
2257    /**
2258     * @return {@link #endpoint} (The network service providing access (e.g., query, view, or retrieval) for the study. See implementation notes for information about using DICOM endpoints. A study-level endpoint applies to each series in the study, unless overridden by a series-level endpoint with the same Endpoint.type.)
2259     */
2260    public List<Reference> getEndpoint() { 
2261      if (this.endpoint == null)
2262        this.endpoint = new ArrayList<Reference>();
2263      return this.endpoint;
2264    }
2265
2266    /**
2267     * @return Returns a reference to <code>this</code> for easy method chaining
2268     */
2269    public ImagingStudy setEndpoint(List<Reference> theEndpoint) { 
2270      this.endpoint = theEndpoint;
2271      return this;
2272    }
2273
2274    public boolean hasEndpoint() { 
2275      if (this.endpoint == null)
2276        return false;
2277      for (Reference item : this.endpoint)
2278        if (!item.isEmpty())
2279          return true;
2280      return false;
2281    }
2282
2283    public Reference addEndpoint() { //3
2284      Reference t = new Reference();
2285      if (this.endpoint == null)
2286        this.endpoint = new ArrayList<Reference>();
2287      this.endpoint.add(t);
2288      return t;
2289    }
2290
2291    public ImagingStudy addEndpoint(Reference t) { //3
2292      if (t == null)
2293        return this;
2294      if (this.endpoint == null)
2295        this.endpoint = new ArrayList<Reference>();
2296      this.endpoint.add(t);
2297      return this;
2298    }
2299
2300    /**
2301     * @return The first repetition of repeating field {@link #endpoint}, creating it if it does not already exist
2302     */
2303    public Reference getEndpointFirstRep() { 
2304      if (getEndpoint().isEmpty()) {
2305        addEndpoint();
2306      }
2307      return getEndpoint().get(0);
2308    }
2309
2310    /**
2311     * @deprecated Use Reference#setResource(IBaseResource) instead
2312     */
2313    @Deprecated
2314    public List<Endpoint> getEndpointTarget() { 
2315      if (this.endpointTarget == null)
2316        this.endpointTarget = new ArrayList<Endpoint>();
2317      return this.endpointTarget;
2318    }
2319
2320    /**
2321     * @deprecated Use Reference#setResource(IBaseResource) instead
2322     */
2323    @Deprecated
2324    public Endpoint addEndpointTarget() { 
2325      Endpoint r = new Endpoint();
2326      if (this.endpointTarget == null)
2327        this.endpointTarget = new ArrayList<Endpoint>();
2328      this.endpointTarget.add(r);
2329      return r;
2330    }
2331
2332    /**
2333     * @return {@link #numberOfSeries} (Number of Series in the Study. This value given may be larger than the number of series elements this Resource contains due to resource availability, security, or other factors. This element should be present if any series elements are present.). This is the underlying object with id, value and extensions. The accessor "getNumberOfSeries" gives direct access to the value
2334     */
2335    public UnsignedIntType getNumberOfSeriesElement() { 
2336      if (this.numberOfSeries == null)
2337        if (Configuration.errorOnAutoCreate())
2338          throw new Error("Attempt to auto-create ImagingStudy.numberOfSeries");
2339        else if (Configuration.doAutoCreate())
2340          this.numberOfSeries = new UnsignedIntType(); // bb
2341      return this.numberOfSeries;
2342    }
2343
2344    public boolean hasNumberOfSeriesElement() { 
2345      return this.numberOfSeries != null && !this.numberOfSeries.isEmpty();
2346    }
2347
2348    public boolean hasNumberOfSeries() { 
2349      return this.numberOfSeries != null && !this.numberOfSeries.isEmpty();
2350    }
2351
2352    /**
2353     * @param value {@link #numberOfSeries} (Number of Series in the Study. This value given may be larger than the number of series elements this Resource contains due to resource availability, security, or other factors. This element should be present if any series elements are present.). This is the underlying object with id, value and extensions. The accessor "getNumberOfSeries" gives direct access to the value
2354     */
2355    public ImagingStudy setNumberOfSeriesElement(UnsignedIntType value) { 
2356      this.numberOfSeries = value;
2357      return this;
2358    }
2359
2360    /**
2361     * @return Number of Series in the Study. This value given may be larger than the number of series elements this Resource contains due to resource availability, security, or other factors. This element should be present if any series elements are present.
2362     */
2363    public int getNumberOfSeries() { 
2364      return this.numberOfSeries == null || this.numberOfSeries.isEmpty() ? 0 : this.numberOfSeries.getValue();
2365    }
2366
2367    /**
2368     * @param value Number of Series in the Study. This value given may be larger than the number of series elements this Resource contains due to resource availability, security, or other factors. This element should be present if any series elements are present.
2369     */
2370    public ImagingStudy setNumberOfSeries(int value) { 
2371        if (this.numberOfSeries == null)
2372          this.numberOfSeries = new UnsignedIntType();
2373        this.numberOfSeries.setValue(value);
2374      return this;
2375    }
2376
2377    /**
2378     * @return {@link #numberOfInstances} (Number of SOP Instances in Study. This value given may be larger than the number of instance elements this resource contains due to resource availability, security, or other factors. This element should be present if any instance elements are present.). This is the underlying object with id, value and extensions. The accessor "getNumberOfInstances" gives direct access to the value
2379     */
2380    public UnsignedIntType getNumberOfInstancesElement() { 
2381      if (this.numberOfInstances == null)
2382        if (Configuration.errorOnAutoCreate())
2383          throw new Error("Attempt to auto-create ImagingStudy.numberOfInstances");
2384        else if (Configuration.doAutoCreate())
2385          this.numberOfInstances = new UnsignedIntType(); // bb
2386      return this.numberOfInstances;
2387    }
2388
2389    public boolean hasNumberOfInstancesElement() { 
2390      return this.numberOfInstances != null && !this.numberOfInstances.isEmpty();
2391    }
2392
2393    public boolean hasNumberOfInstances() { 
2394      return this.numberOfInstances != null && !this.numberOfInstances.isEmpty();
2395    }
2396
2397    /**
2398     * @param value {@link #numberOfInstances} (Number of SOP Instances in Study. This value given may be larger than the number of instance elements this resource contains due to resource availability, security, or other factors. This element should be present if any instance elements are present.). This is the underlying object with id, value and extensions. The accessor "getNumberOfInstances" gives direct access to the value
2399     */
2400    public ImagingStudy setNumberOfInstancesElement(UnsignedIntType value) { 
2401      this.numberOfInstances = value;
2402      return this;
2403    }
2404
2405    /**
2406     * @return Number of SOP Instances in Study. This value given may be larger than the number of instance elements this resource contains due to resource availability, security, or other factors. This element should be present if any instance elements are present.
2407     */
2408    public int getNumberOfInstances() { 
2409      return this.numberOfInstances == null || this.numberOfInstances.isEmpty() ? 0 : this.numberOfInstances.getValue();
2410    }
2411
2412    /**
2413     * @param value Number of SOP Instances in Study. This value given may be larger than the number of instance elements this resource contains due to resource availability, security, or other factors. This element should be present if any instance elements are present.
2414     */
2415    public ImagingStudy setNumberOfInstances(int value) { 
2416        if (this.numberOfInstances == null)
2417          this.numberOfInstances = new UnsignedIntType();
2418        this.numberOfInstances.setValue(value);
2419      return this;
2420    }
2421
2422    /**
2423     * @return {@link #procedureReference} (A reference to the performed Procedure.)
2424     */
2425    public List<Reference> getProcedureReference() { 
2426      if (this.procedureReference == null)
2427        this.procedureReference = new ArrayList<Reference>();
2428      return this.procedureReference;
2429    }
2430
2431    /**
2432     * @return Returns a reference to <code>this</code> for easy method chaining
2433     */
2434    public ImagingStudy setProcedureReference(List<Reference> theProcedureReference) { 
2435      this.procedureReference = theProcedureReference;
2436      return this;
2437    }
2438
2439    public boolean hasProcedureReference() { 
2440      if (this.procedureReference == null)
2441        return false;
2442      for (Reference item : this.procedureReference)
2443        if (!item.isEmpty())
2444          return true;
2445      return false;
2446    }
2447
2448    public Reference addProcedureReference() { //3
2449      Reference t = new Reference();
2450      if (this.procedureReference == null)
2451        this.procedureReference = new ArrayList<Reference>();
2452      this.procedureReference.add(t);
2453      return t;
2454    }
2455
2456    public ImagingStudy addProcedureReference(Reference t) { //3
2457      if (t == null)
2458        return this;
2459      if (this.procedureReference == null)
2460        this.procedureReference = new ArrayList<Reference>();
2461      this.procedureReference.add(t);
2462      return this;
2463    }
2464
2465    /**
2466     * @return The first repetition of repeating field {@link #procedureReference}, creating it if it does not already exist
2467     */
2468    public Reference getProcedureReferenceFirstRep() { 
2469      if (getProcedureReference().isEmpty()) {
2470        addProcedureReference();
2471      }
2472      return getProcedureReference().get(0);
2473    }
2474
2475    /**
2476     * @deprecated Use Reference#setResource(IBaseResource) instead
2477     */
2478    @Deprecated
2479    public List<Procedure> getProcedureReferenceTarget() { 
2480      if (this.procedureReferenceTarget == null)
2481        this.procedureReferenceTarget = new ArrayList<Procedure>();
2482      return this.procedureReferenceTarget;
2483    }
2484
2485    /**
2486     * @deprecated Use Reference#setResource(IBaseResource) instead
2487     */
2488    @Deprecated
2489    public Procedure addProcedureReferenceTarget() { 
2490      Procedure r = new Procedure();
2491      if (this.procedureReferenceTarget == null)
2492        this.procedureReferenceTarget = new ArrayList<Procedure>();
2493      this.procedureReferenceTarget.add(r);
2494      return r;
2495    }
2496
2497    /**
2498     * @return {@link #procedureCode} (The code for the performed procedure type.)
2499     */
2500    public List<CodeableConcept> getProcedureCode() { 
2501      if (this.procedureCode == null)
2502        this.procedureCode = new ArrayList<CodeableConcept>();
2503      return this.procedureCode;
2504    }
2505
2506    /**
2507     * @return Returns a reference to <code>this</code> for easy method chaining
2508     */
2509    public ImagingStudy setProcedureCode(List<CodeableConcept> theProcedureCode) { 
2510      this.procedureCode = theProcedureCode;
2511      return this;
2512    }
2513
2514    public boolean hasProcedureCode() { 
2515      if (this.procedureCode == null)
2516        return false;
2517      for (CodeableConcept item : this.procedureCode)
2518        if (!item.isEmpty())
2519          return true;
2520      return false;
2521    }
2522
2523    public CodeableConcept addProcedureCode() { //3
2524      CodeableConcept t = new CodeableConcept();
2525      if (this.procedureCode == null)
2526        this.procedureCode = new ArrayList<CodeableConcept>();
2527      this.procedureCode.add(t);
2528      return t;
2529    }
2530
2531    public ImagingStudy addProcedureCode(CodeableConcept t) { //3
2532      if (t == null)
2533        return this;
2534      if (this.procedureCode == null)
2535        this.procedureCode = new ArrayList<CodeableConcept>();
2536      this.procedureCode.add(t);
2537      return this;
2538    }
2539
2540    /**
2541     * @return The first repetition of repeating field {@link #procedureCode}, creating it if it does not already exist
2542     */
2543    public CodeableConcept getProcedureCodeFirstRep() { 
2544      if (getProcedureCode().isEmpty()) {
2545        addProcedureCode();
2546      }
2547      return getProcedureCode().get(0);
2548    }
2549
2550    /**
2551     * @return {@link #reason} (Description of clinical condition indicating why the ImagingStudy was requested.)
2552     */
2553    public CodeableConcept getReason() { 
2554      if (this.reason == null)
2555        if (Configuration.errorOnAutoCreate())
2556          throw new Error("Attempt to auto-create ImagingStudy.reason");
2557        else if (Configuration.doAutoCreate())
2558          this.reason = new CodeableConcept(); // cc
2559      return this.reason;
2560    }
2561
2562    public boolean hasReason() { 
2563      return this.reason != null && !this.reason.isEmpty();
2564    }
2565
2566    /**
2567     * @param value {@link #reason} (Description of clinical condition indicating why the ImagingStudy was requested.)
2568     */
2569    public ImagingStudy setReason(CodeableConcept value)  { 
2570      this.reason = value;
2571      return this;
2572    }
2573
2574    /**
2575     * @return {@link #description} (Institution-generated description or classification of the Study performed.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
2576     */
2577    public StringType getDescriptionElement() { 
2578      if (this.description == null)
2579        if (Configuration.errorOnAutoCreate())
2580          throw new Error("Attempt to auto-create ImagingStudy.description");
2581        else if (Configuration.doAutoCreate())
2582          this.description = new StringType(); // bb
2583      return this.description;
2584    }
2585
2586    public boolean hasDescriptionElement() { 
2587      return this.description != null && !this.description.isEmpty();
2588    }
2589
2590    public boolean hasDescription() { 
2591      return this.description != null && !this.description.isEmpty();
2592    }
2593
2594    /**
2595     * @param value {@link #description} (Institution-generated description or classification of the Study performed.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
2596     */
2597    public ImagingStudy setDescriptionElement(StringType value) { 
2598      this.description = value;
2599      return this;
2600    }
2601
2602    /**
2603     * @return Institution-generated description or classification of the Study performed.
2604     */
2605    public String getDescription() { 
2606      return this.description == null ? null : this.description.getValue();
2607    }
2608
2609    /**
2610     * @param value Institution-generated description or classification of the Study performed.
2611     */
2612    public ImagingStudy setDescription(String value) { 
2613      if (Utilities.noString(value))
2614        this.description = null;
2615      else {
2616        if (this.description == null)
2617          this.description = new StringType();
2618        this.description.setValue(value);
2619      }
2620      return this;
2621    }
2622
2623    /**
2624     * @return {@link #series} (Each study has one or more series of images or other content.)
2625     */
2626    public List<ImagingStudySeriesComponent> getSeries() { 
2627      if (this.series == null)
2628        this.series = new ArrayList<ImagingStudySeriesComponent>();
2629      return this.series;
2630    }
2631
2632    /**
2633     * @return Returns a reference to <code>this</code> for easy method chaining
2634     */
2635    public ImagingStudy setSeries(List<ImagingStudySeriesComponent> theSeries) { 
2636      this.series = theSeries;
2637      return this;
2638    }
2639
2640    public boolean hasSeries() { 
2641      if (this.series == null)
2642        return false;
2643      for (ImagingStudySeriesComponent item : this.series)
2644        if (!item.isEmpty())
2645          return true;
2646      return false;
2647    }
2648
2649    public ImagingStudySeriesComponent addSeries() { //3
2650      ImagingStudySeriesComponent t = new ImagingStudySeriesComponent();
2651      if (this.series == null)
2652        this.series = new ArrayList<ImagingStudySeriesComponent>();
2653      this.series.add(t);
2654      return t;
2655    }
2656
2657    public ImagingStudy addSeries(ImagingStudySeriesComponent t) { //3
2658      if (t == null)
2659        return this;
2660      if (this.series == null)
2661        this.series = new ArrayList<ImagingStudySeriesComponent>();
2662      this.series.add(t);
2663      return this;
2664    }
2665
2666    /**
2667     * @return The first repetition of repeating field {@link #series}, creating it if it does not already exist
2668     */
2669    public ImagingStudySeriesComponent getSeriesFirstRep() { 
2670      if (getSeries().isEmpty()) {
2671        addSeries();
2672      }
2673      return getSeries().get(0);
2674    }
2675
2676      protected void listChildren(List<Property> children) {
2677        super.listChildren(children);
2678        children.add(new Property("uid", "oid", "Formal identifier for the study.", 0, 1, uid));
2679        children.add(new Property("accession", "Identifier", "Accession Number is an identifier related to some aspect of imaging workflow and data management. Usage may vary across different institutions.  See for instance [IHE Radiology Technical Framework Volume 1 Appendix A](http://www.ihe.net/uploadedFiles/Documents/Radiology/IHE_RAD_TF_Rev13.0_Vol1_FT_2014-07-30.pdf).", 0, 1, accession));
2680        children.add(new Property("identifier", "Identifier", "Other identifiers for the study.", 0, java.lang.Integer.MAX_VALUE, identifier));
2681        children.add(new Property("availability", "code", "Availability of study (online, offline, or nearline).", 0, 1, availability));
2682        children.add(new Property("modalityList", "Coding", "A list of all the Series.ImageModality values that are actual acquisition modalities, i.e. those in the DICOM Context Group 29 (value set OID 1.2.840.10008.6.1.19).", 0, java.lang.Integer.MAX_VALUE, modalityList));
2683        children.add(new Property("patient", "Reference(Patient)", "The patient imaged in the study.", 0, 1, patient));
2684        children.add(new Property("context", "Reference(Encounter|EpisodeOfCare)", "The encounter or episode at which the request is initiated.", 0, 1, context));
2685        children.add(new Property("started", "dateTime", "Date and time the study started.", 0, 1, started));
2686        children.add(new Property("basedOn", "Reference(ReferralRequest|CarePlan|ProcedureRequest)", "A list of the diagnostic requests that resulted in this imaging study being performed.", 0, java.lang.Integer.MAX_VALUE, basedOn));
2687        children.add(new Property("referrer", "Reference(Practitioner)", "The requesting/referring physician.", 0, 1, referrer));
2688        children.add(new Property("interpreter", "Reference(Practitioner)", "Who read the study and interpreted the images or other content.", 0, java.lang.Integer.MAX_VALUE, interpreter));
2689        children.add(new Property("endpoint", "Reference(Endpoint)", "The network service providing access (e.g., query, view, or retrieval) for the study. See implementation notes for information about using DICOM endpoints. A study-level endpoint applies to each series in the study, unless overridden by a series-level endpoint with the same Endpoint.type.", 0, java.lang.Integer.MAX_VALUE, endpoint));
2690        children.add(new Property("numberOfSeries", "unsignedInt", "Number of Series in the Study. This value given may be larger than the number of series elements this Resource contains due to resource availability, security, or other factors. This element should be present if any series elements are present.", 0, 1, numberOfSeries));
2691        children.add(new Property("numberOfInstances", "unsignedInt", "Number of SOP Instances in Study. This value given may be larger than the number of instance elements this resource contains due to resource availability, security, or other factors. This element should be present if any instance elements are present.", 0, 1, numberOfInstances));
2692        children.add(new Property("procedureReference", "Reference(Procedure)", "A reference to the performed Procedure.", 0, java.lang.Integer.MAX_VALUE, procedureReference));
2693        children.add(new Property("procedureCode", "CodeableConcept", "The code for the performed procedure type.", 0, java.lang.Integer.MAX_VALUE, procedureCode));
2694        children.add(new Property("reason", "CodeableConcept", "Description of clinical condition indicating why the ImagingStudy was requested.", 0, 1, reason));
2695        children.add(new Property("description", "string", "Institution-generated description or classification of the Study performed.", 0, 1, description));
2696        children.add(new Property("series", "", "Each study has one or more series of images or other content.", 0, java.lang.Integer.MAX_VALUE, series));
2697      }
2698
2699      @Override
2700      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2701        switch (_hash) {
2702        case 115792: /*uid*/  return new Property("uid", "oid", "Formal identifier for the study.", 0, 1, uid);
2703        case -2115028956: /*accession*/  return new Property("accession", "Identifier", "Accession Number is an identifier related to some aspect of imaging workflow and data management. Usage may vary across different institutions.  See for instance [IHE Radiology Technical Framework Volume 1 Appendix A](http://www.ihe.net/uploadedFiles/Documents/Radiology/IHE_RAD_TF_Rev13.0_Vol1_FT_2014-07-30.pdf).", 0, 1, accession);
2704        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "Other identifiers for the study.", 0, java.lang.Integer.MAX_VALUE, identifier);
2705        case 1997542747: /*availability*/  return new Property("availability", "code", "Availability of study (online, offline, or nearline).", 0, 1, availability);
2706        case -1030238433: /*modalityList*/  return new Property("modalityList", "Coding", "A list of all the Series.ImageModality values that are actual acquisition modalities, i.e. those in the DICOM Context Group 29 (value set OID 1.2.840.10008.6.1.19).", 0, java.lang.Integer.MAX_VALUE, modalityList);
2707        case -791418107: /*patient*/  return new Property("patient", "Reference(Patient)", "The patient imaged in the study.", 0, 1, patient);
2708        case 951530927: /*context*/  return new Property("context", "Reference(Encounter|EpisodeOfCare)", "The encounter or episode at which the request is initiated.", 0, 1, context);
2709        case -1897185151: /*started*/  return new Property("started", "dateTime", "Date and time the study started.", 0, 1, started);
2710        case -332612366: /*basedOn*/  return new Property("basedOn", "Reference(ReferralRequest|CarePlan|ProcedureRequest)", "A list of the diagnostic requests that resulted in this imaging study being performed.", 0, java.lang.Integer.MAX_VALUE, basedOn);
2711        case -722568161: /*referrer*/  return new Property("referrer", "Reference(Practitioner)", "The requesting/referring physician.", 0, 1, referrer);
2712        case -2008009094: /*interpreter*/  return new Property("interpreter", "Reference(Practitioner)", "Who read the study and interpreted the images or other content.", 0, java.lang.Integer.MAX_VALUE, interpreter);
2713        case 1741102485: /*endpoint*/  return new Property("endpoint", "Reference(Endpoint)", "The network service providing access (e.g., query, view, or retrieval) for the study. See implementation notes for information about using DICOM endpoints. A study-level endpoint applies to each series in the study, unless overridden by a series-level endpoint with the same Endpoint.type.", 0, java.lang.Integer.MAX_VALUE, endpoint);
2714        case 1920000407: /*numberOfSeries*/  return new Property("numberOfSeries", "unsignedInt", "Number of Series in the Study. This value given may be larger than the number of series elements this Resource contains due to resource availability, security, or other factors. This element should be present if any series elements are present.", 0, 1, numberOfSeries);
2715        case -1043544226: /*numberOfInstances*/  return new Property("numberOfInstances", "unsignedInt", "Number of SOP Instances in Study. This value given may be larger than the number of instance elements this resource contains due to resource availability, security, or other factors. This element should be present if any instance elements are present.", 0, 1, numberOfInstances);
2716        case 881809848: /*procedureReference*/  return new Property("procedureReference", "Reference(Procedure)", "A reference to the performed Procedure.", 0, java.lang.Integer.MAX_VALUE, procedureReference);
2717        case -698023072: /*procedureCode*/  return new Property("procedureCode", "CodeableConcept", "The code for the performed procedure type.", 0, java.lang.Integer.MAX_VALUE, procedureCode);
2718        case -934964668: /*reason*/  return new Property("reason", "CodeableConcept", "Description of clinical condition indicating why the ImagingStudy was requested.", 0, 1, reason);
2719        case -1724546052: /*description*/  return new Property("description", "string", "Institution-generated description or classification of the Study performed.", 0, 1, description);
2720        case -905838985: /*series*/  return new Property("series", "", "Each study has one or more series of images or other content.", 0, java.lang.Integer.MAX_VALUE, series);
2721        default: return super.getNamedProperty(_hash, _name, _checkValid);
2722        }
2723
2724      }
2725
2726      @Override
2727      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2728        switch (hash) {
2729        case 115792: /*uid*/ return this.uid == null ? new Base[0] : new Base[] {this.uid}; // OidType
2730        case -2115028956: /*accession*/ return this.accession == null ? new Base[0] : new Base[] {this.accession}; // Identifier
2731        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
2732        case 1997542747: /*availability*/ return this.availability == null ? new Base[0] : new Base[] {this.availability}; // Enumeration<InstanceAvailability>
2733        case -1030238433: /*modalityList*/ return this.modalityList == null ? new Base[0] : this.modalityList.toArray(new Base[this.modalityList.size()]); // Coding
2734        case -791418107: /*patient*/ return this.patient == null ? new Base[0] : new Base[] {this.patient}; // Reference
2735        case 951530927: /*context*/ return this.context == null ? new Base[0] : new Base[] {this.context}; // Reference
2736        case -1897185151: /*started*/ return this.started == null ? new Base[0] : new Base[] {this.started}; // DateTimeType
2737        case -332612366: /*basedOn*/ return this.basedOn == null ? new Base[0] : this.basedOn.toArray(new Base[this.basedOn.size()]); // Reference
2738        case -722568161: /*referrer*/ return this.referrer == null ? new Base[0] : new Base[] {this.referrer}; // Reference
2739        case -2008009094: /*interpreter*/ return this.interpreter == null ? new Base[0] : this.interpreter.toArray(new Base[this.interpreter.size()]); // Reference
2740        case 1741102485: /*endpoint*/ return this.endpoint == null ? new Base[0] : this.endpoint.toArray(new Base[this.endpoint.size()]); // Reference
2741        case 1920000407: /*numberOfSeries*/ return this.numberOfSeries == null ? new Base[0] : new Base[] {this.numberOfSeries}; // UnsignedIntType
2742        case -1043544226: /*numberOfInstances*/ return this.numberOfInstances == null ? new Base[0] : new Base[] {this.numberOfInstances}; // UnsignedIntType
2743        case 881809848: /*procedureReference*/ return this.procedureReference == null ? new Base[0] : this.procedureReference.toArray(new Base[this.procedureReference.size()]); // Reference
2744        case -698023072: /*procedureCode*/ return this.procedureCode == null ? new Base[0] : this.procedureCode.toArray(new Base[this.procedureCode.size()]); // CodeableConcept
2745        case -934964668: /*reason*/ return this.reason == null ? new Base[0] : new Base[] {this.reason}; // CodeableConcept
2746        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // StringType
2747        case -905838985: /*series*/ return this.series == null ? new Base[0] : this.series.toArray(new Base[this.series.size()]); // ImagingStudySeriesComponent
2748        default: return super.getProperty(hash, name, checkValid);
2749        }
2750
2751      }
2752
2753      @Override
2754      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2755        switch (hash) {
2756        case 115792: // uid
2757          this.uid = castToOid(value); // OidType
2758          return value;
2759        case -2115028956: // accession
2760          this.accession = castToIdentifier(value); // Identifier
2761          return value;
2762        case -1618432855: // identifier
2763          this.getIdentifier().add(castToIdentifier(value)); // Identifier
2764          return value;
2765        case 1997542747: // availability
2766          value = new InstanceAvailabilityEnumFactory().fromType(castToCode(value));
2767          this.availability = (Enumeration) value; // Enumeration<InstanceAvailability>
2768          return value;
2769        case -1030238433: // modalityList
2770          this.getModalityList().add(castToCoding(value)); // Coding
2771          return value;
2772        case -791418107: // patient
2773          this.patient = castToReference(value); // Reference
2774          return value;
2775        case 951530927: // context
2776          this.context = castToReference(value); // Reference
2777          return value;
2778        case -1897185151: // started
2779          this.started = castToDateTime(value); // DateTimeType
2780          return value;
2781        case -332612366: // basedOn
2782          this.getBasedOn().add(castToReference(value)); // Reference
2783          return value;
2784        case -722568161: // referrer
2785          this.referrer = castToReference(value); // Reference
2786          return value;
2787        case -2008009094: // interpreter
2788          this.getInterpreter().add(castToReference(value)); // Reference
2789          return value;
2790        case 1741102485: // endpoint
2791          this.getEndpoint().add(castToReference(value)); // Reference
2792          return value;
2793        case 1920000407: // numberOfSeries
2794          this.numberOfSeries = castToUnsignedInt(value); // UnsignedIntType
2795          return value;
2796        case -1043544226: // numberOfInstances
2797          this.numberOfInstances = castToUnsignedInt(value); // UnsignedIntType
2798          return value;
2799        case 881809848: // procedureReference
2800          this.getProcedureReference().add(castToReference(value)); // Reference
2801          return value;
2802        case -698023072: // procedureCode
2803          this.getProcedureCode().add(castToCodeableConcept(value)); // CodeableConcept
2804          return value;
2805        case -934964668: // reason
2806          this.reason = castToCodeableConcept(value); // CodeableConcept
2807          return value;
2808        case -1724546052: // description
2809          this.description = castToString(value); // StringType
2810          return value;
2811        case -905838985: // series
2812          this.getSeries().add((ImagingStudySeriesComponent) value); // ImagingStudySeriesComponent
2813          return value;
2814        default: return super.setProperty(hash, name, value);
2815        }
2816
2817      }
2818
2819      @Override
2820      public Base setProperty(String name, Base value) throws FHIRException {
2821        if (name.equals("uid")) {
2822          this.uid = castToOid(value); // OidType
2823        } else if (name.equals("accession")) {
2824          this.accession = castToIdentifier(value); // Identifier
2825        } else if (name.equals("identifier")) {
2826          this.getIdentifier().add(castToIdentifier(value));
2827        } else if (name.equals("availability")) {
2828          value = new InstanceAvailabilityEnumFactory().fromType(castToCode(value));
2829          this.availability = (Enumeration) value; // Enumeration<InstanceAvailability>
2830        } else if (name.equals("modalityList")) {
2831          this.getModalityList().add(castToCoding(value));
2832        } else if (name.equals("patient")) {
2833          this.patient = castToReference(value); // Reference
2834        } else if (name.equals("context")) {
2835          this.context = castToReference(value); // Reference
2836        } else if (name.equals("started")) {
2837          this.started = castToDateTime(value); // DateTimeType
2838        } else if (name.equals("basedOn")) {
2839          this.getBasedOn().add(castToReference(value));
2840        } else if (name.equals("referrer")) {
2841          this.referrer = castToReference(value); // Reference
2842        } else if (name.equals("interpreter")) {
2843          this.getInterpreter().add(castToReference(value));
2844        } else if (name.equals("endpoint")) {
2845          this.getEndpoint().add(castToReference(value));
2846        } else if (name.equals("numberOfSeries")) {
2847          this.numberOfSeries = castToUnsignedInt(value); // UnsignedIntType
2848        } else if (name.equals("numberOfInstances")) {
2849          this.numberOfInstances = castToUnsignedInt(value); // UnsignedIntType
2850        } else if (name.equals("procedureReference")) {
2851          this.getProcedureReference().add(castToReference(value));
2852        } else if (name.equals("procedureCode")) {
2853          this.getProcedureCode().add(castToCodeableConcept(value));
2854        } else if (name.equals("reason")) {
2855          this.reason = castToCodeableConcept(value); // CodeableConcept
2856        } else if (name.equals("description")) {
2857          this.description = castToString(value); // StringType
2858        } else if (name.equals("series")) {
2859          this.getSeries().add((ImagingStudySeriesComponent) value);
2860        } else
2861          return super.setProperty(name, value);
2862        return value;
2863      }
2864
2865      @Override
2866      public Base makeProperty(int hash, String name) throws FHIRException {
2867        switch (hash) {
2868        case 115792:  return getUidElement();
2869        case -2115028956:  return getAccession(); 
2870        case -1618432855:  return addIdentifier(); 
2871        case 1997542747:  return getAvailabilityElement();
2872        case -1030238433:  return addModalityList(); 
2873        case -791418107:  return getPatient(); 
2874        case 951530927:  return getContext(); 
2875        case -1897185151:  return getStartedElement();
2876        case -332612366:  return addBasedOn(); 
2877        case -722568161:  return getReferrer(); 
2878        case -2008009094:  return addInterpreter(); 
2879        case 1741102485:  return addEndpoint(); 
2880        case 1920000407:  return getNumberOfSeriesElement();
2881        case -1043544226:  return getNumberOfInstancesElement();
2882        case 881809848:  return addProcedureReference(); 
2883        case -698023072:  return addProcedureCode(); 
2884        case -934964668:  return getReason(); 
2885        case -1724546052:  return getDescriptionElement();
2886        case -905838985:  return addSeries(); 
2887        default: return super.makeProperty(hash, name);
2888        }
2889
2890      }
2891
2892      @Override
2893      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2894        switch (hash) {
2895        case 115792: /*uid*/ return new String[] {"oid"};
2896        case -2115028956: /*accession*/ return new String[] {"Identifier"};
2897        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
2898        case 1997542747: /*availability*/ return new String[] {"code"};
2899        case -1030238433: /*modalityList*/ return new String[] {"Coding"};
2900        case -791418107: /*patient*/ return new String[] {"Reference"};
2901        case 951530927: /*context*/ return new String[] {"Reference"};
2902        case -1897185151: /*started*/ return new String[] {"dateTime"};
2903        case -332612366: /*basedOn*/ return new String[] {"Reference"};
2904        case -722568161: /*referrer*/ return new String[] {"Reference"};
2905        case -2008009094: /*interpreter*/ return new String[] {"Reference"};
2906        case 1741102485: /*endpoint*/ return new String[] {"Reference"};
2907        case 1920000407: /*numberOfSeries*/ return new String[] {"unsignedInt"};
2908        case -1043544226: /*numberOfInstances*/ return new String[] {"unsignedInt"};
2909        case 881809848: /*procedureReference*/ return new String[] {"Reference"};
2910        case -698023072: /*procedureCode*/ return new String[] {"CodeableConcept"};
2911        case -934964668: /*reason*/ return new String[] {"CodeableConcept"};
2912        case -1724546052: /*description*/ return new String[] {"string"};
2913        case -905838985: /*series*/ return new String[] {};
2914        default: return super.getTypesForProperty(hash, name);
2915        }
2916
2917      }
2918
2919      @Override
2920      public Base addChild(String name) throws FHIRException {
2921        if (name.equals("uid")) {
2922          throw new FHIRException("Cannot call addChild on a singleton property ImagingStudy.uid");
2923        }
2924        else if (name.equals("accession")) {
2925          this.accession = new Identifier();
2926          return this.accession;
2927        }
2928        else if (name.equals("identifier")) {
2929          return addIdentifier();
2930        }
2931        else if (name.equals("availability")) {
2932          throw new FHIRException("Cannot call addChild on a singleton property ImagingStudy.availability");
2933        }
2934        else if (name.equals("modalityList")) {
2935          return addModalityList();
2936        }
2937        else if (name.equals("patient")) {
2938          this.patient = new Reference();
2939          return this.patient;
2940        }
2941        else if (name.equals("context")) {
2942          this.context = new Reference();
2943          return this.context;
2944        }
2945        else if (name.equals("started")) {
2946          throw new FHIRException("Cannot call addChild on a singleton property ImagingStudy.started");
2947        }
2948        else if (name.equals("basedOn")) {
2949          return addBasedOn();
2950        }
2951        else if (name.equals("referrer")) {
2952          this.referrer = new Reference();
2953          return this.referrer;
2954        }
2955        else if (name.equals("interpreter")) {
2956          return addInterpreter();
2957        }
2958        else if (name.equals("endpoint")) {
2959          return addEndpoint();
2960        }
2961        else if (name.equals("numberOfSeries")) {
2962          throw new FHIRException("Cannot call addChild on a singleton property ImagingStudy.numberOfSeries");
2963        }
2964        else if (name.equals("numberOfInstances")) {
2965          throw new FHIRException("Cannot call addChild on a singleton property ImagingStudy.numberOfInstances");
2966        }
2967        else if (name.equals("procedureReference")) {
2968          return addProcedureReference();
2969        }
2970        else if (name.equals("procedureCode")) {
2971          return addProcedureCode();
2972        }
2973        else if (name.equals("reason")) {
2974          this.reason = new CodeableConcept();
2975          return this.reason;
2976        }
2977        else if (name.equals("description")) {
2978          throw new FHIRException("Cannot call addChild on a singleton property ImagingStudy.description");
2979        }
2980        else if (name.equals("series")) {
2981          return addSeries();
2982        }
2983        else
2984          return super.addChild(name);
2985      }
2986
2987  public String fhirType() {
2988    return "ImagingStudy";
2989
2990  }
2991
2992      public ImagingStudy copy() {
2993        ImagingStudy dst = new ImagingStudy();
2994        copyValues(dst);
2995        dst.uid = uid == null ? null : uid.copy();
2996        dst.accession = accession == null ? null : accession.copy();
2997        if (identifier != null) {
2998          dst.identifier = new ArrayList<Identifier>();
2999          for (Identifier i : identifier)
3000            dst.identifier.add(i.copy());
3001        };
3002        dst.availability = availability == null ? null : availability.copy();
3003        if (modalityList != null) {
3004          dst.modalityList = new ArrayList<Coding>();
3005          for (Coding i : modalityList)
3006            dst.modalityList.add(i.copy());
3007        };
3008        dst.patient = patient == null ? null : patient.copy();
3009        dst.context = context == null ? null : context.copy();
3010        dst.started = started == null ? null : started.copy();
3011        if (basedOn != null) {
3012          dst.basedOn = new ArrayList<Reference>();
3013          for (Reference i : basedOn)
3014            dst.basedOn.add(i.copy());
3015        };
3016        dst.referrer = referrer == null ? null : referrer.copy();
3017        if (interpreter != null) {
3018          dst.interpreter = new ArrayList<Reference>();
3019          for (Reference i : interpreter)
3020            dst.interpreter.add(i.copy());
3021        };
3022        if (endpoint != null) {
3023          dst.endpoint = new ArrayList<Reference>();
3024          for (Reference i : endpoint)
3025            dst.endpoint.add(i.copy());
3026        };
3027        dst.numberOfSeries = numberOfSeries == null ? null : numberOfSeries.copy();
3028        dst.numberOfInstances = numberOfInstances == null ? null : numberOfInstances.copy();
3029        if (procedureReference != null) {
3030          dst.procedureReference = new ArrayList<Reference>();
3031          for (Reference i : procedureReference)
3032            dst.procedureReference.add(i.copy());
3033        };
3034        if (procedureCode != null) {
3035          dst.procedureCode = new ArrayList<CodeableConcept>();
3036          for (CodeableConcept i : procedureCode)
3037            dst.procedureCode.add(i.copy());
3038        };
3039        dst.reason = reason == null ? null : reason.copy();
3040        dst.description = description == null ? null : description.copy();
3041        if (series != null) {
3042          dst.series = new ArrayList<ImagingStudySeriesComponent>();
3043          for (ImagingStudySeriesComponent i : series)
3044            dst.series.add(i.copy());
3045        };
3046        return dst;
3047      }
3048
3049      protected ImagingStudy typedCopy() {
3050        return copy();
3051      }
3052
3053      @Override
3054      public boolean equalsDeep(Base other_) {
3055        if (!super.equalsDeep(other_))
3056          return false;
3057        if (!(other_ instanceof ImagingStudy))
3058          return false;
3059        ImagingStudy o = (ImagingStudy) other_;
3060        return compareDeep(uid, o.uid, true) && compareDeep(accession, o.accession, true) && compareDeep(identifier, o.identifier, true)
3061           && compareDeep(availability, o.availability, true) && compareDeep(modalityList, o.modalityList, true)
3062           && compareDeep(patient, o.patient, true) && compareDeep(context, o.context, true) && compareDeep(started, o.started, true)
3063           && compareDeep(basedOn, o.basedOn, true) && compareDeep(referrer, o.referrer, true) && compareDeep(interpreter, o.interpreter, true)
3064           && compareDeep(endpoint, o.endpoint, true) && compareDeep(numberOfSeries, o.numberOfSeries, true)
3065           && compareDeep(numberOfInstances, o.numberOfInstances, true) && compareDeep(procedureReference, o.procedureReference, true)
3066           && compareDeep(procedureCode, o.procedureCode, true) && compareDeep(reason, o.reason, true) && compareDeep(description, o.description, true)
3067           && compareDeep(series, o.series, true);
3068      }
3069
3070      @Override
3071      public boolean equalsShallow(Base other_) {
3072        if (!super.equalsShallow(other_))
3073          return false;
3074        if (!(other_ instanceof ImagingStudy))
3075          return false;
3076        ImagingStudy o = (ImagingStudy) other_;
3077        return compareValues(uid, o.uid, true) && compareValues(availability, o.availability, true) && compareValues(started, o.started, true)
3078           && compareValues(numberOfSeries, o.numberOfSeries, true) && compareValues(numberOfInstances, o.numberOfInstances, true)
3079           && compareValues(description, o.description, true);
3080      }
3081
3082      public boolean isEmpty() {
3083        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(uid, accession, identifier
3084          , availability, modalityList, patient, context, started, basedOn, referrer, interpreter
3085          , endpoint, numberOfSeries, numberOfInstances, procedureReference, procedureCode, reason
3086          , description, series);
3087      }
3088
3089  @Override
3090  public ResourceType getResourceType() {
3091    return ResourceType.ImagingStudy;
3092   }
3093
3094 /**
3095   * Search parameter: <b>identifier</b>
3096   * <p>
3097   * Description: <b>Other identifiers for the Study</b><br>
3098   * Type: <b>token</b><br>
3099   * Path: <b>ImagingStudy.identifier</b><br>
3100   * </p>
3101   */
3102  @SearchParamDefinition(name="identifier", path="ImagingStudy.identifier", description="Other identifiers for the Study", type="token" )
3103  public static final String SP_IDENTIFIER = "identifier";
3104 /**
3105   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
3106   * <p>
3107   * Description: <b>Other identifiers for the Study</b><br>
3108   * Type: <b>token</b><br>
3109   * Path: <b>ImagingStudy.identifier</b><br>
3110   * </p>
3111   */
3112  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
3113
3114 /**
3115   * Search parameter: <b>reason</b>
3116   * <p>
3117   * Description: <b>The reason for the study</b><br>
3118   * Type: <b>token</b><br>
3119   * Path: <b>ImagingStudy.reason</b><br>
3120   * </p>
3121   */
3122  @SearchParamDefinition(name="reason", path="ImagingStudy.reason", description="The reason for the study", type="token" )
3123  public static final String SP_REASON = "reason";
3124 /**
3125   * <b>Fluent Client</b> search parameter constant for <b>reason</b>
3126   * <p>
3127   * Description: <b>The reason for the study</b><br>
3128   * Type: <b>token</b><br>
3129   * Path: <b>ImagingStudy.reason</b><br>
3130   * </p>
3131   */
3132  public static final ca.uhn.fhir.rest.gclient.TokenClientParam REASON = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_REASON);
3133
3134 /**
3135   * Search parameter: <b>study</b>
3136   * <p>
3137   * Description: <b>The study identifier for the image</b><br>
3138   * Type: <b>uri</b><br>
3139   * Path: <b>ImagingStudy.uid</b><br>
3140   * </p>
3141   */
3142  @SearchParamDefinition(name="study", path="ImagingStudy.uid", description="The study identifier for the image", type="uri" )
3143  public static final String SP_STUDY = "study";
3144 /**
3145   * <b>Fluent Client</b> search parameter constant for <b>study</b>
3146   * <p>
3147   * Description: <b>The study identifier for the image</b><br>
3148   * Type: <b>uri</b><br>
3149   * Path: <b>ImagingStudy.uid</b><br>
3150   * </p>
3151   */
3152  public static final ca.uhn.fhir.rest.gclient.UriClientParam STUDY = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_STUDY);
3153
3154 /**
3155   * Search parameter: <b>dicom-class</b>
3156   * <p>
3157   * Description: <b>The type of the instance</b><br>
3158   * Type: <b>uri</b><br>
3159   * Path: <b>ImagingStudy.series.instance.sopClass</b><br>
3160   * </p>
3161   */
3162  @SearchParamDefinition(name="dicom-class", path="ImagingStudy.series.instance.sopClass", description="The type of the instance", type="uri" )
3163  public static final String SP_DICOM_CLASS = "dicom-class";
3164 /**
3165   * <b>Fluent Client</b> search parameter constant for <b>dicom-class</b>
3166   * <p>
3167   * Description: <b>The type of the instance</b><br>
3168   * Type: <b>uri</b><br>
3169   * Path: <b>ImagingStudy.series.instance.sopClass</b><br>
3170   * </p>
3171   */
3172  public static final ca.uhn.fhir.rest.gclient.UriClientParam DICOM_CLASS = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_DICOM_CLASS);
3173
3174 /**
3175   * Search parameter: <b>modality</b>
3176   * <p>
3177   * Description: <b>The modality of the series</b><br>
3178   * Type: <b>token</b><br>
3179   * Path: <b>ImagingStudy.series.modality</b><br>
3180   * </p>
3181   */
3182  @SearchParamDefinition(name="modality", path="ImagingStudy.series.modality", description="The modality of the series", type="token" )
3183  public static final String SP_MODALITY = "modality";
3184 /**
3185   * <b>Fluent Client</b> search parameter constant for <b>modality</b>
3186   * <p>
3187   * Description: <b>The modality of the series</b><br>
3188   * Type: <b>token</b><br>
3189   * Path: <b>ImagingStudy.series.modality</b><br>
3190   * </p>
3191   */
3192  public static final ca.uhn.fhir.rest.gclient.TokenClientParam MODALITY = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_MODALITY);
3193
3194 /**
3195   * Search parameter: <b>bodysite</b>
3196   * <p>
3197   * Description: <b>The body site studied</b><br>
3198   * Type: <b>token</b><br>
3199   * Path: <b>ImagingStudy.series.bodySite</b><br>
3200   * </p>
3201   */
3202  @SearchParamDefinition(name="bodysite", path="ImagingStudy.series.bodySite", description="The body site studied", type="token" )
3203  public static final String SP_BODYSITE = "bodysite";
3204 /**
3205   * <b>Fluent Client</b> search parameter constant for <b>bodysite</b>
3206   * <p>
3207   * Description: <b>The body site studied</b><br>
3208   * Type: <b>token</b><br>
3209   * Path: <b>ImagingStudy.series.bodySite</b><br>
3210   * </p>
3211   */
3212  public static final ca.uhn.fhir.rest.gclient.TokenClientParam BODYSITE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_BODYSITE);
3213
3214 /**
3215   * Search parameter: <b>performer</b>
3216   * <p>
3217   * Description: <b>The person who performed the study</b><br>
3218   * Type: <b>reference</b><br>
3219   * Path: <b>ImagingStudy.series.performer</b><br>
3220   * </p>
3221   */
3222  @SearchParamDefinition(name="performer", path="ImagingStudy.series.performer", description="The person who performed the study", type="reference", target={Practitioner.class } )
3223  public static final String SP_PERFORMER = "performer";
3224 /**
3225   * <b>Fluent Client</b> search parameter constant for <b>performer</b>
3226   * <p>
3227   * Description: <b>The person who performed the study</b><br>
3228   * Type: <b>reference</b><br>
3229   * Path: <b>ImagingStudy.series.performer</b><br>
3230   * </p>
3231   */
3232  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PERFORMER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PERFORMER);
3233
3234/**
3235   * Constant for fluent queries to be used to add include statements. Specifies
3236   * the path value of "<b>ImagingStudy:performer</b>".
3237   */
3238  public static final ca.uhn.fhir.model.api.Include INCLUDE_PERFORMER = new ca.uhn.fhir.model.api.Include("ImagingStudy:performer").toLocked();
3239
3240 /**
3241   * Search parameter: <b>started</b>
3242   * <p>
3243   * Description: <b>When the study was started</b><br>
3244   * Type: <b>date</b><br>
3245   * Path: <b>ImagingStudy.started</b><br>
3246   * </p>
3247   */
3248  @SearchParamDefinition(name="started", path="ImagingStudy.started", description="When the study was started", type="date" )
3249  public static final String SP_STARTED = "started";
3250 /**
3251   * <b>Fluent Client</b> search parameter constant for <b>started</b>
3252   * <p>
3253   * Description: <b>When the study was started</b><br>
3254   * Type: <b>date</b><br>
3255   * Path: <b>ImagingStudy.started</b><br>
3256   * </p>
3257   */
3258  public static final ca.uhn.fhir.rest.gclient.DateClientParam STARTED = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_STARTED);
3259
3260 /**
3261   * Search parameter: <b>accession</b>
3262   * <p>
3263   * Description: <b>The accession identifier for the study</b><br>
3264   * Type: <b>token</b><br>
3265   * Path: <b>ImagingStudy.accession</b><br>
3266   * </p>
3267   */
3268  @SearchParamDefinition(name="accession", path="ImagingStudy.accession", description="The accession identifier for the study", type="token" )
3269  public static final String SP_ACCESSION = "accession";
3270 /**
3271   * <b>Fluent Client</b> search parameter constant for <b>accession</b>
3272   * <p>
3273   * Description: <b>The accession identifier for the study</b><br>
3274   * Type: <b>token</b><br>
3275   * Path: <b>ImagingStudy.accession</b><br>
3276   * </p>
3277   */
3278  public static final ca.uhn.fhir.rest.gclient.TokenClientParam ACCESSION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_ACCESSION);
3279
3280 /**
3281   * Search parameter: <b>uid</b>
3282   * <p>
3283   * Description: <b>The instance unique identifier</b><br>
3284   * Type: <b>uri</b><br>
3285   * Path: <b>ImagingStudy.series.instance.uid</b><br>
3286   * </p>
3287   */
3288  @SearchParamDefinition(name="uid", path="ImagingStudy.series.instance.uid", description="The instance unique identifier", type="uri" )
3289  public static final String SP_UID = "uid";
3290 /**
3291   * <b>Fluent Client</b> search parameter constant for <b>uid</b>
3292   * <p>
3293   * Description: <b>The instance unique identifier</b><br>
3294   * Type: <b>uri</b><br>
3295   * Path: <b>ImagingStudy.series.instance.uid</b><br>
3296   * </p>
3297   */
3298  public static final ca.uhn.fhir.rest.gclient.UriClientParam UID = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_UID);
3299
3300 /**
3301   * Search parameter: <b>endpoint</b>
3302   * <p>
3303   * Description: <b>The endpoint for te study or series</b><br>
3304   * Type: <b>reference</b><br>
3305   * Path: <b>ImagingStudy.endpoint, ImagingStudy.series.endpoint</b><br>
3306   * </p>
3307   */
3308  @SearchParamDefinition(name="endpoint", path="ImagingStudy.endpoint | ImagingStudy.series.endpoint", description="The endpoint for te study or series", type="reference", target={Endpoint.class } )
3309  public static final String SP_ENDPOINT = "endpoint";
3310 /**
3311   * <b>Fluent Client</b> search parameter constant for <b>endpoint</b>
3312   * <p>
3313   * Description: <b>The endpoint for te study or series</b><br>
3314   * Type: <b>reference</b><br>
3315   * Path: <b>ImagingStudy.endpoint, ImagingStudy.series.endpoint</b><br>
3316   * </p>
3317   */
3318  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ENDPOINT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ENDPOINT);
3319
3320/**
3321   * Constant for fluent queries to be used to add include statements. Specifies
3322   * the path value of "<b>ImagingStudy:endpoint</b>".
3323   */
3324  public static final ca.uhn.fhir.model.api.Include INCLUDE_ENDPOINT = new ca.uhn.fhir.model.api.Include("ImagingStudy:endpoint").toLocked();
3325
3326 /**
3327   * Search parameter: <b>patient</b>
3328   * <p>
3329   * Description: <b>Who the study is about</b><br>
3330   * Type: <b>reference</b><br>
3331   * Path: <b>ImagingStudy.patient</b><br>
3332   * </p>
3333   */
3334  @SearchParamDefinition(name="patient", path="ImagingStudy.patient", description="Who the study is about", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Patient") }, target={Patient.class } )
3335  public static final String SP_PATIENT = "patient";
3336 /**
3337   * <b>Fluent Client</b> search parameter constant for <b>patient</b>
3338   * <p>
3339   * Description: <b>Who the study is about</b><br>
3340   * Type: <b>reference</b><br>
3341   * Path: <b>ImagingStudy.patient</b><br>
3342   * </p>
3343   */
3344  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PATIENT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PATIENT);
3345
3346/**
3347   * Constant for fluent queries to be used to add include statements. Specifies
3348   * the path value of "<b>ImagingStudy:patient</b>".
3349   */
3350  public static final ca.uhn.fhir.model.api.Include INCLUDE_PATIENT = new ca.uhn.fhir.model.api.Include("ImagingStudy:patient").toLocked();
3351
3352 /**
3353   * Search parameter: <b>series</b>
3354   * <p>
3355   * Description: <b>The identifier of the series of images</b><br>
3356   * Type: <b>uri</b><br>
3357   * Path: <b>ImagingStudy.series.uid</b><br>
3358   * </p>
3359   */
3360  @SearchParamDefinition(name="series", path="ImagingStudy.series.uid", description="The identifier of the series of images", type="uri" )
3361  public static final String SP_SERIES = "series";
3362 /**
3363   * <b>Fluent Client</b> search parameter constant for <b>series</b>
3364   * <p>
3365   * Description: <b>The identifier of the series of images</b><br>
3366   * Type: <b>uri</b><br>
3367   * Path: <b>ImagingStudy.series.uid</b><br>
3368   * </p>
3369   */
3370  public static final ca.uhn.fhir.rest.gclient.UriClientParam SERIES = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_SERIES);
3371
3372 /**
3373   * Search parameter: <b>context</b>
3374   * <p>
3375   * Description: <b>The context of the study</b><br>
3376   * Type: <b>reference</b><br>
3377   * Path: <b>ImagingStudy.context</b><br>
3378   * </p>
3379   */
3380  @SearchParamDefinition(name="context", path="ImagingStudy.context", description="The context of the study", type="reference", target={Encounter.class, EpisodeOfCare.class } )
3381  public static final String SP_CONTEXT = "context";
3382 /**
3383   * <b>Fluent Client</b> search parameter constant for <b>context</b>
3384   * <p>
3385   * Description: <b>The context of the study</b><br>
3386   * Type: <b>reference</b><br>
3387   * Path: <b>ImagingStudy.context</b><br>
3388   * </p>
3389   */
3390  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam CONTEXT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_CONTEXT);
3391
3392/**
3393   * Constant for fluent queries to be used to add include statements. Specifies
3394   * the path value of "<b>ImagingStudy:context</b>".
3395   */
3396  public static final ca.uhn.fhir.model.api.Include INCLUDE_CONTEXT = new ca.uhn.fhir.model.api.Include("ImagingStudy:context").toLocked();
3397
3398 /**
3399   * Search parameter: <b>basedon</b>
3400   * <p>
3401   * Description: <b>The order for the image</b><br>
3402   * Type: <b>reference</b><br>
3403   * Path: <b>ImagingStudy.basedOn</b><br>
3404   * </p>
3405   */
3406  @SearchParamDefinition(name="basedon", path="ImagingStudy.basedOn", description="The order for the image", type="reference", target={CarePlan.class, ProcedureRequest.class, ReferralRequest.class } )
3407  public static final String SP_BASEDON = "basedon";
3408 /**
3409   * <b>Fluent Client</b> search parameter constant for <b>basedon</b>
3410   * <p>
3411   * Description: <b>The order for the image</b><br>
3412   * Type: <b>reference</b><br>
3413   * Path: <b>ImagingStudy.basedOn</b><br>
3414   * </p>
3415   */
3416  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam BASEDON = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_BASEDON);
3417
3418/**
3419   * Constant for fluent queries to be used to add include statements. Specifies
3420   * the path value of "<b>ImagingStudy:basedon</b>".
3421   */
3422  public static final ca.uhn.fhir.model.api.Include INCLUDE_BASEDON = new ca.uhn.fhir.model.api.Include("ImagingStudy:basedon").toLocked();
3423
3424
3425}