storage-manager-s3-plugin/src/main/java/org/gcube/contentmanagement/blobstorage/transport/plugin/S3PluginManager.java

258 lines
8.5 KiB
Java
Raw Normal View History

2020-11-06 13:10:40 +01:00
package org.gcube.contentmanagement.blobstorage.transport.plugin;
import java.io.File;
2020-11-06 13:10:40 +01:00
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.UnknownHostException;
import java.util.List;
import java.util.Map;
2020-12-22 17:58:25 +01:00
import java.util.Objects;
2020-11-06 13:10:40 +01:00
import org.gcube.contentmanagement.blobstorage.resource.MemoryType;
2020-12-22 17:58:25 +01:00
import org.gcube.contentmanagement.blobstorage.resource.RequestObject;
2020-11-06 13:10:40 +01:00
import org.gcube.contentmanagement.blobstorage.resource.StorageObject;
import org.gcube.contentmanagement.blobstorage.service.operation.Copy;
import org.gcube.contentmanagement.blobstorage.service.operation.CopyDir;
import org.gcube.contentmanagement.blobstorage.service.operation.Download;
import org.gcube.contentmanagement.blobstorage.service.operation.DuplicateFile;
import org.gcube.contentmanagement.blobstorage.service.operation.Link;
import org.gcube.contentmanagement.blobstorage.service.operation.Lock;
import org.gcube.contentmanagement.blobstorage.service.operation.Move;
import org.gcube.contentmanagement.blobstorage.service.operation.MoveDir;
import org.gcube.contentmanagement.blobstorage.service.operation.Unlock;
import org.gcube.contentmanagement.blobstorage.service.operation.Upload;
import org.gcube.contentmanagement.blobstorage.transport.TransportManager;
2020-11-06 15:43:40 +01:00
2020-11-06 13:10:40 +01:00
import org.gcube.contentmanagement.blobstorage.transport.backend.RemoteBackendException;
import org.gcube.contentmanagement.blobstorage.transport.plugin.Utils.Utils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
2020-11-06 13:10:40 +01:00
import java.net.URI;
import software.amazon.awssdk.auth.credentials.AwsSessionCredentials;
import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
2020-11-06 13:10:40 +01:00
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.s3.S3Client;
import com.mongodb.MongoException;
public class S3PluginManager extends TransportManager {
2020-11-10 18:09:25 +01:00
2020-11-06 13:10:40 +01:00
S3Client s3;
private Logger logger = LoggerFactory.getLogger(S3PluginManager.class);
2021-01-07 16:00:52 +01:00
private Region region;
2020-12-22 17:58:25 +01:00
private String token;
2020-11-06 13:10:40 +01:00
2020-12-22 17:58:25 +01:00
2020-11-06 13:10:40 +01:00
@Override
public String getName() {
return "S3";
2020-11-06 13:10:40 +01:00
}
public S3PluginManager() {
logger.info("S3");
}
2020-11-06 13:10:40 +01:00
public S3PluginManager(String[] server, String user, String pass, MemoryType memoryType, String[] dbNames,
2020-12-22 17:58:25 +01:00
String writeConcern, String readConcern, String token, String region) {
initBackend(server,user,pass, memoryType,dbNames, writeConcern, readConcern, token, region);
2020-11-06 13:10:40 +01:00
}
2020-11-06 13:10:40 +01:00
@Override
public void initBackend(String[] server, String accessKey, String secretAccessKey, MemoryType memoryType, String[] dbNames,
2020-12-22 17:58:25 +01:00
String writeConcern, String readConcern, String token, String region) {
this.memoryType=memoryType;
2020-12-22 17:58:25 +01:00
AwsSessionCredentials awsCreds =null;
if(!Objects.isNull(getToken()))
awsCreds = AwsSessionCredentials.create(accessKey, secretAccessKey, token);
else
awsCreds = AwsSessionCredentials.create(accessKey, secretAccessKey, "");
this.region = Region.of(region);
s3 = S3Client.builder().credentialsProvider(
StaticCredentialsProvider.create(awsCreds))
2020-12-22 17:58:25 +01:00
.endpointOverride(URI.create(server[0])).region(this.region).build();
}
2021-01-07 16:00:52 +01:00
2020-11-06 13:10:40 +01:00
@Override
public Object get(Download download) throws FileNotFoundException, IOException {
2021-01-07 15:29:50 +01:00
String bucketName=Utils.convertToS3Format(download.getResource().getRootPath());
return BucketOperator.getInstance(s3).getObject(bucketName, Utils.convertToS3Format(download.getResource().getRemotePath()), download.getLocalPath());
2020-11-06 13:10:40 +01:00
}
@Override
public String put(Upload upload) throws FileNotFoundException, IOException {
logger.trace("put method invoked ");
String bucketName=Utils.convertToS3Format(upload.getResource().getRootPath());
if (!BucketOperator.isBucket(s3, bucketName))
BucketOperator.createBucketWaiter(s3, bucketName, region);
File file= new File(upload.getResource().getLocalPath());
return BucketOperator.getInstance(s3).putObject(bucketName, Utils.convertToS3Format(upload.getResource().getRemotePath()), file, upload.isReplaceOption());
2020-11-06 13:10:40 +01:00
}
@Override
2020-12-22 17:58:25 +01:00
public Map<String, StorageObject> getValues(RequestObject resource, String bucket, Class<? extends Object> type) {
2020-11-06 13:10:40 +01:00
throw new RemoteBackendException("method not implemented yet on s3 plugin");
}
@Override
2020-12-22 17:58:25 +01:00
public void removeRemoteFile(String bucket, RequestObject resource) throws UnknownHostException {
2021-01-07 15:56:54 +01:00
BucketOperator.getInstance(s3).deleteObject(Utils.convertToS3Format(resource.getRootPath()), Utils.convertToS3Format(resource.getRemotePath()));
2020-11-06 13:10:40 +01:00
}
@Override
2020-12-22 17:58:25 +01:00
public void removeDir(String remoteDir, RequestObject myFile) throws UnknownHostException {
2020-11-06 13:10:40 +01:00
throw new RemoteBackendException("method not implemented yet on s3 plugin");
}
@Override
2020-12-22 17:58:25 +01:00
public long getSize(String key, RequestObject file) {
logger.info("remoteObject identifier "+key);
try {
return BucketOperator.getObjectSize(Utils.convertToS3Format(file.getRootPath()), Utils.convertToS3Format(file.getRemotePath()));
} catch (IOException e) {
e.printStackTrace();
throw new RemoteBackendException("Problem during getSize Operation on s3 cloud storage");
}
2020-11-06 13:10:40 +01:00
}
@Override
public String lock(Lock lock) throws Exception {
throw new RemoteBackendException("method not implemented yet on s3 plugin");
}
@Override
public String unlock(Unlock unlock) throws FileNotFoundException, UnknownHostException, MongoException, Exception {
throw new RemoteBackendException("method not implemented yet on s3 plugin");
}
@Override
public long getTTL(String pathServer) throws UnknownHostException {
throw new RemoteBackendException("method not implemented yet on s3 plugin");
}
@Override
2020-12-22 17:58:25 +01:00
public long renewTTL(RequestObject resource) throws UnknownHostException, IllegalAccessException {
2020-11-06 13:10:40 +01:00
throw new RemoteBackendException("method not implemented yet on s3 plugin");
}
@Override
public String link(Link link) throws UnknownHostException {
throw new RemoteBackendException("method not implemented yet on s3 plugin");
}
@Override
public String copy(Copy copy) throws UnknownHostException {
throw new RemoteBackendException("method not implemented yet on s3 plugin");
}
@Override
public String move(Move move) throws UnknownHostException {
throw new RemoteBackendException("method not implemented yet on s3 plugin");
}
@Override
public List<String> copyDir(CopyDir copy) throws UnknownHostException {
throw new RemoteBackendException("method not implemented yet on s3 plugin");
}
@Override
public List<String> moveDir(MoveDir move) throws UnknownHostException {
throw new RemoteBackendException("method not implemented yet on s3 plugin");
}
@Override
public String getFileProperty(String remotePath, String property) {
throw new RemoteBackendException("method not implemented yet on s3 plugin");
}
@Override
public long getFolderTotalItems(String folderPath) {
throw new RemoteBackendException("method not implemented yet on s3 plugin");
}
@Override
public long getFolderTotalVolume(String folderPath) {
throw new RemoteBackendException("method not implemented yet on s3 plugin");
}
@Override
public String getUserTotalVolume(String user) {
throw new RemoteBackendException("method not implemented yet on s3 plugin");
}
@Override
public String getUserTotalItems(String user) {
throw new RemoteBackendException("method not implemented yet on s3 plugin");
}
@Override
public boolean isValidId(String id) {
throw new RemoteBackendException("method not implemented yet on s3 plugin");
}
@Override
public String getId(String remoteIdentifier, boolean forceCreation) {
throw new RemoteBackendException("method not implemented yet on s3 plugin");
}
@Override
public String getField(String remoteIdentifier, String fieldName) throws UnknownHostException {
throw new RemoteBackendException("method not implemented yet on s3 plugin");
}
@Override
public void close() {
s3.close();
}
@Override
public void forceClose() {
s3.close();
}
2020-11-06 13:10:40 +01:00
@Override
public void setFileProperty(String remotePath, String propertyField, String propertyValue) {
throw new RemoteBackendException("method not implemented yet on s3 plugin");
}
@Override
public String getRemotePath(String bucket) throws UnknownHostException {
throw new RemoteBackendException("method not implemented yet on s3 plugin");
}
@Override
public boolean exist(String bucket) {
throw new RemoteBackendException("method not implemented yet on s3 plugin");
}
@Override
public String duplicateFile(DuplicateFile duplicate) {
throw new RemoteBackendException("method not implemented yet on s3 plugin");
}
2020-12-22 17:58:25 +01:00
protected String getToken() {
return token;
}
protected void setToken(String token) {
this.token = token;
}
2020-11-06 13:10:40 +01:00
2020-11-06 13:10:40 +01:00
}