You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by il...@apache.org on 2014/03/07 10:04:42 UTC
[6/7] git commit: [OLINGO-169] Enhancing EdmActionImportInfo and
EdmFunctionImportInfo support for V3
[OLINGO-169] Enhancing EdmActionImportInfo and EdmFunctionImportInfo support for V3
Project: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/commit/d1b341df
Tree: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/tree/d1b341df
Diff: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/diff/d1b341df
Branch: refs/heads/olingo169
Commit: d1b341dfaaad716b162bb20baeaeb9e42b0cc1d8
Parents: 1264aec
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Thu Mar 6 16:38:08 2014 +0100
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Thu Mar 6 16:38:08 2014 +0100
----------------------------------------------------------------------
.../edm/AbstractEdmServiceMetadataImpl.java | 25 ++---------
.../odata4/client/core/edm/EdmClientImpl.java | 16 +++----
.../core/edm/v3/EdmServiceMetadataImpl.java | 47 +++++++++++++++++++-
.../core/edm/v3/V3FunctionImportUtils.java | 36 +++++++++++++++
.../core/edm/v4/EdmServiceMetadataImpl.java | 21 +++++++++
.../odata4/client/core/v3/MetadataTest.java | 29 ++++++++++++
6 files changed, 141 insertions(+), 33 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/d1b341df/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/AbstractEdmServiceMetadataImpl.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/AbstractEdmServiceMetadataImpl.java b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/AbstractEdmServiceMetadataImpl.java
index d036e9f..15e7e2c 100644
--- a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/AbstractEdmServiceMetadataImpl.java
+++ b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/AbstractEdmServiceMetadataImpl.java
@@ -25,16 +25,15 @@ import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
-import org.apache.olingo.odata4.client.api.edm.xml.CommonFunctionImport;
import org.apache.olingo.odata4.client.api.edm.xml.EntityContainer;
import org.apache.olingo.odata4.client.api.edm.xml.EntitySet;
import org.apache.olingo.odata4.client.api.edm.xml.Schema;
import org.apache.olingo.odata4.client.api.edm.xml.XMLMetadata;
+import org.apache.olingo.odata4.commons.api.edm.EdmActionImportInfo;
import org.apache.olingo.odata4.commons.api.edm.EdmEntitySetInfo;
import org.apache.olingo.odata4.commons.api.edm.EdmFunctionImportInfo;
import org.apache.olingo.odata4.commons.api.edm.EdmServiceMetadata;
import org.apache.olingo.odata4.commons.core.edm.EdmEntitySetInfoImpl;
-import org.apache.olingo.odata4.commons.core.edm.EdmFunctionImportInfoImpl;
public abstract class AbstractEdmServiceMetadataImpl implements EdmServiceMetadata {
@@ -42,7 +41,9 @@ public abstract class AbstractEdmServiceMetadataImpl implements EdmServiceMetada
private List<EdmEntitySetInfo> entitySetInfos;
- private List<EdmFunctionImportInfo> functionImportInfos;
+ protected List<EdmFunctionImportInfo> functionImportInfos;
+
+ protected List<EdmActionImportInfo> actionImportInfos;
public static EdmServiceMetadata getInstance(final XMLMetadata xmlMetadata) {
return xmlMetadata instanceof org.apache.olingo.odata4.client.core.edm.xml.v3.XMLMetadataImpl
@@ -81,24 +82,6 @@ public abstract class AbstractEdmServiceMetadataImpl implements EdmServiceMetada
}
@Override
- public List<EdmFunctionImportInfo> getFunctionImportInfos() {
- synchronized (this) {
- if (functionImportInfos == null) {
- functionImportInfos = new ArrayList<EdmFunctionImportInfo>();
- for (Schema schema : xmlMetadata.getSchemas()) {
- for (EntityContainer entityContainer : schema.getEntityContainers()) {
- for (CommonFunctionImport functionImport : entityContainer.getFunctionImports()) {
- functionImportInfos.add(
- new EdmFunctionImportInfoImpl(entityContainer.getName(), functionImport.getName()));
- }
- }
- }
- }
- }
- return functionImportInfos;
- }
-
- @Override
public boolean equals(final Object obj) {
return EqualsBuilder.reflectionEquals(this, obj);
}
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/d1b341df/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmClientImpl.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmClientImpl.java b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmClientImpl.java
index 25a6c27..a89bf16 100644
--- a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmClientImpl.java
+++ b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmClientImpl.java
@@ -42,9 +42,9 @@ import org.apache.olingo.odata4.client.api.edm.xml.EntityContainer;
import org.apache.olingo.odata4.client.api.edm.xml.v3.FunctionImport;
import org.apache.olingo.odata4.client.api.edm.xml.v4.Action;
import org.apache.olingo.odata4.client.api.edm.xml.v4.Function;
-import org.apache.olingo.odata4.client.api.http.HttpMethod;
import org.apache.olingo.odata4.client.core.edm.v3.EdmActionProxy;
import org.apache.olingo.odata4.client.core.edm.v3.EdmFunctionProxy;
+import org.apache.olingo.odata4.client.core.edm.v3.V3FunctionImportUtils;
import org.apache.olingo.odata4.commons.api.edm.EdmAction;
import org.apache.olingo.odata4.commons.api.edm.EdmComplexType;
import org.apache.olingo.odata4.commons.api.edm.EdmEntityContainer;
@@ -164,12 +164,6 @@ public class EdmClientImpl extends AbstractEdmImpl {
return result;
}
- private boolean canProxyFunction(final FunctionImport functionImport) {
- return functionImport.getHttpMethod() == null
- ? !functionImport.isSideEffecting()
- : HttpMethod.GET.name().equals(functionImport.getHttpMethod());
- }
-
@Override
protected EdmAction createUnboundAction(final FullQualifiedName actionName) {
EdmAction result = null;
@@ -194,7 +188,7 @@ public class EdmClientImpl extends AbstractEdmImpl {
boolean found = false;
for (final Iterator<FunctionImport> itor = functionImports.iterator(); itor.hasNext() && !found;) {
final FunctionImport functionImport = itor.next();
- if (!canProxyFunction(functionImport) && !functionImport.isBindable()) {
+ if (!V3FunctionImportUtils.canProxyFunction(functionImport) && !functionImport.isBindable()) {
found = functionImport.getParameters().isEmpty();
result = EdmActionProxy.getInstance(this, actionName, functionImport);
}
@@ -235,7 +229,7 @@ public class EdmClientImpl extends AbstractEdmImpl {
boolean found = false;
for (final Iterator<FunctionImport> itor = functionImports.iterator(); itor.hasNext() && !found;) {
final FunctionImport functionImport = itor.next();
- if (canProxyFunction(functionImport) && !functionImport.isBindable()) {
+ if (V3FunctionImportUtils.canProxyFunction(functionImport) && !functionImport.isBindable()) {
final Set<String> functionParamNames = new HashSet<String>();
for (CommonParameter param : functionImport.getParameters()) {
functionParamNames.add(param.getName());
@@ -283,7 +277,7 @@ public class EdmClientImpl extends AbstractEdmImpl {
boolean found = false;
for (final Iterator<FunctionImport> itor = functionImports.iterator(); itor.hasNext() && !found;) {
final FunctionImport functionImport = itor.next();
- if (!canProxyFunction(functionImport) && functionImport.isBindable()) {
+ if (!V3FunctionImportUtils.canProxyFunction(functionImport) && functionImport.isBindable()) {
final EdmTypeInfo boundParam = new EdmTypeInfo(functionImport.getParameters().get(0).getType());
if (bindingParameterTypeName.equals(boundParam.getFullQualifiedName())
&& isBindingParameterCollection.booleanValue() == boundParam.isCollection()) {
@@ -337,7 +331,7 @@ public class EdmClientImpl extends AbstractEdmImpl {
boolean found = false;
for (final Iterator<FunctionImport> itor = functionImports.iterator(); itor.hasNext() && !found;) {
final FunctionImport functionImport = itor.next();
- if (!canProxyFunction(functionImport) && functionImport.isBindable()) {
+ if (!V3FunctionImportUtils.canProxyFunction(functionImport) && functionImport.isBindable()) {
final EdmTypeInfo boundParam = new EdmTypeInfo(functionImport.getParameters().get(0).getType());
if (bindingParameterTypeName.equals(boundParam.getFullQualifiedName())
&& isBindingParameterCollection.booleanValue() == boundParam.isCollection()) {
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/d1b341df/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/v3/EdmServiceMetadataImpl.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/v3/EdmServiceMetadataImpl.java b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/v3/EdmServiceMetadataImpl.java
index cb0b84a..e377d78 100644
--- a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/v3/EdmServiceMetadataImpl.java
+++ b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/v3/EdmServiceMetadataImpl.java
@@ -18,13 +18,21 @@
*/
package org.apache.olingo.odata4.client.core.edm.v3;
+import java.util.ArrayList;
import java.util.List;
import org.apache.olingo.odata4.client.api.UnsupportedInV3Exception;
+import org.apache.olingo.odata4.client.api.edm.xml.CommonFunctionImport;
+import org.apache.olingo.odata4.client.api.edm.xml.EntityContainer;
+import org.apache.olingo.odata4.client.api.edm.xml.Schema;
+import org.apache.olingo.odata4.client.api.edm.xml.v3.FunctionImport;
import org.apache.olingo.odata4.client.core.edm.AbstractEdmServiceMetadataImpl;
import org.apache.olingo.odata4.client.core.edm.xml.v3.XMLMetadataImpl;
import org.apache.olingo.odata4.commons.api.edm.EdmActionImportInfo;
+import org.apache.olingo.odata4.commons.api.edm.EdmFunctionImportInfo;
import org.apache.olingo.odata4.commons.api.edm.EdmSingletonInfo;
import org.apache.olingo.odata4.commons.api.edm.constants.ODataServiceVersion;
+import org.apache.olingo.odata4.commons.core.edm.EdmActionImportInfoImpl;
+import org.apache.olingo.odata4.commons.core.edm.EdmFunctionImportInfoImpl;
public class EdmServiceMetadataImpl extends AbstractEdmServiceMetadataImpl {
@@ -45,8 +53,45 @@ public class EdmServiceMetadataImpl extends AbstractEdmServiceMetadataImpl {
}
@Override
+ public List<EdmFunctionImportInfo> getFunctionImportInfos() {
+ synchronized (this) {
+ if (functionImportInfos == null) {
+ functionImportInfos = new ArrayList<EdmFunctionImportInfo>();
+ for (Schema schema : xmlMetadata.getSchemas()) {
+ for (EntityContainer entityContainer : schema.getEntityContainers()) {
+ for (CommonFunctionImport functionImport : entityContainer.getFunctionImports()) {
+ final FunctionImport _funFunctionImport = (FunctionImport) functionImport;
+ if (V3FunctionImportUtils.canProxyFunction(_funFunctionImport)) {
+ functionImportInfos.add(
+ new EdmFunctionImportInfoImpl(entityContainer.getName(), functionImport.getName()));
+ }
+ }
+ }
+ }
+ }
+ return functionImportInfos;
+ }
+ }
+
+ @Override
public List<EdmActionImportInfo> getActionImportInfos() {
- throw new UnsupportedInV3Exception();
+ synchronized (this) {
+ if (actionImportInfos == null) {
+ actionImportInfos = new ArrayList<EdmActionImportInfo>();
+ for (Schema schema : xmlMetadata.getSchemas()) {
+ for (EntityContainer entityContainer : schema.getEntityContainers()) {
+ for (CommonFunctionImport functionImport : entityContainer.getFunctionImports()) {
+ final FunctionImport _funFunctionImport = (FunctionImport) functionImport;
+ if (!V3FunctionImportUtils.canProxyFunction(_funFunctionImport)) {
+ actionImportInfos.add(
+ new EdmActionImportInfoImpl(entityContainer.getName(), functionImport.getName()));
+ }
+ }
+ }
+ }
+ }
+ return actionImportInfos;
+ }
}
}
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/d1b341df/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/v3/V3FunctionImportUtils.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/v3/V3FunctionImportUtils.java b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/v3/V3FunctionImportUtils.java
new file mode 100644
index 0000000..c8d352a
--- /dev/null
+++ b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/v3/V3FunctionImportUtils.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.olingo.odata4.client.core.edm.v3;
+
+import org.apache.olingo.odata4.client.api.edm.xml.v3.FunctionImport;
+import org.apache.olingo.odata4.client.api.http.HttpMethod;
+
+public final class V3FunctionImportUtils {
+
+ public static boolean canProxyFunction(final FunctionImport functionImport) {
+ return functionImport.getHttpMethod() == null
+ ? !functionImport.isSideEffecting()
+ : HttpMethod.GET.name().equals(functionImport.getHttpMethod());
+ }
+
+ private V3FunctionImportUtils() {
+ // empty constructor for static utility classes
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/d1b341df/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/v4/EdmServiceMetadataImpl.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/v4/EdmServiceMetadataImpl.java b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/v4/EdmServiceMetadataImpl.java
index 2f797ee..dfcc38b 100644
--- a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/v4/EdmServiceMetadataImpl.java
+++ b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/v4/EdmServiceMetadataImpl.java
@@ -20,6 +20,7 @@ package org.apache.olingo.odata4.client.core.edm.v4;
import java.util.ArrayList;
import java.util.List;
+import org.apache.olingo.odata4.client.api.edm.xml.CommonFunctionImport;
import org.apache.olingo.odata4.client.api.edm.xml.Schema;
import org.apache.olingo.odata4.client.api.edm.xml.v4.ActionImport;
import org.apache.olingo.odata4.client.api.edm.xml.v4.EntityContainer;
@@ -27,9 +28,11 @@ import org.apache.olingo.odata4.client.api.edm.xml.v4.Singleton;
import org.apache.olingo.odata4.client.core.edm.AbstractEdmServiceMetadataImpl;
import org.apache.olingo.odata4.client.core.edm.xml.v4.XMLMetadataImpl;
import org.apache.olingo.odata4.commons.api.edm.EdmActionImportInfo;
+import org.apache.olingo.odata4.commons.api.edm.EdmFunctionImportInfo;
import org.apache.olingo.odata4.commons.api.edm.EdmSingletonInfo;
import org.apache.olingo.odata4.commons.api.edm.constants.ODataServiceVersion;
import org.apache.olingo.odata4.commons.core.edm.EdmActionImportInfoImpl;
+import org.apache.olingo.odata4.commons.core.edm.EdmFunctionImportInfoImpl;
import org.apache.olingo.odata4.commons.core.edm.EdmSingletonInfoImpl;
public class EdmServiceMetadataImpl extends AbstractEdmServiceMetadataImpl {
@@ -66,6 +69,24 @@ public class EdmServiceMetadataImpl extends AbstractEdmServiceMetadataImpl {
}
@Override
+ public List<EdmFunctionImportInfo> getFunctionImportInfos() {
+ synchronized (this) {
+ if (functionImportInfos == null) {
+ functionImportInfos = new ArrayList<EdmFunctionImportInfo>();
+ for (Schema schema : xmlMetadata.getSchemas()) {
+ for (org.apache.olingo.odata4.client.api.edm.xml.EntityContainer entityContainer : schema.getEntityContainers()) {
+ for (CommonFunctionImport functionImport : entityContainer.getFunctionImports()) {
+ functionImportInfos.add(
+ new EdmFunctionImportInfoImpl(entityContainer.getName(), functionImport.getName()));
+ }
+ }
+ }
+ }
+ }
+ return functionImportInfos;
+ }
+
+ @Override
public List<EdmActionImportInfo> getActionImportInfos() {
synchronized (this) {
if (actionImportInfos == null) {
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/d1b341df/odata4-lib/odata4-client-core/src/test/java/org/apache/olingo/odata4/client/core/v3/MetadataTest.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-core/src/test/java/org/apache/olingo/odata4/client/core/v3/MetadataTest.java b/odata4-lib/odata4-client-core/src/test/java/org/apache/olingo/odata4/client/core/v3/MetadataTest.java
index 483d6f5..5efb1d3 100644
--- a/odata4-lib/odata4-client-core/src/test/java/org/apache/olingo/odata4/client/core/v3/MetadataTest.java
+++ b/odata4-lib/odata4-client-core/src/test/java/org/apache/olingo/odata4/client/core/v3/MetadataTest.java
@@ -19,6 +19,7 @@
package org.apache.olingo.odata4.client.core.v3;
import java.util.Arrays;
+import java.util.HashSet;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
@@ -26,6 +27,7 @@ import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import java.util.List;
+import java.util.Set;
import org.apache.olingo.odata4.client.api.edm.xml.EntityContainer;
import org.apache.olingo.odata4.client.api.edm.xml.EntityType;
import org.apache.olingo.odata4.client.api.edm.xml.Schema;
@@ -37,11 +39,13 @@ import org.apache.olingo.odata4.client.core.edm.xml.v3.XMLMetadataImpl;
import org.apache.olingo.odata4.commons.api.edm.Edm;
import org.apache.olingo.odata4.commons.api.edm.EdmAction;
import org.apache.olingo.odata4.commons.api.edm.EdmActionImport;
+import org.apache.olingo.odata4.commons.api.edm.EdmActionImportInfo;
import org.apache.olingo.odata4.commons.api.edm.EdmComplexType;
import org.apache.olingo.odata4.commons.api.edm.EdmEntityContainer;
import org.apache.olingo.odata4.commons.api.edm.EdmEntityType;
import org.apache.olingo.odata4.commons.api.edm.EdmFunction;
import org.apache.olingo.odata4.commons.api.edm.EdmFunctionImport;
+import org.apache.olingo.odata4.commons.api.edm.EdmFunctionImportInfo;
import org.apache.olingo.odata4.commons.api.edm.FullQualifiedName;
import org.apache.olingo.odata4.commons.core.edm.primitivetype.EdmPrimitiveTypeKind;
import org.junit.Test;
@@ -139,6 +143,31 @@ public class MetadataTest extends AbstractTest {
readMetadata(getClass().getResourceAsStream("metadata.xml"));
assertNotNull(metadata);
+ final Set<String> actionImports = new HashSet<String>();
+ for (EdmActionImportInfo info : metadata.getServiceMetadata().getActionImportInfos()) {
+ actionImports.add(info.getActionImportName());
+ }
+ final Set<String> expectedAI = new HashSet<String>(Arrays.asList(new String[]{
+ "ResetDataSource",
+ "IncreaseSalaries",
+ "Sack",
+ "GetComputer",
+ "ChangeProductDimensions",
+ "ResetComputerDetailsSpecifications"}));
+ assertEquals(expectedAI, actionImports);
+ final Set<String> functionImports = new HashSet<String>();
+ for (EdmFunctionImportInfo info : metadata.getServiceMetadata().getFunctionImportInfos()) {
+ functionImports.add(info.getFunctionImportName());
+ }
+ final Set<String> expectedFI = new HashSet<String>(Arrays.asList(new String[]{
+ "GetPrimitiveString",
+ "GetSpecificCustomer",
+ "GetCustomerCount",
+ "GetArgumentPlusOne",
+ "EntityProjectionReturnsCollectionOfComplexTypes",
+ "InStreamErrorGetCustomer"}));
+ assertEquals(expectedFI, functionImports);
+
final EdmEntityContainer container = metadata.getEntityContainer(
new FullQualifiedName("Microsoft.Test.OData.Services.AstoriaDefaultService", "DefaultContainer"));
assertNotNull(container);