Package no.ugland.utransprod.util.report

Source Code of no.ugland.utransprod.util.report.ReportViewer$MailAction

package no.ugland.utransprod.util.report;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.table.TableModel;

import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.data.JRTableModelDataSource;
import net.sf.jasperreports.view.save.JRPdfSaveContributor;
import no.ugland.utransprod.ProTransException;
import no.ugland.utransprod.gui.Closeable;
import no.ugland.utransprod.gui.IconEnum;
import no.ugland.utransprod.gui.JDialogAdapter;
import no.ugland.utransprod.gui.WindowInterface;
import no.ugland.utransprod.gui.buttons.CancelButton;
import no.ugland.utransprod.gui.model.ReportEnum;
import no.ugland.utransprod.util.ApplicationParamUtil;
import no.ugland.utransprod.util.JRViewerProTrans;
import no.ugland.utransprod.util.MailUtil;
import no.ugland.utransprod.util.Util;

import com.jgoodies.forms.builder.PanelBuilder;
import com.jgoodies.forms.factories.ButtonBarFactory;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;

/**
* Brukes til � generere rapporter.
*
* @author atle.brekka
*/
public class ReportViewer extends JDialog implements Closeable {
  private static final long serialVersionUID = 1L;

  private static final String UGLAND_LOGO_PARAMETER = "ugland_logo";

  private String currentHeading;

  private JPanel pnlMain;

  private JButton buttonCancel;

  private JButton buttonMail;

  // private boolean useMailButton = false;

  JasperPrint jasperPrintReport;

  String fileName;
  private MailConfig mailConfig;

  public ReportViewer() {

  }

  /**
   * @param heading
   */
  public ReportViewer(final String heading) {
    this(heading, null);
  }

  public ReportViewer(final String heading, final MailConfig aMailConfig) {
    mailConfig = aMailConfig;
    setName(heading);
    currentHeading = heading;
  }

  /**
   * @see no.ugland.utransprod.gui.Closeable#canClose(java.lang.String,
   *      no.ugland.utransprod.gui.WindowInterface)
   */
  public final boolean canClose(final String actionString,
      final WindowInterface window) {
    return true;
  }

  /**
   * Lager panel.
   *
   * @param window
   * @return panel
   */
  public final JPanel buildPanel(final WindowInterface window) {
    initComponents(window);
    FormLayout layout = new FormLayout("400dlu:grow",
        "fill:300dlu:grow,3dlu,p");
    PanelBuilder builder = new PanelBuilder(layout);
    // PanelBuilder builder = new PanelBuilder(new FormDebugPanel(),layout);
    CellConstraints cc = new CellConstraints();
    builder.add(pnlMain, cc.xy(1, 1));
    if (mailConfig != null) {
      builder.add(ButtonBarFactory.buildCenteredBar(buttonMail,
          buttonCancel), cc.xy(1, 3));
    } else {
      builder.add(ButtonBarFactory.buildCenteredBar(buttonCancel), cc.xy(
          1, 3));
    }
    return builder.getPanel();
  }

  /**
   * Genererer rapport.
   *
   * @param tableModel
   * @param heading
   * @param reportEnum
   * @param extraParams
   * @throws ProTransException
   */
  public final void generateProtransReport(final TableModel tableModel,
      final String heading, final ReportEnum reportEnum,
      final Map<String, Object> extraParams) throws ProTransException {
    generateProtransReportFromDatasource(new JRTableModelDataSource(
        tableModel), heading, reportEnum, extraParams);
  }

  public final void generateProtransReportFromBeanAndShow(
      final Collection<?> beans, final String heading,
      final ReportEnum reportEnum, final Map<String, Object> extraParams,
      final String reportFileName, final WindowInterface window,
      final boolean isModal) throws ProTransException {
    JDialog dialog = Util.getDialog(window, heading, isModal);
    WindowInterface dialogWindow = new JDialogAdapter(dialog);
    dialogWindow.setName(heading);

    dialogWindow.add(buildPanel(dialogWindow));

    generateProtransReportFromBean(beans, heading, reportEnum, extraParams,
        reportFileName);
    dialogWindow.pack();
    dialogWindow.setSize(new Dimension(850, 700));
    Util.locateOnScreenCenter(dialogWindow);
    dialogWindow.setVisible(true);
  }

  public final void generateProtransReportAndShow(
      final TableModel tableModel, final String heading,
      final ReportEnum reportEnum, final Map<String, Object> extraParams,
      final WindowInterface window) throws ProTransException {
    JDialog dialog = Util.getDialog(window, heading, true);
    WindowInterface dialogWindow = new JDialogAdapter(dialog);

    dialogWindow.add(buildPanel(dialogWindow));

    generateProtransReport(tableModel, heading, reportEnum, null);
    dialogWindow.pack();
    dialogWindow.setSize(new Dimension(850, 700));
    Util.locateOnScreenCenter(dialogWindow);
    dialogWindow.setVisible(true);
  }

  /**
   * Genererer rapport.
   *
   * @param beans
   * @param heading
   * @param reportEnum
   * @param extraParams
   * @param reportFileName
   * @throws ProTransException
   */
  public final void generateProtransReportFromBean(final Collection<?> beans,
      final String heading, final ReportEnum reportEnum,
      final Map<String, Object> extraParams, final String reportFileName)
      throws ProTransException {
    fileName = reportFileName;
    generateProtransReportFromDatasource(new JRBeanCollectionDataSource(
        beans), heading, reportEnum, extraParams);
  }

