1 package mircoders.global;
5 // important: objects passed as data must not be altered once put into a job
7 public class JobQueue {
11 public static final int STATUS_PENDING = 0;
12 public static final int STATUS_PROCESSING = 1;
13 public static final int STATUS_PROCESSED = 2;
17 dataToJob = new HashMap();
20 public void appendJob(Object aData) {
22 Job job = new Job(aData);
24 dataToJob.put(aData, job);
28 public Object acquirePendingJob() {
30 Iterator i = jobs.iterator();
33 Job job = (Job) i.next();
35 if (job.setProcessing()) {
44 public void flagOffJob(Object aData) {
46 Job job = (Job) dataToJob.get(aData);
54 public void cleanupJobs() {
56 Iterator i = jobs.iterator();
59 Job job = (Job) i.next();
61 if (job.hasBeenProcessed()) {
68 public List makeJobListSnapshot() {
70 return (List) jobs.clone();
74 public class Job implements Cloneable {
78 public Job(Object aData, int aStatus) {
83 public Job(Object aData) {
84 this(aData, STATUS_PENDING);
87 public Object getData() {
91 public int getStatus() {
97 protected boolean setProcessing() {
98 return setStatus(STATUS_PENDING, STATUS_PROCESSING);
101 protected void setProcessed() {
102 setStatus(STATUS_PROCESSING, STATUS_PROCESSED);
105 public boolean hasBeenProcessed() {
106 return getStatus() == STATUS_PROCESSED;
109 public boolean isProcessing() {
110 return getStatus() == STATUS_PROCESSING;
113 public boolean isPending() {
114 return getStatus() == STATUS_PENDING;
117 private boolean setStatus(int anOldStatus, int aNewStatus) {
119 if (status == anOldStatus) {
129 protected Object clone() {
131 return new Job(data, status);