org.pdfsam.plugin.vpagereorder.GUI.VPageReorderMainGUI.java Source code

Java tutorial

Introduction

Here is the source code for org.pdfsam.plugin.vpagereorder.GUI.VPageReorderMainGUI.java

Source

/*
 * Created on 22-Jul-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.vpagereorder.GUI;

import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FocusTraversalPolicy;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
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.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTextField;
import javax.swing.SpringLayout;
import javax.swing.border.TitledBorder;
import org.apache.log4j.Logger;
import org.dom4j.Element;
import org.dom4j.Node;
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.VisualListModel;
import org.pdfsam.guiclient.commons.panels.JPdfSelectionPanel;
import org.pdfsam.guiclient.commons.panels.JVisualPdfPageSelectionPanel;
import org.pdfsam.guiclient.configuration.Configuration;
import org.pdfsam.guiclient.dto.DocumentPage;
import org.pdfsam.guiclient.dto.StringItem;
import org.pdfsam.guiclient.dto.VisualPageListItem;
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.guiclient.utils.XmlUtility;
import org.pdfsam.i18n.GettextResource;
import org.pdfsam.plugin.vpagereorder.listeners.RunButtonActionListener;

/**
 * Visual reorder plugin  main panel
 * @author Andrea Vacondio
 *
 */
public class VPageReorderMainGUI extends AbstractPlugablePanel implements PropertyChangeListener {

    private static final long serialVersionUID = -1965981976755542201L;

    private static final String DEFAULT_OUPUT_NAME = "reordered_file.pdf";

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

    private JTextField destinationFileText = CommonComponentsFactory.getInstance()
            .createTextField(CommonComponentsFactory.DESTINATION_TEXT_FIELD_TYPE);
    private JHelpLabel destinationHelpLabel;
    private Configuration config;
    private JPdfVersionCombo versionCombo = new JPdfVersionCombo(true);
    private JVisualPdfPageSelectionPanel selectionPanel = new JVisualPdfPageSelectionPanel();
    private final PageReorderPolicy pageReorderFocusPolicy = new PageReorderPolicy();

    //layouts
    private SpringLayout destinationPanelLayout;

    //button
    private final JButton browseDestButton = CommonComponentsFactory.getInstance()
            .createButton(CommonComponentsFactory.BROWSE_BUTTON_TYPE);
    private final JButton runButton = CommonComponentsFactory.getInstance()
            .createButton(CommonComponentsFactory.RUN_BUTTON_TYPE);

    //checks
    private final JCheckBox overwriteCheckbox = CommonComponentsFactory.getInstance()
            .createCheckBox(CommonComponentsFactory.OVERWRITE_CHECKBOX_TYPE);
    private final JCheckBox outputCompressedCheck = CommonComponentsFactory.getInstance()
            .createCheckBox(CommonComponentsFactory.COMPRESS_CHECKBOX_TYPE);

    //key_listeners
    private final EnterDoClickListener browsedEnterkeyListener = new EnterDoClickListener(browseDestButton);
    private final EnterDoClickListener runEnterkeyListener = new EnterDoClickListener(runButton);

    //panels
    private final JPanel destinationPanel = new JPanel();
    private JSplitPane splitPanel = null;

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

    //radio
    private final JRadioButton sameAsSourceRadio = new JRadioButton();
    private final JRadioButton chooseAFileRadio = new JRadioButton();

    private static final String PLUGIN_AUTHOR = "Andrea Vacondio";
    private static final String PLUGIN_VERSION = "0.0.7";

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

