//
// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.3.0 
// See <a href="https://javaee.github.io/jaxb-v2/">https://javaee.github.io/jaxb-v2/</a> 
// Any modifications to this file will be lost upon recompilation of the source schema. 
// Generated on: 2021.02.08 at 03:34:00 PM UTC 
//


package de.ivu.wahl.wus.oasis.eml;

import java.math.BigInteger;
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.XmlAnyElement;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlSchemaType;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.adapters.CollapsedStringAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import javax.xml.datatype.XMLGregorianCalendar;


/**
 * <p>Java class for CandidateStructure complex type.
 * 
 * <p>The following schema fragment specifies the expected content contained within this class.
 * 
 * <pre>
 * &lt;complexType name="CandidateStructure"&gt;
 *   &lt;complexContent&gt;
 *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
 *       &lt;sequence&gt;
 *         &lt;choice minOccurs="0"&gt;
 *           &lt;sequence&gt;
 *             &lt;element ref="{urn:oasis:names:tc:evs:schema:eml}CandidateIdentifier"/&gt;
 *             &lt;element name="CandidateFullName" type="{urn:oasis:names:tc:evs:schema:eml}PersonNameStructure" minOccurs="0"/&gt;
 *             &lt;element name="DateOfBirth" type="{http://www.w3.org/2001/XMLSchema}date" minOccurs="0"/&gt;
 *             &lt;element name="Age" type="{http://www.w3.org/2001/XMLSchema}positiveInteger" minOccurs="0"/&gt;
 *             &lt;element ref="{urn:oasis:names:tc:evs:schema:eml}Gender" minOccurs="0"/&gt;
 *             &lt;element name="QualifyingAddress" type="{urn:oasis:names:tc:evs:schema:eml}QualifyingAddressStructure" minOccurs="0"/&gt;
 *             &lt;element name="Contact" type="{urn:oasis:names:tc:evs:schema:eml}ContactDetailsStructure" minOccurs="0"/&gt;
 *             &lt;choice minOccurs="0"&gt;
 *               &lt;element ref="{urn:oasis:names:tc:evs:schema:eml}Affiliation"/&gt;
 *               &lt;element ref="{urn:oasis:names:tc:evs:schema:eml}Logo" maxOccurs="unbounded"/&gt;
 *             &lt;/choice&gt;
 *             &lt;element name="Profession" type="{http://www.w3.org/2001/XMLSchema}token" minOccurs="0"/&gt;
 *             &lt;element ref="{urn:oasis:names:tc:evs:schema:eml}Agent" maxOccurs="unbounded" minOccurs="0"/&gt;
 *             &lt;element name="Photo" type="{urn:oasis:names:tc:evs:schema:eml}BinaryItemStructure" minOccurs="0"/&gt;
 *             &lt;element ref="{urn:oasis:names:tc:evs:schema:eml}Profile" minOccurs="0"/&gt;
 *             &lt;element ref="{urn:oasis:names:tc:evs:schema:eml}ElectionStatement" minOccurs="0"/&gt;
 *             &lt;any namespace='##other' maxOccurs="unbounded" minOccurs="0"/&gt;
 *           &lt;/sequence&gt;
 *           &lt;element ref="{urn:oasis:names:tc:evs:schema:eml}ProposalItem"/&gt;
 *         &lt;/choice&gt;
 *       &lt;/sequence&gt;
 *       &lt;attribute name="DisplayOrder" type="{http://www.w3.org/2001/XMLSchema}positiveInteger" /&gt;
 *       &lt;attribute name="Independent" type="{urn:oasis:names:tc:evs:schema:eml}YesNoType" /&gt;
 *     &lt;/restriction&gt;
 *   &lt;/complexContent&gt;
 * &lt;/complexType&gt;
 * </pre>
 * 
 * 
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "CandidateStructure", propOrder = {
    "candidateIdentifier",
    "candidateFullName",
    "dateOfBirth",
    "age",
    "gender",
    "qualifyingAddress",
    "contact",
    "affiliation",
    "logo",
    "profession",
    "agent",
    "photo",
    "profile",
    "electionStatement",
    "any",
    "proposalItem"
})
public class CandidateStructure {

    @XmlElement(name = "CandidateIdentifier")
    protected CandidateIdentifierStructure candidateIdentifier;
    @XmlElement(name = "CandidateFullName")
    protected PersonNameStructure candidateFullName;
    @XmlElement(name = "DateOfBirth")
    @XmlSchemaType(name = "date")
    protected XMLGregorianCalendar dateOfBirth;
    @XmlElement(name = "Age")
    @XmlSchemaType(name = "positiveInteger")
    protected BigInteger age;
    @XmlElement(name = "Gender")
    @XmlSchemaType(name = "token")
    protected GenderType gender;
    @XmlElement(name = "QualifyingAddress")
    protected QualifyingAddressStructure qualifyingAddress;
    @XmlElement(name = "Contact")
    protected ContactDetailsStructure contact;
    @XmlElement(name = "Affiliation")
    protected AffiliationStructure affiliation;
    @XmlElement(name = "Logo")
    protected List<LogoStructure> logo;
    @XmlElement(name = "Profession")
    @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
    @XmlSchemaType(name = "token")
    protected String profession;
    @XmlElement(name = "Agent")
    protected List<AgentStructure> agent;
    @XmlElement(name = "Photo")
    protected BinaryItemStructure photo;
    @XmlElement(name = "Profile")
    protected MessagesStructure profile;
    @XmlElement(name = "ElectionStatement")
    protected MessagesStructure electionStatement;
    @XmlAnyElement(lax = true)
    protected List<Object> any;
    @XmlElement(name = "ProposalItem")
    protected ProposalItemStructure proposalItem;
    @XmlAttribute(name = "DisplayOrder")
    @XmlSchemaType(name = "positiveInteger")
    protected BigInteger displayOrder;
    @XmlAttribute(name = "Independent")
    protected YesNoType independent;

    /**
     * Gets the value of the candidateIdentifier property.
     * 
     * @return
     *     possible object is
     *     {@link CandidateIdentifierStructure }
     *     
     */
    public CandidateIdentifierStructure getCandidateIdentifier() {
        return candidateIdentifier;
    }

    /**
     * Sets the value of the candidateIdentifier property.
     * 
     * @param value
     *     allowed object is
     *     {@link CandidateIdentifierStructure }
     *     
     */
    public void setCandidateIdentifier(CandidateIdentifierStructure value) {
        this.candidateIdentifier = value;
    }

    /**
     * Gets the value of the candidateFullName property.
     * 
     * @return
     *     possible object is
     *     {@link PersonNameStructure }
     *     
     */
    public PersonNameStructure getCandidateFullName() {
        return candidateFullName;
    }

    /**
     * Sets the value of the candidateFullName property.
     * 
     * @param value
     *     allowed object is
     *     {@link PersonNameStructure }
     *     
     */
    public void setCandidateFullName(PersonNameStructure value) {
        this.candidateFullName = value;
    }

    /**
     * Gets the value of the dateOfBirth property.
     * 
     * @return
     *     possible object is
     *     {@link XMLGregorianCalendar }
     *     
     */
    public XMLGregorianCalendar getDateOfBirth() {
        return dateOfBirth;
    }

    /**
     * Sets the value of the dateOfBirth property.
     * 
     * @param value
     *     allowed object is
     *     {@link XMLGregorianCalendar }
     *     
     */
    public void setDateOfBirth(XMLGregorianCalendar value) {
        this.dateOfBirth = value;
    }

    /**
     * Gets the value of the age property.
     * 
     * @return
     *     possible object is
     *     {@link BigInteger }
     *     
     */
    public BigInteger getAge() {
        return age;
    }

    /**
     * Sets the value of the age property.
     * 
     * @param value
     *     allowed object is
     *     {@link BigInteger }
     *     
     */
    public void setAge(BigInteger value) {
        this.age = value;
    }

    /**
     * Gets the value of the gender property.
     * 
     * @return
     *     possible object is
     *     {@link GenderType }
     *     
     */
    public GenderType getGender() {
        return gender;
    }

    /**
     * Sets the value of the gender property.
     * 
     * @param value
     *     allowed object is
     *     {@link GenderType }
     *     
     */
    public void setGender(GenderType value) {
        this.gender = value;
    }

    /**
     * Gets the value of the qualifyingAddress property.
     * 
     * @return
     *     possible object is
     *     {@link QualifyingAddressStructure }
     *     
     */
    public QualifyingAddressStructure getQualifyingAddress() {
        return qualifyingAddress;
    }

    /**
     * Sets the value of the qualifyingAddress property.
     * 
     * @param value
     *     allowed object is
     *     {@link QualifyingAddressStructure }
     *     
     */
    public void setQualifyingAddress(QualifyingAddressStructure value) {
        this.qualifyingAddress = value;
    }

    /**
     * Gets the value of the contact property.
     * 
     * @return
     *     possible object is
     *     {@link ContactDetailsStructure }
     *     
     */
    public ContactDetailsStructure getContact() {
        return contact;
    }

    /**
     * Sets the value of the contact property.
     * 
     * @param value
     *     allowed object is
     *     {@link ContactDetailsStructure }
     *     
     */
    public void setContact(ContactDetailsStructure value) {
        this.contact = value;
    }

    /**
     * Gets the value of the affiliation property.
     * 
     * @return
     *     possible object is
     *     {@link AffiliationStructure }
     *     
     */
    public AffiliationStructure getAffiliation() {
        return affiliation;
    }

    /**
     * Sets the value of the affiliation property.
     * 
     * @param value
     *     allowed object is
     *     {@link AffiliationStructure }
     *     
     */
    public void setAffiliation(AffiliationStructure value) {
        this.affiliation = value;
    }

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

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

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

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

    /**
     * Gets the value of the photo property.
     * 
     * @return
     *     possible object is
     *     {@link BinaryItemStructure }
     *     
     */
    public BinaryItemStructure getPhoto() {
        return photo;
    }

    /**
     * Sets the value of the photo property.
     * 
     * @param value
     *     allowed object is
     *     {@link BinaryItemStructure }
     *     
     */
    public void setPhoto(BinaryItemStructure value) {
        this.photo = value;
    }

    /**
     * Gets the value of the profile property.
     * 
     * @return
     *     possible object is
     *     {@link MessagesStructure }
     *     
     */
    public MessagesStructure getProfile() {
        return profile;
    }

    /**
     * Sets the value of the profile property.
     * 
     * @param value
     *     allowed object is
     *     {@link MessagesStructure }
     *     
     */
    public void setProfile(MessagesStructure value) {
        this.profile = value;
    }

    /**
     * Gets the value of the electionStatement property.
     * 
     * @return
     *     possible object is
     *     {@link MessagesStructure }
     *     
     */
    public MessagesStructure getElectionStatement() {
        return electionStatement;
    }

    /**
     * Sets the value of the electionStatement property.
     * 
     * @param value
     *     allowed object is
     *     {@link MessagesStructure }
     *     
     */
    public void setElectionStatement(MessagesStructure value) {
        this.electionStatement = value;
    }

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

    /**
     * Gets the value of the proposalItem property.
     * 
     * @return
     *     possible object is
     *     {@link ProposalItemStructure }
     *     
     */
    public ProposalItemStructure getProposalItem() {
        return proposalItem;
    }

    /**
     * Sets the value of the proposalItem property.
     * 
     * @param value
     *     allowed object is
     *     {@link ProposalItemStructure }
     *     
     */
    public void setProposalItem(ProposalItemStructure value) {
        this.proposalItem = value;
    }

    /**
     * Gets the value of the displayOrder property.
     * 
     * @return
     *     possible object is
     *     {@link BigInteger }
     *     
     */
    public BigInteger getDisplayOrder() {
        return displayOrder;
    }

    /**
     * Sets the value of the displayOrder property.
     * 
     * @param value
     *     allowed object is
     *     {@link BigInteger }
     *     
     */
    public void setDisplayOrder(BigInteger value) {
        this.displayOrder = value;
    }

    /**
     * Gets the value of the independent property.
     * 
     * @return
     *     possible object is
     *     {@link YesNoType }
     *     
     */
    public YesNoType getIndependent() {
        return independent;
    }

    /**
     * Sets the value of the independent property.
     * 
     * @param value
     *     allowed object is
     *     {@link YesNoType }
     *     
     */
    public void setIndependent(YesNoType value) {
        this.independent = value;
    }

    public void setLogo(List<LogoStructure> value) {
        this.logo = null;
        if (value!= null) {
            List<LogoStructure> draftl = this.getLogo();
            draftl.addAll(value);
        }
    }

    public void setAgent(List<AgentStructure> value) {
        this.agent = null;
        if (value!= null) {
            List<AgentStructure> draftl = this.getAgent();
            draftl.addAll(value);
        }
    }

    public void setAny(List<Object> value) {
        this.any = null;
        if (value!= null) {
            List<Object> draftl = this.getAny();
            draftl.addAll(value);
        }
    }

}
