Added new Data_Handler and UCD test cases

This commit is contained in:
Francesco Mangiacrapa 2022-09-14 16:50:59 +02:00
parent ab11f34bee
commit 1593755ee2
3 changed files with 182 additions and 34 deletions

View File

@ -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<UseCaseDescriptor> 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<UseCaseDescriptor> getListForHandlerIds(List<String> 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<UseCaseDescriptor> getListForJSONPath(String jsonPath, List<String> 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<UseCaseDescriptor> 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<HandlerDeclaration> 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);
}
}

View File

@ -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;

View File

@ -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<String> handlersIds = null;
List<UseCaseDescriptor> listUseCaseDescriptor;
List<UseCaseDescriptor> 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<String> handlersIds = null;
List<UseCaseDescriptor> 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<HandlerDeclaration> 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<HandlerDeclaration> 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<String> listdata = new HashSet<String>(data.length());
for (int i = 0; i < data.length(); i++) {
listdata.add(data.get(i).toString());
}
List<String> 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<String> handlersIds = null;
List<UseCaseDescriptor> listUseCaseDescriptor;
List<UseCaseDescriptor> 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<GcubeProfileDV> listProfiles = toListGcubeProfiles(config);
System.out.println("\t\t"+listProfiles);
System.out.println("\t\t" + listProfiles);
break;
case item_fields:
List<ItemFieldDV> listItems = toListItemFields(config);
System.out.println("\t\t"+listItems);
System.out.println("\t\t" + listItems);
break;
case actions_definition:
List<ActionDefinitionDV> 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.