001package org.hl7.fhir.dstu2.model;
002
003/*-
004 * #%L
005 * org.hl7.fhir.dstu2
006 * %%
007 * Copyright (C) 2014 - 2019 Health Level 7
008 * %%
009 * Licensed under the Apache License, Version 2.0 (the "License");
010 * you may not use this file except in compliance with the License.
011 * You may obtain a copy of the License at
012 * 
013 *      http://www.apache.org/licenses/LICENSE-2.0
014 * 
015 * Unless required by applicable law or agreed to in writing, software
016 * distributed under the License is distributed on an "AS IS" BASIS,
017 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
018 * See the License for the specific language governing permissions and
019 * limitations under the License.
020 * #L%
021 */
022
023
024/*
025  Copyright (c) 2011+, HL7, Inc.
026  All rights reserved.
027  
028  Redistribution and use in source and binary forms, with or without modification, 
029  are permitted provided that the following conditions are met:
030  
031   * Redistributions of source code must retain the above copyright notice, this 
032     list of conditions and the following disclaimer.
033   * Redistributions in binary form must reproduce the above copyright notice, 
034     this list of conditions and the following disclaimer in the documentation 
035     and/or other materials provided with the distribution.
036   * Neither the name of HL7 nor the names of its contributors may be used to 
037     endorse or promote products derived from this software without specific 
038     prior written permission.
039  
040  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
041  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
042  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
043  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
044  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
045  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
046  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
047  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
048  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
049  POSSIBILITY OF SUCH DAMAGE.
050  
051*/
052
053// Generated on Wed, Jul 13, 2016 05:32+1000 for FHIR v1.0.2
054import java.util.ArrayList;
055import java.util.Date;
056import java.util.List;
057
058import ca.uhn.fhir.model.api.annotation.Block;
059import ca.uhn.fhir.model.api.annotation.Child;
060import ca.uhn.fhir.model.api.annotation.Description;
061import ca.uhn.fhir.model.api.annotation.ResourceDef;
062import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
063import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
064import org.hl7.fhir.exceptions.FHIRException;
065import org.hl7.fhir.utilities.Utilities;
066/**
067 * Describes the characteristics, operational status and capabilities of a medical-related component of a medical device.
068 */
069@ResourceDef(name="DeviceComponent", profile="http://hl7.org/fhir/Profile/DeviceComponent")
070public class DeviceComponent extends DomainResource {
071
072    public enum MeasmntPrinciple {
073        /**
074         * Measurement principle isn't in the list.
075         */
076        OTHER, 
077        /**
078         * Measurement is done using the chemical principle.
079         */
080        CHEMICAL, 
081        /**
082         * Measurement is done using the electrical principle.
083         */
084        ELECTRICAL, 
085        /**
086         * Measurement is done using the impedance principle.
087         */
088        IMPEDANCE, 
089        /**
090         * Measurement is done using the nuclear principle.
091         */
092        NUCLEAR, 
093        /**
094         * Measurement is done using the optical principle.
095         */
096        OPTICAL, 
097        /**
098         * Measurement is done using the thermal principle.
099         */
100        THERMAL, 
101        /**
102         * Measurement is done using the biological principle.
103         */
104        BIOLOGICAL, 
105        /**
106         * Measurement is done using the mechanical principle.
107         */
108        MECHANICAL, 
109        /**
110         * Measurement is done using the acoustical principle.
111         */
112        ACOUSTICAL, 
113        /**
114         * Measurement is done using the manual principle.
115         */
116        MANUAL, 
117        /**
118         * added to help the parsers
119         */
120        NULL;
121        public static MeasmntPrinciple fromCode(String codeString) throws FHIRException {
122            if (codeString == null || "".equals(codeString))
123                return null;
124        if ("other".equals(codeString))
125          return OTHER;
126        if ("chemical".equals(codeString))
127          return CHEMICAL;
128        if ("electrical".equals(codeString))
129          return ELECTRICAL;
130        if ("impedance".equals(codeString))
131          return IMPEDANCE;
132        if ("nuclear".equals(codeString))
133          return NUCLEAR;
134        if ("optical".equals(codeString))
135          return OPTICAL;
136        if ("thermal".equals(codeString))
137          return THERMAL;
138        if ("biological".equals(codeString))
139          return BIOLOGICAL;
140        if ("mechanical".equals(codeString))
141          return MECHANICAL;
142        if ("acoustical".equals(codeString))
143          return ACOUSTICAL;
144        if ("manual".equals(codeString))
145          return MANUAL;
146        throw new FHIRException("Unknown MeasmntPrinciple code '"+codeString+"'");
147        }
148        public String toCode() {
149          switch (this) {
150            case OTHER: return "other";
151            case CHEMICAL: return "chemical";
152            case ELECTRICAL: return "electrical";
153            case IMPEDANCE: return "impedance";
154            case NUCLEAR: return "nuclear";
155            case OPTICAL: return "optical";
156            case THERMAL: return "thermal";
157            case BIOLOGICAL: return "biological";
158            case MECHANICAL: return "mechanical";
159            case ACOUSTICAL: return "acoustical";
160            case MANUAL: return "manual";
161            default: return "?";
162          }
163        }
164        public String getSystem() {
165          switch (this) {
166            case OTHER: return "http://hl7.org/fhir/measurement-principle";
167            case CHEMICAL: return "http://hl7.org/fhir/measurement-principle";
168            case ELECTRICAL: return "http://hl7.org/fhir/measurement-principle";
169            case IMPEDANCE: return "http://hl7.org/fhir/measurement-principle";
170            case NUCLEAR: return "http://hl7.org/fhir/measurement-principle";
171            case OPTICAL: return "http://hl7.org/fhir/measurement-principle";
172            case THERMAL: return "http://hl7.org/fhir/measurement-principle";
173            case BIOLOGICAL: return "http://hl7.org/fhir/measurement-principle";
174            case MECHANICAL: return "http://hl7.org/fhir/measurement-principle";
175            case ACOUSTICAL: return "http://hl7.org/fhir/measurement-principle";
176            case MANUAL: return "http://hl7.org/fhir/measurement-principle";
177            default: return "?";
178          }
179        }
180        public String getDefinition() {
181          switch (this) {
182            case OTHER: return "Measurement principle isn't in the list.";
183            case CHEMICAL: return "Measurement is done using the chemical principle.";
184            case ELECTRICAL: return "Measurement is done using the electrical principle.";
185            case IMPEDANCE: return "Measurement is done using the impedance principle.";
186            case NUCLEAR: return "Measurement is done using the nuclear principle.";
187            case OPTICAL: return "Measurement is done using the optical principle.";
188            case THERMAL: return "Measurement is done using the thermal principle.";
189            case BIOLOGICAL: return "Measurement is done using the biological principle.";
190            case MECHANICAL: return "Measurement is done using the mechanical principle.";
191            case ACOUSTICAL: return "Measurement is done using the acoustical principle.";
192            case MANUAL: return "Measurement is done using the manual principle.";
193            default: return "?";
194          }
195        }
196        public String getDisplay() {
197          switch (this) {
198            case OTHER: return "MSP Other";
199            case CHEMICAL: return "MSP Chemical";
200            case ELECTRICAL: return "MSP Electrical";
201            case IMPEDANCE: return "MSP Impedance";
202            case NUCLEAR: return "MSP Nuclear";
203            case OPTICAL: return "MSP Optical";
204            case THERMAL: return "MSP Thermal";
205            case BIOLOGICAL: return "MSP Biological";
206            case MECHANICAL: return "MSP Mechanical";
207            case ACOUSTICAL: return "MSP Acoustical";
208            case MANUAL: return "MSP Manual";
209            default: return "?";
210          }
211        }
212    }
213
214  public static class MeasmntPrincipleEnumFactory implements EnumFactory<MeasmntPrinciple> {
215    public MeasmntPrinciple fromCode(String codeString) throws IllegalArgumentException {
216      if (codeString == null || "".equals(codeString))
217            if (codeString == null || "".equals(codeString))
218                return null;
219        if ("other".equals(codeString))
220          return MeasmntPrinciple.OTHER;
221        if ("chemical".equals(codeString))
222          return MeasmntPrinciple.CHEMICAL;
223        if ("electrical".equals(codeString))
224          return MeasmntPrinciple.ELECTRICAL;
225        if ("impedance".equals(codeString))
226          return MeasmntPrinciple.IMPEDANCE;
227        if ("nuclear".equals(codeString))
228          return MeasmntPrinciple.NUCLEAR;
229        if ("optical".equals(codeString))
230          return MeasmntPrinciple.OPTICAL;
231        if ("thermal".equals(codeString))
232          return MeasmntPrinciple.THERMAL;
233        if ("biological".equals(codeString))
234          return MeasmntPrinciple.BIOLOGICAL;
235        if ("mechanical".equals(codeString))
236          return MeasmntPrinciple.MECHANICAL;
237        if ("acoustical".equals(codeString))
238          return MeasmntPrinciple.ACOUSTICAL;
239        if ("manual".equals(codeString))
240          return MeasmntPrinciple.MANUAL;
241        throw new IllegalArgumentException("Unknown MeasmntPrinciple code '"+codeString+"'");
242        }
243        public Enumeration<MeasmntPrinciple> fromType(Base code) throws FHIRException {
244          if (code == null || code.isEmpty())
245            return null;
246          String codeString = ((PrimitiveType) code).asStringValue();
247          if (codeString == null || "".equals(codeString))
248            return null;
249        if ("other".equals(codeString))
250          return new Enumeration<MeasmntPrinciple>(this, MeasmntPrinciple.OTHER);
251        if ("chemical".equals(codeString))
252          return new Enumeration<MeasmntPrinciple>(this, MeasmntPrinciple.CHEMICAL);
253        if ("electrical".equals(codeString))
254          return new Enumeration<MeasmntPrinciple>(this, MeasmntPrinciple.ELECTRICAL);
255        if ("impedance".equals(codeString))
256          return new Enumeration<MeasmntPrinciple>(this, MeasmntPrinciple.IMPEDANCE);
257        if ("nuclear".equals(codeString))
258          return new Enumeration<MeasmntPrinciple>(this, MeasmntPrinciple.NUCLEAR);
259        if ("optical".equals(codeString))
260          return new Enumeration<MeasmntPrinciple>(this, MeasmntPrinciple.OPTICAL);
261        if ("thermal".equals(codeString))
262          return new Enumeration<MeasmntPrinciple>(this, MeasmntPrinciple.THERMAL);
263        if ("biological".equals(codeString))
264          return new Enumeration<MeasmntPrinciple>(this, MeasmntPrinciple.BIOLOGICAL);
265        if ("mechanical".equals(codeString))
266          return new Enumeration<MeasmntPrinciple>(this, MeasmntPrinciple.MECHANICAL);
267        if ("acoustical".equals(codeString))
268          return new Enumeration<MeasmntPrinciple>(this, MeasmntPrinciple.ACOUSTICAL);
269        if ("manual".equals(codeString))
270          return new Enumeration<MeasmntPrinciple>(this, MeasmntPrinciple.MANUAL);
271        throw new FHIRException("Unknown MeasmntPrinciple code '"+codeString+"'");
272        }
273    public String toCode(MeasmntPrinciple code) {
274      if (code == MeasmntPrinciple.OTHER)
275        return "other";
276      if (code == MeasmntPrinciple.CHEMICAL)
277        return "chemical";
278      if (code == MeasmntPrinciple.ELECTRICAL)
279        return "electrical";
280      if (code == MeasmntPrinciple.IMPEDANCE)
281        return "impedance";
282      if (code == MeasmntPrinciple.NUCLEAR)
283        return "nuclear";
284      if (code == MeasmntPrinciple.OPTICAL)
285        return "optical";
286      if (code == MeasmntPrinciple.THERMAL)
287        return "thermal";
288      if (code == MeasmntPrinciple.BIOLOGICAL)
289        return "biological";
290      if (code == MeasmntPrinciple.MECHANICAL)
291        return "mechanical";
292      if (code == MeasmntPrinciple.ACOUSTICAL)
293        return "acoustical";
294      if (code == MeasmntPrinciple.MANUAL)
295        return "manual";
296      return "?";
297      }
298    }
299
300    @Block()
301    public static class DeviceComponentProductionSpecificationComponent extends BackboneElement implements IBaseBackboneElement {
302        /**
303         * Describes the specification type, such as, serial number, part number, hardware revision, software revision, etc.
304         */
305        @Child(name = "specType", type = {CodeableConcept.class}, order=1, min=0, max=1, modifier=false, summary=true)
306        @Description(shortDefinition="Specification type", formalDefinition="Describes the specification type, such as, serial number, part number, hardware revision, software revision, etc." )
307        protected CodeableConcept specType;
308
309        /**
310         * Describes the internal component unique identification. This is a provision for manufacture specific standard components using a private OID. 11073-10101 has a partition for private OID semantic that the manufacture can make use of.
311         */
312        @Child(name = "componentId", type = {Identifier.class}, order=2, min=0, max=1, modifier=false, summary=true)
313        @Description(shortDefinition="Internal component unique identification", formalDefinition="Describes the internal component unique identification. This is a provision for manufacture specific standard components using a private OID. 11073-10101 has a partition for private OID semantic that the manufacture can make use of." )
314        protected Identifier componentId;
315
316        /**
317         * Describes the printable string defining the component.
318         */
319        @Child(name = "productionSpec", type = {StringType.class}, order=3, min=0, max=1, modifier=false, summary=true)
320        @Description(shortDefinition="A printable string defining the component", formalDefinition="Describes the printable string defining the component." )
321        protected StringType productionSpec;
322
323        private static final long serialVersionUID = -1476597516L;
324
325    /*
326     * Constructor
327     */
328      public DeviceComponentProductionSpecificationComponent() {
329        super();
330      }
331
332        /**
333         * @return {@link #specType} (Describes the specification type, such as, serial number, part number, hardware revision, software revision, etc.)
334         */
335        public CodeableConcept getSpecType() { 
336          if (this.specType == null)
337            if (Configuration.errorOnAutoCreate())
338              throw new Error("Attempt to auto-create DeviceComponentProductionSpecificationComponent.specType");
339            else if (Configuration.doAutoCreate())
340              this.specType = new CodeableConcept(); // cc
341          return this.specType;
342        }
343
344        public boolean hasSpecType() { 
345          return this.specType != null && !this.specType.isEmpty();
346        }
347
348        /**
349         * @param value {@link #specType} (Describes the specification type, such as, serial number, part number, hardware revision, software revision, etc.)
350         */
351        public DeviceComponentProductionSpecificationComponent setSpecType(CodeableConcept value) { 
352          this.specType = value;
353          return this;
354        }
355
356        /**
357         * @return {@link #componentId} (Describes the internal component unique identification. This is a provision for manufacture specific standard components using a private OID. 11073-10101 has a partition for private OID semantic that the manufacture can make use of.)
358         */
359        public Identifier getComponentId() { 
360          if (this.componentId == null)
361            if (Configuration.errorOnAutoCreate())
362              throw new Error("Attempt to auto-create DeviceComponentProductionSpecificationComponent.componentId");
363            else if (Configuration.doAutoCreate())
364              this.componentId = new Identifier(); // cc
365          return this.componentId;
366        }
367
368        public boolean hasComponentId() { 
369          return this.componentId != null && !this.componentId.isEmpty();
370        }
371
372        /**
373         * @param value {@link #componentId} (Describes the internal component unique identification. This is a provision for manufacture specific standard components using a private OID. 11073-10101 has a partition for private OID semantic that the manufacture can make use of.)
374         */
375        public DeviceComponentProductionSpecificationComponent setComponentId(Identifier value) { 
376          this.componentId = value;
377          return this;
378        }
379
380        /**
381         * @return {@link #productionSpec} (Describes the printable string defining the component.). This is the underlying object with id, value and extensions. The accessor "getProductionSpec" gives direct access to the value
382         */
383        public StringType getProductionSpecElement() { 
384          if (this.productionSpec == null)
385            if (Configuration.errorOnAutoCreate())
386              throw new Error("Attempt to auto-create DeviceComponentProductionSpecificationComponent.productionSpec");
387            else if (Configuration.doAutoCreate())
388              this.productionSpec = new StringType(); // bb
389          return this.productionSpec;
390        }
391
392        public boolean hasProductionSpecElement() { 
393          return this.productionSpec != null && !this.productionSpec.isEmpty();
394        }
395
396        public boolean hasProductionSpec() { 
397          return this.productionSpec != null && !this.productionSpec.isEmpty();
398        }
399
400        /**
401         * @param value {@link #productionSpec} (Describes the printable string defining the component.). This is the underlying object with id, value and extensions. The accessor "getProductionSpec" gives direct access to the value
402         */
403        public DeviceComponentProductionSpecificationComponent setProductionSpecElement(StringType value) { 
404          this.productionSpec = value;
405          return this;
406        }
407
408        /**
409         * @return Describes the printable string defining the component.
410         */
411        public String getProductionSpec() { 
412          return this.productionSpec == null ? null : this.productionSpec.getValue();
413        }
414
415        /**
416         * @param value Describes the printable string defining the component.
417         */
418        public DeviceComponentProductionSpecificationComponent setProductionSpec(String value) { 
419          if (Utilities.noString(value))
420            this.productionSpec = null;
421          else {
422            if (this.productionSpec == null)
423              this.productionSpec = new StringType();
424            this.productionSpec.setValue(value);
425          }
426          return this;
427        }
428
429        protected void listChildren(List<Property> childrenList) {
430          super.listChildren(childrenList);
431          childrenList.add(new Property("specType", "CodeableConcept", "Describes the specification type, such as, serial number, part number, hardware revision, software revision, etc.", 0, java.lang.Integer.MAX_VALUE, specType));
432          childrenList.add(new Property("componentId", "Identifier", "Describes the internal component unique identification. This is a provision for manufacture specific standard components using a private OID. 11073-10101 has a partition for private OID semantic that the manufacture can make use of.", 0, java.lang.Integer.MAX_VALUE, componentId));
433          childrenList.add(new Property("productionSpec", "string", "Describes the printable string defining the component.", 0, java.lang.Integer.MAX_VALUE, productionSpec));
434        }
435
436      @Override
437      public void setProperty(String name, Base value) throws FHIRException {
438        if (name.equals("specType"))
439          this.specType = castToCodeableConcept(value); // CodeableConcept
440        else if (name.equals("componentId"))
441          this.componentId = castToIdentifier(value); // Identifier
442        else if (name.equals("productionSpec"))
443          this.productionSpec = castToString(value); // StringType
444        else
445          super.setProperty(name, value);
446      }
447
448      @Override
449      public Base addChild(String name) throws FHIRException {
450        if (name.equals("specType")) {
451          this.specType = new CodeableConcept();
452          return this.specType;
453        }
454        else if (name.equals("componentId")) {
455          this.componentId = new Identifier();
456          return this.componentId;
457        }
458        else if (name.equals("productionSpec")) {
459          throw new FHIRException("Cannot call addChild on a primitive type DeviceComponent.productionSpec");
460        }
461        else
462          return super.addChild(name);
463      }
464
465      public DeviceComponentProductionSpecificationComponent copy() {
466        DeviceComponentProductionSpecificationComponent dst = new DeviceComponentProductionSpecificationComponent();
467        copyValues(dst);
468        dst.specType = specType == null ? null : specType.copy();
469        dst.componentId = componentId == null ? null : componentId.copy();
470        dst.productionSpec = productionSpec == null ? null : productionSpec.copy();
471        return dst;
472      }
473
474      @Override
475      public boolean equalsDeep(Base other) {
476        if (!super.equalsDeep(other))
477          return false;
478        if (!(other instanceof DeviceComponentProductionSpecificationComponent))
479          return false;
480        DeviceComponentProductionSpecificationComponent o = (DeviceComponentProductionSpecificationComponent) other;
481        return compareDeep(specType, o.specType, true) && compareDeep(componentId, o.componentId, true)
482           && compareDeep(productionSpec, o.productionSpec, true);
483      }
484
485      @Override
486      public boolean equalsShallow(Base other) {
487        if (!super.equalsShallow(other))
488          return false;
489        if (!(other instanceof DeviceComponentProductionSpecificationComponent))
490          return false;
491        DeviceComponentProductionSpecificationComponent o = (DeviceComponentProductionSpecificationComponent) other;
492        return compareValues(productionSpec, o.productionSpec, true);
493      }
494
495      public boolean isEmpty() {
496        return super.isEmpty() && (specType == null || specType.isEmpty()) && (componentId == null || componentId.isEmpty())
497           && (productionSpec == null || productionSpec.isEmpty());
498      }
499
500  public String fhirType() {
501    return "DeviceComponent.productionSpecification";
502
503  }
504
505  }
506
507    /**
508     * Describes the specific component type as defined in the object-oriented or metric nomenclature partition.
509     */
510    @Child(name = "type", type = {CodeableConcept.class}, order=0, min=1, max=1, modifier=false, summary=true)
511    @Description(shortDefinition="What kind of component it is", formalDefinition="Describes the specific component type as defined in the object-oriented or metric nomenclature partition." )
512    protected CodeableConcept type;
513
514    /**
515     * Describes the local assigned unique identification by the software. For example: handle ID.
516     */
517    @Child(name = "identifier", type = {Identifier.class}, order=1, min=1, max=1, modifier=false, summary=true)
518    @Description(shortDefinition="Instance id assigned by the software stack", formalDefinition="Describes the local assigned unique identification by the software. For example: handle ID." )
519    protected Identifier identifier;
520
521    /**
522     * Describes the timestamp for the most recent system change which includes device configuration or setting change.
523     */
524    @Child(name = "lastSystemChange", type = {InstantType.class}, order=2, min=1, max=1, modifier=false, summary=true)
525    @Description(shortDefinition="Recent system change timestamp", formalDefinition="Describes the timestamp for the most recent system change which includes device configuration or setting change." )
526    protected InstantType lastSystemChange;
527
528    /**
529     * Describes the link to the source Device that contains administrative device information such as manufacture, serial number, etc.
530     */
531    @Child(name = "source", type = {Device.class}, order=3, min=0, max=1, modifier=false, summary=true)
532    @Description(shortDefinition="A source device of this component", formalDefinition="Describes the link to the source Device that contains administrative device information such as manufacture, serial number, etc." )
533    protected Reference source;
534
535    /**
536     * The actual object that is the target of the reference (Describes the link to the source Device that contains administrative device information such as manufacture, serial number, etc.)
537     */
538    protected Device sourceTarget;
539
540    /**
541     * Describes the link to the parent resource. For example: Channel is linked to its VMD parent.
542     */
543    @Child(name = "parent", type = {DeviceComponent.class}, order=4, min=0, max=1, modifier=false, summary=true)
544    @Description(shortDefinition="Parent resource link", formalDefinition="Describes the link to the parent resource. For example: Channel is linked to its VMD parent." )
545    protected Reference parent;
546
547    /**
548     * The actual object that is the target of the reference (Describes the link to the parent resource. For example: Channel is linked to its VMD parent.)
549     */
550    protected DeviceComponent parentTarget;
551
552    /**
553     * Indicates current operational status of the device. For example: On, Off, Standby, etc.
554     */
555    @Child(name = "operationalStatus", type = {CodeableConcept.class}, order=5, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
556    @Description(shortDefinition="Component operational status", formalDefinition="Indicates current operational status of the device. For example: On, Off, Standby, etc." )
557    protected List<CodeableConcept> operationalStatus;
558
559    /**
560     * Describes the parameter group supported by the current device component that is based on some nomenclature, e.g. cardiovascular.
561     */
562    @Child(name = "parameterGroup", type = {CodeableConcept.class}, order=6, min=0, max=1, modifier=false, summary=true)
563    @Description(shortDefinition="Current supported parameter group", formalDefinition="Describes the parameter group supported by the current device component that is based on some nomenclature, e.g. cardiovascular." )
564    protected CodeableConcept parameterGroup;
565
566    /**
567     * Describes the physical principle of the measurement. For example: thermal, chemical, acoustical, etc.
568     */
569    @Child(name = "measurementPrinciple", type = {CodeType.class}, order=7, min=0, max=1, modifier=false, summary=true)
570    @Description(shortDefinition="other | chemical | electrical | impedance | nuclear | optical | thermal | biological | mechanical | acoustical | manual+", formalDefinition="Describes the physical principle of the measurement. For example: thermal, chemical, acoustical, etc." )
571    protected Enumeration<MeasmntPrinciple> measurementPrinciple;
572
573    /**
574     * Describes the production specification such as component revision, serial number, etc.
575     */
576    @Child(name = "productionSpecification", type = {}, order=8, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
577    @Description(shortDefinition="Production specification of the component", formalDefinition="Describes the production specification such as component revision, serial number, etc." )
578    protected List<DeviceComponentProductionSpecificationComponent> productionSpecification;
579
580    /**
581     * Describes the language code for the human-readable text string produced by the device. This language code will follow the IETF language tag. Example: en-US.
582     */
583    @Child(name = "languageCode", type = {CodeableConcept.class}, order=9, min=0, max=1, modifier=false, summary=true)
584    @Description(shortDefinition="Language code for the human-readable text strings produced by the device", formalDefinition="Describes the language code for the human-readable text string produced by the device. This language code will follow the IETF language tag. Example: en-US." )
585    protected CodeableConcept languageCode;
586
587    private static final long serialVersionUID = -1742890034L;
588
589  /*
590   * Constructor
591   */
592    public DeviceComponent() {
593      super();
594    }
595
596  /*
597   * Constructor
598   */
599    public DeviceComponent(CodeableConcept type, Identifier identifier, InstantType lastSystemChange) {
600      super();
601      this.type = type;
602      this.identifier = identifier;
603      this.lastSystemChange = lastSystemChange;
604    }
605
606    /**
607     * @return {@link #type} (Describes the specific component type as defined in the object-oriented or metric nomenclature partition.)
608     */
609    public CodeableConcept getType() { 
610      if (this.type == null)
611        if (Configuration.errorOnAutoCreate())
612          throw new Error("Attempt to auto-create DeviceComponent.type");
613        else if (Configuration.doAutoCreate())
614          this.type = new CodeableConcept(); // cc
615      return this.type;
616    }
617
618    public boolean hasType() { 
619      return this.type != null && !this.type.isEmpty();
620    }
621
622    /**
623     * @param value {@link #type} (Describes the specific component type as defined in the object-oriented or metric nomenclature partition.)
624     */
625    public DeviceComponent setType(CodeableConcept value) { 
626      this.type = value;
627      return this;
628    }
629
630    /**
631     * @return {@link #identifier} (Describes the local assigned unique identification by the software. For example: handle ID.)
632     */
633    public Identifier getIdentifier() { 
634      if (this.identifier == null)
635        if (Configuration.errorOnAutoCreate())
636          throw new Error("Attempt to auto-create DeviceComponent.identifier");
637        else if (Configuration.doAutoCreate())
638          this.identifier = new Identifier(); // cc
639      return this.identifier;
640    }
641
642    public boolean hasIdentifier() { 
643      return this.identifier != null && !this.identifier.isEmpty();
644    }
645
646    /**
647     * @param value {@link #identifier} (Describes the local assigned unique identification by the software. For example: handle ID.)
648     */
649    public DeviceComponent setIdentifier(Identifier value) { 
650      this.identifier = value;
651      return this;
652    }
653
654    /**
655     * @return {@link #lastSystemChange} (Describes the timestamp for the most recent system change which includes device configuration or setting change.). This is the underlying object with id, value and extensions. The accessor "getLastSystemChange" gives direct access to the value
656     */
657    public InstantType getLastSystemChangeElement() { 
658      if (this.lastSystemChange == null)
659        if (Configuration.errorOnAutoCreate())
660          throw new Error("Attempt to auto-create DeviceComponent.lastSystemChange");
661        else if (Configuration.doAutoCreate())
662          this.lastSystemChange = new InstantType(); // bb
663      return this.lastSystemChange;
664    }
665
666    public boolean hasLastSystemChangeElement() { 
667      return this.lastSystemChange != null && !this.lastSystemChange.isEmpty();
668    }
669
670    public boolean hasLastSystemChange() { 
671      return this.lastSystemChange != null && !this.lastSystemChange.isEmpty();
672    }
673
674    /**
675     * @param value {@link #lastSystemChange} (Describes the timestamp for the most recent system change which includes device configuration or setting change.). This is the underlying object with id, value and extensions. The accessor "getLastSystemChange" gives direct access to the value
676     */
677    public DeviceComponent setLastSystemChangeElement(InstantType value) { 
678      this.lastSystemChange = value;
679      return this;
680    }
681
682    /**
683     * @return Describes the timestamp for the most recent system change which includes device configuration or setting change.
684     */
685    public Date getLastSystemChange() { 
686      return this.lastSystemChange == null ? null : this.lastSystemChange.getValue();
687    }
688
689    /**
690     * @param value Describes the timestamp for the most recent system change which includes device configuration or setting change.
691     */
692    public DeviceComponent setLastSystemChange(Date value) { 
693        if (this.lastSystemChange == null)
694          this.lastSystemChange = new InstantType();
695        this.lastSystemChange.setValue(value);
696      return this;
697    }
698
699    /**
700     * @return {@link #source} (Describes the link to the source Device that contains administrative device information such as manufacture, serial number, etc.)
701     */
702    public Reference getSource() { 
703      if (this.source == null)
704        if (Configuration.errorOnAutoCreate())
705          throw new Error("Attempt to auto-create DeviceComponent.source");
706        else if (Configuration.doAutoCreate())
707          this.source = new Reference(); // cc
708      return this.source;
709    }
710
711    public boolean hasSource() { 
712      return this.source != null && !this.source.isEmpty();
713    }
714
715    /**
716     * @param value {@link #source} (Describes the link to the source Device that contains administrative device information such as manufacture, serial number, etc.)
717     */
718    public DeviceComponent setSource(Reference value) { 
719      this.source = value;
720      return this;
721    }
722
723    /**
724     * @return {@link #source} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (Describes the link to the source Device that contains administrative device information such as manufacture, serial number, etc.)
725     */
726    public Device getSourceTarget() { 
727      if (this.sourceTarget == null)
728        if (Configuration.errorOnAutoCreate())
729          throw new Error("Attempt to auto-create DeviceComponent.source");
730        else if (Configuration.doAutoCreate())
731          this.sourceTarget = new Device(); // aa
732      return this.sourceTarget;
733    }
734
735    /**
736     * @param value {@link #source} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (Describes the link to the source Device that contains administrative device information such as manufacture, serial number, etc.)
737     */
738    public DeviceComponent setSourceTarget(Device value) { 
739      this.sourceTarget = value;
740      return this;
741    }
742
743    /**
744     * @return {@link #parent} (Describes the link to the parent resource. For example: Channel is linked to its VMD parent.)
745     */
746    public Reference getParent() { 
747      if (this.parent == null)
748        if (Configuration.errorOnAutoCreate())
749          throw new Error("Attempt to auto-create DeviceComponent.parent");
750        else if (Configuration.doAutoCreate())
751          this.parent = new Reference(); // cc
752      return this.parent;
753    }
754
755    public boolean hasParent() { 
756      return this.parent != null && !this.parent.isEmpty();
757    }
758
759    /**
760     * @param value {@link #parent} (Describes the link to the parent resource. For example: Channel is linked to its VMD parent.)
761     */
762    public DeviceComponent setParent(Reference value) { 
763      this.parent = value;
764      return this;
765    }
766
767    /**
768     * @return {@link #parent} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (Describes the link to the parent resource. For example: Channel is linked to its VMD parent.)
769     */
770    public DeviceComponent getParentTarget() { 
771      if (this.parentTarget == null)
772        if (Configuration.errorOnAutoCreate())
773          throw new Error("Attempt to auto-create DeviceComponent.parent");
774        else if (Configuration.doAutoCreate())
775          this.parentTarget = new DeviceComponent(); // aa
776      return this.parentTarget;
777    }
778
779    /**
780     * @param value {@link #parent} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (Describes the link to the parent resource. For example: Channel is linked to its VMD parent.)
781     */
782    public DeviceComponent setParentTarget(DeviceComponent value) { 
783      this.parentTarget = value;
784      return this;
785    }
786
787    /**
788     * @return {@link #operationalStatus} (Indicates current operational status of the device. For example: On, Off, Standby, etc.)
789     */
790    public List<CodeableConcept> getOperationalStatus() { 
791      if (this.operationalStatus == null)
792        this.operationalStatus = new ArrayList<CodeableConcept>();
793      return this.operationalStatus;
794    }
795
796    public boolean hasOperationalStatus() { 
797      if (this.operationalStatus == null)
798        return false;
799      for (CodeableConcept item : this.operationalStatus)
800        if (!item.isEmpty())
801          return true;
802      return false;
803    }
804
805    /**
806     * @return {@link #operationalStatus} (Indicates current operational status of the device. For example: On, Off, Standby, etc.)
807     */
808    // syntactic sugar
809    public CodeableConcept addOperationalStatus() { //3
810      CodeableConcept t = new CodeableConcept();
811      if (this.operationalStatus == null)
812        this.operationalStatus = new ArrayList<CodeableConcept>();
813      this.operationalStatus.add(t);
814      return t;
815    }
816
817    // syntactic sugar
818    public DeviceComponent addOperationalStatus(CodeableConcept t) { //3
819      if (t == null)
820        return this;
821      if (this.operationalStatus == null)
822        this.operationalStatus = new ArrayList<CodeableConcept>();
823      this.operationalStatus.add(t);
824      return this;
825    }
826
827    /**
828     * @return {@link #parameterGroup} (Describes the parameter group supported by the current device component that is based on some nomenclature, e.g. cardiovascular.)
829     */
830    public CodeableConcept getParameterGroup() { 
831      if (this.parameterGroup == null)
832        if (Configuration.errorOnAutoCreate())
833          throw new Error("Attempt to auto-create DeviceComponent.parameterGroup");
834        else if (Configuration.doAutoCreate())
835          this.parameterGroup = new CodeableConcept(); // cc
836      return this.parameterGroup;
837    }
838
839    public boolean hasParameterGroup() { 
840      return this.parameterGroup != null && !this.parameterGroup.isEmpty();
841    }
842
843    /**
844     * @param value {@link #parameterGroup} (Describes the parameter group supported by the current device component that is based on some nomenclature, e.g. cardiovascular.)
845     */
846    public DeviceComponent setParameterGroup(CodeableConcept value) { 
847      this.parameterGroup = value;
848      return this;
849    }
850
851    /**
852     * @return {@link #measurementPrinciple} (Describes the physical principle of the measurement. For example: thermal, chemical, acoustical, etc.). This is the underlying object with id, value and extensions. The accessor "getMeasurementPrinciple" gives direct access to the value
853     */
854    public Enumeration<MeasmntPrinciple> getMeasurementPrincipleElement() { 
855      if (this.measurementPrinciple == null)
856        if (Configuration.errorOnAutoCreate())
857          throw new Error("Attempt to auto-create DeviceComponent.measurementPrinciple");
858        else if (Configuration.doAutoCreate())
859          this.measurementPrinciple = new Enumeration<MeasmntPrinciple>(new MeasmntPrincipleEnumFactory()); // bb
860      return this.measurementPrinciple;
861    }
862
863    public boolean hasMeasurementPrincipleElement() { 
864      return this.measurementPrinciple != null && !this.measurementPrinciple.isEmpty();
865    }
866
867    public boolean hasMeasurementPrinciple() { 
868      return this.measurementPrinciple != null && !this.measurementPrinciple.isEmpty();
869    }
870
871    /**
872     * @param value {@link #measurementPrinciple} (Describes the physical principle of the measurement. For example: thermal, chemical, acoustical, etc.). This is the underlying object with id, value and extensions. The accessor "getMeasurementPrinciple" gives direct access to the value
873     */
874    public DeviceComponent setMeasurementPrincipleElement(Enumeration<MeasmntPrinciple> value) { 
875      this.measurementPrinciple = value;
876      return this;
877    }
878
879    /**
880     * @return Describes the physical principle of the measurement. For example: thermal, chemical, acoustical, etc.
881     */
882    public MeasmntPrinciple getMeasurementPrinciple() { 
883      return this.measurementPrinciple == null ? null : this.measurementPrinciple.getValue();
884    }
885
886    /**
887     * @param value Describes the physical principle of the measurement. For example: thermal, chemical, acoustical, etc.
888     */
889    public DeviceComponent setMeasurementPrinciple(MeasmntPrinciple value) { 
890      if (value == null)
891        this.measurementPrinciple = null;
892      else {
893        if (this.measurementPrinciple == null)
894          this.measurementPrinciple = new Enumeration<MeasmntPrinciple>(new MeasmntPrincipleEnumFactory());
895        this.measurementPrinciple.setValue(value);
896      }
897      return this;
898    }
899
900    /**
901     * @return {@link #productionSpecification} (Describes the production specification such as component revision, serial number, etc.)
902     */
903    public List<DeviceComponentProductionSpecificationComponent> getProductionSpecification() { 
904      if (this.productionSpecification == null)
905        this.productionSpecification = new ArrayList<DeviceComponentProductionSpecificationComponent>();
906      return this.productionSpecification;
907    }
908
909    public boolean hasProductionSpecification() { 
910      if (this.productionSpecification == null)
911        return false;
912      for (DeviceComponentProductionSpecificationComponent item : this.productionSpecification)
913        if (!item.isEmpty())
914          return true;
915      return false;
916    }
917
918    /**
919     * @return {@link #productionSpecification} (Describes the production specification such as component revision, serial number, etc.)
920     */
921    // syntactic sugar
922    public DeviceComponentProductionSpecificationComponent addProductionSpecification() { //3
923      DeviceComponentProductionSpecificationComponent t = new DeviceComponentProductionSpecificationComponent();
924      if (this.productionSpecification == null)
925        this.productionSpecification = new ArrayList<DeviceComponentProductionSpecificationComponent>();
926      this.productionSpecification.add(t);
927      return t;
928    }
929
930    // syntactic sugar
931    public DeviceComponent addProductionSpecification(DeviceComponentProductionSpecificationComponent t) { //3
932      if (t == null)
933        return this;
934      if (this.productionSpecification == null)
935        this.productionSpecification = new ArrayList<DeviceComponentProductionSpecificationComponent>();
936      this.productionSpecification.add(t);
937      return this;
938    }
939
940    /**
941     * @return {@link #languageCode} (Describes the language code for the human-readable text string produced by the device. This language code will follow the IETF language tag. Example: en-US.)
942     */
943    public CodeableConcept getLanguageCode() { 
944      if (this.languageCode == null)
945        if (Configuration.errorOnAutoCreate())
946          throw new Error("Attempt to auto-create DeviceComponent.languageCode");
947        else if (Configuration.doAutoCreate())
948          this.languageCode = new CodeableConcept(); // cc
949      return this.languageCode;
950    }
951
952    public boolean hasLanguageCode() { 
953      return this.languageCode != null && !this.languageCode.isEmpty();
954    }
955
956    /**
957     * @param value {@link #languageCode} (Describes the language code for the human-readable text string produced by the device. This language code will follow the IETF language tag. Example: en-US.)
958     */
959    public DeviceComponent setLanguageCode(CodeableConcept value) { 
960      this.languageCode = value;
961      return this;
962    }
963
964      protected void listChildren(List<Property> childrenList) {
965        super.listChildren(childrenList);
966        childrenList.add(new Property("type", "CodeableConcept", "Describes the specific component type as defined in the object-oriented or metric nomenclature partition.", 0, java.lang.Integer.MAX_VALUE, type));
967        childrenList.add(new Property("identifier", "Identifier", "Describes the local assigned unique identification by the software. For example: handle ID.", 0, java.lang.Integer.MAX_VALUE, identifier));
968        childrenList.add(new Property("lastSystemChange", "instant", "Describes the timestamp for the most recent system change which includes device configuration or setting change.", 0, java.lang.Integer.MAX_VALUE, lastSystemChange));
969        childrenList.add(new Property("source", "Reference(Device)", "Describes the link to the source Device that contains administrative device information such as manufacture, serial number, etc.", 0, java.lang.Integer.MAX_VALUE, source));
970        childrenList.add(new Property("parent", "Reference(DeviceComponent)", "Describes the link to the parent resource. For example: Channel is linked to its VMD parent.", 0, java.lang.Integer.MAX_VALUE, parent));
971        childrenList.add(new Property("operationalStatus", "CodeableConcept", "Indicates current operational status of the device. For example: On, Off, Standby, etc.", 0, java.lang.Integer.MAX_VALUE, operationalStatus));
972        childrenList.add(new Property("parameterGroup", "CodeableConcept", "Describes the parameter group supported by the current device component that is based on some nomenclature, e.g. cardiovascular.", 0, java.lang.Integer.MAX_VALUE, parameterGroup));
973        childrenList.add(new Property("measurementPrinciple", "code", "Describes the physical principle of the measurement. For example: thermal, chemical, acoustical, etc.", 0, java.lang.Integer.MAX_VALUE, measurementPrinciple));
974        childrenList.add(new Property("productionSpecification", "", "Describes the production specification such as component revision, serial number, etc.", 0, java.lang.Integer.MAX_VALUE, productionSpecification));
975        childrenList.add(new Property("languageCode", "CodeableConcept", "Describes the language code for the human-readable text string produced by the device. This language code will follow the IETF language tag. Example: en-US.", 0, java.lang.Integer.MAX_VALUE, languageCode));
976      }
977
978      @Override
979      public void setProperty(String name, Base value) throws FHIRException {
980        if (name.equals("type"))
981          this.type = castToCodeableConcept(value); // CodeableConcept
982        else if (name.equals("identifier"))
983          this.identifier = castToIdentifier(value); // Identifier
984        else if (name.equals("lastSystemChange"))
985          this.lastSystemChange = castToInstant(value); // InstantType
986        else if (name.equals("source"))
987          this.source = castToReference(value); // Reference
988        else if (name.equals("parent"))
989          this.parent = castToReference(value); // Reference
990        else if (name.equals("operationalStatus"))
991          this.getOperationalStatus().add(castToCodeableConcept(value));
992        else if (name.equals("parameterGroup"))
993          this.parameterGroup = castToCodeableConcept(value); // CodeableConcept
994        else if (name.equals("measurementPrinciple"))
995          this.measurementPrinciple = new MeasmntPrincipleEnumFactory().fromType(value); // Enumeration<MeasmntPrinciple>
996        else if (name.equals("productionSpecification"))
997          this.getProductionSpecification().add((DeviceComponentProductionSpecificationComponent) value);
998        else if (name.equals("languageCode"))
999          this.languageCode = castToCodeableConcept(value); // CodeableConcept
1000        else
1001          super.setProperty(name, value);
1002      }
1003
1004      @Override
1005      public Base addChild(String name) throws FHIRException {
1006        if (name.equals("type")) {
1007          this.type = new CodeableConcept();
1008          return this.type;
1009        }
1010        else if (name.equals("identifier")) {
1011          this.identifier = new Identifier();
1012          return this.identifier;
1013        }
1014        else if (name.equals("lastSystemChange")) {
1015          throw new FHIRException("Cannot call addChild on a primitive type DeviceComponent.lastSystemChange");
1016        }
1017        else if (name.equals("source")) {
1018          this.source = new Reference();
1019          return this.source;
1020        }
1021        else if (name.equals("parent")) {
1022          this.parent = new Reference();
1023          return this.parent;
1024        }
1025        else if (name.equals("operationalStatus")) {
1026          return addOperationalStatus();
1027        }
1028        else if (name.equals("parameterGroup")) {
1029          this.parameterGroup = new CodeableConcept();
1030          return this.parameterGroup;
1031        }
1032        else if (name.equals("measurementPrinciple")) {
1033          throw new FHIRException("Cannot call addChild on a primitive type DeviceComponent.measurementPrinciple");
1034        }
1035        else if (name.equals("productionSpecification")) {
1036          return addProductionSpecification();
1037        }
1038        else if (name.equals("languageCode")) {
1039          this.languageCode = new CodeableConcept();
1040          return this.languageCode;
1041        }
1042        else
1043          return super.addChild(name);
1044      }
1045
1046  public String fhirType() {
1047    return "DeviceComponent";
1048
1049  }
1050
1051      public DeviceComponent copy() {
1052        DeviceComponent dst = new DeviceComponent();
1053        copyValues(dst);
1054        dst.type = type == null ? null : type.copy();
1055        dst.identifier = identifier == null ? null : identifier.copy();
1056        dst.lastSystemChange = lastSystemChange == null ? null : lastSystemChange.copy();
1057        dst.source = source == null ? null : source.copy();
1058        dst.parent = parent == null ? null : parent.copy();
1059        if (operationalStatus != null) {
1060          dst.operationalStatus = new ArrayList<CodeableConcept>();
1061          for (CodeableConcept i : operationalStatus)
1062            dst.operationalStatus.add(i.copy());
1063        };
1064        dst.parameterGroup = parameterGroup == null ? null : parameterGroup.copy();
1065        dst.measurementPrinciple = measurementPrinciple == null ? null : measurementPrinciple.copy();
1066        if (productionSpecification != null) {
1067          dst.productionSpecification = new ArrayList<DeviceComponentProductionSpecificationComponent>();
1068          for (DeviceComponentProductionSpecificationComponent i : productionSpecification)
1069            dst.productionSpecification.add(i.copy());
1070        };
1071        dst.languageCode = languageCode == null ? null : languageCode.copy();
1072        return dst;
1073      }
1074
1075      protected DeviceComponent typedCopy() {
1076        return copy();
1077      }
1078
1079      @Override
1080      public boolean equalsDeep(Base other) {
1081        if (!super.equalsDeep(other))
1082          return false;
1083        if (!(other instanceof DeviceComponent))
1084          return false;
1085        DeviceComponent o = (DeviceComponent) other;
1086        return compareDeep(type, o.type, true) && compareDeep(identifier, o.identifier, true) && compareDeep(lastSystemChange, o.lastSystemChange, true)
1087           && compareDeep(source, o.source, true) && compareDeep(parent, o.parent, true) && compareDeep(operationalStatus, o.operationalStatus, true)
1088           && compareDeep(parameterGroup, o.parameterGroup, true) && compareDeep(measurementPrinciple, o.measurementPrinciple, true)
1089           && compareDeep(productionSpecification, o.productionSpecification, true) && compareDeep(languageCode, o.languageCode, true)
1090          ;
1091      }
1092
1093      @Override
1094      public boolean equalsShallow(Base other) {
1095        if (!super.equalsShallow(other))
1096          return false;
1097        if (!(other instanceof DeviceComponent))
1098          return false;
1099        DeviceComponent o = (DeviceComponent) other;
1100        return compareValues(lastSystemChange, o.lastSystemChange, true) && compareValues(measurementPrinciple, o.measurementPrinciple, true)
1101          ;
1102      }
1103
1104      public boolean isEmpty() {
1105        return super.isEmpty() && (type == null || type.isEmpty()) && (identifier == null || identifier.isEmpty())
1106           && (lastSystemChange == null || lastSystemChange.isEmpty()) && (source == null || source.isEmpty())
1107           && (parent == null || parent.isEmpty()) && (operationalStatus == null || operationalStatus.isEmpty())
1108           && (parameterGroup == null || parameterGroup.isEmpty()) && (measurementPrinciple == null || measurementPrinciple.isEmpty())
1109           && (productionSpecification == null || productionSpecification.isEmpty()) && (languageCode == null || languageCode.isEmpty())
1110          ;
1111      }
1112
1113  @Override
1114  public ResourceType getResourceType() {
1115    return ResourceType.DeviceComponent;
1116   }
1117
1118  @SearchParamDefinition(name="parent", path="DeviceComponent.parent", description="The parent DeviceComponent resource", type="reference" )
1119  public static final String SP_PARENT = "parent";
1120  @SearchParamDefinition(name="source", path="DeviceComponent.source", description="The device source", type="reference" )
1121  public static final String SP_SOURCE = "source";
1122  @SearchParamDefinition(name="type", path="DeviceComponent.type", description="The device component type", type="token" )
1123  public static final String SP_TYPE = "type";
1124
1125}
1126