2010-01-27 02:48:42 +01:00
|
|
|
package com.metaweb.gridlock.process;
|
|
|
|
|
2010-02-01 04:22:35 +01:00
|
|
|
import java.util.ArrayList;
|
2010-01-27 02:48:42 +01:00
|
|
|
import java.util.LinkedList;
|
|
|
|
import java.util.List;
|
2010-02-01 04:22:35 +01:00
|
|
|
import java.util.Properties;
|
|
|
|
|
|
|
|
import org.json.JSONException;
|
|
|
|
import org.json.JSONObject;
|
2010-01-27 02:48:42 +01:00
|
|
|
|
|
|
|
public class ProcessManager {
|
|
|
|
protected List<Process> _processes = new LinkedList<Process>();
|
|
|
|
|
|
|
|
public ProcessManager() {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2010-02-01 04:22:35 +01:00
|
|
|
public JSONObject getJSON(Properties options) throws JSONException {
|
|
|
|
JSONObject o = new JSONObject();
|
|
|
|
|
|
|
|
List<JSONObject> a = new ArrayList<JSONObject>(_processes.size());
|
|
|
|
for (Process p : _processes) {
|
|
|
|
a.add(p.getJSON(options));
|
|
|
|
}
|
|
|
|
o.put("processes", a);
|
|
|
|
|
|
|
|
return o;
|
|
|
|
}
|
|
|
|
|
2010-01-27 02:48:42 +01:00
|
|
|
public boolean queueProcess(Process process) {
|
|
|
|
if (process.isImmediate() && _processes.size() == 0) {
|
|
|
|
process.performImmediate();
|
|
|
|
return true;
|
|
|
|
} else {
|
|
|
|
_processes.add(process);
|
2010-02-01 09:31:50 +01:00
|
|
|
|
|
|
|
update();
|
|
|
|
|
2010-01-27 02:48:42 +01:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
2010-02-01 04:22:35 +01:00
|
|
|
|
|
|
|
public void onDoneProcess(Process p) {
|
2010-02-01 09:31:50 +01:00
|
|
|
_processes.remove(p);
|
2010-02-01 04:22:35 +01:00
|
|
|
update();
|
|
|
|
}
|
|
|
|
|
|
|
|
protected void update() {
|
|
|
|
while (_processes.size() > 0) {
|
|
|
|
Process p = _processes.get(0);
|
|
|
|
if (p.isImmediate()) {
|
|
|
|
p.performImmediate();
|
|
|
|
_processes.remove(0);
|
|
|
|
} else if (p.isDone()) {
|
|
|
|
_processes.remove(0);
|
|
|
|
} else {
|
|
|
|
if (!p.isRunning()) {
|
|
|
|
p.startPerforming(this);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2010-01-27 02:48:42 +01:00
|
|
|
}
|