//
// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
// 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: 2015.03.31 at 03:45:08 PM MDT 
//


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

import gov.va.med.cds.template.generated.basedatatypes.PhysicalQuantity;
import gov.va.med.cds.template.generated.basedatatypes.PointInTime;
import gov.va.med.cds.template.generated.common.PractitionerLite;

import java.util.ArrayList;
import java.util.List;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlSeeAlso;
import javax.xml.bind.annotation.XmlTransient;
import javax.xml.bind.annotation.XmlType;


/**
 * <p>Java class for MedicationDispense complex type.
 * 
 * <p>The following schema fragment specifies the expected content contained within this class.
 * 
 * <pre>
 * &lt;complexType name="MedicationDispense">
 *   &lt;complexContent>
 *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
 *       &lt;all>
 *         &lt;element name="comments" minOccurs="0">
 *           &lt;complexType>
 *             &lt;complexContent>
 *               &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
 *                 &lt;sequence>
 *                   &lt;element name="comment" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="unbounded" minOccurs="0"/>
 *                 &lt;/sequence>
 *               &lt;/restriction>
 *             &lt;/complexContent>
 *           &lt;/complexType>
 *         &lt;/element>
 *         &lt;element name="dispenseDate" type="{Basedatatypes}PointInTime" minOccurs="0"/>
 *         &lt;element name="fillDate" type="{Basedatatypes}PointInTime" minOccurs="0"/>
 *         &lt;element name="quantityDispensed" type="{Basedatatypes}PhysicalQuantity" minOccurs="0"/>
 *         &lt;element name="currentProvider" type="{Common}PractitionerLite" minOccurs="0"/>
 *         &lt;element name="currentProviderComments" minOccurs="0">
 *           &lt;complexType>
 *             &lt;complexContent>
 *               &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
 *                 &lt;sequence>
 *                   &lt;element name="currentProviderComment" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="unbounded" minOccurs="0"/>
 *                 &lt;/sequence>
 *               &lt;/restriction>
 *             &lt;/complexContent>
 *           &lt;/complexType>
 *         &lt;/element>
 *         &lt;element name="loginDate" type="{Basedatatypes}PointInTime" minOccurs="0"/>
 *       &lt;/all>
 *     &lt;/restriction>
 *   &lt;/complexContent>
 * &lt;/complexType>
 * </pre>
 * 
 * 
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "MedicationDispense1", propOrder = {
    "comments",
    "dispenseDate",
    "fillDate",
    "quantityDispensed",
    "currentProvider",
    "currentProviderComments",
    "loginDate"
})
@XmlSeeAlso({
    OutpatientMedicationDispense.class
})
public abstract class MedicationDispense1 {

	protected MedicationDispense1.Comments comments;
    protected PointInTime dispenseDate;
    protected PointInTime fillDate;
    protected PhysicalQuantity quantityDispensed;
    protected PractitionerLite currentProvider;
    protected MedicationDispense1.CurrentProviderComments currentProviderComments;
    protected PointInTime loginDate;

   
    public Comments getComments() {
        return this.comments;
    }
    public void setComments(Comments comments){
    	this.comments = comments;
    }
    
    /**
     * <p>Java class for anonymous complex type.
     * 
     * <p>The following schema fragment specifies the expected content contained within this class.
     * 
     * <pre>
     * &lt;complexType>
     *   &lt;complexContent>
     *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
     *       &lt;sequence>
     *         &lt;element name="comment" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="unbounded" minOccurs="0"/>
     *       &lt;/sequence>
     *     &lt;/restriction>
     *   &lt;/complexContent>
     * &lt;/complexType>
     * </pre>
     * 
     * 
     */
    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(name = "", propOrder = {
        "comment",
        "singleComment"
    })
    public static class Comments {
       	@XmlElement(required = false)
        protected List<String> comment;
       	protected String singleComment;

        /**
         * Gets the value of the comment 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 comment property.
         * 
         * <p>
         * For example, to add a new item, do as follows:
         * <pre>
         *    getComment().add(newItem);
         * </pre>
         * 
         * 
         * <p>
         * Objects of the following type(s) are allowed in the list
         * {@link String }
         * 
         * 
         */
        public List<String> getComment() {
            if (comment == null) {
                comment = new ArrayList<String>();
            }
            return this.comment;
        }
        public void setComment(List<String> comment) {
           
            this.comment = comment;
        }
        public void setSingleComment(String singleComment) {
            
            this.getComment().add(singleComment);
        }
        public String getSingleComment() {
            
            return this.singleComment;
        }
        

    }

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

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

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

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

    /**
     * Gets the value of the quantityDispensed property.
     * 
     * @return
     *     possible object is
     *     {@link PhysicalQuantity }
     *     
     */
    public PhysicalQuantity getQuantityDispensed() {
        return quantityDispensed;
    }

    /**
     * Sets the value of the quantityDispensed property.
     * 
     * @param value
     *     allowed object is
     *     {@link PhysicalQuantity }
     *     
     */
    public void setQuantityDispensed(PhysicalQuantity value) {
        this.quantityDispensed = value;
    }

    /**
     * Gets the value of the currentProvider property.
     * 
     * @return
     *     possible object is
     *     {@link PractitionerLite }
     *     
     */
    public PractitionerLite getCurrentProvider() {
        return currentProvider;
    }

    /**
     * Sets the value of the currentProvider property.
     * 
     * @param value
     *     allowed object is
     *     {@link PractitionerLite }
     *     
     */
    public void setCurrentProvider(PractitionerLite value) {
        this.currentProvider = value;
    }

   
    public CurrentProviderComments getCurrentProviderComments() {
        return this.currentProviderComments;
    }
    public void setCurrentProviderComments(CurrentProviderComments currentProviderComments){
    	this.currentProviderComments = currentProviderComments;
    }
    
    /**
     * <p>Java class for anonymous complex type.
     * 
     * <p>The following schema fragment specifies the expected content contained within this class.
     * 
     * <pre>
     * &lt;complexType>
     *   &lt;complexContent>
     *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
     *       &lt;sequence>
     *         &lt;element name="currentProviderComment" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="unbounded" minOccurs="0"/>
     *       &lt;/sequence>
     *     &lt;/restriction>
     *   &lt;/complexContent>
     * &lt;/complexType>
     * </pre>
     * 
     * 
     */
    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(name = "", propOrder = {
        "currentProviderComment"
    })
    public static class CurrentProviderComments {
       	@XmlElement(required = false)
        protected List<String> currentProviderComment;
       	@XmlTransient
       	protected String singleComment;

        /**
         * Gets the value of the currentProviderComment 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 currentProviderComment property.
         * 
         * <p>
         * For example, to add a new item, do as follows:
         * <pre>
         *    getCurrentProviderComment().add(newItem);
         * </pre>
         * 
         * 
         * <p>
         * Objects of the following type(s) are allowed in the list
         * {@link String }
         * 
         * 
         */
        public List<String> getCurrentProviderComment() {
            if (currentProviderComment == null) {
                currentProviderComment = new ArrayList<String>();
            }
            return this.currentProviderComment;
        }
        public void  setCurrentProviderComment(List<String> currentProviderCmt) { 
            currentProviderComment = currentProviderCmt;
        }
        public void  setSingleComment(String singleComment) { 
           this.getCurrentProviderComment().add(singleComment);
        }
        public String getSingleComment() {
            
            return this.singleComment;
        }

    }


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

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