Package org.dspace.app.xmlui.aspect.administrative

Source Code of org.dspace.app.xmlui.aspect.administrative.FlowCurationUtils

/**
* The contents of this file are subject to the license and copyright
* detailed in the LICENSE and NOTICE files at the root of the source
* tree and available online at
*
* http://www.dspace.org/license/
*/
package org.dspace.app.xmlui.aspect.administrative;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;

import org.apache.cocoon.environment.Request;

import org.dspace.core.ConfigurationManager;
import org.dspace.core.Context;
import org.dspace.curate.Curator;

import org.dspace.app.xmlui.wing.Message;
import org.dspace.app.xmlui.wing.WingException;
import org.dspace.app.xmlui.wing.element.Select;

/**
*
* @author wbossons
*/
public class FlowCurationUtils
{
   /** Language Strings */
    private static final Message T_curate_success_notice =
            new Message("default","xmlui.administrative.FlowCurationUtils.curate_success_notice");
    private static final Message T_curate_fail_notice =
            new Message("default","xmlui.administrative.FlowCurationUtils.curate_failed_notice");
    private static final Message T_queue_success_notice =
            new Message("default","xmlui.administrative.FlowCurationUtils.queue_success_notice");
    private static final Message T_queue_fail_notice =
            new Message("default","xmlui.administrative.FlowCurationUtils.queue_failed_notice");
   
   
    private static final Map<String, String> map = new HashMap<String, String>();
   
    protected static Curator getCurator(String taskName)
    {
        if (taskName != null && taskName.length() == 0)
        {
            taskName = null;
        }
        Curator curator = new Curator();
        curator.addTask(taskName);
        curator.setInvoked(Curator.Invoked.INTERACTIVE);
        return curator;
    }
   
    /**
     * Build a FlowResult which will provide a Notice to users, notifying them
     * of whether the Curation task succeeded or failed.
     * @param taskName name of Curation Task
     * @param curator active Curator
     * @param success whether it succeeded or failed
     * @return FlowResult
     */
    protected static FlowResult getRunFlowResult(String taskName, Curator curator, boolean success)
    {
        if (map.isEmpty())
        {
            String statusCodes = ConfigurationManager.getProperty("curate", "ui.statusmessages");
            for (String pair : statusCodes.split(","))
            {
                String[] parts = pair.split("=");
                map.put(parts[0].trim(), parts[1].trim());
            }
        }
        String status = map.get(String.valueOf(curator.getStatus(taskName)));
        if (status == null)
        {
            // invalid = use string for 'other
            status = map.get("other");
        }
        String result = curator.getResult(taskName);
        FlowResult flowResult = new FlowResult();
        //set whether task succeeded or failed
        flowResult.setOutcome(success);
        if(result==null)
            result = "Nothing to do for this DSpace object.";
        //add in status message
        if(success)
        {  
            //@TODO: Ideally, all of this status information would be contained within a translatable I18N Message.
            // Unfortunately, there currently is no support for displaying Parameterized Messages in Notices
            // (See FlowResult.getMessage(), sitemap.xmap and NoticeTransformer)
            flowResult.setHeader(new Message("default", "Task: " + getUITaskName(taskName)));
            flowResult.setMessage(T_curate_success_notice);
            flowResult.setCharacters("STATUS: " + status + ", RESULT: " + result);
        }
        else
        {
            flowResult.setHeader(new Message("default", "Task: " + getUITaskName(taskName)));
            flowResult.setMessage(T_curate_fail_notice);
            flowResult.setCharacters("STATUS: Failure, RESULT: " + result);
           
        }
        flowResult.setContinue(true);
        return flowResult;
    }
   
