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

org.parosproxy.paros.extension.ExtensionHookMenu Maven / Gradle / Ivy

/*
 *
 * Paros and its related class files.
 *
 * Paros is an HTTP/HTTPS proxy for assessing web application security.
 * Copyright (C) 2003-2004 Chinotec Technologies Company
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the Clarified Artistic License
 * as published by the Free Software Foundation.
 *
 * This program 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
 * Clarified Artistic License for more details.
 *
 * You should have received a copy of the Clarified Artistic License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 */
// ZAP: 2012/01/12 Reflected the rename of the class ExtensionPopupMenu to
// ExtensionPopupMenuItem.
// ZAP: 2012/03/15 Added the method addPopupMenuItem(ExtensionPopupMenu menu).
// ZAP: 2012/05/03 Changed to only initialise the class variables MENU_SEPARATOR
// and POPUP_MENU_SEPARATOR if there is a view.
// ZAP: 2014/01/28 Issue 207: Support keyboard shortcuts
// ZAP: 2014/05/02 Fixed method links in Javadocs
// ZAP: 2014/11/11 Issue 1406: Move online menu items to an add-on
// ZAP: 2016/09/26 JavaDoc tweaks
// ZAP: 2018/10/05 Lazily initialise the lists and add JavaDoc.
// ZAP: 2019/03/15 Issue 3578: Added the method addImportMenuItem(ZapMenuItem  menuitem)
// ZAP: 2019/06/01 Normalise line endings.
// ZAP: 2019/06/05 Normalise format/style.
package org.parosproxy.paros.extension;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import org.parosproxy.paros.view.View;
import org.zaproxy.zap.extension.ExtensionPopupMenu;
import org.zaproxy.zap.view.ZapMenuItem;

