You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by se...@apache.org on 2013/09/05 15:23:32 UTC

svn commit: r1520298 - in /cxf/trunk/rt/rs/extensions/search/src: main/java/org/apache/cxf/jaxrs/ext/search/ main/java/org/apache/cxf/jaxrs/ext/search/jpa/ main/java/org/apache/cxf/jaxrs/ext/search/lucene/ main/java/org/apache/cxf/jaxrs/ext/search/sql/...

Author: sergeyb
Date: Thu Sep  5 13:23:31 2013
New Revision: 1520298

URL: http://svn.apache.org/r1520298
Log:
[CXF-5253] Updating JPA visitor to support exact match for non wildcard strings by default

Added:
    cxf/trunk/rt/rs/extensions/search/src/test/java/org/apache/cxf/jaxrs/ext/search/SearchUtilsTest.java   (with props)
Modified:
    cxf/trunk/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/SearchUtils.java
    cxf/trunk/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/jpa/AbstractJPATypedQueryVisitor.java
    cxf/trunk/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/lucene/LuceneQueryVisitor.java
    cxf/trunk/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/sql/SQLPrinterVisitor.java
    cxf/trunk/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/visitor/AbstractSearchConditionVisitor.java

Modified: cxf/trunk/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/SearchUtils.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/SearchUtils.java?rev=1520298&r1=1520297&r2=1520298&view=diff
==============================================================================
--- cxf/trunk/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/SearchUtils.java (original)
+++ cxf/trunk/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/SearchUtils.java Thu Sep  5 13:23:31 2013
@@ -52,6 +52,20 @@ public final class SearchUtils {
         return visitor.getQuery();
     }
     
