You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by ch...@apache.org on 2014/06/24 06:57:48 UTC

[23/23] git commit: [OLINGO-327] make client supports shorter operation name in url (not protocol standard)

[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 <ch...@microsoft.com>
Authored: Tue Jun 24 12:52:27 2014 +0800
Committer: challenh <ch...@microsoft.com>
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;
   }