/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.statcato.file;
import org.statcato.Statcato;
import org.statcato.LogWindow;
import org.statcato.DialogEdit;
import org.statcato.utils.HelperFunctions;
import org.statcato.spreadsheet.Spreadsheet;
import javax.swing.JFileChooser;
import java.io.File;
import javax.swing.JOptionPane;
import java.util.Vector;
import java.util.Enumeration;
/**
* A collection of file operations.
*
* @author Margaret Yau
* @version %I%, %G%
* @since 1.0
*/
public class FileOperations {
private static File recentDatasheet = null;
private static File recentProject = null;
private static ExtensionFileFilter excelFilter =
new ExtensionFileFilter("Excel (*.xls)", "xls");
private static ExtensionFileFilter csvFilter =
new ExtensionFileFilter("Comma-separated values(*.csv)", "csv");
private static ExtensionFileFilter txtFilter =
new ExtensionFileFilter("Tab-delimited values (*.txt)", "txt");
private static ExtensionFileFilter stcFilter =
new ExtensionFileFilter("Statcato Project File (.stc)", Project.extension);
/**
* Opens a log.
*
* @param app parent application
*/
public static void openLogFile(Statcato app) {
// create a file chooser
JFileChooser fc = new JFileChooser();
fc.addChoosableFileFilter(new ExtensionFileFilter("HTML", "html"));
fc.setAcceptAllFileFilterUsed(false);
LogWindow LogTextPane = app.getLogTextPane();
int returnValue = fc.showOpenDialog(app);
if (returnValue == JFileChooser.APPROVE_OPTION) {
File file = fc.getSelectedFile();
String contents = HelperFunctions.getFileContents(file);
// check if append to or overwrite current log window
Object[] options = {"Overwrite", "append"};
int choice = JOptionPane.showOptionDialog(app,
"Would you like to overwrite the current log window with the file you are opening, or append file contents to current log window",
"Load Log Window", JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE, null, options, options[1]);
if (choice == 0) { // overwrite
app.compoundEdit = new DialogEdit("overwrite log");
LogTextPane.addHeading("Open saved log " +
"window (overwrite): " + file.getName());
LogTextPane.overwrite(contents);
app.compoundEdit.end();
app.addCompoundEdit(app.compoundEdit);
}
else {// append
contents = "
" + contents;
app.compoundEdit = new DialogEdit("append log");
LogTextPane.addHeading("Open saved log window " +
"(append): " + file.getName());
LogTextPane.addText(contents);
app.compoundEdit.end();
app.addCompoundEdit(app.compoundEdit);
}
}
}
/**
* Opens a datasheet
*
* @param app parent application
*/
public static void openDatasheet(Statcato app) {
// create a file chooser
JFileChooser fc = new JFileChooser(
recentDatasheet==null?null:recentDatasheet.getParentFile());
fc.addChoosableFileFilter(excelFilter);
fc.addChoosableFileFilter(csvFilter);
fc.addChoosableFileFilter(txtFilter);
fc.setAcceptAllFileFilterUsed(false);
// set selected file filter
if (recentDatasheet != null) {
if (FileChooserUtils.getExtension(recentDatasheet).equals("xls")) {
fc.setFileFilter(excelFilter);
}
else if (FileChooserUtils.getExtension(recentDatasheet).equals("csv")) {
fc.setFileFilter(csvFilter);
}
else {
fc.setFileFilter(txtFilter);
}
}
int returnValue = fc.showOpenDialog(app);
if (returnValue == JFileChooser.APPROVE_OPTION) {
File file = fc.getSelectedFile();
if (file == null || !file.isFile()) {
app.showErrorDialog("Error opening datasheet");
}
else {
// open excel file
if (FileChooserUtils.getExtension(file).equals("xls")) {
Vector sheets = HelperFunctions.readExcelFile(file);
if (sheets != null) {
for (Enumeration e = sheets.elements(); e.hasMoreElements(); ) {
String str = (String) e.nextElement();
if (!str.trim().equals(""))
app.getDatasheetTabbedPane().addDatasheet(str, null);
}
}
else {
app.showErrorDialog("Error reading " + "excel file.");
return;
}
}
else {
String contents = HelperFunctions.getFileContents(file);
if (FileChooserUtils.getExtension(file).equals("csv")) {
contents = HelperFunctions.parseCSV(contents);
}
app.getDatasheetTabbedPane().addDatasheet(contents, file);
}
recentDatasheet = file;
}
}
}
/**
* Opens a project.
*
* @param app parent application
*/
public static void openProjectFile(Statcato app) {
// create a file chooser
JFileChooser fc = new JFileChooser(
recentProject==null?null:recentProject.getParentFile());
fc.addChoosableFileFilter(stcFilter);
fc.setAcceptAllFileFilterUsed(false);
Project project = app.getProject();
int returnValue = fc.showOpenDialog(app);
if (returnValue == JFileChooser.APPROVE_OPTION) {
File file = fc.getSelectedFile();
if (file == null || !file.isFile())
app.showErrorDialog("Error opening project file");
else {
if (!project.readFile(file.getPath())) {
app.showErrorDialog("Error opening project file");
}
recentProject = file;
}
}
}
/**
* Saves the current datasheet of the application to a file.
*
* @param app Statcato application
* @param isSaveAs whether to save as
*/
public static void saveDatasheet(Statcato app, boolean isSaveAs) {
Spreadsheet table = app.getSpreadsheet();
File file = table.writeToFile(app, isSaveAs);
if (file != null) {
app.getDatasheetTabbedPane().setCurrentTabTitle(file.getName());
app.setStatus("Datasheet saved to " + file.getName() + ".");
app.setClearStatusTimer(3);
recentDatasheet = file;
}
}
/**
* Saves the current project of the application to a file.
*
* @param app Statcato application
* @param isSaveAs whether to save as
*/
public static void saveProject(Statcato app, boolean isSaveAs) {
if (app.getProject().writeToFile(isSaveAs)) {
app.setTitle("Statcato - " + app.getProject().getName());
app.setStatus("Project saved to " + app.getProject().getName() + ".");
app.setClearStatusTimer(3);
recentProject = app.getProject().getFile();
}
else {
app.showErrorDialog("Failed to save project file");
}
}
/**
* Returns the recent datasheet file.
*
* @return recent datasheet file
*/
public static File getRecentDatasheet() {
return recentDatasheet;
}
/**
* Returns the recent project file.
*
* @return recent project file
*/
public static File getRecentProject() {
return recentProject;
}
}
Ads help maintain this website.