Package org.pdfsam.plugin.split.components

Source Code of org.pdfsam.plugin.split.components.JBLevelCombo$FillThread

/*
* Created on 27-DEC-2008
* Copyright (C) 2008 by Andrea Vacondio.
*
* This program is free software; you can redistribute it and/or modify it under the terms of the
* GNU General Public License as published by the Free Software Foundation;
* either version 2 of the License.
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
* You should have received a copy of the GNU General Public License along with this program;
* if not, write to the Free Software Foundation, Inc.,
*  59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package org.pdfsam.plugin.split.components;

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.List;

import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

import org.apache.log4j.Logger;
import org.pdfsam.console.utils.PdfUtility;
import org.pdfsam.guiclient.commons.panels.JPdfSelectionPanel;
import org.pdfsam.guiclient.configuration.Configuration;
import org.pdfsam.guiclient.dto.PdfSelectionTableItem;
import org.pdfsam.i18n.GettextResource;

import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.RandomAccessFileOrArray;
import com.lowagie.text.pdf.SimpleBookmark;
/**
* Panel with the bookmarks level combo and the button to fill it
* @author Andrea Vacondio
*
*/
public class JBLevelCombo extends JPanel {
 
  private static final long serialVersionUID = -1413124292303614507L;
 
  private static final Logger LOG = Logger.getLogger(JBLevelCombo.class.getPackage().getName());
 
  private JComboBox levelCombo;
  private JButton fillCombo;
  private JPdfSelectionPanel inputPanel;
  private Thread filler = null;
 
  public JBLevelCombo(JPdfSelectionPanel inputPanel) {
    this.inputPanel = inputPanel;
    init();
  }
 
  private void init(){
    levelCombo = new JComboBox();
    levelCombo.setPreferredSize(new Dimension(45,20));
    fillCombo = new JButton();
   
    fillCombo.setText("< "+GettextResource.gettext(Configuration.getInstance().getI18nResourceBundle(),"Fill from document"));
    levelCombo.setEditable(true);
   
    fillCombo.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
        try {
            PdfSelectionTableItem[] items = inputPanel.getTableRows();
            if (items != null && items.length == 1) {
              if(filler == null){                
                 filler = new Thread(new FillThread(items[0]));
                 filler.start();
              }
            }
            else {
              JOptionPane.showMessageDialog(getParent(), GettextResource.gettext(Configuration.getInstance()
                  .getI18nResourceBundle(), "Please select a pdf document."), GettextResource.gettext(
                      Configuration.getInstance().getI18nResourceBundle(), "Warning"), JOptionPane.WARNING_MESSAGE);
            }
        } catch (Exception ex) {
          LOG.error(GettextResource.gettext(Configuration.getInstance().getI18nResourceBundle(), "Error: "), ex);
        }
      }
    });
   
    setLayout(new BoxLayout(this, BoxLayout.LINE_AXIS));
    add(Box.createHorizontalGlue());
    add(levelCombo);
    add(Box.createRigidArea(new Dimension(10, 0)));
    add(fillCombo);

   
  }
  /**
   * Fills the levels combo
   * @author Andrea Vacondio
   *
   */
  private class FillThread implements Runnable {
   
    private PdfSelectionTableItem item;
   
    /**
     * @param item
     */
    public FillThread(PdfSelectionTableItem item) {
      super();
      this.item = item;
    }

    public void run() {
      fillCombo.setEnabled(false);
      levelCombo.setEnabled(false);
      fillCombo.setToolTipText(GettextResource.gettext(Configuration.getInstance().getI18nResourceBundle(), "Getting bookmarks max depth"));   
      try {
        levelCombo.removeAllItems();
        byte[] password = null;
        if((item.getPassword()) != null && (item.getPassword()).length()>0){
          password = item.getPassword().getBytes();
        }
        PdfReader pdfReader = new PdfReader(new RandomAccessFileOrArray(item.getInputFile().getAbsolutePath()),password);       
        pdfReader.consolidateNamedDestinations();
        List bookmarks = SimpleBookmark.getBookmark(pdfReader);
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        SimpleBookmark.exportToXML(bookmarks, out, "UTF-8", false);
        ByteArrayInputStream input = new ByteArrayInputStream(out.toByteArray());     
        int maxDepth = PdfUtility.getMaxBookmarksDepth(input);
        for(int i = 1; i<=maxDepth; i++){
          levelCombo.addItem(i+"");
        }
      } catch (Throwable t) {
        LOG.error(GettextResource.gettext(Configuration.getInstance().getI18nResourceBundle(), "Unable to retrieve bookmarks maximum depth."), t);
      } finally {
        fillCombo.setEnabled(true);
        levelCombo.setEnabled(true);
        fillCombo.setToolTipText(null);
        filler = null;
      }

    }

  }
 
  public void resetComponent(){
    levelCombo.removeAllItems();
    setEnabled(isEnabled());
  }

  /**
   * @return selected index
   * @see javax.swing.JComboBox#getSelectedIndex()
   */
  public int getSelectedIndex() {
    return levelCombo.getSelectedIndex();
  }

  /**
   * @return selected item
   * @see javax.swing.JComboBox#getSelectedItem()
   */
  public Object getSelectedItem() {
    return levelCombo.getSelectedItem();
  }

  /**
   *
   * @see javax.swing.JComboBox#removeAllItems()
   */
  public void removeAllItems() {
    levelCombo.removeAllItems();
  }

  /**
   * @param anObject
   * @see javax.swing.JComboBox#setSelectedItem(java.lang.Object)
   */
  public void setSelectedItem(Object anObject) {
    levelCombo.setSelectedItem(anObject);
  }

  /* (non-Javadoc)
   * @see javax.swing.JComponent#setEnabled(boolean)
   */
  public void setEnabled(boolean enabled) {
    super.setEnabled(enabled);
    levelCombo.setEnabled(enabled);
    fillCombo.setEnabled(enabled);     
  }

  /**
   * @return the levelCombo
   */
  public JComboBox getLevelCombo() {
    return levelCombo;
  }

  /**
   * @return the fillCombo
   */
  public JButton getFillCombo() {
    return fillCombo;
  }

  /* (non-Javadoc)
   * @see javax.swing.JComponent#requestFocus()
   */
  public void requestFocus() {
    levelCombo.requestFocus();
  }
 
 
}
TOP

Related Classes of org.pdfsam.plugin.split.components.JBLevelCombo$FillThread

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.