use of com.bluenimble.platform.storage.StorageException in project serverless by bluenimble.
the class AddObjectSpi method execute.
@Override
public ApiOutput execute(Api api, ApiConsumer consumer, ApiRequest request, ApiResponse response) throws ApiServiceExecutionException {
ApiSpace space;
try {
space = MgmUtils.space(consumer, api);
} catch (ApiAccessDeniedException e) {
throw new ApiServiceExecutionException(e.getMessage(), e).status(ApiResponse.FORBIDDEN);
}
String provider = (String) request.get(CommonSpec.Provider);
ApiStreamSource stream = (ApiStreamSource) request.get(ApiRequest.Payload, Scope.Stream);
Storage storage = space.feature(Storage.class, provider, request);
String path = (String) request.get(Spec.Object);
try {
Folder root = storage.root();
if (!Lang.isNullOrEmpty(path)) {
String[] aPath = Lang.split(path, Lang.SLASH);
for (String p : aPath) {
if (!root.contains(p)) {
root = root.add(p, true);
} else {
StorageObject so = root.get(p);
if (!so.isFolder()) {
throw new StorageException(p + " isn't a valid folder");
}
root = (Folder) so;
}
}
}
if (stream != null) {
root.add(stream, stream.name(), true);
}
} catch (StorageException e) {
throw new ApiServiceExecutionException(e.getMessage(), e);
}
return new JsonApiOutput((JsonObject) new JsonObject().set(CommonOutput.Added, true));
}
use of com.bluenimble.platform.storage.StorageException in project serverless by bluenimble.
the class CopyObjectSpi method execute.
@Override
public ApiOutput execute(Api api, ApiConsumer consumer, ApiRequest request, ApiResponse response) throws ApiServiceExecutionException {
ApiSpace space;
try {
space = MgmUtils.space(consumer, api);
} catch (ApiAccessDeniedException e) {
throw new ApiServiceExecutionException(e.getMessage(), e).status(ApiResponse.FORBIDDEN);
}
String provider = (String) request.get(CommonSpec.Provider);
String path = (String) request.get(Spec.Object);
String sFolder = (String) request.get(Spec.Folder);
Boolean move = (Boolean) request.get(Spec.Move);
if (move == null) {
move = false;
}
Storage storage = space.feature(Storage.class, provider, request);
Folder root = null;
StorageObject so = null;
try {
root = storage.root();
} catch (StorageException e) {
throw new ApiServiceExecutionException(e.getMessage(), e);
}
try {
so = root.get(path);
} catch (StorageException e) {
throw new ApiServiceExecutionException("storage object '" + path + "' not found", e).status(ApiResponse.NOT_FOUND);
}
Folder folder = root;
StorageObject soFolder = null;
if (!Lang.isNullOrEmpty(sFolder)) {
try {
soFolder = root.get(sFolder);
} catch (StorageException e) {
throw new ApiServiceExecutionException("folder '" + sFolder + "' not found", e).status(ApiResponse.NOT_FOUND);
}
}
if (!soFolder.isFolder()) {
throw new ApiServiceExecutionException("storage object '" + sFolder + "' isn't a valid folder").status(ApiResponse.BAD_REQUEST);
}
try {
so.copy(folder, move);
} catch (StorageException e) {
throw new ApiServiceExecutionException(e.getMessage(), e);
}
return new JsonApiOutput((JsonObject) new JsonObject().set(move ? CommonOutput.Moved : CommonOutput.Copied, true));
}
use of com.bluenimble.platform.storage.StorageException in project serverless by bluenimble.
the class GetObjectSpi method execute.
@Override
public ApiOutput execute(Api api, ApiConsumer consumer, ApiRequest request, ApiResponse response) throws ApiServiceExecutionException {
ApiSpace space;
try {
space = MgmUtils.space(consumer, api);
} catch (ApiAccessDeniedException e) {
throw new ApiServiceExecutionException(e.getMessage(), e).status(ApiResponse.FORBIDDEN);
}
String provider = (String) request.get(CommonSpec.Provider);
Storage storage = space.feature(Storage.class, provider, request);
String path = (String) request.get(Spec.Object);
String filter = (String) request.get(Spec.Filter);
Folder root = null;
StorageObject so = null;
try {
root = storage.root();
so = root;
} catch (StorageException e) {
throw new ApiServiceExecutionException(e.getMessage(), e);
}
try {
if (!Lang.isNullOrEmpty(path) && !path.trim().equals(Lang.DOT)) {
so = root.get(path);
}
} catch (StorageException e) {
throw new ApiServiceExecutionException("storage object '" + path + "' not found", e).status(ApiResponse.NOT_FOUND);
}
try {
return so.toOutput(StorageUtils.guessFilter(filter), null, null);
} catch (Exception e) {
throw new ApiServiceExecutionException(e.getMessage(), e);
}
}
use of com.bluenimble.platform.storage.StorageException in project serverless by bluenimble.
the class PutStorageObjectApiServiceSpi method execute.
@Override
public ApiOutput execute(Api api, ApiConsumer consumer, ApiRequest request, ApiResponse response) throws ApiServiceExecutionException {
Storage storage = api.space().feature(Storage.class, provider, request);
String path = (String) request.get(objectParameter);
if (Lang.isNullOrEmpty(path)) {
throw new ApiServiceExecutionException("missing object path parameter '" + objectParameter + "'").status(ApiResponse.BAD_REQUEST);
}
String objectName = null;
StorageObject so = null;
long length = -1;
ApiStreamSource stream = null;
try {
stream = (ApiStreamSource) request.get(streamParameter, Scope.Stream);
if (Lang.isNullOrEmpty(stream.name())) {
objectName = Lang.UUID(20);
}
so = findFolder(storage.root(), this.folder).add(stream, objectName, true);
length = so.length();
} catch (StorageException e) {
throw new ApiServiceExecutionException(e.getMessage(), e);
}
return new JsonApiOutput((JsonObject) new JsonObject().set(StorageObject.Fields.Name, so.name()).set(StorageObject.Fields.Timestamp, Lang.toUTC(so.timestamp())).set(StorageObject.Fields.Length, length));
}
use of com.bluenimble.platform.storage.StorageException in project serverless by bluenimble.
the class AbstractStorageApiServiceSpi method findFolder.
protected Folder findFolder(Folder parent, String path) throws StorageException {
Folder folder = parent;
if (Lang.isNullOrEmpty(path)) {
return folder;
}
StorageObject so = folder.get(path);
if (so == null) {
throw new StorageException(path + " not found");
}
if (!so.isFolder()) {
throw new StorageException(path + " isn't a valid folder");
}
return (Folder) so;
}
Aggregations