Edit FileSet features and utilities

This commit is contained in:
Fabio Sinibaldi 2021-09-03 18:25:27 +02:00
parent 220e8f0354
commit 27a326ea33
7 changed files with 222 additions and 54 deletions

View File

@ -193,7 +193,7 @@ public class DefaultMongoConcessioni implements MongoConcessioni{
@Override
public Concessione registerFile(String id, AddSectionToConcessioneRequest request) throws Exception {
public Concessione registerFileSet(String id, AddSectionToConcessioneRequest request) throws Exception {
log.info("Registering {} in {}",request,id);
Call<WebTarget,Concessione> call= new Call<WebTarget,Concessione>(){
@Override
@ -205,7 +205,24 @@ public class DefaultMongoConcessioni implements MongoConcessioni{
}
};
Concessione toReturn = delegate.make(call);
log.debug("Published {} ",toReturn);
log.debug("Registered Fileset {} result is {} ",request,toReturn);
return toReturn;
}
@Override
public Concessione cleanFileSet(String id, String path)throws Exception{
log.info("Cleaning Fileset at {} in {}",path,id);
Call<WebTarget,Concessione> call= new Call<WebTarget,Concessione>(){
@Override
public Concessione call(WebTarget endpoint) throws Exception {
Response resp= endpoint.path(InterfaceConstants.Methods.DELETE_FILES_PATH).
path(id).request(MediaType.APPLICATION_JSON).post(Entity.entity(path,
MediaType.APPLICATION_JSON));
return check(resp,Concessione.class);
}
};
Concessione toReturn = delegate.make(call);
log.debug("Cleaned path {} result {} ",path,toReturn);
return toReturn;
}

View File

@ -6,6 +6,7 @@ import java.util.ArrayList;
import javax.ws.rs.client.WebTarget;
import org.gcube.application.geoportal.client.DefaultMongoConcessioni;
import org.gcube.application.geoportal.client.utils.FileSets;
import org.gcube.application.geoportal.common.model.legacy.Concessione;
import org.gcube.application.geoportal.common.model.legacy.Concessione.Paths;
import org.gcube.application.geoportal.common.model.legacy.InputStreamDescriptor;
@ -67,8 +68,8 @@ public class StatefulMongoConcessioni extends DefaultMongoConcessioni implements
currentC=replace(currentC);
currentC=super.registerFile(currentC.getMongo_id(),
request(Paths.imgByIndex(currentC.getImmaginiRappresentative().size()-1),f));
currentC=super.registerFileSet(currentC.getMongo_id(),
FileSets.build(Paths.imgByIndex(currentC.getImmaginiRappresentative().size()-1),f).getTheRequest());
return currentC;
}
@ -80,8 +81,8 @@ public class StatefulMongoConcessioni extends DefaultMongoConcessioni implements
currentC=replace(currentC);
currentC=super.registerFile(currentC.getMongo_id(),
request(Paths.piantaByIndex(currentC.getPianteFineScavo().size()-1),files));
currentC=super.registerFileSet(currentC.getMongo_id(),
FileSets.build(Paths.piantaByIndex(currentC.getPianteFineScavo().size()-1),files).getTheRequest());
return currentC;
}
@ -92,8 +93,8 @@ public class StatefulMongoConcessioni extends DefaultMongoConcessioni implements
currentC=replace(currentC);
currentC=super.registerFile(currentC.getMongo_id(),
request(Paths.POSIZIONAMENTO,files));
currentC=super.registerFileSet(currentC.getMongo_id(),
FileSets.build(Paths.POSIZIONAMENTO,files).getTheRequest());
return currentC;
}
@ -104,8 +105,8 @@ public class StatefulMongoConcessioni extends DefaultMongoConcessioni implements
currentC=replace(currentC);
currentC=super.registerFile(currentC.getMongo_id(),
request(Paths.RELAZIONE,f));
currentC=super.registerFileSet(currentC.getMongo_id(),
FileSets.build(Paths.RELAZIONE,f).getTheRequest());
return currentC;
}
@ -113,45 +114,22 @@ public class StatefulMongoConcessioni extends DefaultMongoConcessioni implements
@Override
public Concessione addImmagineRappresentativa(UploadedImage toAdd, InputStreamDescriptor f) throws Exception {
return addImmagineRappresentativa(toAdd,asTemp(f));
return addImmagineRappresentativa(toAdd,FileSets.asTemp(storage,f));
}
@Override
public Concessione addPiantaFineScavo(LayerConcessione toAdd, InputStreamDescriptor... files) throws Exception {
return addPiantaFineScavo(toAdd, asTemp(files));
return addPiantaFineScavo(toAdd, FileSets.asTemp(storage,files));
}
@Override
public Concessione setPosizionamento(LayerConcessione toSet, InputStreamDescriptor... files) throws Exception {
return setPosizionamento(toSet,asTemp(files));
return setPosizionamento(toSet,FileSets.asTemp(storage,files));
}
@Override
public Concessione setRelazioneScavo(RelazioneScavo toSet, InputStreamDescriptor f) throws Exception {
return setRelazioneScavo(toSet,asTemp(f));
return setRelazioneScavo(toSet,FileSets.asTemp(storage,f));
}
protected static AddSectionToConcessioneRequest request(String path, TempFile...files) {
AddSectionToConcessioneRequest req=new AddSectionToConcessioneRequest();
req.setDestinationPath(path);
req.setStreams(new ArrayList<TempFile>());
for(TempFile f:files)
req.getStreams().add(f);
return req;
}
protected TempFile asTemp(InputStreamDescriptor descriptor) throws RemoteBackendException, FileNotFoundException {
return storage.putOntoStorage(descriptor.getStream(), descriptor.getFilename());
}
protected TempFile[] asTemp(InputStreamDescriptor... descriptors) throws RemoteBackendException, FileNotFoundException {
ArrayList<TempFile> toReturn=new ArrayList<TempFile>();
for(InputStreamDescriptor desc:descriptors)
toReturn.add(storage.putOntoStorage(desc.getStream(), desc.getFilename()));
return toReturn.toArray(new TempFile[toReturn.size()]);
}
}

View File

@ -0,0 +1,65 @@
package org.gcube.application.geoportal.client.utils;
import org.gcube.application.geoportal.common.model.legacy.InputStreamDescriptor;
import org.gcube.application.geoportal.common.model.rest.AddSectionToConcessioneRequest;
import org.gcube.application.geoportal.common.rest.TempFile;
import org.gcube.application.geoportal.common.utils.StorageUtils;
import org.gcube.contentmanagement.blobstorage.transport.backend.RemoteBackendException;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
public class FileSets {
public static class RequestBuilder {
AddSectionToConcessioneRequest theRequest=new AddSectionToConcessioneRequest();
public RequestBuilder add(TempFile... f){
if(theRequest.getStreams()==null)
theRequest.setStreams(new ArrayList<TempFile>());
for(TempFile temp: f )
theRequest.getStreams().add(temp);
return this;
}
public RequestBuilder add(TempFile f){
if(theRequest.getStreams()==null)
theRequest.setStreams(new ArrayList<TempFile>());
theRequest.getStreams().add(f);
return this;
}
public RequestBuilder setPath(String path){
theRequest.setDestinationPath(path);
return this;
}
public AddSectionToConcessioneRequest getTheRequest(){return theRequest;}
}
public static RequestBuilder build(String path) {
return new RequestBuilder().setPath(path);
}
public static RequestBuilder build(String path, TempFile...files) {
return new RequestBuilder().setPath(path).add(files);
}
public static TempFile asTemp(StorageUtils storage,InputStreamDescriptor descriptor) throws RemoteBackendException, FileNotFoundException {
return storage.putOntoStorage(descriptor.getStream(), descriptor.getFilename());
}
public static TempFile[] asTemp(StorageUtils storage,InputStreamDescriptor... descriptors) throws RemoteBackendException, FileNotFoundException {
ArrayList<TempFile> toReturn=new ArrayList<TempFile>();
for(InputStreamDescriptor desc:descriptors)
toReturn.add(storage.putOntoStorage(desc.getStream(), desc.getFilename()));
return toReturn.toArray(new TempFile[toReturn.size()]);
}
}

View File

