Uniform Storage access
This commit is contained in:
parent
42f3b14a8f
commit
0eb83ef6a8
|
@ -95,7 +95,6 @@
|
||||||
|
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
</project>
|
</project>
|
|
@ -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);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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() {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -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;
|
||||||
|
@ -29,93 +30,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 {
|
||||||
System.out.println(client.getCurrentConfiguration());
|
System.out.println(client.getCurrentConfiguration());
|
||||||
|
@ -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());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
|
@ -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){
|
public String getURL(String id){
|
||||||
IClient client=getClient();
|
return this.client.getHttpsUrl().RFile(id);
|
||||||
log.debug("Id is "+id);
|
|
||||||
return client.getHttpUrl().RFile(id);
|
|
||||||
}
|
}
|
||||||
|
public void exists(String id){
|
||||||
public static final void removeById(String id){
|
this.client.exist().RFile(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();
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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("Opening temp file {}",f);
|
||||||
|
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);
|
log.debug("Registered "+wsContent+" for "+content);
|
||||||
content.getActualContent().add(wsContent);
|
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()));
|
||||||
}
|
}
|
||||||
|
|
|
@ -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());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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));
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue