You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by ra...@apache.org on 2017/12/18 09:34:25 UTC
olingo-odata4 git commit: [OLINGO-1144] How to use the FilterFactory
to create a valid URI for filtering on a ComplexValue in a collection
Repository: olingo-odata4
Updated Branches:
refs/heads/master 387ba9c09 -> ee919d812
[OLINGO-1144] How to use the FilterFactory to create a valid URI for filtering on a ComplexValue in a collection
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/ee919d81
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/ee919d81
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/ee919d81
Branch: refs/heads/master
Commit: ee919d812d7168541734079f7a01633311ff23b5
Parents: 387ba9c
Author: ramya vasanth <ra...@sap.com>
Authored: Mon Dec 18 15:04:16 2017 +0530
Committer: ramya vasanth <ra...@sap.com>
Committed: Mon Dec 18 15:04:16 2017 +0530
----------------------------------------------------------------------
.../olingo/fit/tecsvc/client/BasicITCase.java | 42 ++++++++++++++++++++
.../olingo/client/api/uri/FilterArgFactory.java | 4 ++
.../client/core/uri/FilterArgFactoryImpl.java | 14 ++++++-
.../olingo/client/core/uri/FilterLambda.java | 34 ++++++++++++----
.../client/core/uri/FilterFactoryTest.java | 26 ++++++++++++
5 files changed, 111 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ee919d81/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BasicITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BasicITCase.java b/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BasicITCase.java
index e2b5739..960e63b 100644
--- a/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BasicITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BasicITCase.java
@@ -78,7 +78,10 @@ import org.apache.olingo.client.api.domain.ClientValue;
import org.apache.olingo.client.api.edm.xml.Reference;
import org.apache.olingo.client.api.edm.xml.XMLMetadata;
import org.apache.olingo.client.api.serialization.ODataDeserializerException;
+import org.apache.olingo.client.api.uri.FilterArgFactory;
+import org.apache.olingo.client.api.uri.FilterFactory;
import org.apache.olingo.client.api.uri.URIBuilder;
+import org.apache.olingo.client.api.uri.URIFilter;
import org.apache.olingo.client.core.ODataClientFactory;
import org.apache.olingo.client.core.uri.URIUtils;
import org.apache.olingo.commons.api.edm.Edm;
@@ -1663,4 +1666,43 @@ public class BasicITCase extends AbstractParamTecSvcITCase {
assertEquals("EnumMember", expression.getExpressionName());
}
}
+
+ @Test
+ public void issue1144() {
+ FilterFactory filFactory = getClient().getFilterFactory();
+ FilterArgFactory filArgFactory = filFactory.getArgFactory();
+ URIFilter andFilExp = filFactory.and(filFactory.eq("d/olingo.odata.test1.CTBase/AdditionalPropString", "ADD TEST"),
+ filFactory.eq("d/olingo.odata.test1.CTBase/AdditionalPropString", "ADD TEST"));
+ final URIFilter filter = filFactory.match(
+ filArgFactory.any(filArgFactory.property("CollPropertyComp"), "d", andFilExp));
+ String strFilter = filter.build();
+ ODataEntitySetRequest<ClientEntitySet> request = getClient().getRetrieveRequestFactory()
+ .getEntitySetRequest(getClient().newURIBuilder(SERVICE_URI)
+ .appendEntitySetSegment(ES_MIX_PRIM_COLL_COMP).filter(strFilter).build());
+ assertNotNull(request);
+ setCookieHeader(request);
+
+ final ODataRetrieveResponse<ClientEntitySet> response = request.execute();
+ saveCookieHeader(response);
+ assertNotNull(response.getHeaderNames());
+ assertEquals(HttpStatusCode.OK.getStatusCode(), response.getStatusCode());
+ assertContentType(response.getContentType());
+
+ final ClientEntitySet entitySet = response.getBody();
+ assertNotNull(entitySet);
+
+ assertNull(entitySet.getCount());
+ assertNull(entitySet.getNext());
+ assertEquals(Collections.<ClientAnnotation> emptyList(), entitySet.getAnnotations());
+ assertNull(entitySet.getDeltaLink());
+
+ final List<ClientEntity> entities = entitySet.getEntities();
+ assertNotNull(entities);
+ assertEquals(3, entities.size());
+ final ClientEntity entity = entities.get(2);
+ assertNotNull(entity);
+ final ClientProperty property = entity.getProperty("CollPropertyComp");
+ assertNotNull(property);
+ assertEquals(3, property.getCollectionValue().size());
+ }
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ee919d81/lib/client-api/src/main/java/org/apache/olingo/client/api/uri/FilterArgFactory.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/uri/FilterArgFactory.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/uri/FilterArgFactory.java
index 9a768b6..3366a0b 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/uri/FilterArgFactory.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/uri/FilterArgFactory.java
@@ -110,7 +110,11 @@ public interface FilterArgFactory {
FilterArg geoLength(FilterArg first, FilterArg second);
FilterArg any(FilterArg collection, URIFilter expression);
+
+ FilterArg any(FilterArg collection, String lambdaVariable, URIFilter expression);
FilterArg all(FilterArg collection, URIFilter expression);
+
+ FilterArg all(FilterArg collection, String lambdaVariable, URIFilter expression);
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ee919d81/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/FilterArgFactoryImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/FilterArgFactoryImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/FilterArgFactoryImpl.java
index d6996b2..49f59b0 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/FilterArgFactoryImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/FilterArgFactoryImpl.java
@@ -246,12 +246,22 @@ public class FilterArgFactoryImpl implements FilterArgFactory {
@Override
public FilterArg any(final FilterArg collection, final URIFilter expression) {
- return new FilterLambda(collection, "any", expression);
+ return new FilterLambda(collection, "any", expression, null);
}
@Override
public FilterArg all(final FilterArg collection, final URIFilter expression) {
- return new FilterLambda(collection, "all", expression);
+ return new FilterLambda(collection, "all", expression, null);
+ }
+
+ @Override
+ public FilterArg any(FilterArg collection, String lambdaVariable, URIFilter expression) {
+ return new FilterLambda(collection, "any", expression, lambdaVariable);
+ }
+
+ @Override
+ public FilterArg all(FilterArg collection, String lambdaVariable, URIFilter expression) {
+ return new FilterLambda(collection, "all", expression, lambdaVariable);
}
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ee919d81/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/FilterLambda.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/FilterLambda.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/FilterLambda.java
index f99ea4e..9a9978b 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/FilterLambda.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/FilterLambda.java
@@ -28,19 +28,39 @@ public class FilterLambda implements FilterArg {
private final String operator;
private final URIFilter expression;
+
+ private final String lambdaVariable;
+
+ public static final String COLON = ":";
+
+ public static final String OPENBRAC = "(";
+
+ public static final String CLOSEBRAC = ")";
+
+ public static final String SLASH = "/";
- public FilterLambda(final FilterArg collection, final String operator, final URIFilter expression) {
+ public FilterLambda(final FilterArg collection, final String operator, final URIFilter expression,
+ final String predicate) {
this.collection = collection;
this.operator = operator;
this.expression = expression;
+ this.lambdaVariable = predicate;
}
-
+
@Override
public String build() {
- return new StringBuilder(collection.build()).
- append('/').
- append(operator).
- append(expression.build()).
- toString();
+ StringBuilder builder = new StringBuilder(collection.build()).
+ append(SLASH).
+ append(operator);
+ if (this.lambdaVariable != null && this.lambdaVariable.length() > 0) {
+ builder.append(OPENBRAC).
+ append(lambdaVariable).append(COLON).
+ append(expression.build()).
+ append(CLOSEBRAC);
+ } else {
+ builder.
+ append(expression.build());
+ }
+ return builder.toString();
}
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ee919d81/lib/client-core/src/test/java/org/apache/olingo/client/core/uri/FilterFactoryTest.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/uri/FilterFactoryTest.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/uri/FilterFactoryTest.java
index 0bd5510..51cb9f7 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/uri/FilterFactoryTest.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/uri/FilterFactoryTest.java
@@ -90,5 +90,31 @@ public class FilterFactoryTest extends AbstractTest {
assertEquals("(OrderDate ge " + Encoder.encode("2011-03-08T14:21:12-08:00") + ")",
filter.build());
}
+
+ @Test
+ public void issue1144Any() {
+ URIFilter andFilExp = getFilterFactory().and(getFilterFactory().eq("d/Quantity", 100),
+ getFilterFactory().eq("d/Quantity", 50));
+ final URIFilter filter = getFilterFactory().match(
+ getFilterArgFactory().any(getFilterArgFactory().property("Items"), "d", andFilExp));
+ assertEquals("Items/any(d:((d/Quantity eq 100) and (d/Quantity eq 50)))", filter.build());
+ }
+ @Test
+ public void all() {
+ final URIFilter filter = getFilterFactory().match(
+ getFilterArgFactory().all(getFilterArgFactory().property("Items"),
+ getFilterFactory().gt("d:d/Quantity", 100)));
+
+ assertEquals("Items/all(d:d/Quantity gt 100)", filter.build());
+ }
+
+ @Test
+ public void issue1144All() {
+ URIFilter andFilExp = getFilterFactory().and(getFilterFactory().eq("d/Quantity", 100),
+ getFilterFactory().eq("d/Quantity", 50));
+ final URIFilter filter = getFilterFactory().match(
+ getFilterArgFactory().all(getFilterArgFactory().property("Items"), "d", andFilExp));
+ assertEquals("Items/all(d:((d/Quantity eq 100) and (d/Quantity eq 50)))", filter.build());
+ }
}