    /**
     * Build a FlowResult which will provide a Notice to users, notifying them
     * of whether the Curation task was queued successfully or not
     * @param taskName name of Curation Task
     * @param status whether it succeeded or failed
     * @param objId the DSpace object ID
     * @param queueName the name of the queue
     * @return FlowResult
     */
    protected static FlowResult getQueueFlowResult(String taskName, boolean status,
                                                   String objId, String queueName)
    {
        FlowResult flowResult = new FlowResult();
        flowResult.setOutcome(status);
       
        //add in status message
        if(status)
        {
            //@TODO: Ideally, all of this status information would be contained within a translatable I18N Message.
            // Unfortunately, there currently is no support for displaying Parameterized Messages in Notices
            // (See FlowResult.getMessage(), sitemap.xmap and NoticeTransformer)
            flowResult.setHeader(new Message("default", "Task: " + getUITaskName(taskName)));
            flowResult.setMessage(T_queue_success_notice);
            flowResult.setCharacters("RESULT: Object '" + objId + "' queued in '" + queueName + "' Queue")
        }
        else
        {
            flowResult.setHeader(new Message("default", "Task: " + getUITaskName(taskName)));
            flowResult.setMessage(T_queue_fail_notice);
            flowResult.setCharacters("RESULT: FAILED to queue Object '" + objId + "' in '" + queueName + "' Queue");
        }
        flowResult.setContinue(true);
        return flowResult;
    }
 
   
    /**
     * Retrieve UI "friendly" Task Name for display to user
     *
     * @param taskID the short name / identifier for the task
     * @return the User Friendly name for this task
     */
    protected static String getUITaskName(String taskID)
    {      
            String tasksString = ConfigurationManager.getProperty("curate", "ui.tasknames");
            String[] tasks = tasksString.split(",");
            for (String task : tasks)
            {
                //retrieve keyValuePair (format [taskID]=[UI Task Name])
                String[] keyValuePair = task.split("=");
               
                if(keyValuePair!=null && keyValuePair.length==2)
                {   
                    if(taskID.equals(keyValuePair[0].trim()))
                        return keyValuePair[1];
                }
            }
            //if we are here, the UI friendly task name was not found
            // So, we'll just return the TaskID, as it's better than nothing
            return taskID;
    }
   
   
    /**
     * Utility method to process curation tasks
     * submitted via the DSpace Admin UI Curate Form.
     *
     * @param context current DSpace Context
     * @param request current Cocoon request
     * @return FlowResult representing the result of request
     * @see org.dspace.app.xmlui.aspect.administrative.CurateForm
     */
    public static FlowResult processCurateObject(Context context, Request request)
    {
        //get input values from Form (see org.dspace.app.xmlui.aspect.administrative.CurateForm)
        String task = request.getParameter("curate_task");
        String objHandle = request.getParameter("identifier");
        Curator curator = FlowCurationUtils.getCurator(task);

        FlowResult result = null;
        try
        {
            // Curate this object & return result
            curator.curate(context, objHandle);
            result = FlowCurationUtils.getRunFlowResult(task, curator, true);
        }
        catch (Exception e)
        {
            curator.setResult(task, e.getMessage());
            result = FlowCurationUtils.getRunFlowResult(task, curator, false);
        }
        //pass curation task name & identifier back in FlowResult (so it can be pre-populated on UI)
        result.setParameter("curate_task", task);
        result.setParameter("identifier", objHandle);
        return result;
    }
   
    /**
     * Utility method to queue curation tasks
     * submitted via the DSpace Admin UI Curate Form.
     *
     * @param context current DSpace Context
     * @param request current Cocoon request
     * @return FlowResult representing the result of request
     * @see org.dspace.app.xmlui.aspect.administrative.CurateForm
     */
    public static FlowResult processQueueObject(Context context, Request request)
    {
        //get input values from Form (see org.dspace.app.xmlui.aspect.administrative.CurateForm)
        String task = request.getParameter("curate_task");
        String objHandle = request.getParameter("identifier");
       
        Curator curator = FlowCurationUtils.getCurator(task);
       
        String taskQueueName = ConfigurationManager.getProperty("curate", "ui.queuename");
        boolean status = false;
      
        if (objHandle != null)
        {
            try
            {
                //queue the task for later processing of this object
                curator.queue(context, objHandle, taskQueueName);
                status = true;
            }
            catch (IOException ioe)
            {
                // no-op (any error should be logged by the Curator itself)
            }
        }
        return FlowCurationUtils.getQueueFlowResult(task, status, objHandle, taskQueueName);
    }
   