  /**
   * Initierer vinduskomponenter.
   *
   * @param window
   */
  private void initComponents(final WindowInterface window) {
    window.setName(currentHeading);
    buttonCancel = new CancelButton(window, this, true);
    buttonCancel.setName("ButtonCancel");
    buttonMail = new JButton(new MailAction(window));
    buttonMail.setIcon(IconEnum.ICON_MAIL.getIcon());
    pnlMain = new javax.swing.JPanel();
    pnlMain.setLayout(new java.awt.BorderLayout());

  }

  /**
   * Stenger vindu.
   */
  private void buttonCancelMouseClicked() {
    dispose();
  }

  private void generateReport(final String reportFile,
      final JRDataSource datasource, final String heading,
      final Map<String, Object> parameters, final boolean printable)
      throws ProTransException {
    try {
      InputStream stream = getClass().getClassLoader()
          .getResourceAsStream(reportFile);

      if (stream == null) {
        throw new ProTransException("Fant ikke rapport");
      }
      jasperPrintReport = JasperFillManager.fillReport(stream,
          parameters, datasource);

      JRViewerProTrans viewer = new JRViewerProTrans(jasperPrintReport);
      viewer.setPrintable(printable);
      viewer.setSavable(printable);
      this.pnlMain.add(viewer, BorderLayout.CENTER);
    } catch (JRException e) {
      e.printStackTrace();
      String msg;
      if (e.getCause() instanceof FileNotFoundException) {
        msg = "Kunne ikke finne rapport " + reportFile;
      } else {
        msg = e.getMessage();
      }
      throw new ProTransException("Feil ved generering av rapport " + msg);
    }
  }

  private void generateProtransReportFromDatasource(
      final JRDataSource datasource, final String heading,
      final ReportEnum reportEnum, final Map<String, Object> extraParams)
      throws ProTransException {
    ReportCompiler.compileReports(false);
    Map<String, Object> parameters = new HashMap<String, Object>();
    addLogoToParameters(reportEnum, parameters, extraParams);
    parameters.put("HEADING", heading);

    if (extraParams != null) {
      parameters.putAll(extraParams);
    }

    StringBuffer reportFile = new StringBuffer("reports/");

    reportFile.append(reportEnum.getReportFileName());

    generateReport(reportFile.toString(), datasource, heading, parameters,
        true);
  }

  private void addLogoToParameters(final ReportEnum reportEnum,
      Map<String, Object> parameters,
      final Map<String, Object> extraParams) {
    if (!logoIsAdded(extraParams)) {
      InputStream iconStream = getClass().getClassLoader()
          .getResourceAsStream(reportEnum.getImagePath());

      parameters.put(UGLAND_LOGO_PARAMETER, iconStream);
    }

  }

  private boolean logoIsAdded(Map<String, Object> parameters) {
    return parameters != null
        && parameters.get(UGLAND_LOGO_PARAMETER) != null;

  }

  /**
   * Lukker vindu.
   *
   * @param evt
   */
  protected final void buttonCancelActionPerformed(final ActionEvent evt) {
    buttonCancelMouseClicked();
  }

  /**
   * H�ndterer sending av rapport som mail.
   *
   * @author atle.brekka
   */
  private class MailAction extends AbstractAction {
    private static final long serialVersionUID = 1L;

    private WindowInterface window;

    /**
     * @param aWindow
     */
    public MailAction(final WindowInterface aWindow) {
      super("Send epost...");
      window = aWindow;
    }

    /**
     * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
     */
    public final void actionPerformed(final ActionEvent arg0) {
      if (mailConfig != null) {
        sendMail(window);
      }

    }

  }

  private void sendMail(final WindowInterface window) {
    try {
      Util.setWaitCursor(window.getComponent());
      String tmpPath = getTempDir();
      String tempFileName = getTempFileName(tmpPath, mailConfig
          .getFileName());
      File pdfFile = new File(tempFileName);
      JRPdfSaveContributor pdfSaver = new JRPdfSaveContributor(null, null);
      pdfSaver.save(jasperPrintReport, pdfFile);

      MailUtil.sendMailWithAttachmentDesktop(mailConfig
          .getToMailAddress(), mailConfig.getHeading(), mailConfig
          .getMsg(), tempFileName);
      // MailUtil.sendDeviationMail(tempFileName, fileName);
    } catch (Exception e) {
      e.printStackTrace();
      Util.showErrorDialog(window, "Feil", e.getMessage());
    } finally {
      Util.setDefaultCursor(window.getComponent());
    }

  }

  final String getTempFileName(final String tmpPath, final String aFileName) {
    String tempFileName;
    if (fileName == null) {
      tempFileName = tmpPath + "/" + aFileName
          + Util.getCurrentDateAsDateTimeString() + ".pdf";
    } else {
      tempFileName = tmpPath + "/" + fileName;
    }
    return tempFileName;
  }

  final String getTempDir() throws ProTransException {
    String tmpPath = ApplicationParamUtil.findParamByName("temp_dir");
    File tempDir = new File(tmpPath);
    if (!tempDir.exists()) {
      if (!tempDir.mkdir()) {
        throw new ProTransException("Kunne ikke lage temp katalog "
            + tmpPath);
      }
    }
    return tmpPath;
  }
}
TOP

Related Classes of no.ugland.utransprod.util.report.ReportViewer$MailAction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.