mirror of
https://github.com/apache/olingo-odata4.git
synced 2025-03-06 16:49:09 +00:00
[OLINGO-169] Enhancing EdmActionImportInfo and EdmFunctionImportInfo support for V3
This commit is contained in:
parent
1264aecd5c
commit
d1b341dfaa
@ -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
|
||||
@ -80,24 +81,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);
|
||||
|
@ -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()) {
|
||||
|
@ -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 {
|
||||
|
||||
@ -44,9 +52,46 @@ public class EdmServiceMetadataImpl extends AbstractEdmServiceMetadataImpl {
|
||||
throw new UnsupportedInV3Exception();
|
||||
}
|
||||
|
||||
@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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
}
|
@ -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 {
|
||||
@ -65,6 +68,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) {
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user