Repository: cxf
Updated Branches:
  refs/heads/2.7.x-fixes 51546af28 -> 5f76a5316


Minor updates to the search parser to beter control the encoding/decoding 
process


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/5f76a531
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/5f76a531
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/5f76a531

Branch: refs/heads/2.7.x-fixes
Commit: 5f76a53165b4136e70a72065105b872ea5719177
Parents: 51546af
Author: Sergey Beryozkin <sberyoz...@talend.com>
Authored: Wed Jul 9 11:00:26 2014 +0100
Committer: Sergey Beryozkin <sberyoz...@talend.com>
Committed: Wed Jul 9 11:09:48 2014 +0100

----------------------------------------------------------------------
 .../apache/cxf/jaxrs/ext/search/SearchContextImpl.java  |  9 ++++++++-
 .../org/apache/cxf/jaxrs/ext/search/SearchUtils.java    |  1 +
 .../apache/cxf/jaxrs/ext/search/fiql/FiqlParser.java    | 12 ++++++++++--
 3 files changed, 19 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/5f76a531/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/SearchContextImpl.java
----------------------------------------------------------------------
diff --git 
a/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/SearchContextImpl.java
 
b/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/SearchContextImpl.java
index bacd4cf..9130577 100644
--- 
a/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/SearchContextImpl.java
+++ 
b/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/SearchContextImpl.java
@@ -46,6 +46,7 @@ public class SearchContextImpl implements SearchContext {
     private static final String USE_PLAIN_QUERY_PARAMETERS = 
"search.use.plain.queries";
     private static final String USE_ALL_QUERY_COMPONENT = 
"search.use.all.query.component";
     private static final String BLOCK_SEARCH_EXCEPTION = 
"search.block.search.exception";
+    private static final String KEEP_QUERY_ENCODED = 
"search.keep.query.encoded";
     private static final Logger LOG = 
LogUtils.getL7dLogger(SearchContextImpl.class);
     private Message message;
     
@@ -115,8 +116,10 @@ public class SearchContextImpl implements SearchContext {
             if 
(MessageUtils.isTrue(message.getContextualProperty(USE_ALL_QUERY_COMPONENT))) {
                 return queryStr;
             }
+            boolean encoded = PropertyUtils.isTrue(getKeepEncodedProperty());
+            
             MultivaluedMap<String, String> params = 
-                JAXRSUtils.getStructuredParams(queryStr, "&", true, false);
+                JAXRSUtils.getStructuredParams(queryStr, "&", !encoded, false);
             String customQueryParamName = 
(String)message.getContextualProperty(CUSTOM_SEARCH_QUERY_PARAM_NAME);
             if (customQueryParamName != null) {
                 return params.getFirst(customQueryParamName);
@@ -145,6 +148,10 @@ public class SearchContextImpl implements SearchContext {
         return builder.and(list).query();
     }
     
+    private String getKeepEncodedProperty() {
+        return (String)message.getContextualProperty(KEEP_QUERY_ENCODED);
+    }
+    
     private CompleteCondition getOrCondition(SearchConditionBuilder builder,
                                              Map.Entry<String, List<String>> 
entry) {
         String key = entry.getKey();

http://git-wip-us.apache.org/repos/asf/cxf/blob/5f76a531/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/SearchUtils.java
----------------------------------------------------------------------
diff --git 
a/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/SearchUtils.java
 
b/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/SearchUtils.java
index 773395e..d4dbc59 100644
--- 
a/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/SearchUtils.java
+++ 
b/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/SearchUtils.java
@@ -31,6 +31,7 @@ public final class SearchUtils {
     public static final String LAX_PROPERTY_MATCH = 
"search.lax.property.match";
     public static final String BEAN_PROPERTY_MAP = "search.bean.property.map";
     public static final String SEARCH_VISITOR_PROPERTY = "search.visitor";
+    public static final String DECODE_QUERY_VALUES = "search.decode.values";
     
     private SearchUtils() {
         

http://git-wip-us.apache.org/repos/asf/cxf/blob/5f76a531/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/fiql/FiqlParser.java
----------------------------------------------------------------------
diff --git 
a/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/fiql/FiqlParser.java
 
b/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/fiql/FiqlParser.java
index 937aba5..39ad123 100644
--- 
a/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/fiql/FiqlParser.java
+++ 
b/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/fiql/FiqlParser.java
@@ -36,7 +36,8 @@ import java.util.regex.Pattern;
 
 import javax.xml.datatype.DatatypeConfigurationException;
 import javax.xml.datatype.DatatypeFactory;
-
+import org.apache.cxf.common.util.PropertyUtils;
+import org.apache.cxf.common.util.UrlUtils;
 import org.apache.cxf.jaxrs.ext.search.AndSearchCondition;
 import org.apache.cxf.jaxrs.ext.search.Beanspector;
 import org.apache.cxf.jaxrs.ext.search.Beanspector.TypeInfo;
@@ -313,6 +314,9 @@ public class FiqlParser<T> implements 
SearchConditionParser<T> {
             TypeInfo typeInfo = 
                 beanspector != null ? beanspector.getAccessorTypeInfo(name) 
                     : new TypeInfo(String.class, String.class);
+            if (isDecodeQueryValues()) {
+                value = UrlUtils.urlDecode(value);
+            } 
             Object object = parseType(originalName, null, null, setter, 
typeInfo, value);
             return new TypeInfoObject(object, typeInfo);
         } catch (Exception e) {
@@ -550,7 +554,11 @@ public class FiqlParser<T> implements 
SearchConditionParser<T> {
             return Character.toUpperCase(name.charAt(0)) + name.substring(1);
         }
     }
-    
+ 
+    protected Boolean isDecodeQueryValues() {
+        return 
PropertyUtils.isTrue(contextProperties.get(SearchUtils.DECODE_QUERY_VALUES));
+    }
+   
     // node of abstract syntax tree
     private interface ASTNode<T> {
         SearchCondition<T> build() throws SearchParseException;

Reply via email to