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/08 10:58:15 UTC

git commit: [OLINGO-321] client proxy code should support calling operation on minimal metadata entity

Repository: olingo-odata4
Updated Branches:
  refs/heads/clientjune cf360e657 -> 0e84b4cef


[OLINGO-321] client proxy code should support calling operation on minimal metadata entity


Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/0e84b4ce
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/0e84b4ce
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/0e84b4ce

Branch: refs/heads/clientjune
Commit: 0e84b4cefe2511dd1067d01e8e7598678912837d
Parents: cf360e6
Author: challenh <ch...@microsoft.com>
Authored: Sun Jun 8 16:57:06 2014 +0800
Committer: challenh <ch...@microsoft.com>
Committed: Sun Jun 8 16:57:06 2014 +0800

----------------------------------------------------------------------
 .../commons/OperationInvocationHandler.java     | 26 ++++++++++++++++++++
 1 file changed, 26 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/0e84b4ce/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 f446a96..b561619 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
@@ -30,8 +30,10 @@ import java.util.Map;
 import org.apache.olingo.client.api.uri.CommonURIBuilder;
 import org.apache.olingo.commons.api.domain.CommonODataEntity;
 import org.apache.olingo.commons.api.domain.ODataOperation;
+import org.apache.olingo.commons.api.edm.EdmAction;
 import org.apache.olingo.commons.api.edm.EdmEntityContainer;
 import org.apache.olingo.commons.api.edm.EdmEntityType;
+import org.apache.olingo.commons.api.edm.EdmFunction;
 import org.apache.olingo.commons.api.edm.EdmOperation;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.ext.proxy.api.OperationExecutor;
@@ -160,6 +162,30 @@ final class OperationInvocationHandler extends AbstractInvocationHandler impleme
       boundOp = entity.getOperation(new FullQualifiedName(targetFQN.getNamespace(), operation.name()).toString());
     }
     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(
+          new FullQualifiedName(targetFQN.getNamespace(), operation.name()), targetFQN, false);
+    	if(action!=null){
+    		boundOp = new ODataOperation();
+    		boundOp.setMetadataAnchor(action.getFullQualifiedName().toString());
+    		boundOp.setTitle(boundOp.getMetadataAnchor());
+    		boundOp.setTarget(URI.create(entity.getEditLink().toString() + "/" 
+                  + action.getFullQualifiedName().toString()));
+    	}
+    }
+    if (boundOp == null) {
+    	// json minimal/none metadata doesn't return operations for entity, so here try creating it from Edm: 
+    	EdmFunction func = this.getClient().getEdm(null).getBoundFunction(
+          new FullQualifiedName(targetFQN.getNamespace(), operation.name()), targetFQN, false, parameterNames);
+    	if(func!=null){
+    		boundOp = new ODataOperation();
+    		boundOp.setMetadataAnchor(func.getFullQualifiedName().toString());
+    		boundOp.setTitle(boundOp.getMetadataAnchor());
+    		boundOp.setTarget(URI.create(entity.getEditLink().toString() + "/" 
+                  + func.getFullQualifiedName().toString()));
+    	}
+    }
+    if (boundOp == null) {
       throw new IllegalArgumentException(String.format("Could not find any matching operation '%s' bound to %s",
               operation.name(), entity.getTypeName()));
     }