/*
 * $Id: PanelModelEditor.java,v 1.2 2003/08/22 23:02:35 dwd Exp $
 *
 * This software is provided by NOAA for full, free and open release.  It is
 * understood by the recipient/user that NOAA assumes no liability for any
 * errors contained in the code.  Although this software is released without
 * conditions or restrictions in its use, it is expected that appropriate
 * credit be given to its author and to the National Oceanic and Atmospheric
 * Administration should the software be included by the recipient as an
 * element in other product development.
 */

package sgtplot.beans;

import java.awt.*;
import java.io.InvalidObjectException;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import javax.swing.*;
import javax.swing.filechooser.*;

import sgtplot.util.SimpleFileFilter;

import java.awt.event.*;


/**
 * Run-time and stand-alone editor to modify a PanelModel.
 *
 * @author Donald Denbo
 * @version $Revision: 1.2 $, $Date: 2003/08/22 23:02:35 $
 * @since 3.0
 * @see PanelModelCustomizer
 **/
public class PanelModelEditor extends JFrame {
  private PanelModel panelModel_ = null;
  private static boolean isApp_ = false;
  private boolean throwClosing = true;
  private String openPath_ = null;
  private static String title_ = "Panel Model Editor";
  //
  private JFileChooser fileChooser_ = null;
  private JPanel pmcPanel = new JPanel();
  private JPanel buttonPanel = new JPanel();
  private JMenuBar menuBar = new JMenuBar();
  private JButton okButton = new JButton();
  private PanelModelCustomizer pmc = new PanelModelCustomizer();
  private BorderLayout borderLayout1 = new BorderLayout();
  private JMenu fileMenu = new JMenu();
  private JMenuItem openFileMI = new JMenuItem();
  private JMenuItem saveFileMI = new JMenuItem();
  private JMenuItem exitFileMI = new JMenuItem();
  private JMenuItem saveAsFileMI = new JMenuItem();
  private JMenuItem newFileMI = new JMenuItem();

  /**
   * PanelModelEditor constructor.
   * @param pModel PanelModel
   */
  public PanelModelEditor(PanelModel pModel) {
    this();
    setPanelModel(pModel);
  }

  /**
   * Default constructor.
   */
  public PanelModelEditor() {
    try {
      jbInit();
      pack();
    }
    catch(Exception e) {
      e.printStackTrace();
    }
  }

  /**
   * Main method for stand-alone application to create/modify PanelModels
   * that have been serialized using XMLEncoder.
   * @param args Arguement String
   * @see java.beans.XMLEncoder
   */
  public static void main(String[] args) {
    isApp_ = true;
    PanelModelEditor pme = new PanelModelEditor(new PanelModel());
    pme.setTitle(title_);
    pme.setVisible(true);
  }

