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

org.parosproxy.paros.view.MainFrame Maven / Gradle / Ivy

Go to download

The Zed Attack Proxy (ZAP) is an easy to use integrated penetration testing tool for finding vulnerabilities in web applications. It is designed to be used by people with a wide range of security experience and as such is ideal for developers and functional testers who are new to penetration testing. ZAP provides automated scanners as well as a set of tools that allow you to find security vulnerabilities manually.

There is a newer version: 2.15.0
Show newest version
/*
 * Created on May 18, 2004
 *
 * 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: 2011/05/31 Added option to dynamically change the display
// ZAP: 2012/03/15 Changed so the change display option stays visually selected.
// ZAP: 2012/04/26 Removed the method setStatus(String) and instance variable
// "txtStatus".
// ZAP: 2013/07/23 Issue 738: Options to hide tabs
// ZAP: 2015/01/29 Issue 1489: Version number in window title
// ZAP: 2016/04/04 Do not require a restart to show/hide the tool bar
// ZAP: 2016/04/06 Fix layouts' issues
// ZAP: 2017/06/01 Issue 3555: setTitle() functionality moved in order to ensure consistent
// application
// ZAP: 2018/02/14 Add button for ResponsePanelPosition.TAB_SIDE_BY_SIDE (Issue 4331).
// ZAP: 2019/06/01 Normalise line endings.
// ZAP: 2019/06/05 Normalise format/style.
// ZAP: 2019/12/13 Display the primary proxy details (host:port) in the footer (Issue 2016).
// ZAP: 2020/09/29 Add support for dynamic Look and Feel switching (Issue 6201)
// ZAP: 2020/11/26 Use Log4j 2 classes for logging.
package org.parosproxy.paros.view;

import java.awt.CardLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import javax.swing.AbstractAction;
import javax.swing.BoxLayout;
import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JToggleButton;
import javax.swing.UIManager;
import javax.swing.WindowConstants;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.parosproxy.paros.Constant;
import org.parosproxy.paros.extension.AbstractPanel;
import org.parosproxy.paros.model.Model;
import org.parosproxy.paros.model.OptionsParam;
import org.parosproxy.paros.model.Session;
import org.zaproxy.zap.utils.DisplayUtils;
import org.zaproxy.zap.view.MainToolbarPanel;
import org.zaproxy.zap.view.ZapToggleButton;
import org.zaproxy.zap.view.widgets.PopupButton;

public class MainFrame extends AbstractFrame {

    private static final Logger LOGGER = LogManager.getLogger(MainFrame.class);

    private static final String TABS_VIEW_TOOL_TIP =
            Constant.messages.getString("view.toolbar.messagePanelsPosition.tabs");
    private static final String TAB_SIDE_BY_SIDE_VIEW_TOOL_TIP =
            Constant.messages.getString("view.toolbar.messagePanelsPosition.tabSideBySide");
    private static final String ABOVE_VIEW_TOOL_TIP =
            Constant.messages.getString("view.toolbar.messagePanelsPosition.above");
    private static final String DISABLED_ABOVE_VIEW_TOOL_TIP =
            Constant.messages.getString("view.toolbar.messagePanelsPosition.above.disabled");
    private static final String SIDE_BY_SIDE_VIEW_TOOL_TIP =
            Constant.messages.getString("view.toolbar.messagePanelsPosition.sideBySide");
    private static final String DISABLED_SIDE_BY_SIDE_VIEW_TOOL_TIP =
            Constant.messages.getString("view.toolbar.messagePanelsPosition.sideBySide.disabled");

    private static final long serialVersionUID = -1430550461546083192L;

    private final OptionsParam options;
    private JPanel paneContent = null;
    // ZAP: Removed instance variable (JLabel txtStatus). The status label that
    // was in the footer panel is no longer used.
    private final WorkbenchPanel paneStandard;
    private org.parosproxy.paros.view.MainMenuBar mainMenuBar = null;
    private JPanel paneDisplay = null;

    private MainToolbarPanel mainToolbarPanel = null;
    private MainFooterPanel mainFooterPanel = null;

    /**
     * The {@code ZapToggleButton} that sets whether or not the tabs should show the panels' names.
     *
     * 

Lazily initialised. * * @see #getShowTabIconNamesButton() */ private ZapToggleButton showTabIconNamesButton; /** * The {@code JButton} that shows all tabs. * *

Lazily initialised. * * @see #getShowAllTabsButton() */ private JButton showAllTabsButton; /** * The {@code JButton} that hides all tabs (if hideable and not pinned). * *

Lazily initialised. * * @see #getHideAllTabsButton() */ private JButton hideAllTabsButton; /** * The current workbench layout, never {@code null}. * * @see #setWorkbenchLayout(WorkbenchPanel.Layout) */ private WorkbenchPanel.Layout workbenchLayout; /** * The {@code JToggleButton} that sets the layout {@link WorkbenchPanel.Layout#EXPAND_SELECT}. * *

Lazily initialised. * * @see #getExpandSelectLayoutButton() */ private JToggleButton expandSelectLayoutButton; /** * The {@code JToggleButton} that sets the layout {@link WorkbenchPanel.Layout#EXPAND_STATUS}. * *

Lazily initialised. * * @see #getExpandStatusLayoutButton() */ private JToggleButton expandStatusLayoutButton; /** * The {@code JToggleButton} that sets the layout {@link WorkbenchPanel.Layout#FULL}. * *

Lazily initialised. * * @see #getFullLayoutButton() */ private JToggleButton fullLayoutButton; /** * The current position of the response panel, never {@code null}. * * @see #setResponsePanelPosition(WorkbenchPanel.ResponsePanelPosition) */ private WorkbenchPanel.ResponsePanelPosition responsePanelPosition; /** * The {@code ZapToggleButton} that sets the response panel position {@link * WorkbenchPanel.ResponsePanelPosition#TABS_SIDE_BY_SIDE}. * *

Lazily initialised. * * @see #getTabsResponsePanelPositionButton() */ private ZapToggleButton tabsResponsePanelPositionButton; /** * The {@code ZapToggleButton} that sets the response panel position {@link * WorkbenchPanel.ResponsePanelPosition#TAB_SIDE_BY_SIDE}. * *

Lazily initialised. * * @see #getTabSideBySideResponsePanelPositionButton() */ private ZapToggleButton tabSideBySideResponsePanelPositionButton; /** * The {@code ZapToggleButton} that sets the response panel position {@link * WorkbenchPanel.ResponsePanelPosition#PANEL_ABOVE}. * *

Lazily initialised. * * @see #getAboveResponsePanelPositionButton() */ private ZapToggleButton aboveResponsePanelPositionButton; /** * The {@code ZapToggleButton} that sets the response panel position {@link * WorkbenchPanel.ResponsePanelPosition#PANELS_SIDE_BY_SIDE}. * *

Lazily initialised. * * @see #getPanelsResponsePanelPositionButton() */ private ZapToggleButton panelsResponsePanelPositionButton; private PopupButton lookAndFeelButton; /** * @deprecated (2.5.0) Use {@link #MainFrame(OptionsParam, AbstractPanel, AbstractPanel)} * instead. */ @Deprecated @SuppressWarnings("javadoc") public MainFrame(int displayOption) { this( Model.getSingleton().getOptionsParam(), View.getSingleton().getRequestPanel(), View.getSingleton().getResponsePanel()); changeDisplayOption(displayOption); } /** * Constructs a {@code MainFrame} with the given options and request and response panels. * * @param options the options * @param requestPanel the main request panel * @param responsePanel the main response panel * @throws IllegalArgumentException if any of the parameters is {@code null}. * @since 2.5.0 */ public MainFrame( OptionsParam options, AbstractPanel requestPanel, AbstractPanel responsePanel) { super(); if (options == null) { throw new IllegalArgumentException("Parameter options must not be null"); } if (requestPanel == null) { throw new IllegalArgumentException("Parameter requestPanel must not be null"); } if (responsePanel == null) { throw new IllegalArgumentException("Parameter responsePanel must not be null"); } this.options = options; paneStandard = new WorkbenchPanel(options.getViewParam(), requestPanel, responsePanel); paneStandard.setLayout(new CardLayout()); paneStandard.setName("paneStandard"); initialize(); applyViewOptions(); } /** This method initializes this */ private void initialize() { this.setJMenuBar(getMainMenuBar()); this.setContentPane(getPaneContent()); this.setPreferredSize(new Dimension(1000, 800)); this.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); this.addWindowListener( new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { getMainMenuBar().getMenuFileControl().exit(); } }); this.setVisible(false); } /** * This method initializes paneContent * * @return JPanel */ private JPanel getPaneContent() { if (paneContent == null) { paneContent = new JPanel(); paneContent.setLayout(new BoxLayout(getPaneContent(), BoxLayout.Y_AXIS)); paneContent.setEnabled(true); paneContent.add(getMainToolbarPanel(), null); paneContent.add(getPaneDisplay(), null); paneContent.add(getMainFooterPanel(), null); } return paneContent; } /** * Gets the {@code WorkbenchPanel}. * * @return the workbench panel * @since 2.2.0 */ public WorkbenchPanel getWorkbench() { return paneStandard; } /** * This method initializes mainMenuBar * * @return org.parosproxy.paros.view.MenuDisplay */ public org.parosproxy.paros.view.MainMenuBar getMainMenuBar() { if (mainMenuBar == null) { mainMenuBar = new org.parosproxy.paros.view.MainMenuBar(); } return mainMenuBar; } // ZAP: Removed the method getTxtStatus() // ZAP: Removed the method setStatus(String). The status label // ("txtStatus") that was in the footer panel is no longer used. /** * This method initializes paneDisplay * * @return JPanel */ public JPanel getPaneDisplay() { if (paneDisplay == null) { paneDisplay = new JPanel(); paneDisplay.setLayout(new CardLayout()); paneDisplay.setName("paneDisplay"); paneDisplay.add(getWorkbench(), getWorkbench().getName()); } return paneDisplay; } // ZAP: Added main toolbar panel public MainToolbarPanel getMainToolbarPanel() { if (mainToolbarPanel == null) { mainToolbarPanel = new MainToolbarPanel(); mainToolbarPanel.addToolBarComponent(getLookAndFeelButton()); mainToolbarPanel.addSeparator(); mainToolbarPanel.addButton(getShowAllTabsButton()); mainToolbarPanel.addButton(getHideAllTabsButton()); mainToolbarPanel.addButton(getShowTabIconNamesButton()); mainToolbarPanel.addSeparator(); ButtonGroup layoutsButtonGroup = new ButtonGroup(); mainToolbarPanel.addButton(getExpandSelectLayoutButton()); layoutsButtonGroup.add(getExpandSelectLayoutButton()); mainToolbarPanel.addButton(getExpandStatusLayoutButton()); layoutsButtonGroup.add(getExpandStatusLayoutButton()); mainToolbarPanel.addButton(getFullLayoutButton()); layoutsButtonGroup.add(getFullLayoutButton()); mainToolbarPanel.addSeparator(); ButtonGroup responsePanelPositionsButtonGroup = new ButtonGroup(); mainToolbarPanel.addButton(getTabsResponsePanelPositionButton()); responsePanelPositionsButtonGroup.add(getTabsResponsePanelPositionButton()); mainToolbarPanel.addButton(getTabSideBySideResponsePanelPositionButton()); responsePanelPositionsButtonGroup.add(getTabSideBySideResponsePanelPositionButton()); mainToolbarPanel.addButton(getPanelsResponsePanelPositionButton()); responsePanelPositionsButtonGroup.add(getPanelsResponsePanelPositionButton()); mainToolbarPanel.addButton(getAboveResponsePanelPositionButton()); responsePanelPositionsButtonGroup.add(getAboveResponsePanelPositionButton()); mainToolbarPanel.addSeparator(); } return mainToolbarPanel; } private JButton getShowAllTabsButton() { if (showAllTabsButton == null) { showAllTabsButton = new JButton(); showAllTabsButton.setIcon( new ImageIcon( WorkbenchPanel.class.getResource( "/resource/icon/fugue/ui-tab-show.png"))); showAllTabsButton.setToolTipText(Constant.messages.getString("menu.view.tabs.show")); DisplayUtils.scaleIcon(showAllTabsButton); showAllTabsButton.addActionListener( new java.awt.event.ActionListener() { @Override public void actionPerformed(ActionEvent e) { View.getSingleton().showAllTabs(); } }); } return showAllTabsButton; } private JButton getHideAllTabsButton() { if (hideAllTabsButton == null) { hideAllTabsButton = new JButton(); hideAllTabsButton.setIcon( new ImageIcon( WorkbenchPanel.class.getResource( "/resource/icon/fugue/ui-tab-hide.png"))); hideAllTabsButton.setToolTipText(Constant.messages.getString("menu.view.tabs.hide")); DisplayUtils.scaleIcon(hideAllTabsButton); hideAllTabsButton.addActionListener( new java.awt.event.ActionListener() { @Override public void actionPerformed(ActionEvent e) { View.getSingleton().hideAllTabs(); } }); } return hideAllTabsButton; } private JToggleButton getShowTabIconNamesButton() { if (showTabIconNamesButton == null) { showTabIconNamesButton = new ZapToggleButton(); showTabIconNamesButton.setIcon( new ImageIcon( WorkbenchPanel.class.getResource("/resource/icon/ui_tab_icon.png"))); showTabIconNamesButton.setToolTipText( Constant.messages.getString("view.toolbar.showNames")); showTabIconNamesButton.setSelectedIcon( new ImageIcon( WorkbenchPanel.class.getResource("/resource/icon/ui_tab_text.png"))); showTabIconNamesButton.setSelectedToolTipText( Constant.messages.getString("view.toolbar.showIcons")); showTabIconNamesButton.setSelected( Model.getSingleton().getOptionsParam().getViewParam().getShowTabNames()); DisplayUtils.scaleIcon(showTabIconNamesButton); showTabIconNamesButton.addActionListener( new java.awt.event.ActionListener() { @Override public void actionPerformed(ActionEvent evt) { boolean showTabNames = getShowTabIconNamesButton().isSelected(); setShowTabNames(showTabNames); Model.getSingleton() .getOptionsParam() .getViewParam() .setShowTabNames(showTabNames); try { Model.getSingleton() .getOptionsParam() .getViewParam() .getConfig() .save(); } catch (ConfigurationException e) { LOGGER.error(e.getMessage(), e); } } }); } return showTabIconNamesButton; } private JToggleButton getExpandSelectLayoutButton() { if (expandSelectLayoutButton == null) { expandSelectLayoutButton = new JToggleButton( new ChangeWorkbenchLayoutAction( WorkbenchPanel.class.getResource( "/resource/icon/expand_sites.png"), WorkbenchPanel.Layout.EXPAND_SELECT)); expandSelectLayoutButton.setToolTipText( Constant.messages.getString("view.toolbar.expandSites")); } return expandSelectLayoutButton; } private JToggleButton getExpandStatusLayoutButton() { if (expandStatusLayoutButton == null) { expandStatusLayoutButton = new JToggleButton( new ChangeWorkbenchLayoutAction( WorkbenchPanel.class.getResource( "/resource/icon/expand_info.png"), WorkbenchPanel.Layout.EXPAND_STATUS)); expandStatusLayoutButton.setToolTipText( Constant.messages.getString("view.toolbar.expandInfo")); } return expandStatusLayoutButton; } private JToggleButton getFullLayoutButton() { if (fullLayoutButton == null) { fullLayoutButton = new JToggleButton( new ChangeWorkbenchLayoutAction( WorkbenchPanel.class.getResource( "/resource/icon/expand_full.png"), WorkbenchPanel.Layout.FULL)); fullLayoutButton.setToolTipText(Constant.messages.getString("view.toolbar.expandFull")); } return fullLayoutButton; } private ZapToggleButton getTabsResponsePanelPositionButton() { if (tabsResponsePanelPositionButton == null) { tabsResponsePanelPositionButton = new ZapToggleButton( new SetResponsePanelPositionAction( WorkbenchPanel.class.getResource( "/resource/icon/layout_tabbed.png"), WorkbenchPanel.ResponsePanelPosition.TABS_SIDE_BY_SIDE)); tabsResponsePanelPositionButton.setToolTipText(TABS_VIEW_TOOL_TIP); } return tabsResponsePanelPositionButton; } private ZapToggleButton getTabSideBySideResponsePanelPositionButton() { if (tabSideBySideResponsePanelPositionButton == null) { tabSideBySideResponsePanelPositionButton = new ZapToggleButton( new SetResponsePanelPositionAction( WorkbenchPanel.class.getResource( "/resource/icon/layout_tabbed_split.png"), WorkbenchPanel.ResponsePanelPosition.TAB_SIDE_BY_SIDE)); tabSideBySideResponsePanelPositionButton.setToolTipText(TAB_SIDE_BY_SIDE_VIEW_TOOL_TIP); } return tabSideBySideResponsePanelPositionButton; } private ZapToggleButton getPanelsResponsePanelPositionButton() { if (panelsResponsePanelPositionButton == null) { panelsResponsePanelPositionButton = new ZapToggleButton( new SetResponsePanelPositionAction( WorkbenchPanel.class.getResource( "/resource/icon/layout_horizontal_split.png"), WorkbenchPanel.ResponsePanelPosition.PANELS_SIDE_BY_SIDE)); panelsResponsePanelPositionButton.setToolTipText(SIDE_BY_SIDE_VIEW_TOOL_TIP); panelsResponsePanelPositionButton.setDisabledToolTipText( DISABLED_SIDE_BY_SIDE_VIEW_TOOL_TIP); } return panelsResponsePanelPositionButton; } private ZapToggleButton getAboveResponsePanelPositionButton() { if (aboveResponsePanelPositionButton == null) { aboveResponsePanelPositionButton = new ZapToggleButton( new SetResponsePanelPositionAction( WorkbenchPanel.class.getResource( "/resource/icon/layout_vertical_split.png"), WorkbenchPanel.ResponsePanelPosition.PANEL_ABOVE)); aboveResponsePanelPositionButton.setToolTipText(ABOVE_VIEW_TOOL_TIP); aboveResponsePanelPositionButton.setDisabledToolTipText(DISABLED_ABOVE_VIEW_TOOL_TIP); } return aboveResponsePanelPositionButton; } private PopupButton getLookAndFeelButton() { if (lookAndFeelButton == null) { lookAndFeelButton = new PopupButton() { private static final long serialVersionUID = 1L; @Override public List getMenuItemNames() { List list = new ArrayList<>(); UIManager.LookAndFeelInfo[] looks = UIManager.getInstalledLookAndFeels(); for (UIManager.LookAndFeelInfo look : looks) { list.add(look.getName()); } return list; } @Override public void menuItemSelected(String option) { UIManager.LookAndFeelInfo[] looks = UIManager.getInstalledLookAndFeels(); for (UIManager.LookAndFeelInfo look : looks) { if (look.getName().equals(option)) { options.getViewParam().setLookAndFeelInfo(look); } } } @Override public String getSelectedMenuItem() { return options.getViewParam().getLookAndFeel(); } }; lookAndFeelButton.setIcon( new ImageIcon( WorkbenchPanel.class.getResource( "/resource/icon/fugue/ui-color-picker-switch.png"))); lookAndFeelButton.setToolTipText( Constant.messages.getString("view.toolbar.switchLookAndFeel")); } return lookAndFeelButton; } // ZAP: Added footer toolbar panel public MainFooterPanel getMainFooterPanel() { if (mainFooterPanel == null) { mainFooterPanel = new MainFooterPanel(); } return mainFooterPanel; } /** @deprecated (2.5.0) Use {@link #setWorkbenchLayout(WorkbenchPanel.Layout)} instead. */ @Deprecated @SuppressWarnings("javadoc") public void changeDisplayOption(int displayOption) { setWorkbenchLayout(WorkbenchPanel.Layout.getLayout(displayOption)); } /** * Applies the view options to the main frame components. * *

