[OLINGO-327] make client supports shorter operation name in url (not protocol standard)
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/f40643f9 Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/f40643f9 Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/f40643f9 Branch: refs/heads/clientjune Commit: f40643f92ecb43b2a135fc413eba318801ae8744 Parents: 1e8ad44 Author: challenh <[email protected]> Authored: Tue Jun 24 12:52:27 2014 +0800 Committer: challenh <[email protected]> Committed: Tue Jun 24 12:52:27 2014 +0800 ---------------------------------------------------------------------- .../commons/OperationInvocationHandler.java | 5 +++-- .../olingo/client/api/CommonConfiguration.java | 23 ++++++++++++++++++++ .../client/core/AbstractConfiguration.java | 12 ++++++++++ 3 files changed, 38 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f40643f9/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/OperationInvocationHandler.java ---------------------------------------------------------------------- diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/OperationInvocationHandler.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/OperationInvocationHandler.java index b561619..d68efb1 100644 --- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/OperationInvocationHandler.java +++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/OperationInvocationHandler.java @@ -161,6 +161,7 @@ final class OperationInvocationHandler extends AbstractInvocationHandler impleme if (boundOp == null) { boundOp = entity.getOperation(new FullQualifiedName(targetFQN.getNamespace(), operation.name()).toString()); } + boolean useOperationFQN = this.getClient().getConfiguration().isUseUrlOperationFQN(); if (boundOp == null) { // json minimal/none metadata doesn't return operations for entity, so here try creating it from Edm: EdmAction action = this.getClient().getEdm(null).getBoundAction( @@ -170,7 +171,7 @@ final class OperationInvocationHandler extends AbstractInvocationHandler impleme boundOp.setMetadataAnchor(action.getFullQualifiedName().toString()); boundOp.setTitle(boundOp.getMetadataAnchor()); boundOp.setTarget(URI.create(entity.getEditLink().toString() + "/" - + action.getFullQualifiedName().toString())); + + (useOperationFQN ? action.getFullQualifiedName().toString() : operation.name()))); } } if (boundOp == null) { @@ -182,7 +183,7 @@ final class OperationInvocationHandler extends AbstractInvocationHandler impleme boundOp.setMetadataAnchor(func.getFullQualifiedName().toString()); boundOp.setTitle(boundOp.getMetadataAnchor()); boundOp.setTarget(URI.create(entity.getEditLink().toString() + "/" - + func.getFullQualifiedName().toString())); + + (useOperationFQN ? func.getFullQualifiedName().toString() : operation.name()))); } } if (boundOp == null) { http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f40643f9/lib/client-api/src/main/java/org/apache/olingo/client/api/CommonConfiguration.java ---------------------------------------------------------------------- diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/CommonConfiguration.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/CommonConfiguration.java index 46f12b3..7a25d8e 100644 --- a/lib/client-api/src/main/java/org/apache/olingo/client/api/CommonConfiguration.java +++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/CommonConfiguration.java @@ -216,6 +216,29 @@ public interface CommonConfiguration extends Serializable { boolean isAddressingDerivedTypes() ; /** + * Sets whether operation name in request URI should be fully qualified name, which is required by OData V4 protocol, + * but some service may still choose to support shorter name. + * <br/> + * Example: http://host/service/Customers(2)/NS1.Model.IncreaseSalary VS + * http://host/service/Customers(2)/IncreaseSalary + * + * @param value 'TRUE' to use this feature. + */ + void setUseUrlOperationFQN(final boolean value); + + /** + * Sets whether operation name in request URI should be fully qualified name, which is required by OData V4 protocol, + * but some service may still choose to support shorter name. + * <br/> + * Example: http://host/service/Customers(2)/NS1.Model.IncreaseSalary VS + * http://host/service/Customers(2)/IncreaseSalary + * + * @return whether whether operation name in request URI should be fully qualified name. + * segment. + */ + boolean isUseUrlOperationFQN() ; + + /** * Sets whether query URIs in request should contain fully qualified type name. * - OData Intermediate Conformance Level: * MUST support casting to a derived type according to [OData-URL] if derived types are present in the model. http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f40643f9/lib/client-core/src/main/java/org/apache/olingo/client/core/AbstractConfiguration.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/AbstractConfiguration.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/AbstractConfiguration.java index 888452a..a314dd4 100644 --- a/lib/client-core/src/main/java/org/apache/olingo/client/core/AbstractConfiguration.java +++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/AbstractConfiguration.java @@ -54,6 +54,8 @@ public abstract class AbstractConfiguration implements CommonConfiguration { private static final String ADDRESS_DERIVED_TYPE = "addressDerivedType"; + private static final String USE_OPERATION_FQN_IN_URL = "useOperationFqnInUrl"; + private static final String GZIP_COMPRESSION = "gzipCompression"; private static final String CHUNKING = "chunking"; @@ -225,6 +227,16 @@ public abstract class AbstractConfiguration implements CommonConfiguration { } @Override + public boolean isUseUrlOperationFQN() { + return (Boolean) getProperty(USE_OPERATION_FQN_IN_URL, true); + } + + @Override + public void setUseUrlOperationFQN(final boolean value) { + setProperty(USE_OPERATION_FQN_IN_URL, value); + } + + @Override public ExecutorService getExecutor() { return executor; }
