You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@manifoldcf.apache.org by kw...@apache.org on 2013/02/24 17:36:45 UTC

svn commit: r1449502 - /manifoldcf/branches/CONNECTORS-63/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/system/ManifoldCF.java

Author: kwright
Date: Sun Feb 24 16:36:44 2013
New Revision: 1449502

URL: http://svn.apache.org/r1449502
Log:
Complete queue reports except for StatusFilterCriteria

Modified:
    manifoldcf/branches/CONNECTORS-63/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/system/ManifoldCF.java

Modified: manifoldcf/branches/CONNECTORS-63/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/system/ManifoldCF.java
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-63/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/system/ManifoldCF.java?rev=1449502&r1=1449501&r2=1449502&view=diff
==============================================================================
--- manifoldcf/branches/CONNECTORS-63/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/system/ManifoldCF.java (original)
+++ manifoldcf/branches/CONNECTORS-63/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/system/ManifoldCF.java Sun Feb 24 16:36:44 2013
@@ -1648,7 +1648,6 @@ public class ManifoldCF extends org.apac
   protected static final String API_CHECKRESULTNODE = "check_result";
   protected static final String API_JOBIDNODE = "job_id";
   protected static final String API_CONNECTIONNAMENODE = "connection_name";
-  protected final static String API_RESULTSETNODE = "resultset";
   protected final static String API_ROWNODE = "row";
   protected final static String API_COLUMNNODE = "column";
   protected final static String API_ACTIVITYNODE = "activity";
@@ -2264,7 +2263,134 @@ public class ManifoldCF extends org.apac
     return READRESULT_FOUND;
   }
   
+  /** Queue reports */
+  protected static int apiReadRepositoryConnectionQueue(IThreadContext tc, Configuration output,
+    String connectionName, Map<String,List<String>> queryParameters) throws ManifoldCFException
+  {
+    if (queryParameters == null)
+      queryParameters = new HashMap<String,List<String>>();
+
+    // MHL
+    StatusFilterCriteria filterCriteria = null;
+    
+    // Look for sort order parameters...
+    SortOrder sortOrder = new SortOrder();
+    List<String> sortColumnsList = queryParameters.get("sortcolumn");
+    List<String> sortColumnsDirList = queryParameters.get("sortcolumn_direction");
+    if (sortColumnsList != null || sortColumnsDirList != null)
+    {
+      if (sortColumnsList == null || sortColumnsDirList == null)
+      {
+        createErrorNode(output,"sortcolumn and sortcolumn_direction must have the same cardinality.");
+        return READRESULT_BADARGS;
+      }
+      for (int i = 0; i < sortColumnsList.size(); i++)
+      {
+        String column = sortColumnsList.get(i);
+        String dir = sortColumnsDirList.get(i);
+        int dirInt;
+        if (dir.equals("ascending"))
+          dirInt = SortOrder.SORT_ASCENDING;
+        else if (dir.equals("descending"))
+          dirInt = SortOrder.SORT_DESCENDING;
+        else
+        {
+          createErrorNode(output,"sortcolumn_direction must be 'ascending' or 'descending'.");
+          return READRESULT_BADARGS;
+        }
+        sortOrder.addCriteria(column,dirInt);
+      }
+    }
+    
+    // Start row and row count
+    int startRow;
+    List<String> startRowList = queryParameters.get("startrow");
+    if (startRowList == null || startRowList.size() == 0)
+      startRow = 0;
+    else if (startRowList.size() > 1)
+    {
+      createErrorNode(output,"Multiple start rows specified.");
+      return READRESULT_BADARGS;
+    }
+    else
+      startRow = new Integer(startRowList.get(0)).intValue();
+    
+    int rowCount;
+    List<String> rowCountList = queryParameters.get("rowcount");
+    if (rowCountList == null || rowCountList.size() == 0)
+      rowCount = 20;
+    else if (rowCountList.size() > 1)
+    {
+      createErrorNode(output,"Multiple row counts specified.");
+      return READRESULT_BADARGS;
+    }
+    else
+      rowCount = new Integer(rowCountList.get(0)).intValue();
 
+    List<String> reportTypeList = queryParameters.get("report");
+    String reportType;
+    if (reportTypeList == null || reportTypeList.size() == 0)
+      reportType = "simple";
+    else if (reportTypeList.size() > 1)
+    {
+      createErrorNode(output,"Multiple report types specified.");
+      return READRESULT_BADARGS;
+    }
+    else
+      reportType = reportTypeList.get(0);
+
+    IJobManager jobManager = JobManagerFactory.make(tc);
+    
+    IResultSet result;
+    String[] resultColumns;
+    
+    if (reportType.equals("document"))
+    {
+      result = jobManager.genDocumentStatus(connectionName,filterCriteria,sortOrder,startRow,rowCount);
+      resultColumns = new String[]{"identifier","job","state","status","scheduled","action","retrycount","retrylimit"};
+    }
+    else if (reportType.equals("status"))
+    {
+      BucketDescription idBucket;
+      List<String> idBucketList = queryParameters.get("idbucket");
+      List<String> idBucketInsensitiveList = queryParameters.get("idbucket_insensitive");
+      if (idBucketList != null && idBucketInsensitiveList != null)
+      {
+        createErrorNode(output,"Either use idbucket or idbucket_insensitive, not both.");
+        return READRESULT_BADARGS;
+      }
+      boolean isInsensitiveIdBucket;
+      if (idBucketInsensitiveList != null)
+      {
+        idBucketList = idBucketInsensitiveList;
+        isInsensitiveIdBucket = true;
+      }
+      else
+        isInsensitiveIdBucket = false;
+      if (idBucketList == null || idBucketList.size() == 0)
+        idBucket = new BucketDescription("()",false);
+      else if (idBucketList.size() > 1)
+      {
+        createErrorNode(output,"Multiple idbucket regexps specified.");
+        return READRESULT_BADARGS;
+      }
+      else
+        idBucket = new BucketDescription(idBucketList.get(0),isInsensitiveIdBucket);
+      
+      result = jobManager.genQueueStatus(connectionName,filterCriteria,sortOrder,idBucket,startRow,rowCount);
+      resultColumns = new String[]{"idbucket","inactive","processing","expiring","deleting",
+        "processready","expireready","processwaiting","expirewaiting","waitingforever","hopcountexceeded"};
+    }
+    else
+    {
+      createErrorNode(output,"Unknown report type '"+reportType+"'.");
+      return READRESULT_BADARGS;
+    }
+
+    createResultsetNode(output,result,resultColumns);
+    return READRESULT_FOUND;
+  }
+  
   /** History reports */
   protected static int apiReadRepositoryConnectionHistory(IThreadContext tc, Configuration output,
     String connectionName, Map<String,List<String>> queryParameters) throws ManifoldCFException
