package org.erlide.core.builder;
import java.util.concurrent.ConcurrentLinkedQueue;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.erlide.engine.MarkerUtils;
import com.google.common.collect.Queues;
public class BuildQueueProcessor extends Job {
private static BuildQueueProcessor instance;
private final ConcurrentLinkedQueue<BuildWorkerInfo> queue = Queues
.newConcurrentLinkedQueue();
public BuildQueueProcessor(final String name) {
super(name);
setSystem(true);
setPriority(Job.DECORATE);
}
public void addWork(final BuildWorkerInfo work) {
queue.add(work);
schedule(100);
}
@Override
protected IStatus run(final IProgressMonitor monitor) {
BuildWorkerInfo work = null;
work = queue.poll();
while (work != null) {
MarkerUtils.removeTaskMarkers(work.resource);
MarkerUtils.createTaskMarkers(work.resource);
work = queue.poll();
}
return Status.OK_STATUS;
}
public static synchronized BuildQueueProcessor getInstance() {
if (instance == null) {
instance = new BuildQueueProcessor("tasks");
}
return instance;
}
}