package org.bpmscript.web;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.bpmscript.IProcessInstance;
import org.bpmscript.IProcessSource;
import org.bpmscript.jbi.tasklist.IRemoteTaskListManager;
import org.bpmscript.jbi.tasklist.ITask;
import org.bpmscript.remote.IRemoteProcessManager;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.ParameterizableViewController;
public class ProcessInstanceController extends ParameterizableViewController {
private IRemoteProcessManager remoteProcessManager;
private IRemoteTaskListManager remoteTaskListManager;
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception {
Map<String,Object> model = new HashMap<String,Object>();
String processInstanceId = request.getParameter("processInstanceId");
IProcessInstance processInstance = remoteProcessManager.getProcessInstance(processInstanceId);
List<ITask> tasks = null;
try {
tasks = remoteTaskListManager.getTasksForInstance(processInstanceId);
} catch(Exception exception) {
tasks = new ArrayList<ITask>();
model.put("tasksUnavailable", true);
}
List<IProcessInstance> children = remoteProcessManager.getChildProcessInstances(processInstanceId);
IProcessSource processSource = remoteProcessManager.getMainSource(processInstance.getProcess().getId());
Throwable throwable = processInstance.getThrowable();
String stackTrace = null;
if(throwable != null) {
StringWriter st = new StringWriter();
throwable.printStackTrace(new PrintWriter(st));
stackTrace = st.toString();
}
model.put("processInstance", processInstance);
model.put("tasks", tasks);
model.put("children", children);
model.put("processSource", processSource);
model.put("stackTrace", stackTrace);
return new ModelAndView(getViewName(), model);
}
public void setRemoteProcessManager(IRemoteProcessManager remoteProcessManager) {
this.remoteProcessManager = remoteProcessManager;
}
public void setRemoteTaskListManager(
IRemoteTaskListManager remoteTaskListManager) {
this.remoteTaskListManager = remoteTaskListManager;
}
}
|