use of org.apache.manifoldcf.core.interfaces.TempFileInput 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.TempFileInput in project manifoldcf by apache.
the class AmazonCloudSearchConnector method postData.
private String postData(InputStream jsonData) throws ServiceInterruption, ManifoldCFException {
CloseableHttpClient httpclient = HttpClients.createDefault();
try {
BinaryInput bi = new TempFileInput(jsonData);
try {
poster.setEntity(new InputStreamEntity(bi.getStream(), bi.getLength()));
HttpResponse res = httpclient.execute(poster);
HttpEntity resEntity = res.getEntity();
return EntityUtils.toString(resEntity);
} finally {
bi.discard();
}
} catch (ClientProtocolException e) {
throw new ManifoldCFException(e);
} catch (IOException e) {
handleIOException(e);
} finally {
try {
httpclient.close();
} catch (IOException e) {
// do nothing
}
}
return null;
}
Aggregations