workspace-tree-widget/src/main/java/org/gcube/portlets/user/workspace/server/util/scope/ScopeUtilFilter.java

150 lines
3.7 KiB
Java

package org.gcube.portlets.user.workspace.server.util.scope;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.log4j.Logger;
public class ScopeUtilFilter {
private static final String SCOPE_SEPARATOR = "/";
private String scopeRoot = null;
public static Logger logger = Logger.getLogger(ScopeUtilFilter.class);
public Map<String, String> hashScopesFiltered = new HashMap<String, String>();
public static final String ALLSCOPE = "All spaces";
public static final String IDALLSCOPE = "ID All spaces";
public ScopeUtilFilter(String scopeName) {
if(scopeName!=null){
String[] scopes = scopeName.split(SCOPE_SEPARATOR);
if(scopes!=null && scopes.length>1){
scopeRoot = SCOPE_SEPARATOR+scopes[1];
logger.trace("found root "+scopeRoot);
}
else{
logger.warn("root scope not found!");
scopeRoot = SCOPE_SEPARATOR;
}
hashScopesFiltered.put(ALLSCOPE, IDALLSCOPE); //PUT DEFAULT ID ALL SCOPE
}
}
public List<String> convertListScopeToPortlet(List<String> listScopes){
logger.trace("Scope converting...");
List<String> scopesConverted = new ArrayList<String>();
scopesConverted.add(ALLSCOPE);
if(scopeRoot.compareTo(SCOPE_SEPARATOR)==0){
logger.warn("root scope is '"+SCOPE_SEPARATOR+"' return list scopes passed in input");
return listScopes;
}
for (String scope : listScopes) {
if(scope.compareTo(scopeRoot)==0){ //CASE SCOPE IS ROOT
logger.trace("found scope root "+scope+" added to list without converting");
hashScopesFiltered.put(scopeRoot, scopeRoot);
scopesConverted.add(scopeRoot);
} else{
int index = scope.indexOf(scopeRoot,0);
int start = index+scopeRoot.length();
int end = scope.length();
//DEBUG
// System.out.println("\n\n ");
// System.out.println("index "+index);
// System.out.println("start "+start);
// System.out.println("end "+end);
if(index!=-1){ //CASE SCOPE ROOT IS FOUND
String filerString = scope.substring(index+start, scope.length());
hashScopesFiltered.put(filerString, scope);
scopesConverted.add(filerString);
logger.trace("scope "+scope+ " is converted in: "+filerString);
}else{ //CASE SCOPE ROOT NOT IS FOUND
logger.warn("scope "+scope + " was reject from filter");
}
}
}
logger.trace("Scope converting was completed");
return scopesConverted;
}
public String getPortalScopeFromFilteredScope(String scope){
String portalScope = hashScopesFiltered.get(scope);
if(portalScope==null){
logger.warn("scope not found in scope fiter, return root scope "+scopeRoot);
return scopeRoot;
}
return portalScope;
}
public Map<String, String> getHashScopesFiltered() {
return hashScopesFiltered;
}
//TEST
private void printScopeName(String scopeName){
String[] scopes = scopeName.split(SCOPE_SEPARATOR);
for (String scope : scopes) {
System.out.println("scope split: "+scope);
}
}
private void printScopes(){
for (String key : hashScopesFiltered.keySet()) {
System.out.println("Scope found: "+ hashScopesFiltered.get(key) +" with key: "+ key);
}
}
public static void main(String[] args) {
String scope = "/gcube";
List<String> listTest = Arrays.asList(new String[]{"/gcube/devsec/devre", "/gcube/devsec","/gcube/devsec/devNEXT", "/", "/gcub", "/gcube"});
ScopeUtilFilter filter = new ScopeUtilFilter(scope);
filter.convertListScopeToPortlet(listTest);
System.out.println("get portal scope "+filter.getPortalScopeFromFilteredScope("/devsec"));
filter.printScopes();
}
}