use of org.apache.camel.component.atmos.util.AtmosResultCode in project camel by apache.
the class AtmosAPIFacade method put.
/**
* Put or upload a new file or an entire directory to atmos
*
* @param localPath the file path or the dir path on the local filesystem
* @param remotePath the remote path destination on atmos
* the file already existing with the same name
* will be overridden.
* @return a AtmosResult object reporting for each remote path the result of
* the operation.
* @throws AtmosException
*/
public AtmosResult put(String localPath, String remotePath) throws AtmosException {
AtmosResult result = new AtmosFileUploadResult();
//a map representing for each path the result of the put operation
Map<String, AtmosResultCode> resultEntries = null;
//in case the remote path is not specified, the remotePath = localPath
String atmosPath = remotePath == null ? localPath : remotePath;
if (!atmosPath.endsWith(ATMOS_FILE_SEPARATOR)) {
atmosPath += ATMOS_FILE_SEPARATOR;
}
ObjectPath atmosEntry = new ObjectPath(atmosPath);
if (!atmosPath.equals(ATMOS_FILE_SEPARATOR)) {
if (AtmosAPIFacade.client.getSystemMetadata(atmosEntry) == null) {
throw new AtmosException(atmosPath + " does not exist or cannot obtain metadata");
}
}
File fileLocalPath = new File(localPath);
//verify uploading of a single file
if (fileLocalPath.isFile()) {
//check if atmos file exists
if (atmosEntry != null && !atmosEntry.isDirectory()) {
throw new AtmosException(atmosPath + " exists on atmos and is not a folder!");
}
atmosPath = atmosPath + fileLocalPath.getName();
resultEntries = new HashMap<String, AtmosResultCode>(1);
try {
ObjectId uploadedFile = putSingleFile(fileLocalPath, atmosPath);
if (uploadedFile == null) {
resultEntries.put(atmosPath, AtmosResultCode.KO);
} else {
resultEntries.put(atmosPath, AtmosResultCode.OK);
}
} catch (Exception ex) {
resultEntries.put(atmosPath, AtmosResultCode.KO);
} finally {
result.setResultEntries(resultEntries);
}
return result;
} else {
//verify uploading of a list of files inside a dir
LOG.info("uploading a dir...");
//check if atmos folder exists
if (atmosEntry != null && !atmosEntry.isDirectory()) {
throw new AtmosException(atmosPath + " exists on atmos and is not a folder!");
}
//revert to old path
String oldAtmosPath = atmosPath;
//list all files in a dir
Collection<File> listFiles = FileUtils.listFiles(fileLocalPath, null, true);
if (listFiles == null || listFiles.isEmpty()) {
throw new AtmosException(localPath + " does not contain any files");
}
resultEntries = new HashMap<String, AtmosResultCode>(listFiles.size());
for (File file : listFiles) {
String absPath = file.getAbsolutePath();
int indexRemainingPath = localPath.length();
if (!localPath.endsWith("/")) {
indexRemainingPath += 1;
}
String remainingPath = absPath.substring(indexRemainingPath);
atmosPath = atmosPath + remainingPath;
try {
LOG.debug("uploading: {} to {}", fileLocalPath, atmosPath);
ObjectId uploadedFile = putSingleFile(file, atmosPath);
if (uploadedFile == null) {
resultEntries.put(atmosPath, AtmosResultCode.KO);
} else {
resultEntries.put(atmosPath, AtmosResultCode.OK);
}
} catch (Exception ex) {
resultEntries.put(atmosPath, AtmosResultCode.KO);
}
atmosPath = oldAtmosPath;
}
result.setResultEntries(resultEntries);
return result;
}
}
use of org.apache.camel.component.atmos.util.AtmosResultCode in project camel by apache.
the class AtmosFileUploadResult method populateExchange.
/**
* Object payload contained in Exchange
* In case of a single file Exchange Header is populated with the name of the remote path uploaded
* In case of a multiple files Exchange Header is populated with the name of the remote paths uploaded
* In case of a single file Exchange Body is populated with the result code of the upload operation for the remote path.
* In case of multiple files Exchange Body is populated with a map containing as key the remote path uploaded
* and as value the result code of the upload operation
* @param exchange
*/
@Override
public void populateExchange(Exchange exchange) {
Map<String, AtmosResultCode> map = (Map<String, AtmosResultCode>) resultEntries;
if (map.size() == 1) {
//set info in exchange
String pathExtracted = null;
AtmosResultCode codeExtracted = null;
for (Map.Entry<String, AtmosResultCode> entry : map.entrySet()) {
pathExtracted = entry.getKey();
codeExtracted = entry.getValue();
}
exchange.getIn().setHeader(AtmosResultHeader.UPLOADED_FILE.name(), pathExtracted);
exchange.getIn().setBody(codeExtracted.name());
} else {
StringBuffer pathsExtracted = new StringBuffer();
for (Map.Entry<String, AtmosResultCode> entry : map.entrySet()) {
pathsExtracted.append(entry.getKey() + "\n");
}
exchange.getIn().setHeader(AtmosResultHeader.UPLOADED_FILES.name(), pathsExtracted.toString());
exchange.getIn().setBody(map);
}
}
Aggregations