Uniform Storage access

This commit is contained in:
Fabio Sinibaldi 2021-09-27 15:23:03 +02:00
parent 42f3b14a8f
commit 0eb83ef6a8
11 changed files with 219 additions and 159 deletions

View File

@ -95,7 +95,6 @@
</dependency> </dependency>
</dependencies> </dependencies>
</project> </project>

View File

@ -18,7 +18,7 @@ import java.net.URL;
public class StorageTests { public class StorageTests {
public static void main(String[] args) throws IOException { public static void main(String[] args) throws IOException {
String filename= "relazione.pdf"; // String filename= "relazione.pdf";
// String sourceContext="/d4science.research-infrastructures.eu"; // String sourceContext="/d4science.research-infrastructures.eu";
// String targetContext="/pred4s/preprod/preVRE"; // String targetContext="/pred4s/preprod/preVRE";
@ -29,16 +29,20 @@ public class StorageTests {
// StorageHubClient sgClient=new StorageHubClient(); // StorageHubClient sgClient=new StorageHubClient();
// System.out.println(new StorageUtils().getUrlById(file.getId())); // System.out.println(new StorageUtils().getUrlById(file.getId()));
TokenSetter.set(targetContext); TokenSetter.set(targetContext);
System.out.println(new StorageUtils().getURL("e6b5d48d-b37d-4280-900d-f407a1ddc7d3"));
System.out.println(new File(".").getAbsolutePath());
TempFile file= new StorageUtils().putOntoStorage(new File(TestModel.getBaseFolder(),filename),filename);
IOUtils.copy(new URL(StorageUtils.getUrlById(file.getId())).openStream(),System.out); // System.out.println(new File(".").getAbsolutePath());
// TempFile file= new StorageUtils().putOntoStorage(new File(TestModel.getBaseFolder(),filename),filename);
//
// IOUtils.copy(new URL(StorageUtils.getUrlById(file.getId())).openStream(),System.out);
} }
} }

View File

@ -50,7 +50,7 @@ public class StatefulClientTests extends BasicVreTests{
//Alternative Method //Alternative Method
InputStreamDescriptor isDesc= InputStreamDescriptor isDesc=
new InputStreamDescriptor(new FileInputStream(new File(TestModel.getBaseFolder(), new InputStreamDescriptor(new FileInputStream(new File(TestModel.getBaseFolder(),
"immagine.png")), "immagine.png"); "immagine.png")), "San Mauro_drone totale.JPG");
manager.addImmagineRappresentativa(toRegisterImg, isDesc); manager.addImmagineRappresentativa(toRegisterImg, isDesc);
@ -67,13 +67,17 @@ public class StatefulClientTests extends BasicVreTests{
// Posizionamento scavo // Posizionamento scavo
manager.setPosizionamento(source.getPosizionamentoScavo(), manager.setPosizionamento(source.getPosizionamentoScavo(),
storage.putOntoStorage(new File(TestModel.getBaseFolder(),"pos.shp"), "pos.shp")); storage.putOntoStorage(
new File(TestModel.getBaseFolder(),"pos.shp"),"pos.shp"));
// Piante // Piante
manager.addPiantaFineScavo(source.getPianteFineScavo().get(0), manager.addPiantaFineScavo(source.getPianteFineScavo().get(0),
storage.putOntoStorage(new File(TestModel.getBaseFolder(),"pianta.shp"), "pianta.shp"), storage.putOntoStorage(
storage.putOntoStorage(new File(TestModel.getBaseFolder(),"pianta.shx"), "pianta.shx")); new File(TestModel.getBaseFolder(),"pianta.shp"),"pianta.shp"));
// new File("/Users/fabioisti/Documents/invio_08_05/Montalto di Castro (VT)_Vulci_Indagini non invasive_Doc. paragr._Va/CONSEGNA_WGS84")
// .listFiles((file,name)->{return name.startsWith("Mag_anomalies_WGS84");})));
return manager.publish(); return manager.publish();
} }
@ -111,18 +115,5 @@ public class StatefulClientTests extends BasicVreTests{
manager.delete(); manager.delete();
} }
@Test
public void replace() {
}
@Test
public void getById() {
}
@Test
public void list() {
}
} }

View File

