From 1593755ee210359695893dd6cab8494052797536 Mon Sep 17 00:00:00 2001 From: "francesco.mangiacrapa" Date: Wed, 14 Sep 2022 16:50:59 +0200 Subject: [PATCH] Added new Data_Handler and UCD test cases --- .../geoportal/UseCaseDescriptorCaller.java | 80 ++++++++++- .../geoportal/ucd/GEOPORTAL_DATA_HANDLER.java | 3 +- .../java/org/gcube/application/UCD_Tests.java | 133 ++++++++++++++---- 3 files changed, 182 insertions(+), 34 deletions(-) diff --git a/src/main/java/org/gcube/application/geoportalcommon/geoportal/UseCaseDescriptorCaller.java b/src/main/java/org/gcube/application/geoportalcommon/geoportal/UseCaseDescriptorCaller.java index a718772..bc1ad9f 100644 --- a/src/main/java/org/gcube/application/geoportalcommon/geoportal/UseCaseDescriptorCaller.java +++ b/src/main/java/org/gcube/application/geoportalcommon/geoportal/UseCaseDescriptorCaller.java @@ -3,28 +3,57 @@ package org.gcube.application.geoportalcommon.geoportal; import static org.gcube.application.geoportal.client.plugins.GeoportalAbstractPlugin.useCaseDescriptors; import java.util.ArrayList; +import java.util.HashSet; import java.util.Iterator; import java.util.List; +import java.util.stream.Collectors; import org.bson.Document; +import org.gcube.application.geoportal.common.model.configuration.Archive; +import org.gcube.application.geoportal.common.model.configuration.Configuration; +import org.gcube.application.geoportal.common.model.document.Project; import org.gcube.application.geoportal.common.model.rest.QueryRequest; +import org.gcube.application.geoportal.common.model.useCaseDescriptor.HandlerDeclaration; import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor; +import org.gcube.application.geoportal.common.rest.Projects; import org.gcube.application.geoportal.common.rest.UseCaseDescriptorsI; +import org.json.JSONArray; +import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.jayway.jsonpath.JsonPath; +import com.jayway.jsonpath.spi.json.JsonOrgJsonProvider; import com.mongodb.BasicDBList; import com.mongodb.BasicDBObject; +/** + * The Class UseCaseDescriptorCaller. + * + * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it + * + * Sep 14, 2022 + */ public class UseCaseDescriptorCaller { private static Logger LOG = LoggerFactory.getLogger(UseCaseDescriptorCaller.class); + /** + * Use case descriptors client. + * + * @return the use case descriptors I + */ public UseCaseDescriptorsI useCaseDescriptorsClient() { LOG.info("useCaseDescriptorsClient called"); return useCaseDescriptors().build(); } + /** + * Gets the list. + * + * @return the list + * @throws Exception the exception + */ public List getList() throws Exception { LOG.info("getList called"); UseCaseDescriptorsI client = useCaseDescriptorsClient(); @@ -35,16 +64,31 @@ public class UseCaseDescriptorCaller { listUCD.add(prg); } - + LOG.info("returning {} {}", listUCD.size(), UseCaseDescriptor.class.getName()); return listUCD; } + /** + * Gets the list for handler ids. + * + * @param listHandlersIds the list handlers ids + * @return the list for handler ids + * @throws Exception the exception + */ public List getListForHandlerIds(List listHandlersIds) throws Exception { LOG.info("getListForHandlerIds called"); return getListForJSONPath("_handlers._id", listHandlersIds); } + /** + * Gets the list for JSON path. + * + * @param jsonPath the json path + * @param listValues the list values + * @return the list for JSON path + * @throws Exception the exception + */ public List getListForJSONPath(String jsonPath, List listValues) throws Exception { LOG.info("getListForJSONPath called for jsonPath: {}, with listValues: {}", jsonPath, listValues); UseCaseDescriptorsI client = useCaseDescriptorsClient(); @@ -65,13 +109,13 @@ public class UseCaseDescriptorCaller { Document doc = new Document(jsonPath, value); list.add(doc); } - + QueryRequest queryRequest = new QueryRequest(); Document queryDoc = new Document(); queryDoc.put("$and", list); LOG.debug("Performing query: {}", queryDoc.toJson()); queryRequest.setFilter(queryDoc); - + // QueryRequest queryRequest = new QueryRequest(); // Document queryDoc = new Document(); // BasicDBObject bs = new BasicDBObject(); @@ -81,18 +125,25 @@ public class UseCaseDescriptorCaller { // queryRequest.setFilter(queryDoc); Iterator useCaseDescrsIt = client.query(queryRequest); - - if(useCaseDescrsIt!=null) { - while(useCaseDescrsIt.hasNext()) { + + if (useCaseDescrsIt != null) { + while (useCaseDescrsIt.hasNext()) { UseCaseDescriptor prg = (UseCaseDescriptor) useCaseDescrsIt.next(); listUCD.add(prg); - + } } LOG.info("getListForJSONPath returning {} {}", listUCD.size(), UseCaseDescriptor.class.getName()); return listUCD; } + /** + * Gets the UCD for id. + * + * @param profileID the profile ID + * @return the UCD for id + * @throws Exception the exception + */ public UseCaseDescriptor getUCDForId(String profileID) throws Exception { LOG.info("getUCDForId called for profileID: {}", profileID); UseCaseDescriptorsI client = useCaseDescriptorsClient(); @@ -117,4 +168,19 @@ public class UseCaseDescriptorCaller { return ucd; } + /** + * Gets the handlers by type. + * + * @param profileID the profile ID + * @param theHandlerType the the handler type + * @return the handlers by type + * @throws Exception the exception + */ + public List getHandlersByType(String profileID, String theHandlerType) throws Exception { + LOG.info("getHandlersByType called for profileID: {}", profileID); + UseCaseDescriptorsI client = useCaseDescriptorsClient(); + UseCaseDescriptor ucd = client.getById(profileID); + return ucd.getHandlersByType(theHandlerType); + } + } diff --git a/src/main/java/org/gcube/application/geoportalcommon/shared/geoportal/ucd/GEOPORTAL_DATA_HANDLER.java b/src/main/java/org/gcube/application/geoportalcommon/shared/geoportal/ucd/GEOPORTAL_DATA_HANDLER.java index dbf79b1..35af563 100644 --- a/src/main/java/org/gcube/application/geoportalcommon/shared/geoportal/ucd/GEOPORTAL_DATA_HANDLER.java +++ b/src/main/java/org/gcube/application/geoportalcommon/shared/geoportal/ucd/GEOPORTAL_DATA_HANDLER.java @@ -4,7 +4,8 @@ public enum GEOPORTAL_DATA_HANDLER { geoportal_data_list("org.gcube.portlets.user.geoportal-data-list", "DATA_LIST_GUI"), geoportal_data_entry("org.gcube.portlets.user.geoportal-data-entry-app", "DATA_ENTRY_GUI"), - geoportal_workflow_action_list("org.gcube.portlets.user.geoportal-workflow-action-list", "WORKFLOW_ACTION_LIST_GUI"); + geoportal_workflow_action_list("org.gcube.portlets.user.geoportal-workflow-action-list","WORKFLOW_ACTION_LIST_GUI"), + gna_concessionio_lc("GNA-CONCESSIONI-LC", "LifecycleManagement"); String id; String type; diff --git a/src/test/java/org/gcube/application/UCD_Tests.java b/src/test/java/org/gcube/application/UCD_Tests.java index e58e3f1..37215e3 100644 --- a/src/test/java/org/gcube/application/UCD_Tests.java +++ b/src/test/java/org/gcube/application/UCD_Tests.java @@ -2,8 +2,11 @@ package org.gcube.application; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashSet; import java.util.List; +import java.util.stream.Collectors; +import org.gcube.application.geoportal.common.model.useCaseDescriptor.HandlerDeclaration; import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor; import org.gcube.application.geoportalcommon.ConvertToDataValueObjectModel; import org.gcube.application.geoportalcommon.geoportal.GeoportalClientCaller; @@ -17,15 +20,20 @@ import org.gcube.application.geoportalcommon.shared.geoportal.ucd.HandlerDeclara import org.gcube.application.geoportalcommon.shared.geoportal.ucd.UseCaseDescriptorDV; import org.gcube.common.authorization.library.provider.SecurityTokenProvider; import org.gcube.common.scope.api.ScopeProvider; +import org.json.JSONArray; +import org.json.JSONObject; import org.junit.Before; import org.junit.Test; +import com.jayway.jsonpath.JsonPath; +import com.jayway.jsonpath.spi.json.JsonOrgJsonProvider; + /** * The Class UCD_Tests. * * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it * - * Sep 9, 2022 + * Sep 9, 2022 */ public class UCD_Tests { @@ -58,7 +66,7 @@ public class UCD_Tests { * @return the list * @throws Exception the exception */ - @Test + //@Test public void getList() throws Exception { ScopeProvider.instance.set(CONTEXT); SecurityTokenProvider.instance.set(TOKEN); @@ -109,13 +117,13 @@ public class UCD_Tests { * @return the UCD for data entry handler ids * @throws Exception the exception */ - //@Test + // @Test public void getUCDFor_DataEntry_HandlerIds() throws Exception { ScopeProvider.instance.set(CONTEXT); SecurityTokenProvider.instance.set(TOKEN); List handlersIds = null; - List listUseCaseDescriptor; + List listUseCaseDescriptor = null; try { UseCaseDescriptorCaller client = GeoportalClientCaller.useCaseDescriptors(); @@ -125,10 +133,7 @@ public class UCD_Tests { } listUseCaseDescriptor = client.getListForHandlerIds(handlersIds); } catch (Exception e) { - String error = "Error on contacting the Geoportal service"; - System.out.println(error + " for handlers: " + handlersIds); - throw new Exception( - "Error when contacting the Geoportal service. Refresh and try again or contact the support", e); + e.printStackTrace(); } if (listUseCaseDescriptor == null) { @@ -152,13 +157,14 @@ public class UCD_Tests { * @return the UCD for data list handler ids * @throws Exception the exception */ - //@Test + // @Test public void getUCDFor_DataList_HandlerIds() throws Exception { ScopeProvider.instance.set(CONTEXT); SecurityTokenProvider.instance.set(TOKEN); List handlersIds = null; List listUseCaseDescriptor; + try { UseCaseDescriptorCaller client = GeoportalClientCaller.useCaseDescriptors(); @@ -168,10 +174,8 @@ public class UCD_Tests { } listUseCaseDescriptor = client.getListForHandlerIds(handlersIds); } catch (Exception e) { - String error = "Error on contacting the Geoportal service"; - System.out.println(error + " for handlers: " + handlersIds); - throw new Exception( - "Error when contacting the Geoportal service. Refresh and try again or contact the support", e); + e.printStackTrace(); + return; } if (listUseCaseDescriptor == null) { @@ -187,33 +191,111 @@ public class UCD_Tests { } + /** + * Gets the UCD for handler types. + * + * @return the UCD for handler types + * @throws Exception the exception + */ + // @Test + public void getUCDForHandlerTypes() throws Exception { + ScopeProvider.instance.set(CONTEXT); + SecurityTokenProvider.instance.set(TOKEN); + + UseCaseDescriptor ucd = null; + List handlers = null; + try { + UseCaseDescriptorCaller client = GeoportalClientCaller.useCaseDescriptors(); + ucd = client.getUCDForId(PROFILE_ID); + handlers = client.getHandlersByType(PROFILE_ID, GEOPORTAL_DATA_HANDLER.gna_concessionio_lc.getType()); + + } catch (Exception e) { + e.printStackTrace(); + return; + } + + for (HandlerDeclaration handlerDeclaration : handlers) { + System.out.println(handlerDeclaration); + } + + } + + /** + * Gets the roles for STEP id. + * + * @return the roles for STEP id + * @throws Exception the exception + */ + @Test + public void getRolesForSTEPId() throws Exception { + ScopeProvider.instance.set(CONTEXT); + SecurityTokenProvider.instance.set(TOKEN); + + try { + UseCaseDescriptor ucd = null; + List handlers = null; + String stepID = "REJECT-DRAFT"; + + UseCaseDescriptorCaller client = GeoportalClientCaller.useCaseDescriptors(); + ucd = client.getUCDForId(PROFILE_ID); + handlers = client.getHandlersByType(PROFILE_ID, GEOPORTAL_DATA_HANDLER.gna_concessionio_lc.getType()); + + com.jayway.jsonpath.Configuration configuration = com.jayway.jsonpath.Configuration.builder() + .jsonProvider(new JsonOrgJsonProvider()).build(); + + for (HandlerDeclaration handler : handlers) { + + String toJSON = handler.getConfiguration().toJson(); + System.out.println("Handler to JSON: " + toJSON); + JSONObject jObject = new JSONObject(toJSON); + JsonPath jsonPath = JsonPath.compile("$.step_access[?(@.STEP == '"+ stepID +"' )].roles"); + System.out.println("jsonPath: " + jsonPath.getPath()); + // $..book[?(@.price <= $['expensive'])] + JSONArray data = jsonPath.read(jObject, configuration); + System.out.println("matching data lenght: " + data.length()); + HashSet listdata = new HashSet(data.length()); + for (int i = 0; i < data.length(); i++) { + listdata.add(data.get(i).toString()); + } + List roles = listdata.stream().collect(Collectors.toList()); + System.out.println("getRole returning: " + roles); + + } + + } catch (Exception e) { + e.printStackTrace(); + return; + } + + } + /** * Gets the configurations for UC D data handlers. * * @return the configurations for UC D data handlers * @throws Exception the exception */ - //@Test + // @Test public void getConfigurations_ForUCD_Data_Handlers() throws Exception { ScopeProvider.instance.set(CONTEXT); SecurityTokenProvider.instance.set(TOKEN); List handlersIds = null; - List listUseCaseDescriptor; + List listUseCaseDescriptor = null; try { UseCaseDescriptorCaller client = GeoportalClientCaller.useCaseDescriptors(); if (handlersIds == null) { - //handlersIds = Arrays.asList(GEOPORTAL_DATA_HANDLER.geoportal_data_list.getId(), GEOPORTAL_DATA_HANDLER.geoportal_data_entry.getId()); + // handlersIds = + // Arrays.asList(GEOPORTAL_DATA_HANDLER.geoportal_data_list.getId(), + // GEOPORTAL_DATA_HANDLER.geoportal_data_entry.getId()); handlersIds = Arrays.asList(GEOPORTAL_DATA_HANDLER.geoportal_workflow_action_list.getId()); System.out.println("handlersIds is null, so using default: " + handlersIds); } listUseCaseDescriptor = client.getListForHandlerIds(handlersIds); } catch (Exception e) { - String error = "Error on contacting the Geoportal service"; - System.out.println(error + " for handlers: " + handlersIds); - throw new Exception( - "Error when contacting the Geoportal service. Refresh and try again or contact the support", e); + e.printStackTrace(); + return; } if (listUseCaseDescriptor == null) { @@ -233,25 +315,25 @@ public class UCD_Tests { for (HandlerDeclarationDV handler : handlers) { ConfigurationDV config = handler.getConfiguration(); System.out.println("\tConfig type:" + config.getConfigurationType()); - //System.out.println("\tConfig:" + config.getConfiguration()); + // System.out.println("\tConfig:" + config.getConfiguration()); switch (config.getConfigurationType()) { case gcube_profiles: List listProfiles = toListGcubeProfiles(config); - System.out.println("\t\t"+listProfiles); + System.out.println("\t\t" + listProfiles); break; case item_fields: List listItems = toListItemFields(config); - System.out.println("\t\t"+listItems); + System.out.println("\t\t" + listItems); break; case actions_definition: List listActions = toListActionsDefinition(config); - System.out.println("\t\t"+listActions); + System.out.println("\t\t" + listActions); break; default: break; } - + } System.out.println("\n\n"); } @@ -290,7 +372,6 @@ public class UCD_Tests { return null; } - /** * To list actions definition.