/*
* Zed Attack Proxy (ZAP) and its related class files.
*
* ZAP is an HTTP/HTTPS proxy for assessing web application security.
*
* Copyright 2013 ZAP development team
*
* 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.zaproxy.zap.extension.brk;
import java.awt.CardLayout;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import org.parosproxy.paros.Constant;
import org.parosproxy.paros.model.OptionsParam;
import org.parosproxy.paros.view.AbstractParamPanel;
import org.zaproxy.zap.view.LayoutHelper;
/**
* The GUI breakpoints options panel.
* <p>
* It allows to change the following breakpoints options:
* <ul>
* <li>Confirm drop message - asks for confirmation when a trapped message is dropped.</li>
* </ul>
* </p>
*
* @see org.zaproxy.zap.extension.brk.BreakPanelToolbarFactory#getBtnDrop()
*/
public class BreakpointsOptionsPanel extends AbstractParamPanel {
private static final long serialVersionUID = 7483614036849207715L;
private JCheckBox checkBoxConfirmDropMessage = null;
private JCheckBox checkBoxAlwaysOnTop = null;
private JCheckBox checkBoxInScopeOnly = null;
private JComboBox<String> buttonMode = null;
public BreakpointsOptionsPanel() {
super();
setName(Constant.messages.getString("brk.optionspanel.name"));
this.setLayout(new CardLayout());
JPanel panel = new JPanel(new GridBagLayout());
panel.setBorder(new EmptyBorder(2, 2, 2, 2));
panel.add(getCheckBoxConfirmDropMessage(), LayoutHelper.getGBC(0, 0, 2, 1.0, new Insets(2, 2, 2, 2)));
panel.add(getCheckBoxInScopeOnly(), LayoutHelper.getGBC(0, 1, 2, 1.0, new Insets(2, 2, 2, 2)));
panel.add(getCheckBoxAlwaysOnTop(), LayoutHelper.getGBC(0, 2, 2, 1.0, new Insets(2, 2, 2, 2)));
JLabel modeLabel = new JLabel(Constant.messages.getString("brk.optionspanel.option.breakmode.label"));
modeLabel.setLabelFor(getButtonMode());
panel.add(modeLabel, LayoutHelper.getGBC(0, 3, 1, 0.5));
panel.add(getButtonMode(), LayoutHelper.getGBC(1, 3, 1, 0.5));
panel.add(new JLabel(), LayoutHelper.getGBC(0, 10, 1, 0.5D, 1.0D)); // Spacer
add(panel);
}
private JCheckBox getCheckBoxConfirmDropMessage() {
if (checkBoxConfirmDropMessage == null) {
checkBoxConfirmDropMessage = new JCheckBox(
Constant.messages.getString("brk.optionspanel.option.confirmDropMessage.label"));
}
return checkBoxConfirmDropMessage;
}
private JCheckBox getCheckBoxAlwaysOnTop() {
if (checkBoxAlwaysOnTop == null) {
checkBoxAlwaysOnTop = new JCheckBox(
Constant.messages.getString("brk.optionspanel.option.alwaysOnTop.label"));
}
return checkBoxAlwaysOnTop;
}
private JCheckBox getCheckBoxInScopeOnly() {
if (checkBoxInScopeOnly == null) {
checkBoxInScopeOnly = new JCheckBox(
Constant.messages.getString("brk.optionspanel.option.inScopeOnly.label"));
}
return checkBoxInScopeOnly;
}
private JComboBox<String> getButtonMode() {
if (buttonMode == null) {
buttonMode = new JComboBox<String>();
buttonMode.addItem(Constant.messages.getString("brk.optionspanel.option.breakmode.simple.label"));
buttonMode.addItem(Constant.messages.getString("brk.optionspanel.option.breakmode.dual.label"));
}
return buttonMode;
}
@Override
public void initParam(Object obj) {
final OptionsParam options = (OptionsParam) obj;
final BreakpointsParam param = options.getParamSet(BreakpointsParam.class);
getCheckBoxConfirmDropMessage().setSelected(param.isConfirmDropMessage());
// Note param.alwaysOnTop will be null if the user hasnt specified a preference yet
getCheckBoxAlwaysOnTop().setSelected(param.getAlwaysOnTop() != Boolean.FALSE);
getCheckBoxInScopeOnly().setSelected(param.isInScopeOnly());
getButtonMode().setSelectedIndex(param.getButtonMode()-1);
}
@Override
public void saveParam(Object obj) throws Exception {
final OptionsParam options = (OptionsParam) obj;
final BreakpointsParam param = options.getParamSet(BreakpointsParam.class);
param.setConfirmDropMessage(getCheckBoxConfirmDropMessage().isSelected());
if (param.getAlwaysOnTop() != null || ! getCheckBoxAlwaysOnTop().isSelected()) {
// Dont set the option if its not already set, unless the user has changed it
// This is so that the warning message will still be shown the first time a breakpoint is hit
param.setAlwaysOnTop(getCheckBoxAlwaysOnTop().isSelected());
}
param.setInScopeOnly(getCheckBoxInScopeOnly().isSelected());
param.setButtonMode(this.getButtonMode().getSelectedIndex()+1);
}
@Override
public String getHelpIndex() {
return "ui.dialogs.options.breakpoints";
}
}