alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

What this is

This file is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Other links

The source code

// $Header: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/gui/util/JMeterMenuBar.java,v 1.22 2004/02/12 23:59:01 sebb Exp $
/*
 * Copyright 2001-2004 The Apache Software Foundation.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * 
*/

package org.apache.jmeter.gui.util;
import java.awt.Component;
import java.awt.event.KeyEvent;
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedList;

import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.KeyStroke;
import javax.swing.MenuElement;
import javax.swing.UIManager;

import org.apache.jmeter.gui.action.ActionRouter;
import org.apache.jmeter.gui.action.ChangeLanguage;
import org.apache.jmeter.util.JMeterUtils;
import org.apache.jmeter.util.LocaleChangeEvent;
import org.apache.jmeter.util.LocaleChangeListener;
import org.apache.jmeter.util.SSLManager;
import org.apache.jorphan.util.JOrphanUtils;
import org.apache.jorphan.logging.LoggingManager;
import org.apache.log.Logger;

/**
 * @author  Michael Stover
 * @author  Keith Lancaster
 * @version $Revision: 1.22 $ updated on $Date: 2004/02/12 23:59:01 $
 */
public class JMeterMenuBar extends JMenuBar implements LocaleChangeListener
{
    transient private static Logger log = LoggingManager.getLoggerForClass();
    JMenu fileMenu;
    JMenuItem file_save_as;
    JMenuItem file_load;
    JMenuItem file_merge;
    JMenuItem file_exit;
    JMenuItem file_close;
    JMenu editMenu;
    JMenu edit_add;
    //JMenu edit_add_submenu;
    JMenuItem edit_remove;
    JMenu runMenu;
    JMenuItem run_start;
    JMenu remote_start;
    JMenuItem remote_start_all;
    Collection remote_engine_start;
    JMenuItem run_stop;
	private JMenuItem run_shut; // all the others could be private too?
    JMenu remote_stop;
    JMenuItem remote_stop_all;
    Collection remote_engine_stop;
    JMenuItem run_clear;
    JMenuItem run_clearAll;
    //JMenu reportMenu;
    //JMenuItem analyze;
    JMenu optionsMenu;
    JMenu lafMenu;
    JMenuItem sslManager;
    JMenu helpMenu;
    JMenuItem help_about;
    String[] remoteHosts;

	private JMenu remote_exit;
	private JMenuItem remote_exit_all;
	private Collection remote_engine_exit;

    public JMeterMenuBar()
    {
        remote_engine_start = new LinkedList();
        remote_engine_stop = new LinkedList();
		remote_engine_exit = new LinkedList();
        remoteHosts =
            JOrphanUtils.split(
                JMeterUtils.getPropDefault("remote_hosts", ""),
                ",");
        if (remoteHosts.length == 1 && remoteHosts[0].equals(""))
        {
            remoteHosts = new String[0];
        }
        this.getRemoteItems();
        createMenuBar();
    }

    public void setFileSaveEnabled(boolean enabled)
    {
        file_save_as.setEnabled(enabled);
    }

    public void setFileLoadEnabled(boolean enabled)
    {
        if (file_load != null)
        {
            file_load.setEnabled(enabled);
        }
		if (file_merge != null)
		{
			file_merge.setEnabled(enabled);
		}
    }

    public void setEditEnabled(boolean enabled)
    {
        if (editMenu != null)
        {
            editMenu.setEnabled(enabled);
        }
    }

    public void setEditAddMenu(JMenu menu)
    {
        // If the Add menu already exists, remove it.
        if (edit_add != null)
        {
            editMenu.remove(edit_add);
        }
        // Insert the Add menu as the first menu item in the Edit menu.
        edit_add = menu;
        editMenu.insert(edit_add, 0);
    }

    public void setEditMenu(JPopupMenu menu)
    {
        if (menu != null)
        {
            editMenu.removeAll();
            Component[] comps = menu.getComponents();
            for (int i = 0; i < comps.length; i++)
            {
                editMenu.add(comps[i]);
            }
            editMenu.setEnabled(true);
        }
        else
        {
            editMenu.setEnabled(false);
        }
    }

