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/19 08:03:18 UTC
olingo-odata4 git commit: [OLINGO-1170] Olingo v4 client api does not
support custom query options in URIBuilder
Repository: olingo-odata4
Updated Branches:
refs/heads/master ee919d812 -> 9dfe49951
[OLINGO-1170] Olingo v4 client api does not support custom query options in URIBuilder
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/9dfe4995
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/9dfe4995
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/9dfe4995
Branch: refs/heads/master
Commit: 9dfe499517d0ef65af755b501f8d8eb6e21c8fa0
Parents: ee919d8
Author: ramya vasanth <ra...@sap.com>
Authored: Tue Dec 19 13:33:10 2017 +0530
Committer: ramya vasanth <ra...@sap.com>
Committed: Tue Dec 19 13:33:10 2017 +0530
----------------------------------------------------------------------
.../olingo/client/api/uri/URIBuilder.java | 9 +++
.../olingo/client/core/uri/URIBuilderImpl.java | 17 +++-
.../olingo/client/core/uri/URIBuilderTest.java | 81 ++++++++++++++++++++
3 files changed, 105 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9dfe4995/lib/client-api/src/main/java/org/apache/olingo/client/api/uri/URIBuilder.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/uri/URIBuilder.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/uri/URIBuilder.java
index b73c68f..139abf3 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/uri/URIBuilder.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/uri/URIBuilder.java
@@ -384,4 +384,13 @@ public interface URIBuilder {
* @return current URIBuilder instance
*/
URIBuilder appendActionCallSegment(String action);
+
+ /**
+ * Adds/Replaces the specified custom query option to the URI.
+ *
+ * @param option.
+ * @param value.
+ * @return current URIBuilder instance.
+ */
+ URIBuilder addCustomQueryOption(String customName, String customValue);
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9dfe4995/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/URIBuilderImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/URIBuilderImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/URIBuilderImpl.java
index a328360..7071d37 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/URIBuilderImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/URIBuilderImpl.java
@@ -90,6 +90,11 @@ public class URIBuilderImpl implements URIBuilder {
protected final Map<String, String> queryOptions = new LinkedHashMap<String, String>();
/**
+ * Insertion-order map of custom query options.
+ */
+ protected final Map<String, String> customQueryOptions = new LinkedHashMap<String, String>();
+
+ /**
* Insertion-order map of parameter aliases.
*/
protected final Map<String, String> parameters = new LinkedHashMap<String, String>();
@@ -294,7 +299,7 @@ public class URIBuilderImpl implements URIBuilder {
}
try {
- if ((queryOptions.size() + parameters.size()) > 0) {
+ if ((customQueryOptions.size() + queryOptions.size() + parameters.size()) > 0) {
segmentsBuilder.append("?");
List<NameValuePair> list1 = new LinkedList<NameValuePair>();
for (Map.Entry<String, String> option : queryOptions.entrySet()) {
@@ -303,7 +308,9 @@ public class URIBuilderImpl implements URIBuilder {
for (Map.Entry<String, String> parameter : parameters.entrySet()) {
list1.add(new BasicNameValuePair("@" + parameter.getKey(), parameter.getValue()));
}
-
+ for (Map.Entry<String, String> customOption : customQueryOptions.entrySet()) {
+ list1.add(new BasicNameValuePair(customOption.getKey(), customOption.getValue()));
+ }
// don't use UriBuilder.build():
// it will try to call URLEncodedUtils.format(Iterable<>,Charset) method,
// which works in desktop java application, however, throws NoSuchMethodError in android OS,
@@ -458,4 +465,10 @@ public class URIBuilderImpl implements URIBuilder {
public URIBuilder expandWithSelect(final String expandItem, final String... selectItems) {
return expand(expandItem + "($select=" + StringUtils.join(selectItems, ",") + ")");
}
+
+ @Override
+ public URIBuilder addCustomQueryOption(String customName, String customValue) {
+ customQueryOptions.put(customName, customValue);
+ return this;
+ }
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9dfe4995/lib/client-core/src/test/java/org/apache/olingo/client/core/uri/URIBuilderTest.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/uri/URIBuilderTest.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/uri/URIBuilderTest.java
index 2c47b3f..f4541c2 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/uri/URIBuilderTest.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/uri/URIBuilderTest.java
@@ -434,4 +434,85 @@ public class URIBuilderTest extends AbstractTest {
assertEquals("http://host/service/EntitySet/functionName(parameterName%3D%40first)/"
+ "NavSeg/%24count?%40first='1'", newUri.toASCIIString());
}
+
+ @Test
+ public void testCustomQueryOption() throws ODataDeserializerException {
+ final ODataClient client = ODataClientFactory.getClient();
+ final URI uri = client.newURIBuilder(SERVICE_ROOT).appendEntitySetSegment("EntitySet").
+ addCustomQueryOption("x", "y").build();
+ assertEquals("http://host/service/EntitySet?x=y", uri.toASCIIString());
+ }
+
+ @Test
+ public void testCustomQueryOptionWithFilter() throws ODataDeserializerException {
+ final ODataClient client = ODataClientFactory.getClient();
+ final URI uri = client.newURIBuilder(SERVICE_ROOT).appendEntitySetSegment("EntitySet").
+ filter("PropertyString eq '1'").
+ addCustomQueryOption("x", "y").build();
+ assertEquals("http://host/service/EntitySet?%24filter=PropertyString%20eq%20'1'&x=y",
+ uri.toASCIIString());
+ }
+
+ @Test
+ public void testDuplicateCustomQueryOption() throws ODataDeserializerException {
+ final ODataClient client = ODataClientFactory.getClient();
+ final URI uri = client.newURIBuilder(SERVICE_ROOT).appendEntitySetSegment("EntitySet").
+ addCustomQueryOption("x", "z").
+ addCustomQueryOption("x", "y").build();
+ assertEquals("http://host/service/EntitySet?x=y", uri.toASCIIString());
+ }
+
+ @Test
+ public void testCustomQueryOptionWithFilterAndFunction() throws ODataDeserializerException {
+ final ODataClient client = ODataClientFactory.getClient();
+ final URI uri = client.newURIBuilder(SERVICE_ROOT).
+ appendOperationCallSegment("functionName").count().filter("PropertyString eq '1'").
+ addCustomQueryOption("x", "y").build();
+ final Map<String, ClientValue> parameters = new HashMap<String, ClientValue>();
+ URI newUri = URIUtils.buildFunctionInvokeURI(uri, parameters);
+ assertNotNull(newUri);
+ assertEquals("http://host/service/functionName()"
+ + "/%24count?%24filter=PropertyString%20eq%20'1'&x=y", newUri.toASCIIString());
+ }
+
+ @Test
+ public void testCustomQueryOptionWithFunctionWithNavAndRef() throws ODataDeserializerException {
+ final ODataClient client = ODataClientFactory.getClient();
+ final URI uri = client.newURIBuilder(SERVICE_ROOT).appendEntitySetSegment("EntitySet").
+ appendOperationCallSegment("functionName").
+ appendNavigationSegment("NavSeg").appendRefSegment().addCustomQueryOption("x", "y").build();
+ final Map<String, ClientValue> parameters = new HashMap<String, ClientValue>();
+ final ClientPrimitiveValue value = client.getObjectFactory().
+ newPrimitiveValueBuilder().buildString("parameterValue");
+ parameters.put("parameterName", value);
+ URI newUri = URIUtils.buildFunctionInvokeURI(uri, parameters);
+ assertNotNull(newUri);
+ assertEquals("http://host/service/EntitySet/functionName(parameterName%3D'parameterValue')"
+ + "/NavSeg/%24ref?x=y", newUri.toASCIIString());
+ }
+
+ @Test
+ public void testCustomQueryOptionOnRoot() throws ODataDeserializerException {
+ final ODataClient client = ODataClientFactory.getClient();
+ final URI uri = client.newURIBuilder(SERVICE_ROOT).
+ addCustomQueryOption("x", "y").build();
+ assertEquals("http://host/service?x=y", uri.toASCIIString());
+ }
+
+ @Test
+ public void testTwoCustomQueryOption() throws ODataDeserializerException {
+ final ODataClient client = ODataClientFactory.getClient();
+ final URI uri = client.newURIBuilder(SERVICE_ROOT).
+ addCustomQueryOption("x", "y").
+ addCustomQueryOption("y", "z").build();
+ assertEquals("http://host/service?x=y&y=z", uri.toASCIIString());
+ }
+
+ @Test
+ public void testCustomQueryOptionWithEncodedNameValue() throws ODataDeserializerException {
+ final ODataClient client = ODataClientFactory.getClient();
+ final URI uri = client.newURIBuilder(SERVICE_ROOT).
+ addCustomQueryOption("x!/?", "@?$").build();
+ assertEquals("http://host/service?x%21%2F%3F=%40%3F%24", uri.toASCIIString());
+ }
}