//
// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 
// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
// Any modifications to this file will be lost upon recompilation of the source schema. 
// Generated on: 2014.04.29 at 12:38:36 PM MDT 
//


package gov.va.med.cds.template.generated.vitalsigns;

import gov.va.med.cds.clinicaldata.ClinicalRecordInterface;
import gov.va.med.cds.template.generated.basedatatypes.HL72CodedElementLite;
import gov.va.med.cds.template.generated.basedatatypes.HL72EntityIdentifier;
import gov.va.med.cds.template.generated.basedatatypes.HL72FacilityIdentifier;
import gov.va.med.cds.template.generated.basedatatypes.HL72LocationIdentifier;
import gov.va.med.cds.template.generated.basedatatypes.HL72OrganizationIdentifier;
import gov.va.med.cds.template.generated.basedatatypes.PointInTime;
import gov.va.med.cds.template.generated.common.PatientLite;
import gov.va.med.cds.template.generated.common.PractitionerParticipationLite;
import gov.va.med.cds.template.generated.vitalsigns.subquery.ErrorReasonWrapper;
import gov.va.med.cds.template.generated.vitalsigns.subquery.VitalSignQualifierWrapper;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;


/**
 * <p>Java class for VitalSignObservationEvent complex type.
 * 
 * <p>The following schema fragment specifies the expected content contained within this class.
 * 
 * <pre>
 * &lt;complexType name="VitalSignObservationEvent">
 *   &lt;complexContent>
 *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
 *       &lt;sequence>
 *         &lt;element name="recordIdentifier" type="{Basedatatypes}HL72EntityIdentifier"/>
 *         &lt;element name="patient" type="{Common}PatientLite"/>
 *         &lt;element name="observationTime" type="{Basedatatypes}PointInTime" minOccurs="0"/>
 *         &lt;element name="observationMethod" type="{Basedatatypes}HL72CodedElementLite" minOccurs="0"/>
 *         &lt;element name="observedCharacteristic" type="{Basedatatypes}HL72CodedElementLite" minOccurs="0"/>
 *         &lt;element name="collectionSessionTime" type="{Basedatatypes}PointInTime" minOccurs="0"/>
 *         &lt;element name="status" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
 *         &lt;element name="supplementalOxygen" type="{Vitalsigns}OxygenAdministration" minOccurs="0"/>
 *         &lt;element name="author" type="{Common}PractitionerParticipationLite" minOccurs="0"/>
 *         &lt;element name="homeTelehealthMonitor" type="{Vitalsigns}HomeTelehealthMonitor" minOccurs="0"/>
 *         &lt;element name="hospitalLocationIdentifier" type="{Basedatatypes}HL72LocationIdentifier" minOccurs="0"/>
 *         &lt;element name="division" type="{Basedatatypes}HL72CodedElementLite" minOccurs="0"/>
 *         &lt;element name="orderingFacilityIdentifier" type="{Basedatatypes}HL72OrganizationIdentifier" minOccurs="0"/>
 *         &lt;element name="stopCode" type="{Basedatatypes}HL72CodedElementLite" minOccurs="0"/>
 *         &lt;element name="vitalSignObservation" type="{Vitalsigns}VitalSignObservation" minOccurs="0"/>
 *         &lt;element name="errorEnterer" type="{Common}PractitionerParticipationLite" minOccurs="0"/>
 *         &lt;element name="errorReason" type="{Vitalsigns}ErrorReason" maxOccurs="unbounded" minOccurs="0"/>
 *         &lt;element name="recordSource" type="{Basedatatypes}HL72FacilityIdentifier"/>
 *         &lt;element name="recordVersion" type="{http://www.w3.org/2001/XMLSchema}int"/>
 *         &lt;element name="recordUpdateTime" type="{Basedatatypes}PointInTime"/>
 *       &lt;/sequence>
 *     &lt;/restriction>
 *   &lt;/complexContent>
 * &lt;/complexType>
 * </pre>
 * 
 * 
 */
@XmlRootElement( name="vitalSignObservationEvents")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "VitalSignObservationEvent", propOrder = {
    "recordIdentifier",
    "patient",
    "observationTime",
    "observationMethod",
    "observedCharacteristic",
    "collectionSessionTime",
    "status",
    "supplementalOxygen",
    "author",
    "homeTelehealthMonitor",
    "hospitalLocationIdentifier",
    "division",
    "orderingFacilityIdentifier",
    "stopCode",
    "vitalSignObservation",
    "errorEnterer",
    "errorReason",
    "recordSource",
    "recordVersion",
    "recordUpdateTime",
    "requestId",
    "id"
})
public class VitalSignObservationEvent implements ClinicalRecordInterface {

