private void internalExecute(final Resource resource, final Shell shell) { if (resource != null) { final JdbcSource source = JdbcUtil.findJdbcSource(resource); if (source != null) { final List emfTables = RelationalUtil.findTables(resource); final Map tblStats = createTableInfos(emfTables); if (tblStats != null && tblStats.size() > 0) { CostAnalysisDialog dialog = new CostAnalysisDialog( shell, InternalModelerJdbcUiPluginConstants.Util.getString( "CostAnalysisAction.taskDescription"), //$NON-NLS-1$ InternalModelerJdbcUiPluginConstants.Util.getString( "CostAnalysisAction.passwordPrompt", new Object[] {source.getUrl(), source.getUsername()}), null, null); //$NON-NLS-1$ dialog.open(); final String password = dialog.getValue(); if (password != null) { final Job job = new Job( InternalModelerJdbcUiPluginConstants.Util.getString( "CostAnalysisAction.jobDescription")) { //$NON-NLS-1$ @Override protected IStatus run(IProgressMonitor monitor) { try { monitor.beginTask( InternalModelerJdbcUiPluginConstants.Util.getString( "CostAnalysisAction.taskDescription"), calculateNumberOfWorkIncrements(tblStats.values())); // $NON-NLS-1$ CostAnalyzer costAnalyzer = CostAnalyzerFactory.getCostAnalyzerFactory() .getCostAnalyzer(source, password); // log output to standard out // costAnalyzer.setOutputStream(System.out); costAnalyzer.collectStatistics(tblStats, monitor); if (!monitor.isCanceled()) { populateEmfColumnStatistics(emfTables, tblStats); } monitor.done(); if (monitor.isCanceled()) { return Status.CANCEL_STATUS; } return new Status( IStatus.OK, ModelerJdbcUiConstants.PLUGIN_ID, IStatus.OK, InternalModelerJdbcUiPluginConstants.Util.getString( "CostAnalysisAction.statusFinished", emfTables.size()), null); //$NON-NLS-1$ } catch (Exception e) { InternalModelerJdbcUiPluginConstants.Util.log(e); return new Status( IStatus.ERROR, ModelerJdbcUiConstants.PLUGIN_ID, IStatus.ERROR, InternalModelerJdbcUiPluginConstants.Util.getString( "CostAnalysisAction.errorMessage"), e); //$NON-NLS-1$ } finally { } } }; job.setSystem(false); job.setUser(true); job.setProperty(IProgressConstants.KEEP_PROPERTY, Boolean.TRUE); // start as soon as possible job.schedule(); } } else { MessageDialog.openInformation( shell, InternalModelerJdbcUiPluginConstants.Util.getString( "CostAnalysisAction.taskDescription"), InternalModelerJdbcUiPluginConstants.Util.getString( "CostAnalysisAction.noValidTablesMessage")); //$NON-NLS-1$ //$NON-NLS-2$ } } } }