/*
* Zed Attack Proxy (ZAP) and its related class files.
*
* ZAP is an HTTP/HTTPS proxy for assessing web application security.
*
* Copyright 2010 psiinon@gmail.com
*
* 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.view;
import java.awt.Frame;
import java.awt.GridBagLayout;
import java.awt.HeadlessException;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import org.parosproxy.paros.Constant;
import org.parosproxy.paros.extension.AbstractDialog;
import org.zaproxy.zap.extension.help.ExtensionHelp;
public class PersistSessionDialog extends AbstractDialog implements ActionListener {
private static final long serialVersionUID = 1L;
private JPanel jPanel = null;
private JButton startSessionButton = null;
private JRadioButton persistRadioButton = null;
private JRadioButton timestampRadioButton = null;
private JRadioButton temporaryRadioButton = null;
private JCheckBox dontAskAgainCheckbox = null;
/**
* Constructs a modal {@code PersistSessionDialog} with the given owner.
*
* @param owner the {@code Frame} from which the dialog is displayed
* @throws HeadlessException when {@code GraphicsEnvironment.isHeadless()} returns {@code true}
*/
public PersistSessionDialog(Frame owner) {
super(owner, true);
this.setModalityType(ModalityType.DOCUMENT_MODAL);
initialize();
}
/**
* This method initializes this
*/
private void initialize() {
this.setContentPane(getJPanel());
this.pack();
// Disable the escape key - they have to amke a choice!
getRootPane().getActionMap().put("ESCAPE", null);
}
/**
* This method initializes jPanel
*
* @return javax.swing.JPanel
*/
private JPanel getJPanel() {
if (jPanel == null) {
jPanel = new JPanel();
jPanel.setLayout(new GridBagLayout());
JLabel question = new JLabel(Constant.messages.getString("database.newsession.question"));
jPanel.add(question, LayoutHelper.getGBC(0, 0, 2, 1.0D, new Insets(4, 4, 4, 4)));
jPanel.add(this.getTimestampRadioButton(), LayoutHelper.getGBC(0, 1, 2, 1.0D, new Insets(4, 4, 4, 4)));
jPanel.add(this.getPersistRadioButton(), LayoutHelper.getGBC(0, 3, 2, 1.0D, new Insets(4, 4, 4, 4)));
jPanel.add(this.getTemporaryRadioButton(), LayoutHelper.getGBC(0, 5, 2, 1.0D, new Insets(4, 4, 4, 4)));
ButtonGroup buttonGroup = new ButtonGroup();
buttonGroup.add(this.getTimestampRadioButton());
buttonGroup.add(this.getPersistRadioButton());
buttonGroup.add(this.getTemporaryRadioButton());
jPanel.add(new JLabel(), LayoutHelper.getGBC(0, 6, 2, 1.0D, 1.0D)); // Spacer
jPanel.add(getDontAskAgainCheckbox(), LayoutHelper.getGBC(0, 7, 2, 1.0D, new Insets(4, 4, 4, 4)));
jPanel.add(new JLabel(Constant.messages.getString("database.newsession.prompt.note")),
LayoutHelper.getGBC(0, 8, 2, 1.0D, new Insets(4, 4, 4, 4)));
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new GridBagLayout());
JButton helpButton = new JButton(Constant.messages.getString("menu.help"));
helpButton.setToolTipText(Constant.messages.getString("help.dialog.button.tooltip"));
helpButton.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
ExtensionHelp.showHelp("ui.dialogs.persistsession");
}});
buttonPanel.add(helpButton, LayoutHelper.getGBC(0, 0, 1, 0.0D, new Insets(4, 4, 4, 4)));
buttonPanel.add(new JLabel(), LayoutHelper.getGBC(1, 0, 1, 1.0D, new Insets(4, 4, 4, 4))); // Spacer
buttonPanel.add(getStartSessionButton(), LayoutHelper.getGBC(2, 0, 1, 0.0D, new Insets(4, 4, 4, 4)));
jPanel.add(buttonPanel, LayoutHelper.getGBC(0, 20, 2, 1.0D, new Insets(4, 4, 4, 4)));
}
return jPanel;
}
private JRadioButton getPersistRadioButton() {
if (persistRadioButton == null) {
persistRadioButton =new JRadioButton(Constant.messages.getString("database.newsession.userspec"));
persistRadioButton.addActionListener(this);
}
return persistRadioButton;
}
private JRadioButton getTimestampRadioButton() {
if (timestampRadioButton == null) {
timestampRadioButton = new JRadioButton(Constant.messages.getString("database.newsession.timestamped"));
timestampRadioButton.addActionListener(this);
}
return timestampRadioButton;
}
private JRadioButton getTemporaryRadioButton() {
if (temporaryRadioButton == null) {
temporaryRadioButton = new JRadioButton(Constant.messages.getString("database.newsession.temporary"));
temporaryRadioButton.addActionListener(this);
}
return temporaryRadioButton;
}
private JCheckBox getDontAskAgainCheckbox() {
if (dontAskAgainCheckbox == null) {
dontAskAgainCheckbox = new JCheckBox(Constant.messages.getString("database.newsession.prompt.label"));
}
return dontAskAgainCheckbox;
}
public boolean isPersistChosen() {
return this.getPersistRadioButton().isSelected();
}
public void setPersistChosen() {
this.getPersistRadioButton().setSelected(true);
this.getStartSessionButton().setEnabled(true);
}
public boolean isTimestampChosen() {
return this.getTimestampRadioButton().isSelected();
}
public void setTimestampChosen() {
this.getTimestampRadioButton().setSelected(true);
this.getStartSessionButton().setEnabled(true);
}
public boolean isTemporaryChosen() {
return this.getTemporaryRadioButton().isSelected();
}
public void setTemporaryChosen() {
this.getTemporaryRadioButton().setSelected(true);
this.getStartSessionButton().setEnabled(true);
}
public boolean isDontAskAgain() {
return this.getDontAskAgainCheckbox().isSelected();
}
/**
* This method initializes startSessionButton
*
* @return javax.swing.JButton
*/
private JButton getStartSessionButton() {
if (startSessionButton == null) {
startSessionButton = new JButton();
startSessionButton.setText(Constant.messages.getString("database.newsession.button.start"));
startSessionButton.setEnabled(false);
startSessionButton.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(java.awt.event.ActionEvent e) {
PersistSessionDialog.this.dispose();
}
});
}
return startSessionButton;
}
@Override
public void actionPerformed(ActionEvent e) {
// Enable the Start Session button if any of the radio buttons are selected
this.getStartSessionButton().setEnabled(this.getTimestampRadioButton().isSelected() ||
this.getPersistRadioButton().isSelected() || this.getTemporaryRadioButton().isSelected());
}
}