package de.spindler.duplicatefinder;
import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JToolBar;
import javax.swing.ListSelectionModel;
import javax.swing.border.EtchedBorder;
import de.spindler.duplicatefinder.DuplicateFinder.DuplicateFoundListener;
public class DuplicateFinderFrame extends JFrame implements ActionListener {
private static final long serialVersionUID = -4907316288272609039L;
private static final String COMMAND_CLOSE = "close";
private static final String COMMAND_START = "start";
private JProgressBar progressBar;
private PropertyInputPanel propInputPanel;
private DuplicateTableModel tableModel;
public DuplicateFinderFrame() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle(Messages.FRAME_TITLE);
setIconImage(new ImageIcon(this.getClass().getResource("edit_copy.png")).getImage());
getContentPane().setLayout(new BorderLayout(0, 0));
createToolBar();
createContents();
}
private void createContents() {
JPanel pnlContainer = new JPanel();
getContentPane().add(pnlContainer, BorderLayout.CENTER);
GridBagLayout gbl_pnlContainer = new GridBagLayout();
gbl_pnlContainer.rowWeights = new double[] { 0.0, 1.0, 0.0 };
gbl_pnlContainer.columnWeights = new double[] { 0.0, 1.0 };
pnlContainer.setLayout(gbl_pnlContainer);
GridBagConstraints gbc_dirChooserPanel = new GridBagConstraints();
gbc_dirChooserPanel.gridy = 0;
gbc_dirChooserPanel.gridx = 0;
gbc_dirChooserPanel.gridwidth = 2;
gbc_dirChooserPanel.fill = GridBagConstraints.HORIZONTAL;
// Choose directory panel
propInputPanel = new PropertyInputPanel();
pnlContainer.add(propInputPanel, gbc_dirChooserPanel);
GridBagConstraints gbc_table = new GridBagConstraints();
gbc_table.gridwidth = 2;
gbc_table.insets = new Insets(0, 5, 0, 5);
gbc_table.fill = GridBagConstraints.BOTH;
gbc_table.gridx = 0;
gbc_table.gridy = 1;
// Table for results
tableModel = new DuplicateTableModel();
JTable table = new JTable(tableModel);
table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
table.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null));
// table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
JScrollPane jScrollPane = new JScrollPane(table);
pnlContainer.add(jScrollPane, gbc_table);
GridBagConstraints gbc_btnStart = new GridBagConstraints();
gbc_btnStart.fill = GridBagConstraints.HORIZONTAL;
gbc_btnStart.insets = new Insets(5, 5, 5, 5);
gbc_btnStart.gridx = 0;
gbc_btnStart.gridy = 2;
// Start button
JButton btnStart = new JButton(Messages.START);
btnStart.setActionCommand(COMMAND_START);
btnStart.addActionListener(this);
pnlContainer.add(btnStart, gbc_btnStart);
GridBagConstraints gbc_progressBar = new GridBagConstraints();
gbc_progressBar.insets = new Insets(5, 5, 5, 5);
gbc_progressBar.fill = GridBagConstraints.HORIZONTAL;
gbc_progressBar.gridx = 1;
gbc_progressBar.gridy = 2;
// ProgressBar
progressBar = new JProgressBar();
pnlContainer.add(progressBar, gbc_progressBar);
pack();
// setColumnWeights(table, new float[] { 0.1f, 0.45f, 0.45f });
}
private void setColumnWeights(JTable table, float[] weights) {
float tWidth = (float) (getBounds().width);
for (int i = 0; i < weights.length; i++) {
float w = weights[i];
table.getColumnModel().getColumn(i).setPreferredWidth((int) (tWidth * w));
}
}
/**
* Creates the applications toolbar.
*/
private void createToolBar() {
JToolBar toolBar = new JToolBar();
toolBar.setFloatable(false);
getContentPane().add(toolBar, BorderLayout.NORTH);
JButton btnClose = new JButton(Messages.CLOSE);
btnClose.setIcon(new ImageIcon(this.getClass().getResource("delete.gif")));
btnClose.setActionCommand(COMMAND_CLOSE);
btnClose.addActionListener(this);
toolBar.add(btnClose);
}
@Override
public void actionPerformed(ActionEvent e) {
String cmd = e.getActionCommand();
if (COMMAND_CLOSE.equals(cmd)) {
System.exit(0);
} else if (COMMAND_START.equals(cmd)) {
SearchProperties properties = propInputPanel.getProperties();
DuplicateFinder finder = new DuplicateFinder(properties);
finder.addListener(new DuplicateFoundListener() {
@Override
public void duplicateFound(Duplicate duplicate) {
tableModel.addDuplicate(duplicate);
}
});
finder.start(progressBar.getModel());
}
}
/**
* Main method.
*
* @param args
*/
public static void main(String[] args) {
UIToolkit.setSystemLookandFeel();
DuplicateFinderFrame frame = new DuplicateFinderFrame();
frame.setBounds(UIToolkit.getCenteredPosition(0.9f, 0.75f));
frame.setVisible(true);
}
}