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