It controls the visibility of the main tool bar, the layout and response panel position of * the workbench panel and if the tabs should display the panels' names. * * @since 2.5.0 * @see #setMainToolbarVisible(boolean) * @see #setWorkbenchLayout(WorkbenchPanel.Layout) * @see #setResponsePanelPosition(WorkbenchPanel.ResponsePanelPosition) * @see #setShowTabNames(boolean) * @see org.parosproxy.paros.extension.option.OptionsParamView */ public void applyViewOptions() { setMainToolbarVisible(options.getViewParam().isShowMainToolbar()); setWorkbenchLayout( WorkbenchPanel.Layout.getLayout(options.getViewParam().getDisplayOption())); WorkbenchPanel.ResponsePanelPosition position = WorkbenchPanel.ResponsePanelPosition.TABS_SIDE_BY_SIDE; try { position = WorkbenchPanel.ResponsePanelPosition.valueOf( options.getViewParam().getResponsePanelPosition()); } catch (IllegalArgumentException e) { LOGGER.warn("Failed to restore the position of response panel: ", e); } setResponsePanelPosition(position); setShowTabNames(options.getViewParam().getShowTabNames()); getMainFooterPanel().optionsChanged(); } /** * Sets the layout of the workbench panel. * *

If the layout is already set no further action is taken, otherwise updates the main tool * bar buttons, the workbench panel and the configurations file. * * @param layout the new layout of the workbench panel * @throws IllegalArgumentException if the given parameter is {@code null}. * @since 2.5.0 * @see #getWorkbenchLayout() * @see #setResponsePanelPosition(WorkbenchPanel.ResponsePanelPosition) */ public void setWorkbenchLayout(WorkbenchPanel.Layout layout) { if (layout == null) { throw new IllegalArgumentException("Parameter layout must not be null."); } if (workbenchLayout == layout) { return; } workbenchLayout = layout; switch (workbenchLayout) { case EXPAND_STATUS: getExpandStatusLayoutButton().setSelected(true); setResponsePanelPositionButtonsEnabled(true); break; case FULL: getFullLayoutButton().setSelected(true); setResponsePanelPositionButtonsEnabled(false); break; case EXPAND_SELECT: default: getExpandSelectLayoutButton().setSelected(true); setResponsePanelPositionButtonsEnabled(true); break; } getWorkbench().setWorkbenchLayout(workbenchLayout); options.getViewParam().setDisplayOption(workbenchLayout.getId()); } /** * Sets whether or not the buttons that control the response panel position should be enabled. * * @param enabled {@code true} if the buttons should be enabled, {@code false} otherwise. */ private void setResponsePanelPositionButtonsEnabled(boolean enabled) { panelsResponsePanelPositionButton.setEnabled(enabled); aboveResponsePanelPositionButton.setEnabled(enabled); } /** * Gets the workbench layout. * * @return the workbench layout, never {@code null}. * @since 2.5.0 * @see #setWorkbenchLayout(WorkbenchPanel.Layout) */ public WorkbenchPanel.Layout getWorkbenchLayout() { return workbenchLayout; } /** * Sets the position of the response panel. Should be considered a hint, not all workbench * layouts might use this setting. * *