+    public static String toSqlWildcardString(String value, boolean alwaysWildcard) {
+        if (!value.contains("*")) {
+            return alwaysWildcard ? "%" + value + "%" : value;
+        }
+        
+        if (value.startsWith("*")) { 
+            value = "%" + value.substring(1);
+        }
+        if (value.endsWith("*")) { 
+            value = value.substring(0, value.length() - 1) + "%";
+        }
+        return value;
+    }
+    
     public static void startSqlQuery(StringBuilder sb, 
                                      String table,
                                      String tableAlias,

Modified: cxf/trunk/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/jpa/AbstractJPATypedQueryVisitor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/jpa/AbstractJPATypedQueryVisitor.java?rev=1520298&r1=1520297&r2=1520298&view=diff
==============================================================================
--- cxf/trunk/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/jpa/AbstractJPATypedQueryVisitor.java (original)
+++ cxf/trunk/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/jpa/AbstractJPATypedQueryVisitor.java Thu Sep  5 13:23:31 2013
@@ -40,6 +40,7 @@ import org.apache.cxf.jaxrs.ext.search.C
 import org.apache.cxf.jaxrs.ext.search.OrSearchCondition;
 import org.apache.cxf.jaxrs.ext.search.PrimitiveStatement;
 import org.apache.cxf.jaxrs.ext.search.SearchCondition;
+import org.apache.cxf.jaxrs.ext.search.SearchUtils;
 import org.apache.cxf.jaxrs.ext.search.collections.CollectionCheckInfo;
 import org.apache.cxf.jaxrs.ext.search.visitor.AbstractSearchConditionVisitor;
 
@@ -196,11 +197,12 @@ public abstract class AbstractJPATypedQu
             break;
         case EQUALS:
             if (clazz.equals(String.class)) {
-                String theValue = value.toString();
-                if (theValue.contains("*")) {
-                    theValue = ((String)value).replaceAll("\\*", "");
+                String theValue = SearchUtils.toSqlWildcardString(value.toString(), isWildcardStringMatch());
+                if (theValue.contains("%")) {
+                    pred = builder.like((Expression<String>)exp, theValue);
+                } else {
+                    pred = builder.equal(exp, clazz.cast(value));
                 }
-                pred = builder.like((Expression<String>)exp, "%" + theValue + "%");
             } else {
                 pred = builder.equal(exp, clazz.cast(value));
             }

Modified: cxf/trunk/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/lucene/LuceneQueryVisitor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/lucene/LuceneQueryVisitor.java?rev=1520298&r1=1520297&r2=1520298&view=diff
==============================================================================
--- cxf/trunk/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/lucene/LuceneQueryVisitor.java (original)
+++ cxf/trunk/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/lucene/LuceneQueryVisitor.java Thu Sep  5 13:23:31 2013
@@ -140,18 +140,18 @@ public class LuceneQueryVisitor<T> exten
         Query query = null;
         if (cls == String.class) {
             String strValue = value.toString();
-            int wildCardIndex = strValue.indexOf('*'); 
+            boolean isWildCard = strValue.contains("*") || super.isWildcardStringMatch(); 
             
             String theContentsFieldName = getContentsFieldName(name);
             if (theContentsFieldName == null) {
                 Term term = new Term(name, strValue);
                 
-                if (wildCardIndex == -1) {
+                if (!isWildCard) {
                     query = new TermQuery(term);
                 } else {
                     query = new WildcardQuery(term);
                 } 
-            } else if (wildCardIndex == -1) {
+            } else if (!isWildCard) {
                 PhraseQuery pquery = new PhraseQuery();
                 pquery.add(new Term(theContentsFieldName, name));
                 pquery.add(new Term(theContentsFieldName, strValue));

Modified: cxf/trunk/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/sql/SQLPrinterVisitor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/sql/SQLPrinterVisitor.java?rev=1520298&r1=1520297&r2=1520298&view=diff
==============================================================================
--- cxf/trunk/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/sql/SQLPrinterVisitor.java (original)
+++ cxf/trunk/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/sql/SQLPrinterVisitor.java Thu Sep  5 13:23:31 2013
@@ -70,16 +70,16 @@ public class SQLPrinterVisitor<T> extend
                 String name = getRealPropertyName(statement.getProperty());
                 String value = getPropertyValue(name, statement.getValue());
                 validatePropertyValue(name, value);
-                String rvalStr = value.replaceAll("\\*", "%");
                 
+                value = SearchUtils.toSqlWildcardString(value, isWildcardStringMatch());
                                 
                 if (tableAlias != null) {
                     name = tableAlias + "." + name;
                 }
                 
                 sb.append(name).append(" ").append(
-                            SearchUtils.conditionTypeToSqlOperator(sc.getConditionType(), rvalStr))
-                            .append(" ").append("'").append(rvalStr).append("'");
+                            SearchUtils.conditionTypeToSqlOperator(sc.getConditionType(), value))
+                            .append(" ").append("'").append(value).append("'");
             }
         } else {
             boolean first = true;

Modified: cxf/trunk/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/visitor/AbstractSearchConditionVisitor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/visitor/AbstractSearchConditionVisitor.java?rev=1520298&r1=1520297&r2=1520298&view=diff
==============================================================================
--- cxf/trunk/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/visitor/AbstractSearchConditionVisitor.java (original)
+++ cxf/trunk/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/visitor/AbstractSearchConditionVisitor.java Thu Sep  5 13:23:31 2013
@@ -37,6 +37,7 @@ public abstract class AbstractSearchCond
     private Map<String, String> fieldMap;
     private Map<String, Class<?>> primitiveFieldTypeMap;
     private PropertyValidator<Object> validator;
+    private boolean wildcardStringMatch;
     
     protected AbstractSearchConditionVisitor(Map<String, String> fieldMap) {
         this.fieldMap = fieldMap;
@@ -169,4 +170,12 @@ public abstract class AbstractSearchCond
     public void setValidator(PropertyValidator<Object> validator) {
         this.validator = validator;
     }
+
+    public boolean isWildcardStringMatch() {
+        return wildcardStringMatch;
+    }
+
+    public void setWildcardStringMatch(boolean wildcardStringMatch) {
+        this.wildcardStringMatch = wildcardStringMatch;
+    }
 }

Added: cxf/trunk/rt/rs/extensions/search/src/test/java/org/apache/cxf/jaxrs/ext/search/SearchUtilsTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/rs/extensions/search/src/test/java/org/apache/cxf/jaxrs/ext/search/SearchUtilsTest.java?rev=1520298&view=auto
==============================================================================
--- cxf/trunk/rt/rs/extensions/search/src/test/java/org/apache/cxf/jaxrs/ext/search/SearchUtilsTest.java (added)
+++ cxf/trunk/rt/rs/extensions/search/src/test/java/org/apache/cxf/jaxrs/ext/search/SearchUtilsTest.java Thu Sep  5 13:23:31 2013
@@ -0,0 +1,55 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.cxf.jaxrs.ext.search;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class SearchUtilsTest extends Assert {
+
+    @Test
+    public void testSqlWildcardString() {
+        assertEquals("abc", SearchUtils.toSqlWildcardString("abc", false));
+    }
+    
+    @Test
+    public void testSqlWildcardStringAlways() {
+        assertEquals("%abc%", SearchUtils.toSqlWildcardString("abc", true));
+    }
+    
+    @Test
+    public void testSqlWildcardString2() {
+        assertEquals("%abc", SearchUtils.toSqlWildcardString("*abc", false));
+    }
+    
+    @Test
+    public void testSqlWildcardString3() {
+        assertEquals("abc%", SearchUtils.toSqlWildcardString("abc*", false));
+    }
+    
+    @Test
+    public void testSqlWildcardString4() {
+        assertEquals("%abc%", SearchUtils.toSqlWildcardString("*abc*", false));
+    }
+    
+    @Test
+    public void testSqlWildcardString5() {
+        assertEquals("%", SearchUtils.toSqlWildcardString("*", false));
+    }
+}

Propchange: cxf/trunk/rt/rs/extensions/search/src/test/java/org/apache/cxf/jaxrs/ext/search/SearchUtilsTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/rt/rs/extensions/search/src/test/java/org/apache/cxf/jaxrs/ext/search/SearchUtilsTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date