List of usage examples for org.apache.commons.collections.buffer CircularFifoBuffer get
public Object get()
From source file:de.suse.swamp.modules.actions.WorkflowActions.java
/** * Is called when a task ok comes in./*from w w w. j a va2s . c o m*/ */ public void doTaskok(RunData data, Context context) throws Exception { Logger.LOG("doTaskok() from webapp."); SWAMPUser user = ((SWAMPTurbineUser) data.getUser()).getSWAMPUser(); WorkflowAPI wfapi = new WorkflowAPI(); TaskAPI taskapi = new TaskAPI(); ResultList history = new ResultList(); if (data.getParameters().containsKey("taskid")) { // get the task we're working on int taskId = data.getParameters().getInt("taskid"); WorkflowTask task = taskapi.doGetTask(taskId, user.getUserName()); String taskType = null; ArrayList validationErrors = new ArrayList(); // Check for availability of that Task: if (task != null && task.getState() == WorkflowTask.ACTIVE) { // get the action type of the task taskType = task.getActionType(); // fill in the result for different if (taskType.equals("manualtask")) { ManualtaskResult result = (ManualtaskResult) task.getResult(); result.setDone(true); } else if (taskType.equals("decision")) { int answer = -1; // get the answer given if (data.getParameters().containsKey("answer")) { answer = data.getParameters().getInt("answer"); Logger.DEBUG("Answer #" + answer); // if no answer selected, log error } else { Logger.ERROR("in doTaskok: no answer on question given."); } // put selection into result DecisionResult result = (DecisionResult) task.getResult(); result.setSelection(answer); } else if (taskType.equals("dataedit")) { DataeditResult result = (DataeditResult) task.getResult(); context.put("result", result); DataeditActionTemplate action = (DataeditActionTemplate) task.getActionTemplate(); HashMap actionFields = action.getAllFields(task.getWorkflowId()); Workflow wf = wfapi.getWorkflow(task.getWorkflowId(), user.getUserName()); // put all values in the result object for (Iterator iter = actionFields.keySet().iterator(); iter.hasNext();) { ArrayList setField = (ArrayList) actionFields.get(iter.next()); for (Iterator it = setField.iterator(); it.hasNext();) { Field f = (Field) it.next(); String fieldpath = f.getPath(); String field = "field_" + fieldpath; if (data.getParameters().containsKey(field)) { // binary data need extra storage if (f.getDatatype().equals("fileref")) { FileItem value = data.getParameters().getFileItem(field); Logger.DEBUG("Value for key (file)" + field + ": " + value); // need to store the file now Databit dbit = wf.getDatabit(fieldpath); if (DatapackActions.storeFile(dbit, true, value, user.getUserName())) { String fileName = value.getName(); // fix for browsers setting complete path as name: if (fileName.indexOf("\\") >= 0) fileName = fileName.substring(fileName.lastIndexOf("\\") + 1); if (fileName.indexOf("/") >= 0) fileName = fileName.substring(fileName.lastIndexOf("/") + 1); result.setValue(fieldpath, fileName); } } else if (f.getDatatype().equalsIgnoreCase("multienum")) { SWAMPHashSet values = new SWAMPHashSet(data.getParameters().getStrings(field)); result.setValue(fieldpath, values.toString(", ")); } else if (f.getDatatype().equalsIgnoreCase("patchdocumd")) { String value = data.getParameters().get(field); Logger.DEBUG("Value for key " + field + ": " + value); result.setValue(fieldpath, value); } else { String value = StringEscapeUtils.unescapeHtml(data.getParameters().get(field)); Logger.DEBUG("Value for key " + field + ": " + value); result.setValue(fieldpath, value); } } else if (data.getParameters().containsKey("boolean_" + fieldpath)) { result.setValue(fieldpath, "false"); } else if (!f.isMandatory()) { // don't complain about missing, non-mandatory fields } else { Logger.ERROR("Mandatory field " + fieldpath + " not set."); } } } } // validate task result validationErrors = task.validate(); // if everything is ok, try to finish the task if (validationErrors.size() == 0) { try { taskapi.finishTask(task, user.getUserName(), history); } catch (Exception e) { e.printStackTrace(); validationErrors.add(e.getMessage()); } } if (validationErrors.size() == 0) { Logger.LOG("Webapp: Done with working on task with id " + task.getId()); WorkflowTask wftask = task; Workflow wf = wfapi.getWorkflow(wftask.getWorkflowId(), user.getUserName()); context.put("statusheader", "Success"); context.put("statusmessage", "Task \"" + task.getReplacedDescription() + "\" done in workflow " + wf.getName() + "."); context.put("statusclass", "success"); context.put("icon", "ok"); context.put("history", history); context.put("workflow", wf); // add general Workflow Help SWAMPScreen.addHelplink(wf.getTemplate(), context, user.getUserName()); ArrayList helps = new ArrayList(); if (context.get("helps") != null) { helps = (ArrayList) context.get("helps"); } // add helplinks if there are new Tasks: if (wf.getActiveTasks().size() > 0) { List activeTasks = wf.getActiveTasks(); for (Iterator it = activeTasks.iterator(); it.hasNext();) { WorkflowTask helptask = (WorkflowTask) it.next(); String helpConext = helptask.getActionTemplate().getHelpContext(); if (helpConext != null && !helpConext.equals("")) { ContextHelp help = new DocumentationAPI().getContextHelp(helpConext, user.getUserName()); if (help != null && !helps.contains(help)) { helps.add(help); } } } context.put("helps", helps); } if (user.getPerm("taskpage", "results").equals("workflow")) { Logger.DEBUG("Doing redirect to workflow page after task for " + user.getUserName()); setTemplate(data, "DisplayWorkflow.vm"); } else if (user.getPerm("taskpage", "results").equals("previous")) { CircularFifoBuffer pageBuffer = (CircularFifoBuffer) data.getUser().getTemp("pageBuffer", new CircularFifoBuffer(2)); SWAMPHashMap params = (SWAMPHashMap) pageBuffer.get(); if (params != null && params.containsKey("template")) { Logger.DEBUG("Redirect to previous page (" + params.get("template") + ") for " + user.getUserName()); data.getParameters().clear(); for (Iterator it = params.keySet().iterator(); it.hasNext();) { String key = (String) it.next(); data.getParameters().add(key, (String) params.get(key)); } setTemplate(data, (String) params.get("template")); } else { Logger.WARN("Desired redirect not possible, no pageBuffer"); } } // if there were errors during validation, log the error } else { // go back to the Task-Page context.put("taskerror", "true"); setTemplate(data, "DisplayTask.vm"); Iterator errIter = validationErrors.iterator(); String message = "", error; while (errIter.hasNext()) { error = (String) errIter.next(); message = message + "<br />" + error; Logger.ERROR(error); } message = message + "<p />Please correct the above mistake!"; context.put("statusclass", "error"); context.put("statusheader", "Error validating task"); context.put("statusmessage", message); context.put("icon", "error"); // fix page buffer CircularFifoBuffer pageBuffer = (CircularFifoBuffer) data.getUser().getTemp("pageBuffer", new CircularFifoBuffer(2)); pageBuffer.add(pageBuffer.get()); } // end validation } else { // illegal task requested, redirect setTemplate(data, "DisplayTask.vm"); } } else { Logger.ERROR("in doTaskok: no task id."); } //end taskid }