@@ -2608,8 +2734,15 @@ public class ManifoldCF extends org.apac
       return READRESULT_BADARGS;
     }
 
+    createResultsetNode(output,result,resultColumns);
+    return READRESULT_FOUND;
+  }
+  
+  /** Add a resultset node to the output. */
+  protected static void createResultsetNode(Configuration output, IResultSet result, String[] resultColumns)
+    throws ManifoldCFException
+  {
     // Go through result set and add results to output
-    ConfigurationNode resultSet = new ConfigurationNode(API_RESULTSETNODE);
     for (int i = 0; i < result.getRowCount(); i++)
     {
       IResultRow row = result.getRow(i);
@@ -2626,10 +2759,8 @@ public class ManifoldCF extends org.apac
         columnValue.setValue(valueToUse);
         rowValue.addChild(rowValue.getChildCount(),columnValue);
       }
-      resultSet.addChild(resultSet.getChildCount(),rowValue);
+      output.addChild(output.getChildCount(),rowValue);
     }
-    output.addChild(output.getChildCount(),resultSet);
-    return READRESULT_FOUND;
   }
   
   /** Read the activity list for a given connection name. */
@@ -2681,6 +2812,12 @@ public class ManifoldCF extends org.apac
       String connectionName = decodeAPIPathElement(path.substring(firstSeparator));
       return apiReadRepositoryConnectionHistory(tc,output,connectionName,queryParameters);
     }
+    else if (path.startsWith("repositoryconnectionqueue/"))
+    {
+      int firstSeparator = "repositoryconnectionqueue/".length();
+      String connectionName = decodeAPIPathElement(path.substring(firstSeparator));
+      return apiReadRepositoryConnectionQueue(tc,output,connectionName,queryParameters);
+    }
     else if (path.startsWith("status/"))
     {
       int firstSeparator = "status/".length();