All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ncsa.hdf.view.NewFileDialog Maven / Gradle / Ivy

The newest version!
/*****************************************************************************
 * Copyright by The HDF Group.                                               *
 * Copyright by the Board of Trustees of the University of Illinois.         *
 * All rights reserved.                                                      *
 *                                                                           *
 * This file is part of the HDF Java Products distribution.                  *
 * The full copyright notice, including terms governing use, modification,   *
 * and redistribution, is contained in the files COPYING and Copyright.html. *
 * COPYING can be found at the root of the source code distribution tree.    *
 * Or, see http://hdfgroup.org/products/hdf-java/doc/Copyright.html.         *
 * If you do not have access to either file, you may request a copy from     *
 * [email protected].                                                        *
 ****************************************************************************/

package ncsa.hdf.view;

import java.awt.Toolkit;
import java.io.File;
import java.util.Iterator;
import java.util.List;

import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

import ncsa.hdf.object.FileFormat;

/**
 * NewFileDialog shows a message dialog requesting user input for creating a new
 * HDF4/5 file.
 * 
 * @author Peter X. Cao
 * @version 2.4 9/6/2007
 */
public class NewFileDialog extends JFileChooser // JDialog
// implements ActionListener
{
    private static final long serialVersionUID = 4796246032789504234L;

    /** flag if the new file is an HDF5 */
    private String fileType;

    /** The current working directory */
    private String currentDir;

    /** The view working directory */
    private String viewDir;

    private boolean fileCreated;

    private List fileList;

    private final Toolkit toolkit;

    private final JFrame viewer;

    private boolean isH5 = false;

    private boolean isH4 = false;

    /**
     * constructs an NewFileDialog.
     * 
     * @param owner
     *            The owner of the dialog.
     * @param dir
     *            The default directory of the new file.
     * @param type
     *            The type of file format.
     * @param openFiles
     *            The list of current open files. It is used to make sure the
     *            new file cannot be any file in use.
     */
    public NewFileDialog(JFrame owner, String dir, String type, List openFiles) {
        super(dir);

        currentDir = dir;
        viewer = owner;
        viewDir = dir;
        fileType = type;
        fileCreated = false;
        fileList = openFiles;
        toolkit = Toolkit.getDefaultToolkit();
        
        if (currentDir != null) {
            currentDir += File.separator;
        }
        else {
            currentDir = "";
        }

        if (fileType == FileFormat.FILE_TYPE_HDF4) {
            isH4 = true;
            setSelectedFile(Tools.checkNewFile(currentDir, ".hdf"));
            setFileFilter(DefaultFileFilter.getFileFilterHDF4());
        }
        else if (fileType == FileFormat.FILE_TYPE_HDF5) {
            isH5 = true;
            setSelectedFile(Tools.checkNewFile(currentDir, ".h5"));
            setFileFilter(DefaultFileFilter.getFileFilterHDF5());
        }


        this.showSaveDialog(owner);
    }

    @Override
    protected void fireActionPerformed(String command) {
        super.fireActionPerformed(command);

        if (command.equals("ApproveSelection")) {
            fileCreated = createNewFile();
        }
        else {
            fileCreated = false;
        }
    }

    /** create a new HDF file with default file creation properties */
    private boolean createNewFile() {
        File f = this.getSelectedFile();
        if (f == null) {
            return false;
        }

        String fname = f.getAbsolutePath();

        if (fname == null) {
            return false;
        }

        fname = fname.trim();
        if ((fname == null) || (fname.length() == 0)) {
            toolkit.beep();
            JOptionPane.showMessageDialog(this, "Invalid file name.", viewer
                    .getTitle(), JOptionPane.ERROR_MESSAGE);
            return false;
        }

        String extensions = FileFormat.getFileExtensions();
        boolean noExtension = true;
        if ((extensions != null) && (extensions.length() > 0)) {
            java.util.StringTokenizer currentExt = new java.util.StringTokenizer(
                    extensions, ",");
            String extension = "";
            String tmpFilename = fname.toLowerCase();
            while (currentExt.hasMoreTokens() && noExtension) {
                extension = currentExt.nextToken().trim().toLowerCase();
                noExtension = !tmpFilename.endsWith("." + extension);
            }
        }

        if (noExtension) {
            if (isH4) {
                fname += ".hdf";
                f = new File(fname);
                setSelectedFile(f);
            }
            else if (isH5) {
                fname += ".h5";
                f = new File(fname);
                setSelectedFile(f);
            }
        }

        if (f.exists() && f.isDirectory()) {
            toolkit.beep();
            JOptionPane.showMessageDialog(this, "File is a directory.", viewer
                    .getTitle(), JOptionPane.ERROR_MESSAGE);
            return false;
        }

        File pfile = f.getParentFile();
        if (pfile == null) {
            fname = viewDir + File.separator + fname;
            f = new File(fname);
        }
        else if (!pfile.exists()) {
            toolkit.beep();
            JOptionPane.showMessageDialog(this, "File path does not exist at\n"
                    + pfile.getPath(), viewer.getTitle(),
                    JOptionPane.ERROR_MESSAGE);
            return false;
        }

        // check if the file is in use
        if (fileList != null) {
            FileFormat theFile = null;
            Iterator iterator = fileList.iterator();
            while (iterator.hasNext()) {
                theFile = (FileFormat) iterator.next();
                if (theFile.getFilePath().equals(fname)) {
                    toolkit.beep();
                    JOptionPane
                            .showMessageDialog(
                                    this,
                                    "Unable to create the new file. \nThe file is being used.",
                                    viewer.getTitle(),
                                    JOptionPane.ERROR_MESSAGE);
                    return false;
                }
            }
        }

        int newFileFlag = -1;
        if (f.exists()) {
            newFileFlag = JOptionPane.showConfirmDialog(this,
                    "File exists. Do you want to replace it ?", viewer
                            .getTitle(), JOptionPane.YES_NO_OPTION);
            if (newFileFlag == JOptionPane.NO_OPTION) {
                return false;
            }
        }

        currentDir = f.getParent();
        try {
        	int aFlag = FileFormat.FILE_CREATE_DELETE;
        	if (ViewProperties.isEarlyLib())
        		aFlag = FileFormat.FILE_CREATE_DELETE | FileFormat.FILE_CREATE_EARLY_LIB;
            FileFormat.getFileFormat(fileType).createFile(fname, aFlag);
        }
        catch (Exception ex) {
            toolkit.beep();
            JOptionPane.showMessageDialog(this, ex.getMessage(), viewer
                    .getTitle(), JOptionPane.ERROR_MESSAGE);
            return false;
        }

        return true;
    }

    public boolean isFileCreated() {
        return fileCreated;
    }

    public String getFile() {
        String fname = null;
        File f = this.getSelectedFile();
        if (f != null) {
            fname = f.getAbsolutePath();
        }

        return fname;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy