org.pdfsam.plugin.split.GUI.SplitMainGUI.java Source code

Java tutorial

Introduction

Here is the source code for org.pdfsam.plugin.split.GUI.SplitMainGUI.java

Source

/*
 * Created on 17-Feb-2006
 * Copyright (C) 2006 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.GUI;

import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FocusTraversalPolicy;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;

import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.ButtonModel;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import javax.swing.SpringLayout;

import org.apache.log4j.Logger;
import org.dom4j.Element;
import org.dom4j.Node;
import org.pdfsam.console.business.dto.commands.SplitParsedCommand;
import org.pdfsam.guiclient.business.listeners.EnterDoClickListener;
import org.pdfsam.guiclient.commons.business.listeners.CompressCheckBoxItemListener;
import org.pdfsam.guiclient.commons.components.CommonComponentsFactory;
import org.pdfsam.guiclient.commons.components.JPdfVersionCombo;
import org.pdfsam.guiclient.commons.components.sharedchooser.SharedJFileChooser;
import org.pdfsam.guiclient.commons.components.sharedchooser.SharedJFileChooserType;
import org.pdfsam.guiclient.commons.models.SimplePdfSelectionTableModel;
import org.pdfsam.guiclient.commons.panels.JPdfSelectionPanel;
import org.pdfsam.guiclient.configuration.Configuration;
import org.pdfsam.guiclient.dto.PdfSelectionTableItem;
import org.pdfsam.guiclient.dto.StringItem;
import org.pdfsam.guiclient.exceptions.LoadJobException;
import org.pdfsam.guiclient.exceptions.SaveJobException;
import org.pdfsam.guiclient.gui.components.JHelpLabel;
import org.pdfsam.guiclient.plugins.interfaces.AbstractPlugablePanel;
import org.pdfsam.i18n.GettextResource;
import org.pdfsam.plugin.split.components.JBLevelCombo;
import org.pdfsam.plugin.split.components.JSplitRadioButton;
import org.pdfsam.plugin.split.components.JSplitRadioButtonModel;
import org.pdfsam.plugin.split.components.JSplitSizeCombo;
import org.pdfsam.plugin.split.listeners.RadioListener;
import org.pdfsam.plugin.split.listeners.RunButtonActionListener;

/**
 * Plugable JPanel provides a GUI for split functions.
 * 
 * @author Andrea Vacondio
 * @see javax.swing.JPanel
 */
public class SplitMainGUI extends AbstractPlugablePanel {

    private static final long serialVersionUID = -5907189950338614835L;

    private static final Logger log = Logger.getLogger(SplitMainGUI.class.getPackage().getName());

    private JTextField outPrefixText = CommonComponentsFactory.getInstance()
            .createTextField(CommonComponentsFactory.PREFIX_TEXT_FIELD_TYPE_FULL_MENU);
    private SpringLayout outputPanelLayout;
    private SpringLayout destinationPanelLayout;
    private JTextField destinationFolderText = CommonComponentsFactory.getInstance()
            .createTextField(CommonComponentsFactory.DESTINATION_TEXT_FIELD_TYPE);
    private JTextField thisPageTextField = CommonComponentsFactory.getInstance()
            .createTextField(CommonComponentsFactory.SIMPLE_TEXT_FIELD_TYPE);
    private JTextField nPagesTextField = CommonComponentsFactory.getInstance()
            .createTextField(CommonComponentsFactory.SIMPLE_TEXT_FIELD_TYPE);
    private JHelpLabel checksHelpLabel;
    private SpringLayout optionsPaneLayout;
    private JHelpLabel prefixHelpLabel;
    private JHelpLabel destinationHelpLabel;
    private SpringLayout splitSpringLayout;
    private String splitType = "";
    private JPdfVersionCombo versionCombo = new JPdfVersionCombo(true);
    private Configuration config;
    private JPdfSelectionPanel selectionPanel = new JPdfSelectionPanel(JPdfSelectionPanel.SINGLE_SELECTABLE_FILE,
            SimplePdfSelectionTableModel.DEFAULT_SHOWED_COLUMNS_NUMBER, false, false);
    private JSplitSizeCombo splitSizeCombo = new JSplitSizeCombo();
    private JBLevelCombo bLevelCombo = new JBLevelCombo(selectionPanel);

    // button
    private final JButton browseDestButton = CommonComponentsFactory.getInstance()
            .createButton(CommonComponentsFactory.BROWSE_BUTTON_TYPE);
    private final JButton runButton = CommonComponentsFactory.getInstance()
            .createButton(CommonComponentsFactory.RUN_BUTTON_TYPE);
    // key_listeners
    private final EnterDoClickListener browsedEnterkeyListener = new EnterDoClickListener(browseDestButton);
    private final EnterDoClickListener runEnterkeyListener = new EnterDoClickListener(runButton);

    // split_radio
    private final JSplitRadioButton burstRadio = new JSplitRadioButton(SplitParsedCommand.S_BURST);
    private final JSplitRadioButton everyNRadio = new JSplitRadioButton(SplitParsedCommand.S_NSPLIT);
    private final JSplitRadioButton evenRadio = new JSplitRadioButton(SplitParsedCommand.S_EVEN);
    private final JSplitRadioButton oddRadio = new JSplitRadioButton(SplitParsedCommand.S_ODD);
    private final JSplitRadioButton thisPageRadio = new JSplitRadioButton(SplitParsedCommand.S_SPLIT);
    private final JSplitRadioButton sizeRadio = new JSplitRadioButton(SplitParsedCommand.S_SIZE);
    private final JSplitRadioButton bookmarksLevel = new JSplitRadioButton(SplitParsedCommand.S_BLEVEL);

