/*
 * Aleph Toolkit
 *
 * Copyright 1999, Brown University, Providence, RI.
 * 
 *                         All Rights Reserved
 * 
 * Permission to use, copy, modify, and distribute this software and its
 * documentation for any purpose other than its incorporation into a
 * commercial product is hereby granted without fee, provided that the
 * above copyright notice appear in all copies and that both that
 * copyright notice and this permission notice appear in supporting
 * documentation, and that the name of Brown University not be used in
 * advertising or publicity pertaining to distribution of the software
 * without specific, written prior permission.
 * 
 * BROWN UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ANY
 * PARTICULAR PURPOSE.  IN NO EVENT SHALL BROWN UNIVERSITY BE LIABLE FOR
 * ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 */

package aleph.gui;

import aleph.Host;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuItem;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Enumeration;

/**
 * Menu that manages different ways to shut down.
 * @see aleph.gui.Console
 *
 * @author Maurice Herlihy
 * @date January 1999
 **/

public class FileMenu extends Menu {

  private State state;

  /**
   * Sole constructor.
   **/
  public FileMenu(State state) {
    super("File", true);	// tear-off
    this.state = state;

    // Shutdown all hosts and exit.
    MenuItem shutdown = new MenuItem("Exit & Shut Down Hosts");
    // What to do when user clicks menu item
    shutdown.addActionListener(new ActionListener() { // anonymous class
      public void actionPerformed(ActionEvent e) {
        StringBuffer warning = new StringBuffer("Warning: Could not confirm shutdown for");
        boolean ok = true;      // so far so good
        for (Enumeration enum = FileMenu.this.state.liveHosts.elements();
             enum.hasMoreElements();) { // enumerate live hosts
          Host host = (Host) enum.nextElement();
          if (! host.stop()) {  // did we shut it down?
            warning.append(" "); // if not, whine about it
            warning.append(host.toString());
            ok = false;
          }
        }
        if (!ok)
          new ErrorDialog(FileMenu.this.state.frame, warning.toString());
	FileMenu.this.state.frame.setVisible(false);	// bye-bye!
	FileMenu.this.state.frame.dispose();		// recycle resources
	System.exit(0);
      }
      });
    add(shutdown);		// add this item to menu
    
    // Just exit.
    MenuItem exit = new MenuItem("Exit");
    exit.addActionListener(new ActionListener() { // anonymous class
      public void actionPerformed(ActionEvent e) { // Quoi faire?
	FileMenu.this.state.frame.setVisible(false);	// bye-bye!
	FileMenu.this.state.frame.dispose(); // recycle resources
	System.exit(0);
	}
      });
    add(exit);			// add this item to menu
  }
}
