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 2138C11733 for ; Mon, 19 May 2014 10:36:38 +0000 (UTC) Received: (qmail 11207 invoked by uid 500); 19 May 2014 10:34:01 -0000 Delivered-To: apmail-olingo-commits-archive@olingo.apache.org Received: (qmail 11194 invoked by uid 500); 19 May 2014 10:34:01 -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 10920 invoked by uid 99); 19 May 2014 10:34:01 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 19 May 2014 10:34:01 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id 013FD986D01; Mon, 19 May 2014 10:34:00 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: sklevenz@apache.org To: commits@olingo.apache.org Date: Mon, 19 May 2014 10:34:35 -0000 Message-Id: <91ea838ccf8b4f48a5ddcf1b9630dca7@git.apache.org> In-Reply-To: References: X-Mailer: ASF-Git Admin Mailer Subject: [37/45] git commit: [OLINGO-260] Filter/orderby and search tests [OLINGO-260] Filter/orderby and search tests Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/9708c4ac Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/9708c4ac Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/9708c4ac Branch: refs/heads/olingo-266-ref Commit: 9708c4ac6eb519c58b41fc27eb941925747e28bb Parents: f6eb1b7 Author: Francesco Chicchiriccò <--global> Authored: Thu May 15 15:56:28 2014 +0200 Committer: Stephan Klevenz Committed: Mon May 19 12:33:30 2014 +0200 ---------------------------------------------------------------------- .../ext/proxy/EntityContainerFactory.java | 33 ++-- .../olingo/ext/proxy/api/AbstractEntitySet.java | 36 +++- .../org/apache/olingo/ext/proxy/api/Filter.java | 131 ++++++++++++++ .../olingo/ext/proxy/api/NoResultException.java | 6 +- .../ext/proxy/api/NonUniqueResultException.java | 6 +- .../org/apache/olingo/ext/proxy/api/Query.java | 128 -------------- .../org/apache/olingo/ext/proxy/api/Search.java | 64 +++++++ .../commons/EntitySetInvocationHandler.java | 40 ++++- .../olingo/ext/proxy/commons/FilterImpl.java | 172 ++++++++++++++++++ .../olingo/ext/proxy/commons/QueryImpl.java | 173 ------------------- .../olingo/ext/proxy/commons/SearchImpl.java | 89 ++++++++++ .../java/org/apache/olingo/fit/V3Services.java | 16 ++ .../java/org/apache/olingo/fit/V4Services.java | 28 ++- .../V30/Car/filter/(VIN eq 16).full.json | 15 ++ .../resources/V30/Car/filter/(VIN eq 16).xml | 45 +++++ .../olingo/fit/proxy/v3/AbstractTestITCase.java | 18 +- .../proxy/v3/ActionOverloadingTestITCase.java | 6 +- .../olingo/fit/proxy/v3/AsyncTestITCase.java | 25 +-- .../proxy/v3/AuthEntityRetrieveTestITCase.java | 2 +- .../olingo/fit/proxy/v3/FilterTestITCase.java | 113 ++++++++++++ .../olingo/fit/proxy/v3/OpenTypeTestITCase.java | 11 +- .../fit/proxy/v3/PrimitiveKeysTestITCase.java | 7 +- .../olingo/fit/proxy/v4/AbstractTestITCase.java | 5 +- .../olingo/fit/proxy/v4/AsyncTestITCase.java | 6 +- .../proxy/v4/AuthEntityRetrieveTestITCase.java | 27 ++- .../fit/proxy/v4/EntityRetrieveTestITCase.java | 25 +-- .../olingo/fit/proxy/v4/FilterTestITCase.java | 82 +++++++++ .../fit/proxy/v4/KeyAsSegmentTestITCase.java | 8 +- .../olingo/fit/proxy/v4/OpenTypeTestITCase.java | 20 +-- .../apache/olingo/fit/v3/AsyncTestITCase.java | 3 - 30 files changed, 922 insertions(+), 418 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9708c4ac/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/EntityContainerFactory.java ---------------------------------------------------------------------- diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/EntityContainerFactory.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/EntityContainerFactory.java index 3e8606e..c378a7a 100644 --- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/EntityContainerFactory.java +++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/EntityContainerFactory.java @@ -22,7 +22,6 @@ import java.lang.reflect.Proxy; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import org.apache.commons.lang3.StringUtils; -import org.apache.olingo.client.api.CommonConfiguration; import org.apache.olingo.client.api.CommonEdmEnabledODataClient; import org.apache.olingo.client.core.ODataClientFactory; import org.apache.olingo.commons.api.format.ODataPubFormat; @@ -30,16 +29,18 @@ import org.apache.olingo.ext.proxy.commons.EntityContainerInvocationHandler; import org.apache.olingo.ext.proxy.context.Context; /** - * Entry point for ODataJClient proxy mode, gives access to entity container instances. + * Entry point for proxy mode, gives access to entity container instances. + * + * @param actual client class */ -public final class EntityContainerFactory { +public final class EntityContainerFactory> { private static final Object MONITOR = new Object(); private static Context context = null; - private static final Map FACTORY_PER_SERVICEROOT = - new ConcurrentHashMap(); + private static final Map> FACTORY_PER_SERVICEROOT = + new ConcurrentHashMap>(); private static final Map, Object> ENTITY_CONTAINERS = new ConcurrentHashMap, Object>(); @@ -57,23 +58,28 @@ public final class EntityContainerFactory { return context; } - private static > EntityContainerFactory getInstance( + @SuppressWarnings("unchecked") + private static > EntityContainerFactory getInstance( final C client, final String serviceRoot) { if (!FACTORY_PER_SERVICEROOT.containsKey(serviceRoot)) { - final EntityContainerFactory instance = new EntityContainerFactory(client, serviceRoot); + final EntityContainerFactory instance = new EntityContainerFactory(client, serviceRoot); FACTORY_PER_SERVICEROOT.put(serviceRoot, instance); } client.getConfiguration().setDefaultPubFormat(ODataPubFormat.JSON_FULL_METADATA); - - return FACTORY_PER_SERVICEROOT.get(serviceRoot); + + return (EntityContainerFactory) FACTORY_PER_SERVICEROOT.get(serviceRoot); } - public static EntityContainerFactory getV3(final String serviceRoot) { + public static EntityContainerFactory getV3( + final String serviceRoot) { + return getInstance(ODataClientFactory.getEdmEnabledV3(serviceRoot), serviceRoot); } - public static EntityContainerFactory getV4(final String serviceRoot) { + public static EntityContainerFactory getV4( + final String serviceRoot) { + return getInstance(ODataClientFactory.getEdmEnabledV4(serviceRoot), serviceRoot); } @@ -82,8 +88,9 @@ public final class EntityContainerFactory { this.serviceRoot = serviceRoot; } - public CommonConfiguration getConfiguration() { - return client.getConfiguration(); + @SuppressWarnings("unchecked") + public C getClient() { + return (C) client; } public String getServiceRoot() { http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9708c4ac/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/AbstractEntitySet.java ---------------------------------------------------------------------- diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/AbstractEntitySet.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/AbstractEntitySet.java index 6f22164..71a7392 100644 --- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/AbstractEntitySet.java +++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/AbstractEntitySet.java @@ -48,6 +48,7 @@ public interface AbstractEntitySet< /** * Retrieves an entity by its key, considering polymorphism. * + * @param * @param key must not be null * @param reference entity class to be returned * @return the entity with the given id or null if none found @@ -72,6 +73,8 @@ public interface AbstractEntitySet< /** * Returns all instances of the given subtype. * + * @param + * @param * @param reference entity collection class to be returned * @return all entities of the given subtype */ @@ -88,21 +91,42 @@ public interface AbstractEntitySet< /** * Deletes the given entities in a batch. * + * @param * @param entities to be deleted */ void delete(Iterable entities); /** - * Create an instance of Query. + * Create an instance of Filter. * - * @return the new query instance + * @return the new filter instance */ - Query createQuery(); + Filter createFilter(); /** - * Create an instance of Query. + * Create an instance of Filter. * - * @return the new query instance + * @param + * @param + * @param reference + * @return the new filter instance */ - > Query createQuery(Class reference); + > Filter createFilter(Class reference); + + /** + * Create an instance of Search. + * + * @return the new search instance + */ + Search createSearch(); + + /** + * Create an instance of Search. + * + * @param + * @param + * @param reference + * @return the new search instance + */ + > Search createSearch(Class reference); } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9708c4ac/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/Filter.java ---------------------------------------------------------------------- diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/Filter.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/Filter.java new file mode 100644 index 0000000..11b3e83 --- /dev/null +++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/Filter.java @@ -0,0 +1,131 @@ +/* + * 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.api; + +import java.io.Serializable; +import org.apache.olingo.client.api.uri.URIFilter; + +/** + * Interface used to control filter execution. + * + * @param filter result type + * @param + */ +public interface Filter> extends Serializable { + + /** + * Sets the $filter expression for this filter. + *
+ * Any of available operators and functions can be embodied here. + * + * @param filter the $filter expression for this filter + * @return the same filter instance + */ + Filter setFilter(String filter); + + /** + * Sets the filter generating the $filter expression for this filter. + * + * @param filter filter instance (to be obtained via factory): note that build() method + * will be immediately invoked. + * @return the same filter instance + */ + Filter setFilter(URIFilter filter); + + /** + * The $filter expression for this filter. + * + * @return the $filter expression for this filter + */ + String getFilter(); + + /** + * Sets the $orderBy expression for this filter via sort options. + * + * @param sort sort options + * @return the same filter instance + */ + Filter setOrderBy(Sort... sort); + + /** + * Sets the $orderBy expression for this filter. + * + * @param orderBy the $orderBy expression for this filter + * @return the same filter instance + */ + Filter setOrderBy(String orderBy); + + /** + * The $orderBy expression for this filter. + * + * @return the $orderBy expression for this filter + */ + String getOrderBy(); + + /** + * Sets the maximum number of results to retrieve ($top). + * + * @param maxResults maximum number of results to retrieve + * @return the same filter instance + * @throws IllegalArgumentException if the argument is negative + */ + Filter setMaxResults(int maxResults) throws IllegalArgumentException; + + /** + * The maximum number of results the filter object was set to retrieve ($top). Returns + * Integer.MAX_VALUE if setMaxResults was not applied to the filter object. + * + * @return maximum number of results + */ + int getMaxResults(); + + /** + * Sets the position of the first result to retrieve ($skip). + * + * @param firstResult position of the first result, numbered from 0 + * @return the same filter instance + * @throws IllegalArgumentException if the argument is negative + */ + Filter setFirstResult(int firstResult) throws IllegalArgumentException; + + /** + * The position of the first result the filter object was set to retrieve ($skip). + * + * Returns 0 if setFirstResult was not applied to the filter object. + * + * @return position of the first result + */ + int getFirstResult(); + + /** + * Executes a $filter filter that returns a single result. + * + * @return the result + * @throws NoResultException if there is no result + * @throws NonUniqueResultException if more than one result + */ + T getSingleResult() throws NoResultException, NonUniqueResultException; + + /** + * Executes a $filter filter and return the filter results as collection. + * + * @return an iterable view of the results + */ + EC getResult(); +} http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9708c4ac/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/NoResultException.java ---------------------------------------------------------------------- diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/NoResultException.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/NoResultException.java index da76bf0..617b305 100644 --- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/NoResultException.java +++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/NoResultException.java @@ -19,11 +19,7 @@ package org.apache.olingo.ext.proxy.api; /** - * Thrown when Query.getSingleResult() or EntityQuery.getSingleResult() is executed on a query and - * there is no result to return. - * - * @see Query#getSingleResult() - * @see EntityQuery#getSingleResult() + * Thrown when {@link Filter#getSingleResult()} is executed and there is no result to return. */ public class NoResultException extends RuntimeException { http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9708c4ac/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/NonUniqueResultException.java ---------------------------------------------------------------------- diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/NonUniqueResultException.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/NonUniqueResultException.java index bb5737f..37658c6 100644 --- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/NonUniqueResultException.java +++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/NonUniqueResultException.java @@ -19,11 +19,7 @@ package org.apache.olingo.ext.proxy.api; /** - * Thrown when Query.getSingleResult() or EntityQuery.getSingleResult() is executed on a query and - * there is more than one result from the query. - * - * @see Query#getSingleResult() - * @see EntityQuery#getSingleResult() + * Thrown when {@link Filter#getSingleResult()} is executed and there is more than one result. */ public class NonUniqueResultException extends RuntimeException { http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9708c4ac/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/Query.java ---------------------------------------------------------------------- diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/Query.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/Query.java deleted file mode 100644 index ec7b944..0000000 --- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/Query.java +++ /dev/null @@ -1,128 +0,0 @@ -/* - * 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.api; - -import java.io.Serializable; -import org.apache.olingo.client.api.uri.URIFilter; - -/** - * Interface used to control query execution. - * - * @param query result type - */ -public interface Query> extends Serializable { - - /** - * Sets the $filter expression for this query. Any of available operators and functions can be embodied here. - * - * @param filter the $filter expression for this query - * @return the same query instance - */ - Query setFilter(String filter); - - /** - * Sets the filter generating the $filter expression for this query. - * - * @param filter filter instance (to be obtained via ODataFilterFactory): note that build() method - * will be immediately invoked. - * @return the same query instance - */ - Query setFilter(URIFilter filter); - - /** - * The $filter expression for this query. - * - * @return the $filter expression for this query - */ - String getFilter(); - - /** - * Sets the $orderBy expression for this query via sort options. - * - * @param sort sort options - * @return the same query instance - */ - Query setOrderBy(Sort... sort); - - /** - * Sets the $orderBy expression for this query. - * - * @param select the $orderBy expression for this query - * @return the same query instance - */ - Query setOrderBy(String orderBy); - - /** - * The $orderBy expression for this query. - * - * @return the $orderBy expression for this query - */ - String getOrderBy(); - - /** - * Sets the maximum number of results to retrieve ($top). - * - * @param maxResults maximum number of results to retrieve - * @return the same query instance - * @throws IllegalArgumentException if the argument is negative - */ - Query setMaxResults(int maxResults) throws IllegalArgumentException; - - /** - * The maximum number of results the query object was set to retrieve ($top). Returns - * Integer.MAX_VALUE if setMaxResults was not applied to the query object. - * - * @return maximum number of results - */ - int getMaxResults(); - - /** - * Sets the position of the first result to retrieve ($skip). - * - * @param firstResult position of the first result, numbered from 0 - * @return the same query instance - * @throws IllegalArgumentException if the argument is negative - */ - Query setFirstResult(int firstResult) throws IllegalArgumentException; - - /** - * The position of the first result the query object was set to retrieve ($skip). - * - * Returns 0 if setFirstResult was not applied to the query object. - * - * @return position of the first result - */ - int getFirstResult(); - - /** - * Executes a $filter query that returns a single result. - * - * @return the result - * @throws NoResultException if there is no result - * @throws NonUniqueResultException if more than one result - */ - T getSingleResult() throws NoResultException, NonUniqueResultException; - - /** - * Executes a $filter query and return the query results as collection. - * - * @return an iterable view of the results - */ - EC getResult(); -} http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9708c4ac/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/Search.java ---------------------------------------------------------------------- diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/Search.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/Search.java new file mode 100644 index 0000000..a4efc22 --- /dev/null +++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/Search.java @@ -0,0 +1,64 @@ +/* + * 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.api; + +import java.io.Serializable; +import org.apache.olingo.client.api.uri.v4.URISearch; + +/** + * Interface used to control search execution. + * + * @param search result type + * @param + */ +public interface Search> extends Serializable { + + /** + * Sets the $search expression for this search. + *
+ * Any of available operators and functions can be embodied here. + * + * @param search the $search expression for this search + * @return the same search instance + */ + Search setSearch(String search); + + /** + * Sets the search generating the $search expression for this search. + * + * @param search search instance (to be obtained via ODataSearchFactory): note that build() method + * will be immediately invoked. + * @return the same search instance + */ + Search setSearch(URISearch search); + + /** + * The $search expression for this search. + * + * @return the $search expression for this search + */ + String getSearch(); + + /** + * Executes a $search search and return the search results as collection. + * + * @return an iterable view of the results + */ + EC getResult(); +} http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9708c4ac/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 bee8d12..dcd7812 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 @@ -36,16 +36,20 @@ import org.apache.commons.lang3.ArrayUtils; import org.apache.olingo.client.api.communication.request.retrieve.ODataValueRequest; import org.apache.olingo.client.api.communication.response.ODataRetrieveResponse; import org.apache.olingo.client.api.uri.CommonURIBuilder; +import org.apache.olingo.client.api.v3.UnsupportedInV3Exception; +import org.apache.olingo.client.api.v4.EdmEnabledODataClient; import org.apache.olingo.client.api.v4.ODataClient; import org.apache.olingo.commons.api.domain.CommonODataEntity; import org.apache.olingo.commons.api.domain.CommonODataEntitySet; import org.apache.olingo.commons.api.edm.FullQualifiedName; +import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion; import org.apache.olingo.commons.api.format.ODataValueFormat; import org.apache.olingo.ext.proxy.EntityContainerFactory; import org.apache.olingo.ext.proxy.api.AbstractEntityCollection; import org.apache.olingo.ext.proxy.api.AbstractEntitySet; import org.apache.olingo.ext.proxy.api.AbstractSingleton; -import org.apache.olingo.ext.proxy.api.Query; +import org.apache.olingo.ext.proxy.api.Filter; +import org.apache.olingo.ext.proxy.api.Search; import org.apache.olingo.ext.proxy.api.annotations.CompoundKey; import org.apache.olingo.ext.proxy.api.annotations.CompoundKeyElement; import org.apache.olingo.ext.proxy.api.annotations.EntitySet; @@ -93,7 +97,7 @@ class EntitySetInvocationHandler< final String entitySetName) { super(containerHandler.getClient(), containerHandler); - + this.entitySetName = entitySetName; this.isSingleton = AbstractSingleton.class.isAssignableFrom(ref); @@ -245,7 +249,7 @@ class EntitySetInvocationHandler< uriBuilder.appendKeySegment(getCompoundKey(key)); } - LOG.debug("Execute query '{}'", uriBuilder.toString()); + LOG.debug("GET {}", uriBuilder.toString()); final ODataRetrieveResponse res = client.getRetrieveRequestFactory().getEntityRequest(uriBuilder.build()).execute(); @@ -355,15 +359,37 @@ class EntitySetInvocationHandler< } @Override - public Query createQuery() { - return new QueryImpl(this.client, this.collTypeRef, this.uri, this); + public Filter createFilter() { + return new FilterImpl(this.client, this.collTypeRef, this.uri, this); } @Override - public > Query createQuery( + @SuppressWarnings("unchecked") + public > Filter createFilter( final Class reference) { - return new QueryImpl(this.client, reference, this.uri, this); + return new FilterImpl( + this.client, reference, this.uri, (EntitySetInvocationHandler) this); + } + + @Override + public Search createSearch() { + if (client.getServiceVersion().compareTo(ODataServiceVersion.V30) <= 0) { + throw new UnsupportedInV3Exception(); + } + return new SearchImpl((EdmEnabledODataClient) this.client, this.collTypeRef, this.uri, this); + } + + @Override + @SuppressWarnings("unchecked") + public > Search createSearch( + final Class reference) { + + if (client.getServiceVersion().compareTo(ODataServiceVersion.V30) <= 0) { + throw new UnsupportedInV3Exception(); + } + return new SearchImpl( + (EdmEnabledODataClient) this.client, reference, this.uri, (EntitySetInvocationHandler) this); } @Override http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9708c4ac/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/FilterImpl.java ---------------------------------------------------------------------- diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/FilterImpl.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/FilterImpl.java new file mode 100644 index 0000000..4299dde --- /dev/null +++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/FilterImpl.java @@ -0,0 +1,172 @@ +/* + * 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.io.Serializable; +import java.net.URI; +import org.apache.commons.lang3.StringUtils; +import org.apache.olingo.client.api.CommonODataClient; +import org.apache.olingo.client.api.uri.CommonURIBuilder; +import org.apache.olingo.client.api.uri.URIFilter; +import org.apache.olingo.commons.api.edm.FullQualifiedName; +import org.apache.olingo.ext.proxy.api.AbstractEntityCollection; +import org.apache.olingo.ext.proxy.api.NoResultException; +import org.apache.olingo.ext.proxy.api.NonUniqueResultException; +import org.apache.olingo.ext.proxy.api.Filter; +import org.apache.olingo.ext.proxy.api.Sort; +import org.apache.olingo.ext.proxy.utils.ClassUtils; + +public class FilterImpl> implements Filter { + + private static final long serialVersionUID = -300830736753191114L; + + private final CommonODataClient client; + + private final Class typeRef; + + private final Class collTypeRef; + + private final EntitySetInvocationHandler handler; + + private final URI baseURI; + + private String filter; + + private String orderBy; + + private Integer maxResults; + + private Integer firstResult; + + @SuppressWarnings("unchecked") + FilterImpl(final CommonODataClient client, + final Class collTypeRef, final URI baseURI, final EntitySetInvocationHandler handler) { + + this.client = client; + this.typeRef = (Class) ClassUtils.extractTypeArg(collTypeRef); + this.collTypeRef = collTypeRef; + this.baseURI = baseURI; + this.handler = handler; + } + + @Override + public Filter setFilter(final String filter) { + this.filter = filter; + return this; + } + + @Override + public Filter setFilter(final URIFilter filter) { + this.filter = filter.build(); + return this; + } + + @Override + public String getFilter() { + return filter; + } + + @Override + public Filter setOrderBy(final Sort... sort) { + final StringBuilder builder = new StringBuilder(); + for (Sort sortClause : sort) { + builder.append(sortClause.getKey()).append(' ').append(sortClause.getValue()).append(','); + } + builder.deleteCharAt(builder.length() - 1); + + this.orderBy = builder.toString(); + return this; + } + + @Override + public Filter setOrderBy(final String orderBy) { + this.orderBy = orderBy; + return this; + } + + @Override + public String getOrderBy() { + return orderBy; + } + + @Override + public Filter setMaxResults(final int maxResults) throws IllegalArgumentException { + if (maxResults <= 0) { + throw new IllegalArgumentException("maxResults must be positive"); + } + + this.maxResults = maxResults; + return this; + } + + @Override + public int getMaxResults() { + return maxResults; + } + + @Override + public Filter setFirstResult(final int firstResult) throws IllegalArgumentException { + if (firstResult <= 0) { + throw new IllegalArgumentException("firstResult must be positive"); + } + + this.firstResult = firstResult; + return this; + } + + @Override + public int getFirstResult() { + return firstResult; + } + + @Override + public T getSingleResult() throws NoResultException, NonUniqueResultException { + final EC result = getResult(); + if (result.isEmpty()) { + throw new NoResultException(); + } + if (result.size() > 1) { + throw new NonUniqueResultException(); + } + + return result.iterator().next(); + } + + @Override + public EC getResult() { + final CommonURIBuilder uriBuilder = client.getURIBuilder(this.baseURI.toASCIIString()). + appendDerivedEntityTypeSegment(new FullQualifiedName( + ClassUtils.getNamespace(typeRef), ClassUtils.getEntityTypeName(typeRef)).toString()); + + if (StringUtils.isNotBlank(filter)) { + uriBuilder.filter(filter); + } + if (StringUtils.isNotBlank(orderBy)) { + uriBuilder.orderBy(orderBy); + } + if (maxResults != null) { + uriBuilder.top(maxResults); + } + if (firstResult != null) { + uriBuilder.skip(firstResult); + } + + return handler.fetchWholeEntitySet(uriBuilder.build(), typeRef, collTypeRef); + } +} http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9708c4ac/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/QueryImpl.java ---------------------------------------------------------------------- diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/QueryImpl.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/QueryImpl.java deleted file mode 100644 index 00c3f73..0000000 --- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/QueryImpl.java +++ /dev/null @@ -1,173 +0,0 @@ -/* - * 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.io.Serializable; -import java.net.URI; -import org.apache.commons.lang3.StringUtils; -import org.apache.olingo.client.api.CommonODataClient; -import org.apache.olingo.client.api.uri.CommonURIBuilder; -import org.apache.olingo.client.api.uri.URIFilter; -import org.apache.olingo.commons.api.edm.FullQualifiedName; -import org.apache.olingo.ext.proxy.api.AbstractEntityCollection; -import org.apache.olingo.ext.proxy.api.NoResultException; -import org.apache.olingo.ext.proxy.api.NonUniqueResultException; -import org.apache.olingo.ext.proxy.api.Query; -import org.apache.olingo.ext.proxy.api.Sort; -import org.apache.olingo.ext.proxy.utils.ClassUtils; - -public class QueryImpl> implements Query { - - private static final long serialVersionUID = -300830736753191114L; - - private final CommonODataClient client; - - private final Class typeRef; - - private final Class collTypeRef; - - private final EntitySetInvocationHandler handler; - - private final URI baseURI; - - private String filter; - - private String orderBy; - - private Integer maxResults; - - private Integer firstResult; - - @SuppressWarnings("unchecked") - QueryImpl(final CommonODataClient client, - final Class collTypeRef, final URI baseURI, final EntitySetInvocationHandler handler) { - - this.client = client; - this.typeRef = (Class) ClassUtils.extractTypeArg(collTypeRef); - this.collTypeRef = collTypeRef; - this.baseURI = baseURI; - this.handler = handler; - } - - @Override - public Query setFilter(final String filter) { - this.filter = filter; - return this; - } - - @Override - public Query setFilter(final URIFilter filter) { - this.filter = filter.build(); - return this; - } - - @Override - public String getFilter() { - return filter; - } - - @Override - public Query setOrderBy(final Sort... sort) { - final StringBuilder builder = new StringBuilder(); - for (Sort sortClause : sort) { - builder.append(sortClause.getKey()).append(' ').append(sortClause.getValue()).append(','); - } - builder.deleteCharAt(builder.length() - 1); - - this.orderBy = builder.toString(); - return this; - } - - @Override - public Query setOrderBy(final String orderBy) { - this.orderBy = orderBy; - return this; - } - - @Override - public String getOrderBy() { - return orderBy; - } - - @Override - public Query setMaxResults(final int maxResults) throws IllegalArgumentException { - if (maxResults <= 0) { - throw new IllegalArgumentException("maxResults must be positive"); - } - - this.maxResults = maxResults; - return this; - } - - @Override - public int getMaxResults() { - return maxResults; - } - - @Override - public Query setFirstResult(final int firstResult) throws IllegalArgumentException { - if (firstResult <= 0) { - throw new IllegalArgumentException("firstResult must be positive"); - } - - this.firstResult = firstResult; - return this; - } - - @Override - public int getFirstResult() { - return firstResult; - } - - @Override - public T getSingleResult() throws NoResultException, NonUniqueResultException { - final EC result = getResult(); - if (result.isEmpty()) { - throw new NoResultException(); - } - if (result.size() > 1) { - throw new NonUniqueResultException(); - } - - return result.iterator().next(); - } - - @Override - @SuppressWarnings("unchecked") - public EC getResult() { - final CommonURIBuilder uriBuilder = client.getURIBuilder(this.baseURI.toASCIIString()). - appendNavigationSegment(new FullQualifiedName( - ClassUtils.getNamespace(typeRef), ClassUtils.getEntityTypeName(typeRef)).toString()); - - if (StringUtils.isNotBlank(filter)) { - uriBuilder.filter(filter); - } - if (StringUtils.isNotBlank(orderBy)) { - uriBuilder.orderBy(orderBy); - } - if (maxResults != null) { - uriBuilder.top(maxResults); - } - if (firstResult != null) { - uriBuilder.skip(firstResult); - } - - return (EC) handler.fetchWholeEntitySet(uriBuilder.build(), typeRef, collTypeRef); - } -} http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9708c4ac/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 new file mode 100644 index 0000000..73a0585 --- /dev/null +++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/SearchImpl.java @@ -0,0 +1,89 @@ +/* + * 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.io.Serializable; +import java.net.URI; +import org.apache.commons.lang3.StringUtils; +import org.apache.olingo.client.api.uri.v4.URIBuilder; +import org.apache.olingo.client.api.uri.v4.URISearch; +import org.apache.olingo.client.api.v4.EdmEnabledODataClient; +import org.apache.olingo.commons.api.edm.FullQualifiedName; +import org.apache.olingo.ext.proxy.api.AbstractEntityCollection; +import org.apache.olingo.ext.proxy.api.Search; +import org.apache.olingo.ext.proxy.utils.ClassUtils; + +public class SearchImpl> implements Search { + + private static final long serialVersionUID = 4383858176507769973L; + + private final EdmEnabledODataClient client; + + private final Class typeRef; + + private final Class collTypeRef; + + private final EntitySetInvocationHandler handler; + + private final URI baseURI; + + private String search; + + @SuppressWarnings("unchecked") + SearchImpl(EdmEnabledODataClient client, + final Class collTypeRef, final URI baseURI, final EntitySetInvocationHandler handler) { + + this.client = client; + this.typeRef = (Class) ClassUtils.extractTypeArg(collTypeRef); + this.collTypeRef = collTypeRef; + this.baseURI = baseURI; + this.handler = handler; + } + + @Override + public Search setSearch(final String search) { + this.search = search; + return this; + } + + @Override + public Search setSearch(final URISearch search) { + this.search = search.build(); + return this; + } + + @Override + public String getSearch() { + return search; + } + + @Override + public EC getResult() { + final URIBuilder uriBuilder = client.getURIBuilder(this.baseURI.toASCIIString()). + appendDerivedEntityTypeSegment(new FullQualifiedName( + ClassUtils.getNamespace(typeRef), ClassUtils.getEntityTypeName(typeRef)).toString()); + + if (StringUtils.isNotBlank(search)) { + uriBuilder.search(search); + } + + return handler.fetchWholeEntitySet(uriBuilder.build(), typeRef, collTypeRef); + } + +} http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9708c4ac/fit/src/main/java/org/apache/olingo/fit/V3Services.java ---------------------------------------------------------------------- diff --git a/fit/src/main/java/org/apache/olingo/fit/V3Services.java b/fit/src/main/java/org/apache/olingo/fit/V3Services.java index 45642c3..410fcad 100644 --- a/fit/src/main/java/org/apache/olingo/fit/V3Services.java +++ b/fit/src/main/java/org/apache/olingo/fit/V3Services.java @@ -211,6 +211,22 @@ public class V3Services extends AbstractServices { } @GET + @Path("/Car/{type:.*}") + public Response filterCar( + @Context UriInfo uriInfo, + @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) String accept, + @QueryParam("$top") @DefaultValue(StringUtils.EMPTY) String top, + @QueryParam("$skip") @DefaultValue(StringUtils.EMPTY) String skip, + @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) String format, + @QueryParam("$inlinecount") @DefaultValue(StringUtils.EMPTY) String count, + @QueryParam("$filter") @DefaultValue(StringUtils.EMPTY) String filter, + @QueryParam("$orderby") @DefaultValue(StringUtils.EMPTY) String orderby, + @QueryParam("$skiptoken") @DefaultValue(StringUtils.EMPTY) String skiptoken) { + + return super.getEntitySet(uriInfo, accept, "Car", top, skip, format, count, filter, orderby, skiptoken); + } + + @GET @Path("/Login({entityId})") public Response getLogin( @Context UriInfo uriInfo, http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9708c4ac/fit/src/main/java/org/apache/olingo/fit/V4Services.java ---------------------------------------------------------------------- diff --git a/fit/src/main/java/org/apache/olingo/fit/V4Services.java b/fit/src/main/java/org/apache/olingo/fit/V4Services.java index 2d774d5..52d8cb6 100644 --- a/fit/src/main/java/org/apache/olingo/fit/V4Services.java +++ b/fit/src/main/java/org/apache/olingo/fit/V4Services.java @@ -54,6 +54,7 @@ import javax.ws.rs.core.UriInfo; import org.apache.commons.codec.binary.Base64; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.math.NumberUtils; import org.apache.cxf.interceptor.InInterceptors; import org.apache.cxf.jaxrs.ext.multipart.Attachment; import org.apache.cxf.jaxrs.ext.multipart.Multipart; @@ -102,7 +103,7 @@ public class V4Services extends AbstractServices { protected static final Pattern CROSSJOIN_PATTERN = Pattern.compile( "^\\$crossjoin\\(.*\\)\\?\\$filter=\\([a-zA-Z/]+ eq [a-zA-Z/]+\\)$"); - private Map providedAsync = new HashMap(); + private final Map providedAsync = new HashMap(); public V4Services() throws Exception { super(ODataServiceVersion.V40, Commons.getMetadata(ODataServiceVersion.V40)); @@ -346,6 +347,29 @@ public class V4Services extends AbstractServices { } @GET + @Path("/People/{type:.*}") + public Response getPeople( + @Context UriInfo uriInfo, + @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) String accept, + @PathParam("type") final String type, + @QueryParam("$top") @DefaultValue(StringUtils.EMPTY) String top, + @QueryParam("$skip") @DefaultValue(StringUtils.EMPTY) String skip, + @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) String format, + @QueryParam("$inlinecount") @DefaultValue(StringUtils.EMPTY) String count, + @QueryParam("$filter") @DefaultValue(StringUtils.EMPTY) String filter, + @QueryParam("$search") @DefaultValue(StringUtils.EMPTY) String search, + @QueryParam("$orderby") @DefaultValue(StringUtils.EMPTY) String orderby, + @QueryParam("$skiptoken") @DefaultValue(StringUtils.EMPTY) String skiptoken) { + + return StringUtils.isBlank(filter) && StringUtils.isBlank(search) + ? NumberUtils.isNumber(type) + ? super.getEntityInternal( + uriInfo.getRequestUri().toASCIIString(), accept, "People", type, format, null, null, true) + : super.getEntitySet(accept, "People", type) + : super.getEntitySet(uriInfo, accept, "People", top, skip, format, count, filter, orderby, skiptoken); + } + + @GET @Path("/Boss") public Response getSingletonBoss( @Context UriInfo uriInfo, @@ -1239,7 +1263,7 @@ public class V4Services extends AbstractServices { acceptType = Accept.parse(accept, version); } - final Accept contentTypeValue = Accept.parse(contentType, version); + final Accept contentTypeValue = Accept.parse(contentType, version); final AtomEntityImpl entity = xml.readEntity(contentTypeValue, IOUtils.toInputStream(param, Constants.ENCODING)); assert "Microsoft.Test.OData.Services.ODataWCFService.Address".equals(entity.getType()); http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9708c4ac/fit/src/main/resources/V30/Car/filter/(VIN eq 16).full.json ---------------------------------------------------------------------- diff --git a/fit/src/main/resources/V30/Car/filter/(VIN eq 16).full.json b/fit/src/main/resources/V30/Car/filter/(VIN eq 16).full.json new file mode 100644 index 0000000..6c1637c --- /dev/null +++ b/fit/src/main/resources/V30/Car/filter/(VIN eq 16).full.json @@ -0,0 +1,15 @@ +{ + "odata.metadata": "http://localhost:${cargo.servlet.port}/stub/StaticService/V30/Static.svc/$metadata#Car", + "value": [{ + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Car", + "odata.id": "http://localhost:${cargo.servlet.port}/stub/StaticService/V30/Static.svc/Car(16)", + "odata.editLink": "Car(16)", + "odata.mediaEditLink": "Car(16)/$value", + "odata.mediaReadLink": "Car(16)/$value", + "odata.mediaContentType": "application/octet-stream", + "Photo@odata.mediaEditLink": "Car(16)/Photo", + "Video@odata.mediaEditLink": "Car(16)/Video", + "VIN": 16, + "Description": "kphszztczthjacvjnttrarxru" + }] +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9708c4ac/fit/src/main/resources/V30/Car/filter/(VIN eq 16).xml ---------------------------------------------------------------------- diff --git a/fit/src/main/resources/V30/Car/filter/(VIN eq 16).xml b/fit/src/main/resources/V30/Car/filter/(VIN eq 16).xml new file mode 100644 index 0000000..83f6e67 --- /dev/null +++ b/fit/src/main/resources/V30/Car/filter/(VIN eq 16).xml @@ -0,0 +1,45 @@ + + + + http://localhost:${cargo.servlet.port}/stub/StaticService/V30/Static.svc/Car + Car + 2014-02-13T12:09:31Z + + + http://localhost:${cargo.servlet.port}/stub/StaticService/V30/Static.svc/Car(16) + + + + <updated>2014-02-13T12:09:31Z</updated> + <author> + <name /> + </author> + <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/edit-media/Photo" title="Photo" href="Car(16)/Photo" /> + <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/edit-media/Video" title="Video" href="Car(16)/Video" /> + <link rel="edit-media" title="Car" href="Car(16)/$value" /> + <content type="application/octet-stream" src="Car(16)/$value" /> + <m:properties> + <d:VIN m:type="Edm.Int32">16</d:VIN> + <d:Description>cenbviijieljtrtdslbuiqubcvhxhzenidqdnaopplvlqc</d:Description> + </m:properties> + </entry> +</feed> http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9708c4ac/fit/src/test/java/org/apache/olingo/fit/proxy/v3/AbstractTestITCase.java ---------------------------------------------------------------------- diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/AbstractTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/AbstractTestITCase.java index 987ecb5..de9cdc3 100644 --- a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/AbstractTestITCase.java +++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/AbstractTestITCase.java @@ -26,19 +26,17 @@ import static org.junit.Assert.assertNotNull; import java.io.IOException; import java.util.Arrays; import java.util.Collections; +import org.apache.olingo.client.api.v3.EdmEnabledODataClient; import org.apache.olingo.commons.api.format.ContentType; import org.apache.olingo.ext.proxy.EntityContainerFactory; import org.apache.olingo.ext.proxy.context.EntityContext; import org.apache.olingo.fit.proxy.v3.staticservice.microsoft.test.odata.services.astoriadefaultservice. DefaultContainer; -import org.apache.olingo.fit.proxy.v3.staticservice.microsoft.test.odata.services.astoriadefaultservice. - types.ContactDetails; -import org.apache.olingo.fit.proxy.v3.staticservice.microsoft.test.odata.services.astoriadefaultservice. - types.Customer; -import org.apache.olingo.fit.proxy.v3.staticservice.microsoft.test.odata.services.astoriadefaultservice. - types.Aliases; -import org.apache.olingo.fit.proxy.v3.staticservice.microsoft.test.odata.services.astoriadefaultservice. - types.Phone; +import org.apache.olingo.fit.proxy.v3.staticservice.microsoft.test.odata.services.astoriadefaultservice.types. + ContactDetails; +import org.apache.olingo.fit.proxy.v3.staticservice.microsoft.test.odata.services.astoriadefaultservice.types.Customer; +import org.apache.olingo.fit.proxy.v3.staticservice.microsoft.test.odata.services.astoriadefaultservice.types.Aliases; +import org.apache.olingo.fit.proxy.v3.staticservice.microsoft.test.odata.services.astoriadefaultservice.types.Phone; import org.junit.BeforeClass; import org.slf4j.Logger; @@ -69,7 +67,7 @@ public abstract class AbstractTestITCase { protected final EntityContext entityContext = EntityContainerFactory.getContext().entityContext(); - protected static EntityContainerFactory containerFactory; + protected static EntityContainerFactory<EdmEnabledODataClient> containerFactory; protected static DefaultContainer container; @@ -84,7 +82,7 @@ public abstract class AbstractTestITCase { testAuthServiceRootURL = "http://localhost:9080/stub/DefaultService.svc"; containerFactory = EntityContainerFactory.getV3(testStaticServiceRootURL); - containerFactory.getConfiguration().setDefaultBatchAcceptFormat(ContentType.APPLICATION_OCTET_STREAM); + containerFactory.getClient().getConfiguration().setDefaultBatchAcceptFormat(ContentType.APPLICATION_OCTET_STREAM); container = containerFactory.getEntityContainer(DefaultContainer.class); assertNotNull(container); EntityContainerFactory.getContext().detachAll(); http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9708c4ac/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 c573af6..c0e65c9 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 @@ -22,6 +22,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; +import org.apache.olingo.client.api.v3.EdmEnabledODataClient; import org.apache.olingo.commons.api.format.ContentType; import org.apache.olingo.ext.proxy.EntityContainerFactory; import org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice. @@ -44,8 +45,9 @@ import org.junit.Test; public class ActionOverloadingTestITCase extends AbstractTestITCase { private DefaultContainer getContainer() { - final EntityContainerFactory ecf = EntityContainerFactory.getV3(testActionOverloadingServiceRootURL); - ecf.getConfiguration().setDefaultBatchAcceptFormat(ContentType.APPLICATION_OCTET_STREAM); + final EntityContainerFactory<EdmEnabledODataClient> ecf = + EntityContainerFactory.getV3(testActionOverloadingServiceRootURL); + ecf.getClient().getConfiguration().setDefaultBatchAcceptFormat(ContentType.APPLICATION_OCTET_STREAM); return ecf.getEntityContainer(DefaultContainer.class); } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9708c4ac/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 3cd51bc..70346f7 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 @@ -27,7 +27,7 @@ import java.util.UUID; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import org.apache.olingo.ext.proxy.api.AsyncCall; -import org.apache.olingo.ext.proxy.api.Query; +import org.apache.olingo.ext.proxy.api.Filter; import org.apache.olingo.fit.proxy.v3.staticservice.microsoft.test.odata.services.astoriadefaultservice.types.Employee; import org.apache.olingo.fit.proxy.v3.staticservice.microsoft.test.odata.services.astoriadefaultservice.types. EmployeeCollection; @@ -45,7 +45,7 @@ public class AsyncTestITCase extends AbstractTestITCase { @Test public void retrieveEntitySet() throws InterruptedException, ExecutionException { final Future<ProductCollection> futureProds = - new AsyncCall<ProductCollection>(containerFactory.getConfiguration()) { + new AsyncCall<ProductCollection>(containerFactory.getClient().getConfiguration()) { @Override public ProductCollection call() { @@ -73,7 +73,7 @@ public class AsyncTestITCase extends AbstractTestITCase { final Product product = container.getProduct().get(-10); product.setDescription("AsyncTest#updateEntity " + random); - final Future<Void> futureFlush = new AsyncCall<Void>(containerFactory.getConfiguration()) { + final Future<Void> futureFlush = new AsyncCall<Void>(containerFactory.getClient().getConfiguration()) { @Override public Void call() { @@ -87,7 +87,7 @@ public class AsyncTestITCase extends AbstractTestITCase { Thread.sleep(1000L); } - final Future<Product> futureProd = new AsyncCall<Product>(containerFactory.getConfiguration()) { + final Future<Product> futureProd = new AsyncCall<Product>(containerFactory.getClient().getConfiguration()) { @Override public Product call() { @@ -100,22 +100,23 @@ public class AsyncTestITCase extends AbstractTestITCase { @Test public void polymorphQuery() throws Exception { - final Future<Query<Employee, EmployeeCollection>> queryEmployee = - new AsyncCall<Query<Employee, EmployeeCollection>>(containerFactory.getConfiguration()) { + final Future<Filter<Employee, EmployeeCollection>> queryEmployee = + new AsyncCall<Filter<Employee, EmployeeCollection>>(containerFactory.getClient().getConfiguration()) { @Override - public Query<Employee, EmployeeCollection> call() { - return container.getPerson().createQuery(EmployeeCollection.class); + public Filter<Employee, EmployeeCollection> call() { + return container.getPerson().createFilter(EmployeeCollection.class); } }; assertFalse(queryEmployee.get().getResult().isEmpty()); - final Future<Query<SpecialEmployee, SpecialEmployeeCollection>> querySpecialEmployee = - new AsyncCall<Query<SpecialEmployee, SpecialEmployeeCollection>>(containerFactory.getConfiguration()) { + final Future<Filter<SpecialEmployee, SpecialEmployeeCollection>> querySpecialEmployee = + new AsyncCall<Filter<SpecialEmployee, SpecialEmployeeCollection>>( + containerFactory.getClient().getConfiguration()) { @Override - public Query<SpecialEmployee, SpecialEmployeeCollection> call() { - return container.getPerson().createQuery(SpecialEmployeeCollection.class); + public Filter<SpecialEmployee, SpecialEmployeeCollection> call() { + return container.getPerson().createFilter(SpecialEmployeeCollection.class); } }; assertFalse(querySpecialEmployee.get().getResult().isEmpty()); http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9708c4ac/fit/src/test/java/org/apache/olingo/fit/proxy/v3/AuthEntityRetrieveTestITCase.java ---------------------------------------------------------------------- diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/AuthEntityRetrieveTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/AuthEntityRetrieveTestITCase.java index cca4f1f..7a721a4 100644 --- a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/AuthEntityRetrieveTestITCase.java +++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/AuthEntityRetrieveTestITCase.java @@ -33,7 +33,7 @@ public class AuthEntityRetrieveTestITCase extends EntityRetrieveTestITCase { @BeforeClass public static void setupContaner() { containerFactory = EntityContainerFactory.getV3(testAuthServiceRootURL); - containerFactory.getConfiguration(). + containerFactory.getClient().getConfiguration(). setHttpClientFactory(new BasicAuthHttpClientFactory("odatajclient", "odatajclient")); container = containerFactory.getEntityContainer(DefaultContainer.class); assertNotNull(container); http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9708c4ac/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 new file mode 100644 index 0000000..2ceb3c7 --- /dev/null +++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/FilterTestITCase.java @@ -0,0 +1,113 @@ +/* + * 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.fit.proxy.v3; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import org.apache.olingo.ext.proxy.api.NonUniqueResultException; +import org.apache.olingo.ext.proxy.api.Filter; +import org.apache.olingo.ext.proxy.api.Sort; +import org.apache.olingo.fit.proxy.v3.staticservice.microsoft.test.odata.services.astoriadefaultservice.types.Car; +import org.apache.olingo.fit.proxy.v3.staticservice.microsoft.test.odata.services.astoriadefaultservice.types. + CarCollection; +import org.apache.olingo.fit.proxy.v3.staticservice.microsoft.test.odata.services.astoriadefaultservice.types.Employee; +import org.apache.olingo.fit.proxy.v3.staticservice.microsoft.test.odata.services.astoriadefaultservice.types. + EmployeeCollection; +import org.apache.olingo.fit.proxy.v3.staticservice.microsoft.test.odata.services.astoriadefaultservice.types. + SpecialEmployee; +import org.apache.olingo.fit.proxy.v3.staticservice.microsoft.test.odata.services.astoriadefaultservice.types. + SpecialEmployeeCollection; +import org.junit.Test; + +public class FilterTestITCase extends AbstractTestITCase { + + @Test + public void filterOrderby() { + final Filter<Car, CarCollection> filter = container.getCar().createFilter(). + setFilter(containerFactory.getClient().getFilterFactory().lt("VIN", 16)); + CarCollection result = filter.getResult(); + assertNotNull(result); + + // 1. check that filtered entity set looks as expected + assertEquals(5, result.size()); + + // 2. extract VIN values - sorted ASC by default + final List<Integer> vinsASC = new ArrayList<Integer>(5); + for (Car car : result) { + assertTrue(car.getVIN() < 16); + vinsASC.add(car.getVIN()); + } + + // 3. add orderby clause to filter above + result = filter.setOrderBy(new Sort("VIN", Sort.Direction.DESC)).getResult(); + assertNotNull(result); + assertEquals(5, result.size()); + + // 4. extract again VIN value - now they were required to be sorted DESC + final List<Integer> vinsDESC = new ArrayList<Integer>(5); + for (Car car : result) { + assertTrue(car.getVIN() < 16); + vinsDESC.add(car.getVIN()); + } + + // 5. reverse vinsASC and expect to be equal to vinsDESC + Collections.reverse(vinsASC); + assertEquals(vinsASC, vinsDESC); + } + + @Test + public void single() { + final Filter<Car, CarCollection> filter = container.getCar().createFilter(). + setFilter(containerFactory.getClient().getFilterFactory().lt("VIN", 16)); + + Exception exception = null; + try { + filter.getSingleResult(); + fail(); + } catch (NonUniqueResultException e) { + exception = e; + } + assertNotNull(exception); + + filter.setFilter(containerFactory.getClient().getFilterFactory().eq("VIN", 16)); + final Car result = filter.getSingleResult(); + assertNotNull(result); + } + + @Test + public void derived() { + final Filter<Employee, EmployeeCollection> filterEmployee = + container.getPerson().createFilter(EmployeeCollection.class); + assertFalse(filterEmployee.getResult().isEmpty()); + + final Filter<SpecialEmployee, SpecialEmployeeCollection> filterSpecialEmployee = + container.getPerson().createFilter(SpecialEmployeeCollection.class); + assertFalse(filterSpecialEmployee.getResult().isEmpty()); + + assertTrue(container.getPerson().getAll().size() + > filterEmployee.getResult().size() + filterSpecialEmployee.getResult().size()); + } +} http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9708c4ac/fit/src/test/java/org/apache/olingo/fit/proxy/v3/OpenTypeTestITCase.java ---------------------------------------------------------------------- diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/OpenTypeTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/OpenTypeTestITCase.java index 3cc863d..28b768f 100644 --- a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/OpenTypeTestITCase.java +++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/OpenTypeTestITCase.java @@ -28,7 +28,7 @@ import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.UUID; - +import org.apache.olingo.client.api.v3.EdmEnabledODataClient; import org.apache.olingo.commons.api.format.ContentType; import org.apache.olingo.ext.proxy.EntityContainerFactory; import org.apache.olingo.ext.proxy.api.annotations.EntityType; @@ -37,7 +37,6 @@ import org.apache.olingo.fit.proxy.v3.opentype.microsoft.test.odata.services.ope import org.apache.olingo.fit.proxy.v3.opentype.microsoft.test.odata.services.opentypesservicev3.types.Row; import org.apache.olingo.fit.proxy.v3.opentype.microsoft.test.odata.services.opentypesservicev3.types.RowIndex; import org.junit.BeforeClass; - import org.junit.Test; /** @@ -49,8 +48,10 @@ public class OpenTypeTestITCase extends AbstractTestITCase { @BeforeClass public static void initContainer() { - final EntityContainerFactory otcontainerFactory = EntityContainerFactory.getV3(testOpenTypeServiceRootURL); - otcontainerFactory.getConfiguration().setDefaultBatchAcceptFormat(ContentType.APPLICATION_OCTET_STREAM); + final EntityContainerFactory<EdmEnabledODataClient> otcontainerFactory = + EntityContainerFactory.getV3(testOpenTypeServiceRootURL); + otcontainerFactory.getClient().getConfiguration(). + setDefaultBatchAcceptFormat(ContentType.APPLICATION_OCTET_STREAM); otcontainer = otcontainerFactory.getEntityContainer(DefaultContainer.class); assertNotNull(otcontainer); } @@ -93,7 +94,7 @@ public class OpenTypeTestITCase extends AbstractTestITCase { Calendar cal = Calendar.getInstance(); cal.clear(); - cal.setTime(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX").parse("2001-04-05T05:05:05.001+00:01")); + cal.setTime(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS").parse("2001-04-05T05:05:05.001")); contact.setLastContacted(cal); http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9708c4ac/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 a99a583..f0a4912 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 @@ -23,6 +23,7 @@ import static org.junit.Assert.assertEquals; import java.math.BigDecimal; import java.util.UUID; +import org.apache.olingo.client.api.v3.EdmEnabledODataClient; import org.apache.olingo.commons.api.format.ContentType; import org.apache.olingo.ext.proxy.EntityContainerFactory; import org.apache.olingo.fit.proxy.v3.primitivekeys.microsoft.test.odata.services.primitivekeysservice.TestContext; @@ -45,8 +46,10 @@ public class PrimitiveKeysTestITCase extends AbstractTestITCase { @Test public void readPrimitiveKeys() { - final EntityContainerFactory testContainerFactory = EntityContainerFactory.getV3(testPrimitiveKeysServiceRootURL); - testContainerFactory.getConfiguration().setDefaultBatchAcceptFormat(ContentType.APPLICATION_OCTET_STREAM); + final EntityContainerFactory<EdmEnabledODataClient> testContainerFactory = + EntityContainerFactory.getV3(testPrimitiveKeysServiceRootURL); + testContainerFactory.getClient().getConfiguration(). + setDefaultBatchAcceptFormat(ContentType.APPLICATION_OCTET_STREAM); final TestContext testContainer = testContainerFactory.getEntityContainer(TestContext.class); assertNotNull(testContainer); http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9708c4ac/fit/src/test/java/org/apache/olingo/fit/proxy/v4/AbstractTestITCase.java ---------------------------------------------------------------------- diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/AbstractTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/AbstractTestITCase.java index f6be6c9..baa4128 100644 --- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/AbstractTestITCase.java +++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/AbstractTestITCase.java @@ -27,6 +27,7 @@ import java.math.BigDecimal; import java.util.Arrays; import java.util.Calendar; import java.util.TimeZone; +import org.apache.olingo.client.api.v4.EdmEnabledODataClient; import org.apache.olingo.commons.api.format.ContentType; import org.apache.olingo.ext.proxy.EntityContainerFactory; import org.apache.olingo.ext.proxy.context.EntityContext; @@ -60,7 +61,7 @@ public abstract class AbstractTestITCase { protected final EntityContext entityContext = EntityContainerFactory.getContext().entityContext(); - protected static EntityContainerFactory containerFactory; + protected static EntityContainerFactory<EdmEnabledODataClient> containerFactory; protected static InMemoryEntities container; @@ -74,7 +75,7 @@ public abstract class AbstractTestITCase { testAuthServiceRootURL = "http://localhost:9080/stub/DefaultService.svc"; containerFactory = EntityContainerFactory.getV4(testStaticServiceRootURL); - containerFactory.getConfiguration().setDefaultBatchAcceptFormat(ContentType.APPLICATION_OCTET_STREAM); + containerFactory.getClient().getConfiguration().setDefaultBatchAcceptFormat(ContentType.APPLICATION_OCTET_STREAM); container = containerFactory.getEntityContainer(InMemoryEntities.class); assertNotNull(container); EntityContainerFactory.getContext().detachAll(); http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9708c4ac/fit/src/test/java/org/apache/olingo/fit/proxy/v4/AsyncTestITCase.java ---------------------------------------------------------------------- diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/AsyncTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/AsyncTestITCase.java index f5f4561..b0cbbdd 100644 --- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/AsyncTestITCase.java +++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/AsyncTestITCase.java @@ -37,7 +37,7 @@ public class AsyncTestITCase extends AbstractTestITCase { @Test public void retrieveEntitySet() throws InterruptedException, ExecutionException { final Future<CustomerCollection> futureCustomers = - new AsyncCall<CustomerCollection>(containerFactory.getConfiguration()) { + new AsyncCall<CustomerCollection>(containerFactory.getClient().getConfiguration()) { @Override public CustomerCollection call() { @@ -65,7 +65,7 @@ public class AsyncTestITCase extends AbstractTestITCase { Person person = container.getPeople().get(1); person.setFirstName(randomFirstName); - final Future<Void> futureFlush = new AsyncCall<Void>(containerFactory.getConfiguration()) { + final Future<Void> futureFlush = new AsyncCall<Void>(containerFactory.getClient().getConfiguration()) { @Override public Void call() { @@ -79,7 +79,7 @@ public class AsyncTestITCase extends AbstractTestITCase { Thread.sleep(1000L); } - final Future<Person> futureProd = new AsyncCall<Person>(containerFactory.getConfiguration()) { + final Future<Person> futureProd = new AsyncCall<Person>(containerFactory.getClient().getConfiguration()) { @Override public Person call() { http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9708c4ac/fit/src/test/java/org/apache/olingo/fit/proxy/v4/AuthEntityRetrieveTestITCase.java ---------------------------------------------------------------------- diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/AuthEntityRetrieveTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/AuthEntityRetrieveTestITCase.java index bafddad..afe4d00 100644 --- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/AuthEntityRetrieveTestITCase.java +++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/AuthEntityRetrieveTestITCase.java @@ -18,30 +18,25 @@ */ package org.apache.olingo.fit.proxy.v4; -import static org.junit.Assert.assertNotNull; +import static org.apache.olingo.fit.proxy.v4.AbstractTestITCase.testKeyAsSegmentServiceRootURL; -import org.junit.AfterClass; -import org.junit.BeforeClass; +import org.apache.olingo.client.api.v4.EdmEnabledODataClient; import org.apache.olingo.client.core.http.BasicAuthHttpClientFactory; +import org.apache.olingo.commons.api.format.ContentType; import org.apache.olingo.ext.proxy.EntityContainerFactory; import org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.InMemoryEntities; public class AuthEntityRetrieveTestITCase extends EntityRetrieveTestITCase { - @BeforeClass - public static void setupContaner() { - containerFactory = EntityContainerFactory.getV3(testAuthServiceRootURL); - containerFactory.getConfiguration(). + @Override + protected InMemoryEntities getContainer() { + final EntityContainerFactory<EdmEnabledODataClient> ecf = + EntityContainerFactory.getV4(testKeyAsSegmentServiceRootURL); + ecf.getClient().getConfiguration().setKeyAsSegment(true); + ecf.getClient().getConfiguration().setDefaultBatchAcceptFormat(ContentType.APPLICATION_OCTET_STREAM); + ecf.getClient().getConfiguration(). setHttpClientFactory(new BasicAuthHttpClientFactory("odatajclient", "odatajclient")); - container = containerFactory.getEntityContainer(InMemoryEntities.class); - assertNotNull(container); - } - - @AfterClass - public static void disableBasicAuth() { - containerFactory = EntityContainerFactory.getV3(testStaticServiceRootURL); - container = containerFactory.getEntityContainer(InMemoryEntities.class); - assertNotNull(container); + return ecf.getEntityContainer(InMemoryEntities.class); } } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9708c4ac/fit/src/test/java/org/apache/olingo/fit/proxy/v4/EntityRetrieveTestITCase.java ---------------------------------------------------------------------- diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/EntityRetrieveTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/EntityRetrieveTestITCase.java index efad794..ee5b049 100644 --- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/EntityRetrieveTestITCase.java +++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/EntityRetrieveTestITCase.java @@ -29,6 +29,7 @@ import java.util.Calendar; import java.util.TimeZone; import org.apache.commons.lang3.StringUtils; import org.apache.olingo.ext.proxy.commons.EntityTypeInvocationHandler; +import org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.InMemoryEntities; import org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.AccessLevel; import org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Address; import org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Company; @@ -53,10 +54,14 @@ import org.junit.Test; */ public class EntityRetrieveTestITCase extends AbstractTestITCase { + protected InMemoryEntities getContainer() { + return container; + } + @Test public void exists() { - assertTrue(container.getCustomers().exists(1)); - assertFalse(container.getOrders().exists(1)); + assertTrue(getContainer().getCustomers().exists(1)); + assertFalse(getContainer().getOrders().exists(1)); } @Test @@ -66,21 +71,21 @@ public class EntityRetrieveTestITCase extends AbstractTestITCase { @Test public void getAll() { - final PersonCollection all = container.getPeople().getAll(); + final PersonCollection all = getContainer().getPeople().getAll(); assertNotNull(all); assertFalse(all.isEmpty()); for (Person person : all) { assertNotNull(person); } - final EmployeeCollection employees = container.getPeople().getAll(EmployeeCollection.class); + final EmployeeCollection employees = getContainer().getPeople().getAll(EmployeeCollection.class); assertNotNull(employees); assertFalse(employees.isEmpty()); for (Employee employee : employees) { assertNotNull(employee); } - final CustomerCollection customers = container.getPeople().getAll(CustomerCollection.class); + final CustomerCollection customers = getContainer().getPeople().getAll(CustomerCollection.class); assertNotNull(customers); assertFalse(customers.isEmpty()); for (Customer customer : customers) { @@ -92,7 +97,7 @@ public class EntityRetrieveTestITCase extends AbstractTestITCase { @Test public void navigate() { - final Order order = container.getOrders().get(8); + final Order order = getContainer().getOrders().get(8); assertNotNull(order); assertEquals(8, order.getOrderID(), 0); @@ -103,7 +108,7 @@ public class EntityRetrieveTestITCase extends AbstractTestITCase { actual.set(2011, 2, 4, 16, 3, 57); assertEquals(actual.getTimeInMillis(), date.getTimeInMillis()); - final Customer customer = container.getCustomers().get(1); + final Customer customer = getContainer().getCustomers().get(1); assertNotNull(customer); assertEquals(1, customer.getPersonID(), 0); final Address address = customer.getHomeAddress(); @@ -128,7 +133,7 @@ public class EntityRetrieveTestITCase extends AbstractTestITCase { @Test public void withActions() { - final Product product = container.getProducts().get(5); + final Product product = getContainer().getProducts().get(5); assertEquals(5, product.getProductID(), 0); try { @@ -144,7 +149,7 @@ public class EntityRetrieveTestITCase extends AbstractTestITCase { orderDetailKey.setOrderID(7); orderDetailKey.setProductID(5); - final OrderDetail orderDetail = container.getOrderDetails().get(orderDetailKey); + final OrderDetail orderDetail = getContainer().getOrderDetails().get(orderDetailKey); assertNotNull(orderDetail); assertEquals(7, orderDetail.getOrderID(), 0); assertEquals(5, orderDetail.getProductID(), 0); @@ -152,7 +157,7 @@ public class EntityRetrieveTestITCase extends AbstractTestITCase { @Test public void checkForETag() { - final Order order = container.getOrders().get(8); + final Order order = getContainer().getOrders().get(8); assertTrue(StringUtils.isNotBlank(((EntityTypeInvocationHandler) Proxy.getInvocationHandler(order)).getETag())); } } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9708c4ac/fit/src/test/java/org/apache/olingo/fit/proxy/v4/FilterTestITCase.java ---------------------------------------------------------------------- diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/FilterTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/FilterTestITCase.java new file mode 100644 index 0000000..3eb135f --- /dev/null +++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/FilterTestITCase.java @@ -0,0 +1,82 @@ +/* + * 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.fit.proxy.v4; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import org.apache.olingo.ext.proxy.api.Filter; +import org.apache.olingo.ext.proxy.api.Search; +import org.apache.olingo.ext.proxy.api.Sort; +import org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Person; +import org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types. + PersonCollection; +import org.junit.Test; + +public class FilterTestITCase extends AbstractTestITCase { + + @Test + public void filterOrderby() { + final Filter<Person, PersonCollection> filter = container.getPeople().createFilter().setFilter( + containerFactory.getClient().getFilterFactory().lt("PersonID", 3)); + + // 1. check that result looks as expected + PersonCollection result = filter.getResult(); + assertEquals(2, result.size()); + + // 2. extract PersonID values - sorted ASC by default + final List<Integer> former = new ArrayList<Integer>(2); + for (Person person : result) { + final Integer personID = person.getPersonID(); + assertTrue(personID < 3); + former.add(personID); + } + + // 3. add orderby clause to filter above + result = filter.setOrderBy(new Sort("PersonID", Sort.Direction.DESC)).getResult(); + assertEquals(2, result.size()); + + // 4. extract again VIN value - now they were required to be sorted DESC + final List<Integer> latter = new ArrayList<Integer>(2); + for (Person person : result) { + final Integer personID = person.getPersonID(); + assertTrue(personID < 3); + latter.add(personID); + } + + // 5. reverse latter and expect to be equal to former + Collections.reverse(latter); + assertEquals(former, latter); + } + + @Test + public void search() { + final Search<Person, PersonCollection> search = container.getPeople().createSearch().setSearch( + containerFactory.getClient().getSearchFactory().or( + containerFactory.getClient().getSearchFactory().literal("Bob"), + containerFactory.getClient().getSearchFactory().literal("Jill"))); + + final PersonCollection result = search.getResult(); + assertFalse(result.isEmpty()); + } +} http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9708c4ac/fit/src/test/java/org/apache/olingo/fit/proxy/v4/KeyAsSegmentTestITCase.java ---------------------------------------------------------------------- diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/KeyAsSegmentTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/KeyAsSegmentTestITCase.java index 817d271..a992133 100644 --- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/KeyAsSegmentTestITCase.java +++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/KeyAsSegmentTestITCase.java @@ -21,6 +21,7 @@ package org.apache.olingo.fit.proxy.v4; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import org.apache.olingo.client.api.v4.EdmEnabledODataClient; import org.apache.olingo.commons.api.format.ContentType; import org.apache.olingo.ext.proxy.EntityContainerFactory; import org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.InMemoryEntities; @@ -30,9 +31,10 @@ import org.junit.Test; public class KeyAsSegmentTestITCase extends AbstractTestITCase { private InMemoryEntities getContainer() { - final EntityContainerFactory ecf = EntityContainerFactory.getV3(testKeyAsSegmentServiceRootURL); - ecf.getConfiguration().setKeyAsSegment(true); - ecf.getConfiguration().setDefaultBatchAcceptFormat(ContentType.APPLICATION_OCTET_STREAM); + final EntityContainerFactory<EdmEnabledODataClient> ecf = + EntityContainerFactory.getV4(testKeyAsSegmentServiceRootURL); + ecf.getClient().getConfiguration().setKeyAsSegment(true); + ecf.getClient().getConfiguration().setDefaultBatchAcceptFormat(ContentType.APPLICATION_OCTET_STREAM); return ecf.getEntityContainer(InMemoryEntities.class); }