org.executequery.gui.text.TextFileWriter.java Source code

Java tutorial

Introduction

Here is the source code for org.executequery.gui.text.TextFileWriter.java

Source

/*
 * TextFileWriter.java
 *
 * Copyright (C) 2002-2015 Takis Diakoumis
 *
 * 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 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 org.executequery.gui.text;

import java.io.File;
import java.io.IOException;

import javax.swing.JFileChooser;
import javax.swing.filechooser.FileFilter;

import org.apache.commons.lang.StringUtils;
import org.executequery.EventMediator;
import org.executequery.GUIUtilities;
import org.executequery.components.FileChooserDialog;
import org.executequery.event.DefaultFileIOEvent;
import org.executequery.event.FileIOEvent;
import org.executequery.gui.SaveFunction;
import org.executequery.io.SimpleTextFileWriter;
import org.underworldlabs.swing.FileSelector;
import org.underworldlabs.util.MiscUtils;
import org.underworldlabs.util.SystemProperties;

/**
 *
 * @author   Takis Diakoumis
 * @version  $Revision: 1487 $
 * @date     $Date: 2015-08-23 22:21:42 +1000 (Sun, 23 Aug 2015) $
 */
public class TextFileWriter {

    /** The text to save */
    private String text;

    /** The path to save to */
    private String path;

    /** The selected file */
    private File selectedFile;

    private boolean showDialog;

    /** 
     *  Creates a new object with the specified text to be saved to the specified path.
     *
     *  @param the text to be saved
     *  @param the path to save to
     */
    public TextFileWriter(String text, File selectedFile) {
        this.text = text;
        this.selectedFile = selectedFile;
    }

    /** <p>Creates a new object with the specified text to
     *  be saved to the specified path.
     *
     *  @param the text to be saved
     *  @param the path to save to
     */
    public TextFileWriter(String text, String path) {
        this.text = text;
        this.path = path;
    }

    /** <p>Creates a new object with the specified text to
     *  be saved to the specified path.
     *
     *  @param the text to be saved
     *  @param the path to save to
     *  @param whether to force show the save dialog or not
     */
    public TextFileWriter(String text, String path, boolean showDialog) {
        this.text = text;
        this.path = path;
        this.showDialog = showDialog;
    }

    /** <p>Creates a new object with the specified text to save.
     *  A call to <code>write()</code> will open a file selector
     *  dialog to retrieve the path.
     *
     *  @param the text to be saved
     */
    public TextFileWriter(String text) {
        this.text = text;
    }

    /**
     * Writes the content to file.
     *
     * @return the result of the process:
     *         SaveFunction.SAVE_INVALID,
     *         SaveFunction.SAVE_FAILED,
     *         SaveFunction.SAVE_CANCELLED,
     *         SaveFunction.SAVE_COMPLETE
     */
    private int writeFile() {

        if (path == null || path.length() == 0) {

            return SaveFunction.SAVE_INVALID;
        }

        try {

            SimpleTextFileWriter writer = new SimpleTextFileWriter();
            writer.write(path, text, lineSeparator());

            fireFileOpened(path);

            return SaveFunction.SAVE_COMPLETE;

        } catch (IOException e) {

            String message = String.format("An error occurred saving to file." + "\n\nThe system returned:\n%s",
                    e.getMessage());

            GUIUtilities.displayExceptionErrorDialog(message, e);

            path = null;

            return SaveFunction.SAVE_FAILED;

        }

    }

    private LineSeparator lineSeparator() {

        return LineSeparator.valueForIndex(SystemProperties.getIntProperty("user", "general.line.separator"));
    }

    public int write() {

        if (showSaveDialog()) {

            int result = writeFile();

            String message = null;
            switch (result) {
            case SaveFunction.SAVE_COMPLETE:
                message = "I/O process complete";
                break;
            case SaveFunction.SAVE_FAILED:
                message = "I/O process failed";
                break;

            case SaveFunction.SAVE_INVALID:
                message = "I/O process invalid";
                break;
            }

            if (message != null) {

                setStatusText(message);
            }

            return result;

        } else {

            setStatusText("I/O process cancelled");
            return SaveFunction.SAVE_CANCELLED;
        }

    }

    private void setStatusText(String message) {

        GUIUtilities.getStatusBar().setSecondLabelText(message);
    }

    public File getSavedFile() {

        return new File(path);
    }

    private boolean showSaveDialog() {

        if (!showDialog && !MiscUtils.isNull(path)) { // already have path

            return true;
        }

        FileSelector textFiles = new FileSelector(new String[] { "txt" }, "Text files");
        FileSelector sqlFiles = new FileSelector(new String[] { "sql" }, "SQL files");

        FileChooserDialog fileChooser = new FileChooserDialog();
        fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
        fileChooser.addChoosableFileFilter(textFiles);
        fileChooser.addChoosableFileFilter(sqlFiles);

        if (selectedFile != null) {

            fileChooser.setSelectedFile(selectedFile);
        }

        int result = fileChooser.showSaveDialog(GUIUtilities.getInFocusDialogOrWindow());
        if (result == JFileChooser.CANCEL_OPTION) {

            return false;
        }

        if (fileChooser.getSelectedFile() != null) {

            path = fileChooser.getSelectedFile().getAbsolutePath();
        }

        String extension = null;
        FileFilter filter = fileChooser.getFileFilter();
        if (filter == textFiles) {

            extension = ".txt";

        } else if (filter == sqlFiles) {

            extension = ".sql";
        }

        if (StringUtils.isNotBlank(extension) && !path.endsWith(extension)) {

            path += extension;
        }

        return true;
    }

    private void fireFileOpened(String file) {

        EventMediator.fireEvent(new DefaultFileIOEvent(this, FileIOEvent.OUTPUT_COMPLETE, file));
    }

}