Package no.ugland.utransprod.util

Source Code of no.ugland.utransprod.util.JRViewerProTrans

package no.ugland.utransprod.util;

import java.awt.Component;
import java.awt.Container;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.File;
import java.io.InputStream;
import java.text.DecimalFormat;
import java.text.MessageFormat;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.swing.DefaultComboBoxModel;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JViewport;
import javax.swing.ScrollPaneConstants;
import javax.swing.filechooser.FileFilter;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRHyperlink;
import net.sf.jasperreports.engine.JRPrintAnchorIndex;
import net.sf.jasperreports.engine.JRPrintElement;
import net.sf.jasperreports.engine.JRPrintHyperlink;
import net.sf.jasperreports.engine.JRPrintPage;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperPrintManager;
import net.sf.jasperreports.engine.util.JRClassLoader;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.engine.util.JRSaver;
import net.sf.jasperreports.engine.xml.JRPrintXmlLoader;
import net.sf.jasperreports.view.JRHyperlinkListener;
import net.sf.jasperreports.view.JRSaveContributor;
import net.sf.jasperreports.view.save.JRPdfSaveContributor;

/**
* Brukes for � vise rapporter.
*
* @author atle.brekka
*/
public class JRViewerProTrans extends javax.swing.JPanel implements
    JRHyperlinkListener {

  private static final long serialVersionUID = 1L;

  /**
   * Setter om rapport skal v�re mulig � lagre.
   *
   * @param savable
   */
  public final void setSavable(final boolean savable) {
    btnSave.setEnabled(savable);
  }

  /**
   * Setter om rapport skal v�re mulig � skrive ut.
   *
   * @param printable
   */
  public final void setPrintable(final boolean printable) {
    btnPrint.setEnabled(printable);
  }

  private static final int TYPE_FILE_NAME = 1;

  private static final int TYPE_INPUT_STREAM = 2;

  private static final int TYPE_JASPER_PRINT = 3;

  /**
   * The DPI of the generated report.
   */
  public static final int REPORT_RESOLUTION = 72;

  private float minZoom = 0.5f;

  private float maxZoom = 2.5f;

  private int[] zooms = { 50, 75, 100, 125, 150, 175, 200, 250 };

  private int defaultZoomIndex = 2;

  private int type = TYPE_FILE_NAME;

  private boolean isXML = false;

  private String reportFileName = null;

  JasperPrint jasperPrint = null;

  private int pageIndex = 0;

  private float zoom = 0f;

  /**
   * the screen resolution.
   */
  private int screenResolution = REPORT_RESOLUTION;

  /**
   * the zoom ration adjusted to the screen resolution.
   */
  private float realZoom = 0f;

  private DecimalFormat zoomDecimalFormat = new DecimalFormat("#.##");

  private int downX = 0;

  private int downY = 0;

  private List<JRHyperlinkListener> hyperlinkListeners = new ArrayList<JRHyperlinkListener>();

  @SuppressWarnings("unchecked")
  private Map linksMap = new HashMap();

  private transient MouseListener mouseListener = new java.awt.event.MouseAdapter() {
    /**
     * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
     */
    @Override
    public void mouseClicked(final java.awt.event.MouseEvent evt) {
      hyperlinkClicked(evt);
    }
  };

  /**
   * Creates new form JRViewer.
   *
   * @param fileName
   * @param xml
   * @throws JRException
   */
  public JRViewerProTrans(final String fileName, final boolean xml)
      throws JRException {
    setScreenDetails();

    setZooms();

    initComponents();

    loadReport(fileName, xml);

    cmbZoom.setSelectedIndex(defaultZoomIndex);

    addHyperlinkListener(this);
  }

  /**
   * Creates new form JRViewer.
   *
   * @param is
   * @param xml
   * @throws JRException
   */
  public JRViewerProTrans(final InputStream is, final boolean xml)
      throws JRException {
    setScreenDetails();

    setZooms();

    initComponents();

    loadReport(is, xml);

    cmbZoom.setSelectedIndex(defaultZoomIndex);

    addHyperlinkListener(this);
  }

  /**
   * Creates new form JRViewer.
   *
   * @param jrPrint
   */
  public JRViewerProTrans(final JasperPrint jrPrint) {
    setScreenDetails();

    setZooms();

    initComponents();

    loadReport(jrPrint);

    cmbZoom.setSelectedIndex(defaultZoomIndex);

    addHyperlinkListener(this);
  }

  private void setScreenDetails() {
    screenResolution = Toolkit.getDefaultToolkit().getScreenResolution();
  }

  public final void clear() {
    emptyContainer(this);
    jasperPrint = null;
  }

  protected void setZooms() {
  }

  /**
   * @param listener
   */
  @SuppressWarnings("unchecked")
  public final void addHyperlinkListener(final JRHyperlinkListener listener) {
    hyperlinkListeners.add(listener);
  }

  /**
   * @param listener
   */
  public final void removeHyperlinkListener(final JRHyperlinkListener listener) {
    hyperlinkListeners.remove(listener);
  }

  /**
   * @return hyperlinklistener
   */
  @SuppressWarnings("unchecked")
  public final JRHyperlinkListener[] getHyperlinkListeners() {
    return hyperlinkListeners
        .toArray(new JRHyperlinkListener[hyperlinkListeners.size()]);
  }

  /**
   * @see net.sf.jasperreports.view.JRHyperlinkListener#
   *      gotoHyperlink(net.sf.jasperreports.engine.JRPrintHyperlink)
   */
  @SuppressWarnings("unchecked")
  public final void gotoHyperlink(final JRPrintHyperlink hyperlink) {
    switch (hyperlink.getHyperlinkType()) {
    case JRHyperlink.HYPERLINK_TYPE_REFERENCE:
      if (hyperlinkListeners != null && hyperlinkListeners.size() > 1) {
        System.out.println("Hyperlink reference : "
            + hyperlink.getHyperlinkReference());
        System.out
            .println("Implement your own JRHyperlinkListener to manage this type of event.");
      }
      break;

    case JRHyperlink.HYPERLINK_TYPE_LOCAL_ANCHOR:
      if (hyperlink.getHyperlinkAnchor() != null) {
        Map anchorIndexes = jasperPrint.getAnchorIndexes();
        JRPrintAnchorIndex anchorIndex = (JRPrintAnchorIndex) anchorIndexes
            .get(hyperlink.getHyperlinkAnchor());
        if (anchorIndex.getPageIndex() != pageIndex) {
          setPageIndex(anchorIndex.getPageIndex());
          refreshPage();
        }
        Container container = pnlInScroll.getParent();
        if (container instanceof JViewport) {
          JViewport viewport = (JViewport) container;

          int newX = (int) (anchorIndex.getElement().getX() * realZoom);
          int newY = (int) (anchorIndex.getElement().getY() * realZoom);

          int maxX = pnlInScroll.getWidth() - viewport.getWidth();
          int maxY = pnlInScroll.getHeight() - viewport.getHeight();

          if (newX < 0) {
            newX = 0;
          }
          if (newX > maxX) {
            newX = maxX;
          }
          if (newY < 0) {
            newY = 0;
          }
          if (newY > maxY) {
            newY = maxY;
          }

          viewport.setViewPosition(new Point(newX, newY));
        }
      }

      break;

    case JRHyperlink.HYPERLINK_TYPE_LOCAL_PAGE:
      int page = pageIndex + 1;
      if (hyperlink.getHyperlinkPage() != null) {
        page = hyperlink.getHyperlinkPage().intValue();
      }

      if (page >= 1 && page <= jasperPrint.getPages().size()
          && page != pageIndex + 1) {
        setPageIndex(page - 1);
        refreshPage();
        Container container = pnlInScroll.getParent();
        if (container instanceof JViewport) {
          JViewport viewport = (JViewport) container;
          viewport.setViewPosition(new Point(0, 0));
        }
      }

      break;

    case JRHyperlink.HYPERLINK_TYPE_REMOTE_ANCHOR:
      if (hyperlinkListeners != null && hyperlinkListeners.size() > 1) {
        System.out.println("Hyperlink reference : "
            + hyperlink.getHyperlinkReference());
        System.out.println("Hyperlink anchor    : "
            + hyperlink.getHyperlinkAnchor());
        System.out
            .println("Implement your own JRHyperlinkListener to manage this type of event.");
      }
      break;

    case JRHyperlink.HYPERLINK_TYPE_REMOTE_PAGE:
      if (hyperlinkListeners != null && hyperlinkListeners.size() > 1) {
        System.out.println("Hyperlink reference : "
            + hyperlink.getHyperlinkReference());
        System.out.println("Hyperlink page      : "
            + hyperlink.getHyperlinkPage());
        System.out
            .println("Implement your own JRHyperlinkListener to manage this type of event.");
      }
      break;

    case JRHyperlink.HYPERLINK_TYPE_NONE:
    default:
      break;

    }
  }

  /**
   * This method is called from within the constructor to initialize the form.
   * WARNING: Do NOT modify this code. The content of this method is always
   * regenerated by the Form Editor.
   */
  private void initComponents() {// GEN-BEGIN:initComponents
    java.awt.GridBagConstraints gridBagConstraints;

    createComponents();

    setLayout(new java.awt.BorderLayout());

    setMinimumSize(new java.awt.Dimension(450, 150));
    setPreferredSize(new java.awt.Dimension(450, 150));
    tlbToolBar.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT,
        0, 2));

    initBtnSave();
    tlbToolBar.add(btnSave);
    initBtnPrint();
    tlbToolBar.add(btnPrint);
    initBtnReload();
    tlbToolBar.add(btnReload);
    pnlSep01.setMaximumSize(new java.awt.Dimension(10, 10));
    tlbToolBar.add(pnlSep01);
    initBtnFirst();
    tlbToolBar.add(btnFirst);
    initBtnPrevious();
    tlbToolBar.add(btnPrevious);
    initBtnNext();
    tlbToolBar.add(btnNext);
    initBtnLast();
    tlbToolBar.add(btnLast);
    initTxtGoTo();
    tlbToolBar.add(txtGoTo);
    pnlSep02.setMaximumSize(new java.awt.Dimension(10, 10));
    tlbToolBar.add(pnlSep02);
    initBtnActualSize();
    tlbToolBar.add(btnActualSize);
    initBtnFitPage();
    tlbToolBar.add(btnFitPage);
    initBtnFitWidth();
    tlbToolBar.add(btnFitWidth);
    pnlSep03.setMaximumSize(new java.awt.Dimension(10, 10));
    tlbToolBar.add(pnlSep03);
    initBtnZoomIn();
    tlbToolBar.add(btnZoomIn);
    initBtnZoomOut();
    tlbToolBar.add(btnZoomOut);
    initCmbZoom();
    tlbToolBar.add(cmbZoom);
    add(tlbToolBar, java.awt.BorderLayout.NORTH);
    pnlMain.setLayout(new java.awt.BorderLayout());
    pnlMain.addComponentListener(new java.awt.event.ComponentAdapter() {
      /**
       * @see java.awt.event.ComponentListener#componentResized(java.awt.event.ComponentEvent)
       */
      @Override
      public void componentResized(final java.awt.event.ComponentEvent evt) {
        pnlMainComponentResized();
      }
    });
    scrollPane
        .setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
    scrollPane
        .setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
    pnlInScroll.setLayout(new java.awt.GridBagLayout());
    pnlPage.setLayout(new java.awt.BorderLayout());
    pnlPage.setMinimumSize(new java.awt.Dimension(100, 100));
    pnlPage.setPreferredSize(new java.awt.Dimension(100, 100));
    jPanel4.setLayout(new java.awt.GridBagLayout());
    jPanel4.setMinimumSize(new java.awt.Dimension(100, 120));
    jPanel4.setPreferredSize(new java.awt.Dimension(100, 120));
    pnlLinks.setLayout(null);
    initPnlLinks();
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 0;
    gridBagConstraints.gridy = 0;
    gridBagConstraints.gridwidth = 2;
    gridBagConstraints.gridheight = 2;
    gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
    jPanel4.add(pnlLinks, gridBagConstraints);
    jPanel5.setBackground(java.awt.Color.gray);
    jPanel5.setMinimumSize(new java.awt.Dimension(5, 5));
    jPanel5.setPreferredSize(new java.awt.Dimension(5, 5));
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 2;
    gridBagConstraints.gridy = 1;
    gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL;
    jPanel4.add(jPanel5, gridBagConstraints);
    jPanel6.setMinimumSize(new java.awt.Dimension(5, 5));
    jPanel6.setPreferredSize(new java.awt.Dimension(5, 5));
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 0;
    gridBagConstraints.gridy = 2;
    jPanel4.add(jPanel6, gridBagConstraints);
    jPanel7.setBackground(java.awt.Color.gray);
    jPanel7.setMinimumSize(new java.awt.Dimension(5, 5));
    jPanel7.setPreferredSize(new java.awt.Dimension(5, 5));
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 1;
    gridBagConstraints.gridy = 2;
    gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
    jPanel4.add(jPanel7, gridBagConstraints);
    jPanel8.setBackground(java.awt.Color.gray);
    jPanel8.setMinimumSize(new java.awt.Dimension(5, 5));
    jPanel8.setPreferredSize(new java.awt.Dimension(5, 5));
    jLabel1.setText("jLabel1");
    jPanel8.add(jLabel1);
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 2;
    gridBagConstraints.gridy = 2;
    jPanel4.add(jPanel8, gridBagConstraints);
    jPanel9.setMinimumSize(new java.awt.Dimension(5, 5));
    jPanel9.setPreferredSize(new java.awt.Dimension(5, 5));
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 2;
    gridBagConstraints.gridy = 0;
    jPanel4.add(jPanel9, gridBagConstraints);
    lblPage.setBackground(java.awt.Color.white);
    lblPage.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(
        0, 0, 0)));
    lblPage.setOpaque(true);
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 0;
    gridBagConstraints.gridy = 0;
    gridBagConstraints.gridwidth = 2;
    gridBagConstraints.gridheight = 2;
    gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
    gridBagConstraints.weightx = 1.0;
    gridBagConstraints.weighty = 1.0;
    jPanel4.add(lblPage, gridBagConstraints);
    pnlPage.add(jPanel4, java.awt.BorderLayout.CENTER);
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
    pnlInScroll.add(pnlPage, gridBagConstraints);
    scrollPane.setViewportView(pnlInScroll);
    pnlMain.add(scrollPane, java.awt.BorderLayout.CENTER);
    add(pnlMain, java.awt.BorderLayout.CENTER);
    pnlStatus.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER,
        0, 0));
    lblStatus.setFont(new java.awt.Font("Dialog", 1, 10));
    lblStatus.setText("Page i of n");
    pnlStatus.add(lblStatus);
    add(pnlStatus, java.awt.BorderLayout.SOUTH);
  }// GEN-END:initComponents

  private void createComponents() {
    tlbToolBar = new javax.swing.JPanel();
    btnSave = new javax.swing.JButton();
    btnPrint = new javax.swing.JButton();
    btnReload = new javax.swing.JButton();
    pnlSep01 = new javax.swing.JPanel();
    btnFirst = new javax.swing.JButton();
    btnPrevious = new javax.swing.JButton();
    btnNext = new javax.swing.JButton();
    btnLast = new javax.swing.JButton();
    txtGoTo = new javax.swing.JTextField();
    pnlSep02 = new javax.swing.JPanel();
    btnActualSize = new javax.swing.JToggleButton();
    btnFitPage = new javax.swing.JToggleButton();
    btnFitWidth = new javax.swing.JToggleButton();
    pnlSep03 = new javax.swing.JPanel();
    btnZoomIn = new javax.swing.JButton();
    btnZoomOut = new javax.swing.JButton();
    cmbZoom = new javax.swing.JComboBox();
    DefaultComboBoxModel model = new DefaultComboBoxModel();
    for (int i = 0; i < zooms.length; i++) {
      model.addElement("" + zooms[i] + "%");
    }
    cmbZoom.setModel(model);

    pnlMain = new javax.swing.JPanel();
    scrollPane = new javax.swing.JScrollPane();
    scrollPane.getHorizontalScrollBar().setUnitIncrement(5);
    scrollPane.getVerticalScrollBar().setUnitIncrement(5);

    pnlInScroll = new javax.swing.JPanel();
    pnlPage = new javax.swing.JPanel();
    jPanel4 = new javax.swing.JPanel();
    pnlLinks = new javax.swing.JPanel();
    jPanel5 = new javax.swing.JPanel();
    jPanel6 = new javax.swing.JPanel();
    jPanel7 = new javax.swing.JPanel();
    jPanel8 = new javax.swing.JPanel();
    jLabel1 = new javax.swing.JLabel();
    jPanel9 = new javax.swing.JPanel();
    lblPage = new javax.swing.JLabel();
    pnlStatus = new javax.swing.JPanel();
    lblStatus = new javax.swing.JLabel();
  }

  private void initPnlLinks() {
    pnlLinks.setMinimumSize(new java.awt.Dimension(5, 5));
    pnlLinks.setPreferredSize(new java.awt.Dimension(5, 5));
    pnlLinks.setOpaque(false);
    pnlLinks.addMouseListener(new java.awt.event.MouseAdapter() {
      /**
       * @see java.awt.event.MouseListener#mousePressed(java.awt.event.MouseEvent)
       */
      @Override
      public void mousePressed(final java.awt.event.MouseEvent evt) {
        pnlLinksMousePressed(evt);
      }

      /**
       * @see java.awt.event.MouseListener#mouseReleased(java.awt.event.MouseEvent)
       */
      @Override
      public void mouseReleased(final java.awt.event.MouseEvent evt) {
        pnlLinksMouseReleased();
      }
    });
    pnlLinks
        .addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
          /**
           * @see java.awt.event.MouseMotionListener#mouseDragged(java.awt.event.MouseEvent)
           */
          @Override
          public void mouseDragged(final java.awt.event.MouseEvent evt) {
            pnlLinksMouseDragged(evt);
          }
        });
  }

  private void initCmbZoom() {
    cmbZoom.setEditable(true);
    cmbZoom.setToolTipText(java.util.ResourceBundle.getBundle(
        "net/sf/jasperreports/view/viewer").getString("zoom.ratio"));
    cmbZoom.setMaximumSize(new java.awt.Dimension(80, 23));
    cmbZoom.setMinimumSize(new java.awt.Dimension(80, 23));
    cmbZoom.setPreferredSize(new java.awt.Dimension(80, 23));
    cmbZoom.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(final java.awt.event.ActionEvent evt) {
        cmbZoomActionPerformed();
      }
    });
    cmbZoom.addItemListener(new java.awt.event.ItemListener() {
      public void itemStateChanged(final java.awt.event.ItemEvent evt) {
        cmbZoomItemStateChanged();
      }
    });
  }

  private void initBtnZoomOut() {
    btnZoomOut.setIcon(new javax.swing.ImageIcon(getClass().getResource(
        "/net/sf/jasperreports/view/images/zoomout.GIF")));
    btnZoomOut.setToolTipText(java.util.ResourceBundle.getBundle(
        "net/sf/jasperreports/view/viewer").getString("zoom.out"));
    btnZoomOut.setMargin(new java.awt.Insets(2, 2, 2, 2));
    btnZoomOut.setMaximumSize(new java.awt.Dimension(23, 23));
    btnZoomOut.setMinimumSize(new java.awt.Dimension(23, 23));
    btnZoomOut.setPreferredSize(new java.awt.Dimension(23, 23));
    btnZoomOut.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(final java.awt.event.ActionEvent evt) {
        btnZoomOutActionPerformed();
      }
    });
  }

  private void initBtnZoomIn() {
    btnZoomIn.setIcon(new javax.swing.ImageIcon(getClass().getResource(
        "/net/sf/jasperreports/view/images/zoomin.GIF")));
    btnZoomIn.setToolTipText(java.util.ResourceBundle.getBundle(
        "net/sf/jasperreports/view/viewer").getString("zoom.in"));
    btnZoomIn.setMargin(new java.awt.Insets(2, 2, 2, 2));
    btnZoomIn.setMaximumSize(new java.awt.Dimension(23, 23));
    btnZoomIn.setMinimumSize(new java.awt.Dimension(23, 23));
    btnZoomIn.setPreferredSize(new java.awt.Dimension(23, 23));
    btnZoomIn.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(final java.awt.event.ActionEvent evt) {
        btnZoomInActionPerformed();
      }
    });
  }

  private void initBtnFitWidth() {
    btnFitWidth.setIcon(new javax.swing.ImageIcon(getClass().getResource(
        "/net/sf/jasperreports/view/images/fitwidth.GIF")));
    btnFitWidth.setToolTipText(java.util.ResourceBundle.getBundle(
        "net/sf/jasperreports/view/viewer").getString("fit.width"));
    btnFitWidth.setMargin(new java.awt.Insets(2, 2, 2, 2));
    btnFitWidth.setMaximumSize(new java.awt.Dimension(23, 23));
    btnFitWidth.setMinimumSize(new java.awt.Dimension(23, 23));
    btnFitWidth.setPreferredSize(new java.awt.Dimension(23, 23));
    btnFitWidth.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(final java.awt.event.ActionEvent evt) {
        btnFitWidthActionPerformed();
      }
    });
  }

  private void initBtnFitPage() {
    btnFitPage.setIcon(new javax.swing.ImageIcon(getClass().getResource(
        "/net/sf/jasperreports/view/images/fitpage.GIF")));
    btnFitPage.setToolTipText(java.util.ResourceBundle.getBundle(
        "net/sf/jasperreports/view/viewer").getString("fit.page"));
    btnFitPage.setMargin(new java.awt.Insets(2, 2, 2, 2));
    btnFitPage.setMaximumSize(new java.awt.Dimension(23, 23));
    btnFitPage.setMinimumSize(new java.awt.Dimension(23, 23));
    btnFitPage.setPreferredSize(new java.awt.Dimension(23, 23));
    btnFitPage.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(final java.awt.event.ActionEvent evt) {
        btnFitPageActionPerformed();
      }
    });
  }

  private void initBtnActualSize() {
    btnActualSize.setIcon(new javax.swing.ImageIcon(getClass().getResource(
        "/net/sf/jasperreports/view/images/actualsize.GIF")));
    btnActualSize.setToolTipText(java.util.ResourceBundle.getBundle(
        "net/sf/jasperreports/view/viewer").getString("actual.size"));
    btnActualSize.setMargin(new java.awt.Insets(2, 2, 2, 2));
    btnActualSize.setMaximumSize(new java.awt.Dimension(23, 23));
    btnActualSize.setMinimumSize(new java.awt.Dimension(23, 23));
    btnActualSize.setPreferredSize(new java.awt.Dimension(23, 23));
    btnActualSize.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(final java.awt.event.ActionEvent evt) {
        btnActualSizeActionPerformed();
      }
    });
  }

  private void initTxtGoTo() {
    txtGoTo.setToolTipText(java.util.ResourceBundle.getBundle(
        "net/sf/jasperreports/view/viewer").getString("go.to.page"));
    txtGoTo.setMaximumSize(new java.awt.Dimension(40, 23));
    txtGoTo.setMinimumSize(new java.awt.Dimension(40, 23));
    txtGoTo.setPreferredSize(new java.awt.Dimension(40, 23));
    txtGoTo.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(final java.awt.event.ActionEvent evt) {
        txtGoToActionPerformed();
      }
    });
  }

  private void initBtnLast() {
    btnLast.setIcon(new javax.swing.ImageIcon(getClass().getResource(
        "/net/sf/jasperreports/view/images/last.GIF")));
    btnLast.setToolTipText(java.util.ResourceBundle.getBundle(
        "net/sf/jasperreports/view/viewer").getString("last.page"));
    btnLast.setMargin(new java.awt.Insets(2, 2, 2, 2));
    btnLast.setMaximumSize(new java.awt.Dimension(23, 23));
    btnLast.setMinimumSize(new java.awt.Dimension(23, 23));
    btnLast.setPreferredSize(new java.awt.Dimension(23, 23));
    btnLast.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(final java.awt.event.ActionEvent evt) {
        btnLastActionPerformed();
      }
    });
  }

  private void initBtnNext() {
    btnNext.setIcon(new javax.swing.ImageIcon(getClass().getResource(
        "/net/sf/jasperreports/view/images/next.GIF")));
    btnNext.setToolTipText(java.util.ResourceBundle.getBundle(
        "net/sf/jasperreports/view/viewer").getString("next.page"));
    btnNext.setMargin(new java.awt.Insets(2, 2, 2, 2));
    btnNext.setMaximumSize(new java.awt.Dimension(23, 23));
    btnNext.setMinimumSize(new java.awt.Dimension(23, 23));
    btnNext.setPreferredSize(new java.awt.Dimension(23, 23));
    btnNext.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(final java.awt.event.ActionEvent evt) {
        btnNextActionPerformed();
      }
    });
  }

  private void initBtnPrevious() {
    btnPrevious.setIcon(new javax.swing.ImageIcon(getClass().getResource(
        "/net/sf/jasperreports/view/images/previous.GIF")));
    btnPrevious.setToolTipText(java.util.ResourceBundle.getBundle(
        "net/sf/jasperreports/view/viewer").getString("previous.page"));
    btnPrevious.setMargin(new java.awt.Insets(2, 2, 2, 2));
    btnPrevious.setMaximumSize(new java.awt.Dimension(23, 23));
    btnPrevious.setMinimumSize(new java.awt.Dimension(23, 23));
    btnPrevious.setPreferredSize(new java.awt.Dimension(23, 23));
    btnPrevious.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(final java.awt.event.ActionEvent evt) {
        btnPreviousActionPerformed();
      }
    });
  }

  private void initBtnFirst() {
    btnFirst.setIcon(new javax.swing.ImageIcon(getClass().getResource(
        "/net/sf/jasperreports/view/images/first.GIF")));
    btnFirst.setToolTipText(java.util.ResourceBundle.getBundle(
        "net/sf/jasperreports/view/viewer").getString("first.page"));
    btnFirst.setMargin(new java.awt.Insets(2, 2, 2, 2));
    btnFirst.setMaximumSize(new java.awt.Dimension(23, 23));
    btnFirst.setMinimumSize(new java.awt.Dimension(23, 23));
    btnFirst.setPreferredSize(new java.awt.Dimension(23, 23));
    btnFirst.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(final java.awt.event.ActionEvent evt) {
        btnFirstActionPerformed();
      }
    });
  }

  private void initBtnReload() {
    btnReload.setIcon(new javax.swing.ImageIcon(getClass().getResource(
        "/net/sf/jasperreports/view/images/reload.GIF")));
    btnReload.setToolTipText(java.util.ResourceBundle.getBundle(
        "net/sf/jasperreports/view/viewer").getString("reload"));
    btnReload.setMargin(new java.awt.Insets(2, 2, 2, 2));
    btnReload.setMaximumSize(new java.awt.Dimension(23, 23));
    btnReload.setMinimumSize(new java.awt.Dimension(23, 23));
    btnReload.setPreferredSize(new java.awt.Dimension(23, 23));
    btnReload.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(final java.awt.event.ActionEvent evt) {
        btnReloadActionPerformed();
      }
    });
  }

  private void initBtnPrint() {
    btnPrint.setIcon(new javax.swing.ImageIcon(getClass().getResource(
        "/net/sf/jasperreports/view/images/print.GIF")));
    btnPrint.setToolTipText(java.util.ResourceBundle.getBundle(
        "net/sf/jasperreports/view/viewer").getString("print"));
    btnPrint.setMargin(new java.awt.Insets(2, 2, 2, 2));
    btnPrint.setMaximumSize(new java.awt.Dimension(23, 23));
    btnPrint.setMinimumSize(new java.awt.Dimension(23, 23));
    btnPrint.setPreferredSize(new java.awt.Dimension(23, 23));
    btnPrint.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(final java.awt.event.ActionEvent evt) {
        btnPrintActionPerformed();
      }
    });
  }

  private void initBtnSave() {
    btnSave.setIcon(new javax.swing.ImageIcon(getClass().getResource(
        "/net/sf/jasperreports/view/images/save.GIF")));
    btnSave.setToolTipText(java.util.ResourceBundle.getBundle(
        "net/sf/jasperreports/view/viewer").getString("save"));
    btnSave.setMargin(new java.awt.Insets(2, 2, 2, 2));
    btnSave.setMaximumSize(new java.awt.Dimension(23, 23));
    btnSave.setMinimumSize(new java.awt.Dimension(23, 23));
    btnSave.setPreferredSize(new java.awt.Dimension(23, 23));
    btnSave.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(final java.awt.event.ActionEvent evt) {
        btnSaveActionPerformed();
      }
    });
  }

  final void txtGoToActionPerformed() {// GEN-FIRST:event_txtGoToActionPerformed
    try {
      int pageNumber = Integer.parseInt(txtGoTo.getText());
      if (pageNumber != pageIndex + 1 && pageNumber > 0
          && pageNumber <= jasperPrint.getPages().size()) {
        setPageIndex(pageNumber - 1);
        refreshPage();
      }
    } catch (NumberFormatException e) {
      e.printStackTrace();
    }
  }// GEN-LAST:event_txtGoToActionPerformed

  final void cmbZoomItemStateChanged() {// GEN-FIRST:event_cmbZoomItemStateChanged
    // Add your handling code here:
    btnActualSize.setSelected(false);
    btnFitPage.setSelected(false);
    btnFitWidth.setSelected(false);
  }// GEN-LAST:event_cmbZoomItemStateChanged

  final void pnlMainComponentResized() {// GEN-FIRST:event_pnlMainComponentResized
    // Add your handling code here:
    if (btnFitPage.isSelected()) {
      setRealZoomRatio(((float) pnlInScroll.getVisibleRect().getHeight() - 20f)
          / jasperPrint.getPageHeight());
    } else if (btnFitWidth.isSelected()) {
      setRealZoomRatio(((float) pnlInScroll.getVisibleRect().getWidth() - 20f)
          / jasperPrint.getPageWidth());
    }

  }// GEN-LAST:event_pnlMainComponentResized

  final void btnActualSizeActionPerformed() {// GEN-FIRST:event_btnActualSizeActionPerformed
    // Add your handling code here:
    if (btnActualSize.isSelected()) {
      btnFitPage.setSelected(false);
      btnFitWidth.setSelected(false);

      setZoomRatio(1);
    }
  }// GEN-LAST:event_btnActualSizeActionPerformed

  final void btnFitWidthActionPerformed() {// GEN-FIRST:event_btnFitWidthActionPerformed
    // Add your handling code here:
    if (btnFitWidth.isSelected()) {
      btnActualSize.setSelected(false);
      btnFitPage.setSelected(false);

      setRealZoomRatio(((float) pnlInScroll.getVisibleRect().getWidth() - 20f)
          / jasperPrint.getPageWidth());
    }
  }// GEN-LAST:event_btnFitWidthActionPerformed

  final void btnFitPageActionPerformed() {// GEN-FIRST:event_btnFitPageActionPerformed
    // Add your handling code here:
    if (btnFitPage.isSelected()) {
      btnActualSize.setSelected(false);
      btnFitWidth.setSelected(false);

      setRealZoomRatio(((float) pnlInScroll.getVisibleRect().getHeight() - 20f)
          / jasperPrint.getPageHeight());
    }
  }// GEN-LAST:event_btnFitPageActionPerformed

  @SuppressWarnings("unchecked")
  final void btnSaveActionPerformed() {// GEN-FIRST:event_btnSaveActionPerformed
    // Add your handling code here:

    JFileChooser fileChooser = new JFileChooser();

    // JRSaveContributor rtfSaveContrib = null;
    // try {
    // Class<JRRtfSaveContributor> rtfSaveContribClass = JRClassLoader
    // .loadClassForName("net.sf.jasperreports.view.save.JRRtfSaveContributor");
    //
    // rtfSaveContrib = rtfSaveContribClass.newInstance();
    // fileChooser.addChoosableFileFilter(rtfSaveContrib);
    // } catch (Exception ex) {
    // ex.printStackTrace();
    // }

    JRSaveContributor htmlSaver = null;
    try {
      Class htmlSaverClass = JRClassLoader
          .loadClassForName("net.sf.jasperreports.view.save.JRHtmlSaveContributor");
      htmlSaver = (JRSaveContributor) htmlSaverClass.newInstance();
      fileChooser.addChoosableFileFilter(htmlSaver);
    } catch (Exception e) {
      e.printStackTrace();
    }

    JRSaveContributor csvSaver = null;
    try {
      Class csvSaverClass = JRClassLoader
          .loadClassForName("net.sf.jasperreports.view.save.JRCsvSaveContributor");
      csvSaver = (JRSaveContributor) csvSaverClass.newInstance();
      fileChooser.addChoosableFileFilter(csvSaver);
    } catch (Exception e) {
      e.printStackTrace();
    }

    JRPdfSaveContributor pdfSaveContrib = null;
    try {
      // Class pdfSaveContribClass = JRClassLoader
      // .loadClassForName("net.sf.jasperreports.view.save.JRPdfSaveContributor");
      pdfSaveContrib = new JRPdfSaveContributor(null, null);
      // pdfSaveContrib = (JRSaveContributor) pdfSaveContribClass
      // .newInstance();
      fileChooser.addChoosableFileFilter(pdfSaveContrib);
    } catch (Exception e) {
      e.printStackTrace();
    }

    int retValue = fileChooser.showSaveDialog(this);
    if (retValue == JFileChooser.APPROVE_OPTION) {
      FileFilter fileFilter = fileChooser.getFileFilter();
      File file = fileChooser.getSelectedFile();
      String lowerCaseFileName = file.getName().toLowerCase();

      try {
        if (fileFilter instanceof JRSaveContributor) {
          ((JRSaveContributor) fileFilter).save(jasperPrint, file);
        } else {
          if (lowerCaseFileName.endsWith(".jrprint")) {
            JRSaver.saveObject(jasperPrint, file);
          } else if (lowerCaseFileName.endsWith(".pdf")
              && pdfSaveContrib != null) {
            pdfSaveContrib.save(jasperPrint, file);
          } else if ((lowerCaseFileName.endsWith(".html") || lowerCaseFileName
              .endsWith(".htm"))
              && htmlSaver != null) {
            htmlSaver.save(jasperPrint, file);
          } else if (lowerCaseFileName.endsWith(".csv")
              && csvSaver != null) {
            csvSaver.save(jasperPrint, file);
          } else {
            // if (!file.getName().endsWith(".jrprint")) {
            // file = new File(file.getAbsolutePath() + ".jrprint");
            // }

            // JRSaver.saveObject(jasperPrint, file);
            pdfSaveContrib.save(jasperPrint, file);
          }
        }
      } catch (JRException e) {
        e.printStackTrace();
        JOptionPane.showMessageDialog(null, java.util.ResourceBundle
            .getBundle("net/sf/jasperreports/view/viewer")
            .getString("error.saving"));
      }
    }
  }// GEN-LAST:event_btnSaveActionPerformed

  /**
   * @param evt
   */
  final void pnlLinksMouseDragged(final java.awt.event.MouseEvent evt) {
    // Add your handling code here:

    Container container = pnlInScroll.getParent();
    if (container instanceof JViewport) {
      JViewport viewport = (JViewport) container;
      Point point = viewport.getViewPosition();
      int newX = point.x - (evt.getX() - downX);
      int newY = point.y - (evt.getY() - downY);

      int maxX = pnlInScroll.getWidth() - viewport.getWidth();
      int maxY = pnlInScroll.getHeight() - viewport.getHeight();

      if (newX < 0) {
        newX = 0;
      }
      if (newX > maxX) {
        newX = maxX;
      }
      if (newY < 0) {
        newY = 0;
      }
      if (newY > maxY) {
        newY = maxY;
      }

      viewport.setViewPosition(new Point(newX, newY));
    }
  }// GEN-LAST:event_pnlLinksMouseDragged

  final void pnlLinksMouseReleased() {// GEN-FIRST:event_pnlLinksMouseReleased
    // Add your handling code here:
    pnlLinks.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
  }// GEN-LAST:event_pnlLinksMouseReleased

  /**
   * @param evt
   */
  final void pnlLinksMousePressed(final java.awt.event.MouseEvent evt) {
    // Add your handling code here:
    pnlLinks.setCursor(new Cursor(Cursor.MOVE_CURSOR));

    downX = evt.getX();
    downY = evt.getY();
  }// GEN-LAST:event_pnlLinksMousePressed

  final void btnPrintActionPerformed()// GEN-FIRST:event_btnPrintActionPerformed
  {// GEN-HEADEREND:event_btnPrintActionPerformed
    // Add your handling code here:

    Thread thread = new Thread(new Runnable() {
      public void run() {
        try {
          JasperPrintManager.printReport(jasperPrint, true);
        } catch (Exception ex) {
          ex.printStackTrace();
          JOptionPane.showMessageDialog(null,
              java.util.ResourceBundle.getBundle(
                  "net/sf/jasperreports/view/viewer")
                  .getString("error.printing"));
        }
      }
    });

    thread.start();

  }// GEN-LAST:event_btnPrintActionPerformed

  final void btnLastActionPerformed()// GEN-FIRST:event_btnLastActionPerformed
  {// GEN-HEADEREND:event_btnLastActionPerformed
    // Add your handling code here:
    setPageIndex(jasperPrint.getPages().size() - 1);
    refreshPage();
  }// GEN-LAST:event_btnLastActionPerformed

  final void btnNextActionPerformed()// GEN-FIRST:event_btnNextActionPerformed
  {// GEN-HEADEREND:event_btnNextActionPerformed
    // Add your handling code here:
    setPageIndex(pageIndex + 1);
    refreshPage();
  }// GEN-LAST:event_btnNextActionPerformed

  final void btnPreviousActionPerformed()// GEN-FIRST:event_btnPreviousActionPerformed
  {// GEN-HEADEREND:event_btnPreviousActionPerformed
    // Add your handling code here:
    setPageIndex(pageIndex - 1);
    refreshPage();
  }// GEN-LAST:event_btnPreviousActionPerformed

  final void btnFirstActionPerformed()// GEN-FIRST:event_btnFirstActionPerformed
  {// GEN-HEADEREND:event_btnFirstActionPerformed
    // Add your handling code here:
    setPageIndex(0);
    refreshPage();
  }// GEN-LAST:event_btnFirstActionPerformed

  final void btnReloadActionPerformed()// GEN-FIRST:event_btnReloadActionPerformed
  {// GEN-HEADEREND:event_btnReloadActionPerformed
    // Add your handling code here:
    if (type == TYPE_FILE_NAME) {
      try {
        loadReport(reportFileName, isXML);
      } catch (JRException e) {
        e.printStackTrace();

        jasperPrint = null;
        setPageIndex(0);
        refreshPage();

        JOptionPane.showMessageDialog(this, java.util.ResourceBundle
            .getBundle("net/sf/jasperreports/view/viewer")
            .getString("error.loading"));
      }

      zoom = 0;// force pageRefresh()
      realZoom = 0f;
      setZoomRatio(1);
    }
  }// GEN-LAST:event_btnReloadActionPerformed

  final void btnZoomInActionPerformed()// GEN-FIRST:event_btnZoomInActionPerformed
  {// GEN-HEADEREND:event_btnZoomInActionPerformed
    // Add your handling code here:
    btnActualSize.setSelected(false);
    btnFitPage.setSelected(false);
    btnFitWidth.setSelected(false);

    int newZoomInt = (int) (100 * getZoomRatio());
    int index = Arrays.binarySearch(zooms, newZoomInt);
    if (index < 0) {
      setZoomRatio(zooms[-index - 1] / 100f);
    } else if (index < cmbZoom.getModel().getSize() - 1) {
      setZoomRatio(zooms[index + 1] / 100f);
    }
  }// GEN-LAST:event_btnZoomInActionPerformed

  final void btnZoomOutActionPerformed()// GEN-FIRST:event_btnZoomOutActionPerformed
  {// GEN-HEADEREND:event_btnZoomOutActionPerformed
    // Add your handling code here:
    btnActualSize.setSelected(false);
    btnFitPage.setSelected(false);
    btnFitWidth.setSelected(false);

    int newZoomInt = (int) (100 * getZoomRatio());
    int index = Arrays.binarySearch(zooms, newZoomInt);
    if (index > 0) {
      setZoomRatio(zooms[index - 1] / 100f);
    } else if (index < -1) {
      setZoomRatio(zooms[-index - 2] / 100f);
    }
  }// GEN-LAST:event_btnZoomOutActionPerformed

  final void cmbZoomActionPerformed()// GEN-FIRST:event_cmbZoomActionPerformed
  {// GEN-HEADEREND:event_cmbZoomActionPerformed
    // Add your handling code here:
    float newZoom = getZoomRatio();

    if (newZoom < minZoom) {
      newZoom = minZoom;
    }

    if (newZoom > maxZoom) {
      newZoom = maxZoom;
    }

    setZoomRatio(newZoom);
  }// GEN-LAST:event_cmbZoomActionPerformed

  /**
   * @param evt
   */
  final void hyperlinkClicked(final MouseEvent evt) {
    JPanel link = (JPanel) evt.getSource();
    JRPrintHyperlink element = (JRPrintHyperlink) linksMap.get(link);

    try {
      JRHyperlinkListener listener = null;
      for (int i = 0; i < hyperlinkListeners.size(); i++) {
        listener = hyperlinkListeners.get(i);
        listener.gotoHyperlink(element);
      }
    } catch (JRException e) {
      e.printStackTrace();
      JOptionPane.showMessageDialog(this, java.util.ResourceBundle
          .getBundle("net/sf/jasperreports/view/viewer").getString(
              "error.hyperlink"));
    }
  }

  /**
   * @param index
   */
  private void setPageIndex(final int index) {
    pageIndex = index;
    if (jasperPrint != null && jasperPrint.getPages() != null
        && jasperPrint.getPages().size() > 0) {
      btnFirst.setEnabled((pageIndex > 0));
      btnPrevious.setEnabled((pageIndex > 0));
      btnNext.setEnabled((pageIndex < jasperPrint.getPages().size() - 1));
      btnLast.setEnabled((pageIndex < jasperPrint.getPages().size() - 1));
      txtGoTo.setEnabled(btnFirst.isEnabled() || btnLast.isEnabled());
      txtGoTo.setText("" + (pageIndex + 1));
      lblStatus.setText(MessageFormat.format(java.util.ResourceBundle
          .getBundle("net/sf/jasperreports/view/viewer").getString(
              "page"), new Object[] { new Integer(pageIndex + 1),
          new Integer(jasperPrint.getPages().size()) }));
    } else {
      btnFirst.setEnabled(false);
      btnPrevious.setEnabled(false);
      btnNext.setEnabled(false);
      btnLast.setEnabled(false);
      txtGoTo.setEnabled(false);
      txtGoTo.setText("");
      lblStatus.setText("");
    }
  }

  /**
   * @param fileName
   * @param isXmlReport
   * @throws JRException
   */
  protected final void loadReport(final String fileName,
      final boolean isXmlReport) throws JRException {
    if (isXmlReport) {
      jasperPrint = JRPrintXmlLoader.load(fileName);
    } else {
      jasperPrint = (JasperPrint) JRLoader.loadObject(fileName);
    }

    type = TYPE_FILE_NAME;
    this.isXML = isXmlReport;
    reportFileName = fileName;
    btnReload.setEnabled(true);
    setPageIndex(0);
  }

  /**
   * @param is
   * @param isXmlReport
   * @throws JRException
   */
  protected final void loadReport(final InputStream is,
      final boolean isXmlReport) throws JRException {
    if (isXmlReport) {
      jasperPrint = JRPrintXmlLoader.load(is);
    } else {
      jasperPrint = (JasperPrint) JRLoader.loadObject(is);
    }

    type = TYPE_INPUT_STREAM;
    this.isXML = isXmlReport;
    btnReload.setEnabled(false);
    setPageIndex(0);
  }

  /**
   * @param jrPrint
   */
  protected final void loadReport(final JasperPrint jrPrint) {
    jasperPrint = jrPrint;
    type = TYPE_JASPER_PRINT;
    isXML = false;
    btnReload.setEnabled(false);
    setPageIndex(0);
  }

  @SuppressWarnings("unchecked")
  protected final void refreshPage() {
    if (jasperPrint == null || jasperPrint.getPages() == null
        || jasperPrint.getPages().size() == 0) {
      pnlPage.setVisible(false);
      btnSave.setEnabled(false);
      btnPrint.setEnabled(false);
      btnActualSize.setEnabled(false);
      btnFitPage.setEnabled(false);
      btnFitWidth.setEnabled(false);
      btnZoomIn.setEnabled(false);
      btnZoomOut.setEnabled(false);
      cmbZoom.setEnabled(false);

      if (jasperPrint != null) {
        JOptionPane.showMessageDialog(this, java.util.ResourceBundle
            .getBundle("net/sf/jasperreports/view/viewer")
            .getString("no.pages"));
      }

      return;
    }

    pnlPage.setVisible(true);
    btnSave.setEnabled(true);
    btnPrint.setEnabled(true);
    btnActualSize.setEnabled(true);
    btnFitPage.setEnabled(true);
    btnFitWidth.setEnabled(true);
    btnZoomIn.setEnabled(zoom < maxZoom);
    btnZoomOut.setEnabled(zoom > minZoom);
    cmbZoom.setEnabled(true);

    Image image = null;
    ImageIcon imageIcon = null;

    Dimension dim = new Dimension(
        (int) (jasperPrint.getPageWidth() * realZoom) + 8, // 2 from
        // border, 5
        // from
        // shadow
        // and 1
        // extra
        // pixel for
        // image
        (int) (jasperPrint.getPageHeight() * realZoom) + 8);
    pnlPage.setMaximumSize(dim);
    pnlPage.setMinimumSize(dim);
    pnlPage.setPreferredSize(dim);

    try {
      image = JasperPrintManager.printPageToImage(jasperPrint, pageIndex,
          realZoom);
      imageIcon = new ImageIcon(image);
    } catch (Exception e) {
      e.printStackTrace();
      JOptionPane.showMessageDialog(this, java.util.ResourceBundle
          .getBundle("net/sf/jasperreports/view/viewer").getString(
              "error.displaying"));
    }

    pnlLinks.removeAll();
    linksMap = new HashMap();

    java.util.List pages = jasperPrint.getPages();
    JRPrintPage page = (JRPrintPage) pages.get(pageIndex);
    Collection elements = page.getElements();
    if (elements != null && elements.size() > 0) {
      String toolTip = null;
      JPanel link = null;
      JRPrintElement element = null;
      JRPrintHyperlink hyperlink = null;
      for (Iterator it = elements.iterator(); it.hasNext();) {
        element = (JRPrintElement) it.next();
        if (element instanceof JRPrintHyperlink
            && ((JRPrintHyperlink) element).getHyperlinkType() != JRHyperlink.HYPERLINK_TYPE_NONE) {
          hyperlink = (JRPrintHyperlink) element;

          link = new JPanel();
          link.setCursor(new Cursor(Cursor.HAND_CURSOR));
          link.setLocation((int) (element.getX() * realZoom),
              (int) (element.getY() * realZoom));
          link.setSize((int) (element.getWidth() * realZoom),
              (int) (element.getHeight() * realZoom));
          link.setOpaque(false);

          toolTip = null;
          switch (hyperlink.getHyperlinkType()) {
          case JRHyperlink.HYPERLINK_TYPE_REFERENCE:
            toolTip = hyperlink.getHyperlinkReference();
            break;

          case JRHyperlink.HYPERLINK_TYPE_LOCAL_ANCHOR:
            if (hyperlink.getHyperlinkAnchor() != null) {
              toolTip = "#" + hyperlink.getHyperlinkAnchor();
            }
            break;

          case JRHyperlink.HYPERLINK_TYPE_LOCAL_PAGE:
            if (hyperlink.getHyperlinkPage() != null) {
              toolTip = "#page " + hyperlink.getHyperlinkPage();
            }
            break;

          case JRHyperlink.HYPERLINK_TYPE_REMOTE_ANCHOR:
            toolTip = "";
            if (hyperlink.getHyperlinkReference() != null) {
              toolTip = toolTip
                  + hyperlink.getHyperlinkReference();
            }
            if (hyperlink.getHyperlinkAnchor() != null) {
              toolTip = toolTip + "#"
                  + hyperlink.getHyperlinkAnchor();
            }
            break;

          case JRHyperlink.HYPERLINK_TYPE_REMOTE_PAGE:
            toolTip = "";
            if (hyperlink.getHyperlinkReference() != null) {
              toolTip = toolTip
                  + hyperlink.getHyperlinkReference();
            }
            if (hyperlink.getHyperlinkPage() != null) {
              toolTip = toolTip + "#page "
                  + hyperlink.getHyperlinkPage();
            }
            break;

          default:
            break;

          }

          link.setToolTipText(toolTip);
          link.addMouseListener(mouseListener);
          pnlLinks.add(link);
          linksMap.put(link, element);
        }
      }
    }

    lblPage.setIcon(imageIcon);
  }

  /**
   * @param container
   */
  private void emptyContainer(Container container) {
    Component[] components = container.getComponents();

    if (components != null) {
      for (int i = 0; i < components.length; i++) {
        if (components[i] instanceof Container) {
          emptyContainer((Container) components[i]);
        }
      }
    }

    components = null;
    container.removeAll();
    container = null;
  }

  /**
   * @return zoomrate
   */
  private float getZoomRatio() {
    float newZoom = zoom;

    try {
      newZoom = zoomDecimalFormat.parse(
          String.valueOf(cmbZoom.getEditor().getItem())).floatValue() / 100f;
    } catch (ParseException e) {
      e.printStackTrace();
    }

    return newZoom;
  }

  /**
   * @param newZoom
   */
  private void setZoomRatio(final float newZoom) {
    if (newZoom > 0) {
      cmbZoom.getEditor().setItem(
          zoomDecimalFormat.format(newZoom * 100) + "%");

      if (zoom != newZoom) {
        zoom = newZoom;
        realZoom = zoom * screenResolution / REPORT_RESOLUTION;

        refreshPage();
      }
    }
  }

  /**
   * @param newZoom
   */
  private void setRealZoomRatio(final float newZoom) {
    if (newZoom > 0 && realZoom != newZoom) {
      zoom = newZoom * REPORT_RESOLUTION / screenResolution;
      realZoom = newZoom;

      cmbZoom.getEditor().setItem(
          zoomDecimalFormat.format(zoom * 100) + "%");

      refreshPage();
    }
  }

  // Variables declaration - do not modify//GEN-BEGIN:variables
  private javax.swing.JToggleButton btnActualSize;

  private javax.swing.JButton btnFirst;

  private javax.swing.JToggleButton btnFitPage;

  private javax.swing.JToggleButton btnFitWidth;

  private javax.swing.JButton btnLast;

  private javax.swing.JButton btnNext;

  private javax.swing.JButton btnPrevious;

  private javax.swing.JButton btnPrint;

  private javax.swing.JButton btnReload;

  private javax.swing.JButton btnSave;

  private javax.swing.JButton btnZoomIn;

  private javax.swing.JButton btnZoomOut;

  private javax.swing.JComboBox cmbZoom;

  private javax.swing.JLabel jLabel1;

  private javax.swing.JPanel jPanel4;

  private javax.swing.JPanel jPanel5;

  private javax.swing.JPanel jPanel6;

  private javax.swing.JPanel jPanel7;

  private javax.swing.JPanel jPanel8;

  private javax.swing.JPanel jPanel9;

  private javax.swing.JLabel lblPage;

  private javax.swing.JLabel lblStatus;

  private javax.swing.JPanel pnlInScroll;

  private javax.swing.JPanel pnlLinks;

  private javax.swing.JPanel pnlMain;

  private javax.swing.JPanel pnlPage;

  private javax.swing.JPanel pnlSep01;

  private javax.swing.JPanel pnlSep02;

  private javax.swing.JPanel pnlSep03;

  private javax.swing.JPanel pnlStatus;

  private javax.swing.JScrollPane scrollPane;

  private javax.swing.JPanel tlbToolBar;

  private javax.swing.JTextField txtGoTo;
  // End of variables declaration//GEN-END:variables

}
TOP

Related Classes of no.ugland.utransprod.util.JRViewerProTrans

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.