/* * $Id$ * * Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code 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 * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package com.sun.javatest.exec; import java.util.ArrayList; import javax.swing.JMenuItem; /** * Class to manage custom menus. This class allows the test suite architect to * add various custom menu items to designated places in the menu system of the * Test Manager. The constants in this class represent those designated * positions and are semantic locations, not absolute. This allows * reorganization of menus at the harness level without necessarily breaking * the positioning that the architect expected. * * This class can be used in two ways. First, the concrete class overrides * getMenuItems() to return the correct set of items for the given * category. This method may be the most simple for straight forward insertions. * The second method is to use addMenuItem() to sequentially * specify which menu items should appear. The default implementation of * getMenuItems() will use data provided by using this second * method. * * By default, no menu category will have any custom menus (getMenuItems() * will always return null). * * The JMenuItem objects may be "pull-right" menus if desired. It is * the responsibility of the architect to manage keystroke mneumonics. */ public abstract class JavaTestMenuManager { /** * Get the menu items to go into the specified position in the menu system. * See the constants in this class for the possible value. * @param position The menu position, one of the constants of this class. * @return The custom menu items to be displayed in the given position. * Null if there are none. Never a zero-length array. * @throws IllegalArgumentException If the position parameter is out of * range. This is usually the fault of the harness itself, but * may occur if classes are compiled against one development version * of the harness and run with another. */ public JMenuItem[] getMenuItems(int position) { if (bank == null) return null; else { ArrayList al = bank[position]; if (al.size() == 0) return null; else { JMenuItem[] result = new JMenuItem[al.size()]; al.toArray(result); return result; } } } /** * Add a menu item to the given menu position. * The item is added to the bottom, in that position, so you must add them * in the order you wish them to appear. * @param position The menu position, one of the constants of this class. * @param item The menu item to add. * @throws IndexOutOfBoundsException If the position index is out of * range. Be sure that you are using the constants given in this * class to supply this parameter. */ protected synchronized void addMenuItem(int position, JMenuItem item) { if (position > NUM_POSITIONS) throw new IndexOutOfBoundsException("Position index too large - " + position); if (position < 0) throw new IndexOutOfBoundsException("Position index too small - " + position); if (bank == null) { bank = new ArrayList[NUM_POSITIONS]; for (int i = 0; i < NUM_POSITIONS; i++) bank[i] = new ArrayList<>(); } bank[position].add(item); } public static final int FILE_PRIMARY = 0; public static final int FILE_OTHER = 2; public static final int CONFIG_PRIMARY = 4; public static final int CONFIG_VIEW = 5; public static final int CONFIG_OTHER = 6; public static final int RUN_PRIMARY = 7; public static final int RUN_OTHER = 8; public static final int WINDOWS_MAIN = 9; public static final int PRESENTATION = 10; public static final int PREFERENCES = 11; public static final int LOG_VIEW = 12; public static final int LOG_CONFIG = 13; public static final int HELP_PRIMARY = 14; public static final int HELP_TESTSUITE = 15; public static final int HELP_ABOUT = 16; public static final int TOOLS_OTHER = 17; private static final int NUM_POSITIONS = 18; private ArrayList[] bank; }