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()));
}