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 1162ced..dc5ec9a 100644 --- a/src/main/java/org/gcube/common/workspacetaskexecutor/dataminer/WorkspaceDataMinerTaskExecutor.java +++ b/src/main/java/org/gcube/common/workspacetaskexecutor/dataminer/WorkspaceDataMinerTaskExecutor.java @@ -1,6 +1,7 @@ package org.gcube.common.workspacetaskexecutor.dataminer; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import org.apache.commons.lang.Validate; @@ -449,7 +450,6 @@ public class WorkspaceDataMinerTaskExecutor implements ExecutableTask getListOperators(String[] filterForParameterTypes, FilterOperator operator) throws Exception{ - logger.info("Getting list operators applying filters: "+filterForParameterTypes+", operator: "+operator); DataMinerAccessPoint dap = getDataMinerAccessPoint(); @@ -458,6 +458,11 @@ public class WorkspaceDataMinerTaskExecutor implements ExecutableTask listFilterParameterTypes = new ArrayList(); + listFilterParameterTypes.addAll(Arrays.asList(filterForParameterTypes)); + listFilterParameterTypes.removeAll(Arrays.asList("", null)); + logger.info("Getting list operators applying filters: "+listFilterParameterTypes+", operator: "+operator); + List filteredListOperators = new ArrayList(dap.getListOperators().size()); if(operator==null){ @@ -471,25 +476,39 @@ public class WorkspaceDataMinerTaskExecutor implements ExecutableTask io = taskOperator.getInputOperators(); int filterPassed = 0; + List matchedFilter = new ArrayList(); for (TaskParameter taskParameter : io) { - logger.trace("key: "+taskParameter.getKey() + ", value: "+taskParameter.getValue() +", defaultValue: "+taskParameter.getDefaultValue()); - for (String filterParameterName : filterForParameterTypes) { - if(taskParameter.getType().getType().compareToIgnoreCase(filterParameterName)==0){ - filterPassed++; + logger.trace("has type: "+taskParameter.getType()); + for (String filterParameterName : listFilterParameterTypes) { + if(taskParameter.getType()!=null){ + if(taskParameter.getType().getType().compareToIgnoreCase(filterParameterName)==0){ + //IGNORING FILTER ALREADY MATCHED + if(!matchedFilter.contains(filterParameterName)){ + matchedFilter.add(filterParameterName); + filterPassed++; + } + } } } } if(operator.equals(FilterOperator.LOGICAL_OR) && filterPassed>=1){ filteredListOperators.add(taskOperator); - logger.debug("Added operator: "+taskOperator + " It is matching "+FilterOperator.LOGICAL_OR +" and filterPassed>=1"); + logger.info("Added operator: "+taskOperator.getName() + " It is matching "+FilterOperator.LOGICAL_OR +" with filters: "+listFilterParameterTypes); + logger.trace("Operators are: "+taskOperator.getInputOperators()); //IN AND ALL FILTERS MUST BE MATCHED - }else if(operator.equals(FilterOperator.LOGICAL_AND) && filterPassed==filterForParameterTypes.length){ + }else if(operator.equals(FilterOperator.LOGICAL_AND) && filterPassed==listFilterParameterTypes.size()){ filteredListOperators.add(taskOperator); - logger.debug("Added operator: "+taskOperator + " It is matching "+FilterOperator.LOGICAL_AND +" and filterPassed==filterForParameterNames.length"); + logger.info("Added operator: "+taskOperator.getName()+ " It is matching "+FilterOperator.LOGICAL_AND +" with filters: "+listFilterParameterTypes); + logger.trace("Operators are: "+taskOperator.getInputOperators()); } - else{ - logger.info("Removed operator: "+taskOperator + " It does not match the filters: "+filterForParameterTypes); + else if(operator.equals(FilterOperator.LOGICAL_NOT) && filterPassed==0){ + filteredListOperators.add(taskOperator); + logger.info("Added operator: "+taskOperator.getName() + " It is matching "+FilterOperator.LOGICAL_NOT +" with filters: "+listFilterParameterTypes); + logger.trace("Operators are: "+taskOperator.getInputOperators()); + }else{ + logger.info("Removed operator: "+taskOperator.getName() + " It is not matching the operator: "+operator+" with filters: "+listFilterParameterTypes); + logger.trace("Operators are: "+taskOperator.getInputOperators()); filteredListOperators.remove(taskOperator); } diff --git a/src/main/java/org/gcube/common/workspacetaskexecutor/shared/FilterOperator.java b/src/main/java/org/gcube/common/workspacetaskexecutor/shared/FilterOperator.java index 788c1ab..762d9e9 100644 --- a/src/main/java/org/gcube/common/workspacetaskexecutor/shared/FilterOperator.java +++ b/src/main/java/org/gcube/common/workspacetaskexecutor/shared/FilterOperator.java @@ -15,5 +15,6 @@ import java.io.Serializable; public enum FilterOperator implements Serializable{ LOGICAL_OR, - LOGICAL_AND; + LOGICAL_AND, + LOGICAL_NOT; }