/*
* 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.teststeps;
import com.eviware.soapui.config.TestStepConfig;
import com.eviware.soapui.impl.wsdl.AbstractWsdlModelItem;
import com.eviware.soapui.impl.wsdl.WsdlTestSuite;
import com.eviware.soapui.impl.wsdl.testcase.WsdlTestCase;
import com.eviware.soapui.model.ModelItem;
import com.eviware.soapui.model.PanelBuilder;
import com.eviware.soapui.model.iface.Interface;
import com.eviware.soapui.model.propertyexpansion.MutablePropertyExpansion;
import com.eviware.soapui.model.propertyexpansion.PropertyExpansion;
import com.eviware.soapui.model.propertyexpansion.PropertyExpansionUtils;
import com.eviware.soapui.model.support.ModelSupport;
import com.eviware.soapui.model.testsuite.TestCaseRunContext;
import com.eviware.soapui.model.testsuite.TestCaseRunner;
import com.eviware.soapui.model.testsuite.TestStep;
import com.eviware.soapui.support.UISupport;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
* Base class for WSDL TestCase test steps.
*
* @author Ole.Matzura
*/
abstract public class WsdlTestStep extends AbstractWsdlModelItem<TestStepConfig> implements TestStep {
private final WsdlTestCase testCase;
private final boolean forLoadTest;
private final boolean hasEditor;
protected WsdlTestStep(WsdlTestCase testCase, TestStepConfig config, boolean hasEditor, boolean forLoadTest) {
super(config, testCase, null);
this.testCase = testCase;
this.hasEditor = hasEditor;
this.forLoadTest = forLoadTest;
}
public boolean hasEditor() {
return hasEditor;
}
public boolean isForLoadTest() {
return forLoadTest;
}
protected PanelBuilder<?> createPanelBuilder() {
return null;
}
public WsdlTestCase getTestCase() {
return testCase;
}
/**
* Called from WsdlTestCase when moving a teststep due to no move
* functionality in xmlbeans generated arrays.
*
* @param config the new config to use, will be a copy of the existing one. The
* current will be invalid
*/
public void resetConfigOnMove(TestStepConfig config) {
setConfig(config);
}
public boolean cancel() {
return false;
}
public String getLabel() {
String name = getName();
if (isDisabled()) {
return name + " (disabled)";
} else {
return name;
}
}
@Override
public void setName(String name) {
if (getName().equals(name)) {
return;
}
UISupport.setHourglassCursor();
try {
List<MutablePropertyExpansion> result = new ArrayList<MutablePropertyExpansion>();
List<MutablePropertyExpansion> properties = new ArrayList<MutablePropertyExpansion>();
PropertyExpansion[] propertyExpansions = PropertyExpansionUtils.getPropertyExpansions(getTestCase(), true,
true);
for (PropertyExpansion pe : propertyExpansions) {
MutablePropertyExpansion mpe = (MutablePropertyExpansion) pe;
ModelItem modelItem = mpe.getProperty().getModelItem();
if (modelItem == this
|| ((modelItem instanceof WsdlTestRequest && ((WsdlTestRequest) modelItem).getTestStep() == this))) {
properties.add(mpe);
}
}
String oldLabel = getLabel();
super.setName(name);
String label = getLabel();
if (!oldLabel.equals(label)) {
notifyPropertyChanged(LABEL_PROPERTY, oldLabel, label);
}
for (MutablePropertyExpansion mpe : properties) {
try {
mpe.update();
result.add(mpe);
} catch (Exception e) {
e.printStackTrace();
}
}
} finally {
UISupport.resetCursor();
}
}
public boolean dependsOn(AbstractWsdlModelItem<?> modelItem) {
return false;
}
public String getTestStepTitle() {
return getTestCase().getTestSuite().getName() + "#" + getTestCase().getName();
}
/**
* Called after cloning for custom behaviour
*
* @param targetTestCase step we were cloned from
*/
public WsdlTestStep clone(WsdlTestCase targetTestCase, String name) {
beforeSave();
TestStepConfig newConfig = (TestStepConfig) getConfig().copy();
newConfig.setName(name);
WsdlTestStep result = targetTestCase.addTestStep(newConfig);
ModelSupport.createNewIds(result);
return result;
}
public void finish(TestCaseRunner testRunner, TestCaseRunContext testRunContext) {
}
public void prepare(TestCaseRunner testRunner, TestCaseRunContext testRunContext) throws Exception {
}
public Collection<Interface> getRequiredInterfaces() {
return new ArrayList<Interface>();
}
public boolean isDisabled() {
return getConfig().getDisabled();
}
public void setDisabled(boolean disabled) {
String oldLabel = getLabel();
boolean oldDisabled = isDisabled();
if (oldDisabled == disabled) {
return;
}
if (disabled) {
getConfig().setDisabled(disabled);
} else if (getConfig().isSetDisabled()) {
getConfig().unsetDisabled();
}
notifyPropertyChanged(DISABLED_PROPERTY, oldDisabled, disabled);
String label = getLabel();
notifyPropertyChanged(LABEL_PROPERTY, oldLabel, label);
}
public ModelItem getModelItem() {
return this;
}
public String getPropertiesLabel() {
return "Custom Properties";
}
/**
* Default property to use when creating property-transfers where this step
* is source
*/
public String getDefaultSourcePropertyName() {
return null;
}
/**
* Default property to use when creating property-transfers where this step
* is target
*/
public String getDefaultTargetPropertyName() {
return null;
}
public void afterCopy(WsdlTestSuite oldTestSuite, WsdlTestCase oldTestCase) {
}
}