001package org.hl7.fhir.instance.model;
002
003/*
004  Copyright (c) 2011+, HL7, Inc.
005  All rights reserved.
006  
007  Redistribution and use in source and binary forms, with or without modification, 
008  are permitted provided that the following conditions are met:
009  
010   * Redistributions of source code must retain the above copyright notice, this 
011     list of conditions and the following disclaimer.
012   * Redistributions in binary form must reproduce the above copyright notice, 
013     this list of conditions and the following disclaimer in the documentation 
014     and/or other materials provided with the distribution.
015   * Neither the name of HL7 nor the names of its contributors may be used to 
016     endorse or promote products derived from this software without specific 
017     prior written permission.
018  
019  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
020  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
021  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
022  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
023  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
024  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
025  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
026  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
027  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
028  POSSIBILITY OF SUCH DAMAGE.
029  
030*/
031
032// Generated on Wed, Jul 13, 2016 05:32+1000 for FHIR v1.0.2
033import java.util.*;
034
035import org.hl7.fhir.exceptions.FHIRException;
036import org.hl7.fhir.utilities.Utilities;
037
038import ca.uhn.fhir.model.api.annotation.*;
039/**
040 * This resource identifies an instance of a manufactured item that is used in the provision of healthcare without being substantially changed through that activity. The device may be a medical or non-medical device.  Medical devices includes durable (reusable) medical equipment, implantable devices, as well as disposable equipment used for diagnostic, treatment, and research for healthcare and public health.  Non-medical devices may include items such as a machine, cellphone, computer, application, etc.
041 */
042@ResourceDef(name="Device", profile="http://hl7.org/fhir/Profile/Device")
043public class Device extends DomainResource {
044
045    public enum DeviceStatus {
046        /**
047         * The Device is available for use.
048         */
049        AVAILABLE, 
050        /**
051         * The Device is no longer available for use (e.g. lost, expired, damaged).
052         */
053        NOTAVAILABLE, 
054        /**
055         * The Device was entered in error and voided.
056         */
057        ENTEREDINERROR, 
058        /**
059         * added to help the parsers
060         */
061        NULL;
062        public static DeviceStatus fromCode(String codeString) throws FHIRException {
063            if (codeString == null || "".equals(codeString))
064                return null;
065        if ("available".equals(codeString))
066          return AVAILABLE;
067        if ("not-available".equals(codeString))
068          return NOTAVAILABLE;
069        if ("entered-in-error".equals(codeString))
070          return ENTEREDINERROR;
071        throw new FHIRException("Unknown DeviceStatus code '"+codeString+"'");
072        }
073        public String toCode() {
074          switch (this) {
075            case AVAILABLE: return "available";
076            case NOTAVAILABLE: return "not-available";
077            case ENTEREDINERROR: return "entered-in-error";
078            default: return "?";
079          }
080        }
081        public String getSystem() {
082          switch (this) {
083            case AVAILABLE: return "http://hl7.org/fhir/devicestatus";
084            case NOTAVAILABLE: return "http://hl7.org/fhir/devicestatus";
085            case ENTEREDINERROR: return "http://hl7.org/fhir/devicestatus";
086            default: return "?";
087          }
088        }
089        public String getDefinition() {
090          switch (this) {
091            case AVAILABLE: return "The Device is available for use.";
092            case NOTAVAILABLE: return "The Device is no longer available for use (e.g. lost, expired, damaged).";
093            case ENTEREDINERROR: return "The Device was entered in error and voided.";
094            default: return "?";
095          }
096        }
097        public String getDisplay() {
098          switch (this) {
099            case AVAILABLE: return "Available";
100            case NOTAVAILABLE: return "Not Available";
101            case ENTEREDINERROR: return "Entered in Error";
102            default: return "?";
103          }
104        }
105    }
106
107  public static class DeviceStatusEnumFactory implements EnumFactory<DeviceStatus> {
108    public DeviceStatus fromCode(String codeString) throws IllegalArgumentException {
109      if (codeString == null || "".equals(codeString))
110            if (codeString == null || "".equals(codeString))
111                return null;
112        if ("available".equals(codeString))
113          return DeviceStatus.AVAILABLE;
114        if ("not-available".equals(codeString))
115          return DeviceStatus.NOTAVAILABLE;
116        if ("entered-in-error".equals(codeString))
117          return DeviceStatus.ENTEREDINERROR;
118        throw new IllegalArgumentException("Unknown DeviceStatus code '"+codeString+"'");
119        }
120        public Enumeration<DeviceStatus> fromType(Base code) throws FHIRException {
121          if (code == null || code.isEmpty())
122            return null;
123          String codeString = ((PrimitiveType) code).asStringValue();
124          if (codeString == null || "".equals(codeString))
125            return null;
126        if ("available".equals(codeString))
127          return new Enumeration<DeviceStatus>(this, DeviceStatus.AVAILABLE);
128        if ("not-available".equals(codeString))
129          return new Enumeration<DeviceStatus>(this, DeviceStatus.NOTAVAILABLE);
130        if ("entered-in-error".equals(codeString))
131          return new Enumeration<DeviceStatus>(this, DeviceStatus.ENTEREDINERROR);
132        throw new FHIRException("Unknown DeviceStatus code '"+codeString+"'");
133        }
134    public String toCode(DeviceStatus code) {
135      if (code == DeviceStatus.AVAILABLE)
136        return "available";
137      if (code == DeviceStatus.NOTAVAILABLE)
138        return "not-available";
139      if (code == DeviceStatus.ENTEREDINERROR)
140        return "entered-in-error";
141      return "?";
142      }
143    }
144
145    /**
146     * Unique instance identifiers assigned to a device by organizations like manufacturers or owners. If the identifier identifies the type of device, Device.type should be used.
147     */
148    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
149    @Description(shortDefinition="Instance id from manufacturer, owner, and others", formalDefinition="Unique instance identifiers assigned to a device by organizations like manufacturers or owners. If the identifier identifies the type of device, Device.type should be used." )
150    protected List<Identifier> identifier;
151
152    /**
153     * Code or identifier to identify a kind of device.
154     */
155    @Child(name = "type", type = {CodeableConcept.class}, order=1, min=1, max=1, modifier=false, summary=false)
156    @Description(shortDefinition="What kind of device this is", formalDefinition="Code or identifier to identify a kind of device." )
157    protected CodeableConcept type;
158
159    /**
160     * Descriptive information, usage information or implantation information that is not captured in an existing element.
161     */
162    @Child(name = "note", type = {Annotation.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
163    @Description(shortDefinition="Device notes and comments", formalDefinition="Descriptive information, usage information or implantation information that is not captured in an existing element." )
164    protected List<Annotation> note;
165
166    /**
167     * Status of the Device availability.
168     */
169    @Child(name = "status", type = {CodeType.class}, order=3, min=0, max=1, modifier=true, summary=true)
170    @Description(shortDefinition="available | not-available | entered-in-error", formalDefinition="Status of the Device availability." )
171    protected Enumeration<DeviceStatus> status;
172
173    /**
174     * A name of the manufacturer.
175     */
176    @Child(name = "manufacturer", type = {StringType.class}, order=4, min=0, max=1, modifier=false, summary=false)
177    @Description(shortDefinition="Name of device manufacturer", formalDefinition="A name of the manufacturer." )
178    protected StringType manufacturer;
179
180    /**
181     * The "model" is an identifier assigned by the manufacturer to identify the product by its type. This number is shared by the all devices sold as the same type.
182     */
183    @Child(name = "model", type = {StringType.class}, order=5, min=0, max=1, modifier=false, summary=false)
184    @Description(shortDefinition="Model id assigned by the manufacturer", formalDefinition="The \"model\" is an identifier assigned by the manufacturer to identify the product by its type. This number is shared by the all devices sold as the same type." )
185    protected StringType model;
186
187    /**
188     * The version of the device, if the device has multiple releases under the same model, or if the device is software or carries firmware.
189     */
190    @Child(name = "version", type = {StringType.class}, order=6, min=0, max=1, modifier=false, summary=false)
191    @Description(shortDefinition="Version number (i.e. software)", formalDefinition="The version of the device, if the device has multiple releases under the same model, or if the device is software or carries firmware." )
192    protected StringType version;
193
194    /**
195     * The date and time when the device was manufactured.
196     */
197    @Child(name = "manufactureDate", type = {DateTimeType.class}, order=7, min=0, max=1, modifier=false, summary=false)
198    @Description(shortDefinition="Manufacture date", formalDefinition="The date and time when the device was manufactured." )
199    protected DateTimeType manufactureDate;
200
201    /**
202     * The date and time beyond which this device is no longer valid or should not be used (if applicable).
203     */
204    @Child(name = "expiry", type = {DateTimeType.class}, order=8, min=0, max=1, modifier=false, summary=false)
205    @Description(shortDefinition="Date and time of expiry of this device (if applicable)", formalDefinition="The date and time beyond which this device is no longer valid or should not be used (if applicable)." )
206    protected DateTimeType expiry;
207
208    /**
209     * United States Food and Drug Administration mandated Unique Device Identifier (UDI). Use the human readable information (the content that the user sees, which is sometimes different to the exact syntax represented in the barcode)  - see http://www.fda.gov/MedicalDevices/DeviceRegulationandGuidance/UniqueDeviceIdentification/default.htm.
210     */
211    @Child(name = "udi", type = {StringType.class}, order=9, min=0, max=1, modifier=false, summary=false)
212    @Description(shortDefinition="FDA mandated Unique Device Identifier", formalDefinition="United States Food and Drug Administration mandated Unique Device Identifier (UDI). Use the human readable information (the content that the user sees, which is sometimes different to the exact syntax represented in the barcode)  - see http://www.fda.gov/MedicalDevices/DeviceRegulationandGuidance/UniqueDeviceIdentification/default.htm." )
213    protected StringType udi;
214
215    /**
216     * Lot number assigned by the manufacturer.
217     */
218    @Child(name = "lotNumber", type = {StringType.class}, order=10, min=0, max=1, modifier=false, summary=false)
219    @Description(shortDefinition="Lot number of manufacture", formalDefinition="Lot number assigned by the manufacturer." )
220    protected StringType lotNumber;
221
222    /**
223     * An organization that is responsible for the provision and ongoing maintenance of the device.
224     */
225    @Child(name = "owner", type = {Organization.class}, order=11, min=0, max=1, modifier=false, summary=false)
226    @Description(shortDefinition="Organization responsible for device", formalDefinition="An organization that is responsible for the provision and ongoing maintenance of the device." )
227    protected Reference owner;
228
229    /**
230     * The actual object that is the target of the reference (An organization that is responsible for the provision and ongoing maintenance of the device.)
231     */
232    protected Organization ownerTarget;
233
234    /**
235     * The place where the device can be found.
236     */
237    @Child(name = "location", type = {Location.class}, order=12, min=0, max=1, modifier=false, summary=false)
238    @Description(shortDefinition="Where the resource is found", formalDefinition="The place where the device can be found." )
239    protected Reference location;
240
241    /**
242     * The actual object that is the target of the reference (The place where the device can be found.)
243     */
244    protected Location locationTarget;
245
246    /**
247     * Patient information, if the resource is affixed to a person.
248     */
249    @Child(name = "patient", type = {Patient.class}, order=13, min=0, max=1, modifier=false, summary=false)
250    @Description(shortDefinition="If the resource is affixed to a person", formalDefinition="Patient information, if the resource is affixed to a person." )
251    protected Reference patient;
252
253    /**
254     * The actual object that is the target of the reference (Patient information, if the resource is affixed to a person.)
255     */
256    protected Patient patientTarget;
257
258    /**
259     * Contact details for an organization or a particular human that is responsible for the device.
260     */
261    @Child(name = "contact", type = {ContactPoint.class}, order=14, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
262    @Description(shortDefinition="Details for human/organization for support", formalDefinition="Contact details for an organization or a particular human that is responsible for the device." )
263    protected List<ContactPoint> contact;
264
265    /**
266     * A network address on which the device may be contacted directly.
267     */
268    @Child(name = "url", type = {UriType.class}, order=15, min=0, max=1, modifier=false, summary=false)
269    @Description(shortDefinition="Network address to contact device", formalDefinition="A network address on which the device may be contacted directly." )
270    protected UriType url;
271
272    private static final long serialVersionUID = 366690094L;
273
274  /*
275   * Constructor
276   */
277    public Device() {
278      super();
279    }
280
281  /*
282   * Constructor
283   */
284    public Device(CodeableConcept type) {
285      super();
286      this.type = type;
287    }
288
289    /**
290     * @return {@link #identifier} (Unique instance identifiers assigned to a device by organizations like manufacturers or owners. If the identifier identifies the type of device, Device.type should be used.)
291     */
292    public List<Identifier> getIdentifier() { 
293      if (this.identifier == null)
294        this.identifier = new ArrayList<Identifier>();
295      return this.identifier;
296    }
297
298    public boolean hasIdentifier() { 
299      if (this.identifier == null)
300        return false;
301      for (Identifier item : this.identifier)
302        if (!item.isEmpty())
303          return true;
304      return false;
305    }
306
307    /**
308     * @return {@link #identifier} (Unique instance identifiers assigned to a device by organizations like manufacturers or owners. If the identifier identifies the type of device, Device.type should be used.)
309     */
310    // syntactic sugar
311    public Identifier addIdentifier() { //3
312      Identifier t = new Identifier();
313      if (this.identifier == null)
314        this.identifier = new ArrayList<Identifier>();
315      this.identifier.add(t);
316      return t;
317    }
318
319    // syntactic sugar
320    public Device addIdentifier(Identifier t) { //3
321      if (t == null)
322        return this;
323      if (this.identifier == null)
324        this.identifier = new ArrayList<Identifier>();
325      this.identifier.add(t);
326      return this;
327    }
328
329    /**
330     * @return {@link #type} (Code or identifier to identify a kind of device.)
331     */
332    public CodeableConcept getType() { 
333      if (this.type == null)
334        if (Configuration.errorOnAutoCreate())
335          throw new Error("Attempt to auto-create Device.type");
336        else if (Configuration.doAutoCreate())
337          this.type = new CodeableConcept(); // cc
338      return this.type;
339    }
340
341    public boolean hasType() { 
342      return this.type != null && !this.type.isEmpty();
343    }
344
345    /**
346     * @param value {@link #type} (Code or identifier to identify a kind of device.)
347     */
348    public Device setType(CodeableConcept value) { 
349      this.type = value;
350      return this;
351    }
352
353    /**
354     * @return {@link #note} (Descriptive information, usage information or implantation information that is not captured in an existing element.)
355     */
356    public List<Annotation> getNote() { 
357      if (this.note == null)
358        this.note = new ArrayList<Annotation>();
359      return this.note;
360    }
361
362    public boolean hasNote() { 
363      if (this.note == null)
364        return false;
365      for (Annotation item : this.note)
366        if (!item.isEmpty())
367          return true;
368      return false;
369    }
370
371    /**
372     * @return {@link #note} (Descriptive information, usage information or implantation information that is not captured in an existing element.)
373     */
374    // syntactic sugar
375    public Annotation addNote() { //3
376      Annotation t = new Annotation();
377      if (this.note == null)
378        this.note = new ArrayList<Annotation>();
379      this.note.add(t);
380      return t;
381    }
382
383    // syntactic sugar
384    public Device addNote(Annotation t) { //3
385      if (t == null)
386        return this;
387      if (this.note == null)
388        this.note = new ArrayList<Annotation>();
389      this.note.add(t);
390      return this;
391    }
392
393    /**
394     * @return {@link #status} (Status of the Device availability.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
395     */
396    public Enumeration<DeviceStatus> getStatusElement() { 
397      if (this.status == null)
398        if (Configuration.errorOnAutoCreate())
399          throw new Error("Attempt to auto-create Device.status");
400        else if (Configuration.doAutoCreate())
401          this.status = new Enumeration<DeviceStatus>(new DeviceStatusEnumFactory()); // bb
402      return this.status;
403    }
404
405    public boolean hasStatusElement() { 
406      return this.status != null && !this.status.isEmpty();
407    }
408
409    public boolean hasStatus() { 
410      return this.status != null && !this.status.isEmpty();
411    }
412
413    /**
414     * @param value {@link #status} (Status of the Device availability.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
415     */
416    public Device setStatusElement(Enumeration<DeviceStatus> value) { 
417      this.status = value;
418      return this;
419    }
420
421    /**
422     * @return Status of the Device availability.
423     */
424    public DeviceStatus getStatus() { 
425      return this.status == null ? null : this.status.getValue();
426    }
427
428    /**
429     * @param value Status of the Device availability.
430     */
431    public Device setStatus(DeviceStatus value) { 
432      if (value == null)
433        this.status = null;
434      else {
435        if (this.status == null)
436          this.status = new Enumeration<DeviceStatus>(new DeviceStatusEnumFactory());
437        this.status.setValue(value);
438      }
439      return this;
440    }
441
442    /**
443     * @return {@link #manufacturer} (A name of the manufacturer.). This is the underlying object with id, value and extensions. The accessor "getManufacturer" gives direct access to the value
444     */
445    public StringType getManufacturerElement() { 
446      if (this.manufacturer == null)
447        if (Configuration.errorOnAutoCreate())
448          throw new Error("Attempt to auto-create Device.manufacturer");
449        else if (Configuration.doAutoCreate())
450          this.manufacturer = new StringType(); // bb
451      return this.manufacturer;
452    }
453
454    public boolean hasManufacturerElement() { 
455      return this.manufacturer != null && !this.manufacturer.isEmpty();
456    }
457
458    public boolean hasManufacturer() { 
459      return this.manufacturer != null && !this.manufacturer.isEmpty();
460    }
461
462    /**
463     * @param value {@link #manufacturer} (A name of the manufacturer.). This is the underlying object with id, value and extensions. The accessor "getManufacturer" gives direct access to the value
464     */
465    public Device setManufacturerElement(StringType value) { 
466      this.manufacturer = value;
467      return this;
468    }
469
470    /**
471     * @return A name of the manufacturer.
472     */
473    public String getManufacturer() { 
474      return this.manufacturer == null ? null : this.manufacturer.getValue();
475    }
476
477    /**
478     * @param value A name of the manufacturer.
479     */
480    public Device setManufacturer(String value) { 
481      if (Utilities.noString(value))
482        this.manufacturer = null;
483      else {
484        if (this.manufacturer == null)
485          this.manufacturer = new StringType();
486        this.manufacturer.setValue(value);
487      }
488      return this;
489    }
490
491    /**
492     * @return {@link #model} (The "model" is an identifier assigned by the manufacturer to identify the product by its type. This number is shared by the all devices sold as the same type.). This is the underlying object with id, value and extensions. The accessor "getModel" gives direct access to the value
493     */
494    public StringType getModelElement() { 
495      if (this.model == null)
496        if (Configuration.errorOnAutoCreate())
497          throw new Error("Attempt to auto-create Device.model");
498        else if (Configuration.doAutoCreate())
499          this.model = new StringType(); // bb
500      return this.model;
501    }
502
503    public boolean hasModelElement() { 
504      return this.model != null && !this.model.isEmpty();
505    }
506
507    public boolean hasModel() { 
508      return this.model != null && !this.model.isEmpty();
509    }
510
511    /**
512     * @param value {@link #model} (The "model" is an identifier assigned by the manufacturer to identify the product by its type. This number is shared by the all devices sold as the same type.). This is the underlying object with id, value and extensions. The accessor "getModel" gives direct access to the value
513     */
514    public Device setModelElement(StringType value) { 
515      this.model = value;
516      return this;
517    }
518
519    /**
520     * @return The "model" is an identifier assigned by the manufacturer to identify the product by its type. This number is shared by the all devices sold as the same type.
521     */
522    public String getModel() { 
523      return this.model == null ? null : this.model.getValue();
524    }
525
526    /**
527     * @param value The "model" is an identifier assigned by the manufacturer to identify the product by its type. This number is shared by the all devices sold as the same type.
528     */
529    public Device setModel(String value) { 
530      if (Utilities.noString(value))
531        this.model = null;
532      else {
533        if (this.model == null)
534          this.model = new StringType();
535        this.model.setValue(value);
536      }
537      return this;
538    }
539
540    /**
541     * @return {@link #version} (The version of the device, if the device has multiple releases under the same model, or if the device is software or carries firmware.). This is the underlying object with id, value and extensions. The accessor "getVersion" gives direct access to the value
542     */
543    public StringType getVersionElement() { 
544      if (this.version == null)
545        if (Configuration.errorOnAutoCreate())
546          throw new Error("Attempt to auto-create Device.version");
547        else if (Configuration.doAutoCreate())
548          this.version = new StringType(); // bb
549      return this.version;
550    }
551
552    public boolean hasVersionElement() { 
553      return this.version != null && !this.version.isEmpty();
554    }
555
556    public boolean hasVersion() { 
557      return this.version != null && !this.version.isEmpty();
558    }
559
560    /**
561     * @param value {@link #version} (The version of the device, if the device has multiple releases under the same model, or if the device is software or carries firmware.). This is the underlying object with id, value and extensions. The accessor "getVersion" gives direct access to the value
562     */
563    public Device setVersionElement(StringType value) { 
564      this.version = value;
565      return this;
566    }
567
568    /**
569     * @return The version of the device, if the device has multiple releases under the same model, or if the device is software or carries firmware.
570     */
571    public String getVersion() { 
572      return this.version == null ? null : this.version.getValue();
573    }
574
575    /**
576     * @param value The version of the device, if the device has multiple releases under the same model, or if the device is software or carries firmware.
577     */
578    public Device setVersion(String value) { 
579      if (Utilities.noString(value))
580        this.version = null;
581      else {
582        if (this.version == null)
583          this.version = new StringType();
584        this.version.setValue(value);
585      }
586      return this;
587    }
588
589    /**
590     * @return {@link #manufactureDate} (The date and time when the device was manufactured.). This is the underlying object with id, value and extensions. The accessor "getManufactureDate" gives direct access to the value
591     */
592    public DateTimeType getManufactureDateElement() { 
593      if (this.manufactureDate == null)
594        if (Configuration.errorOnAutoCreate())
595          throw new Error("Attempt to auto-create Device.manufactureDate");
596        else if (Configuration.doAutoCreate())
597          this.manufactureDate = new DateTimeType(); // bb
598      return this.manufactureDate;
599    }
600
601    public boolean hasManufactureDateElement() { 
602      return this.manufactureDate != null && !this.manufactureDate.isEmpty();
603    }
604
605    public boolean hasManufactureDate() { 
606      return this.manufactureDate != null && !this.manufactureDate.isEmpty();
607    }
608
609    /**
610     * @param value {@link #manufactureDate} (The date and time when the device was manufactured.). This is the underlying object with id, value and extensions. The accessor "getManufactureDate" gives direct access to the value
611     */
612    public Device setManufactureDateElement(DateTimeType value) { 
613      this.manufactureDate = value;
614      return this;
615    }
616
617    /**
618     * @return The date and time when the device was manufactured.
619     */
620    public Date getManufactureDate() { 
621      return this.manufactureDate == null ? null : this.manufactureDate.getValue();
622    }
623
624    /**
625     * @param value The date and time when the device was manufactured.
626     */
627    public Device setManufactureDate(Date value) { 
628      if (value == null)
629        this.manufactureDate = null;
630      else {
631        if (this.manufactureDate == null)
632          this.manufactureDate = new DateTimeType();
633        this.manufactureDate.setValue(value);
634      }
635      return this;
636    }
637
638    /**
639     * @return {@link #expiry} (The date and time beyond which this device is no longer valid or should not be used (if applicable).). This is the underlying object with id, value and extensions. The accessor "getExpiry" gives direct access to the value
640     */
641    public DateTimeType getExpiryElement() { 
642      if (this.expiry == null)
643        if (Configuration.errorOnAutoCreate())
644          throw new Error("Attempt to auto-create Device.expiry");
645        else if (Configuration.doAutoCreate())
646          this.expiry = new DateTimeType(); // bb
647      return this.expiry;
648    }
649
650    public boolean hasExpiryElement() { 
651      return this.expiry != null && !this.expiry.isEmpty();
652    }
653
654    public boolean hasExpiry() { 
655      return this.expiry != null && !this.expiry.isEmpty();
656    }
657
658    /**
659     * @param value {@link #expiry} (The date and time beyond which this device is no longer valid or should not be used (if applicable).). This is the underlying object with id, value and extensions. The accessor "getExpiry" gives direct access to the value
660     */
661    public Device setExpiryElement(DateTimeType value) { 
662      this.expiry = value;
663      return this;
664    }
665
666    /**
667     * @return The date and time beyond which this device is no longer valid or should not be used (if applicable).
668     */
669    public Date getExpiry() { 
670      return this.expiry == null ? null : this.expiry.getValue();
671    }
672
673    /**
674     * @param value The date and time beyond which this device is no longer valid or should not be used (if applicable).
675     */
676    public Device setExpiry(Date value) { 
677      if (value == null)
678        this.expiry = null;
679      else {
680        if (this.expiry == null)
681          this.expiry = new DateTimeType();
682        this.expiry.setValue(value);
683      }
684      return this;
685    }
686
687    /**
688     * @return {@link #udi} (United States Food and Drug Administration mandated Unique Device Identifier (UDI). Use the human readable information (the content that the user sees, which is sometimes different to the exact syntax represented in the barcode)  - see http://www.fda.gov/MedicalDevices/DeviceRegulationandGuidance/UniqueDeviceIdentification/default.htm.). This is the underlying object with id, value and extensions. The accessor "getUdi" gives direct access to the value
689     */
690    public StringType getUdiElement() { 
691      if (this.udi == null)
692        if (Configuration.errorOnAutoCreate())
693          throw new Error("Attempt to auto-create Device.udi");
694        else if (Configuration.doAutoCreate())
695          this.udi = new StringType(); // bb
696      return this.udi;
697    }
698
699    public boolean hasUdiElement() { 
700      return this.udi != null && !this.udi.isEmpty();
701    }
702
703    public boolean hasUdi() { 
704      return this.udi != null && !this.udi.isEmpty();
705    }
706
707    /**
708     * @param value {@link #udi} (United States Food and Drug Administration mandated Unique Device Identifier (UDI). Use the human readable information (the content that the user sees, which is sometimes different to the exact syntax represented in the barcode)  - see http://www.fda.gov/MedicalDevices/DeviceRegulationandGuidance/UniqueDeviceIdentification/default.htm.). This is the underlying object with id, value and extensions. The accessor "getUdi" gives direct access to the value
709     */
710    public Device setUdiElement(StringType value) { 
711      this.udi = value;
712      return this;
713    }
714
715    /**
716     * @return United States Food and Drug Administration mandated Unique Device Identifier (UDI). Use the human readable information (the content that the user sees, which is sometimes different to the exact syntax represented in the barcode)  - see http://www.fda.gov/MedicalDevices/DeviceRegulationandGuidance/UniqueDeviceIdentification/default.htm.
717     */
718    public String getUdi() { 
719      return this.udi == null ? null : this.udi.getValue();
720    }
721
722    /**
723     * @param value United States Food and Drug Administration mandated Unique Device Identifier (UDI). Use the human readable information (the content that the user sees, which is sometimes different to the exact syntax represented in the barcode)  - see http://www.fda.gov/MedicalDevices/DeviceRegulationandGuidance/UniqueDeviceIdentification/default.htm.
724     */
725    public Device setUdi(String value) { 
726      if (Utilities.noString(value))
727        this.udi = null;
728      else {
729        if (this.udi == null)
730          this.udi = new StringType();
731        this.udi.setValue(value);
732      }
733      return this;
734    }
735
736    /**
737     * @return {@link #lotNumber} (Lot number assigned by the manufacturer.). This is the underlying object with id, value and extensions. The accessor "getLotNumber" gives direct access to the value
738     */
739    public StringType getLotNumberElement() { 
740      if (this.lotNumber == null)
741        if (Configuration.errorOnAutoCreate())
742          throw new Error("Attempt to auto-create Device.lotNumber");
743        else if (Configuration.doAutoCreate())
744          this.lotNumber = new StringType(); // bb
745      return this.lotNumber;
746    }
747
748    public boolean hasLotNumberElement() { 
749      return this.lotNumber != null && !this.lotNumber.isEmpty();
750    }
751
752    public boolean hasLotNumber() { 
753      return this.lotNumber != null && !this.lotNumber.isEmpty();
754    }
755
756    /**
757     * @param value {@link #lotNumber} (Lot number assigned by the manufacturer.). This is the underlying object with id, value and extensions. The accessor "getLotNumber" gives direct access to the value
758     */
759    public Device setLotNumberElement(StringType value) { 
760      this.lotNumber = value;
761      return this;
762    }
763
764    /**
765     * @return Lot number assigned by the manufacturer.
766     */
767    public String getLotNumber() { 
768      return this.lotNumber == null ? null : this.lotNumber.getValue();
769    }
770
771    /**
772     * @param value Lot number assigned by the manufacturer.
773     */
774    public Device setLotNumber(String value) { 
775      if (Utilities.noString(value))
776        this.lotNumber = null;
777      else {
778        if (this.lotNumber == null)
779          this.lotNumber = new StringType();
780        this.lotNumber.setValue(value);
781      }
782      return this;
783    }
784
785    /**
786     * @return {@link #owner} (An organization that is responsible for the provision and ongoing maintenance of the device.)
787     */
788    public Reference getOwner() { 
789      if (this.owner == null)
790        if (Configuration.errorOnAutoCreate())
791          throw new Error("Attempt to auto-create Device.owner");
792        else if (Configuration.doAutoCreate())
793          this.owner = new Reference(); // cc
794      return this.owner;
795    }
796
797    public boolean hasOwner() { 
798      return this.owner != null && !this.owner.isEmpty();
799    }
800
801    /**
802     * @param value {@link #owner} (An organization that is responsible for the provision and ongoing maintenance of the device.)
803     */
804    public Device setOwner(Reference value) { 
805      this.owner = value;
806      return this;
807    }
808
809    /**
810     * @return {@link #owner} 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. (An organization that is responsible for the provision and ongoing maintenance of the device.)
811     */
812    public Organization getOwnerTarget() { 
813      if (this.ownerTarget == null)
814        if (Configuration.errorOnAutoCreate())
815          throw new Error("Attempt to auto-create Device.owner");
816        else if (Configuration.doAutoCreate())
817          this.ownerTarget = new Organization(); // aa
818      return this.ownerTarget;
819    }
820
821    /**
822     * @param value {@link #owner} 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. (An organization that is responsible for the provision and ongoing maintenance of the device.)
823     */
824    public Device setOwnerTarget(Organization value) { 
825      this.ownerTarget = value;
826      return this;
827    }
828
829    /**
830     * @return {@link #location} (The place where the device can be found.)
831     */
832    public Reference getLocation() { 
833      if (this.location == null)
834        if (Configuration.errorOnAutoCreate())
835          throw new Error("Attempt to auto-create Device.location");
836        else if (Configuration.doAutoCreate())
837          this.location = new Reference(); // cc
838      return this.location;
839    }
840
841    public boolean hasLocation() { 
842      return this.location != null && !this.location.isEmpty();
843    }
844
845    /**
846     * @param value {@link #location} (The place where the device can be found.)
847     */
848    public Device setLocation(Reference value) { 
849      this.location = value;
850      return this;
851    }
852
853    /**
854     * @return {@link #location} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (The place where the device can be found.)
855     */
856    public Location getLocationTarget() { 
857      if (this.locationTarget == null)
858        if (Configuration.errorOnAutoCreate())
859          throw new Error("Attempt to auto-create Device.location");
860        else if (Configuration.doAutoCreate())
861          this.locationTarget = new Location(); // aa
862      return this.locationTarget;
863    }
864
865    /**
866     * @param value {@link #location} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (The place where the device can be found.)
867     */
868    public Device setLocationTarget(Location value) { 
869      this.locationTarget = value;
870      return this;
871    }
872
873    /**
874     * @return {@link #patient} (Patient information, if the resource is affixed to a person.)
875     */
876    public Reference getPatient() { 
877      if (this.patient == null)
878        if (Configuration.errorOnAutoCreate())
879          throw new Error("Attempt to auto-create Device.patient");
880        else if (Configuration.doAutoCreate())
881          this.patient = new Reference(); // cc
882      return this.patient;
883    }
884
885    public boolean hasPatient() { 
886      return this.patient != null && !this.patient.isEmpty();
887    }
888
889    /**
890     * @param value {@link #patient} (Patient information, if the resource is affixed to a person.)
891     */
892    public Device setPatient(Reference value) { 
893      this.patient = value;
894      return this;
895    }
896
897    /**
898     * @return {@link #patient} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (Patient information, if the resource is affixed to a person.)
899     */
900    public Patient getPatientTarget() { 
901      if (this.patientTarget == null)
902        if (Configuration.errorOnAutoCreate())
903          throw new Error("Attempt to auto-create Device.patient");
904        else if (Configuration.doAutoCreate())
905          this.patientTarget = new Patient(); // aa
906      return this.patientTarget;
907    }
908
909    /**
910     * @param value {@link #patient} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (Patient information, if the resource is affixed to a person.)
911     */
912    public Device setPatientTarget(Patient value) { 
913      this.patientTarget = value;
914      return this;
915    }
916
917    /**
918     * @return {@link #contact} (Contact details for an organization or a particular human that is responsible for the device.)
919     */
920    public List<ContactPoint> getContact() { 
921      if (this.contact == null)
922        this.contact = new ArrayList<ContactPoint>();
923      return this.contact;
924    }
925
926    public boolean hasContact() { 
927      if (this.contact == null)
928        return false;
929      for (ContactPoint item : this.contact)
930        if (!item.isEmpty())
931          return true;
932      return false;
933    }
934
935    /**
936     * @return {@link #contact} (Contact details for an organization or a particular human that is responsible for the device.)
937     */
938    // syntactic sugar
939    public ContactPoint addContact() { //3
940      ContactPoint t = new ContactPoint();
941      if (this.contact == null)
942        this.contact = new ArrayList<ContactPoint>();
943      this.contact.add(t);
944      return t;
945    }
946
947    // syntactic sugar
948    public Device addContact(ContactPoint t) { //3
949      if (t == null)
950        return this;
951      if (this.contact == null)
952        this.contact = new ArrayList<ContactPoint>();
953      this.contact.add(t);
954      return this;
955    }
956
957    /**
958     * @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
959     */
960    public UriType getUrlElement() { 
961      if (this.url == null)
962        if (Configuration.errorOnAutoCreate())
963          throw new Error("Attempt to auto-create Device.url");
964        else if (Configuration.doAutoCreate())
965          this.url = new UriType(); // bb
966      return this.url;
967    }
968
969    public boolean hasUrlElement() { 
970      return this.url != null && !this.url.isEmpty();
971    }
972
973    public boolean hasUrl() { 
974      return this.url != null && !this.url.isEmpty();
975    }
976
977    /**
978     * @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
979     */
980    public Device setUrlElement(UriType value) { 
981      this.url = value;
982      return this;
983    }
984
985    /**
986     * @return A network address on which the device may be contacted directly.
987     */
988    public String getUrl() { 
989      return this.url == null ? null : this.url.getValue();
990    }
991
992    /**
993     * @param value A network address on which the device may be contacted directly.
994     */
995    public Device setUrl(String value) { 
996      if (Utilities.noString(value))
997        this.url = null;
998      else {
999        if (this.url == null)
1000          this.url = new UriType();
1001        this.url.setValue(value);
1002      }
1003      return this;
1004    }
1005
1006      protected void listChildren(List<Property> childrenList) {
1007        super.listChildren(childrenList);
1008        childrenList.add(new Property("identifier", "Identifier", "Unique instance identifiers assigned to a device by organizations like manufacturers or owners. If the identifier identifies the type of device, Device.type should be used.", 0, java.lang.Integer.MAX_VALUE, identifier));
1009        childrenList.add(new Property("type", "CodeableConcept", "Code or identifier to identify a kind of device.", 0, java.lang.Integer.MAX_VALUE, type));
1010        childrenList.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));
1011        childrenList.add(new Property("status", "code", "Status of the Device availability.", 0, java.lang.Integer.MAX_VALUE, status));
1012        childrenList.add(new Property("manufacturer", "string", "A name of the manufacturer.", 0, java.lang.Integer.MAX_VALUE, manufacturer));
1013        childrenList.add(new Property("model", "string", "The \"model\" is an identifier assigned by the manufacturer to identify the product by its type. This number is shared by the all devices sold as the same type.", 0, java.lang.Integer.MAX_VALUE, model));
1014        childrenList.add(new Property("version", "string", "The version of the device, if the device has multiple releases under the same model, or if the device is software or carries firmware.", 0, java.lang.Integer.MAX_VALUE, version));
1015        childrenList.add(new Property("manufactureDate", "dateTime", "The date and time when the device was manufactured.", 0, java.lang.Integer.MAX_VALUE, manufactureDate));
1016        childrenList.add(new Property("expiry", "dateTime", "The date and time beyond which this device is no longer valid or should not be used (if applicable).", 0, java.lang.Integer.MAX_VALUE, expiry));
1017        childrenList.add(new Property("udi", "string", "United States Food and Drug Administration mandated Unique Device Identifier (UDI). Use the human readable information (the content that the user sees, which is sometimes different to the exact syntax represented in the barcode)  - see http://www.fda.gov/MedicalDevices/DeviceRegulationandGuidance/UniqueDeviceIdentification/default.htm.", 0, java.lang.Integer.MAX_VALUE, udi));
1018        childrenList.add(new Property("lotNumber", "string", "Lot number assigned by the manufacturer.", 0, java.lang.Integer.MAX_VALUE, lotNumber));
1019        childrenList.add(new Property("owner", "Reference(Organization)", "An organization that is responsible for the provision and ongoing maintenance of the device.", 0, java.lang.Integer.MAX_VALUE, owner));
1020        childrenList.add(new Property("location", "Reference(Location)", "The place where the device can be found.", 0, java.lang.Integer.MAX_VALUE, location));
1021        childrenList.add(new Property("patient", "Reference(Patient)", "Patient information, if the resource is affixed to a person.", 0, java.lang.Integer.MAX_VALUE, patient));
1022        childrenList.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));
1023        childrenList.add(new Property("url", "uri", "A network address on which the device may be contacted directly.", 0, java.lang.Integer.MAX_VALUE, url));
1024      }
1025
1026      @Override
1027      public void setProperty(String name, Base value) throws FHIRException {
1028        if (name.equals("identifier"))
1029          this.getIdentifier().add(castToIdentifier(value));
1030        else if (name.equals("type"))
1031          this.type = castToCodeableConcept(value); // CodeableConcept
1032        else if (name.equals("note"))
1033          this.getNote().add(castToAnnotation(value));
1034        else if (name.equals("status"))
1035          this.status = new DeviceStatusEnumFactory().fromType(value); // Enumeration<DeviceStatus>
1036        else if (name.equals("manufacturer"))
1037          this.manufacturer = castToString(value); // StringType
1038        else if (name.equals("model"))
1039          this.model = castToString(value); // StringType
1040        else if (name.equals("version"))
1041          this.version = castToString(value); // StringType
1042        else if (name.equals("manufactureDate"))
1043          this.manufactureDate = castToDateTime(value); // DateTimeType
1044        else if (name.equals("expiry"))
1045          this.expiry = castToDateTime(value); // DateTimeType
1046        else if (name.equals("udi"))
1047          this.udi = castToString(value); // StringType
1048        else if (name.equals("lotNumber"))
1049          this.lotNumber = castToString(value); // StringType
1050        else if (name.equals("owner"))
1051          this.owner = castToReference(value); // Reference
1052        else if (name.equals("location"))
1053          this.location = castToReference(value); // Reference
1054        else if (name.equals("patient"))
1055          this.patient = castToReference(value); // Reference
1056        else if (name.equals("contact"))
1057          this.getContact().add(castToContactPoint(value));
1058        else if (name.equals("url"))
1059          this.url = castToUri(value); // UriType
1060        else
1061          super.setProperty(name, value);
1062      }
1063
1064      @Override
1065      public Base addChild(String name) throws FHIRException {
1066        if (name.equals("identifier")) {
1067          return addIdentifier();
1068        }
1069        else if (name.equals("type")) {
1070          this.type = new CodeableConcept();
1071          return this.type;
1072        }
1073        else if (name.equals("note")) {
1074          return addNote();
1075        }
1076        else if (name.equals("status")) {
1077          throw new FHIRException("Cannot call addChild on a primitive type Device.status");
1078        }
1079        else if (name.equals("manufacturer")) {
1080          throw new FHIRException("Cannot call addChild on a primitive type Device.manufacturer");
1081        }
1082        else if (name.equals("model")) {
1083          throw new FHIRException("Cannot call addChild on a primitive type Device.model");
1084        }
1085        else if (name.equals("version")) {
1086          throw new FHIRException("Cannot call addChild on a primitive type Device.version");
1087        }
1088        else if (name.equals("manufactureDate")) {
1089          throw new FHIRException("Cannot call addChild on a primitive type Device.manufactureDate");
1090        }
1091        else if (name.equals("expiry")) {
1092          throw new FHIRException("Cannot call addChild on a primitive type Device.expiry");
1093        }
1094        else if (name.equals("udi")) {
1095          throw new FHIRException("Cannot call addChild on a primitive type Device.udi");
1096        }
1097        else if (name.equals("lotNumber")) {
1098          throw new FHIRException("Cannot call addChild on a primitive type Device.lotNumber");
1099        }
1100        else if (name.equals("owner")) {
1101          this.owner = new Reference();
1102          return this.owner;
1103        }
1104        else if (name.equals("location")) {
1105          this.location = new Reference();
1106          return this.location;
1107        }
1108        else if (name.equals("patient")) {
1109          this.patient = new Reference();
1110          return this.patient;
1111        }
1112        else if (name.equals("contact")) {
1113          return addContact();
1114        }
1115        else if (name.equals("url")) {
1116          throw new FHIRException("Cannot call addChild on a primitive type Device.url");
1117        }
1118        else
1119          return super.addChild(name);
1120      }
1121
1122  public String fhirType() {
1123    return "Device";
1124
1125  }
1126
1127      public Device copy() {
1128        Device dst = new Device();
1129        copyValues(dst);
1130        if (identifier != null) {
1131          dst.identifier = new ArrayList<Identifier>();
1132          for (Identifier i : identifier)
1133            dst.identifier.add(i.copy());
1134        };
1135        dst.type = type == null ? null : type.copy();
1136        if (note != null) {
1137          dst.note = new ArrayList<Annotation>();
1138          for (Annotation i : note)
1139            dst.note.add(i.copy());
1140        };
1141        dst.status = status == null ? null : status.copy();
1142        dst.manufacturer = manufacturer == null ? null : manufacturer.copy();
1143        dst.model = model == null ? null : model.copy();
1144        dst.version = version == null ? null : version.copy();
1145        dst.manufactureDate = manufactureDate == null ? null : manufactureDate.copy();
1146        dst.expiry = expiry == null ? null : expiry.copy();
1147        dst.udi = udi == null ? null : udi.copy();
1148        dst.lotNumber = lotNumber == null ? null : lotNumber.copy();
1149        dst.owner = owner == null ? null : owner.copy();
1150        dst.location = location == null ? null : location.copy();
1151        dst.patient = patient == null ? null : patient.copy();
1152        if (contact != null) {
1153          dst.contact = new ArrayList<ContactPoint>();
1154          for (ContactPoint i : contact)
1155            dst.contact.add(i.copy());
1156        };
1157        dst.url = url == null ? null : url.copy();
1158        return dst;
1159      }
1160
1161      protected Device typedCopy() {
1162        return copy();
1163      }
1164
1165      @Override
1166      public boolean equalsDeep(Base other) {
1167        if (!super.equalsDeep(other))
1168          return false;
1169        if (!(other instanceof Device))
1170          return false;
1171        Device o = (Device) other;
1172        return compareDeep(identifier, o.identifier, true) && compareDeep(type, o.type, true) && compareDeep(note, o.note, true)
1173           && compareDeep(status, o.status, true) && compareDeep(manufacturer, o.manufacturer, true) && compareDeep(model, o.model, true)
1174           && compareDeep(version, o.version, true) && compareDeep(manufactureDate, o.manufactureDate, true)
1175           && compareDeep(expiry, o.expiry, true) && compareDeep(udi, o.udi, true) && compareDeep(lotNumber, o.lotNumber, true)
1176           && compareDeep(owner, o.owner, true) && compareDeep(location, o.location, true) && compareDeep(patient, o.patient, true)
1177           && compareDeep(contact, o.contact, true) && compareDeep(url, o.url, true);
1178      }
1179
1180      @Override
1181      public boolean equalsShallow(Base other) {
1182        if (!super.equalsShallow(other))
1183          return false;
1184        if (!(other instanceof Device))
1185          return false;
1186        Device o = (Device) other;
1187        return compareValues(status, o.status, true) && compareValues(manufacturer, o.manufacturer, true) && compareValues(model, o.model, true)
1188           && compareValues(version, o.version, true) && compareValues(manufactureDate, o.manufactureDate, true)
1189           && compareValues(expiry, o.expiry, true) && compareValues(udi, o.udi, true) && compareValues(lotNumber, o.lotNumber, true)
1190           && compareValues(url, o.url, true);
1191      }
1192
1193      public boolean isEmpty() {
1194        return super.isEmpty() && (identifier == null || identifier.isEmpty()) && (type == null || type.isEmpty())
1195           && (note == null || note.isEmpty()) && (status == null || status.isEmpty()) && (manufacturer == null || manufacturer.isEmpty())
1196           && (model == null || model.isEmpty()) && (version == null || version.isEmpty()) && (manufactureDate == null || manufactureDate.isEmpty())
1197           && (expiry == null || expiry.isEmpty()) && (udi == null || udi.isEmpty()) && (lotNumber == null || lotNumber.isEmpty())
1198           && (owner == null || owner.isEmpty()) && (location == null || location.isEmpty()) && (patient == null || patient.isEmpty())
1199           && (contact == null || contact.isEmpty()) && (url == null || url.isEmpty());
1200      }
1201
1202  @Override
1203  public ResourceType getResourceType() {
1204    return ResourceType.Device;
1205   }
1206
1207  @SearchParamDefinition(name="identifier", path="Device.identifier", description="Instance id from manufacturer, owner, and others", type="token" )
1208  public static final String SP_IDENTIFIER = "identifier";
1209  @SearchParamDefinition(name="patient", path="Device.patient", description="Patient information, if the resource is affixed to a person", type="reference" )
1210  public static final String SP_PATIENT = "patient";
1211  @SearchParamDefinition(name="organization", path="Device.owner", description="The organization responsible for the device", type="reference" )
1212  public static final String SP_ORGANIZATION = "organization";
1213  @SearchParamDefinition(name="model", path="Device.model", description="The model of the device", type="string" )
1214  public static final String SP_MODEL = "model";
1215  @SearchParamDefinition(name="location", path="Device.location", description="A location, where the resource is found", type="reference" )
1216  public static final String SP_LOCATION = "location";
1217  @SearchParamDefinition(name="udi", path="Device.udi", description="FDA mandated Unique Device Identifier", type="string" )
1218  public static final String SP_UDI = "udi";
1219  @SearchParamDefinition(name="type", path="Device.type", description="The type of the device", type="token" )
1220  public static final String SP_TYPE = "type";
1221  @SearchParamDefinition(name="url", path="Device.url", description="Network address to contact device", type="uri" )
1222  public static final String SP_URL = "url";
1223  @SearchParamDefinition(name="manufacturer", path="Device.manufacturer", description="The manufacturer of the device", type="string" )
1224  public static final String SP_MANUFACTURER = "manufacturer";
1225
1226}
1227