Example usage for org.apache.commons.collections.buffer CircularFifoBuffer get

List of usage examples for org.apache.commons.collections.buffer CircularFifoBuffer get

Introduction

In this page you can find the example usage for org.apache.commons.collections.buffer CircularFifoBuffer get.

Prototype

public Object get() 

Source Link

Document

Returns the least recently inserted element in this buffer.

Usage

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
}