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 2011/01/19 18:23:48 UTC

svn commit: r1060874 - in /cxf/trunk/rt/frontend/jaxrs/src: main/java/org/apache/cxf/jaxrs/ext/search/ main/java/org/apache/cxf/jaxrs/ext/search/sql/ test/java/org/apache/cxf/jaxrs/ext/search/sql/

Author: sergeyb
Date: Wed Jan 19 17:23:47 2011
New Revision: 1060874

URL: http://svn.apache.org/viewvc?rev=1060874&view=rev
Log:
[CXF-3145] Minor follow-up update: renaming SQLPrinterConditionVisitor to SQLPrinterVisitor and moving it to sql subpackage

Added:
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/sql/
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/sql/SQLPrinterVisitor.java
      - copied, changed from r1059967, cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/SQLPrinterConditionVisitor.java
    cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/ext/search/sql/
    cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/ext/search/sql/SQLPrinterVisitorTest.java   (with props)
Removed:
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/SQLPrinterConditionVisitor.java
Modified:
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/SearchUtils.java

Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/SearchUtils.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/SearchUtils.java?rev=1060874&r1=1060873&r2=1060874&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/SearchUtils.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/SearchUtils.java Wed Jan 19 17:23:47 2011
@@ -18,6 +18,8 @@
  */
 package org.apache.cxf.jaxrs.ext.search;
 
