/*
* Copyright (C) 2004 Anthony Smith
*
* 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, 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* ----------------------------------------------------------------------------
* TITLE $Id$
* ---------------------------------------------------------------------------
*
* --------------------------------------------------------------------------*/
package opendbcopy.gui;
import opendbcopy.config.FileType;
import org.apache.log4j.Logger;
import java.awt.Component;
import java.io.File;
import java.util.StringTokenizer;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
/**
* class description
*
* @author Anthony Smith
* @version $Revision$
*/
public class DialogFile extends JFrame {
private static Logger logger = Logger.getLogger(DialogFile.class.getName());
private static final String POINT = ".";
private static final String EMPTY_STRING = "";
private Component parent;
private String fileName = "";
private JFileChooser chooser;
/**
* Creates a new DialogFile object.
*
* @param parent DOCUMENT ME!
*/
public DialogFile(Component parent) {
this.parent = parent;
// this is a workaround for http://developer.java.sun.com/developer/bugParade/bugs/4458949.html, fixed in jre 1.4.0
/* SecurityManager backup = System.getSecurityManager();
System.setSecurityManager( null );
this.chooser = new JFileChooser( java.lang.System.getProperty( "user.home" ) );
System.setSecurityManager( backup );
*/
chooser = new JFileChooser(java.lang.System.getProperty("user.dir"));
chooser.setFileHidingEnabled(false);
}
/**
* DOCUMENT ME!
*
* @param title DOCUMENT ME!
* @param fileType DOCUMENT ME!
* @param currentDir DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public final String openDialog(String title,
String fileType,
File currentDir) {
boolean fileEndingOk = false;
int DialogReturnValue = 0;
chooser.setDialogTitle(title);
chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
if (currentDir != null) {
chooser.setCurrentDirectory(currentDir);
}
ExampleFileFilter filter = new ExampleFileFilter();
filter.addExtension(fileType);
filter.setDescription(fileType);
chooser.setFileFilter(filter);
DialogReturnValue = chooser.showOpenDialog(this.parent);
while (!fileEndingOk && (DialogReturnValue != JFileChooser.CANCEL_OPTION)) {
if (DialogReturnValue == JFileChooser.APPROVE_OPTION) {
this.fileName = chooser.getSelectedFile().getAbsolutePath();
if (checkFileEnding(fileType)) {
fileEndingOk = true;
} else {
chooser.setApproveButtonToolTipText(filter.getDescription());
DialogReturnValue = chooser.showOpenDialog(this.parent);
}
}
}
if (DialogReturnValue == JFileChooser.APPROVE_OPTION) {
return this.fileName;
} else {
return EMPTY_STRING;
}
}
/**
* DOCUMENT ME!
*
* @param title DOCUMENT ME!
* @param fileType DOCUMENT ME!
* @param currentDir DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public final String saveDialog(String title,
String fileType,
File currentDir) {
boolean fileEndingOk = false;
int dialogReturnValue = 0;
chooser.setDialogTitle(title);
chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
if (currentDir != null) {
chooser.setCurrentDirectory(currentDir);
}
ExampleFileFilter filter = new ExampleFileFilter();
filter.addExtension(fileType);
filter.setDescription(fileType);
chooser.setFileFilter(filter);
dialogReturnValue = chooser.showSaveDialog(this.parent);
while (!fileEndingOk && (dialogReturnValue != JFileChooser.CANCEL_OPTION)) {
if (dialogReturnValue == JFileChooser.APPROVE_OPTION) {
this.fileName = chooser.getSelectedFile().getAbsolutePath();
if (checkFileEnding(fileType)) {
fileEndingOk = true;
} else {
this.fileName += ("." + fileType);
fileEndingOk = true;
}
}
}
if (dialogReturnValue == JFileChooser.APPROVE_OPTION) {
return this.fileName;
} else {
return EMPTY_STRING;
}
}
/**
* DOCUMENT ME!
*
* @param title DOCUMENT ME!
* @param fileType DOCUMENT ME!
* @param currentDir DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public final String saveDialogAnyFile(String title,
boolean directoriesOnly,
File currentDir) {
int dialogReturnValue = 0;
chooser.setDialogTitle(title);
if (currentDir != null) {
chooser.setCurrentDirectory(currentDir);
}
if (directoriesOnly) {
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
} else {
chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
}
dialogReturnValue = chooser.showSaveDialog(this.parent);
if (dialogReturnValue == JFileChooser.APPROVE_OPTION) {
return chooser.getSelectedFile().getAbsolutePath();
} else {
return null;
}
}
/**
* DOCUMENT ME!
*
* @param fileType DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
private boolean checkFileEnding(String fileType) {
boolean validFileEnding = false;
String token = "";
StringTokenizer st = new StringTokenizer(this.fileName, POINT);
while (st.hasMoreTokens()) {
token = st.nextToken();
if (fileType.compareTo(FileType.HTML_FILE) == 0) {
if (token.compareToIgnoreCase(FileType.HTML_FILE) == 0) {
validFileEnding = true;
}
}
// file ending must be pdf
if (fileType.compareToIgnoreCase(FileType.PDF_FILE) == 0) {
if (token.compareToIgnoreCase(FileType.PDF_FILE) == 0) {
validFileEnding = true;
}
}
// file ending must be xml
if (fileType.compareToIgnoreCase(FileType.XML_FILE) == 0) {
if (token.compareToIgnoreCase(FileType.XML_FILE) == 0) {
validFileEnding = true;
}
}
// file ending must be sql
if (fileType.compareToIgnoreCase(FileType.SQL_FILE) == 0) {
if (token.compareToIgnoreCase(FileType.SQL_FILE) == 0) {
validFileEnding = true;
}
}
// file ending must be properties
if (fileType.compareToIgnoreCase(FileType.PROPERTIES_FILE) == 0) {
if (token.compareToIgnoreCase(FileType.PROPERTIES_FILE) == 0) {
validFileEnding = true;
}
}
}
return validFileEnding;
}
}