From c08a18fd7c3d88f9ad9dc4f3c424a408fca2bd48 Mon Sep 17 00:00:00 2001 From: Francesco Mangiacrapa Date: Mon, 9 Sep 2019 12:45:52 +0000 Subject: [PATCH] [Task #17349] Migrate ws-task-executor components to SHUB git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/Common/workspace-task-executor-library@181580 82a268e6-3cf1-43bd-a215-b396298e98cf --- .classpath | 2 + .settings/org.eclipse.jdt.core.prefs | 1 + distro/changelog.xml | 8 +- pom.xml | 41 ++-- .../WorkspaceDataMinerTaskExecutor.java | 108 ++++++----- .../workspacetaskexecutor/util/WsUtil.java | 182 ++++++++++++------ .../TestDataMinerTaskExecutor.java | 165 ++++++++-------- 7 files changed, 301 insertions(+), 206 deletions(-) diff --git a/.classpath b/.classpath index 379bc98..96b50fa 100644 --- a/.classpath +++ b/.classpath @@ -15,11 +15,13 @@ + + diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs index b257af7..a5c7673 100644 --- a/.settings/org.eclipse.jdt.core.prefs +++ b/.settings/org.eclipse.jdt.core.prefs @@ -5,4 +5,5 @@ org.eclipse.jdt.core.compiler.compliance=1.7 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.release=disabled org.eclipse.jdt.core.compiler.source=1.7 diff --git a/distro/changelog.xml b/distro/changelog.xml index 35764c7..317f064 100644 --- a/distro/changelog.xml +++ b/distro/changelog.xml @@ -1,5 +1,11 @@ - + [Task #17349] Migrate ws-task-executor components to SHUB + + First Release diff --git a/pom.xml b/pom.xml index b27307a..29db8c7 100644 --- a/pom.xml +++ b/pom.xml @@ -1,5 +1,6 @@ - 4.0.0 @@ -11,7 +12,7 @@ org.gcube.common workspace-task-executor-library - 0.1.0-SNAPSHOT + 0.2.0-SNAPSHOT workspace-task-executor-library The workspace-task-executor-library is a library to execute data miner's algorithms from workspace @@ -77,22 +78,28 @@ + + org.gcube.common + storagehub-client-wrapper + [0.0.1-SNAPSHOT, 1.0.0-SNAPSHOT) + + - - org.gcube.common - home-library-model - provided - - - org.gcube.common - home-library - provided - - - org.gcube.common - home-library-jcr - provided - + + + + + + + + + + + + + + + diff --git a/src/main/java/org/gcube/common/workspacetaskexecutor/dataminer/WorkspaceDataMinerTaskExecutor.java b/src/main/java/org/gcube/common/workspacetaskexecutor/dataminer/WorkspaceDataMinerTaskExecutor.java index ae55397..52813d7 100644 --- a/src/main/java/org/gcube/common/workspacetaskexecutor/dataminer/WorkspaceDataMinerTaskExecutor.java +++ b/src/main/java/org/gcube/common/workspacetaskexecutor/dataminer/WorkspaceDataMinerTaskExecutor.java @@ -1,12 +1,15 @@ package org.gcube.common.workspacetaskexecutor.dataminer; +import java.net.URL; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.apache.commons.lang.Validate; -import org.gcube.common.homelibrary.home.exceptions.InternalErrorException; -import org.gcube.common.homelibrary.home.workspace.WorkspaceItem; +import org.gcube.common.authorization.library.provider.SecurityTokenProvider; +import org.gcube.common.scope.api.ScopeProvider; +import org.gcube.common.storagehubwrapper.server.tohl.Workspace; +import org.gcube.common.storagehubwrapper.shared.tohl.WorkspaceItem; import org.gcube.common.workspacetaskexecutor.shared.ExecutableItem; import org.gcube.common.workspacetaskexecutor.shared.ExecutableTask; import org.gcube.common.workspacetaskexecutor.shared.FilterOperator; @@ -33,12 +36,14 @@ import org.slf4j.LoggerFactory; import com.fasterxml.jackson.core.type.TypeReference; - /** * The Class WorkspaceDataMinerTaskExecutor. * - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it - * May 4, 2018 + * @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it) + * + * This class uses the scope by {@link ScopeProvider} and the User Token by {@link SecurityTokenProvider} to work correctly. + * + * Sep 9, 2019 */ public class WorkspaceDataMinerTaskExecutor implements ExecutableTask, ExecutableItem{ @@ -49,11 +54,13 @@ public class WorkspaceDataMinerTaskExecutor implements ExecutableTask getListOfTaskConfigurations(String workspaceItemId) throws Exception { logger.debug("Get list of Task Configurations for "+workspaceItemId+" starts..."); List conf = null; - checkOwner(); - WorkspaceItem item = WsUtil.getItem(usernameOwner, workspaceItemId); - String arrayConf = WsUtil.getPropertyValue(item, WS_DM_TASK_TASK_CONF); + + //TO-SHUB + Workspace ws = wsUtil.getWorkspace(); + WorkspaceItem item = ws.getItem(workspaceItemId); + String arrayConf = wsUtil.getPropertyValue(item, WS_DM_TASK_TASK_CONF); + logger.info("Read "+WS_DM_TASK_TASK_CONF+" value: "+arrayConf); if(arrayConf==null || arrayConf.isEmpty()){ logger.warn("The item id "+workspaceItemId+" has not "+TaskConfiguration.class.getSimpleName() +" saved"); @@ -237,8 +233,12 @@ public class WorkspaceDataMinerTaskExecutor implements ExecutableTask configurations = getListOfTaskConfigurations(taskConfiguration.getWorkspaceItemId()); if(configurations==null) @@ -296,6 +303,7 @@ public class WorkspaceDataMinerTaskExecutor implements ExecutableTask newConfigurations = new ArrayList(configurations.size()); for (TaskConfiguration tc : configurations) { + //ADDING ALL THE CONFIGURATIONS EXCEPT THE INPUT ONE (THAT MUST BE BE REMOVED) if(tc.getConfigurationKey().compareTo(taskConfiguration.getConfigurationKey())!=0){ newConfigurations.add(tc); }else{ @@ -306,8 +314,9 @@ public class WorkspaceDataMinerTaskExecutor implements ExecutableTask configurations = getListOfTaskConfigurations(taskConfiguration.getWorkspaceItemId()); if(configurations==null) @@ -362,7 +373,8 @@ public class WorkspaceDataMinerTaskExecutor implements ExecutableTask getProperties(WorkspaceItem item) { + public Map getProperties(WorkspaceItem item) throws Exception { - Properties properties; - try { - properties = item.getProperties(); - if (properties == null) + Validate.notNull(item, "The input "+WorkspaceItem.class.getSimpleName()+" instance is null"); + Workspace workspace = getWorkspace(); + + Map map; + if(item.getPropertyMap()==null) { + try { + map = workspace.getMetadata(item.getId()); + } + catch (Exception e) { + //silent return null; - return properties.getProperties(); - } - catch (InternalErrorException e) { - return null; + } + }else { + map = item.getPropertyMap().getValues(); } + + return toMapString(map); } - - + + /** - * Gets the properties. + * Gets the property value. * * @param item the item * @param propertyName the property name - * @return the properties + * @return the property value + * @throws Exception the exception */ - public static String getPropertyValue(WorkspaceItem item, String propertyName){ + public String getPropertyValue(WorkspaceItem item, String propertyName) throws Exception{ + Validate.notNull(item, "The input "+WorkspaceItem.class.getSimpleName()+" instance is null"); Map properties = getProperties(item); if(properties==null) @@ -104,8 +124,8 @@ public class WsUtil { return properties.get(propertyName); } - - + + /** * Sets the property value. * @@ -113,26 +133,66 @@ public class WsUtil { * @param propertyName the property name * @param propertyValue the property value * @return true, if successful + * @throws Exception the exception */ - public static boolean setPropertyValue(WorkspaceItem item, String propertyName, String propertyValue){ + public boolean setPropertyValue(WorkspaceItem item, String propertyName, String propertyValue) throws Exception{ + Validate.notNull(item, "The input "+WorkspaceItem.class.getSimpleName()+" instance is null"); + Map properties = getProperties(item); try { if(properties==null){ properties = new HashMap(); } - - Properties propertiesOBJ = item.getProperties(); + properties.put(propertyName, propertyValue); - propertiesOBJ.addProperties(properties); - logger.debug("Added properties "+properties+" to item: "+item.getId()); + Map map = toMapObject(properties); + Workspace workspace = getWorkspace(); + workspace.updateMetadata(item.getId(), map); + logger.info("Added properties "+properties+" to item: "+item.getId()); return true; } - catch (InternalErrorException e) { + catch (Exception e) { + logger.warn("Error occurred on updating the metadata for item id: "+item.getId(),e); return false; } } + + + /** + * To map object. + * + * @param map the map + * @return the map + */ + public static Map toMapObject(Map map) { + + if(map==null) + return null; + + Map newMap = new HashMap(map.size()); + newMap.putAll(map); + return newMap; + + } + + /** + * To map string. + * + * @param map the map + * @return the map + */ + public static Map toMapString(Map map) { + + Map newMap = new HashMap(map.size()); + for (Map.Entry entry : map.entrySet()) { + if (entry.getValue() instanceof String) { + newMap.put(entry.getKey(), (String) entry.getValue()); + } + } + return newMap; + } } diff --git a/src/test/java/org/gcube/common/workspacetaskexecutor/TestDataMinerTaskExecutor.java b/src/test/java/org/gcube/common/workspacetaskexecutor/TestDataMinerTaskExecutor.java index b3bb473..db1bbfb 100644 --- a/src/test/java/org/gcube/common/workspacetaskexecutor/TestDataMinerTaskExecutor.java +++ b/src/test/java/org/gcube/common/workspacetaskexecutor/TestDataMinerTaskExecutor.java @@ -4,14 +4,20 @@ package org.gcube.common.workspacetaskexecutor; import java.io.IOException; +import java.io.InputStream; import java.util.ArrayList; import java.util.Arrays; +import java.util.Enumeration; import java.util.List; +import java.util.Properties; import java.util.Random; +import java.util.Set; import java.util.UUID; -import org.gcube.common.homelibrary.home.workspace.WorkspaceItem; +import org.gcube.common.authorization.library.provider.SecurityTokenProvider; import org.gcube.common.scope.api.ScopeProvider; +import org.gcube.common.storagehubwrapper.server.tohl.Workspace; +import org.gcube.common.storagehubwrapper.shared.tohl.WorkspaceItem; import org.gcube.common.workspacetaskexecutor.dataminer.WorkspaceDataMinerTaskExecutor; import org.gcube.common.workspacetaskexecutor.shared.TaskParameter; import org.gcube.common.workspacetaskexecutor.shared.TaskParameterType; @@ -34,17 +40,58 @@ import com.fasterxml.jackson.core.type.TypeReference; */ public class TestDataMinerTaskExecutor { - - public static String USERNAME = "francesco.mangiacrapa"; - public static String SCOPE = "/gcube"; - - public static String WORKSPACE_FOLDER_ID = "682ff48e-0cc9-44df-884d-185fabe8909b"; + public static String USERNAME; + public static String SCOPE; + public static String TOKEN; + public static String WORKSPACE_FOLDER_ID; private static JsonUtil jUtil = new JsonUtil(); //CREATE DUMMY CONFIGURATIONS private static List listDummyConf; + + private static WsUtil wsUtil = new WsUtil(); + + private static String TEST_CONF_PROPERTIES = "test-conf.properties"; + + + private static void loadTestConfig() { + try (InputStream input = TestDataMinerTaskExecutor.class.getClassLoader() + .getResourceAsStream(TEST_CONF_PROPERTIES)) { + + Properties prop = new Properties(); + + if (input == null) { + System.out.println("Sorry, unable to find " + TEST_CONF_PROPERTIES); + return; + } + + prop.load(input); + /* + Enumeration e = prop.propertyNames(); + while (e.hasMoreElements()) { + String key = (String) e.nextElement(); + String value = prop.getProperty(key); + System.out.println("Key : " + key + ", Value : " + value); + } + */ + + System.out.println("Loaded Configurations:"); + USERNAME = prop.getProperty("USERNAME").trim(); + System.out.println("USERNAME: " + USERNAME); + SCOPE = prop.getProperty("SCOPE").trim(); + System.out.println("SCOPE: " + SCOPE); + TOKEN = prop.getProperty("TOKEN").trim(); + System.out.println("TOKEN: " + TOKEN); + WORKSPACE_FOLDER_ID = prop.getProperty("WORKSPACE_FOLDER_ID").trim(); + System.out.println("WORKSPACE_FOLDER_ID: " + WORKSPACE_FOLDER_ID); + + } catch (IOException ex) { + ex.printStackTrace(); + } + + } /** * @@ -63,7 +110,8 @@ public class TestDataMinerTaskExecutor { private static void setDummyTaskConfigurations(WorkspaceDataMinerTaskExecutor exec){ - + System.out.println("\n\nSet Task configurations called..."); + //SET TASK CONFIGURATION try { for (TaskConfiguration taskConfiguration : listDummyConf) { @@ -78,6 +126,7 @@ public class TestDataMinerTaskExecutor { } private static void deleteConfiguration(WorkspaceDataMinerTaskExecutor exec, TaskConfiguration conf){ + System.out.println("\n\nDelete configuration called..."); try { Boolean done = exec.removeTaskConfiguration(conf); System.out.println("\n\nErase configuration done: "+done); @@ -90,87 +139,38 @@ public class TestDataMinerTaskExecutor { public static void main(String[] args) { - + + loadTestConfig(); //jsonCheck(); - ScopeProvider.instance.set(SCOPE); - checkGubeProperties(null); + SecurityTokenProvider.instance.set(TOKEN); +// checkGubeProperties(null); listDummyConf = getDummyListOfConfigurations(3); - checkGubeProperties(listDummyConf); -// WorkspaceDataMinerTaskExecutor exec = WorkspaceDataMinerTaskExecutor.getInstance(); +// checkGubeProperties(listDummyConf); + WorkspaceDataMinerTaskExecutor exec = WorkspaceDataMinerTaskExecutor.getInstance(); + // exec.withOwner(USERNAME); // //jsonCheck(); + + //TESTING SAVE CONFIGURATIONS + setDummyTaskConfigurations(exec); + + //GET LIST TASK CONFIGURATIONS + List listTaskConfigs = getConfigurations(exec); + + //TESTING DELETE ONE CONFIGURATIOn + deleteConfiguration(exec, listTaskConfigs.get(1)); // // //ERASE ALL CONFIGURATIONS -// eraseAllTaskConfigurations(exec); - + // eraseAllTaskConfigurations(exec); //GET LIST CONFIGURATIONS - //getConfigurations(exec); - - //ERASE ALL CONFIGURATIONS - //eraseAllTaskConfigurations(exec); - - //SET TASK CONFIGURATION - //setDummyTaskConfigurations(exec); -// -//// deleteConfiguration(exec, listDummyConf.get(1)); -//// - //getConfigurations(exec); - - -// listDummyConf.get(2).setTaskId("Updated task id"); -// HashMap map = new HashMap(); -// map.put("Pippo", "Value Pippo"); -// map.put("Paperino", "Value Paperino"); -// listDummyConf.get(2).setMapParameters(map); -// -// try { -// exec.setTaskConfiguration(listDummyConf.get(2)); -// } -// catch (Exception e) { -// // TODO Auto-generated catch block -// e.printStackTrace(); -// }; -// -// getConfigurations(exec); - -// -// //UPDATE TASK CONFIGURATION -// HashMap map = new HashMap(); -// map.put("Pippo", "Value Pippo"); -// map.put("Paperino", "Value Paperino"); -// c2.setMapParameters(map); -// -// try { -// exec.setTaskConfiguration(c2); -// } -// catch (Exception e) { -// // TODO Auto-generated catch block -// e.printStackTrace(); -// } - - - -// try { -// //exec.removeTaskConfiguration(taskConfiguration) -// //exec.checkItemExecutable(WORKSPACE_FOLDER_ID); -// } -// catch (ItemNotExecutableException e) { -// // TODO Auto-generated catch block -// e.printStackTrace(); -// -// System.out.println("The item is not executable..."); -// } -// catch (Exception e) { -// // TODO Auto-generated catch block -// e.printStackTrace(); -// } + getConfigurations(exec); } public static List getConfigurations(WorkspaceDataMinerTaskExecutor exec){ - + System.out.println("\n\nGet configuration/s called..."); try { List conf = exec.getListOfTaskConfigurations(WORKSPACE_FOLDER_ID); if(conf!=null){ @@ -178,7 +178,10 @@ public class TestDataMinerTaskExecutor { for (TaskConfiguration taskConfiguration : conf) { System.out.println(taskConfiguration); } + }else { + System.out.println("\n\n No configurations found"); } + return conf; } @@ -192,18 +195,20 @@ public class TestDataMinerTaskExecutor { public static void checkGubeProperties(List listConfigurations){ - //SET - try { - WorkspaceItem workspaceItem = WsUtil.getItem(USERNAME, WORKSPACE_FOLDER_ID); + try { + Workspace workspace = wsUtil.getWorkspace(); + WorkspaceItem workspaceItem = workspace.getItem(WORKSPACE_FOLDER_ID); + + //SET IF list of Configurations is not null if(listConfigurations!=null){ JSONArray jsonArray = jUtil.toJSONArray(listConfigurations); System.out.println("Json array to save: "+jsonArray); - WsUtil.setPropertyValue(workspaceItem, WorkspaceDataMinerTaskExecutor.WS_DM_TASK_TASK_CONF, jsonArray.toString()); + wsUtil.setPropertyValue(workspaceItem, WorkspaceDataMinerTaskExecutor.WS_DM_TASK_TASK_CONF, jsonArray.toString()); } //GET - String jsonArrayConf = WsUtil.getPropertyValue(workspaceItem, WorkspaceDataMinerTaskExecutor.WS_DM_TASK_TASK_CONF); + String jsonArrayConf = wsUtil.getPropertyValue(workspaceItem,WorkspaceDataMinerTaskExecutor.WS_DM_TASK_TASK_CONF); System.out.println("Json array read from "+WorkspaceDataMinerTaskExecutor.WS_DM_TASK_TASK_CONF+": "+jsonArrayConf);