use of org.eclipse.core.runtime.jobs.Job in project cubrid-manager by CUBRID.
the class ColumnProposalAdvisor method loadProposal.
/**
* Load proposal for table
*
* @param databaseInfo
* @param tableName
* @param proposal
*/
private void loadProposal(final DatabaseInfo databaseInfo, final String tableName, final ColumnProposal proposal) {
Job job = new Job("Load schema information job") {
protected IStatus run(IProgressMonitor monitor) {
LOGGER.info("Load table info in ColumnProposalHandler");
GetSchemaTask getSchemaTask = null;
try {
getSchemaTask = new GetSchemaTask(databaseInfo, tableName, monitor);
getSchemaTask.setNeedCollationInfo(false);
getSchemaTask.execute();
if (getSchemaTask.isSuccess()) {
SchemaInfo schemaInfo = getSchemaTask.getSchema();
if (schemaInfo != null) {
List<ColumnProposalDetailInfo> columnList = new ArrayList<ColumnProposalDetailInfo>();
for (DBAttribute attr : schemaInfo.getAttributes()) {
columnList.add(new ColumnProposalDetailInfo(schemaInfo, attr));
}
proposal.addSchemaInfo(tableName, schemaInfo, columnList);
}
}
} catch (Exception e) {
LOGGER.error(e.getMessage(), e);
} finally {
getSchemaTask.finish();
}
return Status.OK_STATUS;
}
};
job.schedule();
}
use of org.eclipse.core.runtime.jobs.Job in project cubrid-manager by CUBRID.
the class StartDatabaseAction method doRun.
public void doRun(ISchemaNode[] schemaArray) {
if (schemaArray == null || schemaArray.length == 0) {
return;
}
List<ISchemaNode> startList = new ArrayList<ISchemaNode>();
/*Judge start job is running*/
for (ISchemaNode node : schemaArray) {
if (!isSupported(node)) {
setEnabled(false);
return;
}
CubridDatabase database = node.getDatabase();
final JobFamily jobFamily = new JobFamily();
String serverName = database.getServer().getName();
String dbName = database.getName();
jobFamily.setServerName(serverName);
jobFamily.setDbName(dbName);
Job[] jobs = Job.getJobManager().find(jobFamily);
if (jobs.length > 0) {
CommonUITool.openWarningBox(Messages.bind(Messages.msgStartDbWithJob, dbName));
continue;
}
startList.add(database);
}
CubridNavigatorView navigationView = CubridNavigatorView.findNavigationView();
if (navigationView != null && startList.size() > 0) {
final TreeViewer treeViewer = navigationView.getViewer();
TaskExecutor taskExcutor = new TaskExecutor() {
public boolean exec(final IProgressMonitor monitor) {
Display display = Display.getDefault();
if (monitor.isCanceled()) {
return false;
}
for (int i = 0; i < taskList.size(); i++) {
ITask task = taskList.get(i);
final CubridDatabase database = (CubridDatabase) task.getData("dbName");
if (!isSupported(database)) {
continue;
}
monitor.subTask(Messages.bind(Messages.startDbTaskName, database.getName()));
task.execute();
if (openErrorBox(shell, task.getErrorMsg(), monitor) || monitor.isCanceled()) {
return false;
}
openWarningBox(shell, task.getWarningMsg(), monitor);
if (monitor.isCanceled()) {
return false;
}
database.removeAllChild();
if (database.getLoader() != null) {
database.getLoader().setLoaded(false);
}
database.setRunningType(DbRunningType.CS);
display.syncExec(new Runnable() {
public void run() {
treeViewer.refresh(database, true);
}
});
if (monitor.isCanceled()) {
return false;
}
}
return true;
}
};
for (ISchemaNode schemaNode : startList) {
CubridDatabase database = schemaNode.getDatabase();
if (!isSupported(database)) {
setEnabled(false);
return;
}
ServerInfo serverInfo = database.getServer().getServerInfo();
CommonUpdateTask task = new CommonUpdateTask(CommonTaskName.START_DB_TASK_NAME, serverInfo, CommonSendMsg.getCommonDatabaseSendMsg());
task.setDbName(database.getLabel());
task.putData("dbName", database);
taskExcutor.addTask(task);
}
new ExecTaskWithProgress(taskExcutor).busyCursorWhile();
ActionManager.getInstance().fireSelectionChanged(getSelection());
}
}
use of org.eclipse.core.runtime.jobs.Job in project gfm_viewer by satyagraha.
the class SchedulerDefault method scheduleTransformation.
@Override
public void scheduleTransformation(final File mdFile, final File htFile, final Callback<File> onDone) {
final String jobName = "Transforming: " + mdFile.getName();
Job job = new Job(jobName) {
@Override
protected IStatus run(IProgressMonitor monitor) {
IStatus status = Status.OK_STATUS;
try {
transformer.transformMarkdownFile(mdFile, htFile);
} catch (IOException e) {
status = new Status(Status.ERROR, pluginId, jobName, e);
}
return status;
}
};
job.setUser(false);
job.setSystem(false);
job.setPriority(Job.SHORT);
job.addJobChangeListener(new JobChangeAdapter() {
@Override
public void done(IJobChangeEvent event) {
// refreshFile(htFile);
if (event.getResult().isOK()) {
if (onDone != null) {
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
onDone.onComplete(htFile);
}
});
}
} else {
// normal reporting has occurred
if (onDone != null) {
final Throwable exception = event.getResult().getException();
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
onDone.onError(htFile, exception);
}
});
}
}
}
});
job.schedule();
}
use of org.eclipse.core.runtime.jobs.Job in project dbeaver by serge-rider.
the class NavigatorHandlerRefresh method refreshNavigator.
public static void refreshNavigator(final Collection<? extends DBNNode> refreshObjects) {
Job refreshJob = new AbstractJob("Refresh navigator object(s)") {
public Throwable error;
@Override
protected IStatus run(DBRProgressMonitor monitor) {
addJobChangeListener(new JobChangeAdapter() {
@Override
public void done(IJobChangeEvent event) {
if (error != null) {
UIUtils.showErrorDialog(null, "Refresh", "Error refreshing node", error);
}
}
});
Set<DBNNode> refreshedSet = new HashSet<>();
for (DBNNode node : refreshObjects) {
if (node.isDisposed() || node.isLocked()) {
// Skip locked nodes
continue;
}
// Check this node was already refreshed
if (!refreshedSet.isEmpty()) {
boolean skip = false;
for (DBNNode refreshed : refreshedSet) {
if (node == refreshed || node.isChildOf(refreshed)) {
skip = true;
break;
}
}
if (skip) {
continue;
}
}
setName("Refresh '" + node.getNodeName() + "'...");
try {
DBNNode refreshed = node.refreshNode(monitor, DBNEvent.FORCE_REFRESH);
if (refreshed != null) {
refreshedSet.add(refreshed);
}
} catch (Throwable ex) {
error = ex;
}
}
return Status.OK_STATUS;
}
};
refreshJob.setUser(true);
refreshJob.schedule();
}
use of org.eclipse.core.runtime.jobs.Job in project dbeaver by serge-rider.
the class DataSourceHandler method connectToDataSource.
/**
* Connects datasource
* @param monitor progress monitor or null. If nul then new job will be started
* @param dataSourceContainer container to connect
* @param onFinish finish handler
*/
public static void connectToDataSource(@Nullable DBRProgressMonitor monitor, @NotNull DBPDataSourceContainer dataSourceContainer, @Nullable final DBRProgressListener onFinish) {
if (dataSourceContainer instanceof DataSourceDescriptor && !dataSourceContainer.isConnected()) {
final DataSourceDescriptor dataSourceDescriptor = (DataSourceDescriptor) dataSourceContainer;
if (!ArrayUtils.isEmpty(Job.getJobManager().find(dataSourceDescriptor))) {
// Already connecting/disconnecting - just return
return;
}
final ConnectJob connectJob = new ConnectJob(dataSourceDescriptor);
final JobChangeAdapter jobChangeAdapter = new JobChangeAdapter() {
@Override
public void done(IJobChangeEvent event) {
IStatus result = connectJob.getConnectStatus();
if (result.isOK()) {
if (!dataSourceDescriptor.isSavePassword()) {
// Rest password back to null
// TODO: to be correct we need to reset password info.
// but we need a password to open isolated contexts (e.g. for data export)
// Currently it is not possible to ask for password from isolation context opening
// procedure. We need to do something here...
//dataSourceDescriptor.getConnectionConfiguration().setUserName(oldName);
//dataSourceDescriptor.getConnectionConfiguration().setUserPassword(oldPassword);
}
}
if (onFinish != null) {
onFinish.onTaskFinished(result);
} else if (!result.isOK()) {
DBUserInterface.getInstance().showError(connectJob.getName(), //NLS.bind(CoreMessages.runtime_jobs_connect_status_error, dataSourceContainer.getName()),
null, result);
}
}
};
if (monitor != null) {
connectJob.runSync(monitor);
jobChangeAdapter.done(new IJobChangeEvent() {
@Override
public long getDelay() {
return 0;
}
@Override
public Job getJob() {
return connectJob;
}
@Override
public IStatus getResult() {
return connectJob.getConnectStatus();
}
public IStatus getJobGroupResult() {
return null;
}
});
} else {
connectJob.addJobChangeListener(jobChangeAdapter);
// Schedule in UI because connect may be initiated during application startup
// and UI is still not initiated. In this case no progress dialog will appear
// to be sure run in UI async
DBeaverUI.asyncExec(new Runnable() {
@Override
public void run() {
connectJob.schedule();
}
});
}
}
}
Aggregations