From 8cc1491361658a734285419150aaf721547be25b Mon Sep 17 00:00:00 2001 From: "fabio.simeoni" Date: Thu, 17 Jan 2013 18:03:05 +0000 Subject: [PATCH] merged from trunk git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/branches/information-system/ic-client/1.0@67999 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../resources/discovery/icclient/Helper.java | 70 +++++++++++++------ src/test/java/org/acme/APIClient.java | 2 +- 2 files changed, 51 insertions(+), 21 deletions(-) diff --git a/src/main/java/org/gcube/resources/discovery/icclient/Helper.java b/src/main/java/org/gcube/resources/discovery/icclient/Helper.java index ec353bf..0482a25 100644 --- a/src/main/java/org/gcube/resources/discovery/icclient/Helper.java +++ b/src/main/java/org/gcube/resources/discovery/icclient/Helper.java @@ -3,7 +3,9 @@ package org.gcube.resources.discovery.icclient; import static org.gcube.common.scope.impl.ScopeBean.Type.*; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map.Entry; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -17,6 +19,8 @@ public class Helper { private static final Logger log = LoggerFactory.getLogger(Helper.class); + + public static String queryAddAuthenticationControl(String expression) throws MalformedQueryException { @@ -24,6 +28,7 @@ public class Helper { if (scope==null || !new ScopeBean(scope).is(VRE)) return expression; + int wherePathIndex=0; int returnPathIndex=0; @@ -34,13 +39,15 @@ public class Helper { String whereInsertFinal=""; String temp=""; + HashMap varReplacementMap = new HashMap(); + String forPropertiesString="\n *VAR* in *COLLECTION*/Data/child::*[local-name()='Scopes'] \n"; String forString=" *VAR* in *COLLECTION*/Scopes \n"; String authString=" (contains(*VAR*//Scope,'"+scope+"') or contains(*VAR*//Scope,'"+scope.substring(0,scope.lastIndexOf("/"))+"')) "; String authStringNormal=" contains(*VAR*//Scope,'"+scope+"') "; String queryFiltered; - List collInsert= new ArrayList(); + List collInsert= new ArrayList(); Pattern wherePattern= Pattern.compile("where"); //mathcing , $result in $outer/Data Pattern inSubResult= Pattern.compile("(,\\s*([^\\s]*)\\s*in\\s*([^\\s]*)\\s*)(where|order\\sby|return)"); @@ -79,22 +86,29 @@ public class Helper { String tempPath=""; try{ tempPath= temp.substring(resourceMat.end()); + if (propBool) { String resourceMatString= resourceMat.group(); + forStringTemp=forPropertiesString.replace("*VAR*","$entry"+collInsert.size()+"ValueAuth" ).replace("*COLLECTION*", resourceMatString ); - Pair c= new Pair("let "+varMat.group()+" := "+" $entry"+collInsert.size()+"ValueAuth/.."+tempPath, true); - collInsert.add(c); + String oldVar = varMat.group(); + + String newVar = "$entry"+collInsert.size()+"ValueAuth"; + collInsert.add(true); + varReplacementMap.put(oldVar, newVar+"/.."+tempPath); } else { String resourceMatString= resourceMat.group(); - forStringTemp=forString.replace("*VAR*","$entry"+collInsert.size()+"ValueAuth" ).replace("*COLLECTION*",resourceMatString ); - Pair c= new Pair("let "+varMat.group()+" := "+" $entry"+collInsert.size()+"ValueAuth/.."+tempPath, (resourceMatString.contains("/Profiles/RunningInstance") || resourceMatString.contains("/Profiles/GHN") || resourceMatString.contains("/Profiles/Service"))); - collInsert.add(c); + String oldVar = varMat.group(); + String newVar = "$entry"+collInsert.size()+"ValueAuth"; + forStringTemp=forString.replace("*VAR*",newVar ).replace("*COLLECTION*",resourceMatString ); + collInsert.add(resourceMatString.contains("/Profiles/RunningInstance") || resourceMatString.contains("/Profiles/GHN") || resourceMatString.contains("/Profiles/Service")); + varReplacementMap.put(oldVar, newVar+"/.."+tempPath); } }catch(IllegalStateException e){ log.debug("error parsing statement");} - expression=expression.substring(0, collIndexStart)+ forStringTemp +expression.substring(collIndexEnd); + expression=expression.substring(0, collIndexStart)+ forStringTemp +expression.substring(collIndexEnd); collMat=collectionPattern.matcher(expression); } @@ -105,18 +119,19 @@ public class Helper { for (int i=0; i entry: varReplacementMap.entrySet()) + queryFiltered = queryFiltered.replace(entry.getKey(), entry.getValue()); + +/* if (inSubResultString.compareTo("")!=0){ + String newInSubResultString = inSubResultString; + for (Entry entry: varReplacementMap.entrySet()) + newInSubResultString = newInSubResultString.replace(entry.getKey(), entry.getValue()); + + queryFiltered =queryFiltered.replace(inSubResultString, newInSubResultString); + /* String firstVar=inSubResultMat.group(2); String replaceVar=inSubResultMat.group(3); + queryFiltered= queryFiltered.replace(firstVar, replaceVar); - //System.out.println(firstVar); - //System.out.println(replaceVar); - } + System.out.println(firstVar); + System.out.println(replaceVar); + System.out.println("query filtered final: "+queryFiltered); + + } else + queryFiltered=queryFiltered.replace(inSubResultString, ""); + */ log.trace("submitting filtered query: {}",queryFiltered); return queryFiltered; } - + /* private static class Pair { private String toInsert; //is strange Behaviour is true if we are searching for RI , GHN or Service @@ -199,7 +229,7 @@ public class Helper { return this.isStrangeBehaviour; } } - + */ } diff --git a/src/test/java/org/acme/APIClient.java b/src/test/java/org/acme/APIClient.java index 7aca257..c92cd5f 100644 --- a/src/test/java/org/acme/APIClient.java +++ b/src/test/java/org/acme/APIClient.java @@ -26,7 +26,7 @@ public class APIClient { @BeforeClass public static void setup() { - ScopeProvider.instance.set("/gcube/devsec"); + ScopeProvider.instance.set("/gcube/devsec/devVre"); }