[OLINGO-1077] EntityIterator count support

Signed-off-by: Christian Amend <christian.amend@sap.com>
This commit is contained in:
Archana Rai 2017-02-07 11:28:41 +05:30 committed by Christian Amend
parent 2800fa0e92
commit e41b81ea09
3 changed files with 103 additions and 5 deletions

View File

@ -20,6 +20,7 @@ package org.apache.olingo.fit.tecsvc.http;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertFalse;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.net.URL; import java.net.URL;
@ -154,6 +155,89 @@ public class BasicStreamITCase extends AbstractBaseTestITCase {
assertTrue(content.contains("ESStreamServerSidePaging?$format=json&%24skiptoken=2%2A10")); assertTrue(content.contains("ESStreamServerSidePaging?$format=json&%24skiptoken=2%2A10"));
} }
@Test
public void streamCountXml() throws Exception {
URL url = new URL(SERVICE_URI + "ESStreamServerSidePaging?$count=true&$format=xml");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod(HttpMethod.GET.name());
connection.connect();
assertEquals(HttpStatusCode.OK.getStatusCode(), connection.getResponseCode());
assertEquals(ContentType.APPLICATION_XML, ContentType.create(connection.getHeaderField(HttpHeader.CONTENT_TYPE)));
final String content = IOUtils.toString(connection.getInputStream());
assertTrue(content.contains("<a:link rel=\"next\" href="));
assertTrue(content.contains("ESStreamServerSidePaging?$count=true&amp;$format=xml&amp;%24skiptoken=1%2A10\"/>"));
assertTrue(content.contains("<a:id>ESStreamServerSidePaging(1)</a:id>"));
assertTrue(content.contains("<m:count>504</m:count>"));
assertTrue(content.contains("<d:PropertyInt16 m:type=\"Int16\">1</d:PropertyInt16>"));
assertTrue(content.contains("<d:PropertyStream m:type=\"Stream\">readLink</d:PropertyStream>"));
}
@Test
public void streamCountJson() throws Exception {
URL url = new URL(SERVICE_URI + "ESStreamServerSidePaging?$count=true&$format=json");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod(HttpMethod.GET.name());
connection.connect();
assertEquals(HttpStatusCode.OK.getStatusCode(), connection.getResponseCode());
assertEquals(ContentType.JSON, ContentType.create(connection.getHeaderField(HttpHeader.CONTENT_TYPE)));
final String content = IOUtils.toString(connection.getInputStream());
assertTrue(content.contains("{\"PropertyInt16\":2,"+
"\"PropertyStream@odata.mediaEtag\":\"eTag\",\"PropertyStream@odata.mediaContentType\":\"image/jpeg\"}"));
assertTrue(content.contains("\"@odata.nextLink\""));
assertTrue(content.contains("ESStreamServerSidePaging?$count=true&$format=json&%24skiptoken=1%2A10"));
assertTrue(content.contains("\"@odata.count\":504"));
}
@Test
public void streamCountFalsetXml() throws Exception {
URL url = new URL(SERVICE_URI + "ESStreamServerSidePaging?$count=false&$format=xml");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod(HttpMethod.GET.name());
connection.connect();
assertEquals(HttpStatusCode.OK.getStatusCode(), connection.getResponseCode());
assertEquals(ContentType.APPLICATION_XML, ContentType.create(connection.getHeaderField(HttpHeader.CONTENT_TYPE)));
final String content = IOUtils.toString(connection.getInputStream());
assertTrue(content.contains("<a:link rel=\"next\" href="));
assertTrue(content.contains("ESStreamServerSidePaging?$count=false&amp;$format=xml&amp;%24skiptoken=1%2A10\"/>"));
assertTrue(content.contains("<a:id>ESStreamServerSidePaging(1)</a:id>"));
assertTrue(content.contains("<d:PropertyInt16 m:type=\"Int16\">1</d:PropertyInt16>"));
assertTrue(content.contains("<d:PropertyStream m:type=\"Stream\">readLink</d:PropertyStream>"));
assertFalse(content.contains("<m:count>504</m:count>"));
}
@Test
public void streamCountFalseJson() throws Exception {
URL url = new URL(SERVICE_URI + "ESStreamServerSidePaging?$count=false&$format=json");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod(HttpMethod.GET.name());
connection.connect();
assertEquals(HttpStatusCode.OK.getStatusCode(), connection.getResponseCode());
assertEquals(ContentType.JSON, ContentType.create(connection.getHeaderField(HttpHeader.CONTENT_TYPE)));
final String content = IOUtils.toString(connection.getInputStream());
assertTrue(content.contains("{\"PropertyInt16\":2,"+
"\"PropertyStream@odata.mediaEtag\":\"eTag\",\"PropertyStream@odata.mediaContentType\":\"image/jpeg\"}"));
assertTrue(content.contains("\"@odata.nextLink\""));
assertTrue(content.contains("ESStreamServerSidePaging?$count=false&$format=json&%24skiptoken=1%2A10"));
assertFalse(content.contains("\"@odata.count\":504"));
}
@Override @Override
protected ODataClient getClient() { protected ODataClient getClient() {
return null; return null;

View File

@ -30,6 +30,8 @@ import java.util.List;
public abstract class EntityIterator extends AbstractEntityCollection implements Iterator<Entity> { public abstract class EntityIterator extends AbstractEntityCollection implements Iterator<Entity> {
private URI next; private URI next;
private Integer count;
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */
@ -72,18 +74,16 @@ public abstract class EntityIterator extends AbstractEntityCollection implements
} }
/** /**
* {@inheritDoc} * Gets count
* <p/> *
* <b>ATTENTION:</b> <code>getCount</code> is not supported by default.
*/ */
public Integer getCount() { public Integer getCount() {
throw new ODataNotSupportedException("Entity Iterator does not support getCount()"); return count;
} }
/** /**
* Gets next link. * Gets next link.
* *
* @param next next link.
*/ */
public URI getNext() { public URI getNext() {
return next; return next;
@ -106,4 +106,13 @@ public abstract class EntityIterator extends AbstractEntityCollection implements
public void setNext(final URI next) { public void setNext(final URI next) {
this.next = next; this.next = next;
} }
/**
* Sets count.
*
* @param count count value.
*/
public void setCount(final Integer count) {
this.count = count;
}
} }

View File

@ -633,6 +633,7 @@ public class TechnicalEntityProcessor extends TechnicalProcessor
EntityIterator streamCollection = new EntityIterator() { EntityIterator streamCollection = new EntityIterator() {
Iterator<Entity> entityIterator = entityCollection.iterator(); Iterator<Entity> entityIterator = entityCollection.iterator();
private URI next = entityCollection.getNext(); private URI next = entityCollection.getNext();
private Integer count = entityCollection.getCount();
@Override @Override
public List<Operation> getOperations() { public List<Operation> getOperations() {
return entityCollection.getOperations(); return entityCollection.getOperations();
@ -642,6 +643,10 @@ public class TechnicalEntityProcessor extends TechnicalProcessor
return next; return next;
} }
public Integer getCount() {
return count;
}
@Override @Override
public boolean hasNext() { public boolean hasNext() {
return entityIterator.hasNext(); return entityIterator.hasNext();