If the position is already set no further action is taken, otherwise updates the main tool * bar buttons, the workbench panel and the configurations file. * * @param position the new position of the response panel * @throws IllegalArgumentException if the given parameter is {@code null}. * @since 2.5.0 * @see #getResponsePanelPosition() * @see #setWorkbenchLayout(org.parosproxy.paros.view.WorkbenchPanel.Layout) */ public void setResponsePanelPosition(WorkbenchPanel.ResponsePanelPosition position) { if (position == null) { throw new IllegalArgumentException("Parameter position must not be null."); } if (responsePanelPosition == position) { return; } responsePanelPosition = position; switch (position) { case PANEL_ABOVE: aboveResponsePanelPositionButton.setSelected(true); break; case PANELS_SIDE_BY_SIDE: panelsResponsePanelPositionButton.setSelected(true); break; case TAB_SIDE_BY_SIDE: tabSideBySideResponsePanelPositionButton.setSelected(true); break; case TABS_SIDE_BY_SIDE: default: tabsResponsePanelPositionButton.setSelected(true); } getWorkbench().setResponsePanelPosition(responsePanelPosition); options.getViewParam().setResponsePanelPosition(responsePanelPosition.toString()); } /** * Gets the response panel position. * * @return the response panel position, never {@code null}. * @since 2.5.0 * @see #setResponsePanelPosition(WorkbenchPanel.ResponsePanelPosition) */ public WorkbenchPanel.ResponsePanelPosition getResponsePanelPosition() { return responsePanelPosition; } /** * Sets whether or not the tabs should display the name of the panels. * * @param showTabNames {@code true} if the names should be shown, {@code false} otherwise. * @since 2.5.0 */ public void setShowTabNames(boolean showTabNames) { getWorkbench().toggleTabNames(showTabNames); getShowTabIconNamesButton().setSelected(showTabNames); } /** * Sets the title of the main window. * *

