in framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/system/ManifoldCF.java [2682:2879]
protected static int apiReadRepositoryConnectionQueue(IThreadContext tc, Configuration output,
String connectionName, Map<String,List<String>> queryParameters, IAuthorizer authorizer) throws ManifoldCFException
{
if (!authorizer.checkAllowed(tc, IAuthorizer.CAPABILITY_VIEW_REPORTS))
return READRESULT_NOTALLOWED;
if (queryParameters == null)
queryParameters = new HashMap<String,List<String>>();
// Jobs (specified by id)
Long[] jobs;
List<String> jobList = queryParameters.get("job");
if (jobList == null)
jobs = new Long[0];
else
{
jobs = new Long[jobList.size()];
for (int i = 0; i < jobs.length; i++)
{
jobs[i] = new Long(jobList.get(i));
}
}
// Now time
long now;
List<String> nowList = queryParameters.get("now");
if (nowList == null || nowList.size() == 0)
now = System.currentTimeMillis();
else if (nowList.size() > 1)
throw new ManifoldCFException("Multiple values for now parameter");
else
now = new Long(nowList.get(0)).longValue();
// Identifier match
RegExpCriteria idMatch;
List<String> idMatchList = queryParameters.get("idmatch");
List<String> idMatchInsensitiveList = queryParameters.get("idmatch_insensitive");
if (idMatchList != null && idMatchInsensitiveList != null)
throw new ManifoldCFException("Either use idmatch or idmatch_insensitive, not both.");
boolean isInsensitiveIdMatch;
if (idMatchInsensitiveList != null)
{
idMatchList = idMatchInsensitiveList;
isInsensitiveIdMatch = true;
}
else
isInsensitiveIdMatch = false;
if (idMatchList == null || idMatchList.size() == 0)
idMatch = null;
else if (idMatchList.size() > 1)
throw new ManifoldCFException("Multiple id match regexps specified.");
else
idMatch = new RegExpCriteria(idMatchList.get(0),isInsensitiveIdMatch);
List<String> stateMatchList = queryParameters.get("statematch");
int[] matchStates;
if (stateMatchList == null)
matchStates = new int[0];
else
{
matchStates = new int[stateMatchList.size()];
for (int i = 0; i < matchStates.length; i++)
{
Integer value = docState.get(stateMatchList.get(i));
if (value == null)
throw new ManifoldCFException("Unrecognized state value: '"+stateMatchList.get(i)+"'");
matchStates[i] = value.intValue();
}
}
List<String> statusMatchList = queryParameters.get("statusmatch");
int[] matchStatuses;
if (statusMatchList == null)
matchStatuses = new int[0];
else
{
matchStatuses = new int[statusMatchList.size()];
for (int i = 0; i < matchStatuses.length; i++)
{
Integer value = docStatus.get(statusMatchList.get(i));
if (value == null)
throw new ManifoldCFException("Unrecognized status value: '"+statusMatchList.get(i)+"'");
matchStatuses[i] = value.intValue();
}
}
StatusFilterCriteria filterCriteria = new StatusFilterCriteria(jobs,now,idMatch,matchStates,matchStatuses);
// 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 || sortColumnsList.size() != sortColumnsDirList.size())
throw new ManifoldCFException("sortcolumn and sortcolumn_direction must have the same cardinality.");
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
throw new ManifoldCFException("sortcolumn_direction must be 'ascending' or 'descending'.");
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)
throw new ManifoldCFException("Multiple start rows specified.");
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)
throw new ManifoldCFException("Multiple row counts specified.");
else
rowCount = new Integer(rowCountList.get(0)).intValue();
List<String> reportTypeList = queryParameters.get("report");
String reportType;
if (reportTypeList == null || reportTypeList.size() == 0)
reportType = "document";
else if (reportTypeList.size() > 1)
throw new ManifoldCFException("Multiple report types specified.");
else
reportType = reportTypeList.get(0);
IJobManager jobManager = JobManagerFactory.make(tc);
IResultSet result;
String[] resultColumns;
if (reportType.equals("document"))
{
try
{
result = jobManager.genDocumentStatus(connectionName,filterCriteria,sortOrder,startRow,rowCount);
}
catch (ManifoldCFException e)
{
createErrorNode(output,e);
return READRESULT_FOUND;
}
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)
throw new ManifoldCFException("Either use idbucket or idbucket_insensitive, not both.");
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)
throw new ManifoldCFException("Multiple idbucket regexps specified.");
else
idBucket = new BucketDescription(idBucketList.get(0),isInsensitiveIdBucket);
try
{
result = jobManager.genQueueStatus(connectionName,filterCriteria,sortOrder,idBucket,startRow,rowCount);
}
catch (ManifoldCFException e)
{
createErrorNode(output,e);
return READRESULT_FOUND;
}
resultColumns = new String[]{"idbucket","inactive","processing","expiring","deleting",
"processready","expireready","processwaiting","expirewaiting","waitingforever","hopcountexceeded"};
}
else
throw new ManifoldCFException("Unknown report type '"+reportType+"'.");
createResultsetNode(output,result,resultColumns);
return READRESULT_FOUND;
}