    /**
     * Panel initialization   
     */
    private void initialize() {
        config = Configuration.getInstance();
        setPanelIcon("/images/vreorder.png");
        setPreferredSize(new Dimension(500, 550));

        setLayout(new GridBagLayout());
        selectionPanel.addPropertyChangeListener(this);

        //DESTINATION_PANEL
        destinationPanelLayout = new SpringLayout();
        destinationPanel.setLayout(destinationPanelLayout);
        TitledBorder titledBorder = BorderFactory.createTitledBorder(
                GettextResource.gettext(config.getI18nResourceBundle(), "Destination output file"));
        destinationPanel.setBorder(titledBorder);
        destinationPanel.setPreferredSize(new Dimension(180, 160));
        add(destinationPanel);
        //END_DESTINATION_PANEL        
        //DESTINATION_RADIOS
        sameAsSourceRadio.setText(GettextResource.gettext(config.getI18nResourceBundle(), "Same as source"));
        destinationPanel.add(sameAsSourceRadio);

        chooseAFileRadio.setSelected(true);
        chooseAFileRadio.setText(GettextResource.gettext(config.getI18nResourceBundle(), "Choose a file"));
        destinationPanel.add(chooseAFileRadio);
        //END_DESTINATION_RADIOS 

        destinationPanel.add(destinationFileText);
        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.PDF_FILE,
                        JFileChooser.FILES_ONLY, destinationFileText.getText());
                if (fileChooser.showOpenDialog(browseDestButton.getParent()) == JFileChooser.APPROVE_OPTION) {
                    File chosenFile = fileChooser.getSelectedFile();
                    if (chosenFile != null) {
                        destinationFileText.setText(chosenFile.getAbsolutePath());
                    }
                }
            }
        });
        destinationPanel.add(browseDestButton);
        //HELP_LABEL_DESTINATION        
        String helpTextDest = "<html><body><b>"
                + GettextResource.gettext(config.getI18nResourceBundle(), "Destination output file") + "</b>"
                + "<p>"
                + GettextResource.gettext(config.getI18nResourceBundle(),
                        "Use the same output file name as the input file or choose a file.")
                + "</p>" + "<p>"
                + GettextResource.gettext(config.getI18nResourceBundle(),
                        "To choose a file browse or enter the full path to the destination output file.")
                + "</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  

        splitPanel = new JSplitPane(JSplitPane.VERTICAL_SPLIT, selectionPanel, new JScrollPane(destinationPanel,
                JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER));
        splitPanel.setOneTouchExpandable(true);
        splitPanel.setResizeWeight(1.0);

        GridBagConstraints c = new GridBagConstraints();
        c.fill = GridBagConstraints.BOTH;
        c.ipady = 5;
        c.weightx = 1.0;
        c.weighty = 1.0;
        c.gridwidth = 3;
        c.gridheight = 2;
        c.gridx = 0;
        c.gridy = 0;
        c.insets = new Insets(0, 0, 10, 0);
        add(splitPanel, c);

        final ButtonGroup outputRadioGroup = new ButtonGroup();
        outputRadioGroup.add(sameAsSourceRadio);
        outputRadioGroup.add(chooseAFileRadio);
        //RADIO_LISTENERS
        sameAsSourceRadio.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                destinationFileText.setEnabled(false);
                browseDestButton.setEnabled(false);
            }
        });

        chooseAFileRadio.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                destinationFileText.setEnabled(true);
                browseDestButton.setEnabled(true);
            }
        });
        // END_RADIO_LISTENERS
        // ENTER_KEY_LISTENERS
        browseDestButton.addKeyListener(browsedEnterkeyListener);
        runButton.addKeyListener(runEnterkeyListener);
        // END_ENTER_KEY_LISTENERS
        runButton.addActionListener(new RunButtonActionListener(this));
        runButton.setToolTipText(GettextResource.gettext(config.getI18nResourceBundle(), "Execute pages reorder"));
        runButton.setSize(new Dimension(88, 25));

        c.fill = GridBagConstraints.NONE;
        c.ipadx = 5;
        c.weightx = 0.0;
        c.weighty = 0.0;
        c.anchor = GridBagConstraints.LAST_LINE_END;
        c.gridwidth = 1;
        c.gridx = 2;
        c.gridy = 2;
        c.insets = new Insets(10, 10, 10, 10);
        add(runButton, c);
        setLayout();
    }

    /**
     * Set plugin layout for each component
     *
     */
    private void setLayout() {

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

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

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

        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,
                destinationFileText);

        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,
                destinationFileText);

        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,
                destinationFileText);
        destinationPanelLayout.putConstraint(SpringLayout.EAST, browseDestButton, -10, SpringLayout.EAST,
                destinationPanel);
        destinationPanelLayout.putConstraint(SpringLayout.NORTH, browseDestButton, -25, SpringLayout.SOUTH,
                destinationFileText);
        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);

    }

    public FocusTraversalPolicy getFocusPolicy() {
        return pageReorderFocusPolicy;
    }

    public Node getJobNode(Node arg0, boolean savePasswords) throws SaveJobException {
        try {
            if (arg0 != null) {
                Element fileSource = ((Element) arg0).addElement("source");
                File item = selectionPanel.getSelectedPdfDocument();
                if (item != null) {
                    fileSource.addAttribute("value", item.getAbsolutePath());
                    if (savePasswords) {
                        fileSource.addAttribute("password",
                                (selectionPanel.getSelectedPdfDocumentPassword() != null
                                        ? selectionPanel.getSelectedPdfDocumentPassword()
                                        : ""));
                        VisualPageListItem[] pages = ((VisualListModel) selectionPanel.getThumbnailList()
                                .getModel()).getElements();
                        if (pages != null && pages.length > 0) {
                            for (VisualPageListItem page : pages) {
                                Element currentPage = fileSource.addElement("page");
                                currentPage.addAttribute("number", Integer.toString(page.getPageNumber()));
                                currentPage.addAttribute("deleted", String.valueOf(page.isDeleted()));
                                currentPage.addAttribute("rotation",
                                        Integer.toString(page.getRotation().getDegrees()));
                            }
                        }
                    }
                }

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

                Element fileOverwrite = ((Element) arg0).addElement("overwrite");
                fileOverwrite.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 String getPluginAuthor() {
        return PLUGIN_AUTHOR;
    }

    public String getPluginName() {
        return GettextResource.gettext(config.getI18nResourceBundle(), "Visual reorder");
    }

    public String getVersion() {
        return PLUGIN_VERSION;
    }

    @SuppressWarnings("unchecked")
    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();
                }
                List<DocumentPage> template = null;
                List<Node> pages = arg0.selectNodes("source/page");
                if (pages != null && pages.size() > 0) {
                    for (Node pageNode : pages) {
                        DocumentPage currentPage = XmlUtility.getDocumentPage(pageNode);
                        if (currentPage != null) {
                            if (template == null) {
                                template = new ArrayList<DocumentPage>();
                            }
                            template.add(currentPage);
                        }
                    }
                }
                selectionPanel.getPdfLoader().addFile(new File(fileSource.getText()), password, template);
            }

            Node fileDestination = (Node) arg0.selectSingleNode("destination/@value");
            if (fileDestination != null && fileDestination.getText().length() > 0) {
                destinationFileText.setText(fileDestination.getText());
                chooseAFileRadio.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 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(), "Visual Reorder section loaded."));
        } catch (Exception ex) {
            log.error(GettextResource.gettext(config.getI18nResourceBundle(), "Error: "), ex);
        }
    }

    public void resetPanel() {
        selectionPanel.resetPanel();
        destinationFileText.setText("");
        versionCombo.resetComponent();
        outputCompressedCheck.setSelected(false);
        overwriteCheckbox.setSelected(false);
    }

    /**
    * The menu item to set the output path has been clicked
    */
    public void propertyChange(PropertyChangeEvent evt) {
        if (JPdfSelectionPanel.OUTPUT_PATH_PROPERTY.equals(evt.getPropertyName())) {
            chooseAFileRadio.doClick();
            destinationFileText.setText(((String) evt.getNewValue()) + File.separatorChar + DEFAULT_OUPUT_NAME);
        }
    }

    /**
     * Focus policy for the page reorder plugin
     * @author Andrea Vacondio
     *
     */
    public class PageReorderPolicy extends FocusTraversalPolicy {
        public PageReorderPolicy() {
            super();
        }

        public Component getComponentAfter(Container CycleRootComp, Component aComponent) {
            if (aComponent.equals(selectionPanel.getLoadFileButton())) {
                if (selectionPanel.getClearButton() != null) {
                    return selectionPanel.getClearButton();
                } else {
                    return selectionPanel.getZoomInButton();
                }
            } else if (aComponent.equals(selectionPanel.getClearButton())) {
                return selectionPanel.getZoomInButton();
            } else if (aComponent.equals(selectionPanel.getZoomInButton())) {
                return selectionPanel.getZoomOutButton();
            } else if (aComponent.equals(selectionPanel.getZoomOutButton())) {
                return selectionPanel.getMoveUpButton();
            } else if (aComponent.equals(selectionPanel.getMoveUpButton())) {
                return selectionPanel.getMoveDownButton();
            } else if (aComponent.equals(selectionPanel.getMoveDownButton())) {
                return selectionPanel.getRemoveButton();
            } else if (aComponent.equals(selectionPanel.getRemoveButton())) {
                if (selectionPanel.getUndeleteButton() != null) {
                    return selectionPanel.getUndeleteButton();
                } else {
                    return selectionPanel.getRotateButton();
                }
            } else if (aComponent.equals(selectionPanel.getUndeleteButton())) {
                return selectionPanel.getRotateButton();
            } else if (aComponent.equals(selectionPanel.getRotateButton())) {
                return selectionPanel.getRotateAntiButton();
            } else if (aComponent.equals(selectionPanel.getRotateAntiButton())) {
                return sameAsSourceRadio;
            } else if (aComponent.equals(sameAsSourceRadio)) {
                return chooseAFileRadio;
            } else if (aComponent.equals(chooseAFileRadio)) {
                if (destinationFileText.isEnabled()) {
                    return destinationFileText;
                } else {
                    return overwriteCheckbox;
                }
            } else if (aComponent.equals(destinationFileText)) {
                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 runButton;
            } else if (aComponent.equals(runButton)) {
                return selectionPanel.getLoadFileButton();
            }
            return selectionPanel.getLoadFileButton();
        }

        public Component getComponentBefore(Container CycleRootComp, Component aComponent) {
            if (aComponent.equals(selectionPanel.getLoadFileButton())) {
                return runButton;
            } else if (aComponent.equals(selectionPanel.getClearButton())) {
                return selectionPanel.getLoadFileButton();
            } else if (aComponent.equals(selectionPanel.getZoomInButton())) {
                if (selectionPanel.getClearButton() != null) {
                    return selectionPanel.getClearButton();
                } else {
                    return selectionPanel.getLoadFileButton();
                }
            } else if (aComponent.equals(selectionPanel.getZoomOutButton())) {
                return selectionPanel.getZoomInButton();
            } else if (aComponent.equals(selectionPanel.getMoveUpButton())) {
                return selectionPanel.getZoomOutButton();
            } else if (aComponent.equals(selectionPanel.getMoveDownButton())) {
                return selectionPanel.getMoveUpButton();
            } else if (aComponent.equals(selectionPanel.getRemoveButton())) {
                return selectionPanel.getMoveDownButton();
            } else if (aComponent.equals(selectionPanel.getUndeleteButton())) {
                return selectionPanel.getRemoveButton();
            } else if (aComponent.equals(selectionPanel.getRotateButton())) {
                if (selectionPanel.getUndeleteButton() != null) {
                    return selectionPanel.getUndeleteButton();
                } else {
                    return selectionPanel.getRemoveButton();
                }
            } else if (aComponent.equals(selectionPanel.getRotateAntiButton())) {
                return selectionPanel.getRotateButton();
            } else if (aComponent.equals(sameAsSourceRadio)) {
                return selectionPanel.getRotateAntiButton();
            } else if (aComponent.equals(chooseAFileRadio)) {
                return sameAsSourceRadio;
            } else if (aComponent.equals(destinationFileText)) {
                return chooseAFileRadio;
            } else if (aComponent.equals(browseDestButton)) {
                return destinationFileText;
            } else if (aComponent.equals(overwriteCheckbox)) {
                if (destinationFileText.isEnabled()) {
                    return browseDestButton;
                } else {
                    return chooseAFileRadio;
                }
            } else if (aComponent.equals(outputCompressedCheck)) {
                return overwriteCheckbox;
            } else if (aComponent.equals(versionCombo)) {
                return outputCompressedCheck;
            } else if (aComponent.equals(runButton)) {
                return versionCombo;
            }
            return selectionPanel.getLoadFileButton();
        }

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

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

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

    /**
     * @return the destinationFileText
     */
    public JTextField getDestinationFileText() {
        return destinationFileText;
    }

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

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

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

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

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

}