/*
* Zed Attack Proxy (ZAP) and its related class files.
*
* ZAP is an HTTP/HTTPS proxy for assessing web application security.
*
* Copyright 2016 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.stats;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.InetAddress;
import javax.swing.BorderFactory;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.TitledBorder;
import org.parosproxy.paros.Constant;
import org.parosproxy.paros.model.OptionsParam;
import org.parosproxy.paros.view.AbstractParamPanel;
import org.zaproxy.zap.utils.FontUtils;
import org.zaproxy.zap.utils.ZapPortNumberSpinner;
import org.zaproxy.zap.utils.ZapTextField;
import org.zaproxy.zap.view.LayoutHelper;
public class OptionsStatsPanel extends AbstractParamPanel {
private static final long serialVersionUID = 1L;
private JPanel panelMisc;
private JCheckBox inMemoryStatsEnabledField;
private JCheckBox statsdStatsEnabledField;
private ZapTextField statsdHostField;
private ZapPortNumberSpinner statsdPortField;
private ZapTextField statsdPrefixField;
public OptionsStatsPanel() {
super();
this.setLayout(new CardLayout());
this.setName(Constant.messages.getString("stats.options.title"));
this.add(getPanelMisc(), getPanelMisc().getName());
}
/**
* This method initializes panelMisc
*
* @return javax.swing.JPanel
*/
private JPanel getPanelMisc() {
if (panelMisc == null) {
panelMisc = new JPanel();
panelMisc.setLayout(new GridBagLayout());
panelMisc.add(getInMemoryStatsEnabledField(), LayoutHelper.getGBC(0, 0, 1, 0.5));
panelMisc.add(getStatsdStatsEnabledField(), LayoutHelper.getGBC(0, 1, 1, 0.5));
JPanel statsdPanel = new JPanel();
statsdPanel.setLayout(new GridBagLayout());
statsdPanel.setBorder(
BorderFactory.createTitledBorder(
null, Constant.messages.getString("stats.options.statsd.panel"),
TitledBorder.DEFAULT_JUSTIFICATION,
TitledBorder.DEFAULT_POSITION,
FontUtils.getFont(FontUtils.Size.standard),
Color.black));
statsdPanel.add(new JLabel(Constant.messages.getString("stats.options.label.statsd.host")),
LayoutHelper.getGBC(0, 1, 1, 0.5));
statsdPanel.add(this.getStatsdHostField(), LayoutHelper.getGBC(1, 1, 1, 0.5));
statsdPanel.add(new JLabel(Constant.messages.getString("stats.options.label.statsd.port")),
LayoutHelper.getGBC(0, 2, 1, 0.5));
statsdPanel.add(this.getStatsdPortField(), LayoutHelper.getGBC(1, 2, 1, 0.5));
statsdPanel.add(new JLabel(Constant.messages.getString("stats.options.label.statsd.prefix")),
LayoutHelper.getGBC(0, 3, 1, 0.5));
statsdPanel.add(this.getStatsdPrefixField(), LayoutHelper.getGBC(1, 3, 1, 0.5));
panelMisc.add(statsdPanel, LayoutHelper.getGBC(0, 2, 1, 1.0D));
panelMisc.add(new JLabel(), LayoutHelper.getGBC(0, 10, 1, 0.5D, 1.0D)); // Spacer
}
return panelMisc;
}
private JCheckBox getInMemoryStatsEnabledField() {
if (inMemoryStatsEnabledField == null) {
inMemoryStatsEnabledField = new JCheckBox();
inMemoryStatsEnabledField.setText(Constant.messages.getString("stats.options.mem.enabled"));
inMemoryStatsEnabledField.setVerticalAlignment(javax.swing.SwingConstants.TOP);
inMemoryStatsEnabledField.setVerticalTextPosition(javax.swing.SwingConstants.TOP);
}
return inMemoryStatsEnabledField;
}
private JCheckBox getStatsdStatsEnabledField() {
if (statsdStatsEnabledField == null) {
statsdStatsEnabledField = new JCheckBox();
statsdStatsEnabledField.setText(Constant.messages.getString("stats.options.statsd.enabled"));
statsdStatsEnabledField.setVerticalAlignment(javax.swing.SwingConstants.TOP);
statsdStatsEnabledField.setVerticalTextPosition(javax.swing.SwingConstants.TOP);
statsdStatsEnabledField.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
setStatsdFieldStates();
}});
}
return statsdStatsEnabledField;
}
private void setStatsdFieldStates() {
getStatsdHostField().setEnabled(statsdStatsEnabledField.isSelected());
getStatsdPortField().setEnabled(statsdStatsEnabledField.isSelected());
getStatsdPrefixField().setEnabled(statsdStatsEnabledField.isSelected());
}
private ZapTextField getStatsdHostField() {
if (statsdHostField == null) {
statsdHostField = new ZapTextField();
}
return statsdHostField;
}
private ZapPortNumberSpinner getStatsdPortField() {
if (statsdPortField == null) {
statsdPortField = new ZapPortNumberSpinner(0);
}
return statsdPortField;
}
private ZapTextField getStatsdPrefixField() {
if (statsdPrefixField == null) {
statsdPrefixField = new ZapTextField();
}
return statsdPrefixField;
}
@Override
public void initParam(Object obj) {
OptionsParam optionsParam = (OptionsParam) obj;
StatsParam statsParam = optionsParam.getParamSet(StatsParam.class);
getInMemoryStatsEnabledField().setSelected(statsParam.isInMemoryEnabled());
getStatsdStatsEnabledField().setSelected(statsParam.isStatsdEnabled());
getStatsdHostField().setText(statsParam.getStatsdHost());
getStatsdHostField().discardAllEdits();
getStatsdPortField().setValue(statsParam.getStatsdPort());
getStatsdPrefixField().setText(statsParam.getStatsdPrefix());
getStatsdPrefixField().discardAllEdits();
setStatsdFieldStates();
}
@Override
public void validateParam(Object obj) throws Exception {
if (getStatsdStatsEnabledField().isSelected()) {
// Basic hostname validation
try {
InetAddress.getByName(getStatsdHostField().getText());
} catch (Exception e) {
throw new Exception(Constant.messages.getString("stats.options.error.statsd.host.bad"), e);
}
}
}
@Override
public void saveParam(Object obj) throws Exception {
OptionsParam optionsParam = (OptionsParam) obj;
StatsParam statsParam = optionsParam.getParamSet(StatsParam.class);
statsParam.setInMemoryEnabled(getInMemoryStatsEnabledField().isSelected());
if (getStatsdStatsEnabledField().isSelected()) {
statsParam.setStatsdHost(getStatsdHostField().getText());
statsParam.setStatsdPort(getStatsdPortField().getValue());
statsParam.setStatsdPrefix(getStatsdPrefixField().getText());
} else {
statsParam.setStatsdHost("");
}
}
@Override
public String getHelpIndex() {
return "ui.dialogs.options.stats";
}
}