/*
* 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.mock;
import com.eviware.soapui.impl.wsdl.testcase.WsdlTestRunContext;
import com.eviware.soapui.model.ModelItem;
import com.eviware.soapui.model.mock.MockResponse;
import com.eviware.soapui.model.mock.MockRunContext;
import com.eviware.soapui.model.mock.MockRunner;
import com.eviware.soapui.model.mock.MockService;
import com.eviware.soapui.model.propertyexpansion.DefaultPropertyExpansionContext;
import com.eviware.soapui.model.propertyexpansion.PropertyExpander;
import com.eviware.soapui.model.propertyexpansion.PropertyExpansion;
import com.eviware.soapui.model.settings.Settings;
import com.eviware.soapui.model.testsuite.TestCase;
import com.eviware.soapui.model.testsuite.TestCaseRunContext;
import com.eviware.soapui.model.testsuite.TestCaseRunner;
import com.eviware.soapui.model.testsuite.TestProperty;
import com.eviware.soapui.model.testsuite.TestStep;
import com.eviware.soapui.support.types.StringToObjectMap;
import com.eviware.soapui.support.types.StringToStringMap;
import java.util.Collection;
import java.util.Map;
import java.util.Set;
/**
* MockRunContext available during dispatching of a WsdlMockRequest
*
* @author ole.matzura
*/
public class WsdlMockRunContext implements MockRunContext, Map<String, Object>, TestCaseRunContext, Cloneable {
private DefaultPropertyExpansionContext properties;
private final MockService mockService;
private final WsdlTestRunContext context;
private MockResponse mockResponse;
public WsdlMockRunContext(MockService mockService, WsdlTestRunContext context) {
this.mockService = mockService;
this.context = context;
reset();
}
public MockService getMockService() {
return mockService;
}
public Object getProperty(String name) {
return get(name);
}
public synchronized boolean hasProperty(String name) {
synchronized (properties) {
return properties.containsKey(name);
}
}
public synchronized Object removeProperty(String name) {
synchronized (properties) {
return properties.remove(name);
}
}
public synchronized void setProperty(String name, Object value) {
if (context != null) {
int ix = name.indexOf(PropertyExpansion.PROPERTY_SEPARATOR);
if (ix > 0) {
String teststepname = name.substring(0, ix);
TestStep refTestStep = context.getTestCase().getTestStepByName(teststepname);
if (refTestStep != null) {
TestProperty property = refTestStep.getProperty(name.substring(ix + 1));
if (property != null && !property.isReadOnly()) {
property.setValue(value.toString());
return;
}
}
}
}
synchronized (properties) {
properties.put(name, value);
}
}
public synchronized StringToStringMap toStringToStringMap() {
synchronized (properties) {
StringToStringMap result = new StringToStringMap();
for (String key : properties.keySet()) {
Object value = properties.get(key);
if (value != null) {
result.put(key, value.toString());
}
}
return result;
}
}
public synchronized void clear() {
synchronized (properties) {
properties.clear();
}
}
public synchronized Object clone() {
synchronized (properties) {
return properties.clone();
}
}
public synchronized boolean containsKey(Object arg0) {
synchronized (properties) {
return properties.containsKey(arg0);
}
}
public synchronized boolean containsValue(Object arg0) {
synchronized (properties) {
return properties.containsValue(arg0);
}
}
public synchronized Set<Entry<String, Object>> entrySet() {
synchronized (properties) {
return properties.entrySet();
}
}
public synchronized boolean equals(Object arg0) {
synchronized (properties) {
return properties.equals(arg0);
}
}
public synchronized Object get(Object arg0) {
if ("mockService".equals(arg0)) {
return getMockService();
}
if ("mockResponse".equals(arg0)) {
return getMockResponse();
}
if ("modelItem".equals(arg0)) {
return getModelItem();
}
if ("currentStep".equals(arg0)) {
return getCurrentStep();
}
if ("currentStepIndex".equals(arg0)) {
return getCurrentStepIndex();
}
if ("settings".equals(arg0)) {
return getSettings();
}
if ("testCase".equals(arg0)) {
return getTestCase();
}
if ("testRunner".equals(arg0)) {
return getTestRunner();
}
synchronized (properties) {
return properties.get(arg0);
}
}
public synchronized int hashCode() {
synchronized (properties) {
return properties.hashCode();
}
}
public synchronized boolean isEmpty() {
synchronized (properties) {
return properties.isEmpty();
}
}
public synchronized Set<String> keySet() {
synchronized (properties) {
return properties.keySet();
}
}
public synchronized Object put(String arg0, Object arg1) {
synchronized (properties) {
return properties.put(arg0, arg1);
}
}
public synchronized void putAll(Map<? extends String, ? extends Object> arg0) {
synchronized (arg0) {
synchronized (properties) {
properties.putAll(arg0);
}
}
}
public synchronized Object remove(Object arg0) {
synchronized (properties) {
return properties.remove(arg0);
}
}
public synchronized int size() {
synchronized (properties) {
return properties.size();
}
}
public synchronized String toString() {
synchronized (properties) {
return properties.toString();
}
}
public synchronized Collection<Object> values() {
synchronized (properties) {
return properties.values();
}
}
public synchronized TestStep getCurrentStep() {
return context == null ? null : context.getCurrentStep();
}
public synchronized int getCurrentStepIndex() {
return context == null ? -1 : context.getCurrentStepIndex();
}
public synchronized Object getProperty(String testStep, String propertyName) {
return context == null ? null : context.getProperty(testStep, propertyName);
}
public synchronized TestCaseRunner getTestRunner() {
return context == null ? null : context.getTestRunner();
}
public synchronized TestCase getTestCase() {
return context == null ? null : context.getTestCase();
}
public synchronized Settings getSettings() {
return context == null ? mockService.getSettings() : context.getTestCase().getSettings();
}
public void setMockResponse(MockResponse mockResponse) {
this.mockResponse = mockResponse;
}
public MockResponse getMockResponse() {
return mockResponse;
}
public ModelItem getModelItem() {
return mockResponse == null ? mockService : mockResponse;
}
public synchronized String expand(String content) {
synchronized (properties) {
return PropertyExpander.expandProperties(this, content);
}
}
public synchronized String[] getPropertyNames() {
synchronized (properties) {
return properties.keySet().toArray(new String[properties.size()]);
}
}
public synchronized StringToObjectMap getProperties() {
synchronized (properties) {
return properties;
}
}
public MockRunner getMockRunner() {
return mockService.getMockRunner();
}
public void reset() {
properties = (DefaultPropertyExpansionContext) (context == null ? new DefaultPropertyExpansionContext(
mockService) : context.getProperties());
}
}