Return-Path: X-Original-To: apmail-olingo-commits-archive@minotaur.apache.org Delivered-To: apmail-olingo-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 2708911435 for ; Thu, 24 Jul 2014 14:30:51 +0000 (UTC) Received: (qmail 41696 invoked by uid 500); 24 Jul 2014 14:30:51 -0000 Delivered-To: apmail-olingo-commits-archive@olingo.apache.org Received: (qmail 41654 invoked by uid 500); 24 Jul 2014 14:30:51 -0000 Mailing-List: contact commits-help@olingo.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@olingo.apache.org Delivered-To: mailing list commits@olingo.apache.org Received: (qmail 41367 invoked by uid 99); 24 Jul 2014 14:30:50 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 24 Jul 2014 14:30:50 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id 905DA9B2D05; Thu, 24 Jul 2014 14:30:50 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: fmartelli@apache.org To: commits@olingo.apache.org Date: Thu, 24 Jul 2014 14:31:01 -0000 Message-Id: <54f996b72f124670a344b4425fd2d304@git.apache.org> In-Reply-To: <01c912ecf30549c597a030b74e663759@git.apache.org> References: <01c912ecf30549c597a030b74e663759@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [12/13] [OLINGO-366] provided operation invokers http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abb47659/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntityCollectionInvocationHandler.java ---------------------------------------------------------------------- diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntityCollectionInvocationHandler.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntityCollectionInvocationHandler.java index 02864f6..6f54781 100644 --- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntityCollectionInvocationHandler.java +++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntityCollectionInvocationHandler.java @@ -29,21 +29,20 @@ import org.apache.olingo.ext.proxy.AbstractService; import org.apache.olingo.ext.proxy.api.EntityCollection; import org.apache.olingo.ext.proxy.api.EntityType; -public class EntityCollectionInvocationHandler - extends AbstractEntityCollectionInvocationHandler> - implements EntityCollection { +public class EntityCollectionInvocationHandler> + extends AbstractEntityCollectionInvocationHandler> { private static final long serialVersionUID = 98078202642671726L; public EntityCollectionInvocationHandler( - final AbstractService service, final Class> collItemRef) { + final AbstractService service, final Class> collItemRef) { this(service, new ArrayList(), collItemRef, null, null); } - public > EntityCollectionInvocationHandler( + public > EntityCollectionInvocationHandler( final AbstractService service, final Collection items, - final Class> collItemRef, + final Class> collItemRef, final URI targetEntitySetURI, final CommonURIBuilder uri) { http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abb47659/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntityContainerInvocationHandler.java ---------------------------------------------------------------------- diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntityContainerInvocationHandler.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntityContainerInvocationHandler.java index f428a60..4339cba 100644 --- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntityContainerInvocationHandler.java +++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntityContainerInvocationHandler.java @@ -155,7 +155,8 @@ public final class EntityContainerInvocationHandler extends AbstractInvocationHa } @SuppressWarnings("unchecked") - public > NEC newEntityCollection(final Class ref) { + public , NEC extends EntityCollection> NEC newEntityCollection( + final Class ref) { return (NEC) Proxy.newProxyInstance( Thread.currentThread().getContextClassLoader(), new Class[] {ref}, @@ -163,7 +164,7 @@ public final class EntityContainerInvocationHandler extends AbstractInvocationHa } @SuppressWarnings("unchecked") - public NE newComplexInstance(final Class ref) { + public > NE newComplexInstance(final Class ref) { return (NE) Proxy.newProxyInstance( Thread.currentThread().getContextClassLoader(), new Class[] {ref}, @@ -171,7 +172,8 @@ public final class EntityContainerInvocationHandler extends AbstractInvocationHa } @SuppressWarnings("unchecked") - public > NEC newComplexCollection(final Class ref) { + public , NEC extends ComplexCollection> NEC newComplexCollection( + final Class ref) { final Class itemRef = (Class) ClassUtils.extractTypeArg(ref, ComplexCollection.class); return (NEC) Proxy.newProxyInstance( http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abb47659/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntitySetInvocationHandler.java ---------------------------------------------------------------------- diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntitySetInvocationHandler.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntitySetInvocationHandler.java index 0199d1b..72355c3 100644 --- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntitySetInvocationHandler.java +++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntitySetInvocationHandler.java @@ -42,27 +42,28 @@ import org.apache.olingo.ext.proxy.api.AbstractSingleton; import org.apache.olingo.ext.proxy.api.EntityCollection; import org.apache.olingo.ext.proxy.api.EntityType; import org.apache.olingo.ext.proxy.api.Search; -import org.apache.olingo.ext.proxy.api.SingleQuery; +import org.apache.olingo.ext.proxy.api.StructuredType; import org.apache.olingo.ext.proxy.api.annotations.Namespace; import org.apache.olingo.ext.proxy.context.AttachedEntityStatus; import org.apache.olingo.ext.proxy.context.EntityContext; import org.apache.olingo.ext.proxy.context.EntityUUID; import org.apache.olingo.ext.proxy.utils.ClassUtils; -class EntitySetInvocationHandler< - T extends EntityType, KEY extends Serializable, EC extends EntityCollection> +public class EntitySetInvocationHandler< + T extends EntityType, KEY extends Serializable, EC extends EntityCollection> extends AbstractEntityCollectionInvocationHandler implements AbstractEntitySet { private static final long serialVersionUID = 2629912294765040027L; @SuppressWarnings({"rawtypes", "unchecked"}) - static EntitySetInvocationHandler getInstance(final Class ref, final AbstractService service) { + public static EntitySetInvocationHandler getInstance(final Class ref, final AbstractService service) { return new EntitySetInvocationHandler(ref, service, buildEntitySetURI(ref, service)); } @SuppressWarnings({"rawtypes", "unchecked"}) - static EntitySetInvocationHandler getInstance(final Class ref, final AbstractService service, final URI uri) { + public static EntitySetInvocationHandler getInstance( + final Class ref, final AbstractService service, final URI uri) { return new EntitySetInvocationHandler(ref, service, service.getClient().newURIBuilder(uri.toASCIIString())); } @@ -104,7 +105,7 @@ class EntitySetInvocationHandler< @Override public Boolean exists(final KEY key) throws IllegalArgumentException { try { - SingleQuery.class.cast(getByKey(key)).load(); + StructuredType.class.cast(getByKey(key)).load(); return true; } catch (Exception e) { LOG.error("Could not check existence of {}({})", this.uri, key, e); @@ -151,9 +152,8 @@ class EntitySetInvocationHandler< return execute(collItemRef); } - public > Future executeAsync(final Class collTypeRef) { + public > Future executeAsync(final Class collTypeRef) { return service.getClient().getConfiguration().getExecutor().submit(new Callable() { - @Override public SEC call() throws Exception { return execute(collTypeRef); @@ -162,7 +162,7 @@ class EntitySetInvocationHandler< } @SuppressWarnings("unchecked") - public > SEC execute(final Class collTypeRef) { + public > SEC execute(final Class collTypeRef) { final Class ref = (Class) ClassUtils.extractTypeArg(collTypeRef, AbstractEntitySet.class, AbstractSingleton.class, EntityCollection.class); final Class oref = (Class) ClassUtils.extractTypeArg(this.collItemRef, @@ -202,7 +202,7 @@ class EntitySetInvocationHandler< @Override @SuppressWarnings("unchecked") - public > Search createSearch(final Class reference) { + public > Search createSearch(final Class reference) { if (getClient().getServiceVersion().compareTo(ODataServiceVersion.V30) <= 0) { throw new UnsupportedInV3Exception(); @@ -215,7 +215,7 @@ class EntitySetInvocationHandler< } @SuppressWarnings("unchecked") - public > SEC fetchWholeEntitySet( + public > SEC fetchWholeEntitySet( final CommonURIBuilder uriBuilder, final Class typeRef, final Class collTypeRef) { final List res = new ArrayList(); http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abb47659/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntitySetIterator.java ---------------------------------------------------------------------- diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntitySetIterator.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntitySetIterator.java index 77d58f7..8ac25ed 100644 --- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntitySetIterator.java +++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntitySetIterator.java @@ -30,7 +30,7 @@ import org.apache.olingo.commons.api.domain.v4.ODataAnnotation; import org.apache.olingo.ext.proxy.api.EntityCollection; import org.apache.olingo.ext.proxy.api.EntityType; -class EntitySetIterator> +class EntitySetIterator, KEY extends Serializable, EC extends EntityCollection> implements Iterator { private final EntitySetInvocationHandler esi; http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abb47659/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/InvokerHandler.java ---------------------------------------------------------------------- diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/InvokerHandler.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/InvokerHandler.java new file mode 100644 index 0000000..fecc4cb --- /dev/null +++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/InvokerHandler.java @@ -0,0 +1,292 @@ +/* + * 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.ext.proxy.commons; + +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; +import java.net.URI; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import org.apache.commons.lang3.StringUtils; +import org.apache.olingo.client.api.communication.request.invoke.ODataNoContent; +import org.apache.olingo.client.api.http.HttpMethod; +import org.apache.olingo.client.api.uri.CommonURIBuilder; +import org.apache.olingo.client.api.uri.URIFilter; +import org.apache.olingo.commons.api.domain.CommonODataEntity; +import org.apache.olingo.commons.api.domain.CommonODataEntitySet; +import org.apache.olingo.commons.api.domain.CommonODataProperty; +import org.apache.olingo.commons.api.domain.ODataInvokeResult; +import org.apache.olingo.commons.api.domain.ODataValue; +import org.apache.olingo.commons.api.edm.EdmFunction; +import org.apache.olingo.commons.api.edm.EdmOperation; +import org.apache.olingo.commons.api.edm.EdmReturnType; +import org.apache.olingo.commons.api.edm.constants.EdmTypeKind; +import org.apache.olingo.commons.core.edm.EdmTypeInfo; +import org.apache.olingo.ext.proxy.AbstractService; +import org.apache.olingo.ext.proxy.api.ComplexCollection; +import org.apache.olingo.ext.proxy.api.EntityCollection; +import org.apache.olingo.ext.proxy.api.OperationType; +import org.apache.olingo.ext.proxy.api.PrimitiveCollection; +import org.apache.olingo.ext.proxy.api.Sort; +import org.apache.olingo.ext.proxy.api.annotations.Operation; +import org.apache.olingo.ext.proxy.utils.ClassUtils; +import org.apache.olingo.ext.proxy.utils.CoreUtils; +import org.apache.olingo.ext.proxy.utils.ProxyUtils; + +public class InvokerHandler extends AbstractInvocationHandler { + + private final URI baseURI; + + private CommonURIBuilder uri; + + private final Map parameters; + + private final Operation operation; + + private final EdmOperation edmOperation; + + private final Class reference; + + public InvokerHandler( + final URI uri, + final Map parameters, + final Operation operation, + final EdmOperation edmOperation, + final Class reference, + final AbstractService service) { + + super(service); + + this.baseURI = uri; + this.uri = this.baseURI == null ? null : service.getClient().newURIBuilder(this.baseURI.toASCIIString()); + this.parameters = parameters; + this.edmOperation = edmOperation; + this.operation = operation; + this.reference = reference; + } + + public C compose() { + return null; + } + + @SuppressWarnings({"unchecked", "rawtypes"}) + public T execute() { + if (operation == null || uri == null) { + throw new IllegalStateException("Invalid operation"); + } + + try { + // 1. IMPORTANT: flush any pending change *before* invoke if this operation is side effecting + if (operation.type() == OperationType.ACTION) { + service.getPersistenceManager().flush(); + } + + // 2. invoke + final ODataInvokeResult result = service.getClient().getInvokeRequestFactory().getInvokeRequest( + edmOperation instanceof EdmFunction ? HttpMethod.GET : HttpMethod.POST, + uri.build(), + getResultReference(edmOperation.getReturnType()), + parameters). + execute().getBody(); + + // 3. process invoke result + if (StringUtils.isBlank(operation.returnType())) { + return (T) ClassUtils.returnVoid(); + } + + final EdmTypeInfo edmType = new EdmTypeInfo.Builder(). + setEdm(service.getClient().getCachedEdm()).setTypeExpression(operation.returnType()).build(); + + if (edmType.isEntityType()) { + if (edmType.isCollection()) { + final Class collItemType = ClassUtils.extractTypeArg(reference, EntityCollection.class); + return (T) ProxyUtils.getEntityCollectionProxy( + service, + collItemType, + reference, + null, + (CommonODataEntitySet) result, + this.baseURI, + false); + } else { + return (T) ProxyUtils.getEntityProxy( + service, + (CommonODataEntity) result, + null, + reference, + null, + false); + } + } else { + Object res; + + final Class ref = ClassUtils.getTypeClass(reference); + final CommonODataProperty property = (CommonODataProperty) result; + + if (property == null || property.hasNullValue()) { + res = null; + } else if (edmType.isCollection()) { + if (edmType.isComplexType()) { + final Class itemRef = ClassUtils.extractTypeArg(ref, ComplexCollection.class); + final List items = new ArrayList(); + + for (ODataValue item : property.getValue().asCollection()) { + items.add(ProxyUtils.getComplex( + service, + property.getName(), + item, + itemRef, + null, + null, + true)); + } + + res = Proxy.newProxyInstance( + Thread.currentThread().getContextClassLoader(), + new Class[] {ref}, new ComplexCollectionInvocationHandler( + service, + items, + itemRef, + null)); + } else { + final List items = new ArrayList(); + + for (ODataValue item : property.getValue().asCollection()) { + items.add(item.asPrimitive().toValue()); + } + + res = Proxy.newProxyInstance( + Thread.currentThread().getContextClassLoader(), + new Class[] {PrimitiveCollection.class}, new PrimitiveCollectionInvocationHandler( + service, + items, + null, + null)); + } + } else { + if (edmType.isComplexType()) { + res = ProxyUtils.getComplex( + service, property.getName(), property.getValue().asComplex(), ref, null, null, false); + } else { + res = CoreUtils.getObjectFromODataValue(property.getValue(), reference, service); + } + } + + return (T) res; + } + } catch (Exception e) { + throw new IllegalStateException(e); + } + } + + @SuppressWarnings("unchecked") + private Class getResultReference(final EdmReturnType returnType) { + Class result; + + if (returnType == null) { + result = (Class) ODataNoContent.class; + } else { + if (returnType.isCollection() && returnType.getType().getKind() == EdmTypeKind.ENTITY) { + result = (Class) CommonODataEntitySet.class; + } else if (!returnType.isCollection() && returnType.getType().getKind() == EdmTypeKind.ENTITY) { + result = (Class) CommonODataEntity.class; + } else { + result = (Class) CommonODataProperty.class; + } + } + + return result; + } + + @Override + public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { + if ("filter".equals(method.getName()) + || "orderBy".equals(method.getName()) + || "top".equals(method.getName()) + || "skip".equals(method.getName()) + || "expand".equals(method.getName()) + || "select".equals(method.getName())) { + invokeSelfMethod(method, args); + return proxy; + } else if (isSelfMethod(method, args)) { + return invokeSelfMethod(method, args); + } else { + throw new NoSuchMethodException(method.getName()); + } + } + + public void filter(final String filter) { + if (this.uri != null) { + this.uri.filter(filter); + } + } + + public void filter(final URIFilter filter) { + if (this.uri != null) { + this.uri.filter(filter); + } + } + + public void orderBy(final Sort... sort) { + if (this.uri != null) { + final StringBuilder builder = new StringBuilder(); + for (Sort sortClause : sort) { + builder.append(sortClause.getKey()).append(' ').append(sortClause.getValue()).append(','); + } + builder.deleteCharAt(builder.length() - 1); + + this.uri.orderBy(builder.toString()); + } + } + + public void orderBy(final String orderBy) { + if (this.uri != null) { + this.uri.orderBy(orderBy); + } + } + + public void top(final int top) throws IllegalArgumentException { + if (this.uri != null) { + this.uri.top(top); + } + } + + public void skip(final int skip) throws IllegalArgumentException { + if (this.uri != null) { + this.uri.skip(skip); + } + } + + public void expand(final String... expand) { + if (this.uri != null) { + this.uri.expand(expand); + } + } + + public void select(final String... select) { + if (this.uri != null) { + this.uri.select(select); + } + } + + public void clearQueryOptions() { + this.uri = this.baseURI == null ? null : getClient().newURIBuilder(baseURI.toASCIIString()); + } +} http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abb47659/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 32226f8..0fb8b96 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 @@ -36,12 +36,16 @@ import org.apache.olingo.ext.proxy.utils.ClassUtils; import java.lang.annotation.Annotation; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; +import java.lang.reflect.Proxy; import java.net.URI; import java.util.AbstractMap; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import org.apache.olingo.commons.api.domain.ODataValue; +import org.apache.olingo.commons.core.edm.EdmTypeInfo; +import org.apache.olingo.ext.proxy.utils.CoreUtils; final class OperationInvocationHandler extends AbstractInvocationHandler implements OperationExecutor { @@ -119,13 +123,13 @@ final class OperationInvocationHandler extends AbstractInvocationHandler impleme } @Override + @SuppressWarnings({"unchecked", "rawtypes"}) public Object invoke(final Object proxy, final Method method, final Object[] args) throws Throwable { if (isSelfMethod(method, args)) { return invokeSelfMethod(method, args); } else { - final Annotation[] methodAnnots = method.getAnnotations(); - if (methodAnnots[0] instanceof Operation) { - final Operation operation = (Operation) methodAnnots[0]; + final Operation operation = method.getAnnotation(Operation.class); + if (operation != null) { final Annotation[][] annotations = method.getParameterAnnotations(); final List parameterNames; @@ -160,7 +164,33 @@ final class OperationInvocationHandler extends AbstractInvocationHandler impleme throw new IllegalStateException("Invalid target invocation"); } - return invokeOperation(operation, method, parameters, edmOperation.getKey(), edmOperation.getValue()); + final Map parameterValues = new LinkedHashMap(); + for (Map.Entry parameter : parameters.entrySet()) { + + if (!parameter.getKey().nullable() && parameter.getValue() == null) { + throw new IllegalArgumentException( + "Parameter " + parameter.getKey().name() + " is not nullable but a null value was provided"); + } + + final EdmTypeInfo type = new EdmTypeInfo.Builder(). + setEdm(service.getClient().getCachedEdm()).setTypeExpression(parameter.getKey().type()).build(); + + final ODataValue paramValue = parameter.getValue() == null + ? null + : CoreUtils.getODataValue(service.getClient(), type, parameter.getValue()); + + parameterValues.put(parameter.getKey().name(), paramValue); + } + + return Proxy.newProxyInstance( + Thread.currentThread().getContextClassLoader(), + new Class[] {method.getReturnType()}, new InvokerHandler( + edmOperation.getKey(), + parameterValues, + operation, + edmOperation.getValue(), + operation.referenceType(), + service)); } else { throw new NoSuchMethodException(method.getName()); } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abb47659/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/SearchImpl.java ---------------------------------------------------------------------- diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/SearchImpl.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/SearchImpl.java index e994d6f..7956226 100644 --- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/SearchImpl.java +++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/SearchImpl.java @@ -29,7 +29,7 @@ import org.apache.olingo.ext.proxy.api.EntityType; import org.apache.olingo.ext.proxy.api.Search; import org.apache.olingo.ext.proxy.utils.ClassUtils; -public class SearchImpl> implements Search { +public class SearchImpl, EC extends EntityCollection> implements Search { private static final long serialVersionUID = 4383858176507769973L; @@ -50,7 +50,7 @@ public class SearchImpl> im final Class collTypeRef, final URI baseURI, final EntitySetInvocationHandler handler) { this.client = client; - this.typeRef = (Class) ClassUtils.extractTypeArg(collTypeRef); + this.typeRef = (Class) ClassUtils.extractTypeArg(collTypeRef, EntityCollection.class); this.collTypeRef = collTypeRef; this.baseURI = baseURI; this.handler = handler; http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abb47659/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/utils/CoreUtils.java ---------------------------------------------------------------------- diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/utils/CoreUtils.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/utils/CoreUtils.java index dbb4222..aaf2d78 100644 --- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/utils/CoreUtils.java +++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/utils/CoreUtils.java @@ -535,13 +535,23 @@ public final class CoreUtils { } } + return getObjectFromODataValue(value, internalRef, service); + } + + public static Object getObjectFromODataValue( + final ODataValue value, + final Class ref, + final AbstractService service) + throws InstantiationException, IllegalAccessException { + + final Object res; if (value == null) { res = null; } else if (value.isComplex()) { // complex types supports inheritance in V4, best to re-read actual type - internalRef = getComplexTypeRef(service, value); + Class internalRef = getComplexTypeRef(service, value); res = Proxy.newProxyInstance( Thread.currentThread().getContextClassLoader(), new Class[] {internalRef}, @@ -553,9 +563,9 @@ public final class CoreUtils { while (collPropItor.hasNext()) { final ODataValue itemValue = collPropItor.next(); if (itemValue.isPrimitive()) { - collection.add(CoreUtils.primitiveValueToObject(itemValue.asPrimitive(), internalRef)); + collection.add(CoreUtils.primitiveValueToObject(itemValue.asPrimitive(), ref)); } else if (itemValue.isComplex()) { - internalRef = getComplexTypeRef(service, value); + Class internalRef = getComplexTypeRef(service, value); final Object collItem = Proxy.newProxyInstance( Thread.currentThread().getContextClassLoader(), new Class[] {internalRef}, @@ -567,12 +577,9 @@ public final class CoreUtils { res = collection; } else if (value instanceof ODataEnumValue) { - if (internalRef == null) { - internalRef = getEnumTypeRef(service, value); - } - res = enumValueToObject((ODataEnumValue) value, internalRef); + res = enumValueToObject((ODataEnumValue) value, ref == null ? getEnumTypeRef(service, value) : ref); } else { - res = primitiveValueToObject(value.asPrimitive(), internalRef); + res = primitiveValueToObject(value.asPrimitive(), ref); } return res; http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abb47659/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/utils/ProxyUtils.java ---------------------------------------------------------------------- diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/utils/ProxyUtils.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/utils/ProxyUtils.java new file mode 100644 index 0000000..65b6ff0 --- /dev/null +++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/utils/ProxyUtils.java @@ -0,0 +1,139 @@ +/* + * Copyright 2014 The Apache Software Foundation. + * + * Licensed 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.ext.proxy.utils; + +import java.lang.reflect.Proxy; +import java.net.URI; +import java.util.ArrayList; +import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.olingo.client.api.uri.CommonURIBuilder; +import org.apache.olingo.commons.api.domain.CommonODataEntity; +import org.apache.olingo.commons.api.domain.CommonODataEntitySet; +import org.apache.olingo.commons.api.domain.ODataValue; +import org.apache.olingo.ext.proxy.AbstractService; +import org.apache.olingo.ext.proxy.api.ComplexType; +import org.apache.olingo.ext.proxy.commons.ComplexInvocationHandler; +import org.apache.olingo.ext.proxy.commons.EntityCollectionInvocationHandler; +import org.apache.olingo.ext.proxy.commons.EntityInvocationHandler; +import org.apache.olingo.ext.proxy.commons.EntitySetInvocationHandler; + +public class ProxyUtils { + + @SuppressWarnings({"unchecked", "rawtypes"}) + public static Object getEntityCollectionProxy( + final AbstractService service, + final Class typeRef, + final Class typeCollectionRef, + final URI targetEntitySetURI, + final CommonODataEntitySet entitySet, + final URI uri, + final boolean checkInTheContext) { + + final List items = new ArrayList(); + + if (entitySet != null) { + for (CommonODataEntity entityFromSet : entitySet.getEntities()) { + items.add(getEntityProxy(service, entityFromSet, uri, typeRef, null, checkInTheContext)); + } + } + + return Proxy.newProxyInstance( + Thread.currentThread().getContextClassLoader(), + new Class[] {typeCollectionRef}, + new EntityCollectionInvocationHandler(service, items, typeCollectionRef, targetEntitySetURI, + uri == null ? null : service.getClient().newURIBuilder(uri.toASCIIString()))); + } + + public static Object getEntitySetProxy( + final AbstractService service, + final Class typeRef, + final URI uri) { + + return Proxy.newProxyInstance( + Thread.currentThread().getContextClassLoader(), + new Class[] {typeRef}, + EntitySetInvocationHandler.getInstance(typeRef, service, uri)); + } + + public static Object getEntityProxy( + final AbstractService service, + final CommonODataEntity entity, + final URI entitySetURI, + final Class type, + final String eTag, + final boolean checkInTheContext) { + + EntityInvocationHandler handler = EntityInvocationHandler.getInstance(entity, entitySetURI, type, service); + + if (StringUtils.isNotBlank(eTag)) { + // override ETag into the wrapped object. + handler.setETag(eTag); + } + + if (checkInTheContext && service.getContext().entityContext().isAttached(handler)) { + handler = service.getContext().entityContext().getEntity(handler.getUUID()); + handler.setEntity(entity); + } + + return Proxy.newProxyInstance( + Thread.currentThread().getContextClassLoader(), + new Class[] {type}, + handler); + } + + public static ComplexType getComplex( + final AbstractService service, + final String name, + final ODataValue value, + final Class ref, + final EntityInvocationHandler handler, + final URI baseURI, + final boolean collectionItem) { + + final CommonURIBuilder targetURI; + if (collectionItem) { + targetURI = null; + } else { + targetURI = baseURI == null + ? null : service.getClient().newURIBuilder(baseURI.toASCIIString()).appendPropertySegment(name); + } + + final ComplexInvocationHandler complexHandler; + Class actualRef = ref; + if (value == null) { + complexHandler = ComplexInvocationHandler.getInstance( + actualRef, + service, + targetURI); + } else { + actualRef = CoreUtils.getComplexTypeRef(service, value); // handle derived types + complexHandler = ComplexInvocationHandler.getInstance( + value.asComplex(), + actualRef, + service, + targetURI); + } + + complexHandler.setEntityHandler(handler); + + final ComplexType res = ComplexType.class.cast(Proxy.newProxyInstance( + Thread.currentThread().getContextClassLoader(), + new Class[] {actualRef}, complexHandler)); + + return res; + } +} http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abb47659/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/AbstractUtility.java ---------------------------------------------------------------------- diff --git a/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/AbstractUtility.java b/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/AbstractUtility.java index 8fcc246..57550e3 100644 --- a/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/AbstractUtility.java +++ b/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/AbstractUtility.java @@ -47,6 +47,7 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; +import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind; public abstract class AbstractUtility { @@ -215,6 +216,10 @@ public abstract class AbstractUtility { return null; } + public boolean isStreamType(final EdmType type) { + return type != null && type.getFullQualifiedName().equals(EdmPrimitiveTypeKind.Stream.getFullQualifiedName()); + } + public List getFunctionsBoundTo(final String typeExpression, final boolean collection) { final List result = new ArrayList(); http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abb47659/ext/pojogen-maven-plugin/src/main/resources/complexCollection.vm ---------------------------------------------------------------------- diff --git a/ext/pojogen-maven-plugin/src/main/resources/complexCollection.vm b/ext/pojogen-maven-plugin/src/main/resources/complexCollection.vm index beeee41..70262d9 100644 --- a/ext/pojogen-maven-plugin/src/main/resources/complexCollection.vm +++ b/ext/pojogen-maven-plugin/src/main/resources/complexCollection.vm @@ -48,53 +48,13 @@ import javax.xml.datatype.Duration; #set ( $javaComplexType = $utility.getJavaType($complexType) ) public interface $utility.capitalize($complexType.Name)Collection extends - org.apache.olingo.ext.proxy.api.StruncturedCollectionQuery<$javaComplexType, ${javaComplexType}Collection, ${javaComplexType}Collection>, org.apache.olingo.ext.proxy.api.ComplexCollection<$javaComplexType> { + org.apache.olingo.ext.proxy.api.StructuredCollectionQuery<${javaComplexType}Collection>, + org.apache.olingo.ext.proxy.api.ComplexCollection<$javaComplexType, ${javaComplexType}Collection, ${javaComplexType}Collection> { #set( $functions = $utility.getFunctionsBoundTo($complexType.Name, true) ) #set( $actions = $utility.getActionsBoundTo($complexType.Name, true) ) #if( $functions.size() > 0 || $actions.size() > 0 ) - Operations operations(); - - public interface Operations { - - #foreach($operation in $functions) - @Operation(name = "$operation.Name", - type = OperationType.FUNCTION, - isComposable = $operation.Composable#if($operation.ReturnType), - returnType = "#if( $operation.ReturnType.Collection )Collection(#end$operation.ReturnType.Type.FullQualifiedName.toString()#if( $operation.ReturnType.Collection ))#end"#end) - #if($operation.ReturnType)$utility.getJavaType($operation.ReturnType.Type, $operation.ReturnType.Collection)#{else}void#end $utility.uncapitalize($operation.Name)( - #if($operation.ParameterNames) - #set( $count = $operation.ParameterNames.size() )#* - *##foreach($paramName in $operation.ParameterNames)#* - *##set( $count = $count - 1 )#* - *##set( $param = $operation.getParameter($paramName) )#* - *##if( !$complexType.FullQualifiedName.equals($param.Type.FullQualifiedName) )#* - *# @Parameter(name = "$param.Name", type = "#if( $param.Collection )Collection(#end$param.Type.FullQualifiedName.toString()#if( $param.Collection ))#end", nullable = $param.Nullable) $utility.getJavaType($param.Type, $param.Collection) $utility.uncapitalize($param.Name)#if( $count > 0 ), #end - - #end - #end#* - *##end); - - #end - - #foreach($operation in $actions) - @Operation(name = "$operation.Name", - type = OperationType.ACTION#if($operation.ReturnType), - returnType = "#if( $operation.ReturnType.Collection )Collection(#end$operation.ReturnType.Type.FullQualifiedName.toString()#if( $operation.ReturnType.Collection ))#end"#end) - #if($operation.ReturnType)$utility.getJavaType($operation.ReturnType.Type, $operation.ReturnType.Collection)#{else}void#end $utility.uncapitalize($operation.Name)( - #if($operation.ParameterNames) - #set( $count = $operation.ParameterNames.size() )#* - *##foreach($paramName in $operation.ParameterNames)#* - *##set( $count = $count - 1 )#* - *##set( $param = $operation.getParameter($paramName) )#* - *##if( !$complexType.FullQualifiedName.equals($param.Type.FullQualifiedName) )#* - *# @Parameter(name = "$param.Name", type = "#if( $param.Collection )Collection(#end$param.Type.FullQualifiedName.toString()#if( $param.Collection ))#end", nullable = $param.Nullable) $utility.getJavaType($param.Type, $param.Collection) $utility.uncapitalize($param.Name)#if( $count > 0 ), #end - - #end - #end#* - *##end); - - #end - } +#set($structuredType = $complexType) +#parse( "operation.vm" ) #end Object getAnnotation(Class term); http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abb47659/ext/pojogen-maven-plugin/src/main/resources/complexType.vm ---------------------------------------------------------------------- diff --git a/ext/pojogen-maven-plugin/src/main/resources/complexType.vm b/ext/pojogen-maven-plugin/src/main/resources/complexType.vm index a54938d..86da370 100644 --- a/ext/pojogen-maven-plugin/src/main/resources/complexType.vm +++ b/ext/pojogen-maven-plugin/src/main/resources/complexType.vm @@ -44,4 +44,13 @@ import org.apache.olingo.commons.api.edm.geo.Polygon; //CHECKSTYLE:ON (Maven checkstyle) #parse( "${odataVersion}/complexType.vm" ) + +#set( $functions = $utility.getFunctionsBoundTo($complexType.Name, false) ) +#set( $actions = $utility.getActionsBoundTo($complexType.Name, false) ) +#set( $inherited = $utility.justInheritedOperationsBoundTo($complexType) ) +#if( $inherited.size() > 0 || $functions.size() > 0 || $actions.size() > 0 ) +#set($structuredType = $complexType) +#parse( "operation.vm" ) +#end + } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abb47659/ext/pojogen-maven-plugin/src/main/resources/container.vm ---------------------------------------------------------------------- diff --git a/ext/pojogen-maven-plugin/src/main/resources/container.vm b/ext/pojogen-maven-plugin/src/main/resources/container.vm index 843ff88..939e1f5 100644 --- a/ext/pojogen-maven-plugin/src/main/resources/container.vm +++ b/ext/pojogen-maven-plugin/src/main/resources/container.vm @@ -72,11 +72,35 @@ public interface $utility.capitalize($container.Name) extends PersistenceManager public interface Operations { #foreach($operation in $container.FunctionImports) #foreach($function in $operation.UnboundFunctions) + #if($function.ReturnType)#* + *##set($defaultType = $utility.getJavaType($function.ReturnType.Type, $function.ReturnType.Collection))#* + *##if(!($function.getReturnType().isCollection() || ${function.ReturnType.Type.Kind} == "ENTITY" || ${function.ReturnType.Type.Kind} == "COMPLEX" || $utility.isStreamType($function.ReturnType.Type)))#* + *##set($returnType = "org.apache.olingo.ext.proxy.api.Invoker<$defaultType>")#* + *##else#* + *##if(${function.ReturnType.Type.Kind} == "ENTITY" || ${function.ReturnType.Type.Kind} == "COMPLEX")#* + *##if($function.getReturnType().isCollection())#* + *##set($returnType = "org.apache.olingo.ext.proxy.api.StructuredCollectionInvoker<$defaultType>")#* + *##{else}#* + *##set($returnType = "org.apache.olingo.ext.proxy.api.StructuredInvoker<$defaultType>")#* + *##end#* + *##{else}#* + *##if($function.getReturnType().isCollection())#* + *##set($returnType = "org.apache.olingo.ext.proxy.api.PrimitiveCollectionInvoker<$defaultType>")#* + *##{else}#* + *##set($returnType = "org.apache.olingo.ext.proxy.api.Invoker<$defaultType>")#* + *##end#* + *##end#* + *##end#* + *##{else}#* + *##set($returnType = "org.apache.olingo.ext.proxy.api.Invoker")#* + *##end + @org.apache.olingo.ext.proxy.api.annotations.Operation(name = "$function.Name", type = OperationType.FUNCTION, isComposable = $function.Composable#if($function.ReturnType), + #if($function.ReturnType)referenceType = ${defaultType.replaceAll("<.*>", "")}.class,#end returnType = "#if( $function.ReturnType.Collection )Collection(#end$function.ReturnType.Type.FullQualifiedName.toString()#if( $function.ReturnType.Collection ))#end"#end) - #if($function.ReturnType)$utility.getJavaType($function.ReturnType.Type, $function.ReturnType.Collection)#{else}void#end $utility.uncapitalize($function.Name)( + $returnType $utility.uncapitalize($function.Name)( #if($function.ParameterNames) #set( $count = $function.ParameterNames.size() )#* *##foreach($paramName in $function.ParameterNames)#* @@ -93,10 +117,34 @@ public interface $utility.capitalize($container.Name) extends PersistenceManager #foreach($operation in $container.ActionImports) #set( $action = $operation.UnboundAction ) #if($action) + #if($action.ReturnType)#* + *##set($defaultType = $utility.getJavaType($action.ReturnType.Type, $action.ReturnType.Collection))#* + *##if(!($action.getReturnType().isCollection() || ${action.ReturnType.Type.Kind} == "ENTITY" || ${action.ReturnType.Type.Kind} == "COMPLEX" || $utility.isStreamType($action.ReturnType.Type)))#* + *##set($returnType = "org.apache.olingo.ext.proxy.api.Invoker<$defaultType>")#* + *##else#* + *##if(${action.ReturnType.Type.Kind} == "ENTITY" || ${action.ReturnType.Type.Kind} == "COMPLEX")#* + *##if($action.getReturnType().isCollection())#* + *##set($returnType = "org.apache.olingo.ext.proxy.api.StructuredCollectionInvoker<$defaultType>")#* + *##{else}#* + *##set($returnType = "org.apache.olingo.ext.proxy.api.StructuredInvoker<$defaultType>")#* + *##end#* + *##{else}#* + *##if($action.getReturnType().isCollection())#* + *##set($returnType = "org.apache.olingo.ext.proxy.api.PrimitiveCollectionInvoker<$defaultType>")#* + *##{else}#* + *##set($returnType = "org.apache.olingo.ext.proxy.api.Invoker<$defaultType>")#* + *##end#* + *##end#* + *##end#* + *##{else}#* + *##set($returnType = "org.apache.olingo.ext.proxy.api.Invoker")#* + *##end + @org.apache.olingo.ext.proxy.api.annotations.Operation(name = "$action.Name", type = OperationType.ACTION#if($action.ReturnType), + #if($action.ReturnType)referenceType = ${defaultType.replaceAll("<.*>", "")}.class,#end returnType = "#if( $action.ReturnType.Collection )Collection(#end$action.ReturnType.Type.FullQualifiedName.toString()#if( $action.ReturnType.Collection ))#end"#end) - #if($action.ReturnType)$utility.getJavaType($action.ReturnType.Type, $action.ReturnType.Collection)#{else}void#end $utility.uncapitalize($action.Name)( + $returnType $utility.uncapitalize($action.Name)( #if($action.ParameterNames) #set( $count = $action.ParameterNames.size() )#* *##foreach($paramName in $action.ParameterNames)#* @@ -112,13 +160,13 @@ public interface $utility.capitalize($container.Name) extends PersistenceManager #end } - NE newEntityInstance(Class ref); + > NE newEntityInstance(Class ref); - > NEC newEntityCollection(Class ref); + , NEC extends EntityCollection> NEC newEntityCollection(Class ref); - NE newComplexInstance(Class ref); + > NE newComplexInstance(Class ref); - > NEC newComplexCollection(Class ref); + , NEC extends ComplexCollection> NEC newComplexCollection(Class ref); > NEC newPrimitiveCollection(Class ref); http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abb47659/ext/pojogen-maven-plugin/src/main/resources/entityCollection.vm ---------------------------------------------------------------------- diff --git a/ext/pojogen-maven-plugin/src/main/resources/entityCollection.vm b/ext/pojogen-maven-plugin/src/main/resources/entityCollection.vm index f8ea0df..bbab76f 100644 --- a/ext/pojogen-maven-plugin/src/main/resources/entityCollection.vm +++ b/ext/pojogen-maven-plugin/src/main/resources/entityCollection.vm @@ -48,53 +48,13 @@ import javax.xml.datatype.Duration; #set ( $javaEntityType = $utility.getJavaType($entityType) ) public interface $utility.capitalize($entityType.Name)Collection extends - org.apache.olingo.ext.proxy.api.StruncturedCollectionQuery<$javaEntityType, ${javaEntityType}Collection, ${javaEntityType}Collection>, org.apache.olingo.ext.proxy.api.EntityCollection<$javaEntityType> { + org.apache.olingo.ext.proxy.api.StructuredCollectionQuery<${javaEntityType}Collection>, + org.apache.olingo.ext.proxy.api.EntityCollection<$javaEntityType, ${javaEntityType}Collection, ${javaEntityType}Collection> { #set( $functions = $utility.getFunctionsBoundTo($entityType.Name, true) ) #set( $actions = $utility.getActionsBoundTo($entityType.Name, true) ) #if( $functions.size() > 0 || $actions.size() > 0 ) - Operations operations(); - - public interface Operations { - - #foreach($operation in $functions) - @Operation(name = "$operation.Name", - type = OperationType.FUNCTION, - isComposable = $operation.Composable#if($operation.ReturnType), - returnType = "#if( $operation.ReturnType.Collection )Collection(#end$operation.ReturnType.Type.FullQualifiedName.toString()#if( $operation.ReturnType.Collection ))#end"#end) - #if($operation.ReturnType)$utility.getJavaType($operation.ReturnType.Type, $operation.ReturnType.Collection)#{else}void#end $utility.uncapitalize($operation.Name)( - #if($operation.ParameterNames) - #set( $count = $operation.ParameterNames.size() )#* - *##foreach($paramName in $operation.ParameterNames)#* - *##set( $count = $count - 1 )#* - *##set( $param = $operation.getParameter($paramName) )#* - *##if( !$entityType.FullQualifiedName.equals($param.Type.FullQualifiedName) )#* - *# @Parameter(name = "$param.Name", type = "#if( $param.Collection )Collection(#end$param.Type.FullQualifiedName.toString()#if( $param.Collection ))#end", nullable = $param.Nullable) $utility.getJavaType($param.Type, $param.Collection) $utility.uncapitalize($param.Name)#if( $count > 0 ), #end - - #end - #end#* - *##end); - - #end - - #foreach($operation in $actions) - @Operation(name = "$operation.Name", - type = OperationType.ACTION#if($operation.ReturnType), - returnType = "#if( $operation.ReturnType.Collection )Collection(#end$operation.ReturnType.Type.FullQualifiedName.toString()#if( $operation.ReturnType.Collection ))#end"#end) - #if($operation.ReturnType)$utility.getJavaType($operation.ReturnType.Type, $operation.ReturnType.Collection)#{else}void#end $utility.uncapitalize($operation.Name)( - #if($operation.ParameterNames) - #set( $count = $operation.ParameterNames.size() )#* - *##foreach($paramName in $operation.ParameterNames)#* - *##set( $count = $count - 1 )#* - *##set( $param = $operation.getParameter($paramName) )#* - *##if( !$entityType.FullQualifiedName.equals($param.Type.FullQualifiedName) )#* - *# @Parameter(name = "$param.Name", type = "#if( $param.Collection )Collection(#end$param.Type.FullQualifiedName.toString()#if( $param.Collection ))#end", nullable = $param.Nullable) $utility.getJavaType($param.Type, $param.Collection) $utility.uncapitalize($param.Name)#if( $count > 0 ), #end - - #end - #end#* - *##end); - - #end - } +#set($structuredType = $entityType) +#parse( "operation.vm" ) #end Object getAnnotation(Class term); http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abb47659/ext/pojogen-maven-plugin/src/main/resources/entitySet.vm ---------------------------------------------------------------------- diff --git a/ext/pojogen-maven-plugin/src/main/resources/entitySet.vm b/ext/pojogen-maven-plugin/src/main/resources/entitySet.vm index 4afefac..ba1d353 100644 --- a/ext/pojogen-maven-plugin/src/main/resources/entitySet.vm +++ b/ext/pojogen-maven-plugin/src/main/resources/entitySet.vm @@ -57,5 +57,14 @@ import javax.xml.datatype.Duration; @org.apache.olingo.ext.proxy.api.annotations.EntitySet(name = "$entitySet.Name", container = "$container.FullQualifiedName.toString()") public interface $utility.capitalize($entitySet.Name) - extends org.apache.olingo.ext.proxy.api.EntitySetQuery<$javaEntityType, ${javaEntityType}Collection, $utility.capitalize($entitySet.Name)>, AbstractEntitySet<$javaEntityType, $type, ${javaEntityType}Collection> { + extends org.apache.olingo.ext.proxy.api.EntitySet<$javaEntityType, ${javaEntityType}Collection>, + org.apache.olingo.ext.proxy.api.StructuredCollectionQuery<$utility.capitalize($entitySet.Name)>, + AbstractEntitySet<$javaEntityType, $type, ${javaEntityType}Collection> { + +#set( $functions = $utility.getFunctionsBoundTo("${container.Namespace}.${entitySet.Name}", false) ) +#set( $actions = $utility.getActionsBoundTo("${container.Namespace}.${entitySet.Name}", false) ) +#if( $functions.size() > 0 || $actions.size() > 0 ) +#set($structuredType = $entitySet.EntityType) +#parse( "operation.vm" ) +#end } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abb47659/ext/pojogen-maven-plugin/src/main/resources/entityType.vm ---------------------------------------------------------------------- diff --git a/ext/pojogen-maven-plugin/src/main/resources/entityType.vm b/ext/pojogen-maven-plugin/src/main/resources/entityType.vm index 42c7549..b87709b 100644 --- a/ext/pojogen-maven-plugin/src/main/resources/entityType.vm +++ b/ext/pojogen-maven-plugin/src/main/resources/entityType.vm @@ -59,7 +59,9 @@ import org.apache.olingo.commons.api.edm.geo.Polygon; isAbstract = $entityType.Abstract#if($entityType.getBaseType()), baseType = "$entityType.getBaseType().getFullQualifiedName().toString()"#end) public interface $utility.capitalize($entityType.Name) - extends org.apache.olingo.ext.proxy.api.EntityType,org.apache.olingo.ext.proxy.api.Annotatable,#if( $entityType.getBaseType() )$utility.getJavaType($entityType.getBaseType())#{else}org.apache.olingo.ext.proxy.api.SingleQuery<$utility.capitalize($entityType.Name)>#end#{if}( $entityType.isOpenType() ),AbstractOpenType#end { + extends org.apache.olingo.ext.proxy.api.Annotatable, + #if( $entityType.getBaseType() )$utility.getJavaType($entityType.getBaseType())#{else}org.apache.olingo.ext.proxy.api.EntityType<$utility.capitalize($entityType.Name)>, org.apache.olingo.ext.proxy.api.StructuredQuery<$utility.capitalize($entityType.Name)>#end + #{if}( $entityType.isOpenType() ),AbstractOpenType#end { #if( $entityType.getBaseType() ) @Override @@ -137,52 +139,8 @@ public interface $utility.capitalize($entityType.Name) #set( $actions = $utility.getActionsBoundTo($entityType.Name, false) ) #set( $inherited = $utility.justInheritedOperationsBoundTo($entityType) ) #if( $inherited.size() > 0 || $functions.size() > 0 || $actions.size() > 0 ) - #if($inherited.size() > 0) - @Override - #end - Operations operations(); - - interface Operations #if($inherited.size() > 0) - extends ${utility.getJavaType($entityType.getBaseType())}.Operations#end{ - #foreach($operation in $functions) - @org.apache.olingo.ext.proxy.api.annotations.Operation(name = "$operation.Name", - type = OperationType.FUNCTION, - isComposable = $operation.Composable#if($operation.ReturnType), - returnType = "#if( $operation.ReturnType.Collection )Collection(#end$operation.ReturnType.Type.FullQualifiedName.toString()#if( $operation.ReturnType.Collection ))#end"#end) - #if($operation.ReturnType)$utility.getJavaType($operation.ReturnType.Type, $operation.ReturnType.Collection)#{else}void#end $utility.uncapitalize($operation.Name)( - #if($operation.ParameterNames) - #set( $count = $operation.ParameterNames.size() )#* - *##foreach($paramName in $operation.ParameterNames)#* - *##set( $count = $count - 1 )#* - *##set( $param = $operation.getParameter($paramName) )#* - *##if( !$entityType.FullQualifiedName.equals($param.Type.FullQualifiedName) )#* - *# @Parameter(name = "$param.Name", type = "#if( $param.Collection )Collection(#end$param.Type.FullQualifiedName.toString()#if( $param.Collection ))#end", nullable = $param.Nullable) $utility.getJavaType($param.Type, $param.Collection) $utility.uncapitalize($param.Name)#if( $count > 0 ), #end - - #end - #end#* - *##end); - - #end - - #foreach($operation in $actions) - @org.apache.olingo.ext.proxy.api.annotations.Operation(name = "$operation.Name", - type = OperationType.ACTION#if($operation.ReturnType), - returnType = "#if( $operation.ReturnType.Collection )Collection(#end$operation.ReturnType.Type.FullQualifiedName.toString()#if( $operation.ReturnType.Collection ))#end"#end) - #if($operation.ReturnType)$utility.getJavaType($operation.ReturnType.Type, $operation.ReturnType.Collection)#{else}void#end $utility.uncapitalize($operation.Name)( - #if($operation.ParameterNames) - #set( $count = $operation.ParameterNames.size() )#* - *##foreach($paramName in $operation.ParameterNames)#* - *##set( $count = $count - 1 )#* - *##set( $param = $operation.getParameter($paramName) )#* - *##if( !$entityType.FullQualifiedName.equals($param.Type.FullQualifiedName) )#* - *# @Parameter(name = "$param.Name", type = "#if( $param.Collection )Collection(#end$param.Type.FullQualifiedName.toString()#if( $param.Collection ))#end", nullable = $param.Nullable) $utility.getJavaType($param.Type, $param.Collection) $utility.uncapitalize($param.Name)#if( $count > 0 ), #end - - #end - #end#* - *##end); - - #end - } +#set($structuredType = $entityType) +#parse( "operation.vm" ) #end Annotations annotations(); @@ -233,7 +191,9 @@ public interface $utility.capitalize($entityType.Name) @org.apache.olingo.ext.proxy.api.annotations.EntitySet(name = "$property.Name", contained = true) interface $utility.capitalize($property.Name) - extends org.apache.olingo.ext.proxy.api.EntitySetQuery<$javaEntityType, ${javaEntityType}Collection, $utility.capitalize($property.Name)>, AbstractEntitySet<$javaEntityType, $type, ${javaEntityType}Collection> { + extends org.apache.olingo.ext.proxy.api.EntitySet<$javaEntityType, ${javaEntityType}Collection>, + org.apache.olingo.ext.proxy.api.StructuredCollectionQuery<$utility.capitalize($property.Name)>, + AbstractEntitySet<$javaEntityType, $type, ${javaEntityType}Collection> { } #end http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abb47659/ext/pojogen-maven-plugin/src/main/resources/operation.vm ---------------------------------------------------------------------- diff --git a/ext/pojogen-maven-plugin/src/main/resources/operation.vm b/ext/pojogen-maven-plugin/src/main/resources/operation.vm new file mode 100644 index 0000000..3576357 --- /dev/null +++ b/ext/pojogen-maven-plugin/src/main/resources/operation.vm @@ -0,0 +1,112 @@ +#* + * 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. + *# + #if($inherited.size() > 0) + @Override + #end + Operations operations(); + + interface Operations #if($inherited.size() > 0) + extends ${utility.getJavaType($structuredType.getBaseType())}.Operations#end{ + #foreach($operation in $functions) + #if($operation.ReturnType)#* + *##set($defaultType = $utility.getJavaType($operation.ReturnType.Type, $operation.ReturnType.Collection))#* + *##if(!($operation.getReturnType().isCollection() || ${operation.ReturnType.Type.Kind} == "ENTITY" || ${operation.ReturnType.Type.Kind} == "COMPLEX" || $utility.isStreamType($operation.ReturnType.Type)))#* + *##set($returnType = "org.apache.olingo.ext.proxy.api.Invoker<$defaultType>")#* + *##else#* + *##if(${operation.ReturnType.Type.Kind} == "ENTITY" || ${operation.ReturnType.Type.Kind} == "COMPLEX")#* + *##if($operation.getReturnType().isCollection())#* + *##set($returnType = "org.apache.olingo.ext.proxy.api.StructuredCollectionInvoker<$defaultType>")#* + *##{else}#* + *##set($returnType = "org.apache.olingo.ext.proxy.api.StructuredInvoker<$defaultType>")#* + *##end#* + *##{else}#* + *##if($operation.getReturnType().isCollection())#* + *##set($returnType = "org.apache.olingo.ext.proxy.api.PrimitiveCollectionInvoker<$defaultType>")#* + *##{else}#* + *##set($returnType = "org.apache.olingo.ext.proxy.api.Invoker<$defaultType>")#* + *##end#* + *##end#* + *##end#* + *##{else}#* + *##set($returnType = "org.apache.olingo.ext.proxy.api.Invoker")#* + *##end + + @org.apache.olingo.ext.proxy.api.annotations.Operation(name = "$operation.Name", + type = OperationType.FUNCTION, + isComposable = $operation.Composable#if($operation.ReturnType), + #if($operation.ReturnType)referenceType = ${defaultType.replaceAll("<.*>", "")}.class,#end + returnType = "#if( $operation.ReturnType.Collection )Collection(#end$operation.ReturnType.Type.FullQualifiedName.toString()#if( $operation.ReturnType.Collection ))#end"#end) + $returnType $utility.uncapitalize($operation.Name)( + #if($operation.ParameterNames) + #set( $count = $operation.ParameterNames.size() )#* + *##foreach($paramName in $operation.ParameterNames)#* + *##set( $count = $count - 1 )#* + *##set( $param = $operation.getParameter($paramName) )#* + *##if( !$structuredType.FullQualifiedName.equals($param.Type.FullQualifiedName) )#* + *# @Parameter(name = "$param.Name", type = "#if( $param.Collection )Collection(#end$param.Type.FullQualifiedName.toString()#if( $param.Collection ))#end", nullable = $param.Nullable) $utility.getJavaType($param.Type, $param.Collection) $utility.uncapitalize($param.Name)#if( $count > 0 ), #end + + #end + #end#* + *##end); + + #end + + #foreach($operation in $actions) + #if($operation.ReturnType)#* + *##set($defaultType = $utility.getJavaType($operation.ReturnType.Type, $operation.ReturnType.Collection))#* + *##if(!($operation.getReturnType().isCollection() || ${operation.ReturnType.Type.Kind} == "ENTITY" || ${operation.ReturnType.Type.Kind} == "COMPLEX" || $utility.isStreamType($operation.ReturnType.Type)))#* + *##set($returnType = "org.apache.olingo.ext.proxy.api.Invoker<$defaultType>")#* + *##else#* + *##if(${operation.ReturnType.Type.Kind} == "ENTITY" || ${operation.ReturnType.Type.Kind} == "COMPLEX")#* + *##if($operation.getReturnType().isCollection())#* + *##set($returnType = "org.apache.olingo.ext.proxy.api.StructuredCollectionInvoker<$defaultType>")#* + *##{else}#* + *##set($returnType = "org.apache.olingo.ext.proxy.api.StructuredInvoker<$defaultType>")#* + *##end#* + *##{else}#* + *##if($operation.getReturnType().isCollection())#* + *##set($returnType = "org.apache.olingo.ext.proxy.api.PrimitiveCollectionInvoker<$defaultType>")#* + *##{else}#* + *##set($returnType = "org.apache.olingo.ext.proxy.api.Invoker<$defaultType>")#* + *##end#* + *##end#* + *##end#* + *##{else}#* + *##set($returnType = "org.apache.olingo.ext.proxy.api.Invoker")#* + *##end + + @org.apache.olingo.ext.proxy.api.annotations.Operation(name = "$operation.Name", + type = OperationType.ACTION#if($operation.ReturnType), + #if($operation.ReturnType)referenceType = ${defaultType.replaceAll("<.*>", "")}.class,#end + returnType = "#if( $operation.ReturnType.Collection )Collection(#end$operation.ReturnType.Type.FullQualifiedName.toString()#if( $operation.ReturnType.Collection ))#end"#end) + $returnType $utility.uncapitalize($operation.Name)( + #if($operation.ParameterNames) + #set( $count = $operation.ParameterNames.size() )#* + *##foreach($paramName in $operation.ParameterNames)#* + *##set( $count = $count - 1 )#* + *##set( $param = $operation.getParameter($paramName) )#* + *##if( !$structuredType.FullQualifiedName.equals($param.Type.FullQualifiedName) )#* + *# @Parameter(name = "$param.Name", type = "#if( $param.Collection )Collection(#end$param.Type.FullQualifiedName.toString()#if( $param.Collection ))#end", nullable = $param.Nullable) $utility.getJavaType($param.Type, $param.Collection) $utility.uncapitalize($param.Name)#if( $count > 0 ), #end + + #end + #end#* + *##end); + + #end + } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abb47659/ext/pojogen-maven-plugin/src/main/resources/v30/complexType.vm ---------------------------------------------------------------------- diff --git a/ext/pojogen-maven-plugin/src/main/resources/v30/complexType.vm b/ext/pojogen-maven-plugin/src/main/resources/v30/complexType.vm index 6fa23f4..075d79c 100644 --- a/ext/pojogen-maven-plugin/src/main/resources/v30/complexType.vm +++ b/ext/pojogen-maven-plugin/src/main/resources/v30/complexType.vm @@ -19,7 +19,7 @@ @org.apache.olingo.ext.proxy.api.annotations.Namespace("$namespace") @org.apache.olingo.ext.proxy.api.annotations.ComplexType(name = "$complexType.Name") public interface $utility.capitalize($complexType.Name) - extends org.apache.olingo.ext.proxy.api.ComplexType,#if($complexType.getBaseType())$utility.getJavaType($complexType.getBaseType().getFullQualifiedName().toString())#{else}org.apache.olingo.ext.proxy.api.SingleQuery<$utility.capitalize($complexType.Name)>#end { + extends #if($complexType.getBaseType())$utility.getJavaType($complexType.getBaseType().getFullQualifiedName().toString())#{else}org.apache.olingo.ext.proxy.api.ComplexType<$utility.capitalize($complexType.Name)>, org.apache.olingo.ext.proxy.api.StructuredQuery<$utility.capitalize($complexType.Name)>#end { #if( $entityType.getBaseType() ) @Override http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abb47659/ext/pojogen-maven-plugin/src/main/resources/v40/complexType.vm ---------------------------------------------------------------------- diff --git a/ext/pojogen-maven-plugin/src/main/resources/v40/complexType.vm b/ext/pojogen-maven-plugin/src/main/resources/v40/complexType.vm index ce4b0fc..1717564 100644 --- a/ext/pojogen-maven-plugin/src/main/resources/v40/complexType.vm +++ b/ext/pojogen-maven-plugin/src/main/resources/v40/complexType.vm @@ -22,7 +22,7 @@ isAbstract = $complexType.Abstract#if($complexType.getBaseType()), baseType = "$complexType.getBaseType().getFullQualifiedName().toString()"#end) public interface $utility.capitalize($complexType.Name) - extends org.apache.olingo.ext.proxy.api.ComplexType,#if($complexType.getBaseType())$utility.getJavaType($complexType.getBaseType().getFullQualifiedName().toString())#{else}org.apache.olingo.ext.proxy.api.SingleQuery<$utility.capitalize($complexType.Name)>#{end}#if( $complexType.isOpenType() ),AbstractOpenType#{end} { + extends #if($complexType.getBaseType())$utility.getJavaType($complexType.getBaseType().getFullQualifiedName().toString())#{else}org.apache.olingo.ext.proxy.api.ComplexType<$utility.capitalize($complexType.Name)>, org.apache.olingo.ext.proxy.api.StructuredQuery<$utility.capitalize($complexType.Name)>#{end}#if( $complexType.isOpenType() ),AbstractOpenType#{end} { #if( $entityType.getBaseType() ) @Override http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abb47659/fit/src/test/java/org/apache/olingo/fit/proxy/v3/ActionOverloadingTestITCase.java ---------------------------------------------------------------------- diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/ActionOverloadingTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/ActionOverloadingTestITCase.java index aaadccd..5a13532 100644 --- a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/ActionOverloadingTestITCase.java +++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/ActionOverloadingTestITCase.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + package org.apache.olingo.fit.proxy.v3; import static org.junit.Assert.assertEquals; @@ -52,12 +53,12 @@ public class ActionOverloadingTestITCase extends AbstractTestITCase { public void retrieveProduct() { final DefaultContainer aocontainer = getContainer(); - int res = aocontainer.operations().retrieveProduct(); + int res = aocontainer.operations().retrieveProduct().execute(); assertEquals(-10, res); service.getContext().detachAll(); - res = aocontainer.getProduct().getByKey(-10).operations().retrieveProduct(); + res = aocontainer.getProduct().getByKey(-10).operations().retrieveProduct().execute(); assertEquals(-10, res); service.getContext().detachAll(); @@ -66,7 +67,7 @@ public class ActionOverloadingTestITCase extends AbstractTestITCase { key.setOrderId(-10); key.setProductId(-10); - res = aocontainer.getOrderLine().getByKey(key).operations().retrieveProduct(); + res = aocontainer.getOrderLine().getByKey(key).operations().retrieveProduct().execute(); assertEquals(-10, res); } @@ -83,7 +84,7 @@ public class ActionOverloadingTestITCase extends AbstractTestITCase { empl.getPersonId(); int salary = empl.getSalary(); - ecoll.operations().increaseSalaries(5); + ecoll.operations().increaseSalaries(5).execute(); // the invoke above changed the local entities, re-read service.getContext().detachAll(); @@ -101,7 +102,7 @@ public class ActionOverloadingTestITCase extends AbstractTestITCase { sempl.getPersonId(); salary = sempl.getSalary(); - secoll.operations().increaseSalaries(5); + secoll.operations().increaseSalaries(5).execute(); // the invoke above changed the local entities, re-read service.getContext().detachAll(); http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abb47659/fit/src/test/java/org/apache/olingo/fit/proxy/v3/AsyncTestITCase.java ---------------------------------------------------------------------- diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/AsyncTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/AsyncTestITCase.java index 62c2a73..3645bf2 100644 --- a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/AsyncTestITCase.java +++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/AsyncTestITCase.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + package org.apache.olingo.fit.proxy.v3; import static org.junit.Assert.assertEquals; http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abb47659/fit/src/test/java/org/apache/olingo/fit/proxy/v3/EntityRetrieveTestITCase.java ---------------------------------------------------------------------- diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/EntityRetrieveTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/EntityRetrieveTestITCase.java index ecbfca0..3b0e396 100644 --- a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/EntityRetrieveTestITCase.java +++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/EntityRetrieveTestITCase.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + package org.apache.olingo.fit.proxy.v3; //CHECKSTYLE:OFF (Maven checkstyle) http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abb47659/fit/src/test/java/org/apache/olingo/fit/proxy/v3/EntitySetTestITCase.java ---------------------------------------------------------------------- diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/EntitySetTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/EntitySetTestITCase.java index aa3a66c..14b7c1c 100644 --- a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/EntitySetTestITCase.java +++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/EntitySetTestITCase.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + package org.apache.olingo.fit.proxy.v3; import org.apache.olingo.fit.proxy.v3.staticservice.microsoft.test.odata.services.astoriadefaultservice.types.Car; http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abb47659/fit/src/test/java/org/apache/olingo/fit/proxy/v3/FilterTestITCase.java ---------------------------------------------------------------------- diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/FilterTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/FilterTestITCase.java index aea7c0d..dc9d615 100644 --- a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/FilterTestITCase.java +++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/FilterTestITCase.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + package org.apache.olingo.fit.proxy.v3; import org.apache.olingo.ext.proxy.api.Sort; http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abb47659/fit/src/test/java/org/apache/olingo/fit/proxy/v3/InvokeTestITCase.java ---------------------------------------------------------------------- diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/InvokeTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/InvokeTestITCase.java index c278abf..62c3d60 100644 --- a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/InvokeTestITCase.java +++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/InvokeTestITCase.java @@ -56,11 +56,12 @@ public class InvokeTestITCase extends AbstractTestITCase { @Test public void getWithNoParams() { // 1. primitive result - final String string = container.operations().getPrimitiveString(); + final String string = container.operations().getPrimitiveString().execute(); assertEquals("Foo", string); // 2. complex collection result - final ContactDetailsCollection details = container.operations().entityProjectionReturnsCollectionOfComplexTypes(); + final ContactDetailsCollection details = + container.operations().entityProjectionReturnsCollectionOfComplexTypes().execute(); assertFalse(details.isEmpty()); for (ContactDetails detail : details) { assertNotNull(detail); @@ -71,10 +72,10 @@ public class InvokeTestITCase extends AbstractTestITCase { @Test public void getWithParam() { // 1. primitive result - assertEquals(155, container.operations().getArgumentPlusOne(154), 0); + assertEquals(155, container.operations().getArgumentPlusOne(154).execute(), 0); // 2. entity collection result - final CustomerCollection customers = container.operations().getSpecificCustomer(StringUtils.EMPTY); + final CustomerCollection customers = container.operations().getSpecificCustomer(StringUtils.EMPTY).execute(); assertNotNull(customers); assertFalse(customers.isEmpty()); final Set customerIds = new HashSet(customers.size()); @@ -106,7 +107,7 @@ public class InvokeTestITCase extends AbstractTestITCase { try { // 1. invoke action bound to the employee just created - employee.operations().sack(); + employee.operations().sack().execute(); // 2. check that invoked action has effectively run employee = container.getPerson().getByKey(id, Employee.class).load(); @@ -131,7 +132,7 @@ public class InvokeTestITCase extends AbstractTestITCase { } assertFalse(preSalaries.isEmpty()); - employees.operations().increaseSalaries(1); + employees.operations().increaseSalaries(1).execute(); employees = container.getPerson().execute(EmployeeCollection.class); assertFalse(employees.isEmpty()); @@ -172,7 +173,7 @@ public class InvokeTestITCase extends AbstractTestITCase { newDimensions.setHeight(BigDecimal.ONE); newDimensions.setWidth(BigDecimal.ONE); - product.operations().changeProductDimensions(newDimensions); + product.operations().changeProductDimensions(newDimensions).execute(); // 2. check that invoked action has effectively run product = container.getProduct().getByKey(id).load(); @@ -224,7 +225,7 @@ public class InvokeTestITCase extends AbstractTestITCase { // 1. invoke action bound to the computer detail just created computerDetail.operations().resetComputerDetailsSpecifications( - cds, new Timestamp(Calendar.getInstance().getTimeInMillis())); + cds, new Timestamp(Calendar.getInstance().getTimeInMillis())).execute(); // 2. check that invoked action has effectively run computerDetail = container.getComputerDetail().getByKey(id).load(); http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abb47659/fit/src/test/java/org/apache/olingo/fit/proxy/v3/MediaEntityTestITCase.java ---------------------------------------------------------------------- diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/MediaEntityTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/MediaEntityTestITCase.java index d4ded24..d3d74cd 100644 --- a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/MediaEntityTestITCase.java +++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/MediaEntityTestITCase.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + package org.apache.olingo.fit.proxy.v3; import static org.junit.Assert.assertEquals; http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abb47659/fit/src/test/java/org/apache/olingo/fit/proxy/v3/PrimitiveKeysTestITCase.java ---------------------------------------------------------------------- diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/PrimitiveKeysTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/PrimitiveKeysTestITCase.java index 5b227e1..aa5e73a 100644 --- a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/PrimitiveKeysTestITCase.java +++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/PrimitiveKeysTestITCase.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + package org.apache.olingo.fit.proxy.v3; import static org.junit.Assert.assertEquals; http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abb47659/fit/src/test/java/org/apache/olingo/fit/proxy/v3/PropertyTestITCase.java ---------------------------------------------------------------------- diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/PropertyTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/PropertyTestITCase.java index 0041103..9778ba3 100644 --- a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/PropertyTestITCase.java +++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/PropertyTestITCase.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + package org.apache.olingo.fit.proxy.v3; import org.apache.olingo.fit.proxy.v3.staticservice.microsoft.test.odata.services.astoriadefaultservice.types.Driver; http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abb47659/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/Service.java ---------------------------------------------------------------------- diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/Service.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/Service.java index babc2fe..2858233 100644 --- a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/Service.java +++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/Service.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + package org.apache.olingo.fit.proxy.v3.actionoverloading; import java.util.HashMap; http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abb47659/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/AllGeoCollectionTypesSet.java ---------------------------------------------------------------------- diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/AllGeoCollectionTypesSet.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/AllGeoCollectionTypesSet.java index 38c0e13..046b4b9 100644 --- a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/AllGeoCollectionTypesSet.java +++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/AllGeoCollectionTypesSet.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice; //CHECKSTYLE:OFF (Maven checkstyle) @@ -26,5 +27,8 @@ import org.apache.olingo.ext.proxy.api.AbstractEntitySet; @org.apache.olingo.ext.proxy.api.annotations.EntitySet(name = "AllGeoCollectionTypesSet", container = "Microsoft.Test.OData.Services.AstoriaDefaultService.DefaultContainer") public interface AllGeoCollectionTypesSet - extends org.apache.olingo.ext.proxy.api.EntitySetQuery, AbstractEntitySet { + extends org.apache.olingo.ext.proxy.api.EntitySet, + org.apache.olingo.ext.proxy.api.StructuredCollectionQuery, + AbstractEntitySet { + } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abb47659/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/AllGeoTypesSet.java ---------------------------------------------------------------------- diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/AllGeoTypesSet.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/AllGeoTypesSet.java index edb78e3..67fbe0d 100644 --- a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/AllGeoTypesSet.java +++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/AllGeoTypesSet.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice; //CHECKSTYLE:OFF (Maven checkstyle) @@ -26,5 +27,8 @@ import org.apache.olingo.ext.proxy.api.AbstractEntitySet; @org.apache.olingo.ext.proxy.api.annotations.EntitySet(name = "AllGeoTypesSet", container = "Microsoft.Test.OData.Services.AstoriaDefaultService.DefaultContainer") public interface AllGeoTypesSet - extends org.apache.olingo.ext.proxy.api.EntitySetQuery, AbstractEntitySet { + extends org.apache.olingo.ext.proxy.api.EntitySet, + org.apache.olingo.ext.proxy.api.StructuredCollectionQuery, + AbstractEntitySet { + } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abb47659/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Car.java ---------------------------------------------------------------------- diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Car.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Car.java index aa100bb..86efac2 100644 --- a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Car.java +++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Car.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice; //CHECKSTYLE:OFF (Maven checkstyle) @@ -26,5 +27,8 @@ import org.apache.olingo.ext.proxy.api.AbstractEntitySet; @org.apache.olingo.ext.proxy.api.annotations.EntitySet(name = "Car", container = "Microsoft.Test.OData.Services.AstoriaDefaultService.DefaultContainer") public interface Car - extends org.apache.olingo.ext.proxy.api.EntitySetQuery, AbstractEntitySet { + extends org.apache.olingo.ext.proxy.api.EntitySet, + org.apache.olingo.ext.proxy.api.StructuredCollectionQuery, + AbstractEntitySet { + }