Repository: olingo-odata4 Updated Branches: refs/heads/OLINGO-832_StreamSerializerPoC 44e1b0263 -> c6d45d9f5
[OLINGO-832] Introduced AbstractEntityCollection Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/c6d45d9f Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/c6d45d9f Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/c6d45d9f Branch: refs/heads/OLINGO-832_StreamSerializerPoC Commit: c6d45d9f51e47c97f083076bfe37620630a8d03d Parents: 44e1b02 Author: Michael Bolz <[email protected]> Authored: Tue Jan 26 14:41:49 2016 +0100 Committer: Michael Bolz <[email protected]> Committed: Tue Jan 26 14:41:49 2016 +0100 ---------------------------------------------------------------------- .../api/data/AbstractEntityCollection.java | 33 ++++++++++++++++++++ .../commons/api/data/EntityCollection.java | 5 ++- .../olingo/commons/api/data/EntityIterator.java | 17 +++++++++- .../apache/olingo/commons/api/data/Link.java | 6 ++-- .../server/api/serializer/ODataSerializer.java | 6 ++-- .../serializer/json/ODataJsonSerializer.java | 14 ++++----- .../core/serializer/xml/ODataXmlSerializer.java | 15 ++++----- 7 files changed, 74 insertions(+), 22 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c6d45d9f/lib/commons-api/src/main/java/org/apache/olingo/commons/api/data/AbstractEntityCollection.java ---------------------------------------------------------------------- diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/data/AbstractEntityCollection.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/data/AbstractEntityCollection.java new file mode 100644 index 0000000..9b4f9ff --- /dev/null +++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/data/AbstractEntityCollection.java @@ -0,0 +1,33 @@ +/* + * 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.commons.api.data; + +import java.net.URI; +import java.util.Iterator; + +public abstract class AbstractEntityCollection extends AbstractODataObject implements Iterable<Entity> { + public abstract Integer getCount(); + + public abstract URI getNext(); + + public abstract URI getDeltaLink(); +// +// @Override +// Iterator<Entity> iterator(); +} http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c6d45d9f/lib/commons-api/src/main/java/org/apache/olingo/commons/api/data/EntityCollection.java ---------------------------------------------------------------------- diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/data/EntityCollection.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/data/EntityCollection.java index d3ec8e8..86d8747 100644 --- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/data/EntityCollection.java +++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/data/EntityCollection.java @@ -26,7 +26,7 @@ import java.util.List; /** * Data representation for a collection of single entities. */ -public class EntityCollection extends AbstractODataObject implements Iterable<Entity> { +public class EntityCollection extends AbstractEntityCollection { private final List<Entity> entities = new ArrayList<Entity>(); private Integer count; @@ -47,6 +47,7 @@ public class EntityCollection extends AbstractODataObject implements Iterable<En * * @return number of entries into the entity set. */ + @Override public Integer getCount() { return count; } @@ -74,6 +75,7 @@ public class EntityCollection extends AbstractODataObject implements Iterable<En * * @return next link if exists; null otherwise. */ + @Override public URI getNext() { return next; } @@ -83,6 +85,7 @@ public class EntityCollection extends AbstractODataObject implements Iterable<En * * @return delta link if exists; null otherwise. */ + @Override public URI getDeltaLink() { return deltaLink; } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c6d45d9f/lib/commons-api/src/main/java/org/apache/olingo/commons/api/data/EntityIterator.java ---------------------------------------------------------------------- diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/data/EntityIterator.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/data/EntityIterator.java index 18f1019..697676e 100644 --- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/data/EntityIterator.java +++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/data/EntityIterator.java @@ -18,14 +18,16 @@ */ package org.apache.olingo.commons.api.data; +import org.apache.olingo.commons.api.ex.ODataRuntimeException; import sun.reflect.generics.reflectiveObjects.NotImplementedException; +import java.net.URI; import java.util.Iterator; /** * Data representation for a collection of single entities. */ -public abstract class EntityIterator extends EntityCollection implements Iterator<Entity> { +public abstract class EntityIterator extends AbstractEntityCollection implements Iterator<Entity> { public abstract boolean hasNext(); public abstract Entity next(); @@ -40,4 +42,17 @@ public abstract class EntityIterator extends EntityCollection implements Iterato public Iterator<Entity> iterator() { return this; } + + public Integer getCount() { + throw new ODataRuntimeException("getCount() not supported for " + getClass().getSimpleName()); + } + + public URI getNext() { + throw new ODataRuntimeException("getNext() not supported for " + getClass().getSimpleName()); + + } + + public URI getDeltaLink() { + throw new ODataRuntimeException("getDeltaLink() not supported for " + getClass().getSimpleName()); + } } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c6d45d9f/lib/commons-api/src/main/java/org/apache/olingo/commons/api/data/Link.java ---------------------------------------------------------------------- diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/data/Link.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/data/Link.java index 0bf8237..996e378 100644 --- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/data/Link.java +++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/data/Link.java @@ -32,7 +32,7 @@ public class Link extends Annotatable { private String type; private String mediaETag; private Entity entity; - private EntityCollection entitySet; + private AbstractEntityCollection entitySet; private String bindingLink; private List<String> bindingLinks = new ArrayList<String>(); @@ -149,7 +149,7 @@ public class Link extends Annotatable { * * @return in-line entity set. */ - public EntityCollection getInlineEntitySet() { + public AbstractEntityCollection getInlineEntitySet() { return entitySet; } @@ -158,7 +158,7 @@ public class Link extends Annotatable { * * @param entitySet entity set. */ - public void setInlineEntitySet(final EntityCollection entitySet) { + public void setInlineEntitySet(final AbstractEntityCollection entitySet) { this.entitySet = entitySet; } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c6d45d9f/lib/server-api/src/main/java/org/apache/olingo/server/api/serializer/ODataSerializer.java ---------------------------------------------------------------------- diff --git a/lib/server-api/src/main/java/org/apache/olingo/server/api/serializer/ODataSerializer.java b/lib/server-api/src/main/java/org/apache/olingo/server/api/serializer/ODataSerializer.java index 5dd5187..3deb396 100644 --- a/lib/server-api/src/main/java/org/apache/olingo/server/api/serializer/ODataSerializer.java +++ b/lib/server-api/src/main/java/org/apache/olingo/server/api/serializer/ODataSerializer.java @@ -19,7 +19,7 @@ package org.apache.olingo.server.api.serializer; import org.apache.olingo.commons.api.data.Entity; -import org.apache.olingo.commons.api.data.EntityCollection; +import org.apache.olingo.commons.api.data.AbstractEntityCollection; import org.apache.olingo.commons.api.data.Property; import org.apache.olingo.commons.api.edm.EdmComplexType; import org.apache.olingo.commons.api.edm.EdmEntitySet; @@ -61,7 +61,7 @@ public interface ODataSerializer { * @param options options for the serializer */ SerializerResult entityCollection(ServiceMetadata metadata, EdmEntityType entityType, - EntityCollection entitySet, EntityCollectionSerializerOptions options) throws SerializerException; + AbstractEntityCollection entitySet, EntityCollectionSerializerOptions options) throws SerializerException; /** * Writes entity data into an InputStream. @@ -131,5 +131,5 @@ public interface ODataSerializer { * @param ReferenceCollectionSerializerOptions {@link ReferenceCollectionSerializerOptions} */ SerializerResult referenceCollection(ServiceMetadata metadata, EdmEntitySet edmEntitySet, - EntityCollection entityCollection, ReferenceCollectionSerializerOptions options) throws SerializerException; + AbstractEntityCollection entityCollection, ReferenceCollectionSerializerOptions options) throws SerializerException; } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c6d45d9f/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java ---------------------------------------------------------------------- diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java index 7f84319..c381760 100644 --- a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java +++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java @@ -29,7 +29,7 @@ import org.apache.olingo.commons.api.Constants; import org.apache.olingo.commons.api.data.ComplexValue; import org.apache.olingo.commons.api.data.ContextURL; import org.apache.olingo.commons.api.data.Entity; -import org.apache.olingo.commons.api.data.EntityCollection; +import org.apache.olingo.commons.api.data.AbstractEntityCollection; import org.apache.olingo.commons.api.data.Link; import org.apache.olingo.commons.api.data.Linked; import org.apache.olingo.commons.api.data.Property; @@ -136,7 +136,7 @@ public class ODataJsonSerializer extends AbstractODataSerializer { @Override public SerializerResult entityCollection(final ServiceMetadata metadata, - final EdmEntityType entityType, final EntityCollection entitySet, + final EdmEntityType entityType, final AbstractEntityCollection entitySet, final EntityCollectionSerializerOptions options) throws SerializerException { OutputStream outputStream = null; SerializerException cachedException = null; @@ -213,7 +213,7 @@ public class ODataJsonSerializer extends AbstractODataSerializer { } protected void writeEntitySet(final ServiceMetadata metadata, final EdmEntityType entityType, - final EntityCollection entitySet, final ExpandOption expand, final SelectOption select, + final AbstractEntityCollection entitySet, final ExpandOption expand, final SelectOption select, final boolean onlyReference, final JsonGenerator json) throws IOException, SerializerException { json.writeStartArray(); @@ -724,7 +724,7 @@ public class ODataJsonSerializer extends AbstractODataSerializer { @Override public SerializerResult referenceCollection(final ServiceMetadata metadata, final EdmEntitySet edmEntitySet, - final EntityCollection entityCollection, final ReferenceCollectionSerializerOptions options) + final AbstractEntityCollection entityCollection, final ReferenceCollectionSerializerOptions options) throws SerializerException { OutputStream outputStream = null; SerializerException cachedException = null; @@ -743,7 +743,7 @@ public class ODataJsonSerializer extends AbstractODataSerializer { } json.writeArrayFieldStart(Constants.VALUE); - for (final Entity entity : entityCollection.getEntities()) { + for (final Entity entity : entityCollection) { json.writeStartObject(); json.writeStringField(Constants.JSON_ID, uriHelper.buildCanonicalURL(edmEntitySet, entity)); json.writeEndObject(); @@ -783,7 +783,7 @@ public class ODataJsonSerializer extends AbstractODataSerializer { } } - void writeCount(final EntityCollection entityCollection, final JsonGenerator json) throws IOException { + void writeCount(final AbstractEntityCollection entityCollection, final JsonGenerator json) throws IOException { if (entityCollection.getCount() != null) { if (isIEEE754Compatible) { json.writeStringField(Constants.JSON_COUNT, entityCollection.getCount().toString()); @@ -793,7 +793,7 @@ public class ODataJsonSerializer extends AbstractODataSerializer { } } - void writeNextLink(final EntityCollection entitySet, final JsonGenerator json) throws IOException { + void writeNextLink(final AbstractEntityCollection entitySet, final JsonGenerator json) throws IOException { if (entitySet.getNext() != null) { json.writeStringField(Constants.JSON_NEXT_LINK, entitySet.getNext().toASCIIString()); } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c6d45d9f/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/ODataXmlSerializer.java ---------------------------------------------------------------------- diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/ODataXmlSerializer.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/ODataXmlSerializer.java index 7e56976..70d797f 100644 --- a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/ODataXmlSerializer.java +++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/ODataXmlSerializer.java @@ -35,6 +35,7 @@ import org.apache.olingo.commons.api.data.ComplexValue; import org.apache.olingo.commons.api.data.ContextURL; import org.apache.olingo.commons.api.data.Entity; import org.apache.olingo.commons.api.data.EntityCollection; +import org.apache.olingo.commons.api.data.AbstractEntityCollection; import org.apache.olingo.commons.api.data.Link; import org.apache.olingo.commons.api.data.Linked; import org.apache.olingo.commons.api.data.Property; @@ -209,7 +210,7 @@ public class ODataXmlSerializer extends AbstractODataSerializer { @Override public SerializerResult entityCollection(final ServiceMetadata metadata, - final EdmEntityType entityType, final EntityCollection entitySet, + final EdmEntityType entityType, final AbstractEntityCollection entitySet, final EntityCollectionSerializerOptions options) throws SerializerException { final ContextURL contextURL = checkContextURL(options == null ? null : options.getContextURL()); @@ -335,7 +336,7 @@ public class ODataXmlSerializer extends AbstractODataSerializer { } protected void writeEntitySet(final ServiceMetadata metadata, final EdmEntityType entityType, - final EntityCollection entitySet, final ExpandOption expand, final SelectOption select, + final AbstractEntityCollection entitySet, final ExpandOption expand, final SelectOption select, final XMLStreamWriter writer) throws XMLStreamException, SerializerException { for (final Entity entity : entitySet) { writeEntity(metadata, entityType, entity, null, expand, select, writer, false); @@ -555,7 +556,7 @@ public class ODataXmlSerializer extends AbstractODataSerializer { link.setRel(Constants.NS_NAVIGATION_LINK_REL + navigationPropertyName); link.setType(Constants.ENTITY_SET_NAVIGATION_LINK_TYPE); link.setTitle(navigationPropertyName); - EntityCollection target = new EntityCollection(); + AbstractEntityCollection target = new EntityCollection(); link.setInlineEntitySet(target); if (linked.getId() != null) { link.setHref(linked.getId().toASCIIString() + "/" + navigationPropertyName); @@ -1035,12 +1036,12 @@ public class ODataXmlSerializer extends AbstractODataSerializer { @Override public SerializerResult referenceCollection(final ServiceMetadata metadata, final EdmEntitySet edmEntitySet, - final EntityCollection entityCollection, final ReferenceCollectionSerializerOptions options) + final AbstractEntityCollection entityCollection, final ReferenceCollectionSerializerOptions options) throws SerializerException { return entityReferenceCollection(entityCollection, options); } - protected SerializerResult entityReferenceCollection(final EntityCollection entitySet, + protected SerializerResult entityReferenceCollection(final AbstractEntityCollection entitySet, final ReferenceCollectionSerializerOptions options) throws SerializerException { OutputStream outputStream = null; SerializerException cachedException = null; @@ -1086,14 +1087,14 @@ public class ODataXmlSerializer extends AbstractODataSerializer { } } - private void writeCount(final EntityCollection entitySet, final XMLStreamWriter writer) + private void writeCount(final AbstractEntityCollection entitySet, final XMLStreamWriter writer) throws XMLStreamException { writer.writeStartElement(METADATA, Constants.ATOM_ELEM_COUNT, NS_METADATA); writer.writeCharacters(String.valueOf(entitySet.getCount())); writer.writeEndElement(); } - private void writeNextLink(final EntityCollection entitySet, final XMLStreamWriter writer) + private void writeNextLink(final AbstractEntityCollection entitySet, final XMLStreamWriter writer) throws XMLStreamException { writer.writeStartElement(ATOM, Constants.ATOM_ELEM_LINK, NS_ATOM); writer.writeAttribute(Constants.ATTR_REL, Constants.NEXT_LINK_REL);
