package au.com.vaadinutils.jasper.scheduler; import java.util.Collection; import java.util.Date; import java.util.LinkedList; import java.util.List; import javax.mail.internet.InternetAddress; import com.vaadin.addon.jpacontainer.JPAContainer; import com.vaadin.data.Container.Filter; import com.vaadin.data.util.filter.Compare; import com.vaadin.ui.Notification; import com.vaadin.ui.Notification.Type; import com.vaadin.ui.UI; import com.vaadin.ui.Window; import au.com.vaadinutils.help.HelpSplitPanel; import au.com.vaadinutils.jasper.parameter.ReportParameter; import au.com.vaadinutils.jasper.scheduler.entities.DateParameterOffsetType; import au.com.vaadinutils.jasper.scheduler.entities.ReportEmailParameterEntity; import au.com.vaadinutils.jasper.scheduler.entities.ReportEmailScheduleEntity; import au.com.vaadinutils.jasper.scheduler.entities.ReportEmailScheduleEntity_; import au.com.vaadinutils.jasper.scheduler.entities.ReportEmailScheduledDateParameter; import au.com.vaadinutils.jasper.scheduler.entities.ReportEmailSender; import au.com.vaadinutils.jasper.scheduler.entities.ScheduleMode; import au.com.vaadinutils.jasper.ui.JasperReportProperties; public class JasperReportSchedulerWindow extends Window { private static final long serialVersionUID = 1L; public JasperReportSchedulerWindow(final JasperReportProperties reportProperties, final Collection<ReportParameter<?>> params) { try { new InternetAddress(reportProperties.getUserEmailAddress()); } catch (Exception e) { Notification.show("Your email address (" + reportProperties.getUserEmailAddress() + ") is invalid, go to accounts and fix your email address.", Type.ERROR_MESSAGE); return; } this.setWidth("90%"); this.setHeight("98%"); HelpSplitPanel wrapper = new HelpSplitPanel(new JasperReportScheduleLayout(new ScheduleCreater() { @Override public ReportEmailScheduleEntity create() { ReportEmailScheduleEntity schedule = new ReportEmailScheduleEntity(); schedule.setTitle(reportProperties.getReportTitle()); schedule.setReportFilename(reportProperties.getReportFileName()); schedule.setMessage(reportProperties.getReportTitle() + " report is attached"); schedule.setSubject(reportProperties.getReportTitle()); schedule.setReportClass(reportProperties.getReportClass()); schedule.setScheduleMode(ScheduleMode.ONE_TIME); schedule.setOneTimeRunTime(new Date()); schedule.setEnabled(false); schedule.setReportTemplateIdentifier(reportProperties.getReportIdentifier()); List<ReportEmailParameterEntity> rparams = new LinkedList<ReportEmailParameterEntity>(); List<ReportEmailScheduledDateParameter> dparams = new LinkedList<ReportEmailScheduledDateParameter>(); for (ReportParameter<?> param : params) { if (param.isDateField()) { // add date fields ReportEmailScheduledDateParameter rparam = new ReportEmailScheduledDateParameter(); String[] names = param.getParameterNames().toArray(new String[] {}); rparam.setStartName(names[0]); rparam.setStartDate(param.getStartDate()); rparam.setEndName(names[1]); rparam.setEndDate(param.getEndDate()); rparam.setType(param.getDateParameterType()); rparam.setOffsetType(DateParameterOffsetType.TODAY); rparam.setLabel(param.getLabel(names[0])); dparams.add(rparam); } } schedule.setParameters(rparams); schedule.setDateParameters(dparams); ReportEmailSender reportEmailSender = new ReportEmailSender(); reportEmailSender.setUserName(reportProperties.getUsername()); try { new InternetAddress(reportProperties.getUserEmailAddress()); } catch (Exception e) { Notification.show("Your email address (" + reportProperties.getUserEmailAddress() + ") is invalid, go to accounts and fix your email address.", Type.ERROR_MESSAGE); return null; } reportEmailSender.setEmailAddress(reportProperties.getUserEmailAddress()); schedule.setSender(reportEmailSender); return schedule; } @Override public void addContainerFilter(JPAContainer<ReportEmailScheduleEntity> container) { Filter filter = new Compare.Equal(ReportEmailScheduleEntity_.reportIdentifier.getName(), reportProperties.getReportIdentifier().toString()); container.addContainerFilter(filter); } })); this.setContent(wrapper); setModal(true); // center(); UI.getCurrent().addWindow(this); } }