package org.jactr.eclipse.ui.reconciler; /* * default logging */ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.IJobChangeEvent; import org.eclipse.core.runtime.jobs.IJobChangeListener; import org.eclipse.core.runtime.jobs.Job; import org.jactr.eclipse.core.comp.ICompilationUnitRunnable; public class CompilationUnitJob extends Job { /** * Logger definition */ static private final transient Log LOGGER = LogFactory .getLog(CompilationUnitJob.class); private ICompilationUnitRunnable _runnable; private volatile boolean _scheduled = false; private volatile boolean _running = false; public CompilationUnitJob(String name, ICompilationUnitRunnable runnable) { super(name); _runnable = runnable; setSystem(true); /* * ICompilationUnit compUnit = _runnable.getCompilationUnit(); // use the * project resource to allow correct chaining of rules when local if * (compUnit instanceof IProjectCompilationUnit) * setRule(((IProjectCompilationUnit) compUnit).getResource()); else * setRule(new * CompilationUnitSchedulingRule(_runnable.getCompilationUnit())); */ addJobChangeListener(new IJobChangeListener() { public void aboutToRun(IJobChangeEvent event) { _running = true; } public void awake(IJobChangeEvent event) { // TODO Auto-generated method stub } public void done(IJobChangeEvent event) { _running = false; _scheduled = false; } public void running(IJobChangeEvent event) { // TODO Auto-generated method stub } public void scheduled(IJobChangeEvent event) { _scheduled = true; } public void sleeping(IJobChangeEvent event) { // TODO Auto-generated method stub } }); } public boolean isScheduled() { return _scheduled; } public boolean isRunning() { return _running; } @Override protected IStatus run(IProgressMonitor monitor) { IStatus status = _runnable.run(monitor); if (status.getSeverity() == IStatus.CANCEL) return Status.CANCEL_STATUS; return Status.OK_STATUS; } }