/*- * Copyright (C) 2008 Erik Larsson * * 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 3 of the License, or * (at your option) any later version. * * 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, see <http://www.gnu.org/licenses/>. */ package org.catacombae.hfsexplorer.gui; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Arrays; import java.util.Enumeration; import java.util.List; import javax.swing.AbstractButton; import javax.swing.ButtonGroup; import javax.swing.SwingUtilities; import org.catacombae.hfsexplorer.ExtractProgressMonitor.CreateDirectoryFailedAction; import org.catacombae.hfsexplorer.ExtractProgressMonitor.CreateFileFailedAction; import org.catacombae.hfsexplorer.ExtractProgressMonitor.DirectoryExistsAction; import org.catacombae.hfsexplorer.ExtractProgressMonitor.ExtractProperties; import org.catacombae.hfsexplorer.ExtractProgressMonitor.ExtractPropertiesListener; import org.catacombae.hfsexplorer.ExtractProgressMonitor.FileExistsAction; import org.catacombae.hfsexplorer.ExtractProgressMonitor.UnhandledExceptionAction; /** * @author <a href="http://www.catacombae.org/" target="_top">Erik Larsson</a> */ public class ExtractSettingsPanel extends javax.swing.JPanel { private final ButtonGroup createDirButtonGroup = new ButtonGroup(); private final ButtonGroup createFileButtonGroup = new ButtonGroup(); private final ButtonGroup dirExistsButtonGroup = new ButtonGroup(); private final ButtonGroup fileExistsButtonGroup = new ButtonGroup(); public ExtractSettingsPanel(final ExtractProperties p) { this(); p.addListener(new ExtractPropertiesListener() { /* @Override */ public void propertyChanged(Object changedProperty) { //System.err.println("Received a propertyChanged for " + changedProperty); final AbstractButton theButton; if(changedProperty instanceof CreateDirectoryFailedAction) { switch((CreateDirectoryFailedAction)changedProperty) { case PROMPT_USER: theButton = createDirPromptUserButton; break; case AUTO_RENAME: theButton = createDirAutoRenameButton; break; case SKIP_DIRECTORY: theButton = createDirSkipDirectoryButton; break; case CANCEL: theButton = createDirCancelButton; break; default: throw new RuntimeException("Unknown property: " + changedProperty); } } else if(changedProperty instanceof CreateFileFailedAction) { switch((CreateFileFailedAction)changedProperty) { case PROMPT_USER: theButton = createFilePromptUserButton; break; case SKIP_FILE: theButton = createFileSkipFileButton; break; case AUTO_RENAME: theButton = createFileAutoRenameButton; break; case SKIP_DIRECTORY: theButton = createFileSkipDirectoryButton; break; case CANCEL: theButton = createFileCancelButton; break; default: throw new RuntimeException("Unknown property: " + changedProperty); } } else if(changedProperty instanceof DirectoryExistsAction) { switch((DirectoryExistsAction)changedProperty) { case PROMPT_USER: theButton = dirExistsPromptUserButton; break; case CONTINUE: theButton = dirExistsContinueButton; break; case AUTO_RENAME: theButton = dirExistsAutoRenameButton; break; case SKIP_DIRECTORY: theButton = dirExistsSkipDirectoryButton; break; case CANCEL: theButton = dirExistsCancelButton; break; default: throw new RuntimeException("Unknown property: " + changedProperty); } } else if(changedProperty instanceof FileExistsAction) { switch((FileExistsAction)changedProperty) { case PROMPT_USER: theButton = fileExistsPromptUserButton; break; case OVERWRITE: theButton = fileExistsOverwriteButton; break; case AUTO_RENAME: theButton = fileExistsAutoRenameButton; break; case SKIP_FILE: theButton = fileExistsSkipFileButton; break; case SKIP_DIRECTORY: theButton = fileExistsSkipDirectoryButton; break; case CANCEL: theButton = fileExistsCancelButton; break; default: throw new RuntimeException("Unknown property: " + changedProperty); } } else if(changedProperty instanceof UnhandledExceptionAction) { /* Ignore for now, until we have implemented this in the * GUI. */ theButton = null; } else throw new RuntimeException("Unknown property: " + (changedProperty != null?changedProperty.getClass():"null")); if(theButton != null) { SwingUtilities.invokeLater(new Runnable() { /* @Override */ public void run() { theButton.setSelected(true); } }); } } }); createDirPromptUserButton.doClick(); createFilePromptUserButton.doClick(); dirExistsPromptUserButton.doClick(); fileExistsPromptUserButton.doClick(); createDirPromptUserButton.addActionListener(new CreateDirListener(createDirPromptUserButton, p, CreateDirectoryFailedAction.PROMPT_USER)); createDirSkipDirectoryButton.addActionListener(new CreateDirListener(createDirSkipDirectoryButton, p, CreateDirectoryFailedAction.SKIP_DIRECTORY)); createDirAutoRenameButton.addActionListener(new CreateDirListener(createDirAutoRenameButton, p, CreateDirectoryFailedAction.AUTO_RENAME)); createDirCancelButton.addActionListener(new CreateDirListener(createDirCancelButton, p, CreateDirectoryFailedAction.CANCEL)); createFilePromptUserButton.addActionListener(new CreateFileListener(createFilePromptUserButton, p, CreateFileFailedAction.PROMPT_USER)); createFileSkipFileButton.addActionListener(new CreateFileListener(createFileSkipFileButton, p, CreateFileFailedAction.SKIP_FILE)); createFileSkipDirectoryButton.addActionListener(new CreateFileListener(createFileSkipDirectoryButton, p, CreateFileFailedAction.SKIP_DIRECTORY)); createFileAutoRenameButton.addActionListener(new CreateFileListener(createFileAutoRenameButton, p, CreateFileFailedAction.AUTO_RENAME)); createFileCancelButton.addActionListener(new CreateFileListener(createFileCancelButton, p, CreateFileFailedAction.CANCEL)); dirExistsPromptUserButton.addActionListener(new DirExistsListener(dirExistsPromptUserButton, p, DirectoryExistsAction.PROMPT_USER)); dirExistsContinueButton.addActionListener(new DirExistsListener(dirExistsContinueButton, p, DirectoryExistsAction.CONTINUE)); dirExistsSkipDirectoryButton.addActionListener(new DirExistsListener(dirExistsSkipDirectoryButton, p, DirectoryExistsAction.SKIP_DIRECTORY)); dirExistsAutoRenameButton.addActionListener(new DirExistsListener(dirExistsAutoRenameButton, p, DirectoryExistsAction.AUTO_RENAME)); dirExistsCancelButton.addActionListener(new DirExistsListener(dirExistsCancelButton, p, DirectoryExistsAction.CANCEL)); fileExistsPromptUserButton.addActionListener(new FileExistsListener(fileExistsPromptUserButton, p, FileExistsAction.PROMPT_USER)); fileExistsSkipFileButton.addActionListener(new FileExistsListener(fileExistsSkipFileButton, p, FileExistsAction.SKIP_FILE)); fileExistsSkipDirectoryButton.addActionListener(new FileExistsListener(fileExistsSkipDirectoryButton, p, FileExistsAction.SKIP_DIRECTORY)); fileExistsOverwriteButton.addActionListener(new FileExistsListener(fileExistsOverwriteButton, p, FileExistsAction.OVERWRITE)); fileExistsAutoRenameButton.addActionListener(new FileExistsListener(fileExistsAutoRenameButton, p, FileExistsAction.AUTO_RENAME)); fileExistsCancelButton.addActionListener(new FileExistsListener(fileExistsCancelButton, p, FileExistsAction.CANCEL)); } /** Creates new form ExtractSettingsPanel */ private ExtractSettingsPanel() { initComponents(); createDirButtonGroup.add(createDirPromptUserButton); createDirButtonGroup.add(createDirSkipDirectoryButton); createDirButtonGroup.add(createDirAutoRenameButton); createDirButtonGroup.add(createDirCancelButton); createFileButtonGroup.add(createFilePromptUserButton); createFileButtonGroup.add(createFileSkipFileButton); createFileButtonGroup.add(createFileSkipDirectoryButton); createFileButtonGroup.add(createFileAutoRenameButton); createFileButtonGroup.add(createFileCancelButton); dirExistsButtonGroup.add(dirExistsPromptUserButton); dirExistsButtonGroup.add(dirExistsContinueButton); dirExistsButtonGroup.add(dirExistsSkipDirectoryButton); dirExistsButtonGroup.add(dirExistsAutoRenameButton); dirExistsButtonGroup.add(dirExistsCancelButton); fileExistsButtonGroup.add(fileExistsPromptUserButton); fileExistsButtonGroup.add(fileExistsSkipFileButton); fileExistsButtonGroup.add(fileExistsSkipDirectoryButton); fileExistsButtonGroup.add(fileExistsOverwriteButton); fileExistsButtonGroup.add(fileExistsAutoRenameButton); fileExistsButtonGroup.add(fileExistsCancelButton); quietModeBox.addActionListener(new ActionListener() { /* @Override */ public void actionPerformed(ActionEvent e) { boolean selected = quietModeBox.isSelected(); if(selected) { createDirSkipDirectoryButton.doClick(); createFileSkipFileButton.doClick(); dirExistsSkipDirectoryButton.doClick(); fileExistsSkipFileButton.doClick(); } List<ButtonGroup> buttonGroups = Arrays.asList(createDirButtonGroup, createFileButtonGroup, dirExistsButtonGroup, fileExistsButtonGroup); for(ButtonGroup bg : buttonGroups) { Enumeration<AbstractButton> buttonEnum = bg.getElements(); while(buttonEnum.hasMoreElements()) { AbstractButton b = buttonEnum.nextElement(); b.setEnabled(!selected); } } } }); } /** 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. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { quietModeBox = new javax.swing.JCheckBox(); createDirPanel = new javax.swing.JPanel(); createDirLabel = new javax.swing.JLabel(); createDirPromptUserButton = new javax.swing.JRadioButton(); createDirSkipDirectoryButton = new javax.swing.JRadioButton(); createDirAutoRenameButton = new javax.swing.JRadioButton(); createDirCancelButton = new javax.swing.JRadioButton(); createFilePanel = new javax.swing.JPanel(); createFileLabel = new javax.swing.JLabel(); createFilePromptUserButton = new javax.swing.JRadioButton(); createFileSkipFileButton = new javax.swing.JRadioButton(); createFileSkipDirectoryButton = new javax.swing.JRadioButton(); createFileAutoRenameButton = new javax.swing.JRadioButton(); createFileCancelButton = new javax.swing.JRadioButton(); dirExistsPanel = new javax.swing.JPanel(); dirExistsLabel = new javax.swing.JLabel(); dirExistsPromptUserButton = new javax.swing.JRadioButton(); dirExistsContinueButton = new javax.swing.JRadioButton(); dirExistsSkipDirectoryButton = new javax.swing.JRadioButton(); dirExistsAutoRenameButton = new javax.swing.JRadioButton(); dirExistsCancelButton = new javax.swing.JRadioButton(); fileExistsPanel = new javax.swing.JPanel(); fileExistsLabel = new javax.swing.JLabel(); fileExistsPromptUserButton = new javax.swing.JRadioButton(); fileExistsSkipFileButton = new javax.swing.JRadioButton(); fileExistsSkipDirectoryButton = new javax.swing.JRadioButton(); fileExistsOverwriteButton = new javax.swing.JRadioButton(); fileExistsAutoRenameButton = new javax.swing.JRadioButton(); fileExistsCancelButton = new javax.swing.JRadioButton(); quietModeBox.setText("Quiet mode"); quietModeBox.setToolTipText("A non-destructive \"No questions asked\" mode"); createDirLabel.setText("Create directory failed:"); createDirPromptUserButton.setText("Prompt user"); createDirSkipDirectoryButton.setText("Skip directory"); createDirAutoRenameButton.setText("Auto-rename"); createDirCancelButton.setText("Cancel"); org.jdesktop.layout.GroupLayout createDirPanelLayout = new org.jdesktop.layout.GroupLayout(createDirPanel); createDirPanel.setLayout(createDirPanelLayout); createDirPanelLayout.setHorizontalGroup( createDirPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(createDirLabel) .add(createDirPanelLayout.createSequentialGroup() .add(10, 10, 10) .add(createDirPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(createDirPromptUserButton) .add(createDirSkipDirectoryButton) .add(createDirAutoRenameButton) .add(createDirCancelButton))) ); createDirPanelLayout.setVerticalGroup( createDirPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(createDirPanelLayout.createSequentialGroup() .add(createDirLabel) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(createDirPromptUserButton) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(createDirSkipDirectoryButton) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(createDirAutoRenameButton) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(createDirCancelButton) .addContainerGap(23, Short.MAX_VALUE)) ); createFileLabel.setText("Create file failed:"); createFilePromptUserButton.setText("Prompt user"); createFileSkipFileButton.setText("Skip file"); createFileSkipDirectoryButton.setText("Skip rest of directory"); createFileAutoRenameButton.setText("Auto-rename"); createFileCancelButton.setText("Cancel"); org.jdesktop.layout.GroupLayout createFilePanelLayout = new org.jdesktop.layout.GroupLayout(createFilePanel); createFilePanel.setLayout(createFilePanelLayout); createFilePanelLayout.setHorizontalGroup( createFilePanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(createFilePanelLayout.createSequentialGroup() .add(createFilePanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(createFileLabel) .add(createFilePanelLayout.createSequentialGroup() .add(10, 10, 10) .add(createFilePanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(createFileSkipFileButton) .add(createFilePromptUserButton) .add(createFileSkipDirectoryButton) .add(createFileAutoRenameButton) .add(createFileCancelButton)))) .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); createFilePanelLayout.setVerticalGroup( createFilePanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(createFilePanelLayout.createSequentialGroup() .add(createFileLabel) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(createFilePromptUserButton) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(createFileSkipFileButton) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(createFileSkipDirectoryButton) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(createFileAutoRenameButton) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(createFileCancelButton)) ); dirExistsLabel.setText("Directory already exists:"); dirExistsPromptUserButton.setText("Prompt user"); dirExistsContinueButton.setText("Continue"); dirExistsSkipDirectoryButton.setText("Skip directory"); dirExistsAutoRenameButton.setText("Auto-rename"); dirExistsCancelButton.setText("Cancel"); org.jdesktop.layout.GroupLayout dirExistsPanelLayout = new org.jdesktop.layout.GroupLayout(dirExistsPanel); dirExistsPanel.setLayout(dirExistsPanelLayout); dirExistsPanelLayout.setHorizontalGroup( dirExistsPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(dirExistsLabel) .add(dirExistsPanelLayout.createSequentialGroup() .add(10, 10, 10) .add(dirExistsPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(dirExistsContinueButton) .add(dirExistsPromptUserButton) .add(dirExistsSkipDirectoryButton) .add(dirExistsAutoRenameButton) .add(dirExistsCancelButton))) ); dirExistsPanelLayout.setVerticalGroup( dirExistsPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(dirExistsPanelLayout.createSequentialGroup() .add(dirExistsLabel) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(dirExistsPromptUserButton) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(dirExistsContinueButton) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(dirExistsSkipDirectoryButton) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(dirExistsAutoRenameButton) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(dirExistsCancelButton)) ); fileExistsLabel.setText("File already exists:"); fileExistsPromptUserButton.setText("Prompt user"); fileExistsSkipFileButton.setText("Skip file"); fileExistsSkipDirectoryButton.setText("Skip rest of directory"); fileExistsOverwriteButton.setText("Overwrite existing file"); fileExistsAutoRenameButton.setText("Auto-rename"); fileExistsCancelButton.setText("Cancel"); org.jdesktop.layout.GroupLayout fileExistsPanelLayout = new org.jdesktop.layout.GroupLayout(fileExistsPanel); fileExistsPanel.setLayout(fileExistsPanelLayout); fileExistsPanelLayout.setHorizontalGroup( fileExistsPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(fileExistsPanelLayout.createSequentialGroup() .add(fileExistsPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(fileExistsLabel) .add(fileExistsPanelLayout.createSequentialGroup() .add(10, 10, 10) .add(fileExistsPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(fileExistsCancelButton) .add(fileExistsAutoRenameButton) .add(fileExistsSkipFileButton) .add(fileExistsPromptUserButton) .add(fileExistsSkipDirectoryButton) .add(fileExistsOverwriteButton)))) .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); fileExistsPanelLayout.setVerticalGroup( fileExistsPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(fileExistsPanelLayout.createSequentialGroup() .add(fileExistsLabel) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(fileExistsPromptUserButton) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(fileExistsSkipFileButton) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(fileExistsSkipDirectoryButton) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(fileExistsOverwriteButton) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(fileExistsAutoRenameButton) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(fileExistsCancelButton)) ); org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup() .addContainerGap() .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .add(21, 21, 21) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(dirExistsPanel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(createDirPanel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) .add(18, 18, 18) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(fileExistsPanel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(createFilePanel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))) .add(quietModeBox)) .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .addContainerGap() .add(quietModeBox) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(createDirPanel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(createFilePanel, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(fileExistsPanel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(dirExistsPanel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) .addContainerGap()) ); }// </editor-fold>//GEN-END:initComponents // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JRadioButton createDirAutoRenameButton; private javax.swing.JRadioButton createDirCancelButton; private javax.swing.JLabel createDirLabel; private javax.swing.JPanel createDirPanel; private javax.swing.JRadioButton createDirPromptUserButton; private javax.swing.JRadioButton createDirSkipDirectoryButton; private javax.swing.JRadioButton createFileAutoRenameButton; private javax.swing.JRadioButton createFileCancelButton; private javax.swing.JLabel createFileLabel; private javax.swing.JPanel createFilePanel; private javax.swing.JRadioButton createFilePromptUserButton; private javax.swing.JRadioButton createFileSkipDirectoryButton; private javax.swing.JRadioButton createFileSkipFileButton; private javax.swing.JRadioButton dirExistsAutoRenameButton; private javax.swing.JRadioButton dirExistsCancelButton; private javax.swing.JRadioButton dirExistsContinueButton; private javax.swing.JLabel dirExistsLabel; private javax.swing.JPanel dirExistsPanel; private javax.swing.JRadioButton dirExistsPromptUserButton; private javax.swing.JRadioButton dirExistsSkipDirectoryButton; private javax.swing.JRadioButton fileExistsAutoRenameButton; private javax.swing.JRadioButton fileExistsCancelButton; private javax.swing.JLabel fileExistsLabel; private javax.swing.JRadioButton fileExistsOverwriteButton; private javax.swing.JPanel fileExistsPanel; private javax.swing.JRadioButton fileExistsPromptUserButton; private javax.swing.JRadioButton fileExistsSkipDirectoryButton; private javax.swing.JRadioButton fileExistsSkipFileButton; private javax.swing.JCheckBox quietModeBox; // End of variables declaration//GEN-END:variables private abstract class AbstractListener<A> implements ActionListener { protected final AbstractButton button; protected final ExtractProperties p; protected final A action; public AbstractListener(AbstractButton button, ExtractProperties p, A action) { this.button = button; this.p = p; this.action = action; } /* @Override */ public void actionPerformed(ActionEvent e) { if(button.isSelected()) { //System.err.println("Setting action " + action.getClass().getSimpleName() + "." + // action); setAction(action); } } protected abstract void setAction(A action); } private class CreateDirListener extends AbstractListener<CreateDirectoryFailedAction> { public CreateDirListener(AbstractButton button, ExtractProperties p, CreateDirectoryFailedAction action) { super(button, p, action); } @Override protected void setAction(CreateDirectoryFailedAction action) { p.setCreateDirectoryFailedAction(action); } } private class CreateFileListener extends AbstractListener<CreateFileFailedAction> { public CreateFileListener(AbstractButton button, ExtractProperties p, CreateFileFailedAction action) { super(button, p, action); } @Override protected void setAction(CreateFileFailedAction action) { p.setCreateFileFailedAction(action); } } private class DirExistsListener extends AbstractListener<DirectoryExistsAction> { public DirExistsListener(AbstractButton button, ExtractProperties p, DirectoryExistsAction action) { super(button, p, action); } @Override protected void setAction(DirectoryExistsAction action) { p.setDirectoryExistsAction(action); } } private class FileExistsListener extends AbstractListener<FileExistsAction> { public FileExistsListener(AbstractButton button, ExtractProperties p, FileExistsAction action) { super(button, p, action); } @Override protected void setAction(FileExistsAction action) { p.setFileExistsAction(action); } } /* public static void main(String[] args) { JFrame jf = new JFrame("Test"); jf.add(new ExtractSettingsPanel()); jf.pack(); jf.setLocationRelativeTo(null); jf.setVisible(true); jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); } */ }