/* * * 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/03/03 Moved popups to stdmenus extension // ZAP: 2012/04/23 Added @Override annotation to all appropriate methods. // ZAP: 2012/10/17 Issue 393: Added more online links from menu // ZAP: 2013/01/23 Clean up of exception handling/logging. // ZAP: 2013/03/03 Issue 547: Deprecate unused classes and methods // ZAP: 2013/04/16 Issue 638: Persist and snapshot sessions instead of saving them // ZAP: 2013/09/11 Issue 786: Snapshot session menu item not working // ZAP: 2014/01/28 Issue 207: Support keyboard shortcuts // ZAP: 2014/11/11 Issue 1406: Move online menu items to an add-on // ZAP: 2014/12/22 Issue 1476: Display contexts in the Sites tree // ZAP: 2015/02/05 Issue 1524: New Persist Session dialog package org.parosproxy.paros.view; import java.awt.Event; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JOptionPane; import javax.swing.KeyStroke; import org.apache.log4j.Logger; import org.parosproxy.paros.Constant; import org.parosproxy.paros.control.Control; import org.parosproxy.paros.control.MenuFileControl; import org.parosproxy.paros.control.MenuToolsControl; import org.parosproxy.paros.model.Model; import org.parosproxy.paros.model.Session; import org.zaproxy.zap.view.AboutDialog; import org.zaproxy.zap.view.ZapMenuItem; public class MainMenuBar extends JMenuBar { private static final long serialVersionUID = 8580116506279095244L; private static final Logger logger = Logger.getLogger(MainMenuBar.class); private javax.swing.JMenu menuEdit = null; private javax.swing.JMenu menuTools = null; private javax.swing.JMenu menuView = null; private ZapMenuItem menuToolsOptions = null; private javax.swing.JMenu menuFile = null; private ZapMenuItem menuFileNewSession = null; private ZapMenuItem menuFileOpen = null; private ZapMenuItem menuFileSaveAs = null; private ZapMenuItem menuFileSnapshot = null; private ZapMenuItem menuFileContextExport = null; private ZapMenuItem menuFileContextImport = null; private ZapMenuItem menuFileExit = null; private ZapMenuItem menuFileExitAndDelete = null; private ZapMenuItem menuFileProperties = null; private JMenu menuHelp = null; private ZapMenuItem menuHelpAbout = null; private JMenu menuAnalyse = null; // ZAP: Added standard report menu private JMenu menuReport = null; private JMenu menuOnline = null; /** * This method initializes * */ public MainMenuBar() { super(); initialize(); } /** * This method initializes this */ private void initialize() { this.add(getMenuFile()); this.add(getMenuEdit()); this.add(getMenuView()); this.add(getMenuAnalyse()); this.add(getMenuReport()); this.add(getMenuTools()); this.add(getMenuOnline()); this.add(getMenuHelp()); } /** * This method initializes menuEdit * * @return javax.swing.JMenu */ public javax.swing.JMenu getMenuEdit() { if (menuEdit == null) { menuEdit = new javax.swing.JMenu(); menuEdit.setText(Constant.messages.getString("menu.edit")); // ZAP: i18n menuEdit.setMnemonic(Constant.messages.getChar("menu.edit.mnemonic")); } return menuEdit; } /** * This method initializes menuTools * * @return javax.swing.JMenu */ public javax.swing.JMenu getMenuTools() { if (menuTools == null) { menuTools = new javax.swing.JMenu(); menuTools.setText(Constant.messages.getString("menu.tools")); // ZAP: i18n menuTools.setMnemonic(Constant.messages.getChar("menu.tools.mnemonic")); menuTools.addSeparator(); menuTools.add(getMenuToolsOptions()); } return menuTools; } /** * This method initializes menuView * * @return javax.swing.JMenu */ public javax.swing.JMenu getMenuView() { if (menuView == null) { menuView = new javax.swing.JMenu(); menuView.setText(Constant.messages.getString("menu.view")); // ZAP: i18n menuView.setMnemonic(Constant.messages.getChar("menu.view.mnemonic")); } return menuView; } /** * This method initializes menuToolsOptions * * @return javax.swing.JMenuItem */ private ZapMenuItem getMenuToolsOptions() { if (menuToolsOptions == null) { menuToolsOptions = new ZapMenuItem("menu.tools.options", KeyStroke.getKeyStroke(KeyEvent.VK_O, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask() | Event.ALT_MASK, false)); menuToolsOptions.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(java.awt.event.ActionEvent e) { getMenuToolsControl().options(); } }); } return menuToolsOptions; } /** * This method initializes menuFile * * @return javax.swing.JMenu */ public javax.swing.JMenu getMenuFile() { if (menuFile == null) { menuFile = new javax.swing.JMenu(); menuFile.setText(Constant.messages.getString("menu.file")); // ZAP: i18n menuFile.setMnemonic(Constant.messages.getChar("menu.file.mnemonic")); menuFile.add(getMenuFileNewSession()); menuFile.add(getMenuFileOpen()); menuFile.addSeparator(); menuFile.add(getMenuFileSaveAs()); menuFile.add(getMenuFileSnapshot()); menuFile.addSeparator(); menuFile.add(getMenuFileProperties()); menuFile.addSeparator(); menuFile.add(getMenuContextImport()); menuFile.add(getMenuContextExport()); menuFile.addSeparator(); menuFile.add(getMenuFileExitAndDelete()); menuFile.add(getMenuFileExit()); } return menuFile; } /** * This method initializes menuFileNewSession * * @return javax.swing.JMenuItem */ private javax.swing.JMenuItem getMenuFileNewSession() { if (menuFileNewSession == null) { menuFileNewSession = new ZapMenuItem("menu.file.newSession", KeyStroke.getKeyStroke(KeyEvent.VK_N, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(), false)); menuFileNewSession.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(java.awt.event.ActionEvent e) { try { getMenuFileControl().newSession(true); } catch (Exception e1) { View.getSingleton().showWarningDialog(Constant.messages.getString("menu.file.newSession.error")); // ZAP: i18n logger.error(e1.getMessage(), e1); } } }); } return menuFileNewSession; } /** * This method initializes menuFileOpen * * @return javax.swing.JMenuItem */ private javax.swing.JMenuItem getMenuFileOpen() { if (menuFileOpen == null) { menuFileOpen = new ZapMenuItem("menu.file.openSession", KeyStroke.getKeyStroke(KeyEvent.VK_O, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(), false)); menuFileOpen.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(java.awt.event.ActionEvent e) { getMenuFileControl().openSession(); } }); } return menuFileOpen; } /** * This method initializes menuFileSaveAs * * @return javax.swing.JMenuItem */ private javax.swing.JMenuItem getMenuFileSaveAs() { if (menuFileSaveAs == null) { menuFileSaveAs = new ZapMenuItem("menu.file.persistSession"); menuFileSaveAs.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(java.awt.event.ActionEvent e) { if (Model.getSingleton().getSession().isNewState()) { getMenuFileControl().saveAsSession(); } else { View.getSingleton().showWarningDialog(Constant.messages.getString("menu.file.sessionExists.error")); } } }); } return menuFileSaveAs; } private javax.swing.JMenuItem getMenuFileSnapshot() { if (menuFileSnapshot == null) { menuFileSnapshot = new ZapMenuItem("menu.file.snapshotSession"); menuFileSnapshot.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(java.awt.event.ActionEvent e) { if (! Model.getSingleton().getSession().isNewState()) { getMenuFileControl().saveSnapshot(); } else { View.getSingleton().showWarningDialog(Constant.messages.getString("menu.file.snapshotSession.error")); } } }); } return menuFileSnapshot; } /** * This method initializes menuFileExit * * @return javax.swing.JMenuItem */ private javax.swing.JMenuItem getMenuFileExit() { if (menuFileExit == null) { menuFileExit = new ZapMenuItem("menu.file.exit"); menuFileExit.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(java.awt.event.ActionEvent e) { getMenuFileControl().exit(); } }); } return menuFileExit; } private javax.swing.JMenuItem getMenuFileExitAndDelete() { if (menuFileExitAndDelete == null) { menuFileExitAndDelete = new ZapMenuItem("menu.file.exit.delete"); menuFileExitAndDelete.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(java.awt.event.ActionEvent e) { int ans = View.getSingleton().showConfirmDialog(Constant.messages.getString("menu.file.exit.delete.warning")); if (ans == JOptionPane.OK_OPTION) { Control.getSingleton().exitAndDeleteSession(Model.getSingleton().getSession().getFileName()); } } }); } return menuFileExitAndDelete; } /** * This method initializes menuFileControl * * @return org.parosproxy.paros.view.MenuFileControl */ public MenuFileControl getMenuFileControl() { return Control.getSingleton().getMenuFileControl(); } /** * This method initializes menuToolsControl * * @return org.parosproxy.paros.view.MenuToolsControl */ private MenuToolsControl getMenuToolsControl() { return Control.getSingleton().getMenuToolsControl(); } /** * This method initializes menuFileProperties * * @return javax.swing.JMenuItem */ private ZapMenuItem getMenuFileProperties() { if (menuFileProperties == null) { menuFileProperties = new ZapMenuItem("menu.file.properties", KeyStroke.getKeyStroke(KeyEvent.VK_P, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask() | Event.ALT_MASK, false)); menuFileProperties.setText(Constant.messages.getString("menu.file.properties")); // ZAP: i18n menuFileProperties.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(java.awt.event.ActionEvent e) { getMenuFileControl().properties(); } }); } return menuFileProperties; } private ZapMenuItem getMenuContextImport() { if (menuFileContextImport == null) { menuFileContextImport = new ZapMenuItem("menu.file.context.import"); menuFileContextImport.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(java.awt.event.ActionEvent e) { getMenuFileControl().importContext(); } }); } return menuFileContextImport; } private ZapMenuItem getMenuContextExport() { if (menuFileContextExport == null) { menuFileContextExport = new ZapMenuItem("menu.file.context.export"); menuFileContextExport.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(ActionEvent e) { getMenuFileControl().exportContext(); }}); } return menuFileContextExport; } /** * This method initializes menuHelp * * @return javax.swing.JMenu */ public JMenu getMenuHelp() { if (menuHelp == null) { menuHelp = new JMenu(); menuHelp.setText(Constant.messages.getString("menu.help")); // ZAP: i18n menuHelp.setMnemonic(Constant.messages.getChar("menu.help.mnemonic")); menuHelp.add(getMenuHelpAbout()); } return menuHelp; } public JMenu getMenuOnline() { if (menuOnline == null) { menuOnline = new JMenu(); menuOnline.setText(Constant.messages.getString("menu.online")); menuOnline.setMnemonic(Constant.messages.getChar("menu.online.mnemonic")); } return menuOnline; } // ZAP: Added standard report menu public JMenu getMenuReport() { if (menuReport == null) { menuReport = new JMenu(); menuReport.setText(Constant.messages.getString("menu.report")); // ZAP: i18n menuReport.setMnemonic(Constant.messages.getChar("menu.report.mnemonic")); } return menuReport; } /** * This method initializes menuHelpAbout * * @return javax.swing.ZapMenuItem */ private ZapMenuItem getMenuHelpAbout() { if (menuHelpAbout == null) { menuHelpAbout = new ZapMenuItem("menu.help.about"); menuHelpAbout.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(java.awt.event.ActionEvent e) { AboutDialog dialog = new AboutDialog(View.getSingleton().getMainFrame(), true); dialog.setVisible(true); } }); } return menuHelpAbout; } /** * This method initializes jMenu1 * * @return javax.swing.JMenu */ public JMenu getMenuAnalyse() { if (menuAnalyse == null) { menuAnalyse = new JMenu(); menuAnalyse.setText(Constant.messages.getString("menu.analyse")); // ZAP: i18n menuAnalyse.setMnemonic(Constant.messages.getChar("menu.analyse.mnemonic")); } return menuAnalyse; } public void sessionChanged(Session session) { if (session != null) { this.getMenuFileSaveAs().setEnabled(session.isNewState()); this.getMenuFileSnapshot().setEnabled(!session.isNewState()); } } }