/*
* This library is part of OpenCms -
* the Open Source Content Management System
*
* Copyright (c) Alkacon Software GmbH (http://www.alkacon.com)
*
* 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.
*
* For further information about Alkacon Software GmbH, please see the
* company website: http://www.alkacon.com
*
* For further information about OpenCms, please see the
* project website: http://www.opencms.org
*
* 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
*/
package org.opencms.applet.upload;
import java.awt.Component;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
/**
* A file chooser custom tailored for the OpenCms upload applet.
* <p>
*
* It will check the existance the selected files on the server and pops up a
* further modal dialog to check / uncheck whether files should be overwritten in
* case of collision.
* <p>
*
*/
public class UploadAppletFileChooser extends javax.swing.JFileChooser {
/** Generated <code>serialVersion UID</code>. */
private static final long serialVersionUID = 6473542662952983859L;
/** The applet to work for. */
protected FileUploadApplet m_applet;
/** Access to the internal file chooser dialog object. */
protected JDialog m_dialogAccessHack;
/** Return value code. */
protected int m_returnValue = ERROR_OPTION;
/**
* Creates a file chooser for the given upload applet.<p>
*
* @param applet the upload applet peer for this file chooser
*/
public UploadAppletFileChooser(FileUploadApplet applet) {
m_applet = applet;
addActionListener(new ActionListener() {
/**
* @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
*/
public void actionPerformed(ActionEvent e) {
String actionCommand = e.getActionCommand();
if (actionCommand != null && actionCommand.indexOf("Cancel") == -1) {
File[] files = getSelectedFiles();
int rtv = m_applet.checkServerOverwrites(files);
if (rtv == ModalDialog.CANCEL_OPTION) {
m_returnValue = JFileChooser.CANCEL_OPTION;
} else if (rtv == ModalDialog.APPROVE_OPTION) {
m_returnValue = JFileChooser.APPROVE_OPTION;
UploadAppletFileChooser.this.m_dialogAccessHack.dispose();
} else {
m_returnValue = JFileChooser.ERROR_OPTION;
}
} else {
m_returnValue = JFileChooser.CANCEL_OPTION;
UploadAppletFileChooser.this.m_dialogAccessHack.dispose();
}
}
});
}
/**
* @see javax.swing.JFileChooser#createDialog(java.awt.Component)
*/
protected JDialog createDialog(Component parent) throws HeadlessException {
JDialog dialog = super.createDialog(parent);
m_dialogAccessHack = dialog;
// show the file selector dialog
return dialog;
}
/**
* @see javax.swing.JFileChooser#showDialog(java.awt.Component, java.lang.String)
*/
public int showDialog(Component parent, String approveButtonText) throws HeadlessException {
if (approveButtonText != null) {
setApproveButtonText(approveButtonText);
setDialogType(CUSTOM_DIALOG);
}
m_dialogAccessHack = createDialog(parent);
m_dialogAccessHack.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
m_returnValue = CANCEL_OPTION;
}
});
m_returnValue = ERROR_OPTION;
rescanCurrentDirectory();
m_dialogAccessHack.setVisible(true);
m_dialogAccessHack.dispose();
m_dialogAccessHack = null;
return m_returnValue;
}
}