+import org.apache.cxf.jaxrs.ext.search.sql.SQLPrinterVisitor;
+
 public final class SearchUtils {
     
     private SearchUtils() {
@@ -25,7 +27,7 @@ public final class SearchUtils {
     }
     
     public static <T> String toSQL(SearchCondition<T> sc, String table, String... columns) {
-        SearchConditionVisitor<T> visitor = new SQLPrinterConditionVisitor<T>(table, columns);
+        SearchConditionVisitor<T> visitor = new SQLPrinterVisitor<T>(table, columns);
         sc.accept(visitor);
         return visitor.getResult();
     }

Copied: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/sql/SQLPrinterVisitor.java (from r1059967, cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/SQLPrinterConditionVisitor.java)
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/sql/SQLPrinterVisitor.java?p2=cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/sql/SQLPrinterVisitor.java&p1=cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/SQLPrinterConditionVisitor.java&r1=1059967&r2=1060874&rev=1060874&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/SQLPrinterConditionVisitor.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/sql/SQLPrinterVisitor.java Wed Jan 19 17:23:47 2011
@@ -16,22 +16,37 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.cxf.jaxrs.ext.search;
+package org.apache.cxf.jaxrs.ext.search.sql;
 
+import java.util.Map;
+import java.util.logging.Logger;
 
-public class SQLPrinterConditionVisitor<T> implements SearchConditionVisitor<T> {
+import org.apache.cxf.common.logging.LogUtils;
+import org.apache.cxf.jaxrs.ext.search.PrimitiveStatement;
+import org.apache.cxf.jaxrs.ext.search.SearchCondition;
+import org.apache.cxf.jaxrs.ext.search.SearchConditionVisitor;
+import org.apache.cxf.jaxrs.ext.search.SearchUtils;
 
+
+public class SQLPrinterVisitor<T> implements SearchConditionVisitor<T> {
+
+    private static final Logger LOG = LogUtils.getL7dLogger(SQLPrinterVisitor.class);
+    
     private StringBuilder sb;
     private String table;
     private String[] columns;
-
+    private Map<String, String> fieldMap;
     
-    public SQLPrinterConditionVisitor(String table, String... columns) {
+    public SQLPrinterVisitor(String table, String... columns) {
+        this(null, table, columns);
+    }
+    
+    public SQLPrinterVisitor(Map<String, String> fieldMap, String table, String... columns) {
+        this.fieldMap = fieldMap;
         this.columns = columns;
         this.table = table;
     }
     
-    
     public void visit(SearchCondition<T> sc) {
         
         if (sb == null) {
@@ -45,7 +60,17 @@ public class SQLPrinterConditionVisitor<
         if (statement != null) {
             if (statement.getProperty() != null) {
                 String rvalStr = statement.getValue().toString().replaceAll("\\*", "%");
-                sb.append(statement.getProperty()).append(" ").append(
+                String name = statement.getProperty();
+                if (fieldMap != null) {
+                    if (fieldMap.containsKey(name)) {
+                        name = fieldMap.get(name);
+                    } else {
+                        LOG.warning("Unrecognized field alias : " + name);
+                        return;
+                    }
+                }
+                
+                sb.append(name).append(" ").append(
                             SearchUtils.conditionTypeToSqlOperator(sc.getConditionType(), rvalStr))
                             .append(" ").append("'").append(rvalStr).append("'");
             }

Added: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/ext/search/sql/SQLPrinterVisitorTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/ext/search/sql/SQLPrinterVisitorTest.java?rev=1060874&view=auto
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/ext/search/sql/SQLPrinterVisitorTest.java (added)
+++ cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/ext/search/sql/SQLPrinterVisitorTest.java Wed Jan 19 17:23:47 2011
@@ -0,0 +1,156 @@
+/**
+ * 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.sql;
+
+import java.util.Collections;
+import java.util.Date;
+
+import org.apache.cxf.jaxrs.ext.search.FiqlParseException;
+import org.apache.cxf.jaxrs.ext.search.FiqlParser;
+import org.apache.cxf.jaxrs.ext.search.SearchCondition;
+
+import org.junit.Assert;
+import org.junit.Ignore;
+import org.junit.Test;
+
+
+public class SQLPrinterVisitorTest extends Assert {
+    private FiqlParser<Condition> parser = new FiqlParser<Condition>(Condition.class);
+
+    @Test
+    public void testSQL1() throws FiqlParseException {
+        SearchCondition<Condition> filter = parser.parse("name==ami*;level=gt=10");
+        SQLPrinterVisitor<Condition> visitor = new SQLPrinterVisitor<Condition>("table");
+        filter.accept(visitor);
+        String sql = visitor.getResult();
+        
+        assertTrue("SELECT * FROM table WHERE (name LIKE 'ami%') AND (level > '10')".equals(sql)
+                   || "SELECT * FROM table WHERE (level > '10') AND (name LIKE 'ami%')".equals(sql));
+    }
+    
+    @Test
+    public void testSQL2() throws FiqlParseException {
+        SearchCondition<Condition> filter = parser.parse("name==ami*,level=gt=10");
+        SQLPrinterVisitor<Condition> visitor = new SQLPrinterVisitor<Condition>("table");
+        filter.accept(visitor);
+        String sql = visitor.getResult();
+        assertTrue("SELECT * FROM table WHERE (name LIKE 'ami%') OR (level > '10')".equals(sql)
+                   || "SELECT * FROM table WHERE (level > '10') OR (name LIKE 'ami%')".equals(sql));
+    }
+    
+    @Test
+    public void testSQL3() throws FiqlParseException {
+        SearchCondition<Condition> filter = parser.parse("name==foo*;(name!=*bar,level=gt=10)");
+        SQLPrinterVisitor<Condition> visitor = new SQLPrinterVisitor<Condition>("table");
+        filter.accept(visitor);
+        String sql = visitor.getResult();
+        assertTrue(("SELECT * FROM table WHERE (name LIKE 'foo%') AND ((name NOT LIKE '%bar') "
+                   + "OR (level > '10'))").equals(sql)
+                   || ("SELECT * FROM table WHERE (name LIKE 'foo%') AND "
+                   + "((level > '10') OR (name NOT LIKE '%bar'))").equals(sql));
+    }
+    
+    @Test
+    public void testSQL4() throws FiqlParseException {
+        SearchCondition<Condition> filter = parser.parse("(name==test,level==18);(name==test1,level!=19)");
+        SQLPrinterVisitor<Condition> visitor = new SQLPrinterVisitor<Condition>("table");
+        filter.accept(visitor);
+        String sql = visitor.getResult();
+        assertTrue(("SELECT * FROM table WHERE ((name = 'test') OR (level = '18'))"
+                   + " AND ((name = 'test1') OR (level <> '19'))").equals(sql)
+                   || ("SELECT * FROM table WHERE ((name = 'test1') OR (level <> '19'))"
+                   + " AND ((name = 'test') OR (level = '18'))").equals(sql));
+    }
+    
+    @Test
+    public void testSQL5() throws FiqlParseException {
+        SearchCondition<Condition> filter = parser.parse("name==test");
+        SQLPrinterVisitor<Condition> visitor = new SQLPrinterVisitor<Condition>("table");
+        filter.accept(visitor);
+        String sql = visitor.getResult();
+        assertTrue("SELECT * FROM table WHERE name = 'test'".equals(sql));
+    }
+    
+    @Test
+    public void testSQL5WithColumns() throws FiqlParseException {
+        SearchCondition<Condition> filter = parser.parse("name==test");
+        SQLPrinterVisitor<Condition> visitor = 
+            new SQLPrinterVisitor<Condition>("table", "NAMES");
+        filter.accept(visitor);
+        String sql = visitor.getResult();
+        assertTrue("SELECT NAMES FROM table WHERE name = 'test'".equals(sql));
+    }
+    
+    @Test
+    public void testSQL5WithFieldMap() throws FiqlParseException {
+        SearchCondition<Condition> filter = parser.parse("name==test");
+        SQLPrinterVisitor<Condition> visitor = 
+            new SQLPrinterVisitor<Condition>(
+                Collections.singletonMap("name", "NAMES"),
+                "table", "NAMES");
+        filter.accept(visitor);
+        String sql = visitor.getResult();
+        assertTrue("SELECT NAMES FROM table WHERE NAMES = 'test'".equals(sql));
+    }
+    
+    @Ignore
+    public static class Condition {
+        private String name;
+        private Integer level;
+        private Date time;
+
+        public Condition() {
+        }
+
+        public Condition(String name, Integer level, Date time) {
+            this.name = name;
+            this.level = level;
+            this.time = time;
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public int getLevel() {
+            return level;
+        }
+
+        public void setLevel(int level) {
+            this.level = level;
+        }
+
+        public Date getTime() {
+            return time;
+        }
+
+        public void setTime(Date time) {
+            this.time = time;
+        }
+
+        public void setException(Exception ex) {
+            // do nothing
+        }
+
+    }
+}

Propchange: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/ext/search/sql/SQLPrinterVisitorTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/ext/search/sql/SQLPrinterVisitorTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date