    public void setEditAddEnabled(boolean enabled)
    {
        // There was a NPE being thrown without the null check here.. JKB
        if (edit_add != null)
        {
            edit_add.setEnabled(enabled);
        }
        // If we are enabling the Edit-->Add menu item, then we also need to
        // enable the Edit menu. The Edit menu may already be enabled, but
        // there's no harm it trying to enable it again.
        if (enabled)
        {
            setEditEnabled(true);
        }
        else
        {
            // If we are disabling the Edit-->Add menu item and the
            // Edit-->Remove menu item is disabled, then we also need to
            // disable the Edit menu.
            // The Java Look and Feel Guidelines say to disable a menu if all
            // menu items are disabled.
            if (!edit_remove.isEnabled())
            {
                editMenu.setEnabled(false);
            }
        }
    }

    public void setEditRemoveEnabled(boolean enabled)
    {
        edit_remove.setEnabled(enabled);
        // If we are enabling the Edit-->Remove menu item, then we also need to
        // enable the Edit menu. The Edit menu may already be enabled, but
        // there's no harm it trying to enable it again.
        if (enabled)
        {
            setEditEnabled(true);
        }
        else
        {
            // If we are disabling the Edit-->Remove menu item and the
            // Edit-->Add menu item is disabled, then we also need to disable
            // the Edit menu.
            // The Java Look and Feel Guidelines say to disable a menu if all
            // menu items are disabled.
            if (!edit_add.isEnabled())
            {
                editMenu.setEnabled(false);
            }
        }
    }

    /**
     * Creates the MenuBar for this application. I believe in my heart that
     * this should be defined in a file somewhere, but that is for later.
     */
    public void createMenuBar()
    {
        makeFileMenu();
        makeEditMenu();
        makeRunMenu();
        makeOptionsMenu();
        makeHelpMenu();
        this.add(fileMenu);
        this.add(editMenu);
        this.add(runMenu);
        this.add(optionsMenu);
        this.add(helpMenu);
    }
    
    private void makeHelpMenu()
    {
        // HELP MENU
        helpMenu = new JMenu(JMeterUtils.getResString("help"));
        helpMenu.setMnemonic('H');
        JMenuItem contextHelp =
            new JMenuItem(JMeterUtils.getResString("help"), 'H');
        contextHelp.setActionCommand("help");
        contextHelp.setAccelerator(
            KeyStroke.getKeyStroke(KeyEvent.VK_H, KeyEvent.CTRL_MASK));
        contextHelp.addActionListener(ActionRouter.getInstance());
        help_about = new JMenuItem(JMeterUtils.getResString("about"), 'A');
        help_about.setActionCommand("about");
        help_about.addActionListener(ActionRouter.getInstance());
        helpMenu.add(contextHelp);
        helpMenu.add(help_about);
    }
    
    private void makeOptionsMenu()
    {
        // OPTIONS MENU
        optionsMenu = new JMenu(JMeterUtils.getResString("option"));
        JMenuItem functionHelper =
            new JMenuItem(
                JMeterUtils.getResString("function_dialog_menu_item"),
                'F');
        functionHelper.addActionListener(ActionRouter.getInstance());
        functionHelper.setActionCommand("functions");
        functionHelper.setAccelerator(
            KeyStroke.getKeyStroke(KeyEvent.VK_F, KeyEvent.CTRL_MASK));
        lafMenu = new JMenu(JMeterUtils.getResString("appearance"));
        UIManager.LookAndFeelInfo lafs[] = UIManager.getInstalledLookAndFeels();
        for (int i = 0; i < lafs.length; ++i)
        {
            JMenuItem laf = new JMenuItem(lafs[i].getName());
            laf.addActionListener(ActionRouter.getInstance());
            laf.setActionCommand("laf:" + lafs[i].getClassName());
            lafMenu.setMnemonic('L');
            lafMenu.add(laf);
        }
        optionsMenu.setMnemonic('O');
        optionsMenu.add(functionHelper);
        optionsMenu.add(lafMenu);
        if (SSLManager.isSSLSupported())
        {
            sslManager = new JMenuItem(JMeterUtils.getResString("sslManager"));
            sslManager.addActionListener(ActionRouter.getInstance());
            sslManager.setActionCommand("sslManager");
            sslManager.setMnemonic('S');
            sslManager.setAccelerator(
                KeyStroke.getKeyStroke(KeyEvent.VK_M, KeyEvent.CTRL_MASK));
            optionsMenu.add(sslManager);
        }
        optionsMenu.add(makeLanguageMenu());
    }
    
