use of org.apache.manifoldcf.core.interfaces.IResultSet in project manifoldcf by apache.
the class DocumentChunkManager method readChunk.
/**
* Read a chunk of documents.
*/
public DocumentRecord[] readChunk(String host, String path, int maximumNumber) throws ManifoldCFException {
ArrayList params = new ArrayList();
String query = buildConjunctionClause(params, new ClauseDescription[] { new UnitaryClause(HOST_FIELD, host), new UnitaryClause(PATH_FIELD, path) });
IResultSet set = performQuery("SELECT * FROM " + getTableName() + " WHERE " + query + " " + constructOffsetLimitClause(0, maximumNumber), params, null, null);
DocumentRecord[] rval = new DocumentRecord[set.getRowCount()];
for (int i = 0; i < set.getRowCount(); i++) {
IResultRow row = set.getRow(i);
rval[i] = new DocumentRecord(host, path, (String) row.getValue(UID_FIELD), (String) row.getValue(URI_FIELD), (String) row.getValue(ACTIVITY_FIELD), (Long) row.getValue(LENGTH_FIELD), (BinaryInput) row.getValue(SDF_DATA_FIELD));
}
return rval;
}
use of org.apache.manifoldcf.core.interfaces.IResultSet in project manifoldcf by apache.
the class DocumentChunkManager method recordDocument.
/**
* Record document information for later trasmission to Amazon.
* @param uid documentuid
* @param sdfData document SDF data.
* @throws ManifoldCFException
*/
public void recordDocument(String uid, String host, String path, String uri, String activity, Long length, InputStream sdfData) throws ManifoldCFException, IOException {
TempFileInput tfi = null;
try {
// This downloads all the data from upstream!
try {
tfi = new TempFileInput(sdfData);
} catch (ManifoldCFException e) {
if (e.getErrorCode() == ManifoldCFException.INTERRUPTED)
throw e;
throw new IOException("Fetch failed: " + e.getMessage());
}
while (true) {
long sleepAmt = 0L;
try {
beginTransaction();
try {
ArrayList params = new ArrayList();
String query = buildConjunctionClause(params, new ClauseDescription[] { new UnitaryClause(HOST_FIELD, host), new UnitaryClause(PATH_FIELD, path), new UnitaryClause(UID_FIELD, uid) });
IResultSet set = performQuery("SELECT " + UID_FIELD + " FROM " + getTableName() + " WHERE " + query + " FOR UPDATE", params, null, null);
Map<String, Object> parameterMap = new HashMap<String, Object>();
parameterMap.put(SDF_DATA_FIELD, tfi);
parameterMap.put(URI_FIELD, uri);
parameterMap.put(ACTIVITY_FIELD, activity);
if (length != null)
parameterMap.put(LENGTH_FIELD, length);
// if record exists on table, update record.
if (set.getRowCount() > 0) {
performUpdate(parameterMap, " WHERE " + query, params, null);
} else {
parameterMap.put(UID_FIELD, uid);
parameterMap.put(HOST_FIELD, host);
parameterMap.put(PATH_FIELD, path);
performInsert(parameterMap, null);
}
break;
} catch (ManifoldCFException e) {
signalRollback();
throw e;
} catch (RuntimeException e) {
signalRollback();
throw e;
} catch (Error e) {
signalRollback();
throw e;
} finally {
endTransaction();
}
} catch (ManifoldCFException e) {
// Look for deadlock and retry if so
if (e.getErrorCode() == e.DATABASE_TRANSACTION_ABORT) {
sleepAmt = getSleepAmt();
continue;
}
throw e;
}
}
} finally {
if (tfi != null)
tfi.discard();
}
}
use of org.apache.manifoldcf.core.interfaces.IResultSet in project manifoldcf by apache.
the class DocumentContentExclusionHSQLDBIT method checkContentFilterHistory.
private void checkContentFilterHistory(boolean hasContentExcluded) throws Exception {
FilterCriteria filter = new FilterCriteria(new String[] { "process" }, 0l, Long.MAX_VALUE, new RegExpCriteria(".*\\" + CONTENTFILTER_SERVLET_PATH + ".*", true), null);
SortOrder sortOrderValue = new SortOrder();
sortOrderValue.addCriteria("entityid", SortOrder.SORT_ASCENDING);
IResultSet result = repoConnectionManager.genHistorySimple(WEB_CONNECTION, filter, sortOrderValue, 0, 20);
assertThat(result.getRowCount(), is(MAX_DOC_COUNT));
for (int i = 0; i < MAX_DOC_COUNT; i++) {
IResultRow row = result.getRow(i);
assertThat((String) row.getValue("identifier"), is(baseUrl + i));
if (hasContentExcluded && i == 1) {
// if excluding, only page 1 will be excluded
assertThat((String) row.getValue("resultcode"), is("EXCLUDEDCONTENT"));
assertThat((String) row.getValue("resultdesc"), is("Rejected due to content exclusion rule"));
} else {
assertThat((String) row.getValue("resultcode"), is("OK"));
assertThat(row.getValue("resultdesc"), is(nullValue()));
}
}
}
use of org.apache.manifoldcf.core.interfaces.IResultSet in project manifoldcf by apache.
the class DocumentChunkManager method equalOrMoreThan.
/**
* Determine if there are N documents or more.
*/
public boolean equalOrMoreThan(String host, String path, int maximumNumber) throws ManifoldCFException {
ArrayList params = new ArrayList();
String query = buildConjunctionClause(params, new ClauseDescription[] { new UnitaryClause(HOST_FIELD, host), new UnitaryClause(PATH_FIELD, path) });
IResultSet set = performQuery("SELECT " + constructCountClause(UID_FIELD) + " AS countval FROM " + getTableName() + " WHERE " + query + " " + constructOffsetLimitClause(0, maximumNumber), params, null, null);
long count;
if (set.getRowCount() > 0) {
IResultRow row = set.getRow(0);
Long countVal = (Long) row.getValue("countval");
count = countVal.longValue();
} else
count = 0L;
return count >= maximumNumber;
}
Aggregations