/* * Copyright (c) 2011 Patrick Meyer * * 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 com.itemanalysis.jmetrik.utils; import com.itemanalysis.jmetrik.swing.JmetrikTab; import com.itemanalysis.jmetrik.swing.JmetrikTextFile; import com.itemanalysis.jmetrik.swing.SimpleFilter; import org.apache.log4j.Logger; import javax.swing.*; import java.awt.*; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.File; import java.util.ArrayList; public class JmetrikFileUtils { private JFileChooser saveChooser = null; private JFileChooser openChooser = null; private SimpleFilter csvFilter = null; private SimpleFilter txtFilter = null; private ArrayList<PropertyChangeListener> propertyChangeListeners = null; static Logger logger = Logger.getLogger("jmetrik-logger"); public JmetrikFileUtils(){ txtFilter = new SimpleFilter("txt", "Text Files (*.txt)"); csvFilter = new SimpleFilter("csv", "CSV Files (*.csv)"); propertyChangeListeners = new ArrayList<PropertyChangeListener>(); } public File chooseFileToSave(Component parent, File directory){ if(saveChooser==null) saveChooser = new JFileChooser(); saveChooser.setCurrentDirectory(directory); saveChooser.setSelectedFile(directory); saveChooser.setFileFilter(txtFilter); saveChooser.addChoosableFileFilter(csvFilter); saveChooser.addChoosableFileFilter(txtFilter); saveChooser.setAcceptAllFileFilterUsed(false); saveChooser.setDialogType(JFileChooser.SAVE_DIALOG); saveChooser.setDialogTitle("Save File"); if(saveChooser.showDialog(parent, "Save File") != JFileChooser.APPROVE_OPTION) return null; String path = saveChooser.getSelectedFile().getAbsolutePath(); String fileName = saveChooser.getSelectedFile().getName(); String fileType = ""; if(!fileName.endsWith(".txt") && !fileName.endsWith(".csv")){ path+=".txt"; } File f=new File(path); return f; } public File chooseFileToOpen(Component parent){ if(openChooser==null) openChooser = new JFileChooser(); openChooser.setFileFilter(txtFilter); openChooser.addChoosableFileFilter(csvFilter); openChooser.addChoosableFileFilter(txtFilter); openChooser.setAcceptAllFileFilterUsed(true); openChooser.setDialogType(JFileChooser.OPEN_DIALOG); openChooser.setDialogTitle("Open File"); if(openChooser.showDialog(parent, "Open File") != JFileChooser.APPROVE_OPTION) return null; File f=openChooser.getSelectedFile(); return f; } // public boolean saveExistingFile(Component parent, File f){ // if(f.fileExists()){ // Toolkit.getDefaultToolkit().beep(); // int question = JOptionPane.showConfirmDialog(parent, // f.getName() + " already fileExists. Do you want to overwrite it?", // "File Exists", // JOptionPane.YES_NO_OPTION, // JOptionPane.QUESTION_MESSAGE); // if(question==JOptionPane.YES_OPTION) { // return true; // }else{ // return false; // } // } // return true; // } // public void save(final JmetrikTextFile textFile, final File f){ // Runnable task = new SwingWorker<String, Void>(){ // protected String doInBackground()throws Exception{ // textFile.fileSaveAs(f); // return ""; // } // // protected void done(){ // try{ // get(); // }catch(Exception ex){ // logger.fatal(ex.getMessage(), ex); // this.firePropertyChange("error", "", "Error - Check log for details."); // } // } // }; // task.run(); // } // // public void save(final JmetrikTextFile textFile, final File f, final JmetrikTab tab){ // Runnable task = new SwingWorker<String, Void>(){ // protected String doInBackground()throws Exception{ // textFile.fileSaveAs(f); // return ""; // } // // protected void done(){ // try{ // get(); // tab.setTitle(textFile.getFileName()); // }catch(Exception ex){ // logger.fatal(ex.getMessage(), ex); // this.firePropertyChange("error", "", "Error - Check log for details."); // } // } // }; // task.run(); // } //=============================================================================================================== //Process messages here // Note that SwingWorker classes also implement these methods. Just need to add list of // propertyChangeListeners to SwingWorker classes. See importTable(...) for an example. //=============================================================================================================== public synchronized void addPropertyChangeListener(PropertyChangeListener l){ propertyChangeListeners.add(l); } public synchronized void removePropertyChangeListener(PropertyChangeListener l){ propertyChangeListeners.remove(l); } public synchronized void firePropertyChange(String propertyName, Object oldValue, Object newValue){ PropertyChangeEvent e = new PropertyChangeEvent(this, propertyName, oldValue, newValue); for(PropertyChangeListener l : propertyChangeListeners){ l.propertyChange(e); } } }