|
|
|
@ -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<TaskConfiguration, TaskComputation, TaskExecutionStatus>, ExecutableItem<TaskConfiguration>{
|
|
|
|
|
|
|
|
|
@ -49,11 +54,13 @@ public class WorkspaceDataMinerTaskExecutor implements ExecutableTask<TaskConfig
|
|
|
|
|
|
|
|
|
|
public static final String WS_DM_TASK_TASK_CONF = "WS-DM-TASK.TASK-CONF";
|
|
|
|
|
|
|
|
|
|
private String usernameOwner;
|
|
|
|
|
//private String usernameOwner;
|
|
|
|
|
|
|
|
|
|
private DataMinerAccessPoint dataMinerAP;
|
|
|
|
|
|
|
|
|
|
private JsonUtil jsonUtil = new JsonUtil();
|
|
|
|
|
|
|
|
|
|
private WsUtil wsUtil = new WsUtil();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -75,14 +82,14 @@ public class WorkspaceDataMinerTaskExecutor implements ExecutableTask<TaskConfig
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* With owner.
|
|
|
|
|
*
|
|
|
|
|
* @param usernameOwner the username owner
|
|
|
|
|
*/
|
|
|
|
|
public void withOwner(String usernameOwner){
|
|
|
|
|
this.usernameOwner = usernameOwner;
|
|
|
|
|
}
|
|
|
|
|
// /**
|
|
|
|
|
// * With owner.
|
|
|
|
|
// *
|
|
|
|
|
// * @param usernameOwner the username owner
|
|
|
|
|
// */
|
|
|
|
|
// public void withOwner(String usernameOwner){
|
|
|
|
|
// this.usernameOwner = usernameOwner;
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -97,20 +104,6 @@ public class WorkspaceDataMinerTaskExecutor implements ExecutableTask<TaskConfig
|
|
|
|
|
return INSTANCE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Check owner.
|
|
|
|
|
*
|
|
|
|
|
* @throws Exception the exception
|
|
|
|
|
*/
|
|
|
|
|
private void checkOwner() throws Exception {
|
|
|
|
|
|
|
|
|
|
if(usernameOwner==null || usernameOwner.isEmpty())
|
|
|
|
|
throw new Exception("You must set a valid 'usernameOwner'. Using the method #withOwner");
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Validate task configuration.
|
|
|
|
|
*
|
|
|
|
@ -158,9 +151,12 @@ public class WorkspaceDataMinerTaskExecutor implements ExecutableTask<TaskConfig
|
|
|
|
|
public List<TaskConfiguration> getListOfTaskConfigurations(String workspaceItemId) throws Exception {
|
|
|
|
|
logger.debug("Get list of Task Configurations for "+workspaceItemId+" starts...");
|
|
|
|
|
List<TaskConfiguration> 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<TaskConfig
|
|
|
|
|
public WSItemObject loadItem(String itemId){
|
|
|
|
|
WorkspaceItem item = null;
|
|
|
|
|
Validate.notNull(itemId, "Input parameter itemId is null");
|
|
|
|
|
Workspace ws;
|
|
|
|
|
try{
|
|
|
|
|
item = WsUtil.getItem(usernameOwner, itemId);
|
|
|
|
|
//TO-SHUB
|
|
|
|
|
ws = wsUtil.getWorkspace();
|
|
|
|
|
item = ws.getItem(itemId);
|
|
|
|
|
//item = WsUtil.getItem(usernameOwner, itemId);
|
|
|
|
|
}catch(Exception e){
|
|
|
|
|
logger.error("Error during get item with id: "+itemId, e);
|
|
|
|
|
throw new Error("Error during get item with id: "+itemId+". Eihter it does not exit or you have not permissions to read it");
|
|
|
|
@ -249,15 +249,19 @@ public class WorkspaceDataMinerTaskExecutor implements ExecutableTask<TaskConfig
|
|
|
|
|
try {
|
|
|
|
|
wsItem.setItemId(item.getId());
|
|
|
|
|
wsItem.setItemName(item.getName());
|
|
|
|
|
wsItem.setOwner(item.getOwner().getPortalLogin());
|
|
|
|
|
//wsItem.setOwner(item.getOwner().getPortalLogin());
|
|
|
|
|
wsItem.setOwner(item.getOwner());
|
|
|
|
|
wsItem.setFolder(item.isFolder());
|
|
|
|
|
if(!item.isFolder()){
|
|
|
|
|
wsItem.setPublicLink(item.getPublicLink(false));
|
|
|
|
|
URL publicLink = ws.getPublicLinkForFile(item.getId());
|
|
|
|
|
if(publicLink!=null)
|
|
|
|
|
wsItem.setPublicLink(publicLink.toString());
|
|
|
|
|
//wsItem.setPublicLink(item.getPublicLink(false));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return wsItem;
|
|
|
|
|
}
|
|
|
|
|
catch (InternalErrorException e) {
|
|
|
|
|
catch (Exception e) {
|
|
|
|
|
//silent
|
|
|
|
|
logger.warn("Error during filling item properties for item id: "+itemId, e);
|
|
|
|
|
try {
|
|
|
|
@ -265,7 +269,7 @@ public class WorkspaceDataMinerTaskExecutor implements ExecutableTask<TaskConfig
|
|
|
|
|
wsItem.setItemName(item.getName());
|
|
|
|
|
return wsItem;
|
|
|
|
|
}
|
|
|
|
|
catch (InternalErrorException e1) {
|
|
|
|
|
catch (Exception e1) {
|
|
|
|
|
logger.error("Error during filling id and name for item id: "+itemId, e);
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
@ -283,10 +287,13 @@ public class WorkspaceDataMinerTaskExecutor implements ExecutableTask<TaskConfig
|
|
|
|
|
logger.info("Removing task configuration with key: "+taskConfiguration.getConfigurationKey() + " starts...");
|
|
|
|
|
|
|
|
|
|
ValidateTaskConfiguration(taskConfiguration);
|
|
|
|
|
checkOwner();
|
|
|
|
|
boolean found = false;
|
|
|
|
|
|
|
|
|
|
//TO SHUB
|
|
|
|
|
Workspace ws = wsUtil.getWorkspace();
|
|
|
|
|
WorkspaceItem item = ws.getItem(taskConfiguration.getWorkspaceItemId());
|
|
|
|
|
|
|
|
|
|
WorkspaceItem item = WsUtil.getItem(usernameOwner, taskConfiguration.getWorkspaceItemId());
|
|
|
|
|
//WorkspaceItem item = WsUtil.getItem(usernameOwner, taskConfiguration.getWorkspaceItemId());
|
|
|
|
|
List<TaskConfiguration> configurations = getListOfTaskConfigurations(taskConfiguration.getWorkspaceItemId());
|
|
|
|
|
|
|
|
|
|
if(configurations==null)
|
|
|
|
@ -296,6 +303,7 @@ public class WorkspaceDataMinerTaskExecutor implements ExecutableTask<TaskConfig
|
|
|
|
|
List<TaskConfiguration> newConfigurations = new ArrayList<TaskConfiguration>(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<TaskConfig
|
|
|
|
|
|
|
|
|
|
if(found){
|
|
|
|
|
JSONArray newConfgs = jsonUtil.toJSONArray(newConfigurations);
|
|
|
|
|
WsUtil.setPropertyValue(item, WS_DM_TASK_TASK_CONF, newConfgs.toString());
|
|
|
|
|
logger.info("Removed correclty the task configuration "+taskConfiguration+ " from saved configurations");
|
|
|
|
|
wsUtil.setPropertyValue(item, WS_DM_TASK_TASK_CONF, newConfgs.toString());
|
|
|
|
|
//WsUtil.setPropertyValue(item, WS_DM_TASK_TASK_CONF, newConfgs.toString());
|
|
|
|
|
logger.info("Removed correctly the task configuration "+taskConfiguration+ " from saved configurations");
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -334,10 +343,12 @@ public class WorkspaceDataMinerTaskExecutor implements ExecutableTask<TaskConfig
|
|
|
|
|
public void setTaskConfiguration(TaskConfiguration taskConfiguration) throws Exception {
|
|
|
|
|
logger.debug("Set task configuration "+taskConfiguration+" starts...");
|
|
|
|
|
ValidateTaskConfiguration(taskConfiguration);
|
|
|
|
|
checkOwner();
|
|
|
|
|
|
|
|
|
|
boolean found = false;
|
|
|
|
|
WorkspaceItem item = WsUtil.getItem(usernameOwner, taskConfiguration.getWorkspaceItemId());
|
|
|
|
|
//TO SHUB
|
|
|
|
|
Workspace ws = wsUtil.getWorkspace();
|
|
|
|
|
WorkspaceItem item = ws.getItem(taskConfiguration.getWorkspaceItemId());
|
|
|
|
|
//WorkspaceItem item = WsUtil.getItem(usernameOwner, taskConfiguration.getWorkspaceItemId());
|
|
|
|
|
List<TaskConfiguration> configurations = getListOfTaskConfigurations(taskConfiguration.getWorkspaceItemId());
|
|
|
|
|
|
|
|
|
|
if(configurations==null)
|
|
|
|
@ -362,7 +373,8 @@ public class WorkspaceDataMinerTaskExecutor implements ExecutableTask<TaskConfig
|
|
|
|
|
}
|
|
|
|
|
try{
|
|
|
|
|
JSONArray jsonConfigs = jsonUtil.toJSONArray(newConfigurations);
|
|
|
|
|
WsUtil.setPropertyValue(item, WS_DM_TASK_TASK_CONF, jsonConfigs.toString());
|
|
|
|
|
wsUtil.setPropertyValue(item, WS_DM_TASK_TASK_CONF, jsonConfigs.toString());
|
|
|
|
|
//WsUtil.setPropertyValue(item, WS_DM_TASK_TASK_CONF, jsonConfigs.toString());
|
|
|
|
|
logger.debug("Updated json configuration/s is/are: "+jsonConfigs.toString());
|
|
|
|
|
logger.info(taskConfiguration +" added/updated");
|
|
|
|
|
}catch(JSONException e){
|
|
|
|
@ -389,11 +401,14 @@ public class WorkspaceDataMinerTaskExecutor implements ExecutableTask<TaskConfig
|
|
|
|
|
public Boolean eraseAllTaskConfigurations(String itemId) throws ItemNotExecutableException, Exception {
|
|
|
|
|
logger.info("Erase all configurations starts...");
|
|
|
|
|
Validate.notNull(itemId, "The itemId is null");
|
|
|
|
|
checkOwner();
|
|
|
|
|
//Check if the item is executable
|
|
|
|
|
isItemExecutable(itemId);
|
|
|
|
|
WorkspaceItem item = WsUtil.getItem(usernameOwner, itemId);
|
|
|
|
|
WsUtil.setPropertyValue(item, WS_DM_TASK_TASK_CONF, null);
|
|
|
|
|
//TO SHUB
|
|
|
|
|
Workspace ws = wsUtil.getWorkspace();
|
|
|
|
|
WorkspaceItem item = ws.getItem(itemId);
|
|
|
|
|
wsUtil.setPropertyValue(item, WS_DM_TASK_TASK_CONF, null);
|
|
|
|
|
//WorkspaceItem item = WsUtil.getItem(usernameOwner, itemId);
|
|
|
|
|
//WsUtil.setPropertyValue(item, WS_DM_TASK_TASK_CONF, null);
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -406,7 +421,6 @@ public class WorkspaceDataMinerTaskExecutor implements ExecutableTask<TaskConfig
|
|
|
|
|
throws ItemNotExecutableException, TaskNotExecutableException, Exception {
|
|
|
|
|
|
|
|
|
|
ValidateTaskConfiguration(taskConfiguration);
|
|
|
|
|
checkOwner();
|
|
|
|
|
|
|
|
|
|
TaskConfiguration taskConf = getConfigurationFromSaved(taskConfiguration.getWorkspaceItemId(), taskConfiguration.getConfigurationKey());
|
|
|
|
|
DataMinerAccessPoint dap = getDataMinerAccessPoint();
|
|
|
|
|