    /** Utility methods to support curation groups/tasks form fields
     *
     *
     */
    public static final String CURATE_TASK_NAMES  = "ui.tasknames";
    public static final String CURATE_GROUP_NAMES = "ui.taskgroups";
    public static final String CURATE_GROUP_PREFIX = "ui.taskgroup";
    public static final String UNGROUPED_TASKS    = "ungrouped";
   
    public static Map<String, String> allTasks = new LinkedHashMap<String, String>();
    public static Map<String, String[]> groupedTasks = new LinkedHashMap<String, String[]>();
    public static Map<String, String> groups = new LinkedHashMap<String, String>();
   
    public static void setupCurationTasks()
    {
      try
      {
        setAllTasks();
        setGroupedTasks();
        setGroups();
      }
      catch (Exception we)
      {
        // noop
      }
    }
   
    public static void setAllTasks() throws WingException, UnsupportedEncodingException
    {
      String csvList = ConfigurationManager.getProperty("curate", CURATE_TASK_NAMES);
      String[] properties = csvList.split(",");
      for (String property : properties)
      {
             //System.out.println("set all tasks and property = " + property + "\n");
        String[] keyValuePair = property.split("=");
            allTasks.put(URLDecoder.decode(keyValuePair[0].trim(), "UTF-8"),
                    URLDecoder.decode(keyValuePair[1].trim(), "UTF-8"));
      }
    }
   
    public static void setGroups() throws WingException, UnsupportedEncodingException
    {
      String csvList = ConfigurationManager.getProperty("curate", CURATE_GROUP_NAMES);
        if (csvList != null)
        {
          String[] properties = csvList.split(",");
          for (String property : properties)
            {
            String[] keyValuePair = property.split("=");
            groups.put(URLDecoder.decode(keyValuePair[0].trim(), "UTF-8"),
                          URLDecoder.decode(keyValuePair[1].trim(), "UTF-8"));
          }
        }
    }
   
    public static void setGroupedTasks() throws WingException, UnsupportedEncodingException
    {
      if (groups.isEmpty())
      {
        setGroups();
      }
      if (!groups.isEmpty())
      {
        Iterator<String> iterator = groups.keySet().iterator();
        while (iterator.hasNext())
        {
                String key = iterator.next();
                String csvList = ConfigurationManager.getProperty("curate", CURATE_GROUP_PREFIX + "." + key);
                String[] properties  = csvList.split(",");
                groupedTasks.put(URLDecoder.decode(key, "UTF-8"), properties);
            }
        }
    }

    public static Select getGroupSelectOptions(Select select) throws WingException
    {
      Iterator<String> iterator = groups.keySet().iterator();
        while (iterator.hasNext())
        {
          String key = iterator.next();
            select.addOption(key, groups.get(key));
        }
        return select;
    }
   
    public static Select getTaskSelectOptions(Select select, String curateGroup) throws WingException
    {
      String key = new String();
      String[] values = null;
        Iterator<String> iterator = null;
        if (groupedTasks.isEmpty())
        {
          iterator = allTasks.keySet().iterator();
            while (iterator.hasNext())
            {
              key = iterator.next();
                select.addOption(key, allTasks.get(key));
            }
            return select;
        }
        else
        {
          iterator = groupedTasks.keySet().iterator();
        }
        while (iterator.hasNext())
        {
          key = iterator.next();
            values = groupedTasks.get(key);
            if (key.equals(curateGroup))
            {
              for (String value : values)
                {
                    Iterator<String> innerIterator = allTasks.keySet().iterator();
                    while (innerIterator.hasNext())
                    {
                      String optionValue = innerIterator.next().trim();
                      String optionText  = new String("");
                      // out.print("Value: " + value + ": OptionValue: " + optionValue + ". Does value.trim().equals(optionValue)? " + value.equals(opti$
                      if (optionValue.equals(value.trim()))
                      { 
                        optionText  = (String) allTasks.get(optionValue);
                            select.addOption(optionValue, optionText);
                        }
                    }
                }
        }
        }
        return select;
    }
   
}
TOP

Related Classes of org.dspace.app.xmlui.aspect.administrative.FlowCurationUtils

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.