/*
* SoapUI, Copyright (C) 2004-2016 SmartBear Software
*
* Licensed under the EUPL, Version 1.1 or - as soon as they will be approved by the European Commission - subsequent
* versions of the EUPL (the "Licence");
* You may not use this work except in compliance with the Licence.
* You may obtain a copy of the Licence at:
*
* http://ec.europa.eu/idabc/eupl
*
* Unless required by applicable law or agreed to in writing, software distributed under the Licence is
* distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the Licence for the specific language governing permissions and limitations
* under the Licence.
*/
package com.eviware.soapui.security.ui;
import com.eviware.soapui.config.StrategyTypeConfig;
import com.eviware.soapui.impl.wsdl.actions.project.SimpleDialog;
import com.eviware.soapui.model.security.SecurityParametersTableModel;
import com.eviware.soapui.model.security.SecurityScan;
import com.eviware.soapui.security.assertion.SecurityAssertionPanel;
import com.eviware.soapui.security.scan.AbstractSecurityScanWithProperties;
import com.eviware.soapui.security.ui.SecurityConfigurationDialogBuilder.Strategy;
import com.eviware.soapui.support.UISupport;
import com.eviware.x.form.XFormDialog;
import com.eviware.x.form.XFormField;
import com.eviware.x.form.XFormFieldListener;
import com.eviware.x.form.support.ADialogBuilder;
import com.eviware.x.form.support.XFormRadioGroup;
import com.eviware.x.impl.swing.JFormDialog;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
public class SecurityConfigurationDialog extends SimpleDialog {
private SecurityScan securityCheck;
private boolean result;
private JTabbedPane tabs;
private SecurityCheckedParametersTablePanel parametersTable;
private SecurityAssertionPanel securityAssertionPanel;
private XFormDialog strategyDialog;
public SecurityConfigurationDialog(SecurityScan securityCheck) {
super(securityCheck.getName(), securityCheck.getDescription(), securityCheck.getHelpURL());
this.securityCheck = securityCheck;
}
public SecurityScan getSecurityScan() {
return securityCheck;
}
@Override
protected Component buildContent() {
JPanel mainPanel = new JPanel();
if (securityCheck instanceof AbstractSecurityScanWithProperties) {
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
mainPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
JPanel topPanel = UISupport.createEmptyPanel(0, 0, 10, 0);
topPanel.add(buildParametersTable(), BorderLayout.CENTER);
JPanel p = UISupport.createEmptyPanel(5, 0, 5, 0);
JLabel jLabel = new JLabel("Parameters:");
jLabel.setPreferredSize(new Dimension(72, 20));
p.add(jLabel, BorderLayout.NORTH);
topPanel.add(p, BorderLayout.NORTH);
JComponent component = securityCheck.getComponent();
if (component != null) {
topPanel.add(component, BorderLayout.SOUTH);
}
mainPanel.add(topPanel);
} else {
mainPanel.setLayout(new BorderLayout());
mainPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
JComponent component = securityCheck.getComponent();
if (component != null) {
JPanel topPanel = UISupport.createEmptyPanel(0, 0, 10, 10);
topPanel.add(component, BorderLayout.SOUTH);
mainPanel.add(topPanel, BorderLayout.NORTH);
}
}
Dimension prefSize = mainPanel.getPreferredSize();
int prefHeight = (int) (prefSize.getHeight() + 170);
int prefWidth = (int) Math.max(prefSize.getWidth(), 600);
mainPanel.setPreferredSize(new Dimension(prefWidth, prefHeight));
mainPanel.add(buildTabs(), BorderLayout.CENTER);
return mainPanel;
}
protected Component buildParametersTable() {
parametersTable = new SecurityCheckedParametersTablePanel(new SecurityParametersTableModel(
((AbstractSecurityScanWithProperties) securityCheck).getParameterHolder()), securityCheck.getTestStep()
.getProperties(), (AbstractSecurityScanWithProperties) securityCheck);
parametersTable.setPreferredSize(new Dimension(400, 150));
parametersTable.setMinimumSize(new Dimension(400, 150));
parametersTable.setMaximumSize(new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE));
return parametersTable;
}
protected Component buildTabs() {
tabs = new JTabbedPane();
securityAssertionPanel = new SecurityAssertionPanel(securityCheck);
tabs.addTab("Assertions", securityAssertionPanel);
tabs.addTab("Strategy", buildStrategyTab());
JComponent advancedSettingsPanel = securityCheck.getAdvancedSettingsPanel();
if (advancedSettingsPanel != null) {
tabs.addTab("Advanced", new JScrollPane(advancedSettingsPanel));
}
tabs.setMaximumSize(new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE));
tabs.setPreferredSize(new Dimension(400, 150));
return tabs;
}
protected Component buildStrategyTab() {
strategyDialog = ADialogBuilder.buildDialog(SecurityConfigurationDialogBuilder.Strategy.class, null);
XFormRadioGroup strategy = (XFormRadioGroup) strategyDialog.getFormField(Strategy.STRATEGY);
final String[] strategyOptions = new String[]{"One by One", "All At Once"};
strategy.setOptions(strategyOptions);
if (securityCheck.getExecutionStrategy().getStrategy() == StrategyTypeConfig.NO_STRATEGY) {
strategy.setEnabled(false);
} else {
if (securityCheck.getExecutionStrategy().getStrategy() == StrategyTypeConfig.ONE_BY_ONE) {
strategy.setValue(strategyOptions[0]);
} else {
strategy.setValue(strategyOptions[1]);
}
}
// default is ONE_BY_ONE
if (securityCheck.getExecutionStrategy().getImmutable()) {
strategy.setDisabled();
}
strategy.addFormFieldListener(new XFormFieldListener() {
@Override
public void valueChanged(XFormField sourceField, String newValue, String oldValue) {
if (newValue.equals(strategyOptions[0])) {
securityCheck.getExecutionStrategy().setStrategy(StrategyTypeConfig.ONE_BY_ONE);
} else {
securityCheck.getExecutionStrategy().setStrategy(StrategyTypeConfig.ALL_AT_ONCE);
}
}
});
XFormField delay = strategyDialog.getFormField(Strategy.DELAY);
delay.setValue(String.valueOf(securityCheck.getExecutionStrategy().getDelay()));
delay.addFormFieldListener(new XFormFieldListener() {
@Override
public void valueChanged(XFormField sourceField, String newValue, String oldValue) {
try {
if ("".equals(newValue)) {
return;
}
Integer.valueOf(newValue);
securityCheck.getExecutionStrategy().setDelay(Integer.valueOf(newValue));
} catch (Exception e) {
UISupport.showErrorMessage("Delay value must be integer number");
}
}
});
XFormField applyToFailedTests = strategyDialog.getFormField(Strategy.APPLY_TO_FAILED_STEPS);
applyToFailedTests.setValue(String.valueOf(securityCheck.isApplyForFailedStep()));
applyToFailedTests.addFormFieldListener(new XFormFieldListener() {
@Override
public void valueChanged(XFormField sourceField, String newValue, String oldValue) {
securityCheck.setApplyForFailedTestStep(Boolean.parseBoolean(newValue));
}
});
XFormField runOnlyOnce = strategyDialog.getFormField(Strategy.RUN_ONLY_ONCE);
runOnlyOnce.setValue(String.valueOf(securityCheck.isRunOnlyOnce()));
runOnlyOnce.addFormFieldListener(new XFormFieldListener() {
@Override
public void valueChanged(XFormField sourceField, String newValue, String oldValue) {
securityCheck.setRunOnlyOnce(Boolean.parseBoolean(newValue));
}
});
return ((JFormDialog) strategyDialog).getPanel();
}
@Override
protected boolean handleOk() {
result = true;
return true;
}
public boolean configure() {
result = false;
setVisible(true);
return result;
}
public void release() {
if (strategyDialog != null) {
strategyDialog.release();
strategyDialog = null;
}
securityAssertionPanel.release();
securityAssertionPanel = null;
securityCheck = null;
tabs.removeAll();
tabs = null;
dispose();
}
}