/*
* 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.mock;
import com.eviware.soapui.SoapUI;
import com.eviware.soapui.analytics.Analytics;
import com.eviware.soapui.analytics.SoapUIActions;
import com.eviware.soapui.impl.rest.actions.mock.AddEmptyRestMockResourceAction;
import com.eviware.soapui.impl.rest.actions.mock.RestMockServiceOptionsAction;
import com.eviware.soapui.impl.rest.mock.RestMockService;
import com.eviware.soapui.impl.support.AbstractMockService;
import com.eviware.soapui.impl.support.actions.ShowOnlineHelpAction;
import com.eviware.soapui.impl.wsdl.actions.mockservice.AddNewMockOperationAction;
import com.eviware.soapui.impl.wsdl.actions.mockservice.MockServiceOptionsAction;
import com.eviware.soapui.impl.wsdl.mock.WsdlMockOperation;
import com.eviware.soapui.impl.wsdl.mock.WsdlMockRunContext;
import com.eviware.soapui.impl.wsdl.mock.WsdlMockRunner;
import com.eviware.soapui.impl.wsdl.mock.WsdlMockService;
import com.eviware.soapui.impl.wsdl.panels.teststeps.support.AbstractGroovyEditorModel;
import com.eviware.soapui.impl.wsdl.panels.teststeps.support.PropertyHolderTable;
import com.eviware.soapui.model.ModelItem;
import com.eviware.soapui.model.mock.MockOperation;
import com.eviware.soapui.model.mock.MockResponse;
import com.eviware.soapui.model.mock.MockResult;
import com.eviware.soapui.model.mock.MockRunner;
import com.eviware.soapui.model.mock.MockService;
import com.eviware.soapui.model.mock.MockServiceListener;
import com.eviware.soapui.model.support.MockRunListenerAdapter;
import com.eviware.soapui.settings.UISettings;
import com.eviware.soapui.support.DocumentListenerAdapter;
import com.eviware.soapui.support.StringUtils;
import com.eviware.soapui.support.Tools;
import com.eviware.soapui.support.UISupport;
import com.eviware.soapui.support.action.support.AbstractSoapUIAction;
import com.eviware.soapui.support.action.swing.ActionList;
import com.eviware.soapui.support.action.swing.DefaultActionList;
import com.eviware.soapui.support.action.swing.SwingActionDelegate;
import com.eviware.soapui.support.components.GroovyEditorComponent;
import com.eviware.soapui.support.components.GroovyEditorInspector;
import com.eviware.soapui.support.components.JComponentInspector;
import com.eviware.soapui.support.components.JFocusableComponentInspector;
import com.eviware.soapui.support.components.JInspectorPanel;
import com.eviware.soapui.support.components.JInspectorPanelFactory;
import com.eviware.soapui.support.components.JUndoableTextArea;
import com.eviware.soapui.support.components.JXToolBar;
import com.eviware.soapui.support.swing.AbstractListMouseListener;
import com.eviware.soapui.support.swing.ModelItemListKeyListener;
import com.eviware.soapui.support.swing.ModelItemListMouseListener;
import com.eviware.soapui.ui.support.JProgressBarWrapper;
import com.eviware.soapui.ui.support.KeySensitiveModelItemDesktopPanel;
import org.apache.commons.collections.list.TreeList;
import javax.swing.AbstractAction;
import javax.swing.AbstractListModel;
import javax.swing.Action;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.ListCellRenderer;
import javax.swing.ListModel;
import javax.swing.SwingConstants;
import javax.swing.text.Document;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* DesktopPanel for WsdlMockServices
*
* @author ole.matzura
*/
@SuppressWarnings("serial")
public class WsdlMockServiceDesktopPanel<MockServiceType extends MockService>
extends KeySensitiveModelItemDesktopPanel<MockServiceType> {
private JButton runButton;
private WsdlMockRunner mockRunner;
private JButton stopButton;
private JProgressBarWrapper progressBarWrapper = new JProgressBarWrapper();
private LogListModel logListModel;
private JList testLogList;
private JCheckBox enableLogCheckBox;
private JScrollPane logScrollPane;
private JList operationList;
private InternalMockRunListener mockRunListener;
private PropertyHolderTable propertiesTable;
private JUndoableTextArea descriptionArea;
private JButton showWsdlButton;
private JButton optionsButton;
private JLabel runInfoLabel;
private GroovyEditorComponent startGroovyEditor;
private GroovyEditorComponent stopGroovyEditor;
private GroovyEditorComponent onRequestGroovyEditor;
private GroovyEditorComponent afterRequestGroovyEditor;
private JInspectorPanel inspectorPanel;
private JInspectorPanel contentInspector;
public WsdlMockServiceDesktopPanel(MockServiceType mockService) {
super(mockService);
buildUI();
setPreferredSize(new Dimension(400, 500));
mockRunListener = new InternalMockRunListener();
mockService.addMockRunListener(mockRunListener);
}
public boolean onClose(boolean canCancel) {
if (mockRunner != null && mockRunner.isRunning() && canCancel) {
if (!UISupport.confirm("Close and stop MockService", "Close MockService")) {
return false;
}
}
if (mockRunner != null) {
if (mockRunner.isRunning()) {
mockRunner.stop();
}
mockRunner.release();
}
getModelItem().removeMockRunListener(mockRunListener);
((OperationListModel) operationList.getModel()).release();
logListModel.clear();
propertiesTable.release();
startGroovyEditor.release();
stopGroovyEditor.release();
onRequestGroovyEditor.release();
afterRequestGroovyEditor.release();
inspectorPanel.release();
contentInspector.release();
return release();
}
public boolean dependsOn(ModelItem modelItem) {
return modelItem == getModelItem() || modelItem == getModelItem().getProject();
}
private void buildUI() {
add(buildToolbar(), BorderLayout.NORTH);
contentInspector = JInspectorPanelFactory.build(buildContent());
contentInspector.setDefaultDividerLocation(0.5F);
contentInspector.addInspector(new JComponentInspector<JComponent>(buildLog(), "Message Log",
"A log of processed requests and their responses", true));
contentInspector.setCurrentInspector("Message Log");
add(contentInspector.getComponent(), BorderLayout.CENTER);
add(new JLabel("--"), BorderLayout.PAGE_END);
}
public boolean logIsEnabled() {
return enableLogCheckBox.isSelected();
}
private JComponent buildContent() {
JTabbedPane tabs = new JTabbedPane();
inspectorPanel = JInspectorPanelFactory.build(buildOperationList());
String title = getModelItem() instanceof RestMockService ? "Actions" : "Operations";
tabs.addTab(title, inspectorPanel.getComponent());
addTabs(tabs, inspectorPanel);
if (StringUtils.hasContent(getModelItem().getDescription())
&& getModelItem().getSettings().getBoolean(UISettings.SHOW_DESCRIPTIONS)) {
inspectorPanel.setCurrentInspector("Description");
}
return UISupport.createTabPanel(tabs, true);
}
protected void addTabs(JTabbedPane tabs, JInspectorPanel inspectorPanel) {
inspectorPanel.addInspector(new JFocusableComponentInspector<JPanel>(buildDescriptionPanel(), descriptionArea,
"Description", "A description for this MockService", true));
inspectorPanel.addInspector(new JComponentInspector<JComponent>(buildPropertiesPanel(), "Properties",
"Properties for this MockService", true));
inspectorPanel.addInspector(new GroovyEditorInspector(buildStartScriptPanel(), "Start Script",
"A Groovy script to run when starting the MockService"));
inspectorPanel.addInspector(new GroovyEditorInspector(buildStopScriptPanel(), "Stop Script",
"A Groovy script to run when stopping the MockService"));
inspectorPanel.addInspector(new GroovyEditorInspector(buildOnRequestScriptPanel(), "OnRequest Script",
"A Groovy script to run when receiving a request before it is dispatched"));
inspectorPanel.addInspector(new GroovyEditorInspector(buildAfterRequestScriptPanel(), "AfterRequest Script",
"A Groovy script to run after a request has been dispatched"));
}
protected JComponent buildOperationList() {
operationList = new JList(new OperationListModel());
operationList.addMouseListener(new ModelItemListMouseListener() {
private ActionList defaultActions;
protected ActionList getDefaultActions() {
if (defaultActions == null) {
defaultActions = new DefaultActionList();
defaultActions.addAction(createAddMockOperationDelegate());
}
return defaultActions;
}
});
operationList.setCellRenderer(new OperationListCellRenderer());
operationList.addKeyListener(new ModelItemListKeyListener() {
@Override
public ModelItem getModelItemAt(int ix) {
return getModelItem().getMockOperationAt(ix);
}
});
JScrollPane scrollPane = new JScrollPane(operationList);
return UISupport.buildPanelWithToolbar(buildMockOperationListToolbar(), scrollPane);
}
private JComponent buildMockOperationListToolbar() {
JXToolBar toolbar = UISupport.createToolbar();
toolbar.add(UISupport.createToolbarButton(createAddMockOperationDelegate()));
return toolbar;
}
private SwingActionDelegate<?> createAddMockOperationDelegate() {
String actionId = AddNewMockOperationAction.SOAPUI_ACTION_ID;
String icon = "/mockOperation.gif";
if (getModelItem() instanceof RestMockService) {
actionId = AddEmptyRestMockResourceAction.SOAPUI_ACTION_ID;
icon = "/addToRestMockAction.gif";
}
return SwingActionDelegate.createDelegate(actionId, getModelItem(), null, icon);
}
protected JComponent buildPropertiesPanel() {
JPanel panel = new JPanel(new BorderLayout());
propertiesTable = new PropertyHolderTable(getModelItem());
panel.add(propertiesTable, BorderLayout.CENTER);
return panel;
}
protected GroovyEditorComponent buildStartScriptPanel() {
startGroovyEditor = new GroovyEditorComponent(new StartScriptGroovyEditorModel(), null);
return startGroovyEditor;
}
protected GroovyEditorComponent buildStopScriptPanel() {
stopGroovyEditor = new GroovyEditorComponent(new StopScriptGroovyEditorModel(), null);
return stopGroovyEditor;
}
protected GroovyEditorComponent buildOnRequestScriptPanel() {
onRequestGroovyEditor = new GroovyEditorComponent(new OnRequestScriptGroovyEditorModel(), null);
return onRequestGroovyEditor;
}
protected GroovyEditorComponent buildAfterRequestScriptPanel() {
afterRequestGroovyEditor = new GroovyEditorComponent(new AfterRequestScriptGroovyEditorModel(), null);
return afterRequestGroovyEditor;
}
protected JPanel buildDescriptionPanel() {
JPanel panel = new JPanel(new BorderLayout());
descriptionArea = new JUndoableTextArea(getModelItem().getDescription());
descriptionArea.getDocument().addDocumentListener(new DocumentListenerAdapter() {
public void update(Document document) {
((AbstractMockService) getModelItem()).setDescription(descriptionArea.getText());
}
});
panel.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
UISupport.addTitledBorder(panel, "MockService Description");
panel.add(new JScrollPane(descriptionArea), BorderLayout.CENTER);
return panel;
}
protected JComponent buildLog() {
JPanel panel = new JPanel(new BorderLayout());
JXToolBar builder = UISupport.createToolbar();
enableLogCheckBox = new JCheckBox(" ", true);
enableLogCheckBox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
testLogList.setEnabled(enableLogCheckBox.isSelected());
if (mockRunner != null) {
mockRunner.setLogEnabled(enableLogCheckBox.isSelected());
}
// border needs to be repainted..
logScrollPane.repaint();
}
});
enableLogCheckBox.setOpaque(false);
builder.addFixed(enableLogCheckBox);
builder.addRelatedGap();
builder.addFixed(new JLabel("Enable"));
builder.addRelatedGap();
addLogActions(builder);
builder.addGlue();
builder.setBorder(BorderFactory.createEmptyBorder(2, 3, 3, 3));
panel.add(builder, BorderLayout.NORTH);
logListModel = new LogListModel();
testLogList = new JList(logListModel);
testLogList.setCellRenderer(new LogCellRenderer());
// testLogList.setPrototypeCellValue( "Testing 123" );
// testLogList.setFixedCellWidth( -1 );
testLogList.addMouseListener(new LogListMouseListener());
testLogList.setBorder(BorderFactory.createLineBorder(Color.GRAY));
logScrollPane = new JScrollPane(testLogList);
panel.add(logScrollPane, BorderLayout.CENTER);
return panel;
}
protected void addLogActions(JXToolBar builder) {
builder.addFixed(UISupport.createToolbarButton(new ClearLogAction()));
builder.addRelatedGap();
builder.addFixed(UISupport.createToolbarButton(new SetLogOptionsAction()));
}
protected JXToolBar buildToolbar() {
JXToolBar toolbar = UISupport.createToolbar();
runButton = createActionButton(new RunMockServiceAction(), true);
stopButton = createActionButton(new StopMockServiceAction(), false);
MockServiceType modelItem = getModelItem();
AbstractSoapUIAction<MockServiceType> action = (AbstractSoapUIAction<MockServiceType>) new MockServiceOptionsAction();
if (modelItem instanceof RestMockService) {
action = (AbstractSoapUIAction<MockServiceType>) new RestMockServiceOptionsAction();
}
optionsButton = createActionButton(
SwingActionDelegate.createDelegate(action, modelItem, null, "/preferences.png"),
true);
showWsdlButton = createActionButton(new ShowWsdlAction(), false);
toolbar.addFixed(runButton);
toolbar.addFixed(stopButton);
if (modelItem instanceof WsdlMockService) {
toolbar.addFixed(showWsdlButton);
}
toolbar.addFixed(optionsButton);
toolbar.addGlue();
runInfoLabel = new JLabel("", SwingConstants.RIGHT);
runInfoLabel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 3));
toolbar.addFixed(UISupport.setFixedSize(runInfoLabel, 205, 20));
toolbar.addRelatedGap();
progressBarWrapper.addToToolBar(toolbar);
toolbar.addRelatedGap();
toolbar.addFixed(createActionButton(new ShowOnlineHelpAction(getModelItem().getHelpUrl()), true));
return toolbar;
}
public void startMockService() {
if ((mockRunner != null && mockRunner.isRunning()) || SoapUI.getMockEngine().hasRunningMock(getModelItem())) {
UISupport.showErrorMessage("MockService is already running");
} else {
if (mockRunner != null) {
mockRunner.release();
}
try {
getModelItem().start();
} catch (Exception e) {
UISupport.showErrorMessage(e);
return;
}
}
}
private final class InternalMockRunListener extends MockRunListenerAdapter {
@Override
public void onMockRunnerStart(MockRunner runner) {
mockRunner = (WsdlMockRunner) runner;
mockRunner.setMaxResults(logListModel.getMaxSize());
mockRunner.setLogEnabled(enableLogCheckBox.isSelected());
progressBarWrapper.setIndeterminate(true);
runButton.setEnabled(false);
stopButton.setEnabled(true);
optionsButton.setEnabled(false);
showWsdlButton.setEnabled(true);
runInfoLabel.setText("running on port " + getModelItem().getPort());
}
@Override
public void onMockRunnerStop(MockRunner mockRunner) {
progressBarWrapper.setIndeterminate(false);
runButton.setEnabled(true);
stopButton.setEnabled(false);
optionsButton.setEnabled(true);
showWsdlButton.setEnabled(false);
runInfoLabel.setText("");
}
public void onMockResult(MockResult result) {
if (logIsEnabled()) {
logListModel.addElement(result);
}
}
}
public class OperationListModel extends AbstractListModel implements ListModel, MockServiceListener,
PropertyChangeListener {
private List<MockOperation> operations = new ArrayList<MockOperation>();
public OperationListModel() {
for (int c = 0; c < getModelItem().getMockOperationCount(); c++) {
MockOperation mockOperation = getModelItem().getMockOperationAt(c);
mockOperation.addPropertyChangeListener(this);
operations.add(mockOperation);
}
getModelItem().addMockServiceListener(this);
}
public Object getElementAt(int arg0) {
return operations.get(arg0);
}
public int getSize() {
return operations.size();
}
public void mockOperationAdded(MockOperation operation) {
operations.add(operation);
operation.addPropertyChangeListener(this);
fireIntervalAdded(this, operations.size() - 1, operations.size() - 1);
}
public void mockOperationRemoved(MockOperation operation) {
int ix = operations.indexOf(operation);
operations.remove(ix);
operation.removePropertyChangeListener(this);
fireIntervalRemoved(this, ix, ix);
}
public void mockResponseAdded(MockResponse request) {
}
public void mockResponseRemoved(MockResponse request) {
}
public void propertyChange(PropertyChangeEvent arg0) {
if (arg0.getPropertyName().equals(WsdlMockOperation.NAME_PROPERTY)) {
int ix = operations.indexOf(arg0.getSource());
fireContentsChanged(this, ix, ix);
}
}
public void release() {
for (MockOperation operation : operations) {
operation.removePropertyChangeListener(this);
}
getModelItem().removeMockServiceListener(this);
}
}
private final static class OperationListCellRenderer extends JLabel implements ListCellRenderer {
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected,
boolean cellHasFocus) {
MockOperation testStep = (MockOperation) value;
setText(testStep.getName());
setIcon(testStep.getIcon());
if (isSelected) {
setBackground(list.getSelectionBackground());
setForeground(list.getSelectionForeground());
} else {
setBackground(list.getBackground());
setForeground(list.getForeground());
}
setEnabled(list.isEnabled());
setFont(list.getFont());
setOpaque(true);
setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3));
return this;
}
}
public class RunMockServiceAction extends AbstractAction {
public RunMockServiceAction() {
putValue(Action.SMALL_ICON, UISupport.createImageIcon("/submit_request.gif"));
putValue(Action.SHORT_DESCRIPTION, "Starts this MockService on the specified port and endpoint");
putValue(Action.ACCELERATOR_KEY, UISupport.getKeyStroke("alt ENTER"));
}
public void actionPerformed(ActionEvent arg0) {
if (getModelItem() instanceof WsdlMockService) {
Analytics.trackAction(SoapUIActions.START_SOAP_MOCK.getActionName());
} else if (getModelItem() instanceof RestMockService) {
Analytics.trackAction(SoapUIActions.START_REST_MOCK.getActionName());
}
startMockService();
}
}
public class ShowWsdlAction extends AbstractAction {
public ShowWsdlAction() {
putValue(Action.SMALL_ICON, UISupport.createImageIcon("/interface.png"));
putValue(Action.SHORT_DESCRIPTION, "Opens the root WSDL page in a browser");
}
public void actionPerformed(ActionEvent arg0) {
WsdlMockService mockService = (WsdlMockService) getModelItem();
Tools.openURL(mockService.getLocalEndpoint() + "?WSDL");
}
}
public class StopMockServiceAction extends AbstractAction {
public StopMockServiceAction() {
putValue(Action.SMALL_ICON, UISupport.createImageIcon("/cancel_request.png"));
putValue(Action.SHORT_DESCRIPTION, "Stops this MockService on the specified port and endpoint");
}
public void actionPerformed(ActionEvent arg0) {
if (mockRunner == null) {
UISupport.showErrorMessage("MockService is not running");
} else {
mockRunner.stop();
mockRunner.release();
mockRunner = null;
}
}
}
private static final class LogCellRenderer extends JLabel implements ListCellRenderer {
public LogCellRenderer() {
setOpaque(true);
setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3));
}
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected,
boolean cellHasFocus) {
setText(String.valueOf(value));
if (isSelected) {
setBackground(list.getSelectionBackground());
setForeground(list.getSelectionForeground());
} else {
setBackground(list.getBackground());
setForeground(list.getForeground());
}
setEnabled(list.isEnabled());
return this;
}
}
private long getDefaultMaxSize() {
return getModelItem().getSettings().getLong(LogListModel.class.getName() + "@maxSize", 100);
}
protected long getMaxLogSize() {
if (logListModel != null) {
return logListModel.getMaxSize();
} else {
return getDefaultMaxSize();
}
}
protected void setMaxLogSize(long size) {
logListModel.setMaxSize(size);
if (mockRunner != null) {
mockRunner.setMaxResults(logListModel.getMaxSize());
}
}
@SuppressWarnings("unchecked")
private class LogListModel extends AbstractListModel {
private List<MockResult> elements = Collections.synchronizedList(new TreeList());
private long maxSize;
public LogListModel() {
maxSize = getDefaultMaxSize();
}
public void addElement(MockResult result) {
elements.add(result);
fireIntervalAdded(this, elements.size() - 1, elements.size() - 1);
synchronized (this) {
while (elements.size() > maxSize) {
removeElementAt(0);
}
}
}
public Object getElementAt(int index) {
try {
if (elements.size() <= index) {
return null;
}
return elements.get(index);
} catch (Throwable t) {
return null;
}
}
public void removeElementAt(int index) {
elements.remove(index);
fireIntervalRemoved(this, index, index);
}
public void clear() {
synchronized (this) {
int sz = elements.size();
if (sz > 0) {
elements.clear();
fireIntervalRemoved(this, 0, sz - 1);
}
}
}
public int getSize() {
return elements.size();
}
public long getMaxSize() {
return maxSize;
}
public synchronized void setMaxSize(long l) {
this.maxSize = l;
while (elements.size() > 0 && elements.size() > maxSize) {
removeElementAt(0);
}
getModelItem().getSettings().setLong(LogListModel.class.getName() + "@maxSize", maxSize);
}
}
private class SetLogOptionsAction extends AbstractAction {
public SetLogOptionsAction() {
putValue(Action.SMALL_ICON, UISupport.createImageIcon("/preferences.png"));
putValue(Action.SHORT_DESCRIPTION, "Sets MockService Log Options");
}
public void actionPerformed(ActionEvent e) {
String s = UISupport.prompt("Enter maximum number of rows for MockService Log", "Log Options",
String.valueOf(logListModel.getMaxSize()));
if (s != null) {
try {
long newMaxSize = Long.parseLong(s);
if (newMaxSize > 0) {
setMaxLogSize(newMaxSize);
}
} catch (NumberFormatException e1) {
}
}
}
}
private class ClearLogAction extends AbstractAction {
public ClearLogAction() {
putValue(Action.SMALL_ICON, UISupport.createImageIcon("/clear.png"));
putValue(Action.SHORT_DESCRIPTION, "Clears the MockService Log");
}
public void actionPerformed(ActionEvent e) {
logListModel.clear();
if (mockRunner != null) {
mockRunner.clearResults();
}
}
}
/**
* Mouse Listener for triggering default action and showing popup for log
* list items
*
* @author Ole.Matzura
*/
private final class LogListMouseListener extends AbstractListMouseListener {
@Override
protected ActionList getActionsForRow(JList list, int row) {
MockResult result = (MockResult) logListModel.getElementAt(row);
return result == null ? null : result.getActions();
}
}
private class StartScriptGroovyEditorModel extends AbstractGroovyEditorModel {
public StartScriptGroovyEditorModel() {
super(new String[]{"log", "context", "mockRunner"}, WsdlMockServiceDesktopPanel.this.getModelItem(),
"Start");
}
public String getScript() {
return WsdlMockServiceDesktopPanel.this.getModelItem().getStartScript();
}
public void setScript(String text) {
WsdlMockServiceDesktopPanel.this.getModelItem().setStartScript(text);
}
@Override
public Action createRunAction() {
return new AbstractAction() {
public void actionPerformed(ActionEvent e) {
try {
WsdlMockRunContext context = mockRunner == null ? new WsdlMockRunContext(
WsdlMockServiceDesktopPanel.this.getModelItem(), null) : mockRunner.getMockContext();
WsdlMockServiceDesktopPanel.this.getModelItem().runStartScript(context, mockRunner);
} catch (Exception e1) {
UISupport.showErrorMessage(e1);
}
}
};
}
}
private class StopScriptGroovyEditorModel extends AbstractGroovyEditorModel {
public StopScriptGroovyEditorModel() {
super(new String[]{"log", "context", "mockRunner"}, WsdlMockServiceDesktopPanel.this.getModelItem(),
"Stop");
}
public String getScript() {
return WsdlMockServiceDesktopPanel.this.getModelItem().getStopScript();
}
public void setScript(String text) {
WsdlMockServiceDesktopPanel.this.getModelItem().setStopScript(text);
}
@Override
public Action createRunAction() {
return new AbstractAction() {
public void actionPerformed(ActionEvent e) {
try {
WsdlMockRunContext context = mockRunner == null ? new WsdlMockRunContext(
WsdlMockServiceDesktopPanel.this.getModelItem(), null) : mockRunner.getMockContext();
WsdlMockServiceDesktopPanel.this.getModelItem().runStopScript(context, mockRunner);
} catch (Exception e1) {
UISupport.showErrorMessage(e1);
}
}
};
}
}
private class OnRequestScriptGroovyEditorModel extends AbstractGroovyEditorModel {
public OnRequestScriptGroovyEditorModel() {
super(new String[]{"log", "context", "mockRequest", "mockRunner"}, WsdlMockServiceDesktopPanel.this
.getModelItem(), "OnRequest");
}
public String getScript() {
return WsdlMockServiceDesktopPanel.this.getModelItem().getOnRequestScript();
}
public void setScript(String text) {
WsdlMockServiceDesktopPanel.this.getModelItem().setOnRequestScript(text);
}
@Override
public Action createRunAction() {
return new AbstractAction() {
public void actionPerformed(ActionEvent e) {
try {
WsdlMockRunContext context = mockRunner == null ? new WsdlMockRunContext(
WsdlMockServiceDesktopPanel.this.getModelItem(), null) : mockRunner.getMockContext();
WsdlMockServiceDesktopPanel.this.getModelItem().runOnRequestScript(context, null);
} catch (Exception e1) {
UISupport.showErrorMessage(e1);
}
}
};
}
}
private class AfterRequestScriptGroovyEditorModel extends AbstractGroovyEditorModel {
public AfterRequestScriptGroovyEditorModel() {
super(new String[]{"log", "context", "mockResult", "mockRunner"}, WsdlMockServiceDesktopPanel.this
.getModelItem(), "AfterRequest");
}
public String getScript() {
return WsdlMockServiceDesktopPanel.this.getModelItem().getAfterRequestScript();
}
public void setScript(String text) {
WsdlMockServiceDesktopPanel.this.getModelItem().setAfterRequestScript(text);
}
@Override
public Action createRunAction() {
return new AbstractAction() {
public void actionPerformed(ActionEvent e) {
try {
WsdlMockRunContext context = mockRunner == null ? new WsdlMockRunContext(
WsdlMockServiceDesktopPanel.this.getModelItem(), null) : mockRunner.getMockContext();
WsdlMockServiceDesktopPanel.this.getModelItem().runAfterRequestScript(context, null);
} catch (Exception e1) {
UISupport.showErrorMessage(e1);
}
}
};
}
}
@Override
protected void renameModelItem() {
SoapUI.getActionRegistry().performAction("RenameMockServiceAction", getModelItem(), null);
}
@Override
protected void cloneModelItem() {
SoapUI.getActionRegistry().performAction("CloneMockServiceAction", getModelItem(), null);
}
}