storagehub/src/main/java/org/gcube/data/access/storagehub/storage/backend/impl/GcubeDefaultS3StorageBacken...

74 lines
2.2 KiB
Java
Raw Normal View History

2021-12-03 16:55:54 +01:00
package org.gcube.data.access.storagehub.storage.backend.impl;
2022-03-28 18:27:18 +02:00
import java.io.IOException;
import java.io.InputStream;
2021-12-03 16:55:54 +01:00
import java.util.HashMap;
import java.util.Map;
2022-03-28 18:27:18 +02:00
import java.util.Properties;
2021-12-03 16:55:54 +01:00
import java.util.UUID;
2024-03-15 14:26:05 +01:00
import jakarta.annotation.PostConstruct;
import jakarta.inject.Singleton;
2021-12-03 16:55:54 +01:00
import org.gcube.common.storagehub.model.Constants;
import org.gcube.common.storagehub.model.Metadata;
import org.gcube.common.storagehub.model.exceptions.InvalidCallParameters;
import org.gcube.common.storagehub.model.items.nodes.PayloadBackend;
import org.gcube.common.storagehub.model.storages.StorageBackend;
import org.gcube.common.storagehub.model.storages.StorageBackendFactory;
@Singleton
2024-01-19 12:20:19 +01:00
public class GcubeDefaultS3StorageBackendFactory implements StorageBackendFactory {
2021-12-03 16:55:54 +01:00
private StorageBackend singleton;
2022-09-01 17:15:03 +02:00
private static final String PROP_PREFIX = "default.";
2021-12-03 16:55:54 +01:00
@PostConstruct
public void init(){
2022-06-16 12:17:21 +02:00
S3Backend s3Backend = new S3Backend(new PayloadBackend(getName(), getParameters()), (String) -> UUID.randomUUID().toString());
s3Backend.setPayloadConfiguration(new PayloadBackend(getName(),null));
this.singleton = s3Backend;
2021-12-03 16:55:54 +01:00
}
@Override
public String getName() {
2024-01-19 12:20:19 +01:00
return Constants.DEFAULT_S3_STORAGE;
2021-12-03 16:55:54 +01:00
}
@Override
public boolean isSystemStorage() {
return true;
}
2021-12-03 16:55:54 +01:00
@Override
public StorageBackend create(PayloadBackend payloadConfiguration) throws InvalidCallParameters {
2022-03-28 18:27:18 +02:00
if (payloadConfiguration.getParameters().isEmpty())
2021-12-03 16:55:54 +01:00
return singleton;
2022-03-28 18:27:18 +02:00
2024-01-24 16:32:18 +01:00
throw new InvalidCallParameters("S3 created with not empty parameters");
2021-12-03 16:55:54 +01:00
}
2022-03-28 18:27:18 +02:00
private Metadata getParameters(){
2024-01-19 12:20:19 +01:00
try (InputStream input = GcubeDefaultS3StorageBackendFactory.class.getClassLoader().getResourceAsStream("storage-settings.properties")) {
2022-03-28 18:27:18 +02:00
Properties prop = new Properties();
prop.load(input);
Map<String, Object> params = new HashMap<String, Object>();
2022-09-01 17:15:03 +02:00
2022-03-28 18:27:18 +02:00
2023-05-05 15:58:13 +02:00
prop.forEach((k,v) -> { if (k.toString().startsWith(PROP_PREFIX)) params.put(k.toString().replace(PROP_PREFIX, ""), v);});
return new Metadata(params);
2022-03-28 18:27:18 +02:00
} catch (IOException ex) {
2024-01-19 12:20:19 +01:00
throw new RuntimeException("error initializing S3", ex);
2022-03-28 18:27:18 +02:00
}
}
2021-12-03 16:55:54 +01:00
}