/*
* 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.impl.wsdl.panels.support;
import com.eviware.soapui.SoapUI;
import com.eviware.soapui.impl.wsdl.WsdlTestSuite;
import com.eviware.soapui.model.testsuite.LoadTestRunner;
import com.eviware.soapui.model.testsuite.TestCase;
import com.eviware.soapui.model.testsuite.TestCaseRunner;
import com.eviware.soapui.model.testsuite.TestRunner;
import com.eviware.soapui.model.testsuite.TestRunner.Status;
import com.eviware.soapui.model.testsuite.TestSuiteRunContext;
import com.eviware.soapui.model.testsuite.TestSuiteRunListener;
import com.eviware.soapui.model.testsuite.TestSuiteRunner;
import com.eviware.soapui.monitor.support.TestMonitorListenerAdapter;
import com.eviware.soapui.security.SecurityTestRunner;
import javax.swing.JProgressBar;
import java.awt.Color;
/**
* Class that keeps a JProgressBars state in sync with a TestCase
*
* @author Ole.Matzura
*/
public class ProgressBarTestSuiteAdapter {
private final JProgressBar progressBar;
private final WsdlTestSuite testSuite;
private InternalTestSuiteRunListener internalTestRunListener;
private InternalTestMonitorListener internalTestMonitorListener;
public ProgressBarTestSuiteAdapter(JProgressBar progressBar, WsdlTestSuite testSuite) {
this.progressBar = progressBar;
this.testSuite = testSuite;
setLoadTestingState();
setSecurityTestingState();
internalTestRunListener = new InternalTestSuiteRunListener();
testSuite.addTestSuiteRunListener(internalTestRunListener);
internalTestMonitorListener = new InternalTestMonitorListener();
SoapUI.getTestMonitor().addTestMonitorListener(internalTestMonitorListener);
}
public void release() {
testSuite.removeTestSuiteRunListener(internalTestRunListener);
SoapUI.getTestMonitor().removeTestMonitorListener(internalTestMonitorListener);
}
private void setLoadTestingState() {
if (SoapUI.getTestMonitor().hasRunningLoadTest(testSuite)) {
progressBar.setIndeterminate(true);
progressBar.setString("load testing");
} else {
progressBar.setIndeterminate(false);
progressBar.setString("");
}
}
private void setSecurityTestingState() {
if (SoapUI.getTestMonitor().hasRunningSecurityTest(testSuite)) {
progressBar.setIndeterminate(true);
progressBar.setString("security testing");
} else {
progressBar.setIndeterminate(false);
progressBar.setString("");
}
}
private class InternalTestMonitorListener extends TestMonitorListenerAdapter {
public void loadTestStarted(LoadTestRunner loadTestRunner) {
setLoadTestingState();
}
public void loadTestFinished(LoadTestRunner loadTestRunner) {
setLoadTestingState();
}
public void securityTestStarted(SecurityTestRunner securityTestRunner) {
setSecurityTestingState();
}
public void securityTestFinished(SecurityTestRunner securityTestRunner) {
setSecurityTestingState();
}
}
public class InternalTestSuiteRunListener implements TestSuiteRunListener {
public void beforeRun(TestSuiteRunner testRunner, TestSuiteRunContext runContext) {
if (progressBar.isIndeterminate()) {
return;
}
progressBar.getModel().setMaximum(testRunner.getTestSuite().getTestCaseCount());
progressBar.setForeground(Color.GREEN.darker());
}
public void beforeTestCase(TestSuiteRunner testRunner, TestSuiteRunContext runContext, TestCase testCase) {
if (progressBar.isIndeterminate()) {
return;
}
progressBar.setString(testCase.getName());
progressBar.setValue(testRunner.getResults().size());
}
public void afterTestCase(TestSuiteRunner testRunner, TestSuiteRunContext runContext, TestCaseRunner result) {
if (progressBar.isIndeterminate()) {
return;
}
if (result.getStatus() == TestRunner.Status.FAILED) {
progressBar.setForeground(Color.RED);
} else if (!testSuite.isFailOnErrors()) {
progressBar.setForeground(Color.GREEN.darker());
}
progressBar.setValue(testRunner.getResults().size() + 1);
}
public void afterRun(TestSuiteRunner testRunner, TestSuiteRunContext runContext) {
if (testRunner.getStatus() == Status.FAILED) {
progressBar.setForeground(Color.RED);
} else if (testRunner.getStatus() == Status.FINISHED) {
progressBar.setForeground(Color.GREEN.darker());
}
if (progressBar.isIndeterminate()) {
return;
}
if (testRunner.getStatus() == TestCaseRunner.Status.FINISHED) {
progressBar.setValue(testRunner.getTestSuite().getTestCaseCount());
}
progressBar.setString(testRunner.getStatus().toString());
}
}
}