/*
* soapUI, copyright (C) 2004-2011 eviware.com
*
* soapUI is free software; you can redistribute it and/or modify it under the
* terms of version 2.1 of the GNU Lesser General Public License as published by
* the Free Software Foundation.
*
* soapUI is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
* even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details at gnu.org.
*/
package com.eviware.soapui.impl.wsdl.panels.testcase;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.dnd.DnDConstants;
import java.awt.dnd.DragSource;
import java.awt.event.ActionEvent;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import javax.swing.JToggleButton;
import javax.swing.JToolBar;
import javax.swing.ListModel;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.text.Document;
import com.eviware.soapui.SoapUI;
import com.eviware.soapui.config.TestStepConfig;
import com.eviware.soapui.impl.support.actions.ShowOnlineHelpAction;
import com.eviware.soapui.impl.wsdl.WsdlProject;
import com.eviware.soapui.impl.wsdl.actions.testcase.AddNewLoadTestAction;
import com.eviware.soapui.impl.wsdl.actions.testcase.AddNewSecurityTestAction;
import com.eviware.soapui.impl.wsdl.actions.testcase.RunTestCaseWithLoadUIAction;
import com.eviware.soapui.impl.wsdl.actions.testcase.TestCaseOptionsAction;
import com.eviware.soapui.impl.wsdl.panels.support.MockTestRunContext;
import com.eviware.soapui.impl.wsdl.panels.support.MockTestRunner;
import com.eviware.soapui.impl.wsdl.panels.support.ProgressBarTestCaseAdapter;
import com.eviware.soapui.impl.wsdl.panels.testcase.actions.SetCredentialsAction;
import com.eviware.soapui.impl.wsdl.panels.testcase.actions.SetEndpointAction;
import com.eviware.soapui.impl.wsdl.panels.teststeps.support.AbstractGroovyEditorModel;
import com.eviware.soapui.impl.wsdl.panels.teststeps.support.PropertyHolderTable;
import com.eviware.soapui.impl.wsdl.support.AbstractTestCaseRunner;
import com.eviware.soapui.impl.wsdl.support.HelpUrls;
import com.eviware.soapui.impl.wsdl.testcase.WsdlTestCase;
import com.eviware.soapui.impl.wsdl.testcase.WsdlTestRunContext;
import com.eviware.soapui.impl.wsdl.teststeps.WsdlTestStep;
import com.eviware.soapui.impl.wsdl.teststeps.registry.WsdlTestStepFactory;
import com.eviware.soapui.impl.wsdl.teststeps.registry.WsdlTestStepRegistry;
import com.eviware.soapui.integration.loadui.IntegrationUtils;
import com.eviware.soapui.model.ModelItem;
import com.eviware.soapui.model.support.TestRunListenerAdapter;
import com.eviware.soapui.model.testsuite.LoadTestRunner;
import com.eviware.soapui.model.testsuite.TestCaseRunContext;
import com.eviware.soapui.model.testsuite.TestCaseRunner;
import com.eviware.soapui.model.testsuite.TestRunnable;
import com.eviware.soapui.model.testsuite.TestStep;
import com.eviware.soapui.model.testsuite.TestStepResult;
import com.eviware.soapui.monitor.support.TestMonitorListenerAdapter;
import com.eviware.soapui.security.SecurityTestRunner;
import com.eviware.soapui.settings.UISettings;
import com.eviware.soapui.support.DocumentListenerAdapter;
import com.eviware.soapui.support.StringUtils;
import com.eviware.soapui.support.UISupport;
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.dnd.DropType;
import com.eviware.soapui.support.dnd.JListDragAndDropable;
import com.eviware.soapui.support.dnd.SoapUIDragAndDropHandler;
import com.eviware.soapui.support.swing.ComponentBag;
import com.eviware.soapui.support.types.StringToObjectMap;
import com.eviware.soapui.ui.support.ModelItemDesktopPanel;
/**
* WsdlTestCase desktop panel
*
* @author Ole.Matzura
*/
public class WsdlTestCaseDesktopPanel extends ModelItemDesktopPanel<WsdlTestCase>
{
private JProgressBar progressBar;
private JTestStepList testStepList;
private InternalTestRunListener testRunListener = new InternalTestRunListener();
private JButton runButton;
private JButton cancelButton;
private TestCaseRunner runner;
private JButton setEndpointButton;
private JButton setCredentialsButton;
private JButton optionsButton;
private ComponentBag stateDependantComponents = new ComponentBag();
private JTestCaseTestRunLog testCaseLog;
private JToggleButton loopButton;
private ProgressBarTestCaseAdapter progressBarAdapter;
private InternalTestMonitorListener testMonitorListener;
public boolean canceled;
private JTextArea descriptionArea;
private PropertyHolderTable propertiesTable;
private GroovyEditorComponent tearDownGroovyEditor;
private GroovyEditorComponent setupGroovyEditor;
private JInspectorPanel testStepListInspectorPanel;
private JButton createLoadTestButton;
private JButton createSecurityTestButton;
private JInspectorPanel inspectorPanel;
public TestCaseRunner lastRunner;
private JButton runWithLoadUIButton;
// private JButton convertToLoadUIButton;
private JButton synchronizeWithLoadUIButton;
private WsdlTestCase testCase;
public WsdlTestCaseDesktopPanel( WsdlTestCase testCase )
{
super( testCase );
buildUI();
setPreferredSize( new Dimension( 400, 550 ) );
setRunningState();
testCase.addTestRunListener( testRunListener );
progressBarAdapter = new ProgressBarTestCaseAdapter( progressBar, testCase );
testMonitorListener = new InternalTestMonitorListener();
SoapUI.getTestMonitor().addTestMonitorListener( testMonitorListener );
DragSource dragSource = DragSource.getDefaultDragSource();
SoapUIDragAndDropHandler dragAndDropHandler = new SoapUIDragAndDropHandler( new ModelItemListDragAndDropable(
getTestStepList().getTestStepList(), testCase ), DropType.BEFORE_AND_AFTER );
dragSource.createDefaultDragGestureRecognizer( getTestStepList().getTestStepList(),
DnDConstants.ACTION_COPY_OR_MOVE, dragAndDropHandler );
// needed for synchronizing with loadUI
this.testCase = testCase;
}
/**
* There are three states: - enabled, no testcases or testschedules running -
* enabled, standalone testcase running - disabled, testschedule is running
*/
private void setRunningState()
{
stateDependantComponents.setEnabled( !SoapUI.getTestMonitor().hasRunningLoadTest( getModelItem() )
&& !SoapUI.getTestMonitor().hasRunningSecurityTest( getModelItem() ) );
}
private void buildUI()
{
JPanel panel = new JPanel( new BorderLayout() );
panel.add( buildToolbar(), BorderLayout.PAGE_START );
panel.add( buildRunnerBar(), BorderLayout.CENTER );
add( panel, BorderLayout.NORTH );
inspectorPanel = JInspectorPanelFactory.build( buildContent() );
inspectorPanel.addInspector( new JComponentInspector<JComponent>( buildTestLog(), "TestCase Log",
"TestCase Execution Log", true ) );
inspectorPanel.setDefaultDividerLocation( 0.7F );
inspectorPanel.setCurrentInspector( "TestCase Log" );
if( StringUtils.hasContent( getModelItem().getDescription() )
&& getModelItem().getSettings().getBoolean( UISettings.SHOW_DESCRIPTIONS ) )
{
testStepListInspectorPanel.setCurrentInspector( "Description" );
}
add( inspectorPanel.getComponent(), BorderLayout.CENTER );
}
protected JTestStepList getTestStepList()
{
return testStepList;
}
private JComponent buildTestLog()
{
testCaseLog = new JTestCaseTestRunLog( getModelItem() );
stateDependantComponents.add( testCaseLog );
return testCaseLog;
}
private JComponent buildContent()
{
JTabbedPane tabs = new JTabbedPane( JTabbedPane.TOP );
testStepListInspectorPanel = JInspectorPanelFactory.build( buildTestStepList(), SwingConstants.BOTTOM );
tabs.addTab( "TestSteps", testStepListInspectorPanel.getComponent() );
addTabs( tabs, testStepListInspectorPanel );
tabs.setTabLayoutPolicy( JTabbedPane.SCROLL_TAB_LAYOUT );
return UISupport.createTabPanel( tabs, true );
}
protected JComponent buildTestStepList()
{
JPanel p = new JPanel( new BorderLayout() );
JXToolBar toolbar = UISupport.createToolbar();
WsdlTestStepFactory[] factories = WsdlTestStepRegistry.getInstance().getFactories();
for( WsdlTestStepFactory factory : factories )
{
toolbar.addFixed( UISupport.createToolbarButton( new AddWsdlTestStepAction( factory ) ) );
}
p.add( toolbar, BorderLayout.NORTH );
testStepList = new JTestStepList( getModelItem() );
stateDependantComponents.add( testStepList );
p.add( new JScrollPane( testStepList ), BorderLayout.CENTER );
return p;
}
protected void addTabs( JTabbedPane tabs, JInspectorPanel inspectorPanel )
{
inspectorPanel.addInspector( new JFocusableComponentInspector<JPanel>( buildDescriptionPanel(), descriptionArea,
"Description", "TestCase Description", true ) );
inspectorPanel.addInspector( new JComponentInspector<JComponent>( buildPropertiesPanel(), "Properties",
"TestCase level properties", true ) );
inspectorPanel.addInspector( new GroovyEditorInspector( buildSetupScriptPanel(), "Setup Script",
"Script to run before running a TestCase" ) );
inspectorPanel.addInspector( new GroovyEditorInspector( buildTearDownScriptPanel(), "TearDown Script",
"Script to run after a TestCase Run" ) );
}
protected GroovyEditorComponent buildTearDownScriptPanel()
{
tearDownGroovyEditor = new GroovyEditorComponent( new TearDownScriptGroovyEditorModel(), null );
return tearDownGroovyEditor;
}
protected GroovyEditorComponent buildSetupScriptPanel()
{
setupGroovyEditor = new GroovyEditorComponent( new SetupScriptGroovyEditorModel(), null );
return setupGroovyEditor;
}
protected JComponent buildPropertiesPanel()
{
JPanel panel = new JPanel( new BorderLayout() );
propertiesTable = buildPropertiesTable();
panel.add( propertiesTable, BorderLayout.CENTER );
return panel;
}
protected PropertyHolderTable buildPropertiesTable()
{
return new PropertyHolderTable( getModelItem() );
}
private JPanel buildDescriptionPanel()
{
JPanel panel = new JPanel( new BorderLayout() );
descriptionArea = new JUndoableTextArea( getModelItem().getDescription() );
descriptionArea.getDocument().addDocumentListener( new DocumentListenerAdapter()
{
public void update( Document document )
{
getModelItem().setDescription( descriptionArea.getText() );
}
} );
panel.setBorder( BorderFactory.createEmptyBorder( 2, 2, 2, 2 ) );
panel.add( new JScrollPane( descriptionArea ), BorderLayout.CENTER );
UISupport.addTitledBorder( panel, "TestCase Description" );
return panel;
}
private Component buildToolbar()
{
JToolBar toolbar = UISupport.createToolbar();
runButton = UISupport.createToolbarButton( new RunTestCaseAction() );
optionsButton = UISupport.createToolbarButton( SwingActionDelegate.createDelegate(
TestCaseOptionsAction.SOAPUI_ACTION_ID, getModelItem(), null, "/options.gif" ) );
optionsButton.setText( null );
cancelButton = UISupport.createToolbarButton( new CancelRunTestCaseAction(), false );
loopButton = new JToggleButton( UISupport.createImageIcon( "/loop.gif" ) );
loopButton.setPreferredSize( UISupport.getPreferredButtonSize() );
loopButton.setToolTipText( "Loop TestCase continuously" );
setCredentialsButton = UISupport.createToolbarButton( new SetCredentialsAction( getModelItem() ) );
setEndpointButton = UISupport.createToolbarButton( new SetEndpointAction( getModelItem() ) );
stateDependantComponents.add( runButton );
stateDependantComponents.add( optionsButton );
stateDependantComponents.add( cancelButton );
stateDependantComponents.add( setCredentialsButton );
stateDependantComponents.add( setEndpointButton );
createLoadTestButton = UISupport.createToolbarButton( SwingActionDelegate.createDelegate(
AddNewLoadTestAction.SOAPUI_ACTION_ID, getModelItem(), null, "/loadTest.gif" ) );
createSecurityTestButton = UISupport.createToolbarButton( SwingActionDelegate.createDelegate(
AddNewSecurityTestAction.SOAPUI_ACTION_ID, getModelItem(), null, "/security_test.gif" ) );
runWithLoadUIButton = UISupport.createToolbarButton( SwingActionDelegate.createDelegate(
RunTestCaseWithLoadUIAction.SOAPUI_ACTION_ID, getModelItem(), null, "/runTestCaseWithLoadUI.png" ) );
// convertToLoadUIButton = UISupport.createToolbarButton(
// SwingActionDelegate.createDelegate(
// ConvertTestCaseLoadTestsToLoadUIAction.SOAPUI_ACTION_ID,
// getModelItem(), null,
// "/convertLoadTestToLoadUI.png" ) );
synchronizeWithLoadUIButton = UISupport.createToolbarButton( new SynchronizeWithLoadUIAction() );
addToolbarActions( toolbar );
toolbar.add( Box.createHorizontalGlue() );
toolbar.add( UISupport.createToolbarButton( new ShowOnlineHelpAction( HelpUrls.TESTCASEEDITOR_HELP_URL ) ) );
return toolbar;
}
protected void addToolbarActions( JToolBar toolbar )
{
toolbar.add( runButton );
toolbar.add( cancelButton );
toolbar.add( loopButton );
toolbar.addSeparator();
toolbar.add( setCredentialsButton );
toolbar.add( setEndpointButton );
toolbar.addSeparator();
toolbar.add( createLoadTestButton );
toolbar.add( createSecurityTestButton );
toolbar.addSeparator();
toolbar.add( optionsButton );
toolbar.addSeparator();
toolbar.add( runWithLoadUIButton );
// toolbar.add( convertToLoadUIButton );
toolbar.add( synchronizeWithLoadUIButton );
}
private Component buildRunnerBar()
{
progressBar = new JProgressBar( 0, getModelItem().getTestStepCount() );
return UISupport.createProgressBarPanel( progressBar, 10, false );
}
private final class InternalTestMonitorListener extends TestMonitorListenerAdapter
{
public void loadTestStarted( LoadTestRunner runner )
{
setRunningState();
}
public void loadTestFinished( LoadTestRunner runner )
{
setRunningState();
}
public void securityTestStarted( SecurityTestRunner runner )
{
setRunningState();
}
public void securityTestFinished( SecurityTestRunner runner )
{
setRunningState();
}
}
public class InternalTestRunListener extends TestRunListenerAdapter
{
private SimpleDateFormat dateFormat;
public InternalTestRunListener()
{
dateFormat = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss.SSS" );
}
public void beforeRun( TestCaseRunner testRunner, TestCaseRunContext runContext )
{
if( SoapUI.getTestMonitor().hasRunningLoadTest( getModelItem() )
|| SoapUI.getTestMonitor().hasRunningSecurityTest( getModelItem() ) )
return;
runButton.setEnabled( false );
cancelButton.setEnabled( true );
testStepList.setEnabled( false );
testStepList.setSelectedIndex( -1 );
testCaseLog.clear();
testCaseLog.addText( "Test started at " + dateFormat.format( new Date() ) );
WsdlTestCaseDesktopPanel.this.beforeRun();
if( runner == null )
runner = testRunner;
}
public synchronized void beforeStep( TestCaseRunner testRunner, TestCaseRunContext runContext,
final TestStep testStep )
{
if( SoapUI.getTestMonitor().hasRunningLoadTest( getModelItem() )
|| SoapUI.getTestMonitor().hasRunningSecurityTest( getModelItem() ) )
return;
if( testStep != null )
{
if( SwingUtilities.isEventDispatchThread() )
{
testStepList.setSelectedValue( testStep, true );
}
else
{
SwingUtilities.invokeLater( new Runnable()
{
public void run()
{
testStepList.setSelectedValue( testStep, true );
}
} );
}
}
}
public void afterRun( TestCaseRunner testRunner, TestCaseRunContext runContext )
{
if( SoapUI.getTestMonitor().hasRunningLoadTest( getModelItem() )
|| SoapUI.getTestMonitor().hasRunningSecurityTest( getModelItem() ) )
return;
AbstractTestCaseRunner<TestRunnable, WsdlTestRunContext> wsdlRunner = ( AbstractTestCaseRunner<TestRunnable, WsdlTestRunContext> )testRunner;
if( testRunner.getStatus() == TestCaseRunner.Status.CANCELED )
testCaseLog.addText( "TestCase canceled [" + testRunner.getReason() + "], time taken = "
+ wsdlRunner.getTimeTaken() );
else if( testRunner.getStatus() == TestCaseRunner.Status.FAILED )
{
String msg = wsdlRunner.getReason();
if( wsdlRunner.getError() != null )
{
if( msg != null )
msg += ":";
msg += wsdlRunner.getError();
}
testCaseLog.addText( "TestCase failed [" + msg + "], time taken = " + wsdlRunner.getTimeTaken() );
}
else
testCaseLog.addText( "TestCase finished with status [" + testRunner.getStatus() + "], time taken = "
+ wsdlRunner.getTimeTaken() );
lastRunner = runner;
runner = null;
JToggleButton loopButton = ( JToggleButton )runContext.getProperty( "loopButton" );
if( loopButton != null && loopButton.isSelected() && testRunner.getStatus() == TestCaseRunner.Status.FINISHED )
{
SwingUtilities.invokeLater( new Runnable()
{
public void run()
{
runTestCase();
}
} );
}
else
{
WsdlTestCaseDesktopPanel.this.afterRun();
}
}
public void afterStep( TestCaseRunner testRunner, TestCaseRunContext runContext, TestStepResult stepResult )
{
if( SoapUI.getTestMonitor().hasRunningLoadTest( getModelItem() )
|| SoapUI.getTestMonitor().hasRunningSecurityTest( getModelItem() ) )
return;
testCaseLog.addTestStepResult( stepResult );
}
}
protected void runTestCase()
{
if( canceled )
{
// make sure state is correct
runButton.setEnabled( true );
cancelButton.setEnabled( false );
testStepList.setEnabled( true );
return;
}
StringToObjectMap properties = new StringToObjectMap();
properties.put( "loopButton", loopButton );
properties.put( TestCaseRunContext.INTERACTIVE, Boolean.TRUE );
lastRunner = null;
runner = getModelItem().run( properties, true );
}
public class RunTestCaseAction extends AbstractAction
{
public RunTestCaseAction()
{
putValue( Action.SMALL_ICON, UISupport.createImageIcon( "/run_testcase.gif" ) );
putValue( Action.SHORT_DESCRIPTION, "Runs this testcase" );
}
public void actionPerformed( ActionEvent e )
{
canceled = false;
runTestCase();
}
}
public class CancelRunTestCaseAction extends AbstractAction
{
public CancelRunTestCaseAction()
{
putValue( Action.SMALL_ICON, UISupport.createImageIcon( "/stop_testcase.gif" ) );
putValue( Action.SHORT_DESCRIPTION, "Stops running this testcase" );
}
public void actionPerformed( ActionEvent e )
{
if( runner != null )
runner.cancel( "canceled in UI" );
canceled = true;
}
}
public boolean onClose( boolean canCancel )
{
if( canCancel )
{
if( runner != null && runner.getStatus() == TestCaseRunner.Status.RUNNING )
{
Boolean retval = UISupport.confirmOrCancel( "Cancel running TestCase?", "Cancel Run" );
if( retval == null )
return false;
if( retval.booleanValue() )
{
if( runner != null )
runner.cancel( null );
}
}
}
else
{
if( runner != null && runner.getStatus() == TestCaseRunner.Status.RUNNING )
{
if( runner != null )
runner.cancel( null );
}
}
SoapUI.getTestMonitor().removeTestMonitorListener( testMonitorListener );
getModelItem().removeTestRunListener( testRunListener );
testStepList.release();
progressBarAdapter.release();
propertiesTable.release();
inspectorPanel.release();
setupGroovyEditor.getEditor().release();
tearDownGroovyEditor.getEditor().release();
testCaseLog.release();
lastRunner = null;
return release();
}
public boolean dependsOn( ModelItem modelItem )
{
return modelItem == getModelItem() || modelItem == getModelItem().getTestSuite()
|| modelItem == getModelItem().getTestSuite().getProject();
}
protected void beforeRun()
{
}
protected void afterRun()
{
runButton.setEnabled( true );
cancelButton.setEnabled( false );
testStepList.setEnabled( true );
}
private class SetupScriptGroovyEditorModel extends AbstractGroovyEditorModel
{
@Override
public Action createRunAction()
{
return new AbstractAction()
{
public void actionPerformed( ActionEvent e )
{
try
{
MockTestRunner mockTestRunner = new MockTestRunner( WsdlTestCaseDesktopPanel.this.getModelItem(),
SoapUI.ensureGroovyLog() );
WsdlTestCaseDesktopPanel.this.getModelItem().runSetupScript(
new MockTestRunContext( mockTestRunner, null ), mockTestRunner );
}
catch( Exception e1 )
{
UISupport.showErrorMessage( e1 );
}
}
};
}
public SetupScriptGroovyEditorModel()
{
super( new String[] { "log", "testCase", "context", "testRunner" }, WsdlTestCaseDesktopPanel.this
.getModelItem(), "Setup" );
}
public String getScript()
{
return WsdlTestCaseDesktopPanel.this.getModelItem().getSetupScript();
}
public void setScript( String text )
{
WsdlTestCaseDesktopPanel.this.getModelItem().setSetupScript( text );
}
}
private class TearDownScriptGroovyEditorModel extends AbstractGroovyEditorModel
{
@Override
public Action createRunAction()
{
return new AbstractAction()
{
public void actionPerformed( ActionEvent e )
{
try
{
MockTestRunner mockTestRunner = new MockTestRunner( WsdlTestCaseDesktopPanel.this.getModelItem(),
SoapUI.ensureGroovyLog() );
WsdlTestCaseDesktopPanel.this.getModelItem().runTearDownScript(
new MockTestRunContext( mockTestRunner, null ), mockTestRunner );
}
catch( Exception e1 )
{
UISupport.showErrorMessage( e1 );
}
}
};
}
public TearDownScriptGroovyEditorModel()
{
super( new String[] { "log", "testCase", "context", "testRunner" }, WsdlTestCaseDesktopPanel.this
.getModelItem(), "TearDown" );
}
public String getScript()
{
return WsdlTestCaseDesktopPanel.this.getModelItem().getTearDownScript();
}
public void setScript( String text )
{
WsdlTestCaseDesktopPanel.this.getModelItem().setTearDownScript( text );
}
}
private class AddWsdlTestStepAction extends AbstractAction implements Runnable
{
private final WsdlTestStepFactory factory;
public AddWsdlTestStepAction( WsdlTestStepFactory factory )
{
this.factory = factory;
putValue( SMALL_ICON, UISupport.createImageIcon( factory.getTestStepIconPath() ) );
putValue( SHORT_DESCRIPTION, "Create a new " + factory.getTestStepName() + " TestStep" );
}
public void actionPerformed( ActionEvent e )
{
SwingActionDelegate.invoke( this );
}
public void run()
{
if( !factory.canAddTestStepToTestCase( testCase ) )
return;
int ix = testStepList.getTestStepList().getSelectedIndex();
String name = UISupport.prompt( "Specify name for new step", ix == -1 ? "Add Step" : "Insert Step", factory
.getTestStepName() );
if( name != null )
{
TestStepConfig newTestStepConfig = factory.createNewTestStep( getModelItem(), name );
if( newTestStepConfig != null )
{
WsdlTestStep testStep = getModelItem().insertTestStep( newTestStepConfig, ix );
if( testStep != null )
UISupport.selectAndShow( testStep );
}
}
}
}
public static class ModelItemListDragAndDropable extends JListDragAndDropable<JList>
{
public ModelItemListDragAndDropable( JList list, WsdlTestCase testCase )
{
super( list, testCase );
}
@Override
public ModelItem getModelItemAtRow( int row )
{
return ( ModelItem )getList().getModel().getElementAt( row );
}
@Override
public int getModelItemRow( ModelItem modelItem )
{
ListModel model = getList().getModel();
for( int c = 0; c < model.getSize(); c++ )
{
if( model.getElementAt( c ) == modelItem )
return c;
}
return -1;
}
public Component getRenderer( ModelItem modelItem )
{
return getList().getCellRenderer().getListCellRendererComponent( getList(), modelItem,
getModelItemRow( modelItem ), true, true );
}
@Override
public void setDragInfo( String dropInfo )
{
super.setDragInfo( dropInfo == null || dropInfo.length() == 0 ? null : dropInfo );
}
}
public TestCaseRunner getTestCaseRunner()
{
return runner == null ? lastRunner : runner;
}
@SuppressWarnings( "serial" )
public class SynchronizeWithLoadUIAction extends AbstractAction
{
public SynchronizeWithLoadUIAction()
{
putValue( Action.SMALL_ICON, UISupport.createImageIcon( "/synchronizeWithLoadUI.png" ) );
putValue( Action.SHORT_DESCRIPTION, "Synchronizes this testcase with loadUI" );
}
public void actionPerformed( ActionEvent e )
{
WsdlProject project = testCase.getTestSuite().getProject();
// try
// {
// if( StringUtils.hasContent( project.getPath() ) || project.getWorkspace() == null )
// project.save();
// else
// project.save( project.getWorkspace().getProjectRoot() );
// }
// catch( IOException e1 )
// {
// UISupport.showErrorMessage( "Failed to save project; " + e1 );
// }
// IntegrationUtils.removeLoadUILoadedProject( new File(
// project.getPath() ) );
if( IntegrationUtils.forceSaveProject( project ) )
IntegrationUtils.bringLoadUIToFront();
}
}
}