package au.com.vaadinutils.wizards.bulkJasperEmail;
import java.io.File;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import org.apache.commons.mail.EmailException;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import com.vaadin.ui.Notification.Type;
import com.vaadin.ui.UI;
import au.com.vaadinutils.dao.CallableUI;
import au.com.vaadinutils.dao.EntityManagerThread;
import au.com.vaadinutils.jasper.AttachmentType;
import au.com.vaadinutils.jasper.JasperEmailBuilder;
import au.com.vaadinutils.jasper.JasperManager;
import au.com.vaadinutils.jasper.JasperManager.OutputFormat;
import au.com.vaadinutils.jasper.RenderedReport;
import au.com.vaadinutils.jasper.filter.ReportFilterUIBuilder;
import au.com.vaadinutils.jasper.parameter.ReportParameter;
import au.com.vaadinutils.jasper.ui.CleanupCallback;
import au.com.vaadinutils.jasper.ui.JasperReportProperties;
import au.com.vaadinutils.listener.CancelListener;
import au.com.vaadinutils.util.ProgressBarTask;
import au.com.vaadinutils.util.ProgressTaskListener;
import au.com.vaadinutils.util.VUNotification;
public class SendEmailTask extends ProgressBarTask<JasperTransmission> implements CancelListener, JasperReportProperties
{
transient Logger logger = LogManager.getLogger(SendEmailTask.class);
private JasperProxy proxy;
private List<JasperTransmission> transmissions;
private boolean cancel = false;
public SendEmailTask(ProgressTaskListener<JasperTransmission> listener, JasperProxy proxy,
ArrayList<JasperTransmission> transmissions)
{
super(listener);
this.proxy = proxy;
this.transmissions = transmissions;
}
@Override
public void runUI(UI ui)
{
try
{
sendMessages(transmissions, proxy);
}
catch (Exception e)
{
logger.error(e, e);
super.taskException(e);
}
}
private void sendMessages(final List<JasperTransmission> targets, final JasperProxy proxy)
{
new EntityManagerThread<Void>(new CallableUI<Void>(UI.getCurrent())
{
@Override
protected Void call(UI ui) throws Exception
{
int sent = 0;
try
{
for (JasperTransmission transmission : targets)
{
if (cancel == true)
break;
try
{
JasperManager manager = proxy.getManager();
RenderedReport renderedHtml = manager.export(OutputFormat.HTML, null);
RenderedReport renderedPDF = manager.export(OutputFormat.PDF, null);
JasperEmailBuilder builder = new JasperEmailBuilder(proxy.getEmailSettings());
builder.setFrom(proxy.getSenderEmailAddress()).setSubject(proxy.getSubject())
// .setHtmlBody("<html><body></body></html>")
.setHtmlBody(renderedHtml).addTo(transmission.getRecipientEmailAddress())
.addAttachement(renderedPDF.getBodyAsDataSource("report.pdf", AttachmentType.PDF));
builder.send(false);
}
catch (EmailException e)
{
logger.error(e, e);
transmission.setException(e);
SendEmailTask.super.taskItemError(transmission);
VUNotification.show(e, Type.ERROR_MESSAGE);
}
}
}
catch (Exception e)
{
VUNotification.show(e, Type.ERROR_MESSAGE);
throw e;
}
finally
{
SendEmailTask.super.taskComplete(sent);
}
return null;
}
});
}
@Override
public void cancel()
{
this.cancel = true;
}
@Override
public Map<String, Object> getCustomReportParameterMap()
{
return null;
}
@Override
public ReportFilterUIBuilder getFilterBuilder()
{
return null;
}
@Override
public List<ReportParameter<?>> prepareData(Collection<ReportParameter<?>> params, String reportFilename,
CleanupCallback cleanupCallback) throws Exception
{
return null;
}
@Override
public void prepareForOutputFormat(OutputFormat outputFormat)
{
}
@Override
public void closeDBConnection()
{
}
@Override
public void initDBConnection()
{
}
@Override
public OutputFormat getDefaultFormat()
{
return null;
}
@Override
public CleanupCallback getCleanupCallback()
{
return null;
}
@Override
public String generateDynamicHeaderImage(int pageWidth, int height, String reportTitle)
{
return null;
}
@Override
public boolean isDevMode()
{
return false;
}
@Override
public String getReportFileName()
{
return null;
}
@Override
public String getReportTitle()
{
return null;
}
@Override
public String getHeaderFooterTemplateName()
{
return null;
}
@Override
public String getUsername()
{
return null;
}
@Override
public Connection getConnection()
{
return null;
}
@Override
public File getReportFolder()
{
return null;
}
@Override
public Class<? extends JasperReportProperties> getReportClass()
{
return null;
}
@Override
public String getUserEmailAddress()
{
return null;
}
@Override
public Enum<?> getReportIdentifier()
{
return null;
}
@Override
public String getDynamicJrxmlFileName()
{
return null;
}
}