package au.com.vaadinutils.jasper.scheduler.entities;
import java.io.Serializable;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import javax.mail.Address;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.validation.constraints.NotNull;
import com.google.common.base.Preconditions;
import au.com.vaadinutils.crud.CrudEntity;
import au.com.vaadinutils.jasper.JasperManager.OutputFormat;
import au.com.vaadinutils.jasper.scheduler.ReportEmailParameter;
import au.com.vaadinutils.jasper.scheduler.ReportEmailSchedule;
import au.com.vaadinutils.jasper.scheduler.ScheduledDateParameter;
import au.com.vaadinutils.jasper.ui.JasperReportProperties;
@Entity
@Table(name = "tblreportemailschedule")
public class ReportEmailScheduleEntity implements Serializable, CrudEntity, ReportEmailSchedule
{
/*
* (non-Javadoc)
*
* @see java.lang.Object#toString()
*/
@Override
public String toString()
{
return "ReportEmailScheduleEntity [reportTitle=" + reportTitle + ", lastRuntime=" + lastRuntime + ", sender="
+ sender + ", iID=" + iID + ", enabled=" + enabled + ", scheduleMode=" + scheduleMode
+ ", oneTimeRunDateTime=" + oneTimeRunDateTime + ", timeOfDayToRun=" + timeOfDayToRun
+ ", scheduledDayOfMonth=" + scheduledDayOfMonth + ", scheduledDaysOfWeek=" + scheduledDaysOfWeek
+ ", message=" + message + ", subject=" + subject + ", reportLog=" + reportLog + ", reportFileName="
+ reportFileName + ", JasperReportPropertiesClassName=" + JasperReportPropertiesClassName + "]";
}
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long iID;
private String JasperReportPropertiesClassName;
@OneToMany(cascade = { CascadeType.REMOVE, CascadeType.PERSIST })
private List<ReportEmailScheduledDateParameter> dateParameters = new LinkedList<>();
boolean enabled = true;
@OneToOne(cascade = { CascadeType.PERSIST })
private ReportEmailSender sender;
@Temporal(TemporalType.TIMESTAMP)
private Date lastRuntime;
@Enumerated(EnumType.STRING)
private ScheduleMode scheduleMode;
@Temporal(TemporalType.TIMESTAMP)
private Date oneTimeRunDateTime;
@Temporal(TemporalType.TIMESTAMP)
private Date timeOfDayToRun;
private Integer scheduledDayOfMonth;
private String scheduledDaysOfWeek = "";
@OneToMany(cascade = { CascadeType.REMOVE, CascadeType.PERSIST })
private List<ReportEmailParameterEntity> reportParameters;
@NotNull
@Enumerated(EnumType.STRING)
private OutputFormat outputFormat;
private String message;
private String subject;
/**
* error messages from the last time this report ran
*/
private String reportLog;
@ManyToMany(cascade = { CascadeType.PERSIST })
private List<ReportEmailRecipient> recipients = new LinkedList<ReportEmailRecipient>();
private String reportFileName;
private String reportTitle;
@SuppressWarnings("unused")
private String reportIdentifier;
@Temporal(TemporalType.TIMESTAMP)
private Date nextScheduledTime;
@Override
public Long getId()
{
return iID;
}
@Override
public void setId(Long id)
{
iID = id;
}
@Override
public String getName()
{
return reportTitle;
}
@Override
public String getReportTitle()
{
return reportTitle;
}
@Override
public String getReportFileName()
{
return reportFileName;
}
@Override
public List<ReportEmailRecipient> getRecipients()
{
return recipients;
}
@Override
public String subject()
{
return subject;
}
@Override
public String message()
{
return message;
}
@Override
public Collection<ReportEmailParameter> getReportParameters()
{
List<ReportEmailParameter> tmp = new LinkedList<ReportEmailParameter>();
tmp.addAll(reportParameters);
return Collections.unmodifiableCollection(tmp);
}
@Override
public String getScheduledDaysOfWeek()
{
return scheduledDaysOfWeek;
}
@Override
public Integer getScheduledDayOfMonth()
{
return scheduledDayOfMonth;
}
@Override
public Date getTimeOfDayToRun()
{
return timeOfDayToRun;
}
@Override
public Date getOneTimeRunDateTime()
{
return oneTimeRunDateTime;
}
@Override
public ScheduleMode getScheduleMode()
{
return scheduleMode;
}
@Override
public Date getLastRuntime()
{
return lastRuntime;
}
@Override
public void setLastRuntime(Date date, String auditDetails)
{
lastRuntime = date;
reportLog = auditDetails;
}
public boolean hasSenderEmailAddress()
{
return sender != null;
}
@Override
public Address getSendersEmailAddress() throws AddressException
{
Preconditions.checkNotNull(sender, "You should call hasSenderEmailAddress first to check if there is a sender");
return new InternetAddress(sender.getEmail());
}
@Override
public List<ScheduledDateParameter> getDateParameters()
{
List<ScheduledDateParameter> tmp = new LinkedList<ScheduledDateParameter>();
tmp.addAll(dateParameters);
return tmp;
}
@SuppressWarnings("unchecked")
@Override
public Class<? extends JasperReportProperties> getJasperReportPropertiesClass() throws ClassNotFoundException
{
return (Class<? extends JasperReportProperties>) Class.forName(JasperReportPropertiesClassName);
}
public void setTitle(String reportTitle2)
{
reportTitle = reportTitle2;
}
public void setReportFilename(String reportFileName2)
{
reportFileName = reportFileName2;
}
public void setMessage(String message)
{
this.message = message;
}
public void setSender(ReportEmailSender reportEmailSender)
{
this.sender = reportEmailSender;
}
public void setSubject(String subject)
{
this.subject = subject;
}
public void setReportClass(Class<? extends JasperReportProperties> reportClass)
{
JasperReportPropertiesClassName = reportClass.getName();
}
public void setScheduleMode(ScheduleMode scheduleMode)
{
this.scheduleMode = scheduleMode;
}
public void setOneTimeRunTime(Date date)
{
this.oneTimeRunDateTime = date;
}
public void setParameters(List<ReportEmailParameterEntity> rparams)
{
reportParameters = rparams;
}
public void setDateParameters(List<ReportEmailScheduledDateParameter> dparams)
{
dateParameters = dparams;
}
@Override
public void setEnabled(boolean b)
{
enabled = b;
}
@Override
public boolean isEnabled()
{
return enabled;
}
@Override
public String getSendersUsername()
{
return sender.username;
}
public void setRecipients(List<ReportEmailRecipient> recips)
{
recipients = recips;
}
public ReportEmailSender getSender()
{
return sender;
}
public void addReportParameter(ReportEmailParameterEntity reportEmailParameterEntity)
{
reportParameters.add(reportEmailParameterEntity);
}
public void setReportTemplateIdentifier(Enum<?> reportIdentifier)
{
this.reportIdentifier = reportIdentifier.toString();
}
@Override
public Date getNextScheduledTime()
{
return nextScheduledTime;
}
@Override
public void setNextScheduledRunTime(Date nextRuntime)
{
nextScheduledTime = nextRuntime;
}
@Override
public OutputFormat getOutputFormat()
{
return outputFormat;
}
public void setOutputFormat(OutputFormat format)
{
outputFormat = format;
}
/**
* @return the reportLog
*/
public String getReportLog()
{
return reportLog;
}
}