    @XmlElement(required = true)
    protected HL72EntityIdentifier recordIdentifier;
    @XmlElement(required = true)
    protected PatientLite patient;
    protected PointInTime observationTime;
    protected HL72CodedElementLite observationMethod;
    protected HL72CodedElementLite observedCharacteristic;
    protected PointInTime collectionSessionTime;
    protected String status;
    protected OxygenAdministration supplementalOxygen;
    protected PractitionerParticipationLite author;
    protected HomeTelehealthMonitor homeTelehealthMonitor;
    protected HL72LocationIdentifier hospitalLocationIdentifier;
    protected HL72CodedElementLite division;
    protected HL72OrganizationIdentifier orderingFacilityIdentifier;
    protected HL72CodedElementLite stopCode;
    protected VitalSignObservation vitalSignObservation;
    protected PractitionerParticipationLite errorEnterer;
    protected List<ErrorReason> errorReason;
    @XmlElement( required = true, nillable = false )
    protected HL72FacilityIdentifier recordSource;
    protected Integer recordVersion;
    @XmlElement(required = true)
    protected PointInTime recordUpdateTime;
	protected String requestId;
	protected Long id;
	
	//Static Sub Query Classes
	protected static Map< String, Class<?> > subqueryElementClasses = new HashMap<String, Class<?>>();
	static{
		subqueryElementClasses.put(VitalSignQualifierWrapper.class.getName(), VitalSignQualifierWrapper.class);
		subqueryElementClasses.put(ErrorReasonWrapper.class.getName(), ErrorReasonWrapper.class);
	}
	/*static void init()
	{
		subqueryElementClasses.put(VitalSignQualifierWrapper.class.getName(), VitalSignQualifierWrapper.class);
		subqueryElementClasses.put(ErrorReasonWrapper.class.getName(), ErrorReasonWrapper.class);
	}*/
	public static Class<?> getSubqueryElementClass(String className){
		return subqueryElementClasses.get(className);
	}
	
    /**
     * Gets the value of the recordIdentifier property. 
     * 
     * @return
     *     possible object is
     *     {@link HL72EntityIdentifier }
     *     
     */
    public HL72EntityIdentifier getRecordIdentifier() {
        return recordIdentifier;
    }

    /**
     * Sets the value of the recordIdentifier property.
     * 
     * @param value
     *     allowed object is
     *     {@link HL72EntityIdentifier }
     *     
     */
    public void setRecordIdentifier(HL72EntityIdentifier value) {
        this.recordIdentifier = value;
    }

    /**
     * Gets the value of the patient property.
     * 
     * @return
     *     possible object is
     *     {@link PatientLite }
     *     
     */
    public PatientLite getPatient() {
        return patient;
    }

    /**
     * Sets the value of the patient property.
     * 
     * @param value
     *     allowed object is
     *     {@link PatientLite }
     *     
     */
    public void setPatient(PatientLite value) {
        this.patient = value;
    }

    /**
     * Gets the value of the observationTime property.
     * 
     * @return
     *     possible object is
     *     {@link PointInTime }
     *     
     */
    public PointInTime getObservationTime() {
        return observationTime;
    }

    /**
     * Sets the value of the observationTime property.
     * 
     * @param value
     *     allowed object is
     *     {@link PointInTime }
     *     
     */
    public void setObservationTime(PointInTime value) {
        this.observationTime = value;
    }

    /**
     * Gets the value of the observationMethod property.
     * 
     * @return
     *     possible object is
     *     {@link HL72CodedElementLite }
     *     
     */
    public HL72CodedElementLite getObservationMethod() {
        return observationMethod;
    }

    /**
     * Sets the value of the observationMethod property.
     * 
     * @param value
     *     allowed object is
     *     {@link HL72CodedElementLite }
     *     
     */
    public void setObservationMethod(HL72CodedElementLite value) {
        this.observationMethod = value;
    }