    private JMenu makeLanguageMenu()
    {
        JMenu languageMenu =
            new JMenu(JMeterUtils.getResString("choose_language"));
        languageMenu.setMnemonic('C');
        //add english
        JMenuItem english = new JMenuItem(JMeterUtils.getResString("en"), 'E');
        english.addActionListener(ActionRouter.getInstance());
        english.setActionCommand(ChangeLanguage.CHANGE_LANGUAGE);
        english.setName("en");
        languageMenu.add(english);
        //add Japanese
        JMenuItem japanese = new JMenuItem(JMeterUtils.getResString("jp"), 'J');
        japanese.addActionListener(ActionRouter.getInstance());
        japanese.setActionCommand(ChangeLanguage.CHANGE_LANGUAGE);
        japanese.setName("ja");
        languageMenu.add(japanese);
        //add Norwegian
        JMenuItem norway = new JMenuItem(JMeterUtils.getResString("no"), 'N');
        norway.addActionListener(ActionRouter.getInstance());
        norway.setActionCommand(ChangeLanguage.CHANGE_LANGUAGE);
        norway.setName("no");
        languageMenu.add(norway);
        //add German
        JMenuItem german = new JMenuItem(JMeterUtils.getResString("de"), 'G');
        german.addActionListener(ActionRouter.getInstance());
        german.setActionCommand(ChangeLanguage.CHANGE_LANGUAGE);
        german.setName("de");
        languageMenu.add(german);
        return languageMenu;
    }

	/*
	 * Strings used to set up and process actions in this menu
	 * The strings need to agree with the those in the Action routines
	*/
	public static final String ACTION_SHUTDOWN = "shutdown";
	public static final String ACTION_STOP = "stop";
	public static final String ACTION_START = "start";


    private void makeRunMenu()
    {
        // RUN MENU
        runMenu = new JMenu(JMeterUtils.getResString("run"));
        runMenu.setMnemonic('R');
        run_start = new JMenuItem(JMeterUtils.getResString("start"), 'S');
        run_start.setAccelerator(
            KeyStroke.getKeyStroke(KeyEvent.VK_R, KeyEvent.CTRL_MASK));
        run_start.addActionListener(ActionRouter.getInstance());
        run_start.setActionCommand(ACTION_START);
        run_stop = new JMenuItem(JMeterUtils.getResString("stop"), 'T');
        run_stop.setAccelerator(
            KeyStroke.getKeyStroke(KeyEvent.VK_PERIOD, KeyEvent.CTRL_MASK));
        run_stop.setEnabled(false);
        run_stop.addActionListener(ActionRouter.getInstance());
        run_stop.setActionCommand(ACTION_STOP);

		run_shut = new JMenuItem(JMeterUtils.getResString("shutdown"), 'Y');
		run_shut.setAccelerator(
			KeyStroke.getKeyStroke(KeyEvent.VK_COMMA, KeyEvent.CTRL_MASK));
		run_shut.setEnabled(false);
		run_shut.addActionListener(ActionRouter.getInstance());
		run_shut.setActionCommand(ACTION_SHUTDOWN);

        run_clear = new JMenuItem(JMeterUtils.getResString("clear"), 'C');
        run_clear.addActionListener(ActionRouter.getInstance());
        run_clear.setActionCommand(org.apache.jmeter.gui.action.Clear.CLEAR);
        run_clearAll =
            new JMenuItem(JMeterUtils.getResString("clear_all"), 'a');
        run_clearAll.addActionListener(ActionRouter.getInstance());
        run_clearAll.setActionCommand(
            org.apache.jmeter.gui.action.Clear.CLEAR_ALL);
        run_clearAll.setAccelerator(
            KeyStroke.getKeyStroke(KeyEvent.VK_E, KeyEvent.CTRL_MASK));
        runMenu.add(run_start);
        if (remote_start != null)
        {
            runMenu.add(remote_start);
        }
        remote_start_all =
            new JMenuItem(JMeterUtils.getResString("remote_start_all"), 'Z');
        remote_start_all.setName("remote_start_all");
        remote_start_all.setAccelerator(
            KeyStroke.getKeyStroke(KeyEvent.VK_Z, KeyEvent.CTRL_MASK));
        remote_start_all.addActionListener(ActionRouter.getInstance());
        remote_start_all.setActionCommand("remote_start_all");
        runMenu.add(remote_start_all);
        runMenu.add(run_stop);
		runMenu.add(run_shut);
        if (remote_stop != null)
        {
            runMenu.add(remote_stop);
        }
        remote_stop_all =
            new JMenuItem(JMeterUtils.getResString("remote_stop_all"), 'X');
        remote_stop_all.setAccelerator(
            KeyStroke.getKeyStroke(KeyEvent.VK_X, KeyEvent.ALT_MASK));
        remote_stop_all.addActionListener(ActionRouter.getInstance());
        remote_stop_all.setActionCommand("remote_stop_all");
        runMenu.add(remote_stop_all);
        
		if (remote_exit != null)
		{
			runMenu.add(remote_exit);
		}
		remote_exit_all =
			new JMenuItem(JMeterUtils.getResString("remote_exit_all"));
		remote_exit_all.addActionListener(ActionRouter.getInstance());
		remote_exit_all.setActionCommand("remote_exit_all");
		runMenu.add(remote_exit_all);


        runMenu.addSeparator();
        runMenu.add(run_clear);
        runMenu.add(run_clearAll);
    }
    
