001package org.hl7.fhir.r4b.model;
002
003
004/*
005  Copyright (c) 2011+, HL7, Inc.
006  All rights reserved.
007  
008  Redistribution and use in source and binary forms, with or without modification, \
009  are permitted provided that the following conditions are met:
010  
011   * Redistributions of source code must retain the above copyright notice, this \
012     list of conditions and the following disclaimer.
013   * Redistributions in binary form must reproduce the above copyright notice, \
014     this list of conditions and the following disclaimer in the documentation \
015     and/or other materials provided with the distribution.
016   * Neither the name of HL7 nor the names of its contributors may be used to 
017     endorse or promote products derived from this software without specific 
018     prior written permission.
019  
020  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND \
021  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED \
022  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. \
023  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, \
024  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT \
025  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR \
026  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, \
027  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) \
028  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE \
029  POSSIBILITY OF SUCH DAMAGE.
030  */
031
032// Generated on Fri, Dec 31, 2021 05:58+1100 for FHIR v4.3.0-snapshot1
033
034import java.util.ArrayList;
035import java.util.Date;
036import java.util.List;
037import org.hl7.fhir.utilities.Utilities;
038import org.hl7.fhir.r4b.model.Enumerations.*;
039import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
040import org.hl7.fhir.exceptions.FHIRException;
041import org.hl7.fhir.instance.model.api.ICompositeType;
042import ca.uhn.fhir.model.api.annotation.ResourceDef;
043import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
044import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
045import ca.uhn.fhir.model.api.annotation.Child;
046import ca.uhn.fhir.model.api.annotation.ChildOrder;
047import ca.uhn.fhir.model.api.annotation.Description;
048import ca.uhn.fhir.model.api.annotation.Block;
049
050/**
051 * The characteristics, operational status and capabilities of a medical-related component of a medical device.
052 */
053@ResourceDef(name="DeviceDefinition", profile="http://hl7.org/fhir/StructureDefinition/DeviceDefinition")
054public class DeviceDefinition extends DomainResource {
055
056    @Block()
057    public static class DeviceDefinitionUdiDeviceIdentifierComponent extends BackboneElement implements IBaseBackboneElement {
058        /**
059         * The identifier that is to be associated with every Device that references this DeviceDefintiion for the issuer and jurisdication porvided in the DeviceDefinition.udiDeviceIdentifier.
060         */
061        @Child(name = "deviceIdentifier", type = {StringType.class}, order=1, min=1, max=1, modifier=false, summary=false)
062        @Description(shortDefinition="The identifier that is to be associated with every Device that references this DeviceDefintiion for the issuer and jurisdication porvided in the DeviceDefinition.udiDeviceIdentifier", formalDefinition="The identifier that is to be associated with every Device that references this DeviceDefintiion for the issuer and jurisdication porvided in the DeviceDefinition.udiDeviceIdentifier." )
063        protected StringType deviceIdentifier;
064
065        /**
066         * The organization that assigns the identifier algorithm.
067         */
068        @Child(name = "issuer", type = {UriType.class}, order=2, min=1, max=1, modifier=false, summary=false)
069        @Description(shortDefinition="The organization that assigns the identifier algorithm", formalDefinition="The organization that assigns the identifier algorithm." )
070        protected UriType issuer;
071
072        /**
073         * The jurisdiction to which the deviceIdentifier applies.
074         */
075        @Child(name = "jurisdiction", type = {UriType.class}, order=3, min=1, max=1, modifier=false, summary=false)
076        @Description(shortDefinition="The jurisdiction to which the deviceIdentifier applies", formalDefinition="The jurisdiction to which the deviceIdentifier applies." )
077        protected UriType jurisdiction;
078
079        private static final long serialVersionUID = -1577319218L;
080
081    /**
082     * Constructor
083     */
084      public DeviceDefinitionUdiDeviceIdentifierComponent() {
085        super();
086      }
087
088    /**
089     * Constructor
090     */
091      public DeviceDefinitionUdiDeviceIdentifierComponent(String deviceIdentifier, String issuer, String jurisdiction) {
092        super();
093        this.setDeviceIdentifier(deviceIdentifier);
094        this.setIssuer(issuer);
095        this.setJurisdiction(jurisdiction);
096      }
097
098        /**
099         * @return {@link #deviceIdentifier} (The identifier that is to be associated with every Device that references this DeviceDefintiion for the issuer and jurisdication porvided in the DeviceDefinition.udiDeviceIdentifier.). This is the underlying object with id, value and extensions. The accessor "getDeviceIdentifier" gives direct access to the value
100         */
101        public StringType getDeviceIdentifierElement() { 
102          if (this.deviceIdentifier == null)
103            if (Configuration.errorOnAutoCreate())
104              throw new Error("Attempt to auto-create DeviceDefinitionUdiDeviceIdentifierComponent.deviceIdentifier");
105            else if (Configuration.doAutoCreate())
106              this.deviceIdentifier = new StringType(); // bb
107          return this.deviceIdentifier;
108        }
109
110        public boolean hasDeviceIdentifierElement() { 
111          return this.deviceIdentifier != null && !this.deviceIdentifier.isEmpty();
112        }
113
114        public boolean hasDeviceIdentifier() { 
115          return this.deviceIdentifier != null && !this.deviceIdentifier.isEmpty();
116        }
117
118        /**
119         * @param value {@link #deviceIdentifier} (The identifier that is to be associated with every Device that references this DeviceDefintiion for the issuer and jurisdication porvided in the DeviceDefinition.udiDeviceIdentifier.). This is the underlying object with id, value and extensions. The accessor "getDeviceIdentifier" gives direct access to the value
120         */
121        public DeviceDefinitionUdiDeviceIdentifierComponent setDeviceIdentifierElement(StringType value) { 
122          this.deviceIdentifier = value;
123          return this;
124        }
125
126        /**
127         * @return The identifier that is to be associated with every Device that references this DeviceDefintiion for the issuer and jurisdication porvided in the DeviceDefinition.udiDeviceIdentifier.
128         */
129        public String getDeviceIdentifier() { 
130          return this.deviceIdentifier == null ? null : this.deviceIdentifier.getValue();
131        }
132
133        /**
134         * @param value The identifier that is to be associated with every Device that references this DeviceDefintiion for the issuer and jurisdication porvided in the DeviceDefinition.udiDeviceIdentifier.
135         */
136        public DeviceDefinitionUdiDeviceIdentifierComponent setDeviceIdentifier(String value) { 
137            if (this.deviceIdentifier == null)
138              this.deviceIdentifier = new StringType();
139            this.deviceIdentifier.setValue(value);
140          return this;
141        }
142
143        /**
144         * @return {@link #issuer} (The organization that assigns the identifier algorithm.). This is the underlying object with id, value and extensions. The accessor "getIssuer" gives direct access to the value
145         */
146        public UriType getIssuerElement() { 
147          if (this.issuer == null)
148            if (Configuration.errorOnAutoCreate())
149              throw new Error("Attempt to auto-create DeviceDefinitionUdiDeviceIdentifierComponent.issuer");
150            else if (Configuration.doAutoCreate())
151              this.issuer = new UriType(); // bb
152          return this.issuer;
153        }
154
155        public boolean hasIssuerElement() { 
156          return this.issuer != null && !this.issuer.isEmpty();
157        }
158
159        public boolean hasIssuer() { 
160          return this.issuer != null && !this.issuer.isEmpty();
161        }
162
163        /**
164         * @param value {@link #issuer} (The organization that assigns the identifier algorithm.). This is the underlying object with id, value and extensions. The accessor "getIssuer" gives direct access to the value
165         */
166        public DeviceDefinitionUdiDeviceIdentifierComponent setIssuerElement(UriType value) { 
167          this.issuer = value;
168          return this;
169        }
170
171        /**
172         * @return The organization that assigns the identifier algorithm.
173         */
174        public String getIssuer() { 
175          return this.issuer == null ? null : this.issuer.getValue();
176        }
177
178        /**
179         * @param value The organization that assigns the identifier algorithm.
180         */
181        public DeviceDefinitionUdiDeviceIdentifierComponent setIssuer(String value) { 
182            if (this.issuer == null)
183              this.issuer = new UriType();
184            this.issuer.setValue(value);
185          return this;
186        }
187
188        /**
189         * @return {@link #jurisdiction} (The jurisdiction to which the deviceIdentifier applies.). This is the underlying object with id, value and extensions. The accessor "getJurisdiction" gives direct access to the value
190         */
191        public UriType getJurisdictionElement() { 
192          if (this.jurisdiction == null)
193            if (Configuration.errorOnAutoCreate())
194              throw new Error("Attempt to auto-create DeviceDefinitionUdiDeviceIdentifierComponent.jurisdiction");
195            else if (Configuration.doAutoCreate())
196              this.jurisdiction = new UriType(); // bb
197          return this.jurisdiction;
198        }
199
200        public boolean hasJurisdictionElement() { 
201          return this.jurisdiction != null && !this.jurisdiction.isEmpty();
202        }
203
204        public boolean hasJurisdiction() { 
205          return this.jurisdiction != null && !this.jurisdiction.isEmpty();
206        }
207
208        /**
209         * @param value {@link #jurisdiction} (The jurisdiction to which the deviceIdentifier applies.). This is the underlying object with id, value and extensions. The accessor "getJurisdiction" gives direct access to the value
210         */
211        public DeviceDefinitionUdiDeviceIdentifierComponent setJurisdictionElement(UriType value) { 
212          this.jurisdiction = value;
213          return this;
214        }
215
216        /**
217         * @return The jurisdiction to which the deviceIdentifier applies.
218         */
219        public String getJurisdiction() { 
220          return this.jurisdiction == null ? null : this.jurisdiction.getValue();
221        }
222
223        /**
224         * @param value The jurisdiction to which the deviceIdentifier applies.
225         */
226        public DeviceDefinitionUdiDeviceIdentifierComponent setJurisdiction(String value) { 
227            if (this.jurisdiction == null)
228              this.jurisdiction = new UriType();
229            this.jurisdiction.setValue(value);
230          return this;
231        }
232
233        protected void listChildren(List<Property> children) {
234          super.listChildren(children);
235          children.add(new Property("deviceIdentifier", "string", "The identifier that is to be associated with every Device that references this DeviceDefintiion for the issuer and jurisdication porvided in the DeviceDefinition.udiDeviceIdentifier.", 0, 1, deviceIdentifier));
236          children.add(new Property("issuer", "uri", "The organization that assigns the identifier algorithm.", 0, 1, issuer));
237          children.add(new Property("jurisdiction", "uri", "The jurisdiction to which the deviceIdentifier applies.", 0, 1, jurisdiction));
238        }
239
240        @Override
241        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
242          switch (_hash) {
243          case 1322005407: /*deviceIdentifier*/  return new Property("deviceIdentifier", "string", "The identifier that is to be associated with every Device that references this DeviceDefintiion for the issuer and jurisdication porvided in the DeviceDefinition.udiDeviceIdentifier.", 0, 1, deviceIdentifier);
244          case -1179159879: /*issuer*/  return new Property("issuer", "uri", "The organization that assigns the identifier algorithm.", 0, 1, issuer);
245          case -507075711: /*jurisdiction*/  return new Property("jurisdiction", "uri", "The jurisdiction to which the deviceIdentifier applies.", 0, 1, jurisdiction);
246          default: return super.getNamedProperty(_hash, _name, _checkValid);
247          }
248
249        }
250
251      @Override
252      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
253        switch (hash) {
254        case 1322005407: /*deviceIdentifier*/ return this.deviceIdentifier == null ? new Base[0] : new Base[] {this.deviceIdentifier}; // StringType
255        case -1179159879: /*issuer*/ return this.issuer == null ? new Base[0] : new Base[] {this.issuer}; // UriType
256        case -507075711: /*jurisdiction*/ return this.jurisdiction == null ? new Base[0] : new Base[] {this.jurisdiction}; // UriType
257        default: return super.getProperty(hash, name, checkValid);
258        }
259
260      }
261
262      @Override
263      public Base setProperty(int hash, String name, Base value) throws FHIRException {
264        switch (hash) {
265        case 1322005407: // deviceIdentifier
266          this.deviceIdentifier = TypeConvertor.castToString(value); // StringType
267          return value;
268        case -1179159879: // issuer
269          this.issuer = TypeConvertor.castToUri(value); // UriType
270          return value;
271        case -507075711: // jurisdiction
272          this.jurisdiction = TypeConvertor.castToUri(value); // UriType
273          return value;
274        default: return super.setProperty(hash, name, value);
275        }
276
277      }
278
279      @Override
280      public Base setProperty(String name, Base value) throws FHIRException {
281        if (name.equals("deviceIdentifier")) {
282          this.deviceIdentifier = TypeConvertor.castToString(value); // StringType
283        } else if (name.equals("issuer")) {
284          this.issuer = TypeConvertor.castToUri(value); // UriType
285        } else if (name.equals("jurisdiction")) {
286          this.jurisdiction = TypeConvertor.castToUri(value); // UriType
287        } else
288          return super.setProperty(name, value);
289        return value;
290      }
291
292      @Override
293      public Base makeProperty(int hash, String name) throws FHIRException {
294        switch (hash) {
295        case 1322005407:  return getDeviceIdentifierElement();
296        case -1179159879:  return getIssuerElement();
297        case -507075711:  return getJurisdictionElement();
298        default: return super.makeProperty(hash, name);
299        }
300
301      }
302
303      @Override
304      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
305        switch (hash) {
306        case 1322005407: /*deviceIdentifier*/ return new String[] {"string"};
307        case -1179159879: /*issuer*/ return new String[] {"uri"};
308        case -507075711: /*jurisdiction*/ return new String[] {"uri"};
309        default: return super.getTypesForProperty(hash, name);
310        }
311
312      }
313
314      @Override
315      public Base addChild(String name) throws FHIRException {
316        if (name.equals("deviceIdentifier")) {
317          throw new FHIRException("Cannot call addChild on a primitive type DeviceDefinition.udiDeviceIdentifier.deviceIdentifier");
318        }
319        else if (name.equals("issuer")) {
320          throw new FHIRException("Cannot call addChild on a primitive type DeviceDefinition.udiDeviceIdentifier.issuer");
321        }
322        else if (name.equals("jurisdiction")) {
323          throw new FHIRException("Cannot call addChild on a primitive type DeviceDefinition.udiDeviceIdentifier.jurisdiction");
324        }
325        else
326          return super.addChild(name);
327      }
328
329      public DeviceDefinitionUdiDeviceIdentifierComponent copy() {
330        DeviceDefinitionUdiDeviceIdentifierComponent dst = new DeviceDefinitionUdiDeviceIdentifierComponent();
331        copyValues(dst);
332        return dst;
333      }
334
335      public void copyValues(DeviceDefinitionUdiDeviceIdentifierComponent dst) {
336        super.copyValues(dst);
337        dst.deviceIdentifier = deviceIdentifier == null ? null : deviceIdentifier.copy();
338        dst.issuer = issuer == null ? null : issuer.copy();
339        dst.jurisdiction = jurisdiction == null ? null : jurisdiction.copy();
340      }
341
342      @Override
343      public boolean equalsDeep(Base other_) {
344        if (!super.equalsDeep(other_))
345          return false;
346        if (!(other_ instanceof DeviceDefinitionUdiDeviceIdentifierComponent))
347          return false;
348        DeviceDefinitionUdiDeviceIdentifierComponent o = (DeviceDefinitionUdiDeviceIdentifierComponent) other_;
349        return compareDeep(deviceIdentifier, o.deviceIdentifier, true) && compareDeep(issuer, o.issuer, true)
350           && compareDeep(jurisdiction, o.jurisdiction, true);
351      }
352
353      @Override
354      public boolean equalsShallow(Base other_) {
355        if (!super.equalsShallow(other_))
356          return false;
357        if (!(other_ instanceof DeviceDefinitionUdiDeviceIdentifierComponent))
358          return false;
359        DeviceDefinitionUdiDeviceIdentifierComponent o = (DeviceDefinitionUdiDeviceIdentifierComponent) other_;
360        return compareValues(deviceIdentifier, o.deviceIdentifier, true) && compareValues(issuer, o.issuer, true)
361           && compareValues(jurisdiction, o.jurisdiction, true);
362      }
363
364      public boolean isEmpty() {
365        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(deviceIdentifier, issuer, jurisdiction
366          );
367      }
368
369  public String fhirType() {
370    return "DeviceDefinition.udiDeviceIdentifier";
371
372  }
373
374  }
375
376    @Block()
377    public static class DeviceDefinitionDeviceNameComponent extends BackboneElement implements IBaseBackboneElement {
378        /**
379         * The name of the device.
380         */
381        @Child(name = "name", type = {StringType.class}, order=1, min=1, max=1, modifier=false, summary=false)
382        @Description(shortDefinition="The name of the device", formalDefinition="The name of the device." )
383        protected StringType name;
384
385        /**
386         * The type of deviceName.
387UDILabelName | UserFriendlyName | PatientReportedName | ManufactureDeviceName | ModelName.
388         */
389        @Child(name = "type", type = {CodeType.class}, order=2, min=1, max=1, modifier=false, summary=false)
390        @Description(shortDefinition="udi-label-name | user-friendly-name | patient-reported-name | manufacturer-name | model-name | other", formalDefinition="The type of deviceName.\nUDILabelName | UserFriendlyName | PatientReportedName | ManufactureDeviceName | ModelName." )
391        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/device-nametype")
392        protected Enumeration<DeviceNameType> type;
393
394        private static final long serialVersionUID = 918983440L;
395
396    /**
397     * Constructor
398     */
399      public DeviceDefinitionDeviceNameComponent() {
400        super();
401      }
402
403    /**
404     * Constructor
405     */
406      public DeviceDefinitionDeviceNameComponent(String name, DeviceNameType type) {
407        super();
408        this.setName(name);
409        this.setType(type);
410      }
411
412        /**
413         * @return {@link #name} (The name of the device.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
414         */
415        public StringType getNameElement() { 
416          if (this.name == null)
417            if (Configuration.errorOnAutoCreate())
418              throw new Error("Attempt to auto-create DeviceDefinitionDeviceNameComponent.name");
419            else if (Configuration.doAutoCreate())
420              this.name = new StringType(); // bb
421          return this.name;
422        }
423
424        public boolean hasNameElement() { 
425          return this.name != null && !this.name.isEmpty();
426        }
427
428        public boolean hasName() { 
429          return this.name != null && !this.name.isEmpty();
430        }
431
432        /**
433         * @param value {@link #name} (The name of the device.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
434         */
435        public DeviceDefinitionDeviceNameComponent setNameElement(StringType value) { 
436          this.name = value;
437          return this;
438        }
439
440        /**
441         * @return The name of the device.
442         */
443        public String getName() { 
444          return this.name == null ? null : this.name.getValue();
445        }
446
447        /**
448         * @param value The name of the device.
449         */
450        public DeviceDefinitionDeviceNameComponent setName(String value) { 
451            if (this.name == null)
452              this.name = new StringType();
453            this.name.setValue(value);
454          return this;
455        }
456
457        /**
458         * @return {@link #type} (The type of deviceName.
459UDILabelName | UserFriendlyName | PatientReportedName | ManufactureDeviceName | ModelName.). This is the underlying object with id, value and extensions. The accessor "getType" gives direct access to the value
460         */
461        public Enumeration<DeviceNameType> getTypeElement() { 
462          if (this.type == null)
463            if (Configuration.errorOnAutoCreate())
464              throw new Error("Attempt to auto-create DeviceDefinitionDeviceNameComponent.type");
465            else if (Configuration.doAutoCreate())
466              this.type = new Enumeration<DeviceNameType>(new DeviceNameTypeEnumFactory()); // bb
467          return this.type;
468        }
469
470        public boolean hasTypeElement() { 
471          return this.type != null && !this.type.isEmpty();
472        }
473
474        public boolean hasType() { 
475          return this.type != null && !this.type.isEmpty();
476        }
477
478        /**
479         * @param value {@link #type} (The type of deviceName.
480UDILabelName | UserFriendlyName | PatientReportedName | ManufactureDeviceName | ModelName.). This is the underlying object with id, value and extensions. The accessor "getType" gives direct access to the value
481         */
482        public DeviceDefinitionDeviceNameComponent setTypeElement(Enumeration<DeviceNameType> value) { 
483          this.type = value;
484          return this;
485        }
486
487        /**
488         * @return The type of deviceName.
489UDILabelName | UserFriendlyName | PatientReportedName | ManufactureDeviceName | ModelName.
490         */
491        public DeviceNameType getType() { 
492          return this.type == null ? null : this.type.getValue();
493        }
494
495        /**
496         * @param value The type of deviceName.
497UDILabelName | UserFriendlyName | PatientReportedName | ManufactureDeviceName | ModelName.
498         */
499        public DeviceDefinitionDeviceNameComponent setType(DeviceNameType value) { 
500            if (this.type == null)
501              this.type = new Enumeration<DeviceNameType>(new DeviceNameTypeEnumFactory());
502            this.type.setValue(value);
503          return this;
504        }
505
506        protected void listChildren(List<Property> children) {
507          super.listChildren(children);
508          children.add(new Property("name", "string", "The name of the device.", 0, 1, name));
509          children.add(new Property("type", "code", "The type of deviceName.\nUDILabelName | UserFriendlyName | PatientReportedName | ManufactureDeviceName | ModelName.", 0, 1, type));
510        }
511
512        @Override
513        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
514          switch (_hash) {
515          case 3373707: /*name*/  return new Property("name", "string", "The name of the device.", 0, 1, name);
516          case 3575610: /*type*/  return new Property("type", "code", "The type of deviceName.\nUDILabelName | UserFriendlyName | PatientReportedName | ManufactureDeviceName | ModelName.", 0, 1, type);
517          default: return super.getNamedProperty(_hash, _name, _checkValid);
518          }
519
520        }
521
522      @Override
523      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
524        switch (hash) {
525        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // StringType
526        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // Enumeration<DeviceNameType>
527        default: return super.getProperty(hash, name, checkValid);
528        }
529
530      }
531
532      @Override
533      public Base setProperty(int hash, String name, Base value) throws FHIRException {
534        switch (hash) {
535        case 3373707: // name
536          this.name = TypeConvertor.castToString(value); // StringType
537          return value;
538        case 3575610: // type
539          value = new DeviceNameTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
540          this.type = (Enumeration) value; // Enumeration<DeviceNameType>
541          return value;
542        default: return super.setProperty(hash, name, value);
543        }
544
545      }
546
547      @Override
548      public Base setProperty(String name, Base value) throws FHIRException {
549        if (name.equals("name")) {
550          this.name = TypeConvertor.castToString(value); // StringType
551        } else if (name.equals("type")) {
552          value = new DeviceNameTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
553          this.type = (Enumeration) value; // Enumeration<DeviceNameType>
554        } else
555          return super.setProperty(name, value);
556        return value;
557      }
558
559      @Override
560      public Base makeProperty(int hash, String name) throws FHIRException {
561        switch (hash) {
562        case 3373707:  return getNameElement();
563        case 3575610:  return getTypeElement();
564        default: return super.makeProperty(hash, name);
565        }
566
567      }
568
569      @Override
570      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
571        switch (hash) {
572        case 3373707: /*name*/ return new String[] {"string"};
573        case 3575610: /*type*/ return new String[] {"code"};
574        default: return super.getTypesForProperty(hash, name);
575        }
576
577      }
578
579      @Override
580      public Base addChild(String name) throws FHIRException {
581        if (name.equals("name")) {
582          throw new FHIRException("Cannot call addChild on a primitive type DeviceDefinition.deviceName.name");
583        }
584        else if (name.equals("type")) {
585          throw new FHIRException("Cannot call addChild on a primitive type DeviceDefinition.deviceName.type");
586        }
587        else
588          return super.addChild(name);
589      }
590
591      public DeviceDefinitionDeviceNameComponent copy() {
592        DeviceDefinitionDeviceNameComponent dst = new DeviceDefinitionDeviceNameComponent();
593        copyValues(dst);
594        return dst;
595      }
596
597      public void copyValues(DeviceDefinitionDeviceNameComponent dst) {
598        super.copyValues(dst);
599        dst.name = name == null ? null : name.copy();
600        dst.type = type == null ? null : type.copy();
601      }
602
603      @Override
604      public boolean equalsDeep(Base other_) {
605        if (!super.equalsDeep(other_))
606          return false;
607        if (!(other_ instanceof DeviceDefinitionDeviceNameComponent))
608          return false;
609        DeviceDefinitionDeviceNameComponent o = (DeviceDefinitionDeviceNameComponent) other_;
610        return compareDeep(name, o.name, true) && compareDeep(type, o.type, true);
611      }
612
613      @Override
614      public boolean equalsShallow(Base other_) {
615        if (!super.equalsShallow(other_))
616          return false;
617        if (!(other_ instanceof DeviceDefinitionDeviceNameComponent))
618          return false;
619        DeviceDefinitionDeviceNameComponent o = (DeviceDefinitionDeviceNameComponent) other_;
620        return compareValues(name, o.name, true) && compareValues(type, o.type, true);
621      }
622
623      public boolean isEmpty() {
624        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(name, type);
625      }
626
627  public String fhirType() {
628    return "DeviceDefinition.deviceName";
629
630  }
631
632  }
633
634    @Block()
635    public static class DeviceDefinitionSpecializationComponent extends BackboneElement implements IBaseBackboneElement {
636        /**
637         * The standard that is used to operate and communicate.
638         */
639        @Child(name = "systemType", type = {StringType.class}, order=1, min=1, max=1, modifier=false, summary=false)
640        @Description(shortDefinition="The standard that is used to operate and communicate", formalDefinition="The standard that is used to operate and communicate." )
641        protected StringType systemType;
642
643        /**
644         * The version of the standard that is used to operate and communicate.
645         */
646        @Child(name = "version", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=false)
647        @Description(shortDefinition="The version of the standard that is used to operate and communicate", formalDefinition="The version of the standard that is used to operate and communicate." )
648        protected StringType version;
649
650        private static final long serialVersionUID = -249304393L;
651
652    /**
653     * Constructor
654     */
655      public DeviceDefinitionSpecializationComponent() {
656        super();
657      }
658
659    /**
660     * Constructor
661     */
662      public DeviceDefinitionSpecializationComponent(String systemType) {
663        super();
664        this.setSystemType(systemType);
665      }
666
667        /**
668         * @return {@link #systemType} (The standard that is used to operate and communicate.). This is the underlying object with id, value and extensions. The accessor "getSystemType" gives direct access to the value
669         */
670        public StringType getSystemTypeElement() { 
671          if (this.systemType == null)
672            if (Configuration.errorOnAutoCreate())
673              throw new Error("Attempt to auto-create DeviceDefinitionSpecializationComponent.systemType");
674            else if (Configuration.doAutoCreate())
675              this.systemType = new StringType(); // bb
676          return this.systemType;
677        }
678
679        public boolean hasSystemTypeElement() { 
680          return this.systemType != null && !this.systemType.isEmpty();
681        }
682
683        public boolean hasSystemType() { 
684          return this.systemType != null && !this.systemType.isEmpty();
685        }
686
687        /**
688         * @param value {@link #systemType} (The standard that is used to operate and communicate.). This is the underlying object with id, value and extensions. The accessor "getSystemType" gives direct access to the value
689         */
690        public DeviceDefinitionSpecializationComponent setSystemTypeElement(StringType value) { 
691          this.systemType = value;
692          return this;
693        }
694
695        /**
696         * @return The standard that is used to operate and communicate.
697         */
698        public String getSystemType() { 
699          return this.systemType == null ? null : this.systemType.getValue();
700        }
701
702        /**
703         * @param value The standard that is used to operate and communicate.
704         */
705        public DeviceDefinitionSpecializationComponent setSystemType(String value) { 
706            if (this.systemType == null)
707              this.systemType = new StringType();
708            this.systemType.setValue(value);
709          return this;
710        }
711
712        /**
713         * @return {@link #version} (The version of the standard that is used to operate and communicate.). This is the underlying object with id, value and extensions. The accessor "getVersion" gives direct access to the value
714         */
715        public StringType getVersionElement() { 
716          if (this.version == null)
717            if (Configuration.errorOnAutoCreate())
718              throw new Error("Attempt to auto-create DeviceDefinitionSpecializationComponent.version");
719            else if (Configuration.doAutoCreate())
720              this.version = new StringType(); // bb
721          return this.version;
722        }
723
724        public boolean hasVersionElement() { 
725          return this.version != null && !this.version.isEmpty();
726        }
727
728        public boolean hasVersion() { 
729          return this.version != null && !this.version.isEmpty();
730        }
731
732        /**
733         * @param value {@link #version} (The version of the standard that is used to operate and communicate.). This is the underlying object with id, value and extensions. The accessor "getVersion" gives direct access to the value
734         */
735        public DeviceDefinitionSpecializationComponent setVersionElement(StringType value) { 
736          this.version = value;
737          return this;
738        }
739
740        /**
741         * @return The version of the standard that is used to operate and communicate.
742         */
743        public String getVersion() { 
744          return this.version == null ? null : this.version.getValue();
745        }
746
747        /**
748         * @param value The version of the standard that is used to operate and communicate.
749         */
750        public DeviceDefinitionSpecializationComponent setVersion(String value) { 
751          if (Utilities.noString(value))
752            this.version = null;
753          else {
754            if (this.version == null)
755              this.version = new StringType();
756            this.version.setValue(value);
757          }
758          return this;
759        }
760
761        protected void listChildren(List<Property> children) {
762          super.listChildren(children);
763          children.add(new Property("systemType", "string", "The standard that is used to operate and communicate.", 0, 1, systemType));
764          children.add(new Property("version", "string", "The version of the standard that is used to operate and communicate.", 0, 1, version));
765        }
766
767        @Override
768        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
769          switch (_hash) {
770          case 642893321: /*systemType*/  return new Property("systemType", "string", "The standard that is used to operate and communicate.", 0, 1, systemType);
771          case 351608024: /*version*/  return new Property("version", "string", "The version of the standard that is used to operate and communicate.", 0, 1, version);
772          default: return super.getNamedProperty(_hash, _name, _checkValid);
773          }
774
775        }
776
777      @Override
778      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
779        switch (hash) {
780        case 642893321: /*systemType*/ return this.systemType == null ? new Base[0] : new Base[] {this.systemType}; // StringType
781        case 351608024: /*version*/ return this.version == null ? new Base[0] : new Base[] {this.version}; // StringType
782        default: return super.getProperty(hash, name, checkValid);
783        }
784
785      }
786
787      @Override
788      public Base setProperty(int hash, String name, Base value) throws FHIRException {
789        switch (hash) {
790        case 642893321: // systemType
791          this.systemType = TypeConvertor.castToString(value); // StringType
792          return value;
793        case 351608024: // version
794          this.version = TypeConvertor.castToString(value); // StringType
795          return value;
796        default: return super.setProperty(hash, name, value);
797        }
798
799      }
800
801      @Override
802      public Base setProperty(String name, Base value) throws FHIRException {
803        if (name.equals("systemType")) {
804          this.systemType = TypeConvertor.castToString(value); // StringType
805        } else if (name.equals("version")) {
806          this.version = TypeConvertor.castToString(value); // StringType
807        } else
808          return super.setProperty(name, value);
809        return value;
810      }
811
812      @Override
813      public Base makeProperty(int hash, String name) throws FHIRException {
814        switch (hash) {
815        case 642893321:  return getSystemTypeElement();
816        case 351608024:  return getVersionElement();
817        default: return super.makeProperty(hash, name);
818        }
819
820      }
821
822      @Override
823      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
824        switch (hash) {
825        case 642893321: /*systemType*/ return new String[] {"string"};
826        case 351608024: /*version*/ return new String[] {"string"};
827        default: return super.getTypesForProperty(hash, name);
828        }
829
830      }
831
832      @Override
833      public Base addChild(String name) throws FHIRException {
834        if (name.equals("systemType")) {
835          throw new FHIRException("Cannot call addChild on a primitive type DeviceDefinition.specialization.systemType");
836        }
837        else if (name.equals("version")) {
838          throw new FHIRException("Cannot call addChild on a primitive type DeviceDefinition.specialization.version");
839        }
840        else
841          return super.addChild(name);
842      }
843
844      public DeviceDefinitionSpecializationComponent copy() {
845        DeviceDefinitionSpecializationComponent dst = new DeviceDefinitionSpecializationComponent();
846        copyValues(dst);
847        return dst;
848      }
849
850      public void copyValues(DeviceDefinitionSpecializationComponent dst) {
851        super.copyValues(dst);
852        dst.systemType = systemType == null ? null : systemType.copy();
853        dst.version = version == null ? null : version.copy();
854      }
855
856      @Override
857      public boolean equalsDeep(Base other_) {
858        if (!super.equalsDeep(other_))
859          return false;
860        if (!(other_ instanceof DeviceDefinitionSpecializationComponent))
861          return false;
862        DeviceDefinitionSpecializationComponent o = (DeviceDefinitionSpecializationComponent) other_;
863        return compareDeep(systemType, o.systemType, true) && compareDeep(version, o.version, true);
864      }
865
866      @Override
867      public boolean equalsShallow(Base other_) {
868        if (!super.equalsShallow(other_))
869          return false;
870        if (!(other_ instanceof DeviceDefinitionSpecializationComponent))
871          return false;
872        DeviceDefinitionSpecializationComponent o = (DeviceDefinitionSpecializationComponent) other_;
873        return compareValues(systemType, o.systemType, true) && compareValues(version, o.version, true);
874      }
875
876      public boolean isEmpty() {
877        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(systemType, version);
878      }
879
880  public String fhirType() {
881    return "DeviceDefinition.specialization";
882
883  }
884
885  }
886
887    @Block()
888    public static class DeviceDefinitionCapabilityComponent extends BackboneElement implements IBaseBackboneElement {
889        /**
890         * Type of capability.
891         */
892        @Child(name = "type", type = {CodeableConcept.class}, order=1, min=1, max=1, modifier=false, summary=false)
893        @Description(shortDefinition="Type of capability", formalDefinition="Type of capability." )
894        protected CodeableConcept type;
895
896        /**
897         * Description of capability.
898         */
899        @Child(name = "description", type = {CodeableConcept.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
900        @Description(shortDefinition="Description of capability", formalDefinition="Description of capability." )
901        protected List<CodeableConcept> description;
902
903        private static final long serialVersionUID = -192945344L;
904
905    /**
906     * Constructor
907     */
908      public DeviceDefinitionCapabilityComponent() {
909        super();
910      }
911
912    /**
913     * Constructor
914     */
915      public DeviceDefinitionCapabilityComponent(CodeableConcept type) {
916        super();
917        this.setType(type);
918      }
919
920        /**
921         * @return {@link #type} (Type of capability.)
922         */
923        public CodeableConcept getType() { 
924          if (this.type == null)
925            if (Configuration.errorOnAutoCreate())
926              throw new Error("Attempt to auto-create DeviceDefinitionCapabilityComponent.type");
927            else if (Configuration.doAutoCreate())
928              this.type = new CodeableConcept(); // cc
929          return this.type;
930        }
931
932        public boolean hasType() { 
933          return this.type != null && !this.type.isEmpty();
934        }
935
936        /**
937         * @param value {@link #type} (Type of capability.)
938         */
939        public DeviceDefinitionCapabilityComponent setType(CodeableConcept value) { 
940          this.type = value;
941          return this;
942        }
943
944        /**
945         * @return {@link #description} (Description of capability.)
946         */
947        public List<CodeableConcept> getDescription() { 
948          if (this.description == null)
949            this.description = new ArrayList<CodeableConcept>();
950          return this.description;
951        }
952
953        /**
954         * @return Returns a reference to <code>this</code> for easy method chaining
955         */
956        public DeviceDefinitionCapabilityComponent setDescription(List<CodeableConcept> theDescription) { 
957          this.description = theDescription;
958          return this;
959        }
960
961        public boolean hasDescription() { 
962          if (this.description == null)
963            return false;
964          for (CodeableConcept item : this.description)
965            if (!item.isEmpty())
966              return true;
967          return false;
968        }
969
970        public CodeableConcept addDescription() { //3
971          CodeableConcept t = new CodeableConcept();
972          if (this.description == null)
973            this.description = new ArrayList<CodeableConcept>();
974          this.description.add(t);
975          return t;
976        }
977
978        public DeviceDefinitionCapabilityComponent addDescription(CodeableConcept t) { //3
979          if (t == null)
980            return this;
981          if (this.description == null)
982            this.description = new ArrayList<CodeableConcept>();
983          this.description.add(t);
984          return this;
985        }
986
987        /**
988         * @return The first repetition of repeating field {@link #description}, creating it if it does not already exist {3}
989         */
990        public CodeableConcept getDescriptionFirstRep() { 
991          if (getDescription().isEmpty()) {
992            addDescription();
993          }
994          return getDescription().get(0);
995        }
996
997        protected void listChildren(List<Property> children) {
998          super.listChildren(children);
999          children.add(new Property("type", "CodeableConcept", "Type of capability.", 0, 1, type));
1000          children.add(new Property("description", "CodeableConcept", "Description of capability.", 0, java.lang.Integer.MAX_VALUE, description));
1001        }
1002
1003        @Override
1004        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1005          switch (_hash) {
1006          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "Type of capability.", 0, 1, type);
1007          case -1724546052: /*description*/  return new Property("description", "CodeableConcept", "Description of capability.", 0, java.lang.Integer.MAX_VALUE, description);
1008          default: return super.getNamedProperty(_hash, _name, _checkValid);
1009          }
1010
1011        }
1012
1013      @Override
1014      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1015        switch (hash) {
1016        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
1017        case -1724546052: /*description*/ return this.description == null ? new Base[0] : this.description.toArray(new Base[this.description.size()]); // CodeableConcept
1018        default: return super.getProperty(hash, name, checkValid);
1019        }
1020
1021      }
1022
1023      @Override
1024      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1025        switch (hash) {
1026        case 3575610: // type
1027          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1028          return value;
1029        case -1724546052: // description
1030          this.getDescription().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
1031          return value;
1032        default: return super.setProperty(hash, name, value);
1033        }
1034
1035      }
1036
1037      @Override
1038      public Base setProperty(String name, Base value) throws FHIRException {
1039        if (name.equals("type")) {
1040          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1041        } else if (name.equals("description")) {
1042          this.getDescription().add(TypeConvertor.castToCodeableConcept(value));
1043        } else
1044          return super.setProperty(name, value);
1045        return value;
1046      }
1047
1048      @Override
1049      public Base makeProperty(int hash, String name) throws FHIRException {
1050        switch (hash) {
1051        case 3575610:  return getType();
1052        case -1724546052:  return addDescription(); 
1053        default: return super.makeProperty(hash, name);
1054        }
1055
1056      }
1057
1058      @Override
1059      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1060        switch (hash) {
1061        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
1062        case -1724546052: /*description*/ return new String[] {"CodeableConcept"};
1063        default: return super.getTypesForProperty(hash, name);
1064        }
1065
1066      }
1067
1068      @Override
1069      public Base addChild(String name) throws FHIRException {
1070        if (name.equals("type")) {
1071          this.type = new CodeableConcept();
1072          return this.type;
1073        }
1074        else if (name.equals("description")) {
1075          return addDescription();
1076        }
1077        else
1078          return super.addChild(name);
1079      }
1080
1081      public DeviceDefinitionCapabilityComponent copy() {
1082        DeviceDefinitionCapabilityComponent dst = new DeviceDefinitionCapabilityComponent();
1083        copyValues(dst);
1084        return dst;
1085      }
1086
1087      public void copyValues(DeviceDefinitionCapabilityComponent dst) {
1088        super.copyValues(dst);
1089        dst.type = type == null ? null : type.copy();
1090        if (description != null) {
1091          dst.description = new ArrayList<CodeableConcept>();
1092          for (CodeableConcept i : description)
1093            dst.description.add(i.copy());
1094        };
1095      }
1096
1097      @Override
1098      public boolean equalsDeep(Base other_) {
1099        if (!super.equalsDeep(other_))
1100          return false;
1101        if (!(other_ instanceof DeviceDefinitionCapabilityComponent))
1102          return false;
1103        DeviceDefinitionCapabilityComponent o = (DeviceDefinitionCapabilityComponent) other_;
1104        return compareDeep(type, o.type, true) && compareDeep(description, o.description, true);
1105      }
1106
1107      @Override
1108      public boolean equalsShallow(Base other_) {
1109        if (!super.equalsShallow(other_))
1110          return false;
1111        if (!(other_ instanceof DeviceDefinitionCapabilityComponent))
1112          return false;
1113        DeviceDefinitionCapabilityComponent o = (DeviceDefinitionCapabilityComponent) other_;
1114        return true;
1115      }
1116
1117      public boolean isEmpty() {
1118        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, description);
1119      }
1120
1121  public String fhirType() {
1122    return "DeviceDefinition.capability";
1123
1124  }
1125
1126  }
1127
1128    @Block()
1129    public static class DeviceDefinitionPropertyComponent extends BackboneElement implements IBaseBackboneElement {
1130        /**
1131         * Code that specifies the property DeviceDefinitionPropetyCode (Extensible).
1132         */
1133        @Child(name = "type", type = {CodeableConcept.class}, order=1, min=1, max=1, modifier=false, summary=false)
1134        @Description(shortDefinition="Code that specifies the property DeviceDefinitionPropetyCode (Extensible)", formalDefinition="Code that specifies the property DeviceDefinitionPropetyCode (Extensible)." )
1135        protected CodeableConcept type;
1136
1137        /**
1138         * Property value as a quantity.
1139         */
1140        @Child(name = "valueQuantity", type = {Quantity.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1141        @Description(shortDefinition="Property value as a quantity", formalDefinition="Property value as a quantity." )
1142        protected List<Quantity> valueQuantity;
1143
1144        /**
1145         * Property value as a code, e.g., NTP4 (synced to NTP).
1146         */
1147        @Child(name = "valueCode", type = {CodeableConcept.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1148        @Description(shortDefinition="Property value as a code, e.g., NTP4 (synced to NTP)", formalDefinition="Property value as a code, e.g., NTP4 (synced to NTP)." )
1149        protected List<CodeableConcept> valueCode;
1150
1151        private static final long serialVersionUID = 1512172633L;
1152
1153    /**
1154     * Constructor
1155     */
1156      public DeviceDefinitionPropertyComponent() {
1157        super();
1158      }
1159
1160    /**
1161     * Constructor
1162     */
1163      public DeviceDefinitionPropertyComponent(CodeableConcept type) {
1164        super();
1165        this.setType(type);
1166      }
1167
1168        /**
1169         * @return {@link #type} (Code that specifies the property DeviceDefinitionPropetyCode (Extensible).)
1170         */
1171        public CodeableConcept getType() { 
1172          if (this.type == null)
1173            if (Configuration.errorOnAutoCreate())
1174              throw new Error("Attempt to auto-create DeviceDefinitionPropertyComponent.type");
1175            else if (Configuration.doAutoCreate())
1176              this.type = new CodeableConcept(); // cc
1177          return this.type;
1178        }
1179
1180        public boolean hasType() { 
1181          return this.type != null && !this.type.isEmpty();
1182        }
1183
1184        /**
1185         * @param value {@link #type} (Code that specifies the property DeviceDefinitionPropetyCode (Extensible).)
1186         */
1187        public DeviceDefinitionPropertyComponent setType(CodeableConcept value) { 
1188          this.type = value;
1189          return this;
1190        }
1191
1192        /**
1193         * @return {@link #valueQuantity} (Property value as a quantity.)
1194         */
1195        public List<Quantity> getValueQuantity() { 
1196          if (this.valueQuantity == null)
1197            this.valueQuantity = new ArrayList<Quantity>();
1198          return this.valueQuantity;
1199        }
1200
1201        /**
1202         * @return Returns a reference to <code>this</code> for easy method chaining
1203         */
1204        public DeviceDefinitionPropertyComponent setValueQuantity(List<Quantity> theValueQuantity) { 
1205          this.valueQuantity = theValueQuantity;
1206          return this;
1207        }
1208
1209        public boolean hasValueQuantity() { 
1210          if (this.valueQuantity == null)
1211            return false;
1212          for (Quantity item : this.valueQuantity)
1213            if (!item.isEmpty())
1214              return true;
1215          return false;
1216        }
1217
1218        public Quantity addValueQuantity() { //3
1219          Quantity t = new Quantity();
1220          if (this.valueQuantity == null)
1221            this.valueQuantity = new ArrayList<Quantity>();
1222          this.valueQuantity.add(t);
1223          return t;
1224        }
1225
1226        public DeviceDefinitionPropertyComponent addValueQuantity(Quantity t) { //3
1227          if (t == null)
1228            return this;
1229          if (this.valueQuantity == null)
1230            this.valueQuantity = new ArrayList<Quantity>();
1231          this.valueQuantity.add(t);
1232          return this;
1233        }
1234
1235        /**
1236         * @return The first repetition of repeating field {@link #valueQuantity}, creating it if it does not already exist {3}
1237         */
1238        public Quantity getValueQuantityFirstRep() { 
1239          if (getValueQuantity().isEmpty()) {
1240            addValueQuantity();
1241          }
1242          return getValueQuantity().get(0);
1243        }
1244
1245        /**
1246         * @return {@link #valueCode} (Property value as a code, e.g., NTP4 (synced to NTP).)
1247         */
1248        public List<CodeableConcept> getValueCode() { 
1249          if (this.valueCode == null)
1250            this.valueCode = new ArrayList<CodeableConcept>();
1251          return this.valueCode;
1252        }
1253
1254        /**
1255         * @return Returns a reference to <code>this</code> for easy method chaining
1256         */
1257        public DeviceDefinitionPropertyComponent setValueCode(List<CodeableConcept> theValueCode) { 
1258          this.valueCode = theValueCode;
1259          return this;
1260        }
1261
1262        public boolean hasValueCode() { 
1263          if (this.valueCode == null)
1264            return false;
1265          for (CodeableConcept item : this.valueCode)
1266            if (!item.isEmpty())
1267              return true;
1268          return false;
1269        }
1270
1271        public CodeableConcept addValueCode() { //3
1272          CodeableConcept t = new CodeableConcept();
1273          if (this.valueCode == null)
1274            this.valueCode = new ArrayList<CodeableConcept>();
1275          this.valueCode.add(t);
1276          return t;
1277        }
1278
1279        public DeviceDefinitionPropertyComponent addValueCode(CodeableConcept t) { //3
1280          if (t == null)
1281            return this;
1282          if (this.valueCode == null)
1283            this.valueCode = new ArrayList<CodeableConcept>();
1284          this.valueCode.add(t);
1285          return this;
1286        }
1287
1288        /**
1289         * @return The first repetition of repeating field {@link #valueCode}, creating it if it does not already exist {3}
1290         */
1291        public CodeableConcept getValueCodeFirstRep() { 
1292          if (getValueCode().isEmpty()) {
1293            addValueCode();
1294          }
1295          return getValueCode().get(0);
1296        }
1297
1298        protected void listChildren(List<Property> children) {
1299          super.listChildren(children);
1300          children.add(new Property("type", "CodeableConcept", "Code that specifies the property DeviceDefinitionPropetyCode (Extensible).", 0, 1, type));
1301          children.add(new Property("valueQuantity", "Quantity", "Property value as a quantity.", 0, java.lang.Integer.MAX_VALUE, valueQuantity));
1302          children.add(new Property("valueCode", "CodeableConcept", "Property value as a code, e.g., NTP4 (synced to NTP).", 0, java.lang.Integer.MAX_VALUE, valueCode));
1303        }
1304
1305        @Override
1306        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1307          switch (_hash) {
1308          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "Code that specifies the property DeviceDefinitionPropetyCode (Extensible).", 0, 1, type);
1309          case -2029823716: /*valueQuantity*/  return new Property("valueQuantity", "Quantity", "Property value as a quantity.", 0, java.lang.Integer.MAX_VALUE, valueQuantity);
1310          case -766209282: /*valueCode*/  return new Property("valueCode", "CodeableConcept", "Property value as a code, e.g., NTP4 (synced to NTP).", 0, java.lang.Integer.MAX_VALUE, valueCode);
1311          default: return super.getNamedProperty(_hash, _name, _checkValid);
1312          }
1313
1314        }
1315
1316      @Override
1317      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1318        switch (hash) {
1319        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
1320        case -2029823716: /*valueQuantity*/ return this.valueQuantity == null ? new Base[0] : this.valueQuantity.toArray(new Base[this.valueQuantity.size()]); // Quantity
1321        case -766209282: /*valueCode*/ return this.valueCode == null ? new Base[0] : this.valueCode.toArray(new Base[this.valueCode.size()]); // CodeableConcept
1322        default: return super.getProperty(hash, name, checkValid);
1323        }
1324
1325      }
1326
1327      @Override
1328      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1329        switch (hash) {
1330        case 3575610: // type
1331          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1332          return value;
1333        case -2029823716: // valueQuantity
1334          this.getValueQuantity().add(TypeConvertor.castToQuantity(value)); // Quantity
1335          return value;
1336        case -766209282: // valueCode
1337          this.getValueCode().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
1338          return value;
1339        default: return super.setProperty(hash, name, value);
1340        }
1341
1342      }
1343
1344      @Override
1345      public Base setProperty(String name, Base value) throws FHIRException {
1346        if (name.equals("type")) {
1347          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1348        } else if (name.equals("valueQuantity")) {
1349          this.getValueQuantity().add(TypeConvertor.castToQuantity(value));
1350        } else if (name.equals("valueCode")) {
1351          this.getValueCode().add(TypeConvertor.castToCodeableConcept(value));
1352        } else
1353          return super.setProperty(name, value);
1354        return value;
1355      }
1356
1357      @Override
1358      public Base makeProperty(int hash, String name) throws FHIRException {
1359        switch (hash) {
1360        case 3575610:  return getType();
1361        case -2029823716:  return addValueQuantity(); 
1362        case -766209282:  return addValueCode(); 
1363        default: return super.makeProperty(hash, name);
1364        }
1365
1366      }
1367
1368      @Override
1369      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1370        switch (hash) {
1371        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
1372        case -2029823716: /*valueQuantity*/ return new String[] {"Quantity"};
1373        case -766209282: /*valueCode*/ return new String[] {"CodeableConcept"};
1374        default: return super.getTypesForProperty(hash, name);
1375        }
1376
1377      }
1378
1379      @Override
1380      public Base addChild(String name) throws FHIRException {
1381        if (name.equals("type")) {
1382          this.type = new CodeableConcept();
1383          return this.type;
1384        }
1385        else if (name.equals("valueQuantity")) {
1386          return addValueQuantity();
1387        }
1388        else if (name.equals("valueCode")) {
1389          return addValueCode();
1390        }
1391        else
1392          return super.addChild(name);
1393      }
1394
1395      public DeviceDefinitionPropertyComponent copy() {
1396        DeviceDefinitionPropertyComponent dst = new DeviceDefinitionPropertyComponent();
1397        copyValues(dst);
1398        return dst;
1399      }
1400
1401      public void copyValues(DeviceDefinitionPropertyComponent dst) {
1402        super.copyValues(dst);
1403        dst.type = type == null ? null : type.copy();
1404        if (valueQuantity != null) {
1405          dst.valueQuantity = new ArrayList<Quantity>();
1406          for (Quantity i : valueQuantity)
1407            dst.valueQuantity.add(i.copy());
1408        };
1409        if (valueCode != null) {
1410          dst.valueCode = new ArrayList<CodeableConcept>();
1411          for (CodeableConcept i : valueCode)
1412            dst.valueCode.add(i.copy());
1413        };
1414      }
1415
1416      @Override
1417      public boolean equalsDeep(Base other_) {
1418        if (!super.equalsDeep(other_))
1419          return false;
1420        if (!(other_ instanceof DeviceDefinitionPropertyComponent))
1421          return false;
1422        DeviceDefinitionPropertyComponent o = (DeviceDefinitionPropertyComponent) other_;
1423        return compareDeep(type, o.type, true) && compareDeep(valueQuantity, o.valueQuantity, true) && compareDeep(valueCode, o.valueCode, true)
1424          ;
1425      }
1426
1427      @Override
1428      public boolean equalsShallow(Base other_) {
1429        if (!super.equalsShallow(other_))
1430          return false;
1431        if (!(other_ instanceof DeviceDefinitionPropertyComponent))
1432          return false;
1433        DeviceDefinitionPropertyComponent o = (DeviceDefinitionPropertyComponent) other_;
1434        return true;
1435      }
1436
1437      public boolean isEmpty() {
1438        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, valueQuantity, valueCode
1439          );
1440      }
1441
1442  public String fhirType() {
1443    return "DeviceDefinition.property";
1444
1445  }
1446
1447  }
1448
1449    @Block()
1450    public static class DeviceDefinitionMaterialComponent extends BackboneElement implements IBaseBackboneElement {
1451        /**
1452         * The substance.
1453         */
1454        @Child(name = "substance", type = {CodeableConcept.class}, order=1, min=1, max=1, modifier=false, summary=false)
1455        @Description(shortDefinition="The substance", formalDefinition="The substance." )
1456        protected CodeableConcept substance;
1457
1458        /**
1459         * Indicates an alternative material of the device.
1460         */
1461        @Child(name = "alternate", type = {BooleanType.class}, order=2, min=0, max=1, modifier=false, summary=false)
1462        @Description(shortDefinition="Indicates an alternative material of the device", formalDefinition="Indicates an alternative material of the device." )
1463        protected BooleanType alternate;
1464
1465        /**
1466         * Whether the substance is a known or suspected allergen.
1467         */
1468        @Child(name = "allergenicIndicator", type = {BooleanType.class}, order=3, min=0, max=1, modifier=false, summary=false)
1469        @Description(shortDefinition="Whether the substance is a known or suspected allergen", formalDefinition="Whether the substance is a known or suspected allergen." )
1470        protected BooleanType allergenicIndicator;
1471
1472        private static final long serialVersionUID = 1232736508L;
1473
1474    /**
1475     * Constructor
1476     */
1477      public DeviceDefinitionMaterialComponent() {
1478        super();
1479      }
1480
1481    /**
1482     * Constructor
1483     */
1484      public DeviceDefinitionMaterialComponent(CodeableConcept substance) {
1485        super();
1486        this.setSubstance(substance);
1487      }
1488
1489        /**
1490         * @return {@link #substance} (The substance.)
1491         */
1492        public CodeableConcept getSubstance() { 
1493          if (this.substance == null)
1494            if (Configuration.errorOnAutoCreate())
1495              throw new Error("Attempt to auto-create DeviceDefinitionMaterialComponent.substance");
1496            else if (Configuration.doAutoCreate())
1497              this.substance = new CodeableConcept(); // cc
1498          return this.substance;
1499        }
1500
1501        public boolean hasSubstance() { 
1502          return this.substance != null && !this.substance.isEmpty();
1503        }
1504
1505        /**
1506         * @param value {@link #substance} (The substance.)
1507         */
1508        public DeviceDefinitionMaterialComponent setSubstance(CodeableConcept value) { 
1509          this.substance = value;
1510          return this;
1511        }
1512
1513        /**
1514         * @return {@link #alternate} (Indicates an alternative material of the device.). This is the underlying object with id, value and extensions. The accessor "getAlternate" gives direct access to the value
1515         */
1516        public BooleanType getAlternateElement() { 
1517          if (this.alternate == null)
1518            if (Configuration.errorOnAutoCreate())
1519              throw new Error("Attempt to auto-create DeviceDefinitionMaterialComponent.alternate");
1520            else if (Configuration.doAutoCreate())
1521              this.alternate = new BooleanType(); // bb
1522          return this.alternate;
1523        }
1524
1525        public boolean hasAlternateElement() { 
1526          return this.alternate != null && !this.alternate.isEmpty();
1527        }
1528
1529        public boolean hasAlternate() { 
1530          return this.alternate != null && !this.alternate.isEmpty();
1531        }
1532
1533        /**
1534         * @param value {@link #alternate} (Indicates an alternative material of the device.). This is the underlying object with id, value and extensions. The accessor "getAlternate" gives direct access to the value
1535         */
1536        public DeviceDefinitionMaterialComponent setAlternateElement(BooleanType value) { 
1537          this.alternate = value;
1538          return this;
1539        }
1540
1541        /**
1542         * @return Indicates an alternative material of the device.
1543         */
1544        public boolean getAlternate() { 
1545          return this.alternate == null || this.alternate.isEmpty() ? false : this.alternate.getValue();
1546        }
1547
1548        /**
1549         * @param value Indicates an alternative material of the device.
1550         */
1551        public DeviceDefinitionMaterialComponent setAlternate(boolean value) { 
1552            if (this.alternate == null)
1553              this.alternate = new BooleanType();
1554            this.alternate.setValue(value);
1555          return this;
1556        }
1557
1558        /**
1559         * @return {@link #allergenicIndicator} (Whether the substance is a known or suspected allergen.). This is the underlying object with id, value and extensions. The accessor "getAllergenicIndicator" gives direct access to the value
1560         */
1561        public BooleanType getAllergenicIndicatorElement() { 
1562          if (this.allergenicIndicator == null)
1563            if (Configuration.errorOnAutoCreate())
1564              throw new Error("Attempt to auto-create DeviceDefinitionMaterialComponent.allergenicIndicator");
1565            else if (Configuration.doAutoCreate())
1566              this.allergenicIndicator = new BooleanType(); // bb
1567          return this.allergenicIndicator;
1568        }
1569
1570        public boolean hasAllergenicIndicatorElement() { 
1571          return this.allergenicIndicator != null && !this.allergenicIndicator.isEmpty();
1572        }
1573
1574        public boolean hasAllergenicIndicator() { 
1575          return this.allergenicIndicator != null && !this.allergenicIndicator.isEmpty();
1576        }
1577
1578        /**
1579         * @param value {@link #allergenicIndicator} (Whether the substance is a known or suspected allergen.). This is the underlying object with id, value and extensions. The accessor "getAllergenicIndicator" gives direct access to the value
1580         */
1581        public DeviceDefinitionMaterialComponent setAllergenicIndicatorElement(BooleanType value) { 
1582          this.allergenicIndicator = value;
1583          return this;
1584        }
1585
1586        /**
1587         * @return Whether the substance is a known or suspected allergen.
1588         */
1589        public boolean getAllergenicIndicator() { 
1590          return this.allergenicIndicator == null || this.allergenicIndicator.isEmpty() ? false : this.allergenicIndicator.getValue();
1591        }
1592
1593        /**
1594         * @param value Whether the substance is a known or suspected allergen.
1595         */
1596        public DeviceDefinitionMaterialComponent setAllergenicIndicator(boolean value) { 
1597            if (this.allergenicIndicator == null)
1598              this.allergenicIndicator = new BooleanType();
1599            this.allergenicIndicator.setValue(value);
1600          return this;
1601        }
1602
1603        protected void listChildren(List<Property> children) {
1604          super.listChildren(children);
1605          children.add(new Property("substance", "CodeableConcept", "The substance.", 0, 1, substance));
1606          children.add(new Property("alternate", "boolean", "Indicates an alternative material of the device.", 0, 1, alternate));
1607          children.add(new Property("allergenicIndicator", "boolean", "Whether the substance is a known or suspected allergen.", 0, 1, allergenicIndicator));
1608        }
1609
1610        @Override
1611        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1612          switch (_hash) {
1613          case 530040176: /*substance*/  return new Property("substance", "CodeableConcept", "The substance.", 0, 1, substance);
1614          case -1408024454: /*alternate*/  return new Property("alternate", "boolean", "Indicates an alternative material of the device.", 0, 1, alternate);
1615          case 75406931: /*allergenicIndicator*/  return new Property("allergenicIndicator", "boolean", "Whether the substance is a known or suspected allergen.", 0, 1, allergenicIndicator);
1616          default: return super.getNamedProperty(_hash, _name, _checkValid);
1617          }
1618
1619        }
1620
1621      @Override
1622      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1623        switch (hash) {
1624        case 530040176: /*substance*/ return this.substance == null ? new Base[0] : new Base[] {this.substance}; // CodeableConcept
1625        case -1408024454: /*alternate*/ return this.alternate == null ? new Base[0] : new Base[] {this.alternate}; // BooleanType
1626        case 75406931: /*allergenicIndicator*/ return this.allergenicIndicator == null ? new Base[0] : new Base[] {this.allergenicIndicator}; // BooleanType
1627        default: return super.getProperty(hash, name, checkValid);
1628        }
1629
1630      }
1631
1632      @Override
1633      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1634        switch (hash) {
1635        case 530040176: // substance
1636          this.substance = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1637          return value;
1638        case -1408024454: // alternate
1639          this.alternate = TypeConvertor.castToBoolean(value); // BooleanType
1640          return value;
1641        case 75406931: // allergenicIndicator
1642          this.allergenicIndicator = TypeConvertor.castToBoolean(value); // BooleanType
1643          return value;
1644        default: return super.setProperty(hash, name, value);
1645        }
1646
1647      }
1648
1649      @Override
1650      public Base setProperty(String name, Base value) throws FHIRException {
1651        if (name.equals("substance")) {
1652          this.substance = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1653        } else if (name.equals("alternate")) {
1654          this.alternate = TypeConvertor.castToBoolean(value); // BooleanType
1655        } else if (name.equals("allergenicIndicator")) {
1656          this.allergenicIndicator = TypeConvertor.castToBoolean(value); // BooleanType
1657        } else
1658          return super.setProperty(name, value);
1659        return value;
1660      }
1661
1662      @Override
1663      public Base makeProperty(int hash, String name) throws FHIRException {
1664        switch (hash) {
1665        case 530040176:  return getSubstance();
1666        case -1408024454:  return getAlternateElement();
1667        case 75406931:  return getAllergenicIndicatorElement();
1668        default: return super.makeProperty(hash, name);
1669        }
1670
1671      }
1672
1673      @Override
1674      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1675        switch (hash) {
1676        case 530040176: /*substance*/ return new String[] {"CodeableConcept"};
1677        case -1408024454: /*alternate*/ return new String[] {"boolean"};
1678        case 75406931: /*allergenicIndicator*/ return new String[] {"boolean"};
1679        default: return super.getTypesForProperty(hash, name);
1680        }
1681
1682      }
1683
1684      @Override
1685      public Base addChild(String name) throws FHIRException {
1686        if (name.equals("substance")) {
1687          this.substance = new CodeableConcept();
1688          return this.substance;
1689        }
1690        else if (name.equals("alternate")) {
1691          throw new FHIRException("Cannot call addChild on a primitive type DeviceDefinition.material.alternate");
1692        }
1693        else if (name.equals("allergenicIndicator")) {
1694          throw new FHIRException("Cannot call addChild on a primitive type DeviceDefinition.material.allergenicIndicator");
1695        }
1696        else
1697          return super.addChild(name);
1698      }
1699
1700      public DeviceDefinitionMaterialComponent copy() {
1701        DeviceDefinitionMaterialComponent dst = new DeviceDefinitionMaterialComponent();
1702        copyValues(dst);
1703        return dst;
1704      }
1705
1706      public void copyValues(DeviceDefinitionMaterialComponent dst) {
1707        super.copyValues(dst);
1708        dst.substance = substance == null ? null : substance.copy();
1709        dst.alternate = alternate == null ? null : alternate.copy();
1710        dst.allergenicIndicator = allergenicIndicator == null ? null : allergenicIndicator.copy();
1711      }
1712
1713      @Override
1714      public boolean equalsDeep(Base other_) {
1715        if (!super.equalsDeep(other_))
1716          return false;
1717        if (!(other_ instanceof DeviceDefinitionMaterialComponent))
1718          return false;
1719        DeviceDefinitionMaterialComponent o = (DeviceDefinitionMaterialComponent) other_;
1720        return compareDeep(substance, o.substance, true) && compareDeep(alternate, o.alternate, true) && compareDeep(allergenicIndicator, o.allergenicIndicator, true)
1721          ;
1722      }
1723
1724      @Override
1725      public boolean equalsShallow(Base other_) {
1726        if (!super.equalsShallow(other_))
1727          return false;
1728        if (!(other_ instanceof DeviceDefinitionMaterialComponent))
1729          return false;
1730        DeviceDefinitionMaterialComponent o = (DeviceDefinitionMaterialComponent) other_;
1731        return compareValues(alternate, o.alternate, true) && compareValues(allergenicIndicator, o.allergenicIndicator, true)
1732          ;
1733      }
1734
1735      public boolean isEmpty() {
1736        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(substance, alternate, allergenicIndicator
1737          );
1738      }
1739
1740  public String fhirType() {
1741    return "DeviceDefinition.material";
1742
1743  }
1744
1745  }
1746
1747    /**
1748     * Unique instance identifiers assigned to a device by the software, manufacturers, other organizations or owners. For example: handle ID.
1749     */
1750    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1751    @Description(shortDefinition="Instance identifier", formalDefinition="Unique instance identifiers assigned to a device by the software, manufacturers, other organizations or owners. For example: handle ID." )
1752    protected List<Identifier> identifier;
1753
1754    /**
1755     * Unique device identifier (UDI) assigned to device label or package.  Note that the Device may include multiple udiCarriers as it either may include just the udiCarrier for the jurisdiction it is sold, or for multiple jurisdictions it could have been sold.
1756     */
1757    @Child(name = "udiDeviceIdentifier", type = {}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1758    @Description(shortDefinition="Unique Device Identifier (UDI) Barcode string", formalDefinition="Unique device identifier (UDI) assigned to device label or package.  Note that the Device may include multiple udiCarriers as it either may include just the udiCarrier for the jurisdiction it is sold, or for multiple jurisdictions it could have been sold." )
1759    protected List<DeviceDefinitionUdiDeviceIdentifierComponent> udiDeviceIdentifier;
1760
1761    /**
1762     * A name of the manufacturer.
1763     */
1764    @Child(name = "manufacturer", type = {StringType.class, Organization.class}, order=2, min=0, max=1, modifier=false, summary=false)
1765    @Description(shortDefinition="Name of device manufacturer", formalDefinition="A name of the manufacturer." )
1766    protected DataType manufacturer;
1767
1768    /**
1769     * A name given to the device to identify it.
1770     */
1771    @Child(name = "deviceName", type = {}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1772    @Description(shortDefinition="A name given to the device to identify it", formalDefinition="A name given to the device to identify it." )
1773    protected List<DeviceDefinitionDeviceNameComponent> deviceName;
1774
1775    /**
1776     * The model number for the device.
1777     */
1778    @Child(name = "modelNumber", type = {StringType.class}, order=4, min=0, max=1, modifier=false, summary=false)
1779    @Description(shortDefinition="The model number for the device", formalDefinition="The model number for the device." )
1780    protected StringType modelNumber;
1781
1782    /**
1783     * What kind of device or device system this is.
1784     */
1785    @Child(name = "type", type = {CodeableConcept.class}, order=5, min=0, max=1, modifier=false, summary=false)
1786    @Description(shortDefinition="What kind of device or device system this is", formalDefinition="What kind of device or device system this is." )
1787    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/device-kind")
1788    protected CodeableConcept type;
1789
1790    /**
1791     * The capabilities supported on a  device, the standards to which the device conforms for a particular purpose, and used for the communication.
1792     */
1793    @Child(name = "specialization", type = {}, order=6, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1794    @Description(shortDefinition="The capabilities supported on a  device, the standards to which the device conforms for a particular purpose, and used for the communication", formalDefinition="The capabilities supported on a  device, the standards to which the device conforms for a particular purpose, and used for the communication." )
1795    protected List<DeviceDefinitionSpecializationComponent> specialization;
1796
1797    /**
1798     * The available versions of the device, e.g., software versions.
1799     */
1800    @Child(name = "version", type = {StringType.class}, order=7, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1801    @Description(shortDefinition="Available versions", formalDefinition="The available versions of the device, e.g., software versions." )
1802    protected List<StringType> version;
1803
1804    /**
1805     * Safety characteristics of the device.
1806     */
1807    @Child(name = "safety", type = {CodeableConcept.class}, order=8, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1808    @Description(shortDefinition="Safety characteristics of the device", formalDefinition="Safety characteristics of the device." )
1809    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/device-safety")
1810    protected List<CodeableConcept> safety;
1811
1812    /**
1813     * Shelf Life and storage information.
1814     */
1815    @Child(name = "shelfLifeStorage", type = {ProductShelfLife.class}, order=9, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1816    @Description(shortDefinition="Shelf Life and storage information", formalDefinition="Shelf Life and storage information." )
1817    protected List<ProductShelfLife> shelfLifeStorage;
1818
1819    /**
1820     * Dimensions, color etc.
1821     */
1822    @Child(name = "physicalCharacteristics", type = {ProdCharacteristic.class}, order=10, min=0, max=1, modifier=false, summary=false)
1823    @Description(shortDefinition="Dimensions, color etc.", formalDefinition="Dimensions, color etc." )
1824    protected ProdCharacteristic physicalCharacteristics;
1825
1826    /**
1827     * Language code for the human-readable text strings produced by the device (all supported).
1828     */
1829    @Child(name = "languageCode", type = {CodeableConcept.class}, order=11, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1830    @Description(shortDefinition="Language code for the human-readable text strings produced by the device (all supported)", formalDefinition="Language code for the human-readable text strings produced by the device (all supported)." )
1831    protected List<CodeableConcept> languageCode;
1832
1833    /**
1834     * Device capabilities.
1835     */
1836    @Child(name = "capability", type = {}, order=12, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1837    @Description(shortDefinition="Device capabilities", formalDefinition="Device capabilities." )
1838    protected List<DeviceDefinitionCapabilityComponent> capability;
1839
1840    /**
1841     * The actual configuration settings of a device as it actually operates, e.g., regulation status, time properties.
1842     */
1843    @Child(name = "property", type = {}, order=13, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1844    @Description(shortDefinition="The actual configuration settings of a device as it actually operates, e.g., regulation status, time properties", formalDefinition="The actual configuration settings of a device as it actually operates, e.g., regulation status, time properties." )
1845    protected List<DeviceDefinitionPropertyComponent> property;
1846
1847    /**
1848     * An organization that is responsible for the provision and ongoing maintenance of the device.
1849     */
1850    @Child(name = "owner", type = {Organization.class}, order=14, min=0, max=1, modifier=false, summary=false)
1851    @Description(shortDefinition="Organization responsible for device", formalDefinition="An organization that is responsible for the provision and ongoing maintenance of the device." )
1852    protected Reference owner;
1853
1854    /**
1855     * Contact details for an organization or a particular human that is responsible for the device.
1856     */
1857    @Child(name = "contact", type = {ContactPoint.class}, order=15, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1858    @Description(shortDefinition="Details for human/organization for support", formalDefinition="Contact details for an organization or a particular human that is responsible for the device." )
1859    protected List<ContactPoint> contact;
1860
1861    /**
1862     * A network address on which the device may be contacted directly.
1863     */
1864    @Child(name = "url", type = {UriType.class}, order=16, min=0, max=1, modifier=false, summary=false)
1865    @Description(shortDefinition="Network address to contact device", formalDefinition="A network address on which the device may be contacted directly." )
1866    protected UriType url;
1867
1868    /**
1869     * Access to on-line information about the device.
1870     */
1871    @Child(name = "onlineInformation", type = {UriType.class}, order=17, min=0, max=1, modifier=false, summary=false)
1872    @Description(shortDefinition="Access to on-line information", formalDefinition="Access to on-line information about the device." )
1873    protected UriType onlineInformation;
1874
1875    /**
1876     * Descriptive information, usage information or implantation information that is not captured in an existing element.
1877     */
1878    @Child(name = "note", type = {Annotation.class}, order=18, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1879    @Description(shortDefinition="Device notes and comments", formalDefinition="Descriptive information, usage information or implantation information that is not captured in an existing element." )
1880    protected List<Annotation> note;
1881
1882    /**
1883     * The quantity of the device present in the packaging (e.g. the number of devices present in a pack, or the number of devices in the same package of the medicinal product).
1884     */
1885    @Child(name = "quantity", type = {Quantity.class}, order=19, min=0, max=1, modifier=false, summary=false)
1886    @Description(shortDefinition="The quantity of the device present in the packaging (e.g. the number of devices present in a pack, or the number of devices in the same package of the medicinal product)", formalDefinition="The quantity of the device present in the packaging (e.g. the number of devices present in a pack, or the number of devices in the same package of the medicinal product)." )
1887    protected Quantity quantity;
1888
1889    /**
1890     * The parent device it can be part of.
1891     */
1892    @Child(name = "parentDevice", type = {DeviceDefinition.class}, order=20, min=0, max=1, modifier=false, summary=true)
1893    @Description(shortDefinition="The parent device it can be part of", formalDefinition="The parent device it can be part of." )
1894    protected Reference parentDevice;
1895
1896    /**
1897     * A substance used to create the material(s) of which the device is made.
1898     */
1899    @Child(name = "material", type = {}, order=21, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1900    @Description(shortDefinition="A substance used to create the material(s) of which the device is made", formalDefinition="A substance used to create the material(s) of which the device is made." )
1901    protected List<DeviceDefinitionMaterialComponent> material;
1902
1903    private static final long serialVersionUID = 740460962L;
1904
1905  /**
1906   * Constructor
1907   */
1908    public DeviceDefinition() {
1909      super();
1910    }
1911
1912    /**
1913     * @return {@link #identifier} (Unique instance identifiers assigned to a device by the software, manufacturers, other organizations or owners. For example: handle ID.)
1914     */
1915    public List<Identifier> getIdentifier() { 
1916      if (this.identifier == null)
1917        this.identifier = new ArrayList<Identifier>();
1918      return this.identifier;
1919    }
1920
1921    /**
1922     * @return Returns a reference to <code>this</code> for easy method chaining
1923     */
1924    public DeviceDefinition setIdentifier(List<Identifier> theIdentifier) { 
1925      this.identifier = theIdentifier;
1926      return this;
1927    }
1928
1929    public boolean hasIdentifier() { 
1930      if (this.identifier == null)
1931        return false;
1932      for (Identifier item : this.identifier)
1933        if (!item.isEmpty())
1934          return true;
1935      return false;
1936    }
1937
1938    public Identifier addIdentifier() { //3
1939      Identifier t = new Identifier();
1940      if (this.identifier == null)
1941        this.identifier = new ArrayList<Identifier>();
1942      this.identifier.add(t);
1943      return t;
1944    }
1945
1946    public DeviceDefinition addIdentifier(Identifier t) { //3
1947      if (t == null)
1948        return this;
1949      if (this.identifier == null)
1950        this.identifier = new ArrayList<Identifier>();
1951      this.identifier.add(t);
1952      return this;
1953    }
1954
1955    /**
1956     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist {3}
1957     */
1958    public Identifier getIdentifierFirstRep() { 
1959      if (getIdentifier().isEmpty()) {
1960        addIdentifier();
1961      }
1962      return getIdentifier().get(0);
1963    }
1964
1965    /**
1966     * @return {@link #udiDeviceIdentifier} (Unique device identifier (UDI) assigned to device label or package.  Note that the Device may include multiple udiCarriers as it either may include just the udiCarrier for the jurisdiction it is sold, or for multiple jurisdictions it could have been sold.)
1967     */
1968    public List<DeviceDefinitionUdiDeviceIdentifierComponent> getUdiDeviceIdentifier() { 
1969      if (this.udiDeviceIdentifier == null)
1970        this.udiDeviceIdentifier = new ArrayList<DeviceDefinitionUdiDeviceIdentifierComponent>();
1971      return this.udiDeviceIdentifier;
1972    }
1973
1974    /**
1975     * @return Returns a reference to <code>this</code> for easy method chaining
1976     */
1977    public DeviceDefinition setUdiDeviceIdentifier(List<DeviceDefinitionUdiDeviceIdentifierComponent> theUdiDeviceIdentifier) { 
1978      this.udiDeviceIdentifier = theUdiDeviceIdentifier;
1979      return this;
1980    }
1981
1982    public boolean hasUdiDeviceIdentifier() { 
1983      if (this.udiDeviceIdentifier == null)
1984        return false;
1985      for (DeviceDefinitionUdiDeviceIdentifierComponent item : this.udiDeviceIdentifier)
1986        if (!item.isEmpty())
1987          return true;
1988      return false;
1989    }
1990
1991    public DeviceDefinitionUdiDeviceIdentifierComponent addUdiDeviceIdentifier() { //3
1992      DeviceDefinitionUdiDeviceIdentifierComponent t = new DeviceDefinitionUdiDeviceIdentifierComponent();
1993      if (this.udiDeviceIdentifier == null)
1994        this.udiDeviceIdentifier = new ArrayList<DeviceDefinitionUdiDeviceIdentifierComponent>();
1995      this.udiDeviceIdentifier.add(t);
1996      return t;
1997    }
1998
1999    public DeviceDefinition addUdiDeviceIdentifier(DeviceDefinitionUdiDeviceIdentifierComponent t) { //3
2000      if (t == null)
2001        return this;
2002      if (this.udiDeviceIdentifier == null)
2003        this.udiDeviceIdentifier = new ArrayList<DeviceDefinitionUdiDeviceIdentifierComponent>();
2004      this.udiDeviceIdentifier.add(t);
2005      return this;
2006    }
2007
2008    /**
2009     * @return The first repetition of repeating field {@link #udiDeviceIdentifier}, creating it if it does not already exist {3}
2010     */
2011    public DeviceDefinitionUdiDeviceIdentifierComponent getUdiDeviceIdentifierFirstRep() { 
2012      if (getUdiDeviceIdentifier().isEmpty()) {
2013        addUdiDeviceIdentifier();
2014      }
2015      return getUdiDeviceIdentifier().get(0);
2016    }
2017
2018    /**
2019     * @return {@link #manufacturer} (A name of the manufacturer.)
2020     */
2021    public DataType getManufacturer() { 
2022      return this.manufacturer;
2023    }
2024
2025    /**
2026     * @return {@link #manufacturer} (A name of the manufacturer.)
2027     */
2028    public StringType getManufacturerStringType() throws FHIRException { 
2029      if (this.manufacturer == null)
2030        this.manufacturer = new StringType();
2031      if (!(this.manufacturer instanceof StringType))
2032        throw new FHIRException("Type mismatch: the type StringType was expected, but "+this.manufacturer.getClass().getName()+" was encountered");
2033      return (StringType) this.manufacturer;
2034    }
2035
2036    public boolean hasManufacturerStringType() { 
2037      return this != null && this.manufacturer instanceof StringType;
2038    }
2039
2040    /**
2041     * @return {@link #manufacturer} (A name of the manufacturer.)
2042     */
2043    public Reference getManufacturerReference() throws FHIRException { 
2044      if (this.manufacturer == null)
2045        this.manufacturer = new Reference();
2046      if (!(this.manufacturer instanceof Reference))
2047        throw new FHIRException("Type mismatch: the type Reference was expected, but "+this.manufacturer.getClass().getName()+" was encountered");
2048      return (Reference) this.manufacturer;
2049    }
2050
2051    public boolean hasManufacturerReference() { 
2052      return this != null && this.manufacturer instanceof Reference;
2053    }
2054
2055    public boolean hasManufacturer() { 
2056      return this.manufacturer != null && !this.manufacturer.isEmpty();
2057    }
2058
2059    /**
2060     * @param value {@link #manufacturer} (A name of the manufacturer.)
2061     */
2062    public DeviceDefinition setManufacturer(DataType value) { 
2063      if (value != null && !(value instanceof StringType || value instanceof Reference))
2064        throw new Error("Not the right type for DeviceDefinition.manufacturer[x]: "+value.fhirType());
2065      this.manufacturer = value;
2066      return this;
2067    }
2068
2069    /**
2070     * @return {@link #deviceName} (A name given to the device to identify it.)
2071     */
2072    public List<DeviceDefinitionDeviceNameComponent> getDeviceName() { 
2073      if (this.deviceName == null)
2074        this.deviceName = new ArrayList<DeviceDefinitionDeviceNameComponent>();
2075      return this.deviceName;
2076    }
2077
2078    /**
2079     * @return Returns a reference to <code>this</code> for easy method chaining
2080     */
2081    public DeviceDefinition setDeviceName(List<DeviceDefinitionDeviceNameComponent> theDeviceName) { 
2082      this.deviceName = theDeviceName;
2083      return this;
2084    }
2085
2086    public boolean hasDeviceName() { 
2087      if (this.deviceName == null)
2088        return false;
2089      for (DeviceDefinitionDeviceNameComponent item : this.deviceName)
2090        if (!item.isEmpty())
2091          return true;
2092      return false;
2093    }
2094
2095    public DeviceDefinitionDeviceNameComponent addDeviceName() { //3
2096      DeviceDefinitionDeviceNameComponent t = new DeviceDefinitionDeviceNameComponent();
2097      if (this.deviceName == null)
2098        this.deviceName = new ArrayList<DeviceDefinitionDeviceNameComponent>();
2099      this.deviceName.add(t);
2100      return t;
2101    }
2102
2103    public DeviceDefinition addDeviceName(DeviceDefinitionDeviceNameComponent t) { //3
2104      if (t == null)
2105        return this;
2106      if (this.deviceName == null)
2107        this.deviceName = new ArrayList<DeviceDefinitionDeviceNameComponent>();
2108      this.deviceName.add(t);
2109      return this;
2110    }
2111
2112    /**
2113     * @return The first repetition of repeating field {@link #deviceName}, creating it if it does not already exist {3}
2114     */
2115    public DeviceDefinitionDeviceNameComponent getDeviceNameFirstRep() { 
2116      if (getDeviceName().isEmpty()) {
2117        addDeviceName();
2118      }
2119      return getDeviceName().get(0);
2120    }
2121
2122    /**
2123     * @return {@link #modelNumber} (The model number for the device.). This is the underlying object with id, value and extensions. The accessor "getModelNumber" gives direct access to the value
2124     */
2125    public StringType getModelNumberElement() { 
2126      if (this.modelNumber == null)
2127        if (Configuration.errorOnAutoCreate())
2128          throw new Error("Attempt to auto-create DeviceDefinition.modelNumber");
2129        else if (Configuration.doAutoCreate())
2130          this.modelNumber = new StringType(); // bb
2131      return this.modelNumber;
2132    }
2133
2134    public boolean hasModelNumberElement() { 
2135      return this.modelNumber != null && !this.modelNumber.isEmpty();
2136    }
2137
2138    public boolean hasModelNumber() { 
2139      return this.modelNumber != null && !this.modelNumber.isEmpty();
2140    }
2141
2142    /**
2143     * @param value {@link #modelNumber} (The model number for the device.). This is the underlying object with id, value and extensions. The accessor "getModelNumber" gives direct access to the value
2144     */
2145    public DeviceDefinition setModelNumberElement(StringType value) { 
2146      this.modelNumber = value;
2147      return this;
2148    }
2149
2150    /**
2151     * @return The model number for the device.
2152     */
2153    public String getModelNumber() { 
2154      return this.modelNumber == null ? null : this.modelNumber.getValue();
2155    }
2156
2157    /**
2158     * @param value The model number for the device.
2159     */
2160    public DeviceDefinition setModelNumber(String value) { 
2161      if (Utilities.noString(value))
2162        this.modelNumber = null;
2163      else {
2164        if (this.modelNumber == null)
2165          this.modelNumber = new StringType();
2166        this.modelNumber.setValue(value);
2167      }
2168      return this;
2169    }
2170
2171    /**
2172     * @return {@link #type} (What kind of device or device system this is.)
2173     */
2174    public CodeableConcept getType() { 
2175      if (this.type == null)
2176        if (Configuration.errorOnAutoCreate())
2177          throw new Error("Attempt to auto-create DeviceDefinition.type");
2178        else if (Configuration.doAutoCreate())
2179          this.type = new CodeableConcept(); // cc
2180      return this.type;
2181    }
2182
2183    public boolean hasType() { 
2184      return this.type != null && !this.type.isEmpty();
2185    }
2186
2187    /**
2188     * @param value {@link #type} (What kind of device or device system this is.)
2189     */
2190    public DeviceDefinition setType(CodeableConcept value) { 
2191      this.type = value;
2192      return this;
2193    }
2194
2195    /**
2196     * @return {@link #specialization} (The capabilities supported on a  device, the standards to which the device conforms for a particular purpose, and used for the communication.)
2197     */
2198    public List<DeviceDefinitionSpecializationComponent> getSpecialization() { 
2199      if (this.specialization == null)
2200        this.specialization = new ArrayList<DeviceDefinitionSpecializationComponent>();
2201      return this.specialization;
2202    }
2203
2204    /**
2205     * @return Returns a reference to <code>this</code> for easy method chaining
2206     */
2207    public DeviceDefinition setSpecialization(List<DeviceDefinitionSpecializationComponent> theSpecialization) { 
2208      this.specialization = theSpecialization;
2209      return this;
2210    }
2211
2212    public boolean hasSpecialization() { 
2213      if (this.specialization == null)
2214        return false;
2215      for (DeviceDefinitionSpecializationComponent item : this.specialization)
2216        if (!item.isEmpty())
2217          return true;
2218      return false;
2219    }
2220
2221    public DeviceDefinitionSpecializationComponent addSpecialization() { //3
2222      DeviceDefinitionSpecializationComponent t = new DeviceDefinitionSpecializationComponent();
2223      if (this.specialization == null)
2224        this.specialization = new ArrayList<DeviceDefinitionSpecializationComponent>();
2225      this.specialization.add(t);
2226      return t;
2227    }
2228
2229    public DeviceDefinition addSpecialization(DeviceDefinitionSpecializationComponent t) { //3
2230      if (t == null)
2231        return this;
2232      if (this.specialization == null)
2233        this.specialization = new ArrayList<DeviceDefinitionSpecializationComponent>();
2234      this.specialization.add(t);
2235      return this;
2236    }
2237
2238    /**
2239     * @return The first repetition of repeating field {@link #specialization}, creating it if it does not already exist {3}
2240     */
2241    public DeviceDefinitionSpecializationComponent getSpecializationFirstRep() { 
2242      if (getSpecialization().isEmpty()) {
2243        addSpecialization();
2244      }
2245      return getSpecialization().get(0);
2246    }
2247
2248    /**
2249     * @return {@link #version} (The available versions of the device, e.g., software versions.)
2250     */
2251    public List<StringType> getVersion() { 
2252      if (this.version == null)
2253        this.version = new ArrayList<StringType>();
2254      return this.version;
2255    }
2256
2257    /**
2258     * @return Returns a reference to <code>this</code> for easy method chaining
2259     */
2260    public DeviceDefinition setVersion(List<StringType> theVersion) { 
2261      this.version = theVersion;
2262      return this;
2263    }
2264
2265    public boolean hasVersion() { 
2266      if (this.version == null)
2267        return false;
2268      for (StringType item : this.version)
2269        if (!item.isEmpty())
2270          return true;
2271      return false;
2272    }
2273
2274    /**
2275     * @return {@link #version} (The available versions of the device, e.g., software versions.)
2276     */
2277    public StringType addVersionElement() {//2 
2278      StringType t = new StringType();
2279      if (this.version == null)
2280        this.version = new ArrayList<StringType>();
2281      this.version.add(t);
2282      return t;
2283    }
2284
2285    /**
2286     * @param value {@link #version} (The available versions of the device, e.g., software versions.)
2287     */
2288    public DeviceDefinition addVersion(String value) { //1
2289      StringType t = new StringType();
2290      t.setValue(value);
2291      if (this.version == null)
2292        this.version = new ArrayList<StringType>();
2293      this.version.add(t);
2294      return this;
2295    }
2296
2297    /**
2298     * @param value {@link #version} (The available versions of the device, e.g., software versions.)
2299     */
2300    public boolean hasVersion(String value) { 
2301      if (this.version == null)
2302        return false;
2303      for (StringType v : this.version)
2304        if (v.getValue().equals(value)) // string
2305          return true;
2306      return false;
2307    }
2308
2309    /**
2310     * @return {@link #safety} (Safety characteristics of the device.)
2311     */
2312    public List<CodeableConcept> getSafety() { 
2313      if (this.safety == null)
2314        this.safety = new ArrayList<CodeableConcept>();
2315      return this.safety;
2316    }
2317
2318    /**
2319     * @return Returns a reference to <code>this</code> for easy method chaining
2320     */
2321    public DeviceDefinition setSafety(List<CodeableConcept> theSafety) { 
2322      this.safety = theSafety;
2323      return this;
2324    }
2325
2326    public boolean hasSafety() { 
2327      if (this.safety == null)
2328        return false;
2329      for (CodeableConcept item : this.safety)
2330        if (!item.isEmpty())
2331          return true;
2332      return false;
2333    }
2334
2335    public CodeableConcept addSafety() { //3
2336      CodeableConcept t = new CodeableConcept();
2337      if (this.safety == null)
2338        this.safety = new ArrayList<CodeableConcept>();
2339      this.safety.add(t);
2340      return t;
2341    }
2342
2343    public DeviceDefinition addSafety(CodeableConcept t) { //3
2344      if (t == null)
2345        return this;
2346      if (this.safety == null)
2347        this.safety = new ArrayList<CodeableConcept>();
2348      this.safety.add(t);
2349      return this;
2350    }
2351
2352    /**
2353     * @return The first repetition of repeating field {@link #safety}, creating it if it does not already exist {3}
2354     */
2355    public CodeableConcept getSafetyFirstRep() { 
2356      if (getSafety().isEmpty()) {
2357        addSafety();
2358      }
2359      return getSafety().get(0);
2360    }
2361
2362    /**
2363     * @return {@link #shelfLifeStorage} (Shelf Life and storage information.)
2364     */
2365    public List<ProductShelfLife> getShelfLifeStorage() { 
2366      if (this.shelfLifeStorage == null)
2367        this.shelfLifeStorage = new ArrayList<ProductShelfLife>();
2368      return this.shelfLifeStorage;
2369    }
2370
2371    /**
2372     * @return Returns a reference to <code>this</code> for easy method chaining
2373     */
2374    public DeviceDefinition setShelfLifeStorage(List<ProductShelfLife> theShelfLifeStorage) { 
2375      this.shelfLifeStorage = theShelfLifeStorage;
2376      return this;
2377    }
2378
2379    public boolean hasShelfLifeStorage() { 
2380      if (this.shelfLifeStorage == null)
2381        return false;
2382      for (ProductShelfLife item : this.shelfLifeStorage)
2383        if (!item.isEmpty())
2384          return true;
2385      return false;
2386    }
2387
2388    public ProductShelfLife addShelfLifeStorage() { //3
2389      ProductShelfLife t = new ProductShelfLife();
2390      if (this.shelfLifeStorage == null)
2391        this.shelfLifeStorage = new ArrayList<ProductShelfLife>();
2392      this.shelfLifeStorage.add(t);
2393      return t;
2394    }
2395
2396    public DeviceDefinition addShelfLifeStorage(ProductShelfLife t) { //3
2397      if (t == null)
2398        return this;
2399      if (this.shelfLifeStorage == null)
2400        this.shelfLifeStorage = new ArrayList<ProductShelfLife>();
2401      this.shelfLifeStorage.add(t);
2402      return this;
2403    }
2404
2405    /**
2406     * @return The first repetition of repeating field {@link #shelfLifeStorage}, creating it if it does not already exist {3}
2407     */
2408    public ProductShelfLife getShelfLifeStorageFirstRep() { 
2409      if (getShelfLifeStorage().isEmpty()) {
2410        addShelfLifeStorage();
2411      }
2412      return getShelfLifeStorage().get(0);
2413    }
2414
2415    /**
2416     * @return {@link #physicalCharacteristics} (Dimensions, color etc.)
2417     */
2418    public ProdCharacteristic getPhysicalCharacteristics() { 
2419      if (this.physicalCharacteristics == null)
2420        if (Configuration.errorOnAutoCreate())
2421          throw new Error("Attempt to auto-create DeviceDefinition.physicalCharacteristics");
2422        else if (Configuration.doAutoCreate())
2423          this.physicalCharacteristics = new ProdCharacteristic(); // cc
2424      return this.physicalCharacteristics;
2425    }
2426
2427    public boolean hasPhysicalCharacteristics() { 
2428      return this.physicalCharacteristics != null && !this.physicalCharacteristics.isEmpty();
2429    }
2430
2431    /**
2432     * @param value {@link #physicalCharacteristics} (Dimensions, color etc.)
2433     */
2434    public DeviceDefinition setPhysicalCharacteristics(ProdCharacteristic value) { 
2435      this.physicalCharacteristics = value;
2436      return this;
2437    }
2438
2439    /**
2440     * @return {@link #languageCode} (Language code for the human-readable text strings produced by the device (all supported).)
2441     */
2442    public List<CodeableConcept> getLanguageCode() { 
2443      if (this.languageCode == null)
2444        this.languageCode = new ArrayList<CodeableConcept>();
2445      return this.languageCode;
2446    }
2447
2448    /**
2449     * @return Returns a reference to <code>this</code> for easy method chaining
2450     */
2451    public DeviceDefinition setLanguageCode(List<CodeableConcept> theLanguageCode) { 
2452      this.languageCode = theLanguageCode;
2453      return this;
2454    }
2455
2456    public boolean hasLanguageCode() { 
2457      if (this.languageCode == null)
2458        return false;
2459      for (CodeableConcept item : this.languageCode)
2460        if (!item.isEmpty())
2461          return true;
2462      return false;
2463    }
2464
2465    public CodeableConcept addLanguageCode() { //3
2466      CodeableConcept t = new CodeableConcept();
2467      if (this.languageCode == null)
2468        this.languageCode = new ArrayList<CodeableConcept>();
2469      this.languageCode.add(t);
2470      return t;
2471    }
2472
2473    public DeviceDefinition addLanguageCode(CodeableConcept t) { //3
2474      if (t == null)
2475        return this;
2476      if (this.languageCode == null)
2477        this.languageCode = new ArrayList<CodeableConcept>();
2478      this.languageCode.add(t);
2479      return this;
2480    }
2481
2482    /**
2483     * @return The first repetition of repeating field {@link #languageCode}, creating it if it does not already exist {3}
2484     */
2485    public CodeableConcept getLanguageCodeFirstRep() { 
2486      if (getLanguageCode().isEmpty()) {
2487        addLanguageCode();
2488      }
2489      return getLanguageCode().get(0);
2490    }
2491
2492    /**
2493     * @return {@link #capability} (Device capabilities.)
2494     */
2495    public List<DeviceDefinitionCapabilityComponent> getCapability() { 
2496      if (this.capability == null)
2497        this.capability = new ArrayList<DeviceDefinitionCapabilityComponent>();
2498      return this.capability;
2499    }
2500
2501    /**
2502     * @return Returns a reference to <code>this</code> for easy method chaining
2503     */
2504    public DeviceDefinition setCapability(List<DeviceDefinitionCapabilityComponent> theCapability) { 
2505      this.capability = theCapability;
2506      return this;
2507    }
2508
2509    public boolean hasCapability() { 
2510      if (this.capability == null)
2511        return false;
2512      for (DeviceDefinitionCapabilityComponent item : this.capability)
2513        if (!item.isEmpty())
2514          return true;
2515      return false;
2516    }
2517
2518    public DeviceDefinitionCapabilityComponent addCapability() { //3
2519      DeviceDefinitionCapabilityComponent t = new DeviceDefinitionCapabilityComponent();
2520      if (this.capability == null)
2521        this.capability = new ArrayList<DeviceDefinitionCapabilityComponent>();
2522      this.capability.add(t);
2523      return t;
2524    }
2525
2526    public DeviceDefinition addCapability(DeviceDefinitionCapabilityComponent t) { //3
2527      if (t == null)
2528        return this;
2529      if (this.capability == null)
2530        this.capability = new ArrayList<DeviceDefinitionCapabilityComponent>();
2531      this.capability.add(t);
2532      return this;
2533    }
2534
2535    /**
2536     * @return The first repetition of repeating field {@link #capability}, creating it if it does not already exist {3}
2537     */
2538    public DeviceDefinitionCapabilityComponent getCapabilityFirstRep() { 
2539      if (getCapability().isEmpty()) {
2540        addCapability();
2541      }
2542      return getCapability().get(0);
2543    }
2544
2545    /**
2546     * @return {@link #property} (The actual configuration settings of a device as it actually operates, e.g., regulation status, time properties.)
2547     */
2548    public List<DeviceDefinitionPropertyComponent> getProperty() { 
2549      if (this.property == null)
2550        this.property = new ArrayList<DeviceDefinitionPropertyComponent>();
2551      return this.property;
2552    }
2553
2554    /**
2555     * @return Returns a reference to <code>this</code> for easy method chaining
2556     */
2557    public DeviceDefinition setProperty(List<DeviceDefinitionPropertyComponent> theProperty) { 
2558      this.property = theProperty;
2559      return this;
2560    }
2561
2562    public boolean hasProperty() { 
2563      if (this.property == null)
2564        return false;
2565      for (DeviceDefinitionPropertyComponent item : this.property)
2566        if (!item.isEmpty())
2567          return true;
2568      return false;
2569    }
2570
2571    public DeviceDefinitionPropertyComponent addProperty() { //3
2572      DeviceDefinitionPropertyComponent t = new DeviceDefinitionPropertyComponent();
2573      if (this.property == null)
2574        this.property = new ArrayList<DeviceDefinitionPropertyComponent>();
2575      this.property.add(t);
2576      return t;
2577    }
2578
2579    public DeviceDefinition addProperty(DeviceDefinitionPropertyComponent t) { //3
2580      if (t == null)
2581        return this;
2582      if (this.property == null)
2583        this.property = new ArrayList<DeviceDefinitionPropertyComponent>();
2584      this.property.add(t);
2585      return this;
2586    }
2587
2588    /**
2589     * @return The first repetition of repeating field {@link #property}, creating it if it does not already exist {3}
2590     */
2591    public DeviceDefinitionPropertyComponent getPropertyFirstRep() { 
2592      if (getProperty().isEmpty()) {
2593        addProperty();
2594      }
2595      return getProperty().get(0);
2596    }
2597
2598    /**
2599     * @return {@link #owner} (An organization that is responsible for the provision and ongoing maintenance of the device.)
2600     */
2601    public Reference getOwner() { 
2602      if (this.owner == null)
2603        if (Configuration.errorOnAutoCreate())
2604          throw new Error("Attempt to auto-create DeviceDefinition.owner");
2605        else if (Configuration.doAutoCreate())
2606          this.owner = new Reference(); // cc
2607      return this.owner;
2608    }
2609
2610    public boolean hasOwner() { 
2611      return this.owner != null && !this.owner.isEmpty();
2612    }
2613
2614    /**
2615     * @param value {@link #owner} (An organization that is responsible for the provision and ongoing maintenance of the device.)
2616     */
2617    public DeviceDefinition setOwner(Reference value) { 
2618      this.owner = value;
2619      return this;
2620    }
2621
2622    /**
2623     * @return {@link #contact} (Contact details for an organization or a particular human that is responsible for the device.)
2624     */
2625    public List<ContactPoint> getContact() { 
2626      if (this.contact == null)
2627        this.contact = new ArrayList<ContactPoint>();
2628      return this.contact;
2629    }
2630
2631    /**
2632     * @return Returns a reference to <code>this</code> for easy method chaining
2633     */
2634    public DeviceDefinition setContact(List<ContactPoint> theContact) { 
2635      this.contact = theContact;
2636      return this;
2637    }
2638
2639    public boolean hasContact() { 
2640      if (this.contact == null)
2641        return false;
2642      for (ContactPoint item : this.contact)
2643        if (!item.isEmpty())
2644          return true;
2645      return false;
2646    }
2647
2648    public ContactPoint addContact() { //3
2649      ContactPoint t = new ContactPoint();
2650      if (this.contact == null)
2651        this.contact = new ArrayList<ContactPoint>();
2652      this.contact.add(t);
2653      return t;
2654    }
2655
2656    public DeviceDefinition addContact(ContactPoint t) { //3
2657      if (t == null)
2658        return this;
2659      if (this.contact == null)
2660        this.contact = new ArrayList<ContactPoint>();
2661      this.contact.add(t);
2662      return this;
2663    }
2664
2665    /**
2666     * @return The first repetition of repeating field {@link #contact}, creating it if it does not already exist {3}
2667     */
2668    public ContactPoint getContactFirstRep() { 
2669      if (getContact().isEmpty()) {
2670        addContact();
2671      }
2672      return getContact().get(0);
2673    }
2674
2675    /**
2676     * @return {@link #url} (A network address on which the device may be contacted directly.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
2677     */
2678    public UriType getUrlElement() { 
2679      if (this.url == null)
2680        if (Configuration.errorOnAutoCreate())
2681          throw new Error("Attempt to auto-create DeviceDefinition.url");
2682        else if (Configuration.doAutoCreate())
2683          this.url = new UriType(); // bb
2684      return this.url;
2685    }
2686
2687    public boolean hasUrlElement() { 
2688      return this.url != null && !this.url.isEmpty();
2689    }
2690
2691    public boolean hasUrl() { 
2692      return this.url != null && !this.url.isEmpty();
2693    }
2694
2695    /**
2696     * @param value {@link #url} (A network address on which the device may be contacted directly.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
2697     */
2698    public DeviceDefinition setUrlElement(UriType value) { 
2699      this.url = value;
2700      return this;
2701    }
2702
2703    /**
2704     * @return A network address on which the device may be contacted directly.
2705     */
2706    public String getUrl() { 
2707      return this.url == null ? null : this.url.getValue();
2708    }
2709
2710    /**
2711     * @param value A network address on which the device may be contacted directly.
2712     */
2713    public DeviceDefinition setUrl(String value) { 
2714      if (Utilities.noString(value))
2715        this.url = null;
2716      else {
2717        if (this.url == null)
2718          this.url = new UriType();
2719        this.url.setValue(value);
2720      }
2721      return this;
2722    }
2723
2724    /**
2725     * @return {@link #onlineInformation} (Access to on-line information about the device.). This is the underlying object with id, value and extensions. The accessor "getOnlineInformation" gives direct access to the value
2726     */
2727    public UriType getOnlineInformationElement() { 
2728      if (this.onlineInformation == null)
2729        if (Configuration.errorOnAutoCreate())
2730          throw new Error("Attempt to auto-create DeviceDefinition.onlineInformation");
2731        else if (Configuration.doAutoCreate())
2732          this.onlineInformation = new UriType(); // bb
2733      return this.onlineInformation;
2734    }
2735
2736    public boolean hasOnlineInformationElement() { 
2737      return this.onlineInformation != null && !this.onlineInformation.isEmpty();
2738    }
2739
2740    public boolean hasOnlineInformation() { 
2741      return this.onlineInformation != null && !this.onlineInformation.isEmpty();
2742    }
2743
2744    /**
2745     * @param value {@link #onlineInformation} (Access to on-line information about the device.). This is the underlying object with id, value and extensions. The accessor "getOnlineInformation" gives direct access to the value
2746     */
2747    public DeviceDefinition setOnlineInformationElement(UriType value) { 
2748      this.onlineInformation = value;
2749      return this;
2750    }
2751
2752    /**
2753     * @return Access to on-line information about the device.
2754     */
2755    public String getOnlineInformation() { 
2756      return this.onlineInformation == null ? null : this.onlineInformation.getValue();
2757    }
2758
2759    /**
2760     * @param value Access to on-line information about the device.
2761     */
2762    public DeviceDefinition setOnlineInformation(String value) { 
2763      if (Utilities.noString(value))
2764        this.onlineInformation = null;
2765      else {
2766        if (this.onlineInformation == null)
2767          this.onlineInformation = new UriType();
2768        this.onlineInformation.setValue(value);
2769      }
2770      return this;
2771    }
2772
2773    /**
2774     * @return {@link #note} (Descriptive information, usage information or implantation information that is not captured in an existing element.)
2775     */
2776    public List<Annotation> getNote() { 
2777      if (this.note == null)
2778        this.note = new ArrayList<Annotation>();
2779      return this.note;
2780    }
2781
2782    /**
2783     * @return Returns a reference to <code>this</code> for easy method chaining
2784     */
2785    public DeviceDefinition setNote(List<Annotation> theNote) { 
2786      this.note = theNote;
2787      return this;
2788    }
2789
2790    public boolean hasNote() { 
2791      if (this.note == null)
2792        return false;
2793      for (Annotation item : this.note)
2794        if (!item.isEmpty())
2795          return true;
2796      return false;
2797    }
2798
2799    public Annotation addNote() { //3
2800      Annotation t = new Annotation();
2801      if (this.note == null)
2802        this.note = new ArrayList<Annotation>();
2803      this.note.add(t);
2804      return t;
2805    }
2806
2807    public DeviceDefinition addNote(Annotation t) { //3
2808      if (t == null)
2809        return this;
2810      if (this.note == null)
2811        this.note = new ArrayList<Annotation>();
2812      this.note.add(t);
2813      return this;
2814    }
2815
2816    /**
2817     * @return The first repetition of repeating field {@link #note}, creating it if it does not already exist {3}
2818     */
2819    public Annotation getNoteFirstRep() { 
2820      if (getNote().isEmpty()) {
2821        addNote();
2822      }
2823      return getNote().get(0);
2824    }
2825
2826    /**
2827     * @return {@link #quantity} (The quantity of the device present in the packaging (e.g. the number of devices present in a pack, or the number of devices in the same package of the medicinal product).)
2828     */
2829    public Quantity getQuantity() { 
2830      if (this.quantity == null)
2831        if (Configuration.errorOnAutoCreate())
2832          throw new Error("Attempt to auto-create DeviceDefinition.quantity");
2833        else if (Configuration.doAutoCreate())
2834          this.quantity = new Quantity(); // cc
2835      return this.quantity;
2836    }
2837
2838    public boolean hasQuantity() { 
2839      return this.quantity != null && !this.quantity.isEmpty();
2840    }
2841
2842    /**
2843     * @param value {@link #quantity} (The quantity of the device present in the packaging (e.g. the number of devices present in a pack, or the number of devices in the same package of the medicinal product).)
2844     */
2845    public DeviceDefinition setQuantity(Quantity value) { 
2846      this.quantity = value;
2847      return this;
2848    }
2849
2850    /**
2851     * @return {@link #parentDevice} (The parent device it can be part of.)
2852     */
2853    public Reference getParentDevice() { 
2854      if (this.parentDevice == null)
2855        if (Configuration.errorOnAutoCreate())
2856          throw new Error("Attempt to auto-create DeviceDefinition.parentDevice");
2857        else if (Configuration.doAutoCreate())
2858          this.parentDevice = new Reference(); // cc
2859      return this.parentDevice;
2860    }
2861
2862    public boolean hasParentDevice() { 
2863      return this.parentDevice != null && !this.parentDevice.isEmpty();
2864    }
2865
2866    /**
2867     * @param value {@link #parentDevice} (The parent device it can be part of.)
2868     */
2869    public DeviceDefinition setParentDevice(Reference value) { 
2870      this.parentDevice = value;
2871      return this;
2872    }
2873
2874    /**
2875     * @return {@link #material} (A substance used to create the material(s) of which the device is made.)
2876     */
2877    public List<DeviceDefinitionMaterialComponent> getMaterial() { 
2878      if (this.material == null)
2879        this.material = new ArrayList<DeviceDefinitionMaterialComponent>();
2880      return this.material;
2881    }
2882
2883    /**
2884     * @return Returns a reference to <code>this</code> for easy method chaining
2885     */
2886    public DeviceDefinition setMaterial(List<DeviceDefinitionMaterialComponent> theMaterial) { 
2887      this.material = theMaterial;
2888      return this;
2889    }
2890
2891    public boolean hasMaterial() { 
2892      if (this.material == null)
2893        return false;
2894      for (DeviceDefinitionMaterialComponent item : this.material)
2895        if (!item.isEmpty())
2896          return true;
2897      return false;
2898    }
2899
2900    public DeviceDefinitionMaterialComponent addMaterial() { //3
2901      DeviceDefinitionMaterialComponent t = new DeviceDefinitionMaterialComponent();
2902      if (this.material == null)
2903        this.material = new ArrayList<DeviceDefinitionMaterialComponent>();
2904      this.material.add(t);
2905      return t;
2906    }
2907
2908    public DeviceDefinition addMaterial(DeviceDefinitionMaterialComponent t) { //3
2909      if (t == null)
2910        return this;
2911      if (this.material == null)
2912        this.material = new ArrayList<DeviceDefinitionMaterialComponent>();
2913      this.material.add(t);
2914      return this;
2915    }
2916
2917    /**
2918     * @return The first repetition of repeating field {@link #material}, creating it if it does not already exist {3}
2919     */
2920    public DeviceDefinitionMaterialComponent getMaterialFirstRep() { 
2921      if (getMaterial().isEmpty()) {
2922        addMaterial();
2923      }
2924      return getMaterial().get(0);
2925    }
2926
2927      protected void listChildren(List<Property> children) {
2928        super.listChildren(children);
2929        children.add(new Property("identifier", "Identifier", "Unique instance identifiers assigned to a device by the software, manufacturers, other organizations or owners. For example: handle ID.", 0, java.lang.Integer.MAX_VALUE, identifier));
2930        children.add(new Property("udiDeviceIdentifier", "", "Unique device identifier (UDI) assigned to device label or package.  Note that the Device may include multiple udiCarriers as it either may include just the udiCarrier for the jurisdiction it is sold, or for multiple jurisdictions it could have been sold.", 0, java.lang.Integer.MAX_VALUE, udiDeviceIdentifier));
2931        children.add(new Property("manufacturer[x]", "string|Reference(Organization)", "A name of the manufacturer.", 0, 1, manufacturer));
2932        children.add(new Property("deviceName", "", "A name given to the device to identify it.", 0, java.lang.Integer.MAX_VALUE, deviceName));
2933        children.add(new Property("modelNumber", "string", "The model number for the device.", 0, 1, modelNumber));
2934        children.add(new Property("type", "CodeableConcept", "What kind of device or device system this is.", 0, 1, type));
2935        children.add(new Property("specialization", "", "The capabilities supported on a  device, the standards to which the device conforms for a particular purpose, and used for the communication.", 0, java.lang.Integer.MAX_VALUE, specialization));
2936        children.add(new Property("version", "string", "The available versions of the device, e.g., software versions.", 0, java.lang.Integer.MAX_VALUE, version));
2937        children.add(new Property("safety", "CodeableConcept", "Safety characteristics of the device.", 0, java.lang.Integer.MAX_VALUE, safety));
2938        children.add(new Property("shelfLifeStorage", "ProductShelfLife", "Shelf Life and storage information.", 0, java.lang.Integer.MAX_VALUE, shelfLifeStorage));
2939        children.add(new Property("physicalCharacteristics", "ProdCharacteristic", "Dimensions, color etc.", 0, 1, physicalCharacteristics));
2940        children.add(new Property("languageCode", "CodeableConcept", "Language code for the human-readable text strings produced by the device (all supported).", 0, java.lang.Integer.MAX_VALUE, languageCode));
2941        children.add(new Property("capability", "", "Device capabilities.", 0, java.lang.Integer.MAX_VALUE, capability));
2942        children.add(new Property("property", "", "The actual configuration settings of a device as it actually operates, e.g., regulation status, time properties.", 0, java.lang.Integer.MAX_VALUE, property));
2943        children.add(new Property("owner", "Reference(Organization)", "An organization that is responsible for the provision and ongoing maintenance of the device.", 0, 1, owner));
2944        children.add(new Property("contact", "ContactPoint", "Contact details for an organization or a particular human that is responsible for the device.", 0, java.lang.Integer.MAX_VALUE, contact));
2945        children.add(new Property("url", "uri", "A network address on which the device may be contacted directly.", 0, 1, url));
2946        children.add(new Property("onlineInformation", "uri", "Access to on-line information about the device.", 0, 1, onlineInformation));
2947        children.add(new Property("note", "Annotation", "Descriptive information, usage information or implantation information that is not captured in an existing element.", 0, java.lang.Integer.MAX_VALUE, note));
2948        children.add(new Property("quantity", "Quantity", "The quantity of the device present in the packaging (e.g. the number of devices present in a pack, or the number of devices in the same package of the medicinal product).", 0, 1, quantity));
2949        children.add(new Property("parentDevice", "Reference(DeviceDefinition)", "The parent device it can be part of.", 0, 1, parentDevice));
2950        children.add(new Property("material", "", "A substance used to create the material(s) of which the device is made.", 0, java.lang.Integer.MAX_VALUE, material));
2951      }
2952
2953      @Override
2954      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2955        switch (_hash) {
2956        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "Unique instance identifiers assigned to a device by the software, manufacturers, other organizations or owners. For example: handle ID.", 0, java.lang.Integer.MAX_VALUE, identifier);
2957        case -99121287: /*udiDeviceIdentifier*/  return new Property("udiDeviceIdentifier", "", "Unique device identifier (UDI) assigned to device label or package.  Note that the Device may include multiple udiCarriers as it either may include just the udiCarrier for the jurisdiction it is sold, or for multiple jurisdictions it could have been sold.", 0, java.lang.Integer.MAX_VALUE, udiDeviceIdentifier);
2958        case 418079503: /*manufacturer[x]*/  return new Property("manufacturer[x]", "string|Reference(Organization)", "A name of the manufacturer.", 0, 1, manufacturer);
2959        case -1969347631: /*manufacturer*/  return new Property("manufacturer[x]", "string|Reference(Organization)", "A name of the manufacturer.", 0, 1, manufacturer);
2960        case -630681790: /*manufacturerString*/  return new Property("manufacturer[x]", "string", "A name of the manufacturer.", 0, 1, manufacturer);
2961        case 1104934522: /*manufacturerReference*/  return new Property("manufacturer[x]", "Reference(Organization)", "A name of the manufacturer.", 0, 1, manufacturer);
2962        case 780988929: /*deviceName*/  return new Property("deviceName", "", "A name given to the device to identify it.", 0, java.lang.Integer.MAX_VALUE, deviceName);
2963        case 346619858: /*modelNumber*/  return new Property("modelNumber", "string", "The model number for the device.", 0, 1, modelNumber);
2964        case 3575610: /*type*/  return new Property("type", "CodeableConcept", "What kind of device or device system this is.", 0, 1, type);
2965        case 682815883: /*specialization*/  return new Property("specialization", "", "The capabilities supported on a  device, the standards to which the device conforms for a particular purpose, and used for the communication.", 0, java.lang.Integer.MAX_VALUE, specialization);
2966        case 351608024: /*version*/  return new Property("version", "string", "The available versions of the device, e.g., software versions.", 0, java.lang.Integer.MAX_VALUE, version);
2967        case -909893934: /*safety*/  return new Property("safety", "CodeableConcept", "Safety characteristics of the device.", 0, java.lang.Integer.MAX_VALUE, safety);
2968        case 172049237: /*shelfLifeStorage*/  return new Property("shelfLifeStorage", "ProductShelfLife", "Shelf Life and storage information.", 0, java.lang.Integer.MAX_VALUE, shelfLifeStorage);
2969        case -1599676319: /*physicalCharacteristics*/  return new Property("physicalCharacteristics", "ProdCharacteristic", "Dimensions, color etc.", 0, 1, physicalCharacteristics);
2970        case -2092349083: /*languageCode*/  return new Property("languageCode", "CodeableConcept", "Language code for the human-readable text strings produced by the device (all supported).", 0, java.lang.Integer.MAX_VALUE, languageCode);
2971        case -783669992: /*capability*/  return new Property("capability", "", "Device capabilities.", 0, java.lang.Integer.MAX_VALUE, capability);
2972        case -993141291: /*property*/  return new Property("property", "", "The actual configuration settings of a device as it actually operates, e.g., regulation status, time properties.", 0, java.lang.Integer.MAX_VALUE, property);
2973        case 106164915: /*owner*/  return new Property("owner", "Reference(Organization)", "An organization that is responsible for the provision and ongoing maintenance of the device.", 0, 1, owner);
2974        case 951526432: /*contact*/  return new Property("contact", "ContactPoint", "Contact details for an organization or a particular human that is responsible for the device.", 0, java.lang.Integer.MAX_VALUE, contact);
2975        case 116079: /*url*/  return new Property("url", "uri", "A network address on which the device may be contacted directly.", 0, 1, url);
2976        case -788511527: /*onlineInformation*/  return new Property("onlineInformation", "uri", "Access to on-line information about the device.", 0, 1, onlineInformation);
2977        case 3387378: /*note*/  return new Property("note", "Annotation", "Descriptive information, usage information or implantation information that is not captured in an existing element.", 0, java.lang.Integer.MAX_VALUE, note);
2978        case -1285004149: /*quantity*/  return new Property("quantity", "Quantity", "The quantity of the device present in the packaging (e.g. the number of devices present in a pack, or the number of devices in the same package of the medicinal product).", 0, 1, quantity);
2979        case 620260256: /*parentDevice*/  return new Property("parentDevice", "Reference(DeviceDefinition)", "The parent device it can be part of.", 0, 1, parentDevice);
2980        case 299066663: /*material*/  return new Property("material", "", "A substance used to create the material(s) of which the device is made.", 0, java.lang.Integer.MAX_VALUE, material);
2981        default: return super.getNamedProperty(_hash, _name, _checkValid);
2982        }
2983
2984      }
2985
2986      @Override
2987      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2988        switch (hash) {
2989        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
2990        case -99121287: /*udiDeviceIdentifier*/ return this.udiDeviceIdentifier == null ? new Base[0] : this.udiDeviceIdentifier.toArray(new Base[this.udiDeviceIdentifier.size()]); // DeviceDefinitionUdiDeviceIdentifierComponent
2991        case -1969347631: /*manufacturer*/ return this.manufacturer == null ? new Base[0] : new Base[] {this.manufacturer}; // DataType
2992        case 780988929: /*deviceName*/ return this.deviceName == null ? new Base[0] : this.deviceName.toArray(new Base[this.deviceName.size()]); // DeviceDefinitionDeviceNameComponent
2993        case 346619858: /*modelNumber*/ return this.modelNumber == null ? new Base[0] : new Base[] {this.modelNumber}; // StringType
2994        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
2995        case 682815883: /*specialization*/ return this.specialization == null ? new Base[0] : this.specialization.toArray(new Base[this.specialization.size()]); // DeviceDefinitionSpecializationComponent
2996        case 351608024: /*version*/ return this.version == null ? new Base[0] : this.version.toArray(new Base[this.version.size()]); // StringType
2997        case -909893934: /*safety*/ return this.safety == null ? new Base[0] : this.safety.toArray(new Base[this.safety.size()]); // CodeableConcept
2998        case 172049237: /*shelfLifeStorage*/ return this.shelfLifeStorage == null ? new Base[0] : this.shelfLifeStorage.toArray(new Base[this.shelfLifeStorage.size()]); // ProductShelfLife
2999        case -1599676319: /*physicalCharacteristics*/ return this.physicalCharacteristics == null ? new Base[0] : new Base[] {this.physicalCharacteristics}; // ProdCharacteristic
3000        case -2092349083: /*languageCode*/ return this.languageCode == null ? new Base[0] : this.languageCode.toArray(new Base[this.languageCode.size()]); // CodeableConcept
3001        case -783669992: /*capability*/ return this.capability == null ? new Base[0] : this.capability.toArray(new Base[this.capability.size()]); // DeviceDefinitionCapabilityComponent
3002        case -993141291: /*property*/ return this.property == null ? new Base[0] : this.property.toArray(new Base[this.property.size()]); // DeviceDefinitionPropertyComponent
3003        case 106164915: /*owner*/ return this.owner == null ? new Base[0] : new Base[] {this.owner}; // Reference
3004        case 951526432: /*contact*/ return this.contact == null ? new Base[0] : this.contact.toArray(new Base[this.contact.size()]); // ContactPoint
3005        case 116079: /*url*/ return this.url == null ? new Base[0] : new Base[] {this.url}; // UriType
3006        case -788511527: /*onlineInformation*/ return this.onlineInformation == null ? new Base[0] : new Base[] {this.onlineInformation}; // UriType
3007        case 3387378: /*note*/ return this.note == null ? new Base[0] : this.note.toArray(new Base[this.note.size()]); // Annotation
3008        case -1285004149: /*quantity*/ return this.quantity == null ? new Base[0] : new Base[] {this.quantity}; // Quantity
3009        case 620260256: /*parentDevice*/ return this.parentDevice == null ? new Base[0] : new Base[] {this.parentDevice}; // Reference
3010        case 299066663: /*material*/ return this.material == null ? new Base[0] : this.material.toArray(new Base[this.material.size()]); // DeviceDefinitionMaterialComponent
3011        default: return super.getProperty(hash, name, checkValid);
3012        }
3013
3014      }
3015
3016      @Override
3017      public Base setProperty(int hash, String name, Base value) throws FHIRException {
3018        switch (hash) {
3019        case -1618432855: // identifier
3020          this.getIdentifier().add(TypeConvertor.castToIdentifier(value)); // Identifier
3021          return value;
3022        case -99121287: // udiDeviceIdentifier
3023          this.getUdiDeviceIdentifier().add((DeviceDefinitionUdiDeviceIdentifierComponent) value); // DeviceDefinitionUdiDeviceIdentifierComponent
3024          return value;
3025        case -1969347631: // manufacturer
3026          this.manufacturer = TypeConvertor.castToType(value); // DataType
3027          return value;
3028        case 780988929: // deviceName
3029          this.getDeviceName().add((DeviceDefinitionDeviceNameComponent) value); // DeviceDefinitionDeviceNameComponent
3030          return value;
3031        case 346619858: // modelNumber
3032          this.modelNumber = TypeConvertor.castToString(value); // StringType
3033          return value;
3034        case 3575610: // type
3035          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3036          return value;
3037        case 682815883: // specialization
3038          this.getSpecialization().add((DeviceDefinitionSpecializationComponent) value); // DeviceDefinitionSpecializationComponent
3039          return value;
3040        case 351608024: // version
3041          this.getVersion().add(TypeConvertor.castToString(value)); // StringType
3042          return value;
3043        case -909893934: // safety
3044          this.getSafety().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
3045          return value;
3046        case 172049237: // shelfLifeStorage
3047          this.getShelfLifeStorage().add(TypeConvertor.castToProductShelfLife(value)); // ProductShelfLife
3048          return value;
3049        case -1599676319: // physicalCharacteristics
3050          this.physicalCharacteristics = TypeConvertor.castToProdCharacteristic(value); // ProdCharacteristic
3051          return value;
3052        case -2092349083: // languageCode
3053          this.getLanguageCode().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
3054          return value;
3055        case -783669992: // capability
3056          this.getCapability().add((DeviceDefinitionCapabilityComponent) value); // DeviceDefinitionCapabilityComponent
3057          return value;
3058        case -993141291: // property
3059          this.getProperty().add((DeviceDefinitionPropertyComponent) value); // DeviceDefinitionPropertyComponent
3060          return value;
3061        case 106164915: // owner
3062          this.owner = TypeConvertor.castToReference(value); // Reference
3063          return value;
3064        case 951526432: // contact
3065          this.getContact().add(TypeConvertor.castToContactPoint(value)); // ContactPoint
3066          return value;
3067        case 116079: // url
3068          this.url = TypeConvertor.castToUri(value); // UriType
3069          return value;
3070        case -788511527: // onlineInformation
3071          this.onlineInformation = TypeConvertor.castToUri(value); // UriType
3072          return value;
3073        case 3387378: // note
3074          this.getNote().add(TypeConvertor.castToAnnotation(value)); // Annotation
3075          return value;
3076        case -1285004149: // quantity
3077          this.quantity = TypeConvertor.castToQuantity(value); // Quantity
3078          return value;
3079        case 620260256: // parentDevice
3080          this.parentDevice = TypeConvertor.castToReference(value); // Reference
3081          return value;
3082        case 299066663: // material
3083          this.getMaterial().add((DeviceDefinitionMaterialComponent) value); // DeviceDefinitionMaterialComponent
3084          return value;
3085        default: return super.setProperty(hash, name, value);
3086        }
3087
3088      }
3089
3090      @Override
3091      public Base setProperty(String name, Base value) throws FHIRException {
3092        if (name.equals("identifier")) {
3093          this.getIdentifier().add(TypeConvertor.castToIdentifier(value));
3094        } else if (name.equals("udiDeviceIdentifier")) {
3095          this.getUdiDeviceIdentifier().add((DeviceDefinitionUdiDeviceIdentifierComponent) value);
3096        } else if (name.equals("manufacturer[x]")) {
3097          this.manufacturer = TypeConvertor.castToType(value); // DataType
3098        } else if (name.equals("deviceName")) {
3099          this.getDeviceName().add((DeviceDefinitionDeviceNameComponent) value);
3100        } else if (name.equals("modelNumber")) {
3101          this.modelNumber = TypeConvertor.castToString(value); // StringType
3102        } else if (name.equals("type")) {
3103          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3104        } else if (name.equals("specialization")) {
3105          this.getSpecialization().add((DeviceDefinitionSpecializationComponent) value);
3106        } else if (name.equals("version")) {
3107          this.getVersion().add(TypeConvertor.castToString(value));
3108        } else if (name.equals("safety")) {
3109          this.getSafety().add(TypeConvertor.castToCodeableConcept(value));
3110        } else if (name.equals("shelfLifeStorage")) {
3111          this.getShelfLifeStorage().add(TypeConvertor.castToProductShelfLife(value));
3112        } else if (name.equals("physicalCharacteristics")) {
3113          this.physicalCharacteristics = TypeConvertor.castToProdCharacteristic(value); // ProdCharacteristic
3114        } else if (name.equals("languageCode")) {
3115          this.getLanguageCode().add(TypeConvertor.castToCodeableConcept(value));
3116        } else if (name.equals("capability")) {
3117          this.getCapability().add((DeviceDefinitionCapabilityComponent) value);
3118        } else if (name.equals("property")) {
3119          this.getProperty().add((DeviceDefinitionPropertyComponent) value);
3120        } else if (name.equals("owner")) {
3121          this.owner = TypeConvertor.castToReference(value); // Reference
3122        } else if (name.equals("contact")) {
3123          this.getContact().add(TypeConvertor.castToContactPoint(value));
3124        } else if (name.equals("url")) {
3125          this.url = TypeConvertor.castToUri(value); // UriType
3126        } else if (name.equals("onlineInformation")) {
3127          this.onlineInformation = TypeConvertor.castToUri(value); // UriType
3128        } else if (name.equals("note")) {
3129          this.getNote().add(TypeConvertor.castToAnnotation(value));
3130        } else if (name.equals("quantity")) {
3131          this.quantity = TypeConvertor.castToQuantity(value); // Quantity
3132        } else if (name.equals("parentDevice")) {
3133          this.parentDevice = TypeConvertor.castToReference(value); // Reference
3134        } else if (name.equals("material")) {
3135          this.getMaterial().add((DeviceDefinitionMaterialComponent) value);
3136        } else
3137          return super.setProperty(name, value);
3138        return value;
3139      }
3140
3141      @Override
3142      public Base makeProperty(int hash, String name) throws FHIRException {
3143        switch (hash) {
3144        case -1618432855:  return addIdentifier(); 
3145        case -99121287:  return addUdiDeviceIdentifier(); 
3146        case 418079503:  return getManufacturer();
3147        case -1969347631:  return getManufacturer();
3148        case 780988929:  return addDeviceName(); 
3149        case 346619858:  return getModelNumberElement();
3150        case 3575610:  return getType();
3151        case 682815883:  return addSpecialization(); 
3152        case 351608024:  return addVersionElement();
3153        case -909893934:  return addSafety(); 
3154        case 172049237:  return addShelfLifeStorage(); 
3155        case -1599676319:  return getPhysicalCharacteristics();
3156        case -2092349083:  return addLanguageCode(); 
3157        case -783669992:  return addCapability(); 
3158        case -993141291:  return addProperty(); 
3159        case 106164915:  return getOwner();
3160        case 951526432:  return addContact(); 
3161        case 116079:  return getUrlElement();
3162        case -788511527:  return getOnlineInformationElement();
3163        case 3387378:  return addNote(); 
3164        case -1285004149:  return getQuantity();
3165        case 620260256:  return getParentDevice();
3166        case 299066663:  return addMaterial(); 
3167        default: return super.makeProperty(hash, name);
3168        }
3169
3170      }
3171
3172      @Override
3173      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
3174        switch (hash) {
3175        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
3176        case -99121287: /*udiDeviceIdentifier*/ return new String[] {};
3177        case -1969347631: /*manufacturer*/ return new String[] {"string", "Reference"};
3178        case 780988929: /*deviceName*/ return new String[] {};
3179        case 346619858: /*modelNumber*/ return new String[] {"string"};
3180        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
3181        case 682815883: /*specialization*/ return new String[] {};
3182        case 351608024: /*version*/ return new String[] {"string"};
3183        case -909893934: /*safety*/ return new String[] {"CodeableConcept"};
3184        case 172049237: /*shelfLifeStorage*/ return new String[] {"ProductShelfLife"};
3185        case -1599676319: /*physicalCharacteristics*/ return new String[] {"ProdCharacteristic"};
3186        case -2092349083: /*languageCode*/ return new String[] {"CodeableConcept"};
3187        case -783669992: /*capability*/ return new String[] {};
3188        case -993141291: /*property*/ return new String[] {};
3189        case 106164915: /*owner*/ return new String[] {"Reference"};
3190        case 951526432: /*contact*/ return new String[] {"ContactPoint"};
3191        case 116079: /*url*/ return new String[] {"uri"};
3192        case -788511527: /*onlineInformation*/ return new String[] {"uri"};
3193        case 3387378: /*note*/ return new String[] {"Annotation"};
3194        case -1285004149: /*quantity*/ return new String[] {"Quantity"};
3195        case 620260256: /*parentDevice*/ return new String[] {"Reference"};
3196        case 299066663: /*material*/ return new String[] {};
3197        default: return super.getTypesForProperty(hash, name);
3198        }
3199
3200      }
3201
3202      @Override
3203      public Base addChild(String name) throws FHIRException {
3204        if (name.equals("identifier")) {
3205          return addIdentifier();
3206        }
3207        else if (name.equals("udiDeviceIdentifier")) {
3208          return addUdiDeviceIdentifier();
3209        }
3210        else if (name.equals("manufacturerString")) {
3211          this.manufacturer = new StringType();
3212          return this.manufacturer;
3213        }
3214        else if (name.equals("manufacturerReference")) {
3215          this.manufacturer = new Reference();
3216          return this.manufacturer;
3217        }
3218        else if (name.equals("deviceName")) {
3219          return addDeviceName();
3220        }
3221        else if (name.equals("modelNumber")) {
3222          throw new FHIRException("Cannot call addChild on a primitive type DeviceDefinition.modelNumber");
3223        }
3224        else if (name.equals("type")) {
3225          this.type = new CodeableConcept();
3226          return this.type;
3227        }
3228        else if (name.equals("specialization")) {
3229          return addSpecialization();
3230        }
3231        else if (name.equals("version")) {
3232          throw new FHIRException("Cannot call addChild on a primitive type DeviceDefinition.version");
3233        }
3234        else if (name.equals("safety")) {
3235          return addSafety();
3236        }
3237        else if (name.equals("shelfLifeStorage")) {
3238          return addShelfLifeStorage();
3239        }
3240        else if (name.equals("physicalCharacteristics")) {
3241          this.physicalCharacteristics = new ProdCharacteristic();
3242          return this.physicalCharacteristics;
3243        }
3244        else if (name.equals("languageCode")) {
3245          return addLanguageCode();
3246        }
3247        else if (name.equals("capability")) {
3248          return addCapability();
3249        }
3250        else if (name.equals("property")) {
3251          return addProperty();
3252        }
3253        else if (name.equals("owner")) {
3254          this.owner = new Reference();
3255          return this.owner;
3256        }
3257        else if (name.equals("contact")) {
3258          return addContact();
3259        }
3260        else if (name.equals("url")) {
3261          throw new FHIRException("Cannot call addChild on a primitive type DeviceDefinition.url");
3262        }
3263        else if (name.equals("onlineInformation")) {
3264          throw new FHIRException("Cannot call addChild on a primitive type DeviceDefinition.onlineInformation");
3265        }
3266        else if (name.equals("note")) {
3267          return addNote();
3268        }
3269        else if (name.equals("quantity")) {
3270          this.quantity = new Quantity();
3271          return this.quantity;
3272        }
3273        else if (name.equals("parentDevice")) {
3274          this.parentDevice = new Reference();
3275          return this.parentDevice;
3276        }
3277        else if (name.equals("material")) {
3278          return addMaterial();
3279        }
3280        else
3281          return super.addChild(name);
3282      }
3283
3284  public String fhirType() {
3285    return "DeviceDefinition";
3286
3287  }
3288
3289      public DeviceDefinition copy() {
3290        DeviceDefinition dst = new DeviceDefinition();
3291        copyValues(dst);
3292        return dst;
3293      }
3294
3295      public void copyValues(DeviceDefinition dst) {
3296        super.copyValues(dst);
3297        if (identifier != null) {
3298          dst.identifier = new ArrayList<Identifier>();
3299          for (Identifier i : identifier)
3300            dst.identifier.add(i.copy());
3301        };
3302        if (udiDeviceIdentifier != null) {
3303          dst.udiDeviceIdentifier = new ArrayList<DeviceDefinitionUdiDeviceIdentifierComponent>();
3304          for (DeviceDefinitionUdiDeviceIdentifierComponent i : udiDeviceIdentifier)
3305            dst.udiDeviceIdentifier.add(i.copy());
3306        };
3307        dst.manufacturer = manufacturer == null ? null : manufacturer.copy();
3308        if (deviceName != null) {
3309          dst.deviceName = new ArrayList<DeviceDefinitionDeviceNameComponent>();
3310          for (DeviceDefinitionDeviceNameComponent i : deviceName)
3311            dst.deviceName.add(i.copy());
3312        };
3313        dst.modelNumber = modelNumber == null ? null : modelNumber.copy();
3314        dst.type = type == null ? null : type.copy();
3315        if (specialization != null) {
3316          dst.specialization = new ArrayList<DeviceDefinitionSpecializationComponent>();
3317          for (DeviceDefinitionSpecializationComponent i : specialization)
3318            dst.specialization.add(i.copy());
3319        };
3320        if (version != null) {
3321          dst.version = new ArrayList<StringType>();
3322          for (StringType i : version)
3323            dst.version.add(i.copy());
3324        };
3325        if (safety != null) {
3326          dst.safety = new ArrayList<CodeableConcept>();
3327          for (CodeableConcept i : safety)
3328            dst.safety.add(i.copy());
3329        };
3330        if (shelfLifeStorage != null) {
3331          dst.shelfLifeStorage = new ArrayList<ProductShelfLife>();
3332          for (ProductShelfLife i : shelfLifeStorage)
3333            dst.shelfLifeStorage.add(i.copy());
3334        };
3335        dst.physicalCharacteristics = physicalCharacteristics == null ? null : physicalCharacteristics.copy();
3336        if (languageCode != null) {
3337          dst.languageCode = new ArrayList<CodeableConcept>();
3338          for (CodeableConcept i : languageCode)
3339            dst.languageCode.add(i.copy());
3340        };
3341        if (capability != null) {
3342          dst.capability = new ArrayList<DeviceDefinitionCapabilityComponent>();
3343          for (DeviceDefinitionCapabilityComponent i : capability)
3344            dst.capability.add(i.copy());
3345        };
3346        if (property != null) {
3347          dst.property = new ArrayList<DeviceDefinitionPropertyComponent>();
3348          for (DeviceDefinitionPropertyComponent i : property)
3349            dst.property.add(i.copy());
3350        };
3351        dst.owner = owner == null ? null : owner.copy();
3352        if (contact != null) {
3353          dst.contact = new ArrayList<ContactPoint>();
3354          for (ContactPoint i : contact)
3355            dst.contact.add(i.copy());
3356        };
3357        dst.url = url == null ? null : url.copy();
3358        dst.onlineInformation = onlineInformation == null ? null : onlineInformation.copy();
3359        if (note != null) {
3360          dst.note = new ArrayList<Annotation>();
3361          for (Annotation i : note)
3362            dst.note.add(i.copy());
3363        };
3364        dst.quantity = quantity == null ? null : quantity.copy();
3365        dst.parentDevice = parentDevice == null ? null : parentDevice.copy();
3366        if (material != null) {
3367          dst.material = new ArrayList<DeviceDefinitionMaterialComponent>();
3368          for (DeviceDefinitionMaterialComponent i : material)
3369            dst.material.add(i.copy());
3370        };
3371      }
3372
3373      protected DeviceDefinition typedCopy() {
3374        return copy();
3375      }
3376
3377      @Override
3378      public boolean equalsDeep(Base other_) {
3379        if (!super.equalsDeep(other_))
3380          return false;
3381        if (!(other_ instanceof DeviceDefinition))
3382          return false;
3383        DeviceDefinition o = (DeviceDefinition) other_;
3384        return compareDeep(identifier, o.identifier, true) && compareDeep(udiDeviceIdentifier, o.udiDeviceIdentifier, true)
3385           && compareDeep(manufacturer, o.manufacturer, true) && compareDeep(deviceName, o.deviceName, true)
3386           && compareDeep(modelNumber, o.modelNumber, true) && compareDeep(type, o.type, true) && compareDeep(specialization, o.specialization, true)
3387           && compareDeep(version, o.version, true) && compareDeep(safety, o.safety, true) && compareDeep(shelfLifeStorage, o.shelfLifeStorage, true)
3388           && compareDeep(physicalCharacteristics, o.physicalCharacteristics, true) && compareDeep(languageCode, o.languageCode, true)
3389           && compareDeep(capability, o.capability, true) && compareDeep(property, o.property, true) && compareDeep(owner, o.owner, true)
3390           && compareDeep(contact, o.contact, true) && compareDeep(url, o.url, true) && compareDeep(onlineInformation, o.onlineInformation, true)
3391           && compareDeep(note, o.note, true) && compareDeep(quantity, o.quantity, true) && compareDeep(parentDevice, o.parentDevice, true)
3392           && compareDeep(material, o.material, true);
3393      }
3394
3395      @Override
3396      public boolean equalsShallow(Base other_) {
3397        if (!super.equalsShallow(other_))
3398          return false;
3399        if (!(other_ instanceof DeviceDefinition))
3400          return false;
3401        DeviceDefinition o = (DeviceDefinition) other_;
3402        return compareValues(modelNumber, o.modelNumber, true) && compareValues(version, o.version, true) && compareValues(url, o.url, true)
3403           && compareValues(onlineInformation, o.onlineInformation, true);
3404      }
3405
3406      public boolean isEmpty() {
3407        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, udiDeviceIdentifier
3408          , manufacturer, deviceName, modelNumber, type, specialization, version, safety
3409          , shelfLifeStorage, physicalCharacteristics, languageCode, capability, property, owner
3410          , contact, url, onlineInformation, note, quantity, parentDevice, material);
3411      }
3412
3413  @Override
3414  public ResourceType getResourceType() {
3415    return ResourceType.DeviceDefinition;
3416   }
3417
3418 /**
3419   * Search parameter: <b>identifier</b>
3420   * <p>
3421   * Description: <b>The identifier of the component</b><br>
3422   * Type: <b>token</b><br>
3423   * Path: <b>DeviceDefinition.identifier</b><br>
3424   * </p>
3425   */
3426  @SearchParamDefinition(name="identifier", path="DeviceDefinition.identifier", description="The identifier of the component", type="token" )
3427  public static final String SP_IDENTIFIER = "identifier";
3428 /**
3429   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
3430   * <p>
3431   * Description: <b>The identifier of the component</b><br>
3432   * Type: <b>token</b><br>
3433   * Path: <b>DeviceDefinition.identifier</b><br>
3434   * </p>
3435   */
3436  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
3437
3438 /**
3439   * Search parameter: <b>parent</b>
3440   * <p>
3441   * Description: <b>The parent DeviceDefinition resource</b><br>
3442   * Type: <b>reference</b><br>
3443   * Path: <b>DeviceDefinition.parentDevice</b><br>
3444   * </p>
3445   */
3446  @SearchParamDefinition(name="parent", path="DeviceDefinition.parentDevice", description="The parent DeviceDefinition resource", type="reference", target={DeviceDefinition.class } )
3447  public static final String SP_PARENT = "parent";
3448 /**
3449   * <b>Fluent Client</b> search parameter constant for <b>parent</b>
3450   * <p>
3451   * Description: <b>The parent DeviceDefinition resource</b><br>
3452   * Type: <b>reference</b><br>
3453   * Path: <b>DeviceDefinition.parentDevice</b><br>
3454   * </p>
3455   */
3456  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PARENT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PARENT);
3457
3458/**
3459   * Constant for fluent queries to be used to add include statements. Specifies
3460   * the path value of "<b>DeviceDefinition:parent</b>".
3461   */
3462  public static final ca.uhn.fhir.model.api.Include INCLUDE_PARENT = new ca.uhn.fhir.model.api.Include("DeviceDefinition:parent").toLocked();
3463
3464 /**
3465   * Search parameter: <b>type</b>
3466   * <p>
3467   * Description: <b>The device component type</b><br>
3468   * Type: <b>token</b><br>
3469   * Path: <b>DeviceDefinition.type</b><br>
3470   * </p>
3471   */
3472  @SearchParamDefinition(name="type", path="DeviceDefinition.type", description="The device component type", type="token" )
3473  public static final String SP_TYPE = "type";
3474 /**
3475   * <b>Fluent Client</b> search parameter constant for <b>type</b>
3476   * <p>
3477   * Description: <b>The device component type</b><br>
3478   * Type: <b>token</b><br>
3479   * Path: <b>DeviceDefinition.type</b><br>
3480   * </p>
3481   */
3482  public static final ca.uhn.fhir.rest.gclient.TokenClientParam TYPE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_TYPE);
3483
3484
3485}
3486