/**
 * The object to add/hook menus and menu items to the {@link
 * org.parosproxy.paros.view.MainFrame#getMainMenuBar() main menu bar} and to the {@link
 * View#getPopupMenu() main context menu}.
 *
 * 

The menus added through the hook are removed when the extension is unloaded. * *

Note: This class is not thread-safe, the menus should be added only through * the thread that {@link Extension#hook(ExtensionHook) hooks the extension}. * * @since 1.0.0 * @see View#getMainFrame() */ public class ExtensionHookMenu { public static final JMenuItem MENU_SEPARATOR; public static final ExtensionPopupMenuItem POPUP_MENU_SEPARATOR; /** * The new menus for the main menu bar added to this extension hook. * *

Lazily initialised. * * @see #addNewMenu(JMenu) * @see #getNewMenus() */ private List newMenuList; /** * The file menus added to this extension hook. * *

Lazily initialised. * * @see #addFileMenuItemImpl(JMenuItem) * @see #getFile() */ private List fileMenuItemList; /** * The edit menus added to this extension hook. * *

Lazily initialised. * * @see #addEditMenuItemImpl(JMenuItem) * @see #getEdit() */ private List editMenuItemList; /** * The view menus added to this extension hook. * *

Lazily initialised. * * @see #addViewMenuItemImpl(JMenuItem) * @see #getView() */ private List viewMenuItemList; /** * The analyse menus added to this extension hook. * *

Lazily initialised. * * @see #addAnalyseMenuItemImpl(JMenuItem) * @see #getAnalyse() */ private List analyseMenuItemList; /** * The tools menus added to this extension hook. * *

Lazily initialised. * * @see #addToolsMenuItemImpl(JMenuItem) * @see #getTools() */ private List toolsMenuItemList; /** * The import menus added to this extension hook. * *

Lazily initialised. * * @see #addImportMenuItem(ZapMenuItem) * @see #getImport() * @since 2.8.0 */ private List importMenuItemList; /** * The menus for the main context menu added to this extension hook. * *

Lazily initialised. * * @see #addPopupMenuImpl(JMenuItem) * @see #getPopupMenus() */ private List popupMenuList; /** * The help menus added to this extension hook. * *

Lazily initialised. * * @see #addHelpMenuItemImpl(JMenuItem) * @see #getHelpMenus() */ private List helpMenuList; /** * The report menus added to this extension hook. * *

Lazily initialised. * * @see #addReportMenuItemImpl(JMenuItem) * @see #getReportMenus() */ private List reportMenuList; /** * The online menus added to this extension hook. * *

Lazily initialised. * * @see #addOnlineMenuItem(ZapMenuItem) * @see #getOnlineMenus() */ private List onlineMenuList; // ZAP: Added static block. static { // XXX temporary "hack" to check if ZAP is in GUI mode. // There is no need to create view elements (subsequently initialising // the java.awt.Toolkit) when ZAP is running in non GUI mode. if (View.isInitialised()) { MENU_SEPARATOR = new JMenuItem(); POPUP_MENU_SEPARATOR = new ExtensionPopupMenuItem(); } else { MENU_SEPARATOR = null; POPUP_MENU_SEPARATOR = null; } } List getNewMenus() { return unmodifiableList(newMenuList); } List getFile() { return unmodifiableList(fileMenuItemList); } List getEdit() { return unmodifiableList(editMenuItemList); } List getView() { return unmodifiableList(viewMenuItemList); } List getAnalyse() { return unmodifiableList(analyseMenuItemList); } List getTools() { return unmodifiableList(toolsMenuItemList); } List getImport() { return unmodifiableList(importMenuItemList); } /** * Gets the popup menu items used for the whole workbench. * * @return a {@code List} containing the popup menu items of the extension */ List getPopupMenus() { return unmodifiableList(popupMenuList); } List getHelpMenus() { return unmodifiableList(helpMenuList); } List getReportMenus() { return unmodifiableList(reportMenuList); } List getOnlineMenus() { return unmodifiableList(onlineMenuList); } /** * Add a menu item to the File menu * * @param menuItem the file menu item * @deprecated use {@link #addFileMenuItem(ZapMenuItem menuItem)} instead. */ @Deprecated public void addFileMenuItem(JMenuItem menuItem) { addFileMenuItemImpl(menuItem); } /** * Add a sub-menu to the File menu * * @param menu the sub-menu to add * @since 2.9.0 */ public void addFileSubMenu(JMenu menu) { addFileMenuItemImpl(menu); } private void addFileMenuItemImpl(JMenuItem menuItem) { if (fileMenuItemList == null) { fileMenuItemList = createList(); } fileMenuItemList.add(menuItem); } /** * Add a menu item to the Edit menu * * @param menuItem the edit menu item * @deprecated use {@link #addEditMenuItem(ZapMenuItem menuItem)} instead. */ @Deprecated public void addEditMenuItem(JMenuItem menuItem) { addEditMenuItemImpl(menuItem); } /** * Add a sub-menu to the Edit menu * * @param menu the sub-menu to add * @since 2.9.0 */ public void addEditSubMenu(JMenu menu) { addEditMenuItemImpl(menu); } private void addEditMenuItemImpl(JMenuItem menuItem) { if (editMenuItemList == null) { editMenuItemList = createList(); } editMenuItemList.add(menuItem); } /** * Add a menu item to the View menu * * @param menuItem the view menu item * @deprecated use {@link #addViewMenuItem(ZapMenuItem menuItem)} instead. */ @Deprecated public void addViewMenuItem(JMenuItem menuItem) { addViewMenuItemImpl(menuItem); } /** * Add a sub-menu to the View menu * * @param menu the sub-menu to add * @since 2.9.0 */ public void addViewSubMenu(JMenu menu) { addViewMenuItemImpl(menu); } private void addViewMenuItemImpl(JMenuItem menuItem) { if (viewMenuItemList == null) { viewMenuItemList = createList(); } viewMenuItemList.add(menuItem); } /** * Add a menu item to the Analyse menu * * @param menuItem the analyse menu item * @deprecated use {@link #addAnalyseMenuItem(ZapMenuItem menuItem)} instead. */ @Deprecated public void addAnalyseMenuItem(JMenuItem menuItem) { addAnalyseMenuItemImpl(menuItem); } /** * Add a sub-menu to the Analyse menu * * @param menu the sub-menu to add * @since 2.9.0 */ public void addAnalyseSubMenu(JMenu menu) { addAnalyseMenuItemImpl(menu); } private void addAnalyseMenuItemImpl(JMenuItem menuItem) { if (analyseMenuItemList == null) { analyseMenuItemList = createList(); } analyseMenuItemList.add(menuItem); } /** * Add a menu item to the Tools menu * * @param menuItem the tools menu item * @deprecated use {@link #addToolsMenuItem(ZapMenuItem menuItem)} instead. */ @Deprecated public void addToolsMenuItem(JMenuItem menuItem) { addToolsMenuItemImpl(menuItem); } /** * Add a sub-menu to the Tools menu * * @param menu the sub-menu to add * @since 2.9.0 */ public void addToolsSubMenu(JMenu menu) { addToolsMenuItemImpl(menu); } private void addToolsMenuItemImpl(JMenuItem menuItem) { if (toolsMenuItemList == null) { toolsMenuItemList = createList(); } toolsMenuItemList.add(menuItem); } public void addFileMenuItem(ZapMenuItem menuItem) { addFileMenuItemImpl(menuItem); } public void addEditMenuItem(ZapMenuItem menuItem) { addEditMenuItemImpl(menuItem); } public void addViewMenuItem(ZapMenuItem menuItem) { addViewMenuItemImpl(menuItem); } public void addAnalyseMenuItem(ZapMenuItem menuItem) { addAnalyseMenuItemImpl(menuItem); } public void addToolsMenuItem(ZapMenuItem menuItem) { addToolsMenuItemImpl(menuItem); } /** * Add a sub-menu to the Import menu * * @param menu the sub-menu to add * @since 2.9.0 */ public void addImportSubMenu(JMenu menu) { addImportMenuItemImpl(menu); } /** @since 2.8.0 */ public void addImportMenuItem(ZapMenuItem menuItem) { addImportMenuItemImpl(menuItem); } private void addImportMenuItemImpl(JMenuItem menuItem) { if (importMenuItemList == null) { importMenuItemList = createList(); } importMenuItemList.add(menuItem); } public void addNewMenu(JMenu menu) { if (newMenuList == null) { newMenuList = createList(); } newMenuList.add(menu); } /** * Add a popup menu item used for the whole workbench. Conditions can be set in PluginMenu when * the popup menu can be used. * * @param menuItem the popup menu item */ public void addPopupMenuItem(ExtensionPopupMenuItem menuItem) { addPopupMenuImpl(menuItem); } private void addPopupMenuImpl(JMenuItem menu) { if (popupMenuList == null) { popupMenuList = createList(); } popupMenuList.add(menu); } // ZAP: Added the method. public void addPopupMenuItem(ExtensionPopupMenu menu) { addPopupMenuImpl(menu); } /** * Add a menu item to the Help menu * * @param menuItem the help menu item * @deprecated use {@link #addHelpMenuItem(ZapMenuItem menuItem)} instead. */ @Deprecated public void addHelpMenuItem(JMenuItem menuItem) { addHelpMenuItemImpl(menuItem); } /** * Add a sub-menu to the Help menu * * @param menu the sub-menu to add * @since 2.9.0 */ public void addHelpSubMenu(JMenu menu) { addHelpMenuItemImpl(menu); } private void addHelpMenuItemImpl(JMenuItem menuItem) { if (helpMenuList == null) { helpMenuList = createList(); } helpMenuList.add(menuItem); } /** * Add a menu item to the Report menu * * @param menuItem the report menu item * @deprecated use {@link #addReportMenuItem(ZapMenuItem menuItem)} instead. */ @Deprecated public void addReportMenuItem(JMenuItem menuItem) { addReportMenuItemImpl(menuItem); } /** * Add a sub-menu to the Report menu * * @param menu the sub-menu to add * @since 2.9.0 */ public void addReportSubMenu(JMenu menu) { addReportMenuItemImpl(menu); } private void addReportMenuItemImpl(JMenuItem menuItem) { if (reportMenuList == null) { reportMenuList = createList(); } reportMenuList.add(menuItem); } public void addHelpMenuItem(ZapMenuItem menuItem) { addHelpMenuItemImpl(menuItem); } public void addReportMenuItem(ZapMenuItem menuItem) { addReportMenuItemImpl(menuItem); } /** * Add a sub-menu to the Online menu * * @param menu the sub-menu to add * @since 2.9.0 */ public void addOnlineSubMenu(JMenu menu) { addOnlineMenuItemImpl(menu); } public void addOnlineMenuItem(ZapMenuItem menuItem) { addOnlineMenuItemImpl(menuItem); } private void addOnlineMenuItemImpl(JMenuItem menuItem) { if (onlineMenuList == null) { onlineMenuList = createList(); } onlineMenuList.add(menuItem); } public JMenuItem getMenuSeparator() { return MENU_SEPARATOR; } public ExtensionPopupMenuItem getPopupMenuSeparator() { return POPUP_MENU_SEPARATOR; } /** * Creates an {@link ArrayList} with initial capacity of 1. * *

Most of the extensions just add one menu. * * @return the {@code ArrayList}. */ private static List createList() { return new ArrayList<>(1); } /** * Gets an unmodifiable list from the given list. * * @param list the list, might be {@code null}. * @return an unmodifiable list, never {@code null}. */ private static List unmodifiableList(List list) { if (list == null) { return Collections.emptyList(); } return Collections.unmodifiableList(list); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy