This commit is contained in:
Fabio Sinibaldi 2022-02-16 17:12:54 +01:00
parent b23305d0fc
commit e32a540c8e
7 changed files with 192 additions and 119 deletions

View File

@ -382,7 +382,7 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
private StepExecutionReport step(ProfiledDocument theDocument, String step, Document callParameters) throws StepException { private StepExecutionReport step(ProfiledDocument theDocument, String step, Document callParameters) throws StepException {
log.info("[Profile {} ] Invoking Step {} on {}" ,profile.getId(),step,getManager().getDescriptor()); log.info("[Profile {}] Invoking Step {} on {}" ,profile.getId(),step,getManager().getDescriptor());
StepExecutionRequest request=new StepExecutionRequest(); StepExecutionRequest request=new StepExecutionRequest();
request.setCallParameters(callParameters); request.setCallParameters(callParameters);
request.setDocument(theDocument); request.setDocument(theDocument);
@ -392,7 +392,7 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
request.setUser(user.getUser()); request.setUser(user.getUser());
request.setContext(user.getContext()); request.setContext(user.getContext());
log.debug("Requesting Step Execution {} ",request); log.debug("Requesting Step Execution {}",request);
StepExecutionReport report= getManager().performStep(request); StepExecutionReport report= getManager().performStep(request);
log.debug("Report is {}",report); log.debug("Report is {}",report);
@ -401,13 +401,13 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
} }
private EventExecutionReport triggerEvent(ProfiledDocument theDocument, String event, Document parameters) throws EventException { private EventExecutionReport triggerEvent(ProfiledDocument theDocument, String event, Document parameters) throws EventException {
log.info("[Profile {} ] triggering event {} on {}" ,profile.getId(),event,getManager().getDescriptor()); log.info("[Profile {}] triggering event {} on {}" ,profile.getId(),event,getManager().getDescriptor());
EventExecutionRequest request= new EventExecutionRequest(); EventExecutionRequest request= new EventExecutionRequest();
request.setEvent(event); request.setEvent(event);
request.setProfile(profile); request.setProfile(profile);
request.setCallParameters(parameters); request.setCallParameters(parameters);
request.setDocument(theDocument); request.setDocument(theDocument);
log.debug("Triggering {} ",request); log.debug("Triggering {}",request);
return getManager().onEvent(request); return getManager().onEvent(request);
} }

View File

@ -101,10 +101,10 @@ public class ProfiledDocuments {
return new GuardedMethod<ProfiledDocument>() { return new GuardedMethod<ProfiledDocument>() {
@Override @Override
protected ProfiledDocument run() throws Exception, WebApplicationException { protected ProfiledDocument run() throws Exception, WebApplicationException {
log.info("Registering {} file(s) for ProfiledDocument ({}, ID {}) at path {}", log.info("Registering {} file(s) for ProfiledDocument ({}, ID {}) with {}",
request.getStreams().size(), request.getStreams().size(),
manager.getProfile().getId(), manager.getProfile().getId(),
id,request.getDestinationPath()); id,request);
request.validate(); request.validate();
return manager.registerFileSet(id,request); return manager.registerFileSet(id,request);
} }

View File

@ -1,6 +1,7 @@
package org.gcube.application.geoportal.service; package org.gcube.application.geoportal.service;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.jayway.jsonpath.JsonPath;
import org.bson.Document; import org.bson.Document;
import org.gcube.application.cms.serialization.Serialization; import org.gcube.application.cms.serialization.Serialization;
import org.gcube.application.cms.tests.TokenSetter; import org.gcube.application.cms.tests.TokenSetter;
@ -8,6 +9,7 @@ import org.gcube.application.cms.tests.model.concessioni.TestConcessioniModel;
import org.gcube.application.geoportal.common.model.JSONPathWrapper; import org.gcube.application.geoportal.common.model.JSONPathWrapper;
import org.gcube.application.geoportal.common.model.document.ProfiledDocument; import org.gcube.application.geoportal.common.model.document.ProfiledDocument;
import org.gcube.application.geoportal.common.model.document.filesets.RegisteredFileSet; import org.gcube.application.geoportal.common.model.document.filesets.RegisteredFileSet;
import org.gcube.application.geoportal.common.model.document.lifecycle.LifecycleInformation;
import org.gcube.application.geoportal.common.model.rest.Configuration; import org.gcube.application.geoportal.common.model.rest.Configuration;
import org.gcube.application.geoportal.common.model.rest.QueryRequest; import org.gcube.application.geoportal.common.model.rest.QueryRequest;
import org.gcube.application.geoportal.common.model.rest.RegisterFileSetRequest; import org.gcube.application.geoportal.common.model.rest.RegisterFileSetRequest;
@ -30,8 +32,7 @@ import java.util.List;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
public abstract class ProfiledDocumentsTests extends BasicServiceTestUnit{ public abstract class AbstractProfiledDocumentsTests extends BasicServiceTestUnit{
@Before @Before
@ -78,119 +79,31 @@ public abstract class ProfiledDocumentsTests extends BasicServiceTestUnit{
// CREATE / edit / delete // CREATE / edit / delete
@Test
public void registerNew() throws Exception {
createNew();
}
@Test
public void edit() throws Exception {
ProfiledDocument doc=createNew();
String beforeJson=doc.getTheDocument().toJson();
doc.getTheDocument().put("someStrangeField","someOtherRandomValue");
String edited=doc.getTheDocument().toJson();
Assert.assertNotEquals(beforeJson,doc.getTheDocument().toJson());
doc=check(baseTarget().path(doc.get_id()).request(MediaType.APPLICATION_JSON).
put(Entity.entity(doc.getTheDocument(), MediaType.APPLICATION_JSON)),ProfiledDocument.class);
Assert.assertEquals(edited,doc.getTheDocument().toJson());
}
@Test
public void testAddSingleFileSet() throws Exception {
ProfiledDocument doc = createNew();
// Try set releazione scavo
String fileSetPath="relazioneScavo";
String fieldPath="relazioneScavo";
String filename = "relazione.pdf";
// INSERT ONE, MERGE INFO (NB default values already exist)
doc = upload(
new StorageUtils(),
doc.get_id(),
fileSetPath,
fieldPath,
Document.parse("{\"titolo\" : \"mio titolo\",\"some\" : \"something\" }"),
RegisterFileSetRequest.ClashOptions.MERGE_EXISTING,
filename);
assertTrue("Relazione exists",doc.getTheDocument().containsKey(fileSetPath));
RegisteredFileSet set = Serialization.convert(doc.getTheDocument().get(fileSetPath), RegisteredFileSet.class);
assertTrue("Correctly merged attributes ",set.getString("titolo").equals("mio titolo"));
assertTrue("Correctly merged attributes ",set.getString("some").equals("something"));
// REPLACE SAME, CHANGE TITLE
doc = upload(
new StorageUtils(),
doc.get_id(),
fileSetPath,
fieldPath,
Document.parse("{\"titolo\" : \"mio altro titolo\"}"),
RegisterFileSetRequest.ClashOptions.REPLACE_EXISTING,
filename);
set = Serialization.convert(doc.getTheDocument().get(fileSetPath), RegisteredFileSet.class);
assertTrue("Correctly merged attributes ",set.getString("titolo").equals("mio altro titolo"));
assertTrue("Correctly merged attributes ",!set.containsKey("some"));
}
@Test
public void testMutlipleFileSet() throws Exception {
ProfiledDocument doc = createNew();
// ADD 4 IMGS
for (int i = 0; i < 4; i++) {
doc = upload(
new StorageUtils(),
doc.get_id(),
"immagini",
"imgs",
null,
RegisterFileSetRequest.ClashOptions.APPEND,
"relazione.pdf");
}
assertTrue(doc.getTheDocument().containsKey("immagini"));
assertTrue("Expected 4 imgs registered",Serialization.convert(doc.getTheDocument().get("immagini"), List.class).size()==4);
// Replace img [3]
doc = upload(
new StorageUtils(),
doc.get_id(),
"immagini[3]",
"imgs",
Document.parse("{\"titolo\" : \"mia immagine\"}"),
RegisterFileSetRequest.ClashOptions.REPLACE_EXISTING,
"relazione.pdf");
String title = new JSONPathWrapper(doc.getTheDocument().toJson()).
getByPath("immagini[3].titolo",String.class).get(0);
assertTrue("Changed Title",title.equals("mia immagine"));
}
// @@@@@@@@@@@@@@@ Routines // @@@@@@@@@@@@@@@ Routines
protected ProfiledDocument createNew() throws Exception {
Document document =new Document(Collections.singletonMap("dumbKey","dumbValue")); protected ProfiledDocument createNew(Document content) throws Exception {
return check(baseTarget().request(MediaType.APPLICATION_JSON). return check(baseTarget().request(MediaType.APPLICATION_JSON).
post(Entity.entity(document, MediaType.APPLICATION_JSON)),ProfiledDocument.class); post(Entity.entity(content, MediaType.APPLICATION_JSON)),ProfiledDocument.class);
}
protected ProfiledDocument update(String id, Document newContent)throws Exception {
return check(baseTarget().path(id).request(MediaType.APPLICATION_JSON).
put(Entity.entity(newContent, MediaType.APPLICATION_JSON)),ProfiledDocument.class);
} }
protected ProfiledDocument upload(StorageUtils storage, protected ProfiledDocument upload(StorageUtils storage,
String id, String id,
String path, String parentPath,
String fieldName,
String fieldDefinitionPath, String fieldDefinitionPath,
Document attributes, Document attributes,
RegisterFileSetRequest.ClashOptions clashPolicy, RegisterFileSetRequest.ClashOptions clashPolicy,
String ...files) throws Exception { String ...files) throws Exception {
FileSets.RequestBuilder builder = FileSets.build(path); FileSets.RequestBuilder builder = FileSets.build(parentPath,fieldName,fieldDefinitionPath);
builder.setFieldDescriptionPath(fieldDefinitionPath).setClashPolicy(clashPolicy).setAttributes(attributes); builder.setClashPolicy(clashPolicy).setAttributes(attributes);
for(String file:files) for(String file:files)
builder.add(storage.putOntoStorage(new File(TestConcessioniModel.getBaseFolder(),file),file)); builder.add(storage.putOntoStorage(new File(TestConcessioniModel.getBaseFolder(),file),file));
@ -210,4 +123,5 @@ public abstract class ProfiledDocumentsTests extends BasicServiceTestUnit{
assertTrue(toReturn.getLifecycleInformation().getLastInvokedStep().equals(request.getStepID())); assertTrue(toReturn.getLifecycleInformation().getLastInvokedStep().equals(request.getStepID()));
return toReturn; return toReturn;
} }
} }

View File

@ -11,6 +11,7 @@ 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.Concessione.Paths;
import org.gcube.application.geoportal.common.model.legacy.LayerConcessione; import org.gcube.application.geoportal.common.model.legacy.LayerConcessione;
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.AddSectionToConcessioneRequest;
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.InterfaceConstants; import org.gcube.application.geoportal.common.rest.InterfaceConstants;
import org.gcube.application.geoportal.common.utils.FileSets; import org.gcube.application.geoportal.common.utils.FileSets;
@ -51,25 +52,30 @@ public class ConcessioniOverMongoTest extends BasicServiceTestUnit{
//Used for local test data //Used for local test data
private static Concessione upload(StorageUtils storage, WebTarget target,String id, String path, String ...files) throws Exception { private static Concessione upload(StorageUtils storage, WebTarget target,String id, String path, String ...files) throws Exception {
FileSets.RequestBuilder builder = FileSets.build(path); AddSectionToConcessioneRequest request = new AddSectionToConcessioneRequest();
request.setDestinationPath(path);
request.setStreams(new ArrayList<>());
for(String file:files) for(String file:files)
builder.add(storage.putOntoStorage(new File(TestConcessioniModel.getBaseFolder(),file),file)); request.getStreams()
.add(storage.putOntoStorage(new File(TestConcessioniModel.getBaseFolder(),file),file));
return check(target.path(FILES_PATH).path(id).request(MediaType.APPLICATION_JSON). return check(target.path(FILES_PATH).path(id).request(MediaType.APPLICATION_JSON).
post(Entity.entity(Serialization.write(builder.getTheRequest()), post(Entity.entity(Serialization.write(request),
MediaType.APPLICATION_JSON)),Concessione.class); MediaType.APPLICATION_JSON)),Concessione.class);
} }
//generic //generic
private static Concessione upload(StorageUtils storage, WebTarget target,String id, String path, File ...files) throws Exception { private static Concessione upload(StorageUtils storage, WebTarget target,String id, String path, File ...files) throws Exception {
FileSets.RequestBuilder builder = FileSets.build(path); AddSectionToConcessioneRequest request = new AddSectionToConcessioneRequest();
request.setDestinationPath(path);
request.setStreams(new ArrayList<>());
for(File file:files) for(File file:files)
builder.add(storage.putOntoStorage(file,file.getName())); request.getStreams().add(storage.putOntoStorage(file,file.getName()));
return check(target.path(FILES_PATH).path(id).request(MediaType.APPLICATION_JSON). return check(target.path(FILES_PATH).path(id).request(MediaType.APPLICATION_JSON).
post(Entity.entity(Serialization.write(builder.getTheRequest()), post(Entity.entity(Serialization.write(request),
MediaType.APPLICATION_JSON)),Concessione.class); MediaType.APPLICATION_JSON)),Concessione.class);
} }

View File

@ -0,0 +1,151 @@
package org.gcube.application.geoportal.service;
import org.bson.Document;
import org.gcube.application.cms.serialization.Serialization;
import org.gcube.application.geoportal.common.model.JSONPathWrapper;
import org.gcube.application.geoportal.common.model.document.ProfiledDocument;
import org.gcube.application.geoportal.common.model.document.filesets.GCubeSDILayer;
import org.gcube.application.geoportal.common.model.document.filesets.Materialization;
import org.gcube.application.geoportal.common.model.document.filesets.RegisteredFileSet;
import org.gcube.application.geoportal.common.model.document.lifecycle.LifecycleInformation;
import org.gcube.application.geoportal.common.model.rest.RegisterFileSetRequest;
import org.gcube.application.geoportal.common.model.rest.StepExecutionRequest;
import org.gcube.application.geoportal.common.rest.InterfaceConstants;
import org.gcube.application.geoportal.common.utils.StorageUtils;
import org.junit.Assert;
import org.junit.Test;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
import java.util.Collections;
import java.util.List;
import static org.junit.Assert.assertTrue;
public class DummyProfiledDocumentTest extends AbstractProfiledDocumentsTests{
@Override
protected WebTarget baseTarget() {
String testProfileId="profiledConcessioni";
return target(InterfaceConstants.Methods.PROJECTS).path(testProfileId);
}
@Test
public void registerNew() throws Exception {
ProfiledDocument doc = createNew(new Document("field","value"));
assertTrue(doc!=null);
assertTrue(doc.get_id()!=null);
assertTrue(doc.getLifecycleInformation().getPhase().equals(LifecycleInformation.DRAFT_PHASE));
assertTrue(doc.getTheDocument()!=null);
assertTrue(doc.getTheDocument().containsKey("field"));
assertTrue(doc.getTheDocument().getString("field").equals("value"));
}
@Test
public void edit() throws Exception {
ProfiledDocument doc=createNew(new Document());
String beforeJson=doc.getTheDocument().toJson();
doc.getTheDocument().put("someStrangeField","someOtherRandomValue");
String edited=doc.getTheDocument().toJson();
Assert.assertNotEquals(beforeJson,doc.getTheDocument().toJson());
doc=check(baseTarget().path(doc.get_id()).request(MediaType.APPLICATION_JSON).
put(Entity.entity(doc.getTheDocument(), MediaType.APPLICATION_JSON)),ProfiledDocument.class);
Assert.assertEquals(edited,doc.getTheDocument().toJson());
}
@Test
public void testUploadFileSet() throws Exception {
Document baseDoc=new Document();
baseDoc.put("relazioneScavo",new Document("title","My Title"));
ProfiledDocument doc = createNew(baseDoc);
assertTrue(doc.getTheDocument().containsKey("relazioneScavo"));
// Try set releazione scavo
String parentPath="relazioneScavo";
String fieldName="fileset";
String fieldDefinition="relazioneScavo.children[?(@.fileset)]";
String filename = "relazione.pdf";
// INSERT ONE, MERGE INFO (NB default values already exist)
doc = upload(
new StorageUtils(),
doc.get_id(),
parentPath,fieldName,
fieldDefinition,
new Document("customField","customFieldValue"),
RegisterFileSetRequest.ClashOptions.REPLACE_EXISTING,
filename);
JSONPathWrapper wrapper = new JSONPathWrapper(doc.getTheDocument().toJson());
assertTrue("Relazione exists",wrapper.getMatchingPaths(parentPath).size()==1);
RegisteredFileSet fs = Serialization.convert(wrapper.getByPath(parentPath+"."+fieldName).get(0),RegisteredFileSet.class);
assertTrue(fs.getPayloads().size()==1);
assertTrue(fs.getString("customField").equals("customFieldValue"));
}
@Test
public void testSDI() throws Exception {
// Create new
ProfiledDocument doc = createNew(new Document("posizionamentoScavo",new Document("title","Mio pos")));
// register filesets
doc = upload(
new StorageUtils(),
doc.get_id(),
"posizionamentoScavo","fileset",
"posizionamentoScavo.children[?(@.fileset)]",
null,
RegisterFileSetRequest.ClashOptions.REPLACE_EXISTING,
"pos.shp","pos.shx");
System.out.println("Registered posizionamento, result is "+ Serialization.write(doc));
// invoke step SUBMIT-FOR-REVIEW
StepExecutionRequest req=new StepExecutionRequest();
req.setStepID("SUBMIT-FOR-REVIEW");
doc=step(doc.get_id(),req);
System.out.println(doc);
assertTrue(doc.getLifecycleInformation().getLastOperationStatus().equals(LifecycleInformation.Status.OK));
JSONPathWrapper wrapper = new JSONPathWrapper(doc.getTheDocument().toJson());
RegisteredFileSet fs = Serialization.convert(wrapper.getByPath("$..fileset").get(0),RegisteredFileSet.class);
assertTrue(fs.getPayloads().size()==2);
assertTrue(fs.getMaterializations().size()>0);
for(Object matObj : wrapper.getByPath("$..fileset."+RegisteredFileSet.MATERIALIZATIONS)){
GCubeSDILayer layer = Serialization.convert(matObj, GCubeSDILayer.class);
System.out.println("Checking Layer : "+layer);
assertTrue(layer.getType().equals(GCubeSDILayer.GCUBE_SDY_LAYER_TYPE));
assertTrue(layer.getOGCLinks().size()>0);
assertTrue(layer.getPlatformInfo().size()>0);
assertTrue(layer.getBBox()!=null);
}
// Checking platform info
for(Object platformObj : wrapper.getByPath("$..[?(@."+ Materialization.TYPE +" == '"+GCubeSDILayer.GCUBE_SDY_LAYER_TYPE+"' )]")){
Document platform=Serialization.asDocument(platformObj);
assertTrue(platform.containsKey("_type"));
if(platform.get("_type").equals("GeoServer")){
assertTrue(platform.containsKey("layerName"));
assertTrue(platform.containsKey("workspace"));
assertTrue(platform.containsKey("storeName"));
assertTrue(platform.containsKey("persistencePath"));
assertTrue(platform.get("files",List.class).size()==2);
}
}
}
}

View File

@ -8,7 +8,8 @@ import javax.ws.rs.core.Response;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
public class InexistentProfileTests extends ProfiledDocumentsTests { public class InexistentProfileTests extends AbstractProfiledDocumentsTests {
@Override @Override
protected WebTarget baseTarget() { protected WebTarget baseTarget() {
String testProfileId="profiledConcessioni"; String testProfileId="profiledConcessioni";

View File

@ -17,7 +17,7 @@ import javax.ws.rs.core.Response;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
public class ProfiledConcessioniTests extends ProfiledDocumentsTests{ public class ProfiledConcessioniTests extends AbstractProfiledDocumentsTests{
@Override @Override
@ -29,12 +29,13 @@ public class ProfiledConcessioniTests extends ProfiledDocumentsTests{
@Test @Test
public void testSDI() throws Exception { public void testSDI() throws Exception {
// Create new // Create new
ProfiledDocument doc = createNew(); ProfiledDocument doc = createNew(new Document());
// register filesets // register filesets
doc = upload( doc = upload(
new StorageUtils(), new StorageUtils(),
doc.get_id(), doc.get_id(),
"posizionamentoScavo.fileset", "posizionamentoScavo","fileset",
"posizionamentoScavo.children[?(@.fileset)]", "posizionamentoScavo.children[?(@.fileset)]",
Document.parse("{\"titolo\" : \"mio titolo\",\"some\" : \"something\" }"), Document.parse("{\"titolo\" : \"mio titolo\",\"some\" : \"something\" }"),
RegisterFileSetRequest.ClashOptions.MERGE_EXISTING, RegisterFileSetRequest.ClashOptions.MERGE_EXISTING,