You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by re...@apache.org on 2014/02/12 14:25:52 UTC

svn commit: r1567615 - in /cxf/trunk/rt/rs/extensions/search: ./ src/main/java/org/apache/cxf/jaxrs/ext/search/ src/main/java/org/apache/cxf/jaxrs/ext/search/odata/ src/test/java/org/apache/cxf/jaxrs/ext/search/odata/

Author: reta
Date: Wed Feb 12 13:25:52 2014
New Revision: 1567615

URL: http://svn.apache.org/r1567615
Log:
[CXF-5430]: Added initial support for OData 2.0 query language. Added more test cases and more effective primitive type handling

Modified:
    cxf/trunk/rt/rs/extensions/search/pom.xml
    cxf/trunk/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/Beanspector.java
    cxf/trunk/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/odata/ODataParser.java
    cxf/trunk/rt/rs/extensions/search/src/test/java/org/apache/cxf/jaxrs/ext/search/odata/ODataParserTest.java

Modified: cxf/trunk/rt/rs/extensions/search/pom.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/rs/extensions/search/pom.xml?rev=1567615&r1=1567614&r2=1567615&view=diff
==============================================================================
--- cxf/trunk/rt/rs/extensions/search/pom.xml (original)
+++ cxf/trunk/rt/rs/extensions/search/pom.xml Wed Feb 12 13:25:52 2014
@@ -37,6 +37,10 @@
     </properties>
     <dependencies>
         <dependency>
+            <groupId>commons-lang</groupId>
+            <artifactId>commons-lang</artifactId>
+        </dependency>    
+        <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
             <scope>test</scope>

Modified: cxf/trunk/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/Beanspector.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/Beanspector.java?rev=1567615&r1=1567614&r2=1567615&view=diff
==============================================================================
--- cxf/trunk/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/Beanspector.java (original)
+++ cxf/trunk/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/Beanspector.java Wed Feb 12 13:25:52 2014
@@ -28,6 +28,7 @@ import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.commons.lang.ClassUtils;
 import org.apache.cxf.jaxrs.ext.search.collections.CollectionCheckInfo;
 
 /**
@@ -207,6 +208,10 @@ public class Beanspector<T> {
             return cls;
         }
         
+        public Class<?> getWrappedTypeClass() {
+            return cls.isPrimitive() ? ClassUtils.primitiveToWrapper(cls) : cls;
+        }
+        
         public Type getGenericType() {
             return genericType;
         }

Modified: cxf/trunk/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/odata/ODataParser.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/odata/ODataParser.java?rev=1567615&r1=1567614&r2=1567615&view=diff
==============================================================================
--- cxf/trunk/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/odata/ODataParser.java (original)
+++ cxf/trunk/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/odata/ODataParser.java Wed Feb 12 13:25:52 2014
@@ -160,7 +160,7 @@ public class ODataParser<T> extends Abst
             
             Object typedValue = null;
             // If property type and value type are compatible, just use them
-            if (property.typeInfo.getTypeClass().isAssignableFrom(value.typeClass)) {
+            if (property.typeInfo.getWrappedTypeClass().isAssignableFrom(value.typeClass)) {
                 typedValue = value.value;
             } else { // Property type and value type are not compatible and convert / cast are required
                 typedValue = parseType(property.propertyName, null, null, property.propertyName, 

Modified: cxf/trunk/rt/rs/extensions/search/src/test/java/org/apache/cxf/jaxrs/ext/search/odata/ODataParserTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/rs/extensions/search/src/test/java/org/apache/cxf/jaxrs/ext/search/odata/ODataParserTest.java?rev=1567615&r1=1567614&r2=1567615&view=diff
==============================================================================
--- cxf/trunk/rt/rs/extensions/search/src/test/java/org/apache/cxf/jaxrs/ext/search/odata/ODataParserTest.java (original)
+++ cxf/trunk/rt/rs/extensions/search/src/test/java/org/apache/cxf/jaxrs/ext/search/odata/ODataParserTest.java Wed Feb 12 13:25:52 2014
@@ -34,6 +34,9 @@ public class ODataParserTest extends Ass
         private String firstName;
         private String lastName;
         private int age;
+        private float height;
+        private double hourlyRate;
+        private Long ssn;
 
         public Person() {
         }
@@ -67,10 +70,49 @@ public class ODataParserTest extends Ass
             this.age = age;
         }
         
+        public float getHeight() {
+            return height;
+        }
+        
+        public void setHeight(float height) {
+            this.height = height;
+        }
+        
+        public double getHourlyRate() {
+            return hourlyRate;
+        }
+        
+        public void setHourlyRate(double hourlyRate) {
+            this.hourlyRate = hourlyRate;
+        }
+        
+        public Long getSsn() {
+            return ssn;
+        }
+        
+        public void setSsn(Long ssn) {
+            this.ssn = ssn;
+        }
+        
         Person withAge(int newAge) {
             setAge(newAge);
             return this;
         }
+
+        Person withHeight(float newHeight) {
+            setHeight(newHeight);
+            return this;
+        }
+        
+        Person withHourlyRate(double newHourlyRate) {
+            setHourlyRate(newHourlyRate);
+            return this;
+        }
+        
+        Person withSsn(Long newSsn) {
+            setSsn(newSsn);
+            return this;
+        }
     }
 
     @Before
@@ -131,4 +173,25 @@ public class ODataParserTest extends Ass
         assertTrue(filter.isMet(new Person("Tom", "Bombadil").withAge(18)));
         assertFalse(filter.isMet(new Person("Tom", "Bombadil").withAge(16)));
     }
+    
+    @Test
+    public void testFilterByHeightGreatOrEqualValue() throws SearchParseException {
+        SearchCondition< Person > filter = parser.parse("Height ge 179.5f or Height le 159.5d");
+        assertTrue(filter.isMet(new Person("Tom", "Bombadil").withHeight(185.6f)));
+        assertFalse(filter.isMet(new Person("Tom", "Bombadil").withHeight(166.7f)));
+    }
+    
+    @Test
+    public void testFilterByHourlyRateGreatThanValue() throws SearchParseException {
+        SearchCondition< Person > filter = parser.parse("HourlyRate ge 30.50d or HourlyRate lt 20.50f");
+        assertTrue(filter.isMet(new Person("Tom", "Bombadil").withHourlyRate(45.6)));
+        assertFalse(filter.isMet(new Person("Tom", "Bombadil").withHourlyRate(26.7)));
+    }
+    
+    @Test
+    public void testFilterBySsnNotEqualsToValue() throws SearchParseException {
+        SearchCondition< Person > filter = parser.parse("Ssn ne 748232221");
+        assertTrue(filter.isMet(new Person("Tom", "Bombadil").withSsn(553232222L)));
+        assertFalse(filter.isMet(new Person("Tom", "Bombadil").withHourlyRate(748232221L)));
+    }
 }