/*
* 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.support;
import com.eviware.soapui.model.security.SecurityScan;
import com.eviware.soapui.model.testsuite.TestCaseRunner;
import com.eviware.soapui.security.SecurityTest;
import com.eviware.soapui.security.SecurityTestRunContext;
import com.eviware.soapui.security.panels.SecurityScanNode;
import com.eviware.soapui.security.result.SecurityResult.ResultStatus;
import com.eviware.soapui.security.result.SecurityScanRequestResult;
import com.eviware.soapui.security.result.SecurityScanResult;
import com.eviware.soapui.security.scan.AbstractSecurityScanWithProperties;
import javax.swing.JLabel;
import javax.swing.JProgressBar;
import javax.swing.JTree;
import javax.swing.SwingConstants;
import javax.swing.tree.DefaultTreeModel;
import java.awt.Color;
import java.awt.Dimension;
public class ProgressBarSecurityScanAdapter extends SecurityTestRunListenerAdapter {
private static final String SKIPPED_VALUE = "SKIPPED";
private static final Color OK_COLOR = new Color(0, 204, 102);
private static final Color FAILED_COLOR = new Color(255, 102, 0);
private static final Color MISSING_ASSERTION_COLOR = new Color(204, 153, 255);
private static final String STATE_RUN = "No Alerts";
private static final String STATE_FAIL = "Alerts";
private static final String STATE_CANCEL = "Canceled";
private static final String STATE_MISSING_ASSERTIONS = "Missing Assertions";
private static final String STATE_MISSING_PARAMETERS = "Missing Parameters";
private JTree tree;
private SecurityScanNode node;
private JProgressBar progressBar;
private SecurityScan securityCheck;
private SecurityTest securityTest;
private int alertsCounter = 0;
private String prePostFix = " ";
private JLabel cntLabel;
private Color defaultBackground;
public ProgressBarSecurityScanAdapter(JTree tree, SecurityScanNode node, JProgressBar progressBar,
SecurityScan securityCheck, SecurityTest securityTest, JLabel cntLabel) {
this.tree = tree;
this.node = node;
this.progressBar = progressBar;
this.defaultBackground = progressBar.getBackground();
this.progressBar.setMaximum(100);
this.securityCheck = securityCheck;
this.securityTest = securityTest;
this.securityTest.addSecurityTestRunListener(this);
this.cntLabel = cntLabel;
this.cntLabel.setPreferredSize(new Dimension(50, 18));
this.cntLabel.setHorizontalTextPosition(SwingConstants.CENTER);
this.cntLabel.setHorizontalAlignment(SwingConstants.CENTER);
}
public void release() {
securityTest.removeSecurityTestRunListener(this);
securityTest = null;
securityCheck = null;
}
@Override
public void afterSecurityScanRequest(TestCaseRunner testRunner, SecurityTestRunContext runContext,
SecurityScanRequestResult securityCheckReqResult) {
if (securityCheckReqResult.getSecurityScan().getTestStep().getId()
.equals(this.securityCheck.getTestStep().getId())
&& this.securityCheck.getName().equals(securityCheckReqResult.getSecurityScan().getName())) {
if (securityCheck.getAssertionCount() == 0) {
progressBar.setForeground(MISSING_ASSERTION_COLOR);
progressBar.setString(STATE_MISSING_ASSERTIONS);
if (progressBar.getValue() >= progressBar.getMaximum() * .9) {
progressBar.setMaximum(progressBar.getMaximum() + 5);
}
progressBar.setValue(progressBar.getValue() + 1);
} else if (this.securityCheck instanceof AbstractSecurityScanWithProperties) {
if (((AbstractSecurityScanWithProperties) this.securityCheck).getParameterHolder() != null
&& ((AbstractSecurityScanWithProperties) this.securityCheck).getParameterHolder()
.getParameterList() != null
&& ((AbstractSecurityScanWithProperties) this.securityCheck).getParameterHolder()
.getParameterList().size() == 0) {
progressBar.setForeground(MISSING_ASSERTION_COLOR);
progressBar.setString(STATE_MISSING_PARAMETERS);
progressBar.setValue(progressBar.getMaximum());
} else {
if (securityCheckReqResult.getStatus() == ResultStatus.FAILED) {
progressBar.setForeground(FAILED_COLOR);
progressBar.setString(STATE_FAIL);
alertsCounter++;
} else if (securityCheckReqResult.getStatus() == ResultStatus.OK) {
if (!progressBar.getForeground().equals(FAILED_COLOR)) {
progressBar.setForeground(OK_COLOR);
progressBar.setString(STATE_RUN);
}
}
if (alertsCounter != 0) {
cntLabel.setOpaque(true);
cntLabel.setBackground(FAILED_COLOR);
cntLabel.setText(prePostFix + alertsCounter + prePostFix);
}
if (progressBar.getValue() >= progressBar.getMaximum() * .9) {
progressBar.setMaximum(progressBar.getMaximum() + 5);
}
progressBar.setValue(progressBar.getValue() + 1);
}
}
((DefaultTreeModel) tree.getModel()).nodeChanged(node);
}
}
@Override
public void beforeRun(TestCaseRunner testRunner, SecurityTestRunContext runContext) {
progressBar.setIndeterminate(false);
progressBar.setValue(0);
progressBar.setString("");
progressBar.setForeground(OK_COLOR);
cntLabel.setOpaque(false);
cntLabel.setText("");
alertsCounter = 0;
((DefaultTreeModel) tree.getModel()).nodeChanged(node);
}
@Override
public void afterSecurityScan(TestCaseRunner testRunner, SecurityTestRunContext runContext,
SecurityScanResult securityCheckResult) {
if (securityCheckResult.getSecurityScan().getTestStep().getId().equals(this.securityCheck.getTestStep().getId())
&& this.securityCheck.getName().equals(securityCheckResult.getSecurityScan().getName())) {
if (securityCheckResult.getStatus() != ResultStatus.CANCELED) {
if (securityCheck.getAssertionCount() == 0) {
progressBar.setForeground(MISSING_ASSERTION_COLOR);
progressBar.setString(STATE_MISSING_ASSERTIONS);
} else {
if (this.securityCheck instanceof AbstractSecurityScanWithProperties) {
AbstractSecurityScanWithProperties scanWithProperties = (AbstractSecurityScanWithProperties) this.securityCheck;
if (scanWithProperties.getParameterHolder() != null
&& (scanWithProperties.getParameterHolder().getParameterList() != null && (scanWithProperties
.getParameterHolder().getParameterList().size() == 0))) {
progressBar.setForeground(MISSING_ASSERTION_COLOR);
progressBar.setString(STATE_MISSING_PARAMETERS);
} else if (securityCheckResult.getStatus() == ResultStatus.SKIPPED) {
progressBar.setForeground(defaultBackground);
progressBar.setString(SKIPPED_VALUE);
}
} else {
if (securityCheckResult.getStatus() == ResultStatus.SKIPPED) {
progressBar.setForeground(defaultBackground);
progressBar.setString(SKIPPED_VALUE);
}
}
}
if (progressBar.getString().equals(SKIPPED_VALUE)) {
progressBar.setValue(0);
} else {
progressBar.setValue(progressBar.getMaximum());
}
if (progressBar.getString().equals("")) {
progressBar.setString(STATE_RUN);
}
} else {
progressBar.setString(STATE_CANCEL);
}
progressBar.setBackground(defaultBackground);
((DefaultTreeModel) tree.getModel()).nodeChanged(node);
}
}
@Override
public void beforeSecurityScan(TestCaseRunner testRunner, SecurityTestRunContext runContext,
SecurityScan securityCheck) {
if (securityCheck.getTestStep().getId().equals(this.securityCheck.getTestStep().getId())
&& this.securityCheck.getName().equals(securityCheck.getName())) {
progressBar.setString(STATE_RUN);
progressBar.setBackground(Color.white);
}
}
}