    private void makeEditMenu()
    {
        // EDIT MENU
        editMenu = new JMenu(JMeterUtils.getResString("edit"));
        // From the Java Look and Feel Guidelines: If all items in a menu
        // are disabled, then disable the menu.  Makes sense.
        editMenu.setEnabled(false);
    }
    
    private void makeFileMenu()
    {
        // FILE MENU
        fileMenu = new JMenu(JMeterUtils.getResString("file"));
        fileMenu.setMnemonic('F');
        JMenuItem file_save =
            new JMenuItem(JMeterUtils.getResString("save"), 'S');
        file_save.setAccelerator(
            KeyStroke.getKeyStroke(KeyEvent.VK_S, KeyEvent.CTRL_MASK));
        file_save.setActionCommand("save");
        file_save.addActionListener(ActionRouter.getInstance());
        file_save.setEnabled(true);

        file_save_as =
            new JMenuItem(JMeterUtils.getResString("save_all_as"), 'A');
        file_save_as.setAccelerator(
            KeyStroke.getKeyStroke(KeyEvent.VK_A, KeyEvent.CTRL_MASK));
        file_save_as.setActionCommand("save_all_as");
        file_save_as.addActionListener(ActionRouter.getInstance());
        file_save_as.setEnabled(true);
        
        file_load = new JMenuItem(JMeterUtils.getResString("menu_open"), 'O');
        file_load.setAccelerator(
            KeyStroke.getKeyStroke(KeyEvent.VK_O, KeyEvent.CTRL_MASK));
        file_load.addActionListener(ActionRouter.getInstance());
        // Set default SAVE menu item to disabled since the default node that
        // is selected is ROOT, which does not allow items to be inserted.
        file_load.setEnabled(false);
        file_load.setActionCommand("open");
        
        file_close = new JMenuItem(JMeterUtils.getResString("menu_close"), 'C');
        file_close.setAccelerator(
            KeyStroke.getKeyStroke(KeyEvent.VK_L, KeyEvent.CTRL_MASK));
        file_close.setActionCommand("close");
        file_close.addActionListener(ActionRouter.getInstance());

        file_exit = new JMenuItem(JMeterUtils.getResString("exit"), 'X');
        file_exit.setAccelerator(
            KeyStroke.getKeyStroke(KeyEvent.VK_Q, KeyEvent.CTRL_MASK));
        file_exit.setActionCommand("exit");
        file_exit.addActionListener(ActionRouter.getInstance());

		file_merge = new JMenuItem(JMeterUtils.getResString("menu_merge"), 'M');
		//file_merge.setAccelerator(
		//    KeyStroke.getKeyStroke(KeyEvent.VK_O, KeyEvent.CTRL_MASK));
		file_merge.addActionListener(ActionRouter.getInstance());
		// Set default SAVE menu item to disabled since the default node that
		// is selected is ROOT, which does not allow items to be inserted.
		file_merge.setEnabled(false);
		file_merge.setActionCommand("merge");

        fileMenu.add(file_close);
        fileMenu.add(file_load);
		fileMenu.add(file_merge);
        fileMenu.add(file_save);
        fileMenu.add(file_save_as);
        fileMenu.addSeparator();
        fileMenu.add(file_exit);
    }

    public void setRunning(boolean running, String host)
    {
		log.info("setRunning("+ running +","+ host + ")");

        Iterator iter = remote_engine_start.iterator();
        Iterator iter2 = remote_engine_stop.iterator();
		Iterator iter3 = remote_engine_exit.iterator();
        while (iter.hasNext() && iter2.hasNext() && iter3.hasNext())
        {
            JMenuItem start = (JMenuItem) iter.next();
            JMenuItem stop = (JMenuItem) iter2.next();
			JMenuItem exit = (JMenuItem) iter3.next();
            if (start.getText().equals(host))
            {
				log.info("Found start host: " + start.getText());
                start.setEnabled(!running);
            }
            if (stop.getText().equals(host))
            {
				log.info("Found stop  host: " + stop.getText());
                stop.setEnabled(running);
            }
			if (exit.getText().equals(host))
			{
				log.info("Found exit  host: " + exit.getText());
				exit.setEnabled(true);
			}
        }
    }

    public void setEnabled(boolean enable)
    {
        run_start.setEnabled(!enable);
        run_stop.setEnabled(enable);
		run_shut.setEnabled(enable);
    }

    private void getRemoteItems()
    {
        if (remoteHosts.length > 0)
        {
            remote_start = new JMenu(JMeterUtils.getResString("remote_start"));
            remote_stop = new JMenu(JMeterUtils.getResString("remote_stop"));
			remote_exit = new JMenu(JMeterUtils.getResString("remote_exit"));

            for (int i = 0; i < remoteHosts.length; i++)
            {
                remoteHosts[i] = remoteHosts[i].trim();
                JMenuItem item = new JMenuItem(remoteHosts[i]);
                item.setActionCommand("remote_start");
                item.setName(remoteHosts[i]);
                item.addActionListener(ActionRouter.getInstance());
                remote_engine_start.add(item);
                remote_start.add(item);
                item = new JMenuItem(remoteHosts[i]);
                item.setActionCommand("remote_stop");
                item.setName(remoteHosts[i]);
                item.addActionListener(ActionRouter.getInstance());
                item.setEnabled(false);
                remote_engine_stop.add(item);
                remote_stop.add(item);
				item = new JMenuItem(remoteHosts[i]);
				item.setActionCommand("remote_exit");
				item.setName(remoteHosts[i]);
				item.addActionListener(ActionRouter.getInstance());
				item.setEnabled(false);
				remote_engine_exit.add(item);
				remote_exit.add(item);
            }
        }
    }

    /**
     * Processes a locale change notification. Changes the texts in all
     * menus to the new language.
     */
    public void localeChanged(LocaleChangeEvent event)
    {
        updateMenuElement(fileMenu);
        updateMenuElement(editMenu);
        updateMenuElement(runMenu);
        updateMenuElement(optionsMenu);
        updateMenuElement(helpMenu);
    }

    /**
     * Refreshes all texts in the menu and all submenus to a new locale.
     */
    private void updateMenuElement(MenuElement menu)
    {
        Component component = menu.getComponent();

        if (component.getName() != null)
        {
            if (component instanceof JMenu)
            {
                ((JMenu) component).setText(
                    JMeterUtils.getResString(component.getName()));
            }
            else
            {
                ((JMenuItem) component).setText(
                    JMeterUtils.getResString(component.getName()));
            }
        }

        MenuElement[] subelements = menu.getSubElements();

        for (int i = 0; i < subelements.length; i++)
        {
            updateMenuElement(subelements[i]);
        }
    }
}
... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.