protected final IStatus run( IProgressMonitor ipm )
{
StudioProgressMonitor monitor = new StudioProgressMonitor( externalProgressMonitor == null ? ipm
: externalProgressMonitor );
// ensure that connections are opened
Connection[] connections = getConnections();
for ( Connection connection : connections )
{
if ( connection != null && !connection.getJNDIConnectionWrapper().isConnected() )
{
monitor.setTaskName( Messages.bind( Messages.jobs__open_connections_task, new String[]
{ connection.getName() } ) );
monitor.worked( 1 );
connection.getJNDIConnectionWrapper().connect( monitor );
connection.getJNDIConnectionWrapper().bind( monitor );
for ( IConnectionListener listener : ConnectionCorePlugin.getDefault().getConnectionListeners() )
{
listener.connectionOpened( connection, monitor );
}
ConnectionEventRegistry.fireConnectionOpened( connection, this );
}
}
// execute job
if ( !monitor.errorsReported() )
{
try
{
executeAsyncJob( monitor );
}
catch ( Exception e )
{
monitor.reportError( e );
}
finally
{
monitor.done();
ipm.done();
}
}
// error handling
if ( monitor.isCanceled() )
{
// System.out.println("Job: CANCEL+CANCEL");
externalResult = Status.CANCEL_STATUS;
return Status.CANCEL_STATUS;
}
else if ( monitor.errorsReported() )
{
externalResult = monitor.getErrorStatus( getErrorMessage() );
if ( externalProgressMonitor == null )
{
// System.out.println("Job: ERROR+ERROR");
return externalResult;
}