/*
* Copyright (C) 2004 The Concord Consortium, Inc.,
* 10 Concord Crossing, Concord, MA 01742
*
* Web Site: http://www.concord.org
* Email: info@concord.org
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* END LICENSE */
package org.concord.swing;
import java.awt.BorderLayout;
import java.awt.LayoutManager;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Set;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
public class ZipperPanel extends JPanel {
CCJCheckBoxTree filesTree;
MostRecentFileDialog mrfd =
new MostRecentFileDialog("org.concord.zip.file.source");
Hashtable filesHash = new Hashtable();
Vector filesToZip = new Vector();
public ZipperPanel() {
super();
init();
// TODO Auto-generated constructor stub
}
public ZipperPanel(boolean isDoubleBuffered) {
super(isDoubleBuffered);
// TODO Auto-generated constructor stub
init();
}
public ZipperPanel(LayoutManager layout) {
super(layout);
// TODO Auto-generated constructor stub
init();
}
public ZipperPanel(LayoutManager layout, boolean isDoubleBuffered) {
super(layout, isDoubleBuffered);
// TODO Auto-generated constructor stub
init();
}
private void init() {
this.setLayout(new BorderLayout());
filesTree = new CCJCheckBoxTree("Files to Zip");
filesTree.setCellRenderer(new CCJCheckBoxRenderer());
filesTree.setRootVisible(false);
JScrollPane scrollPane = new JScrollPane(filesTree);
this.add(scrollPane, BorderLayout.CENTER);
JButton addFile = new JButton("Add File(s)");
addFile.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int retval = mrfd.showOpenDialog(null, "Add a file to compress");
if(retval == MostRecentFileDialog.APPROVE_OPTION) {
File f = mrfd.getSelectedFile();
if(f.isFile() &&
(!filesHash.contains(f.getAbsolutePath()))) {
String fn = f.getName();
CCJCheckBoxTree.NodeHolder newNodeHolder =
new CCJCheckBoxTree.NodeHolder(fn, true);
filesTree.addObject(newNodeHolder);
filesHash.put(newNodeHolder, f.getAbsolutePath());
}
}
}
});
JButton zipFile = new JButton("Zip File(s)");
zipFile.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(filesHash.isEmpty()) {
String msg = "No files to zip. Please add files first.";
JOptionPane.showMessageDialog(null, msg,
"NO Files", JOptionPane.ERROR_MESSAGE);
return;
}
filesToZip.removeAllElements();
Set keys = filesHash.keySet();
Iterator it = keys.iterator();
while(it.hasNext()) {
CCJCheckBoxTree.NodeHolder key = (CCJCheckBoxTree.NodeHolder)it.next();
if(key.checked)
filesToZip.addElement((new File(filesHash.get(key).toString())));
}
if(filesToZip.size() == 0) {
String msg = "Please select the files to zip.";
JOptionPane.showMessageDialog(null, msg,
"NO Files", JOptionPane.ERROR_MESSAGE);
return;
}
MostRecentFileDialog mrfd2 = new MostRecentFileDialog("org.concord.zip.file.target");
int retval = mrfd2.showSaveDialog(null, "Save zipped file");
if(retval == MostRecentFileDialog.APPROVE_OPTION) {
File f = mrfd2.getSelectedFile();
Zipper.zip(filesToZip, f);
}
}
});
JPanel control = new JPanel();
control.add(addFile);
control.add(zipFile);
this.add(control, BorderLayout.SOUTH);
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame frame = new JFrame("Zip Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ZipperPanel zp = new ZipperPanel();
frame.getContentPane().add(zp);
frame.pack();
frame.show();
}
}