use of org.eclipse.core.runtime.jobs.Job in project cubrid-manager by CUBRID.
the class ColumnProposalAdvisor method loadProposal.
/**
* load proposal for database
*
* @param databaseInfo
*/
private void loadProposal(final DatabaseInfo databaseInfo) {
final String key = makeKey(databaseInfo);
Job job = new Job("Load database schema information job") {
protected IStatus run(IProgressMonitor monitor) {
List<String> tableNames = new ArrayList<String>();
Map<String, List<ColumnProposalDetailInfo>> columns = new HashMap<String, List<ColumnProposalDetailInfo>>();
GetAllSchemaTask task = null;
try {
task = new GetAllSchemaTask(databaseInfo, monitor);
task.setNeedCollationInfo(false);
task.execute();
/*Check is canceled*/
if (task.isCancel()) {
return Status.CANCEL_STATUS;
}
if (task.isSuccess()) {
Map<String, SchemaInfo> schemas = task.getSchemas();
Map<String, SchemaComment> descriptions = task.getComments();
List<String> fetchedTableNames = new ArrayList<String>();
for (SchemaInfo schemaInfo : schemas.values()) {
if (schemaInfo.isSystemClass()) {
continue;
}
String tableName = schemaInfo.getClassname();
if (ConstantsUtil.isExtensionalSystemTable(tableName)) {
continue;
}
fetchedTableNames.add(tableName);
}
Collections.sort(fetchedTableNames);
for (String tableName : fetchedTableNames) {
if (!tableNames.contains(tableName)) {
tableNames.add(tableName);
}
if (columns.containsKey(tableName)) {
continue;
}
SchemaInfo schemaInfo = schemas.get(tableName);
if (schemaInfo == null) {
continue;
}
if (descriptions != null) {
SchemaComment schemaComment = SchemaCommentHandler.find(descriptions, tableName, null);
if (schemaComment != null) {
String description = schemaComment.getDescription();
schemaInfo.setDescription(description);
}
}
List<ColumnProposalDetailInfo> colInfoList = new ArrayList<ColumnProposalDetailInfo>();
columns.put(tableName, colInfoList);
List<DBAttribute> dbClassAttrList = schemaInfo.getClassAttributes();
for (DBAttribute attr : dbClassAttrList) {
ColumnProposalDetailInfo colInfo = new ColumnProposalDetailInfo(schemaInfo, attr);
colInfoList.add(colInfo);
}
List<DBAttribute> attrList = schemaInfo.getAttributes();
for (DBAttribute attr : attrList) {
ColumnProposalDetailInfo colInfo = new ColumnProposalDetailInfo(schemaInfo, attr);
colInfoList.add(colInfo);
}
columns.put(schemaInfo.getClassname(), colInfoList);
}
/*Cache the data*/
ColumnProposal proposal = new ColumnProposal();
proposal.setTableNames(tableNames);
proposal.setColumns(columns);
synchronized (ColumnProposalAdvisor.class) {
cachedMap.put(key, proposal);
}
}
} catch (Exception e) {
LOGGER.error(e.getMessage(), e);
} finally {
synchronized (ColumnProposalAdvisor.class) {
collectingKeys.remove(key);
}
task.finish();
}
return Status.OK_STATUS;
}
};
/*Record collecting key*/
synchronized (ColumnProposalAdvisor.class) {
collectingKeys.add(key);
job.schedule();
}
}
use of org.eclipse.core.runtime.jobs.Job in project dbeaver by serge-rider.
the class RuntimeUtils method runTask.
public static boolean runTask(final DBRRunnableWithProgress task, String taskName, final long waitTime) {
final MonitoringTask monitoringTask = new MonitoringTask(task);
Job monitorJob = new AbstractJob(taskName) {
@Override
protected IStatus run(DBRProgressMonitor monitor) {
try {
monitoringTask.run(monitor);
} catch (InvocationTargetException e) {
log.error(getName() + " - error", e.getTargetException());
return Status.OK_STATUS;
} catch (InterruptedException e) {
// do nothing
}
return Status.OK_STATUS;
}
};
monitorJob.schedule();
// Wait for job to finish
long startTime = System.currentTimeMillis();
if (waitTime > 0) {
while (!monitoringTask.finished && System.currentTimeMillis() - startTime < waitTime) {
try {
Thread.sleep(50);
} catch (InterruptedException e) {
break;
}
}
}
return monitoringTask.finished;
}
use of org.eclipse.core.runtime.jobs.Job in project dbeaver by serge-rider.
the class DBNModel method fireNodeEvent.
void fireNodeEvent(final DBNEvent event) {
if (platform.isShuttingDown()) {
return;
}
final INavigatorListener[] listenersCopy;
synchronized (this.listeners) {
if (listeners.isEmpty()) {
return;
}
listenersCopy = this.listenersCopy;
}
if (listenersCopy.length == 0) {
return;
}
// Notify listeners in detached job
new Job("Notify node '" + event.getNode().getName() + "' changes") {
{
setSystem(true);
}
@Override
protected IStatus run(IProgressMonitor monitor) {
for (INavigatorListener listener : listenersCopy) {
listener.nodeChanged(event);
}
return Status.OK_STATUS;
}
}.schedule();
}
use of org.eclipse.core.runtime.jobs.Job in project cubrid-manager by CUBRID.
the class StartServiceAction method doRun.
/**
* Perform do run
*
* @param servers
*/
public void doRun(CubridServer[] servers) {
CubridNavigatorView view = CubridNavigatorView.getNavigatorView(CubridHostNavigatorView.ID);
final TreeViewer viewer = view.getViewer();
if (servers.length > 0) {
CubridServer server = servers[0];
if (isSupported(server)) {
final JobFamily jobFamily = new JobFamily();
final String serverName = server.getName();
String dbName = JobFamily.ALL_DB;
jobFamily.setServerName(serverName);
jobFamily.setDbName(dbName);
Job[] jobs = Job.getJobManager().find(jobFamily);
if (jobs.length > 0) {
CommonUITool.openWarningBox(Messages.bind(Messages.msgStartServiceWithJob, serverName));
return;
}
TaskExecutor taskExcutor = new StartServiceExecutor(server, getShell(), viewer);
ServerInfo serverInfo = server.getServerInfo();
GetCubridConfParameterTask task = new GetCubridConfParameterTask(serverInfo);
taskExcutor.addTask(task);
new ExecTaskWithProgress(taskExcutor).exec();
}
}
// for(CubridServer server : servers) {
// final JobFamily jobFamily = new JobFamily();
// final String serverName = server.getName();
// String dbName = JobFamily.ALL_DB;
// jobFamily.setServerName(serverName);
// jobFamily.setDbName(dbName);
// Job[] jobs = Job.getJobManager().find(jobFamily);
// if (jobs.length > 0) {
// CommonUITool.openWarningBox(Messages.bind(
// Messages.msgStartServiceWithJob, serverName));
// return;
// }
//
// TaskExecutor taskExcutor = new StartServiceExecutor(server, getShell(),
// viewer);
// ServerInfo serverInfo = server.getServerInfo();
// GetCubridConfParameterTask task = new GetCubridConfParameterTask(
// serverInfo);
// taskExcutor.addTask(task);
// new ExecTaskWithProgress(taskExcutor).exec();
// }
}
use of org.eclipse.core.runtime.jobs.Job in project cubrid-manager by CUBRID.
the class QuitAction method run.
/**
* Quit CUBRID Manager
*/
public void run() {
boolean hasJobRunning = false;
final JobFamily jobFamily = new JobFamily();
jobFamily.setServerName(JobFamily.ALL_SERVER);
Job[] jobs = Job.getJobManager().find(jobFamily);
if (jobs.length > 0) {
hasJobRunning = true;
}
boolean isExit = false;
if (hasJobRunning) {
isExit = CommonUITool.openConfirmBox(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), Messages.msgExistConfirmWithJob);
if (isExit) {
Display.getDefault().asyncExec(new Runnable() {
public void run() {
try {
Job.getJobManager().cancel(jobFamily);
} catch (Exception ignored) {
LOGGER.error(ignored.getMessage(), ignored);
}
}
});
}
} else {
isExit = CommonUITool.openConfirmBox(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), Messages.msgExistConfirm);
}
if (isExit) {
PlatformUI.getWorkbench().getActiveWorkbenchWindow().close();
}
}
Aggregations