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/17 14:42:02 UTC
svn commit: r1059923 - in /cxf/trunk/rt:
frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/
frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/ext/search/
management-web/src/main/java/org/apache/cxf/management/web/logging/atom/
Author: sergeyb
Date: Mon Jan 17 13:42:01 2011
New Revision: 1059923
URL: http://svn.apache.org/viewvc?rev=1059923&view=rev
Log:
[CXF-3145] Applying a slightly modified patch on behalf of Brian Topping - thanks
Added:
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/SQLPrinterConditionVisitor.java (with props)
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/SearchConditionVisitor.java (with props)
Modified:
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/AbstractComplexCondition.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/PrimitiveSearchCondition.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/PrimitiveStatement.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/SearchCondition.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/SearchUtils.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/SimpleSearchCondition.java
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/ext/search/FiqlParserTest.java
cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/logging/atom/AtomPullServer.java
Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/AbstractComplexCondition.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/AbstractComplexCondition.java?rev=1059923&r1=1059922&r2=1059923&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/AbstractComplexCondition.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/AbstractComplexCondition.java Mon Jan 17 13:42:01 2011
@@ -68,23 +68,11 @@ public abstract class AbstractComplexCon
}
public String toSQL(String table, String... columns) {
- StringBuilder sb = new StringBuilder();
-
- if (table != null) {
- SearchUtils.startSqlQuery(sb, table, columns);
- }
-
- boolean first = true;
- for (SearchCondition<T> sc : conditions) {
- if (!first) {
- sb.append(" " + cType.toString() + " ");
- } else {
- first = false;
- }
-
- sb.append("(").append(sc.toSQL(null)).append(")");
- }
- return sb.toString();
+ return SearchUtils.toSQL(this, table, columns);
}
+ public void accept(SearchConditionVisitor<T> visitor) {
+ visitor.visit(this);
+ }
+
}
Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/PrimitiveSearchCondition.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/PrimitiveSearchCondition.java?rev=1059923&r1=1059922&r2=1059923&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/PrimitiveSearchCondition.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/PrimitiveSearchCondition.java Mon Jan 17 13:42:01 2011
@@ -87,21 +87,13 @@ public class PrimitiveSearchCondition<T>
}
public String toSQL(String table, String... columns) {
- StringBuilder sb = new StringBuilder();
-
- if (table != null) {
- SearchUtils.startSqlQuery(sb, table, columns);
- }
-
- String rvalStr = propertyValue.toString();
- rvalStr = rvalStr.replaceAll("\\*", "%");
-
-
- sb.append(propertyName).append(" ").append(
- SearchUtils.conditionTypeToSqlOperator(cType, rvalStr)).append(" ")
- .append("'").append(rvalStr).append("'");
- return sb.toString();
+ return SearchUtils.toSQL(this, table, columns);
+ }
+
+ public void accept(SearchConditionVisitor<T> visitor) {
+ visitor.visit(this);
}
+
private boolean isPrimitive(T pojo) {
return pojo.getClass().getName().startsWith("java.lang");
Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/PrimitiveStatement.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/PrimitiveStatement.java?rev=1059923&r1=1059922&r2=1059923&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/PrimitiveStatement.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/PrimitiveStatement.java Mon Jan 17 13:42:01 2011
@@ -24,18 +24,18 @@ package org.apache.cxf.jaxrs.ext.search;
public class PrimitiveStatement {
- private String propery;
+ private String property;
private Object value;
private ConditionType condition;
public PrimitiveStatement(String property, Object value, ConditionType condition) {
- this.propery = property;
+ this.property = property;
this.value = value;
this.condition = condition;
}
- public String getPropery() {
- return propery;
+ public String getProperty() {
+ return property;
}
public Object getValue() {
Added: 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/SQLPrinterConditionVisitor.java?rev=1059923&view=auto
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/SQLPrinterConditionVisitor.java (added)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/SQLPrinterConditionVisitor.java Mon Jan 17 13:42:01 2011
@@ -0,0 +1,72 @@
+/**
+ * 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;
+
+
+public class SQLPrinterConditionVisitor<T> implements SearchConditionVisitor<T> {
+
+ private StringBuilder sb;
+ private String table;
+ private String[] columns;
+
+
+ public SQLPrinterConditionVisitor(String table, String... columns) {
+ this.columns = columns;
+ this.table = table;
+ }
+
+
+ @Override
+ public void visit(SearchCondition<T> sc) {
+
+ if (sb == null) {
+ sb = new StringBuilder();
+ if (table != null) {
+ SearchUtils.startSqlQuery(sb, table, columns);
+ }
+ }
+
+ PrimitiveStatement statement = sc.getStatement();
+ if (statement != null) {
+ if (statement.getProperty() != null) {
+ String rvalStr = statement.getValue().toString().replaceAll("\\*", "%");
+ sb.append(statement.getProperty()).append(" ").append(
+ SearchUtils.conditionTypeToSqlOperator(sc.getConditionType(), rvalStr))
+ .append(" ").append("'").append(rvalStr).append("'");
+ }
+ } else {
+ boolean first = true;
+ for (SearchCondition<T> condition : sc.getSearchConditions()) {
+ if (!first) {
+ sb.append(" ").append(sc.getConditionType().toString()).append(" ");
+ } else {
+ first = false;
+ }
+ sb.append("(");
+ condition.accept(this);
+ sb.append(")");
+ }
+ }
+ }
+
+
+ public String getResult() {
+ return sb == null ? null : sb.toString();
+ }
+}
Propchange: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/SQLPrinterConditionVisitor.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/SQLPrinterConditionVisitor.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/SearchCondition.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/SearchCondition.java?rev=1059923&r1=1059922&r2=1059923&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/SearchCondition.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/SearchCondition.java Mon Jan 17 13:42:01 2011
@@ -65,30 +65,45 @@ public interface SearchCondition<T> {
/**
* Primitive statement such a > b, i < 5, etc
- * this condition may represent
+ * this condition may represent. Complex conditions will return null.
*
* @return primitive search statement, can be null
*/
PrimitiveStatement getStatement();
/**
- * List of conditions this SearchCondition may represent
+ * List of conditions this SearchCondition may represent.
+ * Composite SearchConditions will return a list of conditions they are
+ * composed from, primitive ones will return null
* @return list of conditions, can be null
*/
List<SearchCondition<T>> getSearchConditions();
/**
- * Type of condition this SearchCondition represents
+ * Returns the type of the condition this SearchCondition represents
* @return condition type
*/
ConditionType getConditionType();
+
+ /**
+ * Provides a visitor which will convert this SearchCondition into
+ * a custom expression, for example, into the SQL statement, etc
+ * @param visitor
+ */
+ void accept(SearchConditionVisitor<T> visitor);
/**
+ *
+ * This method is now deprecated and will be removed soon.
+ *
* Utility method for converting this condition into an SQL expression
* @param table table name
* @param columns column names, a wildcard as in 'SELECT * from table' will be used
* if names are not provided
* @return SQL expression
*/
+ @Deprecated
String toSQL(String table, String... columns);
+
+
}
Added: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/SearchConditionVisitor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/SearchConditionVisitor.java?rev=1059923&view=auto
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/SearchConditionVisitor.java (added)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/SearchConditionVisitor.java Mon Jan 17 13:42:01 2011
@@ -0,0 +1,39 @@
+/**
+ * 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;
+
+/**
+ * Interface for visitors to SearchCondition objects.
+ * Custom implementations can use it to convert SearchCondition into
+ * specific query language such as SQL, etc
+ */
+
+public interface SearchConditionVisitor<T> {
+ /*
+ * Callback providing a current SearchCondition object
+ */
+ void visit(SearchCondition<T> sc);
+
+ /**
+ * Recover the accumulated query
+ * @return query string
+ */
+ String getResult();
+
+}
Propchange: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/SearchConditionVisitor.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/SearchConditionVisitor.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
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=1059923&r1=1059922&r2=1059923&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 Mon Jan 17 13:42:01 2011
@@ -24,6 +24,12 @@ public final class SearchUtils {
}
+ public static <T> String toSQL(SearchCondition<T> sc, String table, String... columns) {
+ SearchConditionVisitor<T> visitor = new SQLPrinterConditionVisitor<T>(table, columns);
+ sc.accept(visitor);
+ return visitor.getResult();
+ }
+
public static void startSqlQuery(StringBuilder sb, String table, String... columns) {
sb.append("SELECT ");
if (columns.length > 0) {
Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/SimpleSearchCondition.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/SimpleSearchCondition.java?rev=1059923&r1=1059922&r2=1059923&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/SimpleSearchCondition.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/search/SimpleSearchCondition.java Mon Jan 17 13:42:01 2011
@@ -270,30 +270,7 @@ public class SimpleSearchCondition<T> im
}
public String toSQL(String table, String... columns) {
- if (isPrimitive(condition)) {
- return null;
- }
- StringBuilder sb = new StringBuilder();
-
- if (table != null) {
- SearchUtils.startSqlQuery(sb, table, columns);
- }
-
- boolean first = true;
- for (SearchCondition<T> sc : scts) {
- PrimitiveStatement ps = sc.getStatement();
- if (ps.getPropery() == null) {
- continue;
- }
- if (!first) {
- sb.append(" " + joiningType.toString() + " ");
- } else {
- first = false;
- }
-
- sb.append(sc.toSQL(null));
- }
- return sb.toString();
+ return SearchUtils.toSQL(this, table, columns);
}
public PrimitiveStatement getStatement() {
@@ -303,6 +280,11 @@ public class SimpleSearchCondition<T> im
return null;
}
}
+
+ @Override
+ public void accept(SearchConditionVisitor<T> visitor) {
+ visitor.visit(this);
+ }
}
Modified: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/ext/search/FiqlParserTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/ext/search/FiqlParserTest.java?rev=1059923&r1=1059922&r2=1059923&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/ext/search/FiqlParserTest.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/ext/search/FiqlParserTest.java Mon Jan 17 13:42:01 2011
@@ -170,12 +170,13 @@ public class FiqlParserTest extends Asse
assertFalse(filter.isMet(new Condition("am", 20, null)));
}
+ @SuppressWarnings("deprecation")
@Test
public void testSQL1() throws FiqlParseException {
SearchCondition<Condition> filter = parser.parse("name==ami*;level=gt=10");
String sql = filter.toSQL("table");
- 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));
+ 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
@@ -186,6 +187,7 @@ public class FiqlParserTest extends Asse
assertFalse(filter.isMet(new Condition("foo", 0, null)));
}
+ @SuppressWarnings("deprecation")
@Test
public void testSQL2() throws FiqlParseException {
SearchCondition<Condition> filter = parser.parse("name==ami*,level=gt=10");
@@ -203,6 +205,7 @@ public class FiqlParserTest extends Asse
assertFalse(filter.isMet(new Condition("bar", 20, null)));
}
+ @SuppressWarnings("deprecation")
@Test
public void testSQL3() throws FiqlParseException {
SearchCondition<Condition> filter = parser.parse("name==foo*;(name!=*bar,level=gt=10)");
@@ -213,6 +216,7 @@ public class FiqlParserTest extends Asse
+ "((level > '10') OR (name NOT LIKE '%bar'))").equals(sql));
}
+ @SuppressWarnings("deprecation")
@Test
public void testSQL4() throws FiqlParseException {
SearchCondition<Condition> filter = parser.parse("(name==test,level==18);(name==test1,level!=19)");
@@ -223,6 +227,14 @@ public class FiqlParserTest extends Asse
+ " AND ((name = 'test') OR (level = '18'))").equals(sql));
}
+ @SuppressWarnings("deprecation")
+ @Test
+ public void testSQL5() throws FiqlParseException {
+ SearchCondition<Condition> filter = parser.parse("name==test");
+ String sql = filter.toSQL("table");
+ assertTrue("SELECT * FROM table WHERE name = 'test'".equals(sql));
+ }
+
@Test
public void testParseComplex4() throws FiqlParseException {
SearchCondition<Condition> filter = parser.parse("name==foo*;name!=*bar,level=gt=10");
Modified: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/logging/atom/AtomPullServer.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/logging/atom/AtomPullServer.java?rev=1059923&r1=1059922&r2=1059923&view=diff
==============================================================================
--- cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/logging/atom/AtomPullServer.java (original)
+++ cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/logging/atom/AtomPullServer.java Mon Jan 17 13:42:01 2011
@@ -46,6 +46,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.SearchConditionVisitor;
import org.apache.cxf.management.web.logging.LogLevel;
import org.apache.cxf.management.web.logging.LogRecord;
import org.apache.cxf.management.web.logging.ReadWriteLogStorage;
@@ -467,8 +468,10 @@ public class AtomPullServer extends Abst
public String toSQL(String table, String... columns) {
return null;
}
-
-
+
+ @Override
+ public void accept(SearchConditionVisitor<LogRecord> visitor) {
+ }
}
private static class LogRecordComparator implements Comparator<LogRecord> {