From 8501fde4668f94ce0e7135133ab67deb5de7689a Mon Sep 17 00:00:00 2001 From: Lucio Lelii Date: Tue, 13 Dec 2016 15:01:04 +0000 Subject: [PATCH] git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/branches/information-system/ic-client/1.0@139987 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../resources/discovery/icclient/Helper.java | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 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 5b18fb1..919abbc 100644 --- a/src/main/java/org/gcube/resources/discovery/icclient/Helper.java +++ b/src/main/java/org/gcube/resources/discovery/icclient/Helper.java @@ -169,13 +169,7 @@ public class Helper { if (letFound) letPathIndex=letMat.start(); }catch(IllegalStateException e){ log.error("error parsing let statement"); throw new MalformedQueryException("error parsing let statement");} - int indexOfFor = queryFiltered.indexOf("for "); - - String functionContainsDeclaration =" declare namespace functx = \"http://www.functx.com\"; declare function functx:is-value-in-sequence "+ - " ( $value as xs:anyAtomicType? , $seq as xs:anyAtomicType* ) as xs:boolean { $value = $seq } ; \n"; - - queryFiltered = queryFiltered.substring(0,indexOfFor)+functionContainsDeclaration+queryFiltered.substring(indexOfFor); - + if (!letFound) { queryFiltered=queryFiltered.substring(0,wherePathIndex)+forInsertFinal +queryFiltered.substring(wherePathIndex); } @@ -187,6 +181,21 @@ public class Helper { queryFiltered = queryFiltered.replace(entry.getKey(), entry.getValue()); + String functionContainsDeclaration =" declare namespace functx = \"http://www.functx.com\"; declare function functx:is-value-in-sequence "+ + " ( $value as xs:anyAtomicType? , $seq as xs:anyAtomicType* ) as xs:boolean { $value = $seq } ; \n"; + + Pattern declarePattern=Pattern.compile("(declare namespace .*;)*", Pattern.DOTALL); + Matcher declareMat=declarePattern.matcher(queryFiltered); + + boolean declareFound = declareMat.find(0); + int declareIndex = 0; + if (declareFound){ + declareIndex = declareMat.end(); + queryFiltered = queryFiltered.substring(0, declareIndex)+functionContainsDeclaration+queryFiltered.substring(declareIndex); + } else + queryFiltered= functionContainsDeclaration +queryFiltered; + + log.trace("submitting filtered query: {}",queryFiltered); return queryFiltered; }