The actual title set is the current session name, then the filename of the session (if * persisted), followed by the program name and version. * * @param session the {@code Session} from which the window title is being built * @see Constant#PROGRAM_NAME * @see Constant#PROGRAM_VERSION * @since 2.7.0 */ public void setTitle(Session session) { StringBuilder strBuilder = new StringBuilder(); if (session != null) { strBuilder.append(session.getSessionName()).append(" - "); if (!session.isNewState()) { File file = new File(session.getFileName()); strBuilder.append(file.getName().replaceAll(".session\\z", "")).append(" - "); } } strBuilder.append(Constant.PROGRAM_NAME).append(' ').append(Constant.PROGRAM_VERSION); super.setTitle(strBuilder.toString()); } /** * Sets the title of the main window. * *

The actual title set is the given {@code title} followed by the program name and version. * * @see Constant#PROGRAM_NAME * @see Constant#PROGRAM_VERSION * @deprecated as of 2.7.0, replaced by {@link #setTitle(Session)} */ @Override @Deprecated public void setTitle(String title) { StringBuilder strBuilder = new StringBuilder(); if (title != null && !title.isEmpty()) { strBuilder.append(title); strBuilder.append(" - "); } strBuilder.append(Constant.PROGRAM_NAME).append(' ').append(Constant.PROGRAM_VERSION); super.setTitle(strBuilder.toString()); } /** * Sets whether or not the main tool bar should be visible. * * @param visible {@code true} if the main tool bar should be visible, {@code false} otherwise. * @since 2.5.0 */ public void setMainToolbarVisible(boolean visible) { getMainToolbarPanel().setVisible(visible); } /** * An {@code Action} that changes the layout of the workbench panels. * * @see MainFrame#setWorkbenchLayout(WorkbenchPanel.Layout) */ private class ChangeWorkbenchLayoutAction extends AbstractAction { private static final long serialVersionUID = 8323387638733162321L; private final WorkbenchPanel.Layout layout; public ChangeWorkbenchLayoutAction(URL iconURL, WorkbenchPanel.Layout layout) { super("", DisplayUtils.getScaledIcon(new ImageIcon(iconURL))); this.layout = layout; } @Override public void actionPerformed(ActionEvent evt) { setWorkbenchLayout(layout); } } /** * An {@code Action} that changes the position of the response panel. * * @see * MainFrame#setResponsePanelPosition(org.parosproxy.paros.view.WorkbenchPanel.ResponsePanelPosition) */ private class SetResponsePanelPositionAction extends AbstractAction { private static final long serialVersionUID = 756133292459364854L; private final WorkbenchPanel.ResponsePanelPosition position; public SetResponsePanelPositionAction( URL iconLocation, WorkbenchPanel.ResponsePanelPosition position) { super("", new ImageIcon(iconLocation)); this.position = position; } @Override public void actionPerformed(ActionEvent e) { setResponsePanelPosition(position); } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy