package com.lmco.energyc2.seeload.participantsvc.ejb;

import org.w3._2001.xmlschema.Adapter1;

import javax.persistence.*;
import javax.xml.bind.annotation.*;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

@Entity
@Table(name = "USERS")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "group",
    "loadControlDevice"
})
@XmlRootElement(name = "Participant")
public class Participant
    implements Serializable
{
  @Id
  @Column(name = "USERID", nullable = false)
  @XmlAttribute(required = true)
  private String userid;

  @Column(name = "PASSWORD", nullable = false)
  @XmlAttribute
  private String password;

  @Column(name = "ACCOUNT_NUMBER", nullable = false)
  @XmlAttribute(required = true)
  private String accountNumber;

  @Column(name = "FIRST_NAME", nullable = false)
  @XmlAttribute(required = true)
  private String firstName;

  @Column(name = "LAST_NAME", nullable = false)
  @XmlAttribute(required = true)
  private String lastName;

  @XmlAttribute
  private String comments;

  @XmlAttribute
  private String email;

  @Column(name = "EMAIL_ENABLED")
  @XmlAttribute
  private Boolean emailEnabled;

  @Column(name = "VOICE_PHONE_NUMBER")
  @XmlAttribute
  private String voicePhoneNumber;

  @Column(name = "VOICE_ENABLED")
  @XmlAttribute
  private Boolean voiceEnabled;

  @Column(name = "PAGER_PHONE_NUMBER")
  @XmlAttribute
  private String pagerPhoneNumber;

  @Column(name = "PAGER_ENABLED")
  @XmlAttribute
  private Boolean pagerEnabled;

  @Column(name = "FAX_PHONE_NUMBER")
  @XmlAttribute
  private String faxPhoneNumber;

  @Column(name = "FAX_ENABLED")
  @XmlAttribute
  private Boolean faxEnabled;

  @Column(name = "SMS_PHONE_NUMBER")
  @XmlAttribute
  private String smsPhoneNumber;

  @Column(name = "SMS_CARRIER")
  @XmlAttribute
  private String smsCarrier;

  @Column(name = "SMS_ENABLED")
  @XmlAttribute
  private Boolean smsEnabled;

  @OneToMany(mappedBy = "participant", cascade = CascadeType.ALL,
             fetch = FetchType.EAGER)
  @XmlElement(name = "Group",
              namespace = "urn:com:lmco:energyc2:seeload:participantsvc:ejb")
  private List<Group> group;

  @OneToMany(mappedBy = "participant", cascade = CascadeType.ALL,
             fetch = FetchType.EAGER)
  @XmlElement(name = "LoadControlDevice",
              namespace = "urn:com:lmco:energyc2:seeload:participantsvc:ejb")
  private List<LoadControlDevice> loadControlDevice;

  @Temporal(TemporalType.TIMESTAMP)
  @Column(name = "LAST_MODIFIED", nullable = false)
  @XmlAttribute(required = true)
  @XmlJavaTypeAdapter(Adapter1.class)
  @XmlSchemaType(name = "dateTime")
  private Calendar lastModified;

  public Participant()
  {
  }

  public String getUserid()
  {
    return userid;
  }

  public void setUserid(String userid)
  {
    this.userid = userid;
  }

  public boolean isSetUserid()
  {
    return userid != null;
  }

  public String getPassword()
  {
    return password;
  }

  public void setPassword(String password)
  {
    this.password = password;
  }

  public boolean isSetPassword()
  {
    return password != null;
  }

  public List<Group> getGroup()
  {
    if (group == null)
    {
      group = new ArrayList<Group>();
    }
    return group;
  }

  public boolean isSetGroup()
  {
    return group != null && !group.isEmpty();
  }

  public void unsetGroup()
  {
    this.group = null;
  }

  public String getAccountNumber()
  {
    return accountNumber;
  }

  public void setAccountNumber(String value)
  {
    this.accountNumber = value;
  }

  public boolean isSetAccountNumber()
  {
    return accountNumber != null;
  }

  public String getFirstName()
  {
    return firstName;
  }

  public void setFirstName(String value)
  {
    this.firstName = value;
  }

  public boolean isSetFirstName()
  {
    return firstName != null;
  }

  public String getLastName()
  {
    return lastName;
  }

  public void setLastName(String value)
  {
    this.lastName = value;
  }

  public boolean isSetLastName()
  {
    return lastName != null;
  }

  public String getComments()
  {
    return comments;
  }

  public void setComments(String comments)
  {
    this.comments = comments;
  }

  public boolean isSetComments()
  {
    return comments != null;
  }

  public String getEmail()
  {
    return email;
  }

  public void setEmail(String value)
  {
    this.email = value;
  }

  public boolean isSetEmail()
  {
    return email != null;
  }

  public boolean isEmailEnabled()
  {
    return emailEnabled;
  }

  public void setEmailEnabled(boolean emailEnabled)
  {
    this.emailEnabled = emailEnabled;
  }

  public boolean isSetEmailEnabled()
  {
    return emailEnabled != null;
  }

  public String getVoicePhoneNumber()
  {
    return voicePhoneNumber;
  }

  public void setVoicePhoneNumber(String value)
  {
    this.voicePhoneNumber = value;
  }

  public boolean isSetVoicePhoneNumber()
  {
    return voicePhoneNumber != null;
  }

  public boolean isVoiceEnabled()
  {
    return voiceEnabled;
  }

  public void setVoiceEnabled(boolean voiceEnabled)
  {
    this.voiceEnabled = voiceEnabled;
  }

  public boolean isSetVoiceEnabled()
  {
    return voiceEnabled != null;
  }

  public String getPagerPhoneNumber()
  {
    return pagerPhoneNumber;
  }

  public void setPagerPhoneNumber(String value)
  {
    this.pagerPhoneNumber = value;
  }

  public boolean isSetPagerPhoneNumber()
  {
    return pagerPhoneNumber != null;
  }

  public boolean isPagerEnabled()
  {
    return pagerEnabled;
  }

  public void setPagerEnabled(boolean pagerEnabled)
  {
    this.pagerEnabled = pagerEnabled;
  }

  public boolean isSetPagerEnabled()
  {
    return pagerEnabled != null;
  }

  public String getFaxPhoneNumber()
  {
    return faxPhoneNumber;
  }

  public void setFaxPhoneNumber(String value)
  {
    this.faxPhoneNumber = value;
  }

  public boolean isSetFaxPhoneNumber()
  {
    return faxPhoneNumber != null;
  }

  public boolean isFaxEnabled()
  {
    return faxEnabled;
  }

  public void setFaxEnabled(boolean faxEnabled)
  {
    this.faxEnabled = faxEnabled;
  }

  public boolean isSetFaxEnabled()
  {
    return faxEnabled != null;
  }

  public String getSmsPhoneNumber()
  {
    return smsPhoneNumber;
  }

  public void setSmsPhoneNumber(String value)
  {
    this.smsPhoneNumber = value;
  }

  public boolean isSetSmsPhoneNumber()
  {
    return smsPhoneNumber != null;
  }

  public String getSmsCarrier()
  {
    return smsCarrier;
  }

  public void setSmsCarrier(String value)
  {
    this.smsCarrier = value;
  }

  public boolean isSetSmsCarrier()
  {
    return smsCarrier != null;
  }

  public boolean isSmsEnabled()
  {
    return smsEnabled;
  }

  public void setSmsEnabled(boolean smsEnabled)
  {
    this.smsEnabled = smsEnabled;
  }

  public boolean isSetSmsEnabled()
  {
    return smsEnabled != null;
  }

  public List<LoadControlDevice> getLoadControlDevice()
  {
    if (loadControlDevice == null)
    {
      loadControlDevice = new ArrayList<LoadControlDevice>();
    }
    return this.loadControlDevice;
  }

  public boolean isSetLoadControlDevice()
  {
    return loadControlDevice != null && !loadControlDevice.isEmpty();
  }

  public void unsetLoadControlDevice()
  {
    this.loadControlDevice = null;
  }

  public Calendar getLastModified()
  {
    return lastModified;
  }

  public void setLastModified(Calendar lastModified)
  {
    this.lastModified = lastModified;
  }

  public boolean isSetLastModified()
  {
    return lastModified != null;
  }
}