[OLINGO-200] V3/V4 specialization for ODataEntitySetIterator

This commit is contained in:
Francesco Chicchiriccò 2014-03-29 20:17:26 +01:00
parent a884ad128d
commit cd7ede00e2
11 changed files with 66 additions and 32 deletions

View File

@ -74,10 +74,13 @@ public interface CommonRetrieveRequestFactory extends Serializable {
* Returned request gives the possibility to consume entities iterating on them without parsing and loading in memory
* the entire entity set.
*
* @param <ES> concreate ODataEntitySet implementation.
* @param <E> concrete ODataEntity implementation.
* @param uri request URI.
* @return new {@link ODataEntitySetIteratorRequest} instance.
*/
ODataEntitySetIteratorRequest getEntitySetIteratorRequest(URI uri);
<ES extends CommonODataEntitySet, E extends CommonODataEntity>
ODataEntitySetIteratorRequest<ES, E> getEntitySetIteratorRequest(URI uri);
/**
* Gets a query request returning a single OData entity.

View File

@ -19,10 +19,13 @@
package org.apache.olingo.client.api.communication.request.retrieve;
import org.apache.olingo.client.api.domain.ODataEntitySetIterator;
import org.apache.olingo.commons.api.domain.CommonODataEntity;
import org.apache.olingo.commons.api.domain.CommonODataEntitySet;
import org.apache.olingo.commons.api.format.ODataPubFormat;
/**
* This class implements an OData EntitySet query request.
*/
public interface ODataEntitySetIteratorRequest extends ODataRetrieveRequest<ODataEntitySetIterator, ODataPubFormat> {
public interface ODataEntitySetIteratorRequest<ES extends CommonODataEntitySet, E extends CommonODataEntity>
extends ODataRetrieveRequest<ODataEntitySetIterator<ES, E>, ODataPubFormat> {
}

View File

@ -21,6 +21,7 @@ package org.apache.olingo.client.api.communication.request.retrieve.v3;
import java.net.URI;
import org.apache.olingo.client.api.communication.request.retrieve.CommonRetrieveRequestFactory;
import org.apache.olingo.client.api.communication.request.retrieve.ODataEntityRequest;
import org.apache.olingo.client.api.communication.request.retrieve.ODataEntitySetIteratorRequest;
import org.apache.olingo.client.api.communication.request.retrieve.ODataEntitySetRequest;
import org.apache.olingo.client.api.communication.request.retrieve.ODataPropertyRequest;
import org.apache.olingo.commons.api.domain.v3.ODataEntity;
@ -33,6 +34,10 @@ public interface RetrieveRequestFactory extends CommonRetrieveRequestFactory {
@Override
ODataEntitySetRequest<ODataEntitySet> getEntitySetRequest(URI uri);
@SuppressWarnings("unchecked")
@Override
ODataEntitySetIteratorRequest<ODataEntitySet, ODataEntity> getEntitySetIteratorRequest(URI uri);
@SuppressWarnings("unchecked")
@Override
ODataEntityRequest<ODataEntity> getEntityRequest(URI uri);

View File

@ -21,6 +21,7 @@ package org.apache.olingo.client.api.communication.request.retrieve.v4;
import java.net.URI;
import org.apache.olingo.client.api.communication.request.retrieve.CommonRetrieveRequestFactory;
import org.apache.olingo.client.api.communication.request.retrieve.ODataEntityRequest;
import org.apache.olingo.client.api.communication.request.retrieve.ODataEntitySetIteratorRequest;
import org.apache.olingo.client.api.communication.request.retrieve.ODataEntitySetRequest;
import org.apache.olingo.client.api.communication.request.retrieve.ODataPropertyRequest;
import org.apache.olingo.commons.api.domain.v4.ODataEntity;
@ -33,6 +34,10 @@ public interface RetrieveRequestFactory extends CommonRetrieveRequestFactory {
@Override
ODataEntitySetRequest<ODataEntitySet> getEntitySetRequest(URI uri);
@SuppressWarnings("unchecked")
@Override
ODataEntitySetIteratorRequest<ODataEntitySet, ODataEntity> getEntitySetIteratorRequest(URI uri);
@Override
ODataEntityRequest<ODataEntity> getEntityRequest(URI uri);

View File

@ -42,7 +42,8 @@ import org.slf4j.LoggerFactory;
* <br/>
* <b>Please don't forget to call the <tt>close()>/<tt> method when not needed any more.</b>
*/
public class ODataEntitySetIterator implements Iterator<CommonODataEntity> {
public class ODataEntitySetIterator<ES extends CommonODataEntitySet, E extends CommonODataEntity>
implements Iterator<E> {
/**
* Logger.
@ -59,7 +60,7 @@ public class ODataEntitySetIterator implements Iterator<CommonODataEntity> {
private Entry cached;
private CommonODataEntitySet entitySet;
private ES entitySet;
private final ByteArrayOutputStream osFeed;
@ -104,6 +105,7 @@ public class ODataEntitySetIterator implements Iterator<CommonODataEntity> {
* {@inheritDoc }
*/
@Override
@SuppressWarnings("unchecked")
public boolean hasNext() {
if (available && cached == null) {
if (format == ODataPubFormat.ATOM) {
@ -114,7 +116,7 @@ public class ODataEntitySetIterator implements Iterator<CommonODataEntity> {
if (cached == null) {
available = false;
entitySet = odataClient.getReader().
entitySet = (ES) odataClient.getReader().
readEntitySet(new ByteArrayInputStream(osFeed.toByteArray()), format);
close();
}
@ -127,9 +129,10 @@ public class ODataEntitySetIterator implements Iterator<CommonODataEntity> {
* {@inheritDoc }
*/
@Override
public CommonODataEntity next() {
public E next() {
if (hasNext()) {
final CommonODataEntity res = odataClient.getBinder().getODataEntity(cached);
@SuppressWarnings("unchecked")
final E res = (E) odataClient.getBinder().getODataEntity(cached);
cached = null;
return res;
}

View File

@ -21,7 +21,6 @@ package org.apache.olingo.client.core.communication.request.retrieve;
import java.net.URI;
import org.apache.commons.lang3.StringUtils;
import org.apache.olingo.client.api.CommonODataClient;
import org.apache.olingo.client.api.communication.request.retrieve.ODataEntitySetIteratorRequest;
import org.apache.olingo.client.api.communication.request.retrieve.ODataMediaRequest;
import org.apache.olingo.client.api.communication.request.retrieve.EdmMetadataRequest;
import org.apache.olingo.client.api.communication.request.retrieve.ODataRawRequest;
@ -39,11 +38,6 @@ public abstract class AbstractRetrieveRequestFactory implements CommonRetrieveRe
this.client = client;
}
@Override
public ODataEntitySetIteratorRequest getEntitySetIteratorRequest(final URI query) {
return new ODataEntitySetIteratorRequestImpl(client, query);
}
@Override
public ODataValueRequest getValueRequest(final URI query) {
return new ODataValueRequestImpl(client, query);

View File

@ -25,14 +25,16 @@ import org.apache.olingo.client.api.CommonODataClient;
import org.apache.olingo.client.api.communication.request.retrieve.ODataEntitySetIteratorRequest;
import org.apache.olingo.client.api.communication.response.ODataRetrieveResponse;
import org.apache.olingo.client.api.domain.ODataEntitySetIterator;
import org.apache.olingo.commons.api.domain.CommonODataEntity;
import org.apache.olingo.commons.api.domain.CommonODataEntitySet;
import org.apache.olingo.commons.api.format.ODataPubFormat;
/**
* This class implements an OData EntitySet query request.
*/
public class ODataEntitySetIteratorRequestImpl
extends AbstractODataRetrieveRequest<ODataEntitySetIterator, ODataPubFormat>
implements ODataEntitySetIteratorRequest {
public class ODataEntitySetIteratorRequestImpl<ES extends CommonODataEntitySet, E extends CommonODataEntity>
extends AbstractODataRetrieveRequest<ODataEntitySetIterator<ES, E>, ODataPubFormat>
implements ODataEntitySetIteratorRequest<ES, E> {
private ODataEntitySetIterator feedIterator = null;
@ -42,7 +44,7 @@ public class ODataEntitySetIteratorRequestImpl
* @param odataClient client instance getting this request
* @param query query to be executed.
*/
ODataEntitySetIteratorRequestImpl(final CommonODataClient odataClient, final URI query) {
public ODataEntitySetIteratorRequestImpl(final CommonODataClient odataClient, final URI query) {
super(odataClient, ODataPubFormat.class, query);
}
@ -50,7 +52,7 @@ public class ODataEntitySetIteratorRequestImpl
* {@inheritDoc }
*/
@Override
public ODataRetrieveResponse<ODataEntitySetIterator> execute() {
public ODataRetrieveResponse<ODataEntitySetIterator<ES, E>> execute() {
final HttpResponse res = doExecute();
return new ODataEntitySetIteratorResponseImpl(httpClient, res);
}
@ -75,9 +77,9 @@ public class ODataEntitySetIteratorRequestImpl
*/
@Override
@SuppressWarnings("unchecked")
public ODataEntitySetIterator getBody() {
public ODataEntitySetIterator<ES, E> getBody() {
if (feedIterator == null) {
feedIterator = new ODataEntitySetIterator(
feedIterator = new ODataEntitySetIterator<ES, E>(
odataClient, getRawResponse(), ODataPubFormat.fromString(getContentType()));
}
return feedIterator;

View File

@ -20,6 +20,7 @@ package org.apache.olingo.client.core.communication.request.retrieve.v3;
import java.net.URI;
import org.apache.olingo.client.api.communication.request.retrieve.ODataEntityRequest;
import org.apache.olingo.client.api.communication.request.retrieve.ODataEntitySetIteratorRequest;
import org.apache.olingo.client.api.communication.request.retrieve.ODataEntitySetRequest;
import org.apache.olingo.client.api.communication.request.retrieve.ODataPropertyRequest;
import org.apache.olingo.client.api.communication.request.retrieve.XMLMetadataRequest;
@ -28,6 +29,7 @@ import org.apache.olingo.client.api.communication.request.retrieve.v3.ODataLinkC
import org.apache.olingo.client.api.communication.request.retrieve.v3.RetrieveRequestFactory;
import org.apache.olingo.client.core.communication.request.retrieve.AbstractRetrieveRequestFactory;
import org.apache.olingo.client.core.communication.request.retrieve.ODataEntityRequestImpl;
import org.apache.olingo.client.core.communication.request.retrieve.ODataEntitySetIteratorRequestImpl;
import org.apache.olingo.client.core.communication.request.retrieve.ODataEntitySetRequestImpl;
import org.apache.olingo.client.core.communication.request.retrieve.ODataPropertyRequestImpl;
import org.apache.olingo.commons.api.domain.v3.ODataEntity;
@ -60,6 +62,12 @@ public class RetrieveRequestFactoryImpl extends AbstractRetrieveRequestFactory
return new ODataEntitySetRequestImpl<ODataEntitySet>(client, query);
}
@SuppressWarnings("unchecked")
@Override
public ODataEntitySetIteratorRequest<ODataEntitySet, ODataEntity> getEntitySetIteratorRequest(URI uri) {
return new ODataEntitySetIteratorRequestImpl<ODataEntitySet, ODataEntity>(client, uri);
}
@SuppressWarnings("unchecked")
@Override
public ODataEntityRequest<ODataEntity> getEntityRequest(final URI query) {

View File

@ -20,6 +20,7 @@ package org.apache.olingo.client.core.communication.request.retrieve.v4;
import java.net.URI;
import org.apache.olingo.client.api.communication.request.retrieve.ODataEntityRequest;
import org.apache.olingo.client.api.communication.request.retrieve.ODataEntitySetIteratorRequest;
import org.apache.olingo.client.api.communication.request.retrieve.ODataEntitySetRequest;
import org.apache.olingo.client.api.communication.request.retrieve.ODataPropertyRequest;
import org.apache.olingo.client.api.communication.request.retrieve.XMLMetadataRequest;
@ -27,6 +28,7 @@ import org.apache.olingo.client.api.communication.request.retrieve.v4.RetrieveRe
import org.apache.olingo.client.api.v4.ODataClient;
import org.apache.olingo.client.core.communication.request.retrieve.AbstractRetrieveRequestFactory;
import org.apache.olingo.client.core.communication.request.retrieve.ODataEntityRequestImpl;
import org.apache.olingo.client.core.communication.request.retrieve.ODataEntitySetIteratorRequestImpl;
import org.apache.olingo.client.core.communication.request.retrieve.ODataEntitySetRequestImpl;
import org.apache.olingo.client.core.communication.request.retrieve.ODataPropertyRequestImpl;
import org.apache.olingo.commons.api.domain.v4.ODataEntity;
@ -54,6 +56,12 @@ public class RetrieveRequestFactoryImpl extends AbstractRetrieveRequestFactory
return new ODataEntitySetRequestImpl<ODataEntitySet>(client, query);
}
@SuppressWarnings("unchecked")
@Override
public ODataEntitySetIteratorRequest<ODataEntitySet, ODataEntity> getEntitySetIteratorRequest(URI uri) {
return new ODataEntitySetIteratorRequestImpl<ODataEntitySet, ODataEntity>(client, uri);
}
@SuppressWarnings("unchecked")
@Override
public ODataEntityRequest<ODataEntity> getEntityRequest(final URI query) {

View File

@ -18,6 +18,10 @@
*/
package org.apache.olingo.client.core.it.v3;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
import java.net.URI;
import org.apache.olingo.client.api.communication.request.retrieve.ODataEntitySetIteratorRequest;
@ -29,12 +33,10 @@ import org.apache.olingo.client.api.domain.ODataEntitySetIterator;
import org.apache.olingo.client.api.uri.CommonURIBuilder;
import org.apache.olingo.client.core.uri.URIUtils;
import org.apache.olingo.commons.api.domain.CommonODataEntitySet;
import org.apache.olingo.commons.api.domain.v3.ODataEntity;
import org.apache.olingo.commons.api.domain.v3.ODataEntitySet;
import org.apache.olingo.commons.api.format.ODataPubFormat;
import org.apache.olingo.commons.core.op.ResourceFactory;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
/**
@ -115,12 +117,12 @@ public class EntitySetTestITCase extends AbstractTestITCase {
final CommonURIBuilder<?> uriBuilder = client.getURIBuilder(getServiceRoot());
uriBuilder.appendEntitySetSegment("Customer");
final ODataEntitySetIteratorRequest req =
final ODataEntitySetIteratorRequest<ODataEntitySet, ODataEntity> req =
client.getRetrieveRequestFactory().getEntitySetIteratorRequest(uriBuilder.build());
req.setFormat(format);
final ODataRetrieveResponse<ODataEntitySetIterator> res = req.execute();
final ODataEntitySetIterator feedIterator = res.getBody();
final ODataRetrieveResponse<ODataEntitySetIterator<ODataEntitySet, ODataEntity>> res = req.execute();
final ODataEntitySetIterator<ODataEntitySet, ODataEntity> feedIterator = res.getBody();
assertNotNull(feedIterator);

View File

@ -18,6 +18,10 @@
*/
package org.apache.olingo.client.core.it.v4;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
import java.net.URI;
import org.apache.olingo.client.api.communication.request.retrieve.ODataEntitySetIteratorRequest;
@ -29,13 +33,10 @@ import org.apache.olingo.client.api.domain.ODataEntitySetIterator;
import org.apache.olingo.client.api.uri.CommonURIBuilder;
import org.apache.olingo.client.core.uri.URIUtils;
import org.apache.olingo.commons.api.domain.CommonODataEntitySet;
import org.apache.olingo.commons.api.domain.v4.ODataEntity;
import org.apache.olingo.commons.api.domain.v4.ODataEntitySet;
import org.apache.olingo.commons.api.format.ODataPubFormat;
import org.apache.olingo.commons.core.op.ResourceFactory;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import org.junit.Ignore;
import org.junit.Test;
@ -124,11 +125,11 @@ public class EntitySetTestITCase extends AbstractTestITCase {
final CommonURIBuilder<?> uriBuilder = client.getURIBuilder(getServiceRoot());
uriBuilder.appendEntitySetSegment("People");
final ODataEntitySetIteratorRequest req =
final ODataEntitySetIteratorRequest<ODataEntitySet, ODataEntity> req =
client.getRetrieveRequestFactory().getEntitySetIteratorRequest(uriBuilder.build());
req.setFormat(format);
final ODataRetrieveResponse<ODataEntitySetIterator> res = req.execute();
final ODataRetrieveResponse<ODataEntitySetIterator<ODataEntitySet, ODataEntity>> res = req.execute();
final ODataEntitySetIterator feedIterator = res.getBody();
assertNotNull(feedIterator);