crude producer queue listing added
[mir.git] / source / mircoders / global / JobQueue.java
index 041094d..f60116f 100755 (executable)
@@ -5,7 +5,7 @@ import java.util.*;
 // important: objects passed as data must not be altered once put into a job
 
 public class JobQueue {
-  private List jobs;
+  private Vector jobs;
   private Map dataToJob;
 
   public static final int STATUS_PENDING = 0;
@@ -65,14 +65,23 @@ public class JobQueue {
     }
   }
 
-  public class Job {
+  public List makeJobListSnapshot() {
+    synchronized (jobs) {
+      return (List) jobs.clone();
+    }
+  }
+
+  public class Job implements Cloneable {
     private Object data;
     private int status;
-    private int identifier;
 
-    public Job(Object aData) {
+    public Job(Object aData, int aStatus) {
       data = aData;
-      status = STATUS_PENDING;
+      status = aStatus;
+    }
+
+    public Job(Object aData) {
+      this(aData, STATUS_PENDING);
     }
 
     public Object getData() {
@@ -85,11 +94,11 @@ public class JobQueue {
       }
     }
 
-    public boolean setProcessing() {
+    protected boolean setProcessing() {
       return setStatus(STATUS_PENDING, STATUS_PROCESSING);
     }
 
-    public void setProcessed() {
+    protected void setProcessed() {
       setStatus(STATUS_PROCESSING, STATUS_PROCESSED);
     }
 
@@ -97,6 +106,10 @@ public class JobQueue {
       return getStatus() == STATUS_PROCESSED;
     }
 
+    public boolean isProcessing() {
+      return getStatus() == STATUS_PROCESSING;
+    }
+
     public boolean isPending() {
       return getStatus() == STATUS_PENDING;
     }
@@ -113,6 +126,11 @@ public class JobQueue {
       }
     }
 
+    protected Object clone() {
+      synchronized(this) {
+        return new Job(data, status);
+      }
+    }
   }
 }