@ -1,8 +1,7 @@
package org.gcube.application.geoportal.clients;
import static org.gcube.application.geoportal.client.GeoportalAbstractPlugin.statefulMongoConcessioni;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.*;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
@ -63,7 +62,7 @@ public class StatefulClientTests extends BasicVreTests{
return manager.publish();
}
@Test
public void testRegisterNew() throws RemoteBackendException, FileNotFoundException, Exception {

View File

@ -1,9 +1,8 @@
package org.gcube.application.geoportal.clients;
import static org.gcube.application.geoportal.client.GeoportalAbstractPlugin.mongoConcessioni;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.gcube.application.geoportal.client.GeoportalAbstractPlugin.statefulMongoConcessioni;
import static org.junit.Assert.*;
import java.io.File;
import java.io.FileInputStream;
@ -12,6 +11,7 @@ import java.util.Collections;
import java.util.Iterator;
import java.util.concurrent.atomic.AtomicLong;
import org.gcube.application.geoportal.client.legacy.ConcessioniManagerI;
import org.gcube.application.geoportal.common.model.TestModel;
import org.gcube.application.geoportal.common.model.legacy.Concessione;
import org.gcube.application.geoportal.common.model.legacy.Concessione.Paths;
@ -67,14 +67,19 @@ public class StatelessClientTests extends BasicVreTests{
Collections.singletonList(new StorageUtils().putOntoStorage(
new FileInputStream(Files.getFileFromResources("concessioni/relazione.pdf")), "relazione.pdf")));
c= client.registerFile(c.getMongo_id(), request);
c= client.registerFileSet(c.getMongo_id(), request);
assertNotNull(c.getRelazioneScavo().getActualContent());
assertNotNull(c.getRelazioneScavo().getActualContent().get(0));
}
@Test
public void publish() throws Exception {
public void testPublsh() throws Exception {
publish(true);
}
public Concessione publish(Boolean verify) throws Exception {
Concessione c= client.createNew(TestModel.prepareConcessione());
String mongoId=c.getMongo_id();
@ -84,14 +89,14 @@ public class StatelessClientTests extends BasicVreTests{
Collections.singletonList(new StorageUtils().putOntoStorage(
new FileInputStream(Files.getFileFromResources("concessioni/relazione.pdf")), "relazione.pdf")));
client.registerFile(mongoId, request);
client.registerFileSet(mongoId, request);
request=
new AddSectionToConcessioneRequest(Paths.imgByIndex(0),
Collections.singletonList(new StorageUtils().putOntoStorage(
new FileInputStream(Files.getFileFromResources("concessioni/immagine.png")), "immagine.png")));
client.registerFile(mongoId, request);
client.registerFileSet(mongoId, request);
request=
@ -99,25 +104,28 @@ public class StatelessClientTests extends BasicVreTests{
Collections.singletonList(new StorageUtils().putOntoStorage(
new FileInputStream(Files.getFileFromResources("concessioni/pos.shp")), "pos.shp")));
client.registerFile(mongoId, request);
client.registerFileSet(mongoId, request);
request=
new AddSectionToConcessioneRequest(Paths.piantaByIndex(0),
Collections.singletonList(new StorageUtils().putOntoStorage(
new FileInputStream(Files.getFileFromResources("concessioni/pianta.shp")), "pianta.shp")));
client.registerFile(mongoId, request);
client.registerFileSet(mongoId, request);
c=client.publish(mongoId);
assertTrue(c.getReport().getStatus().equals(ValidationStatus.PASSED));
if(verify)
assertTrue(c.getReport().getStatus().equals(ValidationStatus.PASSED));
return c;
}
@Test
public void getConfiguration(){
public void getConfiguration() throws Exception {
System.out.println(client.getCurrentConfiguration());
}
@Test
@ -128,7 +136,24 @@ public class StatelessClientTests extends BasicVreTests{
}
}
@Test
public void testCleanFileSet() throws Exception {
Concessione c=publish(false);
client.unpublish(c.getMongo_id());
//Precheck to be sure
assertFalse(c.getPosizionamentoScavo().getActualContent().isEmpty());
assertFalse(c.getPianteFineScavo().get(0).getActualContent().isEmpty());
//Clear pos
c=client.cleanFileSet(c.getMongo_id(),Paths.POSIZIONAMENTO);
assertTrue(c.getPosizionamentoScavo().getActualContent().isEmpty());
//Clear pianta [0]
c=client.cleanFileSet(c.getMongo_id(),Paths.piantaByIndex(0));
assertTrue(c.getPianteFineScavo().get(0).getActualContent().isEmpty());
}
// UTILS

View File

@ -5,6 +5,7 @@ import org.gcube.application.geoportal.clients.TokenSetter;
import org.gcube.application.geoportal.common.model.legacy.Concessione;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.concurrent.atomic.AtomicLong;
import static org.gcube.application.geoportal.client.GeoportalAbstractPlugin.statefulMongoConcessioni;
@ -24,7 +25,13 @@ public class ClearConcessioni {
AtomicLong count=new AtomicLong(0);
AtomicLong nullCount=new AtomicLong(0);
AtomicLong errCount=new AtomicLong(0);
manager.getList().forEachRemaining((Concessione c)->{
Iterator<Concessione> it=null;
// it=manager.getList();
it=manager.search("{\"centroidLat\" : 0}");
it.forEachRemaining((Concessione c)->{
try{
String currentId=c.getMongo_id();
if(currentId==null) {

View File

@ -0,0 +1,77 @@
package org.gcube.application.geoportal.usecases;
import org.gcube.application.geoportal.client.utils.FileSets;
import org.gcube.application.geoportal.clients.TokenSetter;
import org.gcube.application.geoportal.common.model.legacy.AssociatedContent;
import org.gcube.application.geoportal.common.model.legacy.Concessione;
import org.gcube.application.geoportal.common.model.legacy.InputStreamDescriptor;
import org.gcube.application.geoportal.common.model.rest.AddSectionToConcessioneRequest;
import org.gcube.application.geoportal.common.rest.MongoConcessioni;
import org.gcube.application.geoportal.common.utils.StorageUtils;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import static org.gcube.application.geoportal.client.GeoportalAbstractPlugin.mongoConcessioni;
public class EditFileSet {
public static void main(String[] args) throws Exception {
// params
String context="/gcube/devsec/devVRE";
String publishOption="true";
String toUpdateId="6131ebbc02ad3d2580412be3";
String toEditPath= Concessione.Paths.POSIZIONAMENTO;
String folderPath="/Users/fabioisti/Downloads/GNA_ELAIUSSA_FAC-SIMILE_2021/GNA_topografia_Elaiussa/PLANIMETRIE_SAGGI";
//Check params
Boolean publish = Boolean.parseBoolean(publishOption);
File sourceFolder=new File(folderPath);
if(!sourceFolder.canRead()) throw new Exception("Cannot read from "+folderPath);
System.out.println("!!!!!!! SETTING CONTEXT "+context);
TokenSetter.set(context);
//Prepare Fileset
System.out.println("Preparing request..");
StorageUtils storage=new StorageUtils();
AddSectionToConcessioneRequest request= prepareRequest(storage,toEditPath,sourceFolder);
MongoConcessioni client=mongoConcessioni().build();
// Unpublish
System.out.println("Unpublishing "+toUpdateId);
client.unpublish(toUpdateId);
// update Fileset
System.out.println("Removing old fileset.. ");
client.cleanFileSet(toUpdateId,toEditPath);
System.out.println("Sending new Fileset ..");
Concessione result= client.registerFileSet(toUpdateId,request);
if(publish)
result = client.publish(toUpdateId);
System.out.println("Done ");
System.out.println("Result : "+result);
}
private static AddSectionToConcessioneRequest prepareRequest(StorageUtils storage, String path, File directory) throws FileNotFoundException {
File[] children =directory.listFiles();
System.out.println("Found "+children+ " files to push");
InputStreamDescriptor[] iss=new InputStreamDescriptor[children.length];
FileSets.RequestBuilder builder = FileSets.build(path);
for (File f : directory.listFiles())
builder.add(FileSets.asTemp(storage, new InputStreamDescriptor(new FileInputStream(f),f.getName())));
return builder.getTheRequest();
}
}