You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dlab.apache.org by of...@apache.org on 2020/06/17 10:52:42 UTC
[incubator-dlab] branch develop updated: [DLAB-1876] Fixed bug with
creating folders in bucket browser
This is an automated email from the ASF dual-hosted git repository.
ofuks pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git
The following commit(s) were added to refs/heads/develop by this push:
new fc2f9af [DLAB-1876] Fixed bug with creating folders in bucket browser
fc2f9af is described below
commit fc2f9afe50c5abc229072797b1fb9abcf2e37ba2
Author: Oleh Fuks <ol...@gmail.com>
AuthorDate: Wed Jun 17 13:52:24 2020 +0300
[DLAB-1876] Fixed bug with creating folders in bucket browser
---
.../com/epam/dlab/dto/bucket/FolderUploadDTO.java} | 31 +++++++++-----------
.../dlab/backendapi/resources/BucketResource.java | 11 ++++++++
.../dlab/backendapi/service/BucketService.java | 3 ++
.../service/impl/aws/BucketServiceAwsImpl.java | 19 +++++++++++++
.../service/impl/azure/BucketServiceAzureImpl.java | 6 ++++
.../service/impl/gcp/BucketServiceGcpImpl.java | 16 +++++++++++
.../dlab/backendapi/resources/BucketResource.java | 22 ++++++++++-----
.../backendapi/resources/dto/FolderUploadDTO.java} | 33 ++++++++++------------
.../dlab/backendapi/service/BucketService.java | 4 ++-
.../backendapi/service/impl/BucketServiceImpl.java | 21 +++++++++++++-
10 files changed, 121 insertions(+), 45 deletions(-)
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/BucketService.java b/services/dlab-model/src/main/java/com/epam/dlab/dto/bucket/FolderUploadDTO.java
similarity index 59%
copy from services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/BucketService.java
copy to services/dlab-model/src/main/java/com/epam/dlab/dto/bucket/FolderUploadDTO.java
index c1488e3..453b16f 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/BucketService.java
+++ b/services/dlab-model/src/main/java/com/epam/dlab/dto/bucket/FolderUploadDTO.java
@@ -17,22 +17,17 @@
* under the License.
*/
-package com.epam.dlab.backendapi.service;
-
-import com.epam.dlab.dto.bucket.BucketDTO;
-
-import javax.servlet.http.HttpServletResponse;
-import java.io.InputStream;
-import java.util.List;
-
-public interface BucketService {
- String DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss";
-
- List<BucketDTO> getObjects(String bucket);
-
- void uploadObject(String bucket, String object, InputStream stream, long fileSize);
-
- void downloadObject(String bucket, String object, HttpServletResponse resp);
-
- void deleteObjects(String bucket, List<String> objects);
+package com.epam.dlab.dto.bucket;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import lombok.Data;
+import org.hibernate.validator.constraints.NotBlank;
+
+@Data
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class FolderUploadDTO {
+ @NotBlank(message = "field cannot be empty")
+ private final String bucket;
+ @NotBlank(message = "field cannot be empty")
+ private final String folder;
}
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/BucketResource.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/BucketResource.java
index 4495f5d..9bcfdbe 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/BucketResource.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/BucketResource.java
@@ -22,6 +22,7 @@ package com.epam.dlab.backendapi.resources;
import com.epam.dlab.auth.UserInfo;
import com.epam.dlab.backendapi.service.BucketService;
import com.epam.dlab.dto.bucket.BucketDeleteDTO;
+import com.epam.dlab.dto.bucket.FolderUploadDTO;
import com.epam.dlab.exceptions.DlabException;
import com.google.inject.Inject;
import io.dropwizard.auth.Auth;
@@ -33,6 +34,7 @@ import org.apache.commons.fileupload.util.Streams;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
@@ -76,6 +78,15 @@ public class BucketResource {
return Response.ok().build();
}
+ @POST
+ @Path("/folder/upload")
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response uploadFolder(@Auth UserInfo userInfo, @Valid FolderUploadDTO dto) {
+ bucketService.uploadFolder(userInfo, dto.getBucket(), dto.getFolder());
+ return Response.ok().build();
+ }
+
@GET
@Path("/{bucket}/object/{object}/download")
@Consumes(MediaType.APPLICATION_JSON)
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/BucketService.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/BucketService.java
index c1488e3..f62f391 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/BucketService.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/BucketService.java
@@ -19,6 +19,7 @@
package com.epam.dlab.backendapi.service;
+import com.epam.dlab.auth.UserInfo;
import com.epam.dlab.dto.bucket.BucketDTO;
import javax.servlet.http.HttpServletResponse;
@@ -32,6 +33,8 @@ public interface BucketService {
void uploadObject(String bucket, String object, InputStream stream, long fileSize);
+ void uploadFolder(UserInfo userInfo, String bucket, String folder);
+
void downloadObject(String bucket, String object, HttpServletResponse resp);
void deleteObjects(String bucket, List<String> objects);
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/aws/BucketServiceAwsImpl.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/aws/BucketServiceAwsImpl.java
index 347543c..a68914d 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/aws/BucketServiceAwsImpl.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/aws/BucketServiceAwsImpl.java
@@ -19,6 +19,7 @@
package com.epam.dlab.backendapi.service.impl.aws;
+import com.epam.dlab.auth.UserInfo;
import com.epam.dlab.backendapi.service.BucketService;
import com.epam.dlab.dto.bucket.BucketDTO;
import com.epam.dlab.exceptions.DlabException;
@@ -83,6 +84,24 @@ public class BucketServiceAwsImpl implements BucketService {
}
@Override
+ public void uploadFolder(UserInfo userInfo, String bucket, String folder) {
+ log.info("Uploading folder {} to bucket {}", folder, bucket);
+ try {
+ S3Client s3 = S3Client.create();
+ PutObjectRequest uploadRequest = PutObjectRequest
+ .builder()
+ .bucket(bucket)
+ .key(folder)
+ .build();
+ s3.putObject(uploadRequest, RequestBody.empty());
+ } catch (Exception e) {
+ log.error("Cannot upload folder {} to bucket {}. Reason: {}", folder, bucket, e.getMessage());
+ throw new DlabException(String.format("Cannot upload folder %s to bucket %s. Reason: %s", folder, bucket, e.getMessage()));
+ }
+ log.info("Finished uploading folder {} to bucket {}", folder, bucket);
+ }
+
+ @Override
public void downloadObject(String bucket, String object, HttpServletResponse resp) {
log.info("Downloading file {} from bucket {}", object, bucket);
try (ServletOutputStream outputStream = resp.getOutputStream()) {
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/azure/BucketServiceAzureImpl.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/azure/BucketServiceAzureImpl.java
index f35dbc6..56fc71c 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/azure/BucketServiceAzureImpl.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/azure/BucketServiceAzureImpl.java
@@ -24,6 +24,7 @@ import com.azure.storage.blob.BlobContainerClient;
import com.azure.storage.blob.BlobServiceClient;
import com.azure.storage.blob.BlobServiceClientBuilder;
import com.azure.storage.blob.models.BlobItem;
+import com.epam.dlab.auth.UserInfo;
import com.epam.dlab.backendapi.service.BucketService;
import com.epam.dlab.dto.bucket.BucketDTO;
import com.epam.dlab.exceptions.DlabException;
@@ -70,6 +71,11 @@ public class BucketServiceAzureImpl implements BucketService {
}
@Override
+ public void uploadFolder(UserInfo userInfo, String bucket, String folder) {
+
+ }
+
+ @Override
public void downloadObject(String bucket, String object, HttpServletResponse resp) {
log.info("Downloading file {} from bucket {}", object, bucket);
try (ServletOutputStream outputStream = resp.getOutputStream()) {
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/gcp/BucketServiceGcpImpl.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/gcp/BucketServiceGcpImpl.java
index a245850..591275a 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/gcp/BucketServiceGcpImpl.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/gcp/BucketServiceGcpImpl.java
@@ -19,6 +19,7 @@
package com.epam.dlab.backendapi.service.impl.gcp;
+import com.epam.dlab.auth.UserInfo;
import com.epam.dlab.backendapi.service.BucketService;
import com.epam.dlab.dto.bucket.BucketDTO;
import com.epam.dlab.exceptions.DlabException;
@@ -72,6 +73,21 @@ public class BucketServiceGcpImpl implements BucketService {
}
@Override
+ public void uploadFolder(UserInfo userInfo, String bucket, String folder) {
+ log.info("Uploading file {} to bucket {}", folder, bucket);
+ try {
+ Storage storage = StorageOptions.getDefaultInstance().getService();
+ BlobId blobId = BlobId.of(bucket, folder);
+ BlobInfo blobInfo = BlobInfo.newBuilder(blobId).build();
+ storage.create(blobInfo);
+ } catch (Exception e) {
+ log.error("Cannot upload folder {} to bucket {}. Reason: {}", folder, bucket, e.getMessage());
+ throw new DlabException(String.format("Cannot upload folder %s to bucket %s. Reason: %s", folder, bucket, e.getMessage()));
+ }
+ log.info("Finished uploading folder {} to bucket {}", folder, bucket);
+ }
+
+ @Override
public void downloadObject(String bucket, String object, HttpServletResponse resp) {
log.info("Downloading file {} from bucket {}", object, bucket);
try (ServletOutputStream outputStream = resp.getOutputStream()) {
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/BucketResource.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/BucketResource.java
index 6ffc7f9..8e943b2 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/BucketResource.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/BucketResource.java
@@ -21,6 +21,7 @@ package com.epam.dlab.backendapi.resources;
import com.epam.dlab.auth.UserInfo;
import com.epam.dlab.backendapi.resources.dto.BucketDeleteDTO;
+import com.epam.dlab.backendapi.resources.dto.FolderUploadDTO;
import com.epam.dlab.backendapi.service.BucketService;
import com.epam.dlab.exceptions.DlabException;
import com.google.inject.Inject;
@@ -84,6 +85,16 @@ public class BucketResource {
return Response.ok().build();
}
+ @POST
+ @Path("/folder/upload")
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ @RolesAllowed("/api/bucket/upload")
+ public Response uploadFolder(@Auth UserInfo userInfo, @Valid FolderUploadDTO dto) {
+ bucketService.uploadFolder(userInfo, dto.getBucket(), dto.getFolder(), dto.getEndpoint());
+ return Response.ok().build();
+ }
+
@GET
@Path("/{bucket}/object/{object}/endpoint/{endpoint}/download")
@Consumes(MediaType.APPLICATION_JSON)
@@ -124,18 +135,15 @@ public class BucketResource {
if (item.isFormField()) {
if (OBJECT_FORM_FIELD.equals(item.getFieldName())) {
object = Streams.asString(stream);
- }
- if (BUCKET_FORM_FIELD.equals(item.getFieldName())) {
+ } else if (BUCKET_FORM_FIELD.equals(item.getFieldName())) {
bucket = Streams.asString(stream);
- }
- if (ENDPOINT_FORM_FIELD.equals(item.getFieldName())) {
+ } else if (ENDPOINT_FORM_FIELD.equals(item.getFieldName())) {
endpoint = Streams.asString(stream);
- }
- if (SIZE_FORM_FIELD.equals(item.getFieldName())) {
+ } else if (SIZE_FORM_FIELD.equals(item.getFieldName())) {
fileSize = Long.parseLong(Streams.asString(stream));
}
} else {
- bucketService.uploadObjects(userInfo, bucket, object, endpoint, stream, fileSize);
+ bucketService.uploadObject(userInfo, bucket, object, endpoint, stream, fileSize);
}
} catch (Exception e) {
log.error("Cannot upload object {} to bucket {}. {}", object, bucket, e.getMessage(), e);
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/BucketService.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/dto/FolderUploadDTO.java
similarity index 59%
copy from services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/BucketService.java
copy to services/self-service/src/main/java/com/epam/dlab/backendapi/resources/dto/FolderUploadDTO.java
index c1488e3..1539118 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/BucketService.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/dto/FolderUploadDTO.java
@@ -17,22 +17,19 @@
* under the License.
*/
-package com.epam.dlab.backendapi.service;
-
-import com.epam.dlab.dto.bucket.BucketDTO;
-
-import javax.servlet.http.HttpServletResponse;
-import java.io.InputStream;
-import java.util.List;
-
-public interface BucketService {
- String DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss";
-
- List<BucketDTO> getObjects(String bucket);
-
- void uploadObject(String bucket, String object, InputStream stream, long fileSize);
-
- void downloadObject(String bucket, String object, HttpServletResponse resp);
-
- void deleteObjects(String bucket, List<String> objects);
+package com.epam.dlab.backendapi.resources.dto;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import lombok.Data;
+import org.hibernate.validator.constraints.NotBlank;
+
+@Data
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class FolderUploadDTO {
+ @NotBlank(message = "field cannot be empty")
+ private final String bucket;
+ @NotBlank(message = "field cannot be empty")
+ private final String folder;
+ @NotBlank(message = "field cannot be empty")
+ private final String endpoint;
}
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/BucketService.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/BucketService.java
index 6e5345b..b1fec76 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/BucketService.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/BucketService.java
@@ -29,7 +29,9 @@ import java.util.List;
public interface BucketService {
List<BucketDTO> getObjects(UserInfo userInfo, String bucket, String endpoint);
- void uploadObjects(UserInfo userInfo, String bucket, String object, String endpoint, InputStream inputStream, long fileSize);
+ void uploadObject(UserInfo userInfo, String bucket, String object, String endpoint, InputStream inputStream, long fileSize);
+
+ void uploadFolder(UserInfo userInfo, String bucket, String folder, String endpoint);
void downloadObject(UserInfo userInfo, String bucket, String object, String endpoint, HttpServletResponse resp);
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/BucketServiceImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/BucketServiceImpl.java
index d305532..14af1d0 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/BucketServiceImpl.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/BucketServiceImpl.java
@@ -26,6 +26,7 @@ import com.epam.dlab.backendapi.service.EndpointService;
import com.epam.dlab.constants.ServiceConsts;
import com.epam.dlab.dto.bucket.BucketDTO;
import com.epam.dlab.dto.bucket.BucketDeleteDTO;
+import com.epam.dlab.dto.bucket.FolderUploadDTO;
import com.epam.dlab.exceptions.DlabException;
import com.epam.dlab.rest.client.RESTService;
import com.google.inject.Inject;
@@ -54,6 +55,7 @@ import static javax.ws.rs.core.MediaType.APPLICATION_OCTET_STREAM;
public class BucketServiceImpl implements BucketService {
private static final String BUCKET_GET_OBJECTS = "%sbucket/%s";
private static final String BUCKET_UPLOAD_OBJECT = "%sbucket/upload";
+ private static final String BUCKET_UPLOAD_FOLDER = "%sbucket/folder/upload";
private static final String BUCKET_DOWNLOAD_OBJECT = "%sbucket/%s/object/%s/download";
private static final String BUCKET_DELETE_OBJECT = "%sbucket/objects/delete";
@@ -79,7 +81,7 @@ public class BucketServiceImpl implements BucketService {
}
@Override
- public void uploadObjects(UserInfo userInfo, String bucket, String object, String endpoint, InputStream inputStream, long fileSize) {
+ public void uploadObject(UserInfo userInfo, String bucket, String object, String endpoint, InputStream inputStream, long fileSize) {
log.info("Uploading file {} for user {} to bucket {}", object, userInfo.getName(), bucket);
try {
EndpointDTO endpointDTO = endpointService.get(endpoint);
@@ -96,6 +98,23 @@ public class BucketServiceImpl implements BucketService {
}
@Override
+ public void uploadFolder(UserInfo userInfo, String bucket, String folder, String endpoint) {
+ log.info("Uploading folder {} for user {} to bucket {}", folder, userInfo.getName(), bucket);
+ try {
+ EndpointDTO endpointDTO = endpointService.get(endpoint);
+ FolderUploadDTO dto = new FolderUploadDTO(bucket, folder);
+ Response response = provisioningService.post(String.format(BUCKET_UPLOAD_FOLDER, endpointDTO.getUrl()), userInfo.getAccessToken(), dto, Response.class);
+ if (response.getStatus() != HttpStatus.SC_OK) {
+ throw new DlabException(String.format("Something went wrong. Response status is %s ", response.getStatus()));
+ }
+ } catch (Exception e) {
+ log.error("Cannot upload folder {} to bucket {} for user {}, endpoint {}. Reason {}", folder, bucket, userInfo.getName(), endpoint, e.getMessage());
+ throw new DlabException(String.format("Cannot upload object %s to bucket %s for user %s, endpoint %s. Reason %s", folder, bucket, userInfo.getName(), endpoint, e.getMessage()));
+ }
+ log.info("Finished uploading folder {} for user {} to bucket {}", folder, userInfo.getName(), bucket);
+ }
+
+ @Override
public void downloadObject(UserInfo userInfo, String bucket, String object, String endpoint, HttpServletResponse resp) {
log.info("Downloading file {} for user {} from bucket {}", object, userInfo.getName(), bucket);
EndpointDTO endpointDTO = endpointService.get(endpoint);
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@dlab.apache.org
For additional commands, e-mail: commits-help@dlab.apache.org