@ -2,6 +2,7 @@ package org.gcube.application.geoportal.clients;
import static org.gcube.application.geoportal.client.GeoportalAbstractPlugin.mongoConcessioni; import static org.gcube.application.geoportal.client.GeoportalAbstractPlugin.mongoConcessioni;
import static org.junit.Assert.*; import static org.junit.Assert.*;
import static org.junit.Assume.assumeTrue;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
@ -28,93 +29,6 @@ public class StatelessClientTests extends BasicVreTests{
private MongoConcessioni client=mongoConcessioni().build(); private MongoConcessioni client=mongoConcessioni().build();
@Test
public void testCreateNew() throws Exception {
Concessione c= client.createNew(TestModel.prepareEmptyConcessione());
assertNotNull(c);
assertNotNull(c.getMongo_id());
}
@Test
public void testDeleteById() throws Exception {
Concessione c= client.createNew(TestModel.prepareEmptyConcessione());
client.deleteById(c.getMongo_id());
}
@Test
public void testList() throws Exception {
final AtomicLong counter=new AtomicLong();
long before=System.currentTimeMillis();
client.getList().forEachRemaining((Concessione c)-> {counter.addAndGet(1);});
System.out.println("Loaded "+counter+" in "+(System.currentTimeMillis()-before)+" ms");
}
@Test
public void testReplace() throws Exception {
Concessione c= client.createNew(TestModel.prepareEmptyConcessione());
String title="My new shiny Title";
c.setNome(title);
Concessione c1=client.replace(c);
assertEquals(title, c1.getNome());
}
@Test
public void testUploadFileSet() throws Exception {
Concessione c= client.createNew(TestModel.prepareConcessione());
assertNotNull(c.getRelazioneScavo());
AddSectionToConcessioneRequest request=
FileSets.prepareRequest(new StorageUtils(),Paths.RELAZIONE,new File(TestModel.getBaseFolder(),"relazione.pdf"));
c= client.registerFileSet(c.getMongo_id(), request);
assertNotNull(c.getRelazioneScavo().getActualContent());
assertNotNull(c.getRelazioneScavo().getActualContent().get(0));
}
@Test
public void testPublsh() throws Exception {
publish(true);
}
public Concessione publish(Boolean verify) throws Exception {
return publish(verify,client);
}
public static Concessione publish(Boolean verify,MongoConcessioni client) throws Exception {
Concessione c= client.createNew(TestModel.prepareConcessione(1,1));
StorageUtils storage = new StorageUtils();
String mongoId=c.getMongo_id();
client.registerFileSet(mongoId,
FileSets.prepareRequest(storage,Paths.RELAZIONE,new File(TestModel.getBaseFolder(),"relazione.pdf")));
client.registerFileSet(mongoId,
FileSets.prepareRequest(storage,Paths.RELAZIONE,new File(TestModel.getBaseFolder(),"relazione.pdf")));
client.registerFileSet(mongoId,
FileSets.prepareRequest(storage,Paths.imgByIndex(0),new File(TestModel.getBaseFolder(),"immagine.png")));
client.registerFileSet(mongoId,
FileSets.prepareRequest(storage,Paths.POSIZIONAMENTO,new File(TestModel.getBaseFolder(),"pos.shp")));
client.registerFileSet(mongoId,
FileSets.prepareRequest(storage,Paths.piantaByIndex(0),new File(TestModel.getBaseFolder(),"pianta.shp")));
c=client.publish(mongoId);
if(verify)
assertTrue(c.getReport().getStatus().equals(ValidationStatus.PASSED));
return c;
}
@Test @Test
public void getConfiguration() throws Exception { public void getConfiguration() throws Exception {
@ -167,23 +81,99 @@ public class StatelessClientTests extends BasicVreTests{
// } // }
} }
@Test
public void testList() throws Exception {
final AtomicLong counter=new AtomicLong();
long before=System.currentTimeMillis();
client.getList().forEachRemaining((Concessione c)-> {counter.addAndGet(1);});
System.out.println("Loaded "+counter+" in "+(System.currentTimeMillis()-before)+" ms");
}
@Test
public void testCreateNew() throws Exception {
Concessione c= client.createNew(TestModel.prepareEmptyConcessione());
assertNotNull(c);
assertNotNull(c.getMongo_id());
}
@Test
public void testReplace() throws Exception {
Concessione testObject= client.createNew(TestModel.prepareEmptyConcessione());
String title="My new shiny Title";
testObject.setNome(title);
Concessione c1=client.replace(testObject);
assertEquals(title, c1.getNome());
}
@Test
public void testUploadFileSet() throws Exception {
Concessione testObject= client.createNew(TestModel.prepareEmptyConcessione());
AddSectionToConcessioneRequest request=
// FileSets.prepareRequest(new StorageUtils(),Paths.RELAZIONE,new File(TestModel.getBaseFolder(),"relazione.pdf"));
FileSets.build(Paths.ABSTRACT_RELAZIONE).add(
new StorageUtils().putOntoStorage(new File(TestModel.getBaseFolder(),"relazione.pdf"),"San Mauro_drone totale.JPG"))
.getTheRequest();
testObject= client.registerFileSet(testObject.getMongo_id(), request);
assertNotNull(testObject.getContentByPath(Paths.ABSTRACT_RELAZIONE).getActualContent());
assertNotNull(testObject.getContentByPath(Paths.ABSTRACT_RELAZIONE).getActualContent().get(0));
}
@Test
public void testDeleteById() throws Exception {
Concessione c= client.createNew(TestModel.prepareEmptyConcessione());
client.deleteById(c.getMongo_id());
}
@Test
public Concessione testPublsh() throws Exception {
Concessione c= client.createNew(TestModel.prepareConcessione(1,1));
StorageUtils storage = new StorageUtils();
String mongoId=c.getMongo_id();
client.registerFileSet(mongoId,
FileSets.prepareRequest(storage,Paths.RELAZIONE,new File(TestModel.getBaseFolder(),"relazione.pdf")));
client.registerFileSet(mongoId,
FileSets.prepareRequest(storage,Paths.RELAZIONE,new File(TestModel.getBaseFolder(),"relazione.pdf")));
client.registerFileSet(mongoId,
FileSets.prepareRequest(storage,Paths.imgByIndex(0),new File(TestModel.getBaseFolder(),"immagine.png")));
client.registerFileSet(mongoId,
FileSets.prepareRequest(storage,Paths.POSIZIONAMENTO,new File(TestModel.getBaseFolder(),"pos.shp")));
client.registerFileSet(mongoId,
FileSets.prepareRequest(storage,Paths.piantaByIndex(0),new File(TestModel.getBaseFolder(),"pianta.shp")));
c=client.publish(mongoId);
assertTrue(c.getReport().getStatus().equals(ValidationStatus.PASSED));
return c;
}
@Test @Test
public void testCleanFileSet() throws Exception { public void testCleanFileSet() throws Exception {
Concessione c=publish(false); Concessione testObject=testPublsh();
client.unPublish(c.getMongo_id());
//Precheck to be sure //Precheck to be sure
assertFalse(c.getPosizionamentoScavo().getActualContent().isEmpty()); assertFalse(testObject.getPosizionamentoScavo().getActualContent().isEmpty());
assertFalse(c.getPianteFineScavo().get(0).getActualContent().isEmpty()); assertFalse(testObject.getPianteFineScavo().get(0).getActualContent().isEmpty());
//Clear pos //Clear pos
c=client.cleanFileSet(c.getMongo_id(),Paths.POSIZIONAMENTO); testObject=client.cleanFileSet(testObject.getMongo_id(),Paths.POSIZIONAMENTO);
assertTrue(c.getPosizionamentoScavo().getActualContent().isEmpty()); assertTrue(testObject.getPosizionamentoScavo().getActualContent().isEmpty());
//Clear pianta [0] //Clear pianta [0]
c=client.cleanFileSet(c.getMongo_id(),Paths.piantaByIndex(0)); testObject =client.cleanFileSet(testObject.getMongo_id(),Paths.piantaByIndex(0));
assertTrue(c.getPianteFineScavo().get(0).getActualContent().isEmpty()); assertTrue(testObject.getPianteFineScavo().get(0).getActualContent().isEmpty());
} }

View File

@ -0,0 +1,23 @@
package org.gcube.application.geoportal.common.faults;
public class PathException extends Exception{
public PathException() {
}
public PathException(String message) {
super(message);
}
public PathException(String message, Throwable cause) {
super(message, cause);
}
public PathException(Throwable cause) {
super(cause);
}
public PathException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
}

View File

@ -0,0 +1,22 @@
package org.gcube.application.geoportal.common.faults;
public class StorageException extends Exception{
public StorageException() {
}
public StorageException(String message) {
super(message);
}
public StorageException(String message, Throwable cause) {
super(message, cause);
}
public StorageException(Throwable cause) {
super(cause);
}
public StorageException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
}

View File

@ -20,7 +20,8 @@ import lombok.extern.slf4j.Slf4j;
public class StorageUtils { public class StorageUtils {
public static final IClient getClient(){ public static final IClient getClient(){
return new StorageClient(InterfaceConstants.SERVICE_CLASS, InterfaceConstants.SERVICE_NAME, ContextUtils.getCurrentCaller(), AccessType.SHARED, MemoryType.VOLATILE).getClient(); return new StorageClient(InterfaceConstants.SERVICE_CLASS, InterfaceConstants.SERVICE_NAME,
ContextUtils.getCurrentCaller(), AccessType.SHARED, MemoryType.VOLATILE).getClient();
} }
private IClient client; private IClient client;
@ -42,26 +43,31 @@ public class StorageUtils {
else throw new FileNotFoundException("Unable to read "+filename); else throw new FileNotFoundException("Unable to read "+filename);
} }
public TempFile[] putOntoStorage(File... source) throws RemoteBackendException, FileNotFoundException{
TempFile[] toReturn=new TempFile[source.length];
for (int i = 0; i < source.length; i++) {
toReturn[i]=putOntoStorage(source[i],source[i].getName());
}
return toReturn;
}
public TempFile putOntoStorage(String sourcePath, String filename) throws RemoteBackendException, FileNotFoundException{ public TempFile putOntoStorage(String sourcePath, String filename) throws RemoteBackendException, FileNotFoundException{
return putOntoStorage(new File(sourcePath),filename); return putOntoStorage(new File(sourcePath),filename);
} }
public static final boolean checkStorageId(String id){
return getClient().getHttpUrl().RFile(id)!=null; public void removeById(String id){
} this.client.remove().RFile(id);
}
public static final String getUrlById(String id){
IClient client=getClient(); public String getURL(String id){
log.debug("Id is "+id); return this.client.getHttpsUrl().RFile(id);
return client.getHttpUrl().RFile(id); }
} public void exists(String id){
this.client.exist().RFile(id);
public static final void removeById(String id){
IClient client=getClient();
client.remove().RFile(id);
} }
public static final String getUniqueString(){ public static final String getUniqueString(){
return UUID.randomUUID().toString(); return UUID.randomUUID().toString();
} }

View File

@ -2,6 +2,7 @@ package org.gcube.application.geoportal.service.engine;
import lombok.*; import lombok.*;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.gcube.application.geoportal.common.faults.PathException;
import org.gcube.application.geoportal.common.model.legacy.WorkspaceContent; import org.gcube.application.geoportal.common.model.legacy.WorkspaceContent;
import org.gcube.application.geoportal.common.utils.Files; import org.gcube.application.geoportal.common.utils.Files;
import org.gcube.application.geoportal.service.model.internal.faults.ConfigurationException; import org.gcube.application.geoportal.service.model.internal.faults.ConfigurationException;

View File

@ -6,12 +6,15 @@ import lombok.Synchronized;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.bson.Document; import org.bson.Document;
import org.bson.types.ObjectId; import org.bson.types.ObjectId;
import org.gcube.application.geoportal.common.faults.PathException;
import org.gcube.application.geoportal.common.faults.StorageException;
import org.gcube.application.geoportal.common.model.legacy.*; import org.gcube.application.geoportal.common.model.legacy.*;
import org.gcube.application.geoportal.common.model.legacy.report.ValidationReport; import org.gcube.application.geoportal.common.model.legacy.report.ValidationReport;
import org.gcube.application.geoportal.common.model.legacy.report.ValidationReport.ValidationStatus; import org.gcube.application.geoportal.common.model.legacy.report.ValidationReport.ValidationStatus;
import org.gcube.application.geoportal.common.model.rest.QueryRequest; import org.gcube.application.geoportal.common.model.rest.QueryRequest;
import org.gcube.application.geoportal.common.rest.TempFile; import org.gcube.application.geoportal.common.rest.TempFile;
import org.gcube.application.geoportal.common.utils.Files; import org.gcube.application.geoportal.common.utils.Files;
import org.gcube.application.geoportal.common.utils.StorageUtils;
import org.gcube.application.geoportal.service.engine.ImplementationProvider; import org.gcube.application.geoportal.service.engine.ImplementationProvider;
import org.gcube.application.geoportal.service.engine.SDIManager; import org.gcube.application.geoportal.service.engine.SDIManager;
import org.gcube.application.geoportal.service.engine.WorkspaceManager; import org.gcube.application.geoportal.service.engine.WorkspaceManager;
@ -22,10 +25,12 @@ import org.gcube.application.geoportal.service.engine.providers.StorageClientPro
import org.gcube.application.geoportal.service.model.internal.faults.*; import org.gcube.application.geoportal.service.model.internal.faults.*;
import org.gcube.application.geoportal.service.utils.Serialization; import org.gcube.application.geoportal.service.utils.Serialization;
import org.gcube.common.storagehub.client.dsl.FolderContainer; import org.gcube.common.storagehub.client.dsl.FolderContainer;
import org.gcube.common.storagehub.model.exceptions.StorageHubException;
import org.gcube.data.transfer.library.faults.RemoteServiceException; import org.gcube.data.transfer.library.faults.RemoteServiceException;
import java.io.IOException; import java.io.IOException;
import java.net.MalformedURLException; import java.net.MalformedURLException;
import java.net.URL;
import java.sql.SQLException; import java.sql.SQLException;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
@ -261,6 +266,7 @@ public class ConcessioniMongoManager extends MongoManager{
log.info("Persisting {} files for path {} in concessione ",files.size(),destinationPath,id); log.info("Persisting {} files for path {} in concessione ",files.size(),destinationPath,id);
try{ try{
Concessione c = getById(id); Concessione c = getById(id);
StorageUtils storage=ImplementationProvider.get().getStorageProvider().getObject();
WorkspaceManager ws=new WorkspaceManager(); WorkspaceManager ws=new WorkspaceManager();
//Check Init Base folder //Check Init Base folder
FolderContainer baseFolder=null; FolderContainer baseFolder=null;
@ -276,7 +282,7 @@ public class ConcessioniMongoManager extends MongoManager{
AssociatedContent section=c.getContentByPath(destinationPath); AssociatedContent section=c.getContentByPath(destinationPath);
log.debug("Found section {} for path {}",section,destinationPath); log.debug("Found section {} for path {}",section,destinationPath);
store(section,files,ws,baseFolder); store(section,files,ws,storage,baseFolder);
log.debug("Updating dafults for {} ",c); log.debug("Updating dafults for {} ",c);
c.setDefaults(); c.setDefaults();
return asConcessione(replace(asDocument(c),collectionName)); return asConcessione(replace(asDocument(c),collectionName));
@ -398,7 +404,7 @@ public class ConcessioniMongoManager extends MongoManager{
private static final void store(AssociatedContent content,List<TempFile> files, WorkspaceManager ws, FolderContainer base) throws Exception { private static final void store(AssociatedContent content,List<TempFile> files, WorkspaceManager ws, StorageUtils storage, FolderContainer base) throws StorageHubException, StorageException, PathException {
FolderContainer sectionParent=null; FolderContainer sectionParent=null;
if(content instanceof RelazioneScavo) if(content instanceof RelazioneScavo)
@ -419,18 +425,26 @@ public class ConcessioniMongoManager extends MongoManager{
if(content instanceof LayerConcessione) if(content instanceof LayerConcessione)
sectionParent = ws .createFolder(new FolderOptions( sectionParent = ws .createFolder(new FolderOptions(
content.getTitolo(),"Layer Concessione : "+content.getTitolo(),ws.getSubFolder(base,"layers"))); content.getTitolo(),"Layer Concessione : "+content.getTitolo(),ws.getSubFolder(base,"layers")));
else throw new Exception("Invalid SDI Content "+content); else throw new PathException("Invalid SDI Content "+content);
else if (content instanceof OtherContent ) else if (content instanceof OtherContent )
sectionParent = ws .createFolder(new FolderOptions( sectionParent = ws .createFolder(new FolderOptions(
content.getTitolo(),"Relazione di scavo : "+content.getTitolo(),ws.getSubFolder(base,"other"))); content.getTitolo(),"Relazione di scavo : "+content.getTitolo(),ws.getSubFolder(base,"other")));
else throw new Exception("Invalid Content "+content); else throw new PathException("Invalid Content "+content);
content.setActualContent(new ArrayList<PersistedContent>()); content.setActualContent(new ArrayList<PersistedContent>());
StorageClientProvider storage=ImplementationProvider.get().getStorageProvider();
for(TempFile f : files) { for(TempFile f : files) {
WorkspaceContent wsContent=ws.storeToWS(new FileOptions(f.getFilename(), storage.open(f.getId()), "Imported via GeoPortal", sectionParent)); try{
log.debug("Registered "+wsContent+" for "+content); log.debug("Opening temp file {}",f);
content.getActualContent().add(wsContent); String fileUrl=storage.getURL(f.getId());
log.debug("Got URL {} from ID {}",fileUrl,f.getId());
WorkspaceContent wsContent=ws.storeToWS(new FileOptions(f.getFilename(),new URL(fileUrl).openStream(),
"Imported via GeoPortal", sectionParent));
log.debug("Registered "+wsContent+" for "+content);
content.getActualContent().add(wsContent);
}catch(StorageHubException | IOException e){
throw new StorageException("Unable to store "+f,e);
}
} }
content.setMongo_id(asString(new ObjectId())); content.setMongo_id(asString(new ObjectId()));
} }

View File

@ -2,6 +2,7 @@ package org.gcube.application.geoportal.service.engine.providers;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.gcube.application.geoportal.common.rest.InterfaceConstants; import org.gcube.application.geoportal.common.rest.InterfaceConstants;
import org.gcube.application.geoportal.common.utils.StorageUtils;
import org.gcube.application.geoportal.service.model.internal.faults.ConfigurationException; import org.gcube.application.geoportal.service.model.internal.faults.ConfigurationException;
import org.gcube.application.geoportal.service.utils.ContextUtils; import org.gcube.application.geoportal.service.utils.ContextUtils;
import org.gcube.contentmanagement.blobstorage.service.IClient; import org.gcube.contentmanagement.blobstorage.service.IClient;
@ -18,7 +19,7 @@ import java.net.URL;
import java.time.Duration; import java.time.Duration;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
@Slf4j @Slf4j
public class StorageClientProvider extends AbstractScopedMap<IClient> { public class StorageClientProvider extends AbstractScopedMap<StorageUtils> {
@ -28,12 +29,13 @@ public class StorageClientProvider extends AbstractScopedMap<IClient> {
} }
@Override @Override
protected IClient retrieveObject() throws ConfigurationException { protected StorageUtils retrieveObject() throws ConfigurationException {
return new StorageClient(InterfaceConstants.SERVICE_CLASS, InterfaceConstants.SERVICE_NAME, ContextUtils.getCurrentCaller(), AccessType.SHARED, MemoryType.VOLATILE).getClient(); return new StorageUtils();
// return new StorageClient(InterfaceConstants.SERVICE_CLASS, InterfaceConstants.SERVICE_NAME, ContextUtils.getCurrentCaller(), AccessType.SHARED, MemoryType.VOLATILE).getClient();
} }
@Override @Override
protected void dispose(IClient toDispose) { protected void dispose(StorageUtils toDispose) {
try { try {
//TODO ASK //TODO ASK
// toDispose.close(); // toDispose.close();
@ -49,16 +51,4 @@ public class StorageClientProvider extends AbstractScopedMap<IClient> {
} }
//wrapping methods
public InputStream open(String id) throws MalformedURLException, RemoteBackendException, IOException, ConfigurationException {
return new URL(getObject().getHttpsUrl().RFileById(id)).openConnection().getInputStream();
}
public String store(InputStream is) throws RemoteBackendException, ConfigurationException {
return getObject().put(true).LFile(is).RFile(Utils.getUniqueString());
}
} }

View File

@ -0,0 +1,20 @@
package org.gcube.application.geoportal.service;
import org.gcube.application.geoportal.common.utils.StorageUtils;
import org.gcube.application.geoportal.service.engine.ImplementationProvider;
import org.gcube.application.geoportal.service.engine.providers.StorageClientProvider;
import org.gcube.application.geoportal.service.model.internal.faults.ConfigurationException;
import java.io.IOException;
public class StorageTests {
public static void main(String[] args) throws ConfigurationException, IOException {
TokenSetter.set("/gcube/devsec/devVRE");
StorageClientProvider storage= ImplementationProvider.get().getStorageProvider();
String id="614de23b647cef06aecdfb28";
System.out.println("FROM PROVIDER " + storage.getObject().getURL(id));
System.out.println("FROM CLASS" +new StorageUtils().getURL(id));
}
}