    /**
     * Gets the value of the observedCharacteristic property.
     * 
     * @return
     *     possible object is
     *     {@link HL72CodedElementLite }
     *     
     */
    public HL72CodedElementLite getObservedCharacteristic() {
        return observedCharacteristic;
    }

    /**
     * Sets the value of the observedCharacteristic property.
     * 
     * @param value
     *     allowed object is
     *     {@link HL72CodedElementLite }
     *     
     */
    public void setObservedCharacteristic(HL72CodedElementLite value) {
        this.observedCharacteristic = value;
    }

    /**
     * Gets the value of the collectionSessionTime property.
     * 
     * @return
     *     possible object is
     *     {@link PointInTime }
     *     
     */
    public PointInTime getCollectionSessionTime() {
        return collectionSessionTime;
    }

    /**
     * Sets the value of the collectionSessionTime property.
     * 
     * @param value
     *     allowed object is
     *     {@link PointInTime }
     *     
     */
    public void setCollectionSessionTime(PointInTime value) {
        this.collectionSessionTime = value;
    }

    /**
     * Gets the value of the status property.
     * 
     * @return
     *     possible object is
     *     {@link String }
     *     
     */
    public String getStatus() {
        return status;
    }

    /**
     * Sets the value of the status property.
     * 
     * @param value
     *     allowed object is
     *     {@link String }
     *     
     */
    public void setStatus(String value) {
        this.status = value;
    }

    /**
     * Gets the value of the supplementalOxygen property.
     * 
     * @return
     *     possible object is
     *     {@link OxygenAdministration }
     *     
     */
    public OxygenAdministration getSupplementalOxygen() {
        return supplementalOxygen;
    }

    /**
     * Sets the value of the supplementalOxygen property.
     * 
     * @param value
     *     allowed object is
     *     {@link OxygenAdministration }
     *     
     */
    public void setSupplementalOxygen(OxygenAdministration value) {
        this.supplementalOxygen = value;
    }

    /**
     * Gets the value of the author property.
     * 
     * @return
     *     possible object is
     *     {@link PractitionerParticipationLite }
     *     
     */
    public PractitionerParticipationLite getAuthor() {
        return author;
    }

    /**
     * Sets the value of the author property.
     * 
     * @param value
     *     allowed object is
     *     {@link PractitionerParticipationLite }
     *     
     */
    public void setAuthor(PractitionerParticipationLite value) {
        this.author = value;
    }

    /**
     * Gets the value of the homeTelehealthMonitor property.
     * 
     * @return
     *     possible object is
     *     {@link HomeTelehealthMonitor }
     *     
     */
    public HomeTelehealthMonitor getHomeTelehealthMonitor() {
        return homeTelehealthMonitor;
    }

    /**
     * Sets the value of the homeTelehealthMonitor property.
     * 
     * @param value
     *     allowed object is
     *     {@link HomeTelehealthMonitor }
     *     
     */
    public void setHomeTelehealthMonitor(HomeTelehealthMonitor value) {
        this.homeTelehealthMonitor = value;
    }

    /**
     * Gets the value of the hospitalLocationIdentifier property.
     * 
     * @return
     *     possible object is
     *     {@link HL72LocationIdentifier }
     *     
     */
    public HL72LocationIdentifier getHospitalLocationIdentifier() {
        return hospitalLocationIdentifier;
    }

    /**
     * Sets the value of the hospitalLocationIdentifier property.
     * 
     * @param value
     *     allowed object is
     *     {@link HL72LocationIdentifier }
     *     
     */
    public void setHospitalLocationIdentifier(HL72LocationIdentifier value) {
        this.hospitalLocationIdentifier = value;
    }

    /**
     * Gets the value of the division property.
     * 
     * @return
     *     possible object is
     *     {@link HL72CodedElementLite }
     *     
     */
    public HL72CodedElementLite getDivision() {
        return division;
    }

    /**
     * Sets the value of the division property.
     * 
     * @param value
     *     allowed object is
     *     {@link HL72CodedElementLite }
     *     
     */
    public void setDivision(HL72CodedElementLite value) {
        this.division = value;
    }

    /**
     * Gets the value of the orderingFacilityIdentifier property.
     * 
     * @return
     *     possible object is
     *     {@link HL72OrganizationIdentifier }
     *     
     */
    public HL72OrganizationIdentifier getOrderingFacilityIdentifier() {
        return orderingFacilityIdentifier;
    }

    /**
     * Sets the value of the orderingFacilityIdentifier property.
     * 
     * @param value
     *     allowed object is
     *     {@link HL72OrganizationIdentifier }
     *     
     */
    public void setOrderingFacilityIdentifier(HL72OrganizationIdentifier value) {
        this.orderingFacilityIdentifier = value;
    }

    /**
     * Gets the value of the stopCode property.
     * 
     * @return
     *     possible object is
     *     {@link HL72CodedElementLite }
     *     
     */
    public HL72CodedElementLite getStopCode() {
        return stopCode;
    }

    /**
     * Sets the value of the stopCode property.
     * 
     * @param value
     *     allowed object is
     *     {@link HL72CodedElementLite }
     *     
     */
    public void setStopCode(HL72CodedElementLite value) {
        this.stopCode = value;
    }

    /**
     * Gets the value of the vitalSignObservation property.
     * 
     * @return
     *     possible object is
     *     {@link VitalSignObservation }
     *     
     */
    public VitalSignObservation getVitalSignObservation() {
        return vitalSignObservation;
    }

    /**
     * Sets the value of the vitalSignObservation property.
     * 
     * @param value
     *     allowed object is
     *     {@link VitalSignObservation }
     *     
     */
    public void setVitalSignObservation(VitalSignObservation value) {
        this.vitalSignObservation = value;
    }

    /**
     * Gets the value of the errorEnterer property.
     * 
     * @return
     *     possible object is
     *     {@link PractitionerParticipationLite }
     *     
     */
    public PractitionerParticipationLite getErrorEnterer() {
        return errorEnterer;
    }

    /**
     * Sets the value of the errorEnterer property.
     * 
     * @param value
     *     allowed object is
     *     {@link PractitionerParticipationLite }
     *     
     */
    public void setErrorEnterer(PractitionerParticipationLite value) {
        this.errorEnterer = value;
    }

    /**
     * Gets the value of the errorReason property.
     * 
     * <p>
     * This accessor method returns a reference to the live list,
     * not a snapshot. Therefore any modification you make to the
     * returned list will be present inside the JAXB object.
     * This is why there is not a <CODE>set</CODE> method for the errorReason property.
     * 
     * <p>
     * For example, to add a new item, do as follows:
     * <pre>
     *    getErrorReason().add(newItem);
     * </pre>
     * 
     * 
     * <p>
     * Objects of the following type(s) are allowed in the list
     * {@link ErrorReason }
     * 
     * 
     */
    public List<ErrorReason> getErrorReason() {
        if (errorReason == null) {
            errorReason = new ArrayList<ErrorReason>();
        }
        return this.errorReason;
    }
    
    public void setErrorReason(List<ErrorReason> errorReason){
    	this.errorReason = errorReason;
    }

    /**
     * Gets the value of the recordSource property.
     * 
     * @return
     *     possible object is
     *     {@link HL72FacilityIdentifier }
     *     
     */
    public HL72FacilityIdentifier getRecordSource() {
        return recordSource;
    }

    /**
     * Sets the value of the recordSource property.
     * 
     * @param value
     *     allowed object is
     *     {@link HL72FacilityIdentifier }
     *     
     */
    public void setRecordSource(HL72FacilityIdentifier value) {
        this.recordSource = value;
    }

    /**
     * Gets the value of the recordVersion property.
     * 
     */
    public int getRecordVersion() {
        return recordVersion;
    }

    /**
     * Sets the value of the recordVersion property.
     * 
     */
    public void setRecordVersion(Integer value) {
        this.recordVersion = value;
    }

    /**
     * Gets the value of the recordUpdateTime property.
     * 
     * @return
     *     possible object is
     *     {@link PointInTime }
     *     
     */
    public PointInTime getRecordUpdateTime() {
        return recordUpdateTime;
    }

    /**
     * Sets the value of the recordUpdateTime property.
     * 
     * @param value
     *     allowed object is
     *     {@link PointInTime }
     *     
     */
    public void setRecordUpdateTime(PointInTime value) {
        this.recordUpdateTime = value;
    }

	public void setRequestId(String requestId) {
		this.requestId = requestId;
		
	}
	
	public String getRequestId() {
		return this.requestId;
	}
	
	public void setId(Long id){
		this.id = id;
	}
	
	public Long getId(){
		return this.id;
	}
	
}