  private void jbInit() throws Exception {
    okButton.setText("OK");
    okButton.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        okButton_actionPerformed(e);
      }
    });
    pmcPanel.setLayout(borderLayout1);
    fileMenu.setText("File");
    openFileMI.setActionCommand("Open");
    openFileMI.setText("Open...");
    openFileMI.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        openFileMI_actionPerformed(e);
      }
    });
    saveFileMI.setActionCommand("Save");
    saveFileMI.setText("Save");
    saveFileMI.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        saveFileMI_actionPerformed(e);
      }
    });
    exitFileMI.setText("Exit");
    exitFileMI.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        exitFileMI_actionPerformed(e);
      }
    });
    saveAsFileMI.setActionCommand("SaveAs");
    saveAsFileMI.setText("Save As...");
    saveAsFileMI.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        saveAsFileMI_actionPerformed(e);
      }
    });
    if(isApp_)this.setJMenuBar(menuBar);
    newFileMI.setText("New");
    newFileMI.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        newFileMI_actionPerformed(e);
      }
    });
    this.getContentPane().add(pmcPanel, BorderLayout.CENTER);
    if(!isApp_) this.getContentPane().add(buttonPanel,  BorderLayout.SOUTH);
    buttonPanel.add(okButton, null);
    pmcPanel.add(pmc,  BorderLayout.CENTER);
    menuBar.add(fileMenu);
    fileMenu.add(newFileMI);
    fileMenu.addSeparator();
    fileMenu.add(openFileMI);
    fileMenu.add(saveFileMI);
    fileMenu.add(saveAsFileMI);
    fileMenu.addSeparator();
    fileMenu.add(exitFileMI);

    addWindowListener(new java.awt.event.WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        if(throwClosing) pmf_windowClosing(e);
      }
    });
    Dimension dim = pmc.getPreferredSize();
    setSize(new Dimension(473, 354));
    //Center the window
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    Dimension frameSize = getSize();
    if (frameSize.height > screenSize.height) {
      frameSize.height = screenSize.height;
    }
    if (frameSize.width > screenSize.width) {
      frameSize.width = screenSize.width;
    }
    setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);
  }

  void pmf_windowClosing(WindowEvent e) {
    if(Page.DEBUG) System.out.println("windowClosing");
    throwClosing = false;
    setVisible(false);
    if(panelModel_ != null) panelModel_.setBatch(false);
    dispose();
    if(isApp_) System.exit(0);
  }

  void okButton_actionPerformed(ActionEvent e) {
    throwClosing = false;
    pmf_windowClosing(null);
  }

  /**
   * Get PanelModel.
   * @return PanelModel
   */
  public PanelModel getPanelModel() {
    return panelModel_;
  }

  /**
   * Set PanelModel.
   * @param panelModel PanelModel
   */
  public void setPanelModel(PanelModel panelModel) {
    panelModel_ = panelModel;
    if(panelModel_ != null) {
      panelModel_.setBatch(true);
      pmc.setObject(panelModel_);
    }
  }

  void openFileMI_actionPerformed(ActionEvent e) {
    PanelModel pModel = null;
    File file;
    String ext;
    String[] xmlFile = new String[]{".xml"};
    SimpleFileFilter xmlFilt = new SimpleFileFilter(xmlFile, "XML Serialized Bean");

    if(fileChooser_ == null) {
      fileChooser_ = new JFileChooser();
    }
    fileChooser_.setFileFilter(fileChooser_.getAcceptAllFileFilter());
    fileChooser_.resetChoosableFileFilters();
    fileChooser_.addChoosableFileFilter(xmlFilt);
    fileChooser_.setFileFilter(xmlFilt);

    int result = fileChooser_.showOpenDialog(this);
    if(result == JFileChooser.APPROVE_OPTION) {
      file = fileChooser_.getSelectedFile();
      openPath_ = file.getPath();
      setTitle(title_ + ": " + openPath_);
      try {
        pModel = PanelModel.loadFromXML(new BufferedInputStream(
                           new FileInputStream(openPath_)));
        setPanelModel(pModel);
       } catch (FileNotFoundException fnfe) {
        JOptionPane.showMessageDialog(this, "Error openning file",
                                      "File Open Error", JOptionPane.ERROR_MESSAGE);
      } catch (InvalidObjectException ioe) {
        JOptionPane.showMessageDialog(this, "File does not contain a PanelModel",
                                       "PanelModel Not Found",
                                       JOptionPane.ERROR_MESSAGE);
      }
    }
  }

  void saveAsFileMI_actionPerformed(ActionEvent e) {
    File file;
    FileFilter filt;
    String ext;
    String outpath;
    String[] xmlFile = new String[]{".xml"};
    SimpleFileFilter xmlFilt = new SimpleFileFilter(xmlFile, "XML Serialized Bean");

    if(fileChooser_ == null) {
      fileChooser_ = new JFileChooser();
    }
    fileChooser_.setFileFilter(fileChooser_.getAcceptAllFileFilter());
    fileChooser_.resetChoosableFileFilters();
    fileChooser_.addChoosableFileFilter(xmlFilt);
    fileChooser_.setFileFilter(xmlFilt);

    int result = fileChooser_.showSaveDialog(this);
    if(result == JFileChooser.APPROVE_OPTION) {
      file = fileChooser_.getSelectedFile();
      filt = fileChooser_.getFileFilter();
      outpath = file.getPath();
      if(filt instanceof SimpleFileFilter) {
        ext = ((SimpleFileFilter)filt).getExtension();
        String name = file.getName().toLowerCase();
        if(!name.endsWith(ext)) {
          outpath += ext;
        }
      }
      if(new File(outpath).exists()) {
        JOptionPane.showMessageDialog(this, "File already exists, rename and try again",
                                      "File Save Error", JOptionPane.ERROR_MESSAGE);
        return;
      }
      try {
        panelModel_.saveToXML(new BufferedOutputStream(
                                       new FileOutputStream(outpath, false)));
      } catch (FileNotFoundException fnfe) {
        JOptionPane.showMessageDialog(this, "Error creating file, rename and try again",
                                      "File Save Error", JOptionPane.ERROR_MESSAGE);
        return;
      }
    }
  }

  void saveFileMI_actionPerformed(ActionEvent e) {
    if(openPath_ == null) return;
    try {
      panelModel_.saveToXML(new BufferedOutputStream(
                                     new FileOutputStream(openPath_, false)));
    } catch (FileNotFoundException fnfe) {
      JOptionPane.showMessageDialog(this, "Error creating file, rename and try again",
                                    "File Save Error", JOptionPane.ERROR_MESSAGE);
      return;
    }
  }

  void exitFileMI_actionPerformed(ActionEvent e) {
    throwClosing = false;
    pmf_windowClosing(null);
  }

  void newFileMI_actionPerformed(ActionEvent e) {
    setPanelModel(new PanelModel());
  }
}

 

Ads help maintain this website.