    private RadioListener radioListener;
    // radio
    private final JRadioButton sameAsSourceRadio = new JRadioButton();
    private final JRadioButton chooseAFolderRadio = new JRadioButton();
    private ButtonGroup splitOptionsRadioGroup;
    // checks
    private final JCheckBox overwriteCheckbox = CommonComponentsFactory.getInstance()
            .createCheckBox(CommonComponentsFactory.OVERWRITE_CHECKBOX_TYPE);
    private final JCheckBox outputCompressedCheck = CommonComponentsFactory.getInstance()
            .createCheckBox(CommonComponentsFactory.COMPRESS_CHECKBOX_TYPE);

    // focus policy
    private final SplitFocusPolicy splitFocusPolicy = new SplitFocusPolicy();

    // panels
    private final JPanel splitOptionsPanel = new JPanel();
    private final JPanel destinationPanel = new JPanel();
    private final JPanel outputOptionsPanel = new JPanel();
    private final JPanel splitTypesPanel = new JPanel();

    // labels
    private final JLabel outPrefixLabel = new JLabel();
    private final JLabel outputVersionLabel = CommonComponentsFactory.getInstance()
            .createLabel(CommonComponentsFactory.PDF_VERSION_LABEL);

    private final String PLUGIN_AUTHOR = "Andrea Vacondio";
    private final String PLUGIN_VERSION = "0.5.7";

    /**
     * Constructor
     * 
     */
    public SplitMainGUI() {
        super();
        initialize();
    }

    private void initialize() {
        config = Configuration.getInstance();
        setPanelIcon("/images/split.png");
        setPreferredSize(new Dimension(500, 570));

        //        
        splitSpringLayout = new SpringLayout();
        setLayout(splitSpringLayout);
        add(selectionPanel);

        // SPLIT_SECTION
        optionsPaneLayout = new SpringLayout();
        splitOptionsPanel.setLayout(optionsPaneLayout);

        splitOptionsPanel.setBorder(BorderFactory
                .createTitledBorder(GettextResource.gettext(config.getI18nResourceBundle(), "Split options")));
        add(splitOptionsPanel);

        GridLayout splitOptionsLayout = new GridLayout(0, 3, 5, 5);
        splitTypesPanel.setLayout(splitOptionsLayout);

        burstRadio.setText(
                GettextResource.gettext(config.getI18nResourceBundle(), "Burst (split into single pages)"));
        everyNRadio.setText(GettextResource.gettext(config.getI18nResourceBundle(), "Split every \"n\" pages"));
        evenRadio.setText(GettextResource.gettext(config.getI18nResourceBundle(), "Split even pages"));
        oddRadio.setText(GettextResource.gettext(config.getI18nResourceBundle(), "Split odd pages"));
        nPagesTextField.setEnabled(false);
        thisPageRadio.setText(GettextResource.gettext(config.getI18nResourceBundle(), "Split after these pages"));
        sizeRadio.setText(GettextResource.gettext(config.getI18nResourceBundle(), "Split at this size"));
        bookmarksLevel.setText(GettextResource.gettext(config.getI18nResourceBundle(), "Split by bookmarks level"));
        thisPageTextField.setEnabled(false);
        splitSizeCombo.setEnabled(false);
        bLevelCombo.setEnabled(false);

        splitTypesPanel.add(burstRadio);
        splitTypesPanel.add(thisPageRadio);
        splitTypesPanel.add(thisPageTextField);

        splitTypesPanel.add(evenRadio);
        splitTypesPanel.add(everyNRadio);
        splitTypesPanel.add(nPagesTextField);

        splitTypesPanel.add(oddRadio);
        splitTypesPanel.add(sizeRadio);
        splitTypesPanel.add(splitSizeCombo);

        splitTypesPanel.add(new JLabel());
        splitTypesPanel.add(bookmarksLevel);
        splitTypesPanel.add(bLevelCombo);

        splitOptionsPanel.add(splitTypesPanel);

        String helpText = "<html><body><b>"
                + GettextResource.gettext(config.getI18nResourceBundle(), "Split options") + "</b><ul>" + "<li><b>"
                + GettextResource.gettext(config.getI18nResourceBundle(), "Burst") + ":</b> "
                + GettextResource.gettext(config.getI18nResourceBundle(),
                        "Explode the pdf document into single pages")
                + ".</li>" + "<li><b>"
                + GettextResource.gettext(config.getI18nResourceBundle(), "Split every \"n\" pages") + ":</b> "
                + GettextResource.gettext(config.getI18nResourceBundle(), "Split the document every \"n\" pages")
                + ".</li>" + "<li><b>" + GettextResource.gettext(config.getI18nResourceBundle(), "Split even pages")
                + ":</b> "
                + GettextResource.gettext(config.getI18nResourceBundle(), "Split the document every even page")
                + ".</li>" + "<li><b>" + GettextResource.gettext(config.getI18nResourceBundle(), "Split odd pages")
                + ":</b> "
                + GettextResource.gettext(config.getI18nResourceBundle(), "Split the document every odd page")
                + ".</li>" + "<li><b>"
                + GettextResource.gettext(config.getI18nResourceBundle(), "Split after these pages") + ":</b> "
                + GettextResource.gettext(config.getI18nResourceBundle(),
                        "Split the document after page numbers (num1-num2-num3..)")
                + ".</li>" + "<li><b>"
                + GettextResource.gettext(config.getI18nResourceBundle(), "Split at this size") + ":</b> "
                + GettextResource.gettext(config.getI18nResourceBundle(),
                        "Split the document in files of the given size (roughly)")
                + ".</li>" + "<li><b>"
                + GettextResource.gettext(config.getI18nResourceBundle(), "Split by bookmarks level") + ":</b> "
                + GettextResource.gettext(config.getI18nResourceBundle(),
                        "Split the document at pages referred by bookmarks of the given level")
                + ".</li>" + "</ul></body></html>";
        checksHelpLabel = new JHelpLabel(helpText, true);
        splitOptionsPanel.add(checksHelpLabel);
        // END_SPLIT_SECTION

        // RADIO_LISTENERS
        /* This listeners enable or disable text field based on what you select */
        radioListener = new RadioListener(this, nPagesTextField, thisPageTextField, splitSizeCombo, bLevelCombo);
        burstRadio.setActionCommand(RadioListener.DISABLE_ALL);
        burstRadio.addActionListener(radioListener);
        everyNRadio.setActionCommand(RadioListener.ENABLE_FIRST);
        everyNRadio.addActionListener(radioListener);
        evenRadio.setActionCommand(RadioListener.DISABLE_ALL);
        evenRadio.addActionListener(radioListener);
        oddRadio.setActionCommand(RadioListener.DISABLE_ALL);
        oddRadio.addActionListener(radioListener);
        thisPageRadio.setActionCommand(RadioListener.ENABLE_SECOND);
        thisPageRadio.addActionListener(radioListener);
        sizeRadio.setActionCommand(RadioListener.ENABLE_THIRD);
        sizeRadio.addActionListener(radioListener);
        bookmarksLevel.setActionCommand(RadioListener.ENABLE_FOURTH);
        bookmarksLevel.addActionListener(radioListener);
        // END_RADIO_LISTENERS
        // DESTINATION_PANEL
        destinationPanelLayout = new SpringLayout();
        destinationPanel.setLayout(destinationPanelLayout);
        destinationPanel.setBorder(BorderFactory
                .createTitledBorder(GettextResource.gettext(config.getI18nResourceBundle(), "Destination folder")));
        add(destinationPanel);
        // END_DESTINATION_PANEL
        // DESTINATION_RADIOS
        sameAsSourceRadio.setText(GettextResource.gettext(config.getI18nResourceBundle(), "Same as source"));
        destinationPanel.add(sameAsSourceRadio);

        chooseAFolderRadio.setSelected(true);
        chooseAFolderRadio.setText(GettextResource.gettext(config.getI18nResourceBundle(), "Choose a folder"));
        destinationPanel.add(chooseAFolderRadio);
        // END_DESTINATION_RADIOS
        // RADIOGROUP
        splitOptionsRadioGroup = new ButtonGroup();
        splitOptionsRadioGroup.add(burstRadio);
        splitOptionsRadioGroup.add(everyNRadio);
        splitOptionsRadioGroup.add(evenRadio);
        splitOptionsRadioGroup.add(oddRadio);
        splitOptionsRadioGroup.add(thisPageRadio);
        splitOptionsRadioGroup.add(sizeRadio);
        splitOptionsRadioGroup.add(bookmarksLevel);
        final ButtonGroup outputRadioGroup = new ButtonGroup();
        outputRadioGroup.add(sameAsSourceRadio);
        outputRadioGroup.add(chooseAFolderRadio);
        // END_RADIOGROUP

        destinationPanel.add(destinationFolderText);
        destinationPanel.add(overwriteCheckbox);

        destinationPanel.add(outputCompressedCheck);

        outputCompressedCheck.addItemListener(new CompressCheckBoxItemListener(versionCombo));
        outputCompressedCheck.setSelected(true);

        destinationPanel.add(versionCombo);

        destinationPanel.add(outputVersionLabel);
        browseDestButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                JFileChooser fileChooser = SharedJFileChooser.getInstance(SharedJFileChooserType.NO_FILTER,
                        JFileChooser.DIRECTORIES_ONLY, destinationFolderText.getText());
                if (fileChooser.showOpenDialog(browseDestButton.getParent()) == JFileChooser.APPROVE_OPTION) {
                    File chosenFile = fileChooser.getSelectedFile();
                    if (chosenFile != null) {
                        destinationFolderText.setText(chosenFile.getAbsolutePath());
                    }
                }
            }
        });
        destinationPanel.add(browseDestButton);
        // HELP_LABEL_DESTINATION
        String helpTextDest = "<html><body><b>"
                + GettextResource.gettext(config.getI18nResourceBundle(), "Destination output directory") + "</b>"
                + "<p>"
                + GettextResource.gettext(config.getI18nResourceBundle(),
                        "Use the same output folder as the input file or choose a folder.")
                + "</p>" + "<p>"
                + GettextResource.gettext(config.getI18nResourceBundle(),
                        "To choose a folder browse or enter the full path to the destination output directory.")
                + "</p>" + "<p>"
                + GettextResource.gettext(config.getI18nResourceBundle(),
                        "Check the box if you want to overwrite the output files if they already exist.")
                + "</p>" + "<p>"
                + GettextResource.gettext(config.getI18nResourceBundle(),
                        "Check the box if you want compressed output files.")
                + " " + GettextResource.gettext(config.getI18nResourceBundle(), "PDF version 1.5 or above.")
                + "</p>" + "<p>" + GettextResource.gettext(config.getI18nResourceBundle(),
                        "Set the pdf version of the ouput document.")
                + "</p>" + "</body></html>";
        destinationHelpLabel = new JHelpLabel(helpTextDest, true);
        destinationPanel.add(destinationHelpLabel);
        // END_HELP_LABEL_DESTINATION

        // S_PANEL
        outputOptionsPanel.setBorder(BorderFactory
                .createTitledBorder(GettextResource.gettext(config.getI18nResourceBundle(), "Output options")));
        outputPanelLayout = new SpringLayout();
        outputOptionsPanel.setLayout(outputPanelLayout);
        add(outputOptionsPanel);

        outPrefixLabel
                .setText(GettextResource.gettext(config.getI18nResourceBundle(), "Output file names prefix:"));
        outputOptionsPanel.add(outPrefixLabel);

        outPrefixText.setPreferredSize(new Dimension(180, 20));
        outputOptionsPanel.add(outPrefixText);
        // END_S_PANEL
        // HELP_LABEL_PREFIX
        String helpTextPrefix = "<html><body><b>"
                + GettextResource.gettext(config.getI18nResourceBundle(), "Output files prefix") + "</b>" + "<p> "
                + GettextResource.gettext(config.getI18nResourceBundle(),
                        "If it contains \"[CURRENTPAGE]\", \"[TIMESTAMP]\", \"[FILENUMBER]\" or \"[BOOKMARK_NAME]\" it performs variable substitution.")
                + "</p>" + "<p> "
                + GettextResource.gettext(config.getI18nResourceBundle(),
                        "Ex. prefix_[BASENAME]_[CURRENTPAGE] generates prefix_FileName_005.pdf.")
                + "</p>" + "<br><p> "
                + GettextResource.gettext(config.getI18nResourceBundle(),
                        "If it doesn't contain \"[CURRENTPAGE]\", \"[TIMESTAMP]\" or \"[FILENUMBER]\" it generates oldstyle output file names.")
                + "</p>" + "<br><p> "
                + GettextResource.gettext(config.getI18nResourceBundle(), "Available variables")
                + ": [CURRENTPAGE], [TIMESTAMP], [BASENAME], [FILENUMBER], [BOOKMARK_NAME].</p>" + "</body></html>";
        prefixHelpLabel = new JHelpLabel(helpTextPrefix, true);
        outputOptionsPanel.add(prefixHelpLabel);
        // END_HELP_LABEL_PREFIX
        // RUN_BUTTON
        // listener
        runButton.addActionListener(new RunButtonActionListener(this));
        runButton.setToolTipText(GettextResource.gettext(config.getI18nResourceBundle(), "Split selected file"));
        runButton.setMargin(new Insets(5, 5, 5, 5));
        runButton.setSize(new Dimension(88, 25));
        add(runButton);
        // END_RUN_BUTTON

        // RADIO_LISTENERS
        sameAsSourceRadio.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                destinationFolderText.setEnabled(false);
                browseDestButton.setEnabled(false);
            }
        });

        chooseAFolderRadio.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                destinationFolderText.setEnabled(true);
                browseDestButton.setEnabled(true);
            }
        });
        // END_RADIO_LISTENERS
        // ENTER_KEY_LISTENERS
        browseDestButton.addKeyListener(browsedEnterkeyListener);
        runButton.addKeyListener(runEnterkeyListener);
        outPrefixText.addKeyListener(runEnterkeyListener);
        // END_ENTER_KEY_LISTENERS
        setLayout();
    }

    /**
     * @return Returns the Plugin author.
     */
    public String getPluginAuthor() {
        return PLUGIN_AUTHOR;
    }

    /**
     * @return Returns the Plugin name.
     */
    public String getPluginName() {
        return GettextResource.gettext(config.getI18nResourceBundle(), "Split");
    }

    /**
     * @return Returns the version.
     */
    public String getVersion() {
        return PLUGIN_VERSION;
    }

    public Node getJobNode(Node arg0, boolean savePasswords) throws SaveJobException {
        try {
            if (arg0 != null) {
                Element fileSource = ((Element) arg0).addElement("source");
                PdfSelectionTableItem[] items = selectionPanel.getTableRows();
                if (items != null && items.length > 0) {
                    fileSource.addAttribute("value", items[0].getInputFile().getAbsolutePath());
                    if (savePasswords) {
                        fileSource.addAttribute("password", items[0].getPassword());
                    }
                }

                Element splitOption = ((Element) arg0).addElement("split_option");
                if (splitOptionsRadioGroup.getSelection() != null) {
                    splitOption.addAttribute("value",
                            ((JSplitRadioButtonModel) splitOptionsRadioGroup.getSelection()).getSplitCommand());
                }
                Element splitNpages = ((Element) arg0).addElement("npages");
                splitNpages.addAttribute("value", nPagesTextField.getText());

                Element splitThispage = ((Element) arg0).addElement("thispage");
                splitThispage.addAttribute("value", thisPageTextField.getText());

                Element splitSize = ((Element) arg0).addElement("splitsize");
                splitSize.addAttribute("value", splitSizeCombo.getSelectedItem().toString());

                Element bookLevel = ((Element) arg0).addElement("bookmarkslevel");
                if (bLevelCombo.getSelectedItem() != null) {
                    bookLevel.addAttribute("value", bLevelCombo.getSelectedItem().toString());
                }

                Element fileDestination = ((Element) arg0).addElement("destination");
                fileDestination.addAttribute("value", destinationFolderText.getText());

                Element filePrefix = ((Element) arg0).addElement("prefix");
                filePrefix.addAttribute("value", outPrefixText.getText());

                Element file_overwrite = ((Element) arg0).addElement("overwrite");
                file_overwrite.addAttribute("value", overwriteCheckbox.isSelected() ? TRUE : FALSE);

                Element fileCompress = ((Element) arg0).addElement("compressed");
                fileCompress.addAttribute("value", outputCompressedCheck.isSelected() ? TRUE : FALSE);

                Element pdfVersion = ((Element) arg0).addElement("pdfversion");
                pdfVersion.addAttribute("value", ((StringItem) versionCombo.getSelectedItem()).getId());

            }
            return arg0;
        } catch (Exception ex) {
            throw new SaveJobException(ex);
        }
    }

    public void loadJobNode(Node arg0) throws LoadJobException {
        try {
            Node fileSource = (Node) arg0.selectSingleNode("source/@value");
            if (fileSource != null && fileSource.getText().length() > 0) {
                Node filePwd = (Node) arg0.selectSingleNode("source/@password");
                String password = null;
                if (filePwd != null && filePwd.getText().length() > 0) {
                    password = filePwd.getText();
                }
                selectionPanel.getLoader().addFile(new File(fileSource.getText()), password);
            }

            Node splitOption = (Node) arg0.selectSingleNode("split_option/@value");
            if (splitOption != null) {
                if (splitOption.getText().equals(burstRadio.getSplitCommand()))
                    burstRadio.doClick();
                else if (splitOption.getText().equals(everyNRadio.getSplitCommand()))
                    everyNRadio.doClick();
                else if (splitOption.getText().equals(evenRadio.getSplitCommand()))
                    evenRadio.doClick();
                else if (splitOption.getText().equals(oddRadio.getSplitCommand()))
                    oddRadio.doClick();
                else if (splitOption.getText().equals(thisPageRadio.getSplitCommand()))
                    thisPageRadio.doClick();
                else if (splitOption.getText().equals(sizeRadio.getSplitCommand()))
                    sizeRadio.doClick();
                else if (splitOption.getText().equals(bookmarksLevel.getSplitCommand()))
                    bookmarksLevel.doClick();
            }
            Node splitNpages = (Node) arg0.selectSingleNode("npages/@value");
            if (splitNpages != null) {
                nPagesTextField.setText(splitNpages.getText());
            }

            Node splitThispage = (Node) arg0.selectSingleNode("thispage/@value");
            if (splitThispage != null) {
                thisPageTextField.setText(splitThispage.getText());
            }

            Node splitSize = (Node) arg0.selectSingleNode("splitsize/@value");
            if (splitSize != null) {
                splitSizeCombo.setSelectedItem(splitSize.getText());
            }

            Node bookLevel = (Node) arg0.selectSingleNode("bookmarkslevel/@value");
            if (bookLevel != null) {
                bLevelCombo.setSelectedItem(bookLevel.getText());
            }

            Node fileDestination = (Node) arg0.selectSingleNode("destination/@value");
            if (fileDestination != null && fileDestination.getText().length() > 0) {
                destinationFolderText.setText(fileDestination.getText());
                chooseAFolderRadio.doClick();
            } else {
                sameAsSourceRadio.doClick();
            }

            Node fileOverwrite = (Node) arg0.selectSingleNode("overwrite/@value");
            if (fileOverwrite != null) {
                overwriteCheckbox.setSelected(TRUE.equals(fileOverwrite.getText()));
            }

            Node fileCompressed = (Node) arg0.selectSingleNode("compressed/@value");
            if (fileCompressed != null && TRUE.equals(fileCompressed.getText())) {
                outputCompressedCheck.doClick();
            }

            Node filePrefix = (Node) arg0.selectSingleNode("prefix/@value");
            if (filePrefix != null) {
                outPrefixText.setText(filePrefix.getText());
            }

            Node pdfVersion = (Node) arg0.selectSingleNode("pdfversion/@value");
            if (pdfVersion != null) {
                for (int i = 0; i < versionCombo.getItemCount(); i++) {
                    if (((StringItem) versionCombo.getItemAt(i)).getId().equals(pdfVersion.getText())) {
                        versionCombo.setSelectedIndex(i);
                        break;
                    }
                }
            }

            log.info(GettextResource.gettext(config.getI18nResourceBundle(), "Split section loaded."));
        } catch (Exception ex) {
            log.error(GettextResource.gettext(config.getI18nResourceBundle(), "Error: "), ex);
        }
    }

    /**
     * Set plugin layout for each component
     * 
     */
    private void setLayout() {
        splitSpringLayout.putConstraint(SpringLayout.SOUTH, selectionPanel, 115, SpringLayout.NORTH, this);
        splitSpringLayout.putConstraint(SpringLayout.EAST, selectionPanel, 0, SpringLayout.EAST, this);
        splitSpringLayout.putConstraint(SpringLayout.NORTH, selectionPanel, 0, SpringLayout.NORTH, this);
        splitSpringLayout.putConstraint(SpringLayout.WEST, selectionPanel, 0, SpringLayout.WEST, this);
        // LAYOUT
        splitSpringLayout.putConstraint(SpringLayout.SOUTH, splitOptionsPanel, 145, SpringLayout.NORTH,
                splitOptionsPanel);
        splitSpringLayout.putConstraint(SpringLayout.EAST, splitOptionsPanel, 0, SpringLayout.EAST, this);
        splitSpringLayout.putConstraint(SpringLayout.NORTH, splitOptionsPanel, 20, SpringLayout.SOUTH,
                selectionPanel);
        splitSpringLayout.putConstraint(SpringLayout.WEST, splitOptionsPanel, 0, SpringLayout.WEST, selectionPanel);

        splitSpringLayout.putConstraint(SpringLayout.SOUTH, destinationPanel, 160, SpringLayout.NORTH,
                destinationPanel);
        splitSpringLayout.putConstraint(SpringLayout.EAST, destinationPanel, 0, SpringLayout.EAST,
                splitOptionsPanel);
        splitSpringLayout.putConstraint(SpringLayout.NORTH, destinationPanel, 10, SpringLayout.SOUTH,
                splitOptionsPanel);
        splitSpringLayout.putConstraint(SpringLayout.WEST, destinationPanel, 0, SpringLayout.WEST,
                splitOptionsPanel);

        destinationPanelLayout.putConstraint(SpringLayout.SOUTH, sameAsSourceRadio, 25, SpringLayout.NORTH,
                sameAsSourceRadio);
        destinationPanelLayout.putConstraint(SpringLayout.NORTH, sameAsSourceRadio, 0, SpringLayout.NORTH,
                destinationPanel);
        destinationPanelLayout.putConstraint(SpringLayout.WEST, sameAsSourceRadio, 10, SpringLayout.WEST,
                destinationPanel);
        destinationPanelLayout.putConstraint(SpringLayout.SOUTH, chooseAFolderRadio, 0, SpringLayout.SOUTH,
                sameAsSourceRadio);
        destinationPanelLayout.putConstraint(SpringLayout.NORTH, chooseAFolderRadio, 0, SpringLayout.NORTH,
                sameAsSourceRadio);
        destinationPanelLayout.putConstraint(SpringLayout.WEST, chooseAFolderRadio, 20, SpringLayout.EAST,
                sameAsSourceRadio);

        destinationPanelLayout.putConstraint(SpringLayout.SOUTH, destinationFolderText, 50, SpringLayout.NORTH,
                destinationPanel);
        destinationPanelLayout.putConstraint(SpringLayout.NORTH, destinationFolderText, 30, SpringLayout.NORTH,
                destinationPanel);
        destinationPanelLayout.putConstraint(SpringLayout.EAST, destinationFolderText, -105, SpringLayout.EAST,
                destinationPanel);
        destinationPanelLayout.putConstraint(SpringLayout.WEST, destinationFolderText, 5, SpringLayout.WEST,
                destinationPanel);

        destinationPanelLayout.putConstraint(SpringLayout.SOUTH, overwriteCheckbox, 17, SpringLayout.NORTH,
                overwriteCheckbox);
        destinationPanelLayout.putConstraint(SpringLayout.NORTH, overwriteCheckbox, 5, SpringLayout.SOUTH,
                destinationFolderText);
        destinationPanelLayout.putConstraint(SpringLayout.WEST, overwriteCheckbox, 0, SpringLayout.WEST,
                destinationFolderText);

        destinationPanelLayout.putConstraint(SpringLayout.SOUTH, outputCompressedCheck, 17, SpringLayout.NORTH,
                outputCompressedCheck);
        destinationPanelLayout.putConstraint(SpringLayout.NORTH, outputCompressedCheck, 5, SpringLayout.SOUTH,
                overwriteCheckbox);
        destinationPanelLayout.putConstraint(SpringLayout.WEST, outputCompressedCheck, 0, SpringLayout.WEST,
                destinationFolderText);

        destinationPanelLayout.putConstraint(SpringLayout.SOUTH, outputVersionLabel, 17, SpringLayout.NORTH,
                outputVersionLabel);
        destinationPanelLayout.putConstraint(SpringLayout.NORTH, outputVersionLabel, 8, SpringLayout.SOUTH,
                outputCompressedCheck);
        destinationPanelLayout.putConstraint(SpringLayout.WEST, outputVersionLabel, 0, SpringLayout.WEST,
                destinationFolderText);

        destinationPanelLayout.putConstraint(SpringLayout.SOUTH, versionCombo, 0, SpringLayout.SOUTH,
                outputVersionLabel);
        destinationPanelLayout.putConstraint(SpringLayout.WEST, versionCombo, 2, SpringLayout.EAST,
                outputVersionLabel);

        destinationPanelLayout.putConstraint(SpringLayout.SOUTH, browseDestButton, 0, SpringLayout.SOUTH,
                destinationFolderText);
        destinationPanelLayout.putConstraint(SpringLayout.EAST, browseDestButton, -10, SpringLayout.EAST,
                destinationPanel);
        destinationPanelLayout.putConstraint(SpringLayout.NORTH, browseDestButton, -25, SpringLayout.SOUTH,
                destinationFolderText);
        destinationPanelLayout.putConstraint(SpringLayout.WEST, browseDestButton, -98, SpringLayout.EAST,
                destinationPanel);

        destinationPanelLayout.putConstraint(SpringLayout.SOUTH, destinationHelpLabel, -1, SpringLayout.SOUTH,
                destinationPanel);
        destinationPanelLayout.putConstraint(SpringLayout.EAST, destinationHelpLabel, -1, SpringLayout.EAST,
                destinationPanel);

        splitSpringLayout.putConstraint(SpringLayout.SOUTH, outputOptionsPanel, 55, SpringLayout.NORTH,
                outputOptionsPanel);
        splitSpringLayout.putConstraint(SpringLayout.EAST, outputOptionsPanel, 0, SpringLayout.EAST,
                destinationPanel);
        splitSpringLayout.putConstraint(SpringLayout.NORTH, outputOptionsPanel, 10, SpringLayout.SOUTH,
                destinationPanel);
        splitSpringLayout.putConstraint(SpringLayout.WEST, outputOptionsPanel, 0, SpringLayout.WEST,
                destinationPanel);
        outputPanelLayout.putConstraint(SpringLayout.SOUTH, outPrefixLabel, 20, SpringLayout.NORTH,
                outputOptionsPanel);
        outputPanelLayout.putConstraint(SpringLayout.NORTH, outPrefixLabel, 0, SpringLayout.NORTH,
                outputOptionsPanel);
        outputPanelLayout.putConstraint(SpringLayout.WEST, outPrefixLabel, 5, SpringLayout.WEST,
                outputOptionsPanel);
        outputPanelLayout.putConstraint(SpringLayout.SOUTH, outPrefixText, 0, SpringLayout.SOUTH, outPrefixLabel);
        outputPanelLayout.putConstraint(SpringLayout.WEST, outPrefixText, 10, SpringLayout.EAST, outPrefixLabel);
        outputPanelLayout.putConstraint(SpringLayout.EAST, outPrefixText, -30, SpringLayout.EAST,
                outputOptionsPanel);

        outputPanelLayout.putConstraint(SpringLayout.SOUTH, prefixHelpLabel, -1, SpringLayout.SOUTH,
                outputOptionsPanel);
        outputPanelLayout.putConstraint(SpringLayout.EAST, prefixHelpLabel, -1, SpringLayout.EAST,
                outputOptionsPanel);

        splitSpringLayout.putConstraint(SpringLayout.EAST, runButton, -11, SpringLayout.EAST, this);
        splitSpringLayout.putConstraint(SpringLayout.NORTH, runButton, 10, SpringLayout.SOUTH, outputOptionsPanel);

        // RADIO_LAYOUT
        optionsPaneLayout.putConstraint(SpringLayout.NORTH, splitTypesPanel, 0, SpringLayout.NORTH,
                splitOptionsPanel);
        optionsPaneLayout.putConstraint(SpringLayout.WEST, splitTypesPanel, 10, SpringLayout.WEST,
                splitOptionsPanel);

        optionsPaneLayout.putConstraint(SpringLayout.SOUTH, checksHelpLabel, -1, SpringLayout.SOUTH,
                splitOptionsPanel);
        optionsPaneLayout.putConstraint(SpringLayout.EAST, checksHelpLabel, -1, SpringLayout.EAST,
                splitOptionsPanel);
    }

    /**
     * @param splitType
     *            The splitType to set.
     */
    public void setSplitType(String splitType) {
        this.splitType = splitType;
    }

    public FocusTraversalPolicy getFocusPolicy() {
        return (FocusTraversalPolicy) splitFocusPolicy;

    }

    /**
     * 
     * @author Andrea Vacondio Focus policy for split panel
     * 
     */
    public class SplitFocusPolicy extends FocusTraversalPolicy {
        public SplitFocusPolicy() {
            super();
        }

        public Component getComponentAfter(Container CycleRootComp, Component aComponent) {
            if (aComponent.equals(selectionPanel.getAddFileButton())) {
                return selectionPanel.getClearButton();
            } else if (aComponent.equals(selectionPanel.getClearButton())) {
                return burstRadio;
            } else if (aComponent.equals(burstRadio)) {
                return evenRadio;
            } else if (aComponent.equals(evenRadio)) {
                return oddRadio;
            } else if (aComponent.equals(oddRadio)) {
                return thisPageRadio;
            } else if (aComponent.equals(thisPageRadio)) {
                if (thisPageTextField.isEnabled()) {
                    return thisPageTextField;
                } else {
                    return everyNRadio;
                }
            } else if (aComponent.equals(thisPageTextField)) {
                return everyNRadio;
            } else if (aComponent.equals(everyNRadio)) {
                if (nPagesTextField.isEnabled()) {
                    return nPagesTextField;
                } else {
                    return sizeRadio;
                }
            } else if (aComponent.equals(nPagesTextField)) {
                return sizeRadio;
            } else if (aComponent.equals(sizeRadio)) {
                if (splitSizeCombo.isEnabled()) {
                    return splitSizeCombo;
                } else {
                    return bookmarksLevel;
                }
            } else if (aComponent.equals(splitSizeCombo) || aComponent.getParent().equals(splitSizeCombo)) {
                return bookmarksLevel;
            } else if (aComponent.equals(bookmarksLevel)) {
                if (bLevelCombo.isEnabled()) {
                    return bLevelCombo.getLevelCombo();
                } else {
                    return sameAsSourceRadio;
                }
            } else if (aComponent.equals(bLevelCombo.getLevelCombo())
                    || aComponent.getParent().equals(bLevelCombo.getLevelCombo())) {
                if (bLevelCombo.getFillCombo().isEnabled()) {
                    return bLevelCombo.getFillCombo();
                } else {
                    return sameAsSourceRadio;
                }
            } else if (aComponent.equals(bLevelCombo.getFillCombo())) {
                return sameAsSourceRadio;
            } else if (aComponent.equals(sameAsSourceRadio)) {
                return chooseAFolderRadio;
            } else if (aComponent.equals(chooseAFolderRadio)) {
                if (destinationFolderText.isEnabled()) {
                    return destinationFolderText;
                } else {
                    return overwriteCheckbox;
                }
            } else if (aComponent.equals(destinationFolderText)) {
                return browseDestButton;
            } else if (aComponent.equals(browseDestButton)) {
                return overwriteCheckbox;
            } else if (aComponent.equals(overwriteCheckbox)) {
                return outputCompressedCheck;
            } else if (aComponent.equals(outputCompressedCheck)) {
                return versionCombo;
            } else if (aComponent.equals(versionCombo)) {
                return outPrefixText;
            } else if (aComponent.equals(outPrefixText)) {
                return runButton;
            } else if (aComponent.equals(runButton)) {
                return selectionPanel.getAddFileButton();
            }
            return selectionPanel.getAddFileButton();
        }

        public Component getComponentBefore(Container CycleRootComp, Component aComponent) {

            if (aComponent.equals(selectionPanel.getAddFileButton())) {
                return runButton;
            } else if (aComponent.equals(runButton)) {
                return outPrefixText;
            } else if (aComponent.equals(outPrefixText)) {
                return versionCombo;
            } else if (aComponent.equals(versionCombo)) {
                return outputCompressedCheck;
            } else if (aComponent.equals(outputCompressedCheck)) {
                return overwriteCheckbox;
            } else if (aComponent.equals(overwriteCheckbox)) {
                if (browseDestButton.isEnabled()) {
                    return browseDestButton;
                } else {
                    return chooseAFolderRadio;
                }
            } else if (aComponent.equals(browseDestButton)) {
                return destinationFolderText;
            } else if (aComponent.equals(destinationFolderText)) {
                return chooseAFolderRadio;
            } else if (aComponent.equals(chooseAFolderRadio)) {
                return sameAsSourceRadio;
            } else if (aComponent.equals(sameAsSourceRadio)) {
                if (bLevelCombo.isEnabled()) {
                    if (bLevelCombo.getFillCombo().isEnabled()) {
                        return bLevelCombo.getFillCombo();
                    } else {
                        return bLevelCombo.getLevelCombo();
                    }
                } else {
                    return bookmarksLevel;
                }
            } else if (aComponent.equals(bLevelCombo.getLevelCombo())
                    || aComponent.getParent().equals(bLevelCombo.getLevelCombo())) {
                return bookmarksLevel;
            } else if (aComponent.equals(bLevelCombo.getFillCombo())) {
                return bLevelCombo.getLevelCombo();
            } else if (aComponent.equals(bookmarksLevel)) {
                if (splitSizeCombo.isEnabled()) {
                    return splitSizeCombo;
                } else {
                    return sizeRadio;
                }
            } else if (aComponent.equals(splitSizeCombo) || aComponent.getParent().equals(splitSizeCombo)) {
                return sizeRadio;
            } else if (aComponent.equals(sizeRadio)) {
                if (nPagesTextField.isEnabled()) {
                    return nPagesTextField;
                } else {
                    return everyNRadio;
                }
            } else if (aComponent.equals(nPagesTextField)) {
                return everyNRadio;
            } else if (aComponent.equals(everyNRadio)) {
                if (thisPageTextField.isEnabled()) {
                    return thisPageTextField;
                } else {
                    return thisPageRadio;
                }
            } else if (aComponent.equals(thisPageTextField)) {
                return thisPageRadio;
            } else if (aComponent.equals(thisPageRadio)) {
                return oddRadio;
            } else if (aComponent.equals(oddRadio)) {
                return evenRadio;
            } else if (aComponent.equals(evenRadio)) {
                return burstRadio;
            } else if (aComponent.equals(burstRadio)) {
                return selectionPanel.getClearButton();
            } else if (aComponent.equals(selectionPanel.getClearButton())) {
                return selectionPanel.getAddFileButton();
            }
            return selectionPanel.getAddFileButton();
        }

        public Component getDefaultComponent(Container CycleRootComp) {
            return selectionPanel.getAddFileButton();
        }

        public Component getLastComponent(Container CycleRootComp) {
            return runButton;
        }

        public Component getFirstComponent(Container CycleRootComp) {
            return selectionPanel.getAddFileButton();
        }
    }

    public void resetPanel() {
        selectionPanel.clearSelectionTable();
        destinationFolderText.setText("");
        versionCombo.resetComponent();
        outputCompressedCheck.setSelected(false);
        overwriteCheckbox.setSelected(false);
        thisPageTextField.setText("");
        nPagesTextField.setText("");
        outPrefixText.setText("pdfsam_");
        bLevelCombo.resetComponent();
        ButtonModel bmodel = splitOptionsRadioGroup.getSelection();
        if (bmodel != null) {
            bmodel.setSelected(false);
        }
        chooseAFolderRadio.setSelected(true);
    }

    /**
     * @return the outPrefixText
     */
    public JTextField getOutPrefixText() {
        return outPrefixText;
    }

    /**
     * @return the destinationFolderText
     */
    public JTextField getDestinationFolderText() {
        return destinationFolderText;
    }

    /**
     * @return the thisPageTextField
     */
    public JTextField getThisPageTextField() {
        return thisPageTextField;
    }

    /**
     * @return the versionCombo
     */
    public JPdfVersionCombo getVersionCombo() {
        return versionCombo;
    }

    /**
     * @return the selectionPanel
     */
    public JPdfSelectionPanel getSelectionPanel() {
        return selectionPanel;
    }

    /**
     * @return the splitSizeCombo
     */
    public JSplitSizeCombo getSplitSizeCombo() {
        return splitSizeCombo;
    }

    /**
     * @return the bLevelCombo
     */
    public JBLevelCombo getbLevelCombo() {
        return bLevelCombo;
    }

    /**
     * @return the bookmarksLevel
     */
    public JSplitRadioButton getBookmarksLevel() {
        return bookmarksLevel;
    }

    /**
     * @return the overwriteCheckbox
     */
    public JCheckBox getOverwriteCheckbox() {
        return overwriteCheckbox;
    }

    /**
     * @return the splitType
     */
    public String getSplitType() {
        return splitType;
    }

    /**
     * @return the sameAsSourceRadio
     */
    public JRadioButton getSameAsSourceRadio() {
        return sameAsSourceRadio;
    }

    /**
     * @return the outputCompressedCheck
     */
    public JCheckBox getOutputCompressedCheck() {
        return outputCompressedCheck;
    }

    /**
     * @return the nPagesTextField
     */
    public JTextField getnPagesTextField() {
        return nPagesTextField;
    }

}