Repository: olingo-odata4 Updated Branches: refs/heads/olingo575 [created] 0e5da552b
[OLINGO-575] Link refactoring Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/0e5da552 Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/0e5da552 Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/0e5da552 Branch: refs/heads/olingo575 Commit: 0e5da552bdd13f262f36522683929e384956a290 Parents: 40d82fc Author: Christian Amend <[email protected]> Authored: Tue Mar 10 17:05:34 2015 +0100 Committer: Christian Amend <[email protected]> Committed: Tue Mar 10 17:05:34 2015 +0100 ---------------------------------------------------------------------- .../apache/olingo/commons/api/data/Link.java | 29 -- .../apache/olingo/commons/api/data/Linked.java | 44 ++ .../commons/core/data/AbstractLinked.java | 111 ++++++ .../commons/core/data/ComplexValueImpl.java | 61 +-- .../olingo/commons/core/data/EntityImpl.java | 55 +-- .../olingo/commons/core/data/LinkImpl.java | 24 -- .../core/serialization/AtomDeserializer.java | 20 +- .../core/serialization/AtomSerializer.java | 58 ++- .../core/serialization/JsonDeserializer.java | 14 +- .../serialization/JsonEntityDeserializer.java | 2 +- .../serialization/JsonEntitySerializer.java | 8 +- .../core/serialization/JsonSerializer.java | 16 +- .../serialization/AtomDeserializerTest.java | 399 ++++++++++--------- 13 files changed, 434 insertions(+), 407 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/0e5da552/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 88742f5..a40a0cc 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 @@ -93,34 +93,6 @@ public interface Link extends Annotatable { void setMediaETag(String etag); /** - * Gets in-line entity. - * - * @return in-line entity. - */ - Entity getInlineEntity(); - - /** - * Sets in-line entity. - * - * @param entity entity. - */ - void setInlineEntity(Entity entity); - - /** - * Gets in-line entity set. - * - * @return in-line entity set. - */ - EntitySet getInlineEntitySet(); - - /** - * Sets in-line entity set. - * - * @param entitySet entity set. - */ - void setInlineEntitySet(EntitySet entitySet); - - /** * If this is a "toOne" relationship this method delivers the binding link or <tt>null</tt> if not set. * @return String the binding link. */ @@ -143,5 +115,4 @@ public interface Link extends Annotatable { * @param bindingLinks */ void setBindingLinks(List<String> bindingLinks); - } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/0e5da552/lib/commons-api/src/main/java/org/apache/olingo/commons/api/data/Linked.java ---------------------------------------------------------------------- diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/data/Linked.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/data/Linked.java index 1c28507..dc4f6a4 100644 --- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/data/Linked.java +++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/data/Linked.java @@ -19,6 +19,7 @@ package org.apache.olingo.commons.api.data; import java.util.List; +import java.util.Map; public interface Linked { @@ -65,4 +66,47 @@ public interface Linked { * @return links. */ List<Link> getNavigationBindings(); + + + /** + * Gets in-line entity. + * + * @param name of the navigation + * @return in-line entity for given name, if available, otherwise <tt>null</tt> + */ + Entity getInlineEntity(String name); + + /** + * @return all in-line entities for this entity. + */ + Map<String, Entity> getAllInlineEntities(); + + /** + * Adds an in-line entity for given navigation name. If one is set already it will be replaced with the new value. + * + * @param name navigation name + * @param entity entity. + */ + void addInlineEntity(String name, Entity entity); + + /** + * Gets in-line entity set. + * + * @param name of the navigation + * @return in-line entity set for given name, if available, otherwise <tt>null</tt> + */ + EntitySet getInlineEntitySet(String name); + + /** + * @return all in-line entity sets for this entity. + */ + Map<String, EntitySet> getAllInlineEntitySets(); + + /** + * Adds an in-line entity set for given navigation name. If one is set already it will be replaced with the new value. + * + * @param name navigation name + * @param entitySet entity set. + */ + void addInlineEntitySet(String name, EntitySet entitySet); } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/0e5da552/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AbstractLinked.java ---------------------------------------------------------------------- diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AbstractLinked.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AbstractLinked.java new file mode 100644 index 0000000..e7cf27d --- /dev/null +++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AbstractLinked.java @@ -0,0 +1,111 @@ +/* + * 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.core.data; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.olingo.commons.api.data.Entity; +import org.apache.olingo.commons.api.data.EntitySet; +import org.apache.olingo.commons.api.data.Link; +import org.apache.olingo.commons.api.data.Linked; + +public class AbstractLinked extends AbstractODataObject implements Linked{ + + private final List<Link> associationLinks = new ArrayList<Link>(); + private final List<Link> navigationLinks = new ArrayList<Link>(); + private final List<Link> bindingLinks = new ArrayList<Link>(); + + private final HashMap<String, Entity> inlineEntities = new HashMap<String, Entity>(); + private final HashMap<String, EntitySet> inlineEntitySets = new HashMap<String, EntitySet>(); + + private Link getOneByTitle(final String name, final List<Link> links) { + Link result = null; + + for (Link link : links) { + if (name.equals(link.getTitle())) { + result = link; + } + } + + return result; + } + + @Override + public Link getAssociationLink(final String name) { + return getOneByTitle(name, associationLinks); + } + + @Override + public List<Link> getAssociationLinks() { + return associationLinks; + } + + @Override + public Link getNavigationLink(final String name) { + return getOneByTitle(name, navigationLinks); + } + + @Override + public List<Link> getNavigationLinks() { + return navigationLinks; + } + + @Override + public Link getNavigationBinding(String name) { + return getOneByTitle(name, bindingLinks); + } + + @Override + public List<Link> getNavigationBindings() { + return bindingLinks; + } + + @Override + public Entity getInlineEntity(String name) { + return inlineEntities.get(name); + } + + @Override + public Map<String, Entity> getAllInlineEntities() { + return inlineEntities; + } + + @Override + public void addInlineEntity(String name, Entity entity) { + inlineEntities.put(name, entity); + } + + @Override + public EntitySet getInlineEntitySet(String name) { + return inlineEntitySets.get(name); + } + + @Override + public Map<String, EntitySet> getAllInlineEntitySets() { + return inlineEntitySets; + } + + @Override + public void addInlineEntitySet(String name, EntitySet entitySet) { + inlineEntitySets.put(name, entitySet); + } +} http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/0e5da552/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/ComplexValueImpl.java ---------------------------------------------------------------------- diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/ComplexValueImpl.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/ComplexValueImpl.java index c50f51a..f7317db 100644 --- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/ComplexValueImpl.java +++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/ComplexValueImpl.java @@ -18,71 +18,18 @@ */ package org.apache.olingo.commons.core.data; -import org.apache.olingo.commons.api.data.Annotation; -import org.apache.olingo.commons.api.data.Link; -import org.apache.olingo.commons.api.data.ComplexValue; -import org.apache.olingo.commons.api.data.Property; - import java.util.ArrayList; import java.util.List; -public class ComplexValueImpl implements ComplexValue { +import org.apache.olingo.commons.api.data.ComplexValue; +import org.apache.olingo.commons.api.data.Property; + +public class ComplexValueImpl extends AbstractLinked implements ComplexValue { private final List<Property> value = new ArrayList<Property>(); - private final List<Link> associationLinks = new ArrayList<Link>(); - private final List<Link> navigationLinks = new ArrayList<Link>(); - private final List<Link> bindingLinks = new ArrayList<Link>(); - private final List<Annotation> annotations = new ArrayList<Annotation>(); @Override public List<Property> getValue() { return value; } - - private Link getOneByTitle(final String name, final List<Link> links) { - Link result = null; - - for (Link link : links) { - if (name.equals(link.getTitle())) { - result = link; - } - } - - return result; - } - - @Override - public Link getAssociationLink(final String name) { - return getOneByTitle(name, associationLinks); - } - - @Override - public List<Link> getAssociationLinks() { - return associationLinks; - } - - @Override - public Link getNavigationLink(final String name) { - return getOneByTitle(name, navigationLinks); - } - - @Override - public List<Link> getNavigationLinks() { - return navigationLinks; - } - - @Override - public List<Annotation> getAnnotations() { - return annotations; - } - - @Override - public Link getNavigationBinding(String name) { - return getOneByTitle(name, bindingLinks); - } - - @Override - public List<Link> getNavigationBindings() { - return bindingLinks; - } } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/0e5da552/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/EntityImpl.java ---------------------------------------------------------------------- diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/EntityImpl.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/EntityImpl.java index 38dd748..28eff5a 100755 --- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/EntityImpl.java +++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/EntityImpl.java @@ -18,19 +18,19 @@ */ package org.apache.olingo.commons.core.data; +import java.net.URI; +import java.util.ArrayList; +import java.util.List; + import org.apache.olingo.commons.api.data.Entity; import org.apache.olingo.commons.api.data.Link; import org.apache.olingo.commons.api.data.Property; import org.apache.olingo.commons.api.domain.ODataOperation; -import java.net.URI; -import java.util.ArrayList; -import java.util.List; - /** * Class implementing an OData entity. */ -public class EntityImpl extends AbstractODataObject implements Entity { +public class EntityImpl extends AbstractLinked implements Entity { private String eTag; @@ -39,10 +39,7 @@ public class EntityImpl extends AbstractODataObject implements Entity { private Link readLink; private Link editLink; - private final List<Link> associationLinks = new ArrayList<Link>(); - private final List<Link> navigationLinks = new ArrayList<Link>(); private final List<Link> mediaEditLinks = new ArrayList<Link>(); - private final List<Link> bindingLinks = new ArrayList<Link>(); private final List<ODataOperation> operations = new ArrayList<ODataOperation>(); @@ -91,52 +88,10 @@ public class EntityImpl extends AbstractODataObject implements Entity { this.editLink = editLink; } - private Link getOneByTitle(final String name, final List<Link> links) { - Link result = null; - - for (Link link : links) { - if (name.equals(link.getTitle())) { - result = link; - } - } - - return result; - } - - @Override - public Link getAssociationLink(final String name) { - return getOneByTitle(name, associationLinks); - } - - @Override - public List<Link> getAssociationLinks() { - return associationLinks; - } - - @Override - public Link getNavigationLink(final String name) { - return getOneByTitle(name, navigationLinks); - } - - @Override - public List<Link> getNavigationLinks() { - return navigationLinks; - } - @Override public List<Link> getMediaEditLinks() { return mediaEditLinks; } - - @Override - public Link getNavigationBinding(String name) { - return getOneByTitle(name, bindingLinks); - } - - @Override - public List<Link> getNavigationBindings() { - return bindingLinks; - } @Override public List<ODataOperation> getOperations() { http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/0e5da552/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/LinkImpl.java ---------------------------------------------------------------------- diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/LinkImpl.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/LinkImpl.java index 5d096d6..69ee3f0 100644 --- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/LinkImpl.java +++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/LinkImpl.java @@ -21,8 +21,6 @@ package org.apache.olingo.commons.core.data; import java.util.ArrayList; import java.util.List; -import org.apache.olingo.commons.api.data.Entity; -import org.apache.olingo.commons.api.data.EntitySet; import org.apache.olingo.commons.api.data.Link; public class LinkImpl extends AbstractAnnotatedObject implements Link { @@ -32,8 +30,6 @@ public class LinkImpl extends AbstractAnnotatedObject implements Link { private String href; private String type; private String mediaETag; - private Entity entity; - private EntitySet entitySet; private String bindingLink; private List<String> bindingLinks = new ArrayList<String>(); @@ -88,26 +84,6 @@ public class LinkImpl extends AbstractAnnotatedObject implements Link { } @Override - public Entity getInlineEntity() { - return entity; - } - - @Override - public void setInlineEntity(final Entity entity) { - this.entity = entity; - } - - @Override - public EntitySet getInlineEntitySet() { - return entitySet; - } - - @Override - public void setInlineEntitySet(final EntitySet entitySet) { - this.entitySet = entitySet; - } - - @Override public String getBindingLink() { return bindingLink; } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/0e5da552/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/AtomDeserializer.java ---------------------------------------------------------------------- diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/AtomDeserializer.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/AtomDeserializer.java index dcfb328..74bd998 100644 --- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/AtomDeserializer.java +++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/AtomDeserializer.java @@ -56,6 +56,7 @@ import org.apache.olingo.commons.api.edm.geo.Geospatial; import org.apache.olingo.commons.api.format.ContentType; import org.apache.olingo.commons.api.serialization.ODataDeserializer; import org.apache.olingo.commons.api.serialization.ODataDeserializerException; +import org.apache.olingo.commons.core.data.AbstractLinked; import org.apache.olingo.commons.core.data.AbstractODataObject; import org.apache.olingo.commons.core.data.AnnotationImpl; import org.apache.olingo.commons.core.data.ComplexValueImpl; @@ -151,9 +152,9 @@ public class AtomDeserializer extends AbstractAtomDealer implements ODataDeseria } if (link.getRel().startsWith(Constants.NS_NAVIGATION_LINK_REL)) { - - ((ComplexValue) value).getNavigationLinks().add(link); - inline(reader, event.asStartElement(), link); + ((ComplexValueImpl) value).getNavigationLinks().add(link); + String navigationName = link.getRel().substring(Constants.NS_NAVIGATION_LINK_REL.length()); + inline(reader, event.asStartElement(), navigationName, ((ComplexValueImpl) value)); } else if (link.getRel().startsWith(Constants.NS_ASSOCIATION_LINK_REL)) { ((Valuable) value).asComplex().getAssociationLinks().add(link); @@ -379,8 +380,8 @@ public class AtomDeserializer extends AbstractAtomDealer implements ODataDeseria } } - private void inline(final XMLEventReader reader, final StartElement start, final LinkImpl link) - throws XMLStreamException, EdmPrimitiveTypeException { + private void inline(final XMLEventReader reader, final StartElement start, final String navigationName, + final AbstractLinked linked) throws XMLStreamException, EdmPrimitiveTypeException { boolean foundEndElement = false; while (reader.hasNext() && !foundEndElement) { @@ -391,14 +392,14 @@ public class AtomDeserializer extends AbstractAtomDealer implements ODataDeseria StartElement inline = getStartElement(reader); if (inline != null) { if (Constants.QNAME_ATOM_ELEM_ENTRY.equals(inline.getName())) { - link.setInlineEntity(entity(reader, inline)); + linked.addInlineEntity(navigationName, entity(reader, inline)); } if (Constants.QNAME_ATOM_ELEM_FEED.equals(inline.getName())) { - link.setInlineEntitySet(entitySet(reader, inline)); + linked.addInlineEntitySet(navigationName, entitySet(reader, inline)); } } } else if (annotationQName.equals(event.asStartElement().getName())) { - link.getAnnotations().add(annotation(reader, event.asStartElement())); + linked.getAnnotations().add(annotation(reader, event.asStartElement())); } } @@ -642,7 +643,8 @@ public class AtomDeserializer extends AbstractAtomDealer implements ODataDeseria } else if (link.getRel().startsWith(Constants.NS_NAVIGATION_LINK_REL)) { entity.getNavigationLinks().add(link); - inline(reader, event.asStartElement(), link); + String navigationName = link.getRel().substring(Constants.NS_NAVIGATION_LINK_REL.length()); + inline(reader, event.asStartElement(), navigationName, entity); } else if (link.getRel().startsWith(Constants.NS_ASSOCIATION_LINK_REL)) { entity.getAssociationLinks().add(link); http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/0e5da552/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/AtomSerializer.java ---------------------------------------------------------------------- diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/AtomSerializer.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/AtomSerializer.java index 6c36116..eb0d5cb 100644 --- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/AtomSerializer.java +++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/AtomSerializer.java @@ -36,6 +36,7 @@ import org.apache.olingo.commons.api.data.ContextURL; import org.apache.olingo.commons.api.data.Entity; import org.apache.olingo.commons.api.data.EntitySet; import org.apache.olingo.commons.api.data.Link; +import org.apache.olingo.commons.api.data.Linked; import org.apache.olingo.commons.api.data.Property; import org.apache.olingo.commons.api.data.ResWrap; import org.apache.olingo.commons.api.data.ValueType; @@ -139,7 +140,7 @@ public class AtomSerializer extends AbstractAtomDealer implements ODataSerialize property.getValue()); if (!property.isNull() && property.isComplex()) { links(writer, property.asComplex().getAssociationLinks()); - links(writer, property.asComplex().getNavigationLinks()); + navigationLinks(writer, property.asComplex().getNavigationLinks(), property.asComplex()); } writer.writeEndElement(); @@ -180,30 +181,51 @@ public class AtomSerializer extends AbstractAtomDealer implements ODataSerialize for (Link link : links) { writer.writeStartElement(Constants.ATOM_ELEM_LINK); - if (StringUtils.isNotBlank(link.getRel())) { - writer.writeAttribute(Constants.ATTR_REL, link.getRel()); - } - if (StringUtils.isNotBlank(link.getTitle())) { - writer.writeAttribute(Constants.ATTR_TITLE, link.getTitle()); - } - if (StringUtils.isNotBlank(link.getHref())) { - writer.writeAttribute(Constants.ATTR_HREF, link.getHref()); - } - if (StringUtils.isNotBlank(link.getType())) { - writer.writeAttribute(Constants.ATTR_TYPE, link.getType()); + commonLinkAttributes(writer, link); + + for (Annotation annotation : link.getAnnotations()) { + annotation(writer, annotation, null); } - if (link.getInlineEntity() != null || link.getInlineEntitySet() != null) { + writer.writeEndElement(); + } + } + + private void commonLinkAttributes(final XMLStreamWriter writer, Link link) throws XMLStreamException { + if (StringUtils.isNotBlank(link.getRel())) { + writer.writeAttribute(Constants.ATTR_REL, link.getRel()); + } + if (StringUtils.isNotBlank(link.getTitle())) { + writer.writeAttribute(Constants.ATTR_TITLE, link.getTitle()); + } + if (StringUtils.isNotBlank(link.getHref())) { + writer.writeAttribute(Constants.ATTR_HREF, link.getHref()); + } + if (StringUtils.isNotBlank(link.getType())) { + writer.writeAttribute(Constants.ATTR_TYPE, link.getType()); + } + } + + private void navigationLinks(final XMLStreamWriter writer, final List<Link> links, Linked linked) + throws XMLStreamException, EdmPrimitiveTypeException { + for (Link link : links) { + writer.writeStartElement(Constants.ATOM_ELEM_LINK); + + commonLinkAttributes(writer, link); + + String navigationName = link.getRel().substring(Constants.NS_NAVIGATION_LINK_REL.length()); + + if (linked.getInlineEntity(navigationName) != null || linked.getInlineEntitySet(navigationName) != null) { writer.writeStartElement(Constants.PREFIX_METADATA, Constants.ATOM_ELEM_INLINE, namespaceMetadata); - if (link.getInlineEntity() != null) { + if (linked.getInlineEntity(navigationName) != null) { writer.writeStartElement(Constants.ATOM_ELEM_ENTRY); - entity(writer, link.getInlineEntity()); + entity(writer, linked.getInlineEntity(navigationName)); writer.writeEndElement(); } - if (link.getInlineEntitySet() != null) { + if (linked.getInlineEntitySet(navigationName) != null) { writer.writeStartElement(Constants.ATOM_ELEM_FEED); - entitySet(writer, link.getInlineEntitySet()); + entitySet(writer, linked.getInlineEntitySet(navigationName)); writer.writeEndElement(); } @@ -299,7 +321,7 @@ public class AtomSerializer extends AbstractAtomDealer implements ODataSerialize } links(writer, entity.getAssociationLinks()); - links(writer, entity.getNavigationLinks()); + navigationLinks(writer, entity.getNavigationLinks(), entity); links(writer, entity.getMediaEditLinks()); if (serverMode) { http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/0e5da552/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonDeserializer.java ---------------------------------------------------------------------- diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonDeserializer.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonDeserializer.java index 929ad95..965dd8b 100755 --- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonDeserializer.java +++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonDeserializer.java @@ -126,7 +126,7 @@ public class JsonDeserializer implements ODataDeserializer { } protected String setInline(final String name, final String suffix, final JsonNode tree, - final ObjectCodec codec, final LinkImpl link) throws IOException { + final ObjectCodec codec, final Linked linked) throws IOException { final String entityNamePrefix = name.substring(0, name.indexOf(suffix)); if (tree.has(entityNamePrefix)) { @@ -134,18 +134,16 @@ public class JsonDeserializer implements ODataDeserializer { JsonEntityDeserializer entityDeserializer = new JsonEntityDeserializer(serverMode); if (inline instanceof ObjectNode) { - link.setType(ODataLinkType.ENTITY_NAVIGATION.toString()); - link.setInlineEntity(entityDeserializer.doDeserialize(inline.traverse(codec)).getPayload()); + linked.addInlineEntity(entityNamePrefix, entityDeserializer.doDeserialize(inline.traverse(codec)).getPayload()); } else if (inline instanceof ArrayNode) { - link.setType(ODataLinkType.ENTITY_SET_NAVIGATION.toString()); final EntitySet entitySet = new EntitySetImpl(); for (final Iterator<JsonNode> entries = inline.elements(); entries.hasNext();) { entitySet.getEntities().add(entityDeserializer.doDeserialize(entries.next().traverse(codec)).getPayload()); } - link.setInlineEntitySet(entitySet); + linked.addInlineEntitySet(entityNamePrefix, entitySet); } } return entityNamePrefix; @@ -176,7 +174,7 @@ public class JsonDeserializer implements ODataDeserializer { linked.getNavigationLinks().add(link); toRemove.add(field.getKey()); - toRemove.add(setInline(field.getKey(), jsonNavigationLink, tree, codec, link)); + toRemove.add(setInline(field.getKey(), jsonNavigationLink, tree, codec, linked)); } else if (field.getKey().endsWith(jsonAssociationLink)) { final LinkImpl link = new LinkImpl(); link.setTitle(getTitle(field)); @@ -205,7 +203,7 @@ public class JsonDeserializer implements ODataDeserializer { link.setType(ODataLinkType.ENTITY_NAVIGATION.toString()); linked.getNavigationLinks().add(link); - toRemove.add(setInline(field.getKey(), suffix, tree, codec, link)); + toRemove.add(setInline(field.getKey(), suffix, tree, codec, linked)); } else if (field.getValue().isArray()) { for (final Iterator<JsonNode> itor = field.getValue().elements(); itor.hasNext();) { final JsonNode node = itor.next(); @@ -216,7 +214,7 @@ public class JsonDeserializer implements ODataDeserializer { link.setHref(node.asText()); link.setType(ODataLinkType.ENTITY_SET_NAVIGATION.toString()); linked.getNavigationLinks().add(link); - toRemove.add(setInline(field.getKey(), Constants.JSON_BIND_LINK_SUFFIX, tree, codec, link)); + toRemove.add(setInline(field.getKey(), Constants.JSON_BIND_LINK_SUFFIX, tree, codec, linked)); } } toRemove.add(field.getKey()); http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/0e5da552/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonEntityDeserializer.java ---------------------------------------------------------------------- diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonEntityDeserializer.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonEntityDeserializer.java index 5596fb3..f229401 100644 --- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonEntityDeserializer.java +++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonEntityDeserializer.java @@ -165,7 +165,7 @@ public class JsonEntityDeserializer extends JsonDeserializer { } toRemove.add(field.getKey()); - toRemove.add(setInline(field.getKey(), getJSONAnnotation(jsonMediaEditLink), tree, parser.getCodec(), link)); + toRemove.add(setInline(field.getKey(), getJSONAnnotation(jsonMediaEditLink), tree, parser.getCodec(), entity)); } else if (field.getKey().endsWith(getJSONAnnotation(jsonMediaContentType))) { final String linkTitle = getTitle(field); for (Link link : entity.getMediaEditLinks()) { http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/0e5da552/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonEntitySerializer.java ---------------------------------------------------------------------- diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonEntitySerializer.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonEntitySerializer.java index b6a32ef..cd9865c 100644 --- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonEntitySerializer.java +++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonEntitySerializer.java @@ -109,12 +109,12 @@ public class JsonEntitySerializer extends JsonSerializer { jgen.writeStringField(Constants.JSON_MEDIA_EDIT_LINK, link.getHref()); } - if (link.getInlineEntity() != null) { - jgen.writeObjectField(link.getTitle(), link.getInlineEntity()); + if (entity.getInlineEntity(link.getTitle()) != null) { + jgen.writeObjectField(link.getTitle(), entity.getInlineEntity(link.getTitle())); } - if (link.getInlineEntitySet() != null) { + if (entity.getInlineEntitySet(link.getTitle()) != null) { jgen.writeArrayFieldStart(link.getTitle()); - for (Entity subEntry : link.getInlineEntitySet().getEntities()) { + for (Entity subEntry : entity.getInlineEntitySet(link.getTitle()).getEntities()) { jgen.writeObject(subEntry); } jgen.writeEndArray(); http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/0e5da552/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonSerializer.java ---------------------------------------------------------------------- diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonSerializer.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonSerializer.java index f054be5..ad100fb 100755 --- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonSerializer.java +++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonSerializer.java @@ -181,13 +181,13 @@ public class JsonSerializer implements ODataSerializer { } } - if (link.getInlineEntity() != null) { + if (linked.getInlineEntity(link.getTitle()) != null) { jgen.writeFieldName(link.getTitle()); - new JsonEntitySerializer(serverMode).doSerialize(link.getInlineEntity(), jgen); - } else if (link.getInlineEntitySet() != null) { + new JsonEntitySerializer(serverMode).doSerialize(linked.getInlineEntity(link.getTitle()), jgen); + } else if (linked.getInlineEntitySet(link.getTitle()) != null) { jgen.writeArrayFieldStart(link.getTitle()); final JsonEntitySerializer entitySerializer = new JsonEntitySerializer(serverMode); - for (Entity subEntry : link.getInlineEntitySet().getEntities()) { + for (Entity subEntry : linked.getInlineEntitySet(link.getTitle()).getEntities()) { entitySerializer.doSerialize(subEntry, jgen); } jgen.writeEndArray(); @@ -235,13 +235,13 @@ public class JsonSerializer implements ODataSerializer { link.getHref()); } - if (link.getInlineEntity() != null) { + if (linked.getInlineEntity(link.getTitle()) != null) { jgen.writeFieldName(link.getTitle()); - new JsonEntitySerializer(serverMode).doSerialize(link.getInlineEntity(), jgen); - } else if (link.getInlineEntitySet() != null) { + new JsonEntitySerializer(serverMode).doSerialize(linked.getInlineEntity(link.getTitle()), jgen); + } else if (linked.getInlineEntitySet(link.getTitle()) != null) { jgen.writeArrayFieldStart(link.getTitle()); JsonEntitySerializer entitySerializer = new JsonEntitySerializer(serverMode); - for (Entity subEntry : link.getInlineEntitySet().getEntities()) { + for (Entity subEntry : linked.getInlineEntitySet(link.getTitle()).getEntities()) { entitySerializer.doSerialize(subEntry, jgen); } jgen.writeEndArray(); http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/0e5da552/lib/commons-core/src/test/java/org/apache/olingo/commons/core/serialization/AtomDeserializerTest.java ---------------------------------------------------------------------- diff --git a/lib/commons-core/src/test/java/org/apache/olingo/commons/core/serialization/AtomDeserializerTest.java b/lib/commons-core/src/test/java/org/apache/olingo/commons/core/serialization/AtomDeserializerTest.java index 062f46b..4a5de7b 100644 --- a/lib/commons-core/src/test/java/org/apache/olingo/commons/core/serialization/AtomDeserializerTest.java +++ b/lib/commons-core/src/test/java/org/apache/olingo/commons/core/serialization/AtomDeserializerTest.java @@ -34,294 +34,295 @@ public class AtomDeserializerTest { @Test public void emptyInlineEntityOlingo540() throws Exception { - final String content = "" + + final String content = "" + "<entry xmlns=\"http://www.w3.org/2005/Atom\" " - + "xmlns:data=\"http://docs.oasis-open.org/odata/ns/data\" " - + "xmlns:metadata=\"http://docs.oasis-open.org/odata/ns/metadata\" " + + "xmlns:data=\"http://docs.oasis-open.org/odata/ns/data\" " + + "xmlns:metadata=\"http://docs.oasis-open.org/odata/ns/metadata\" " + "xmlns:georss=\"http://www.georss.org/georss\" xmlns:gml=\"http://www.opengis.net/gml\" " - + "xml:base=\"http://services.odata.org/V3/OData/OData.svc/\">\r\n" + - " <id>http://services.odata.org/V3/OData/OData.svc/Products(3)</id>\r\n" + + + "xml:base=\"http://services.odata.org/V3/OData/OData.svc/\">\r\n" + + " <id>http://services.odata.org/V3/OData/OData.svc/Products(3)</id>\r\n" + " <category term=\"ODataDemo.Product\" " - + "scheme=\"http://docs.oasis-open.org/odata/ns/scheme\" />\r\n" + - " \r\n" + - " <link rel=\"edit\" title=\"Product\" href=\"Products\" />\r\n" + + + "scheme=\"http://docs.oasis-open.org/odata/ns/scheme\" />\r\n" + + " \r\n" + + " <link rel=\"edit\" title=\"Product\" href=\"Products\" />\r\n" + " <link rel=\"http://docs.oasis-open.org/odata/ns/related/Categories\" " - + "type=\"application/atom+xml;type=feed\" title=\"Categories\" href=\"Products(3)/Categories\" />\r\n" + + + "type=\"application/atom+xml;type=feed\" title=\"Categories\" href=\"Products(3)/Categories\" />\r\n" + " <link rel=\"http://docs.oasis-open.org/odata/ns/related/Supplier\" " - + "type=\"application/atom+xml;type=entry\" title=\"Supplier\" href=\"Products(3)/Supplier\">\r\n" + - " <metadata:inline>\r\n" + - " </metadata:inline>\r\n" + - " </link>\r\n" + + + "type=\"application/atom+xml;type=entry\" title=\"Supplier\" href=\"Products(3)/Supplier\">\r\n" + + " <metadata:inline>\r\n" + + " </metadata:inline>\r\n" + + " </link>\r\n" + " <link rel=\"http://docs.oasis-open.org/odata/ns/related/ProductDetail\"" + " type=\"application/atom+xml;type=entry\" title=\"ProductDetail\" " - + "href=\"Products(3)/ProductDetail\" />\r\n" + - " <title type=\"text\">Havina Cola</title>\r\n" + - " <summary type=\"text\">The Original Key Lime Cola</summary>\r\n" + - " <updated>2015-01-26T08:57:02Z</updated>\r\n" + - " <author>\r\n" + - " <name />\r\n" + - " </author>\r\n" + + + "href=\"Products(3)/ProductDetail\" />\r\n" + + " <title type=\"text\">Havina Cola</title>\r\n" + + " <summary type=\"text\">The Original Key Lime Cola</summary>\r\n" + + " <updated>2015-01-26T08:57:02Z</updated>\r\n" + + " <author>\r\n" + + " <name />\r\n" + + " </author>\r\n" + " <link rel=\"http://docs.oasis-open.org/odata/ns/relatedlinks/Categories\" " - + "type=\"application/xml\" title=\"Categories\" href=\"Products(3)/$links/Categories\" />\r\n" + + + "type=\"application/xml\" title=\"Categories\" href=\"Products(3)/$links/Categories\" />\r\n" + " <link rel=\"http://docs.oasis-open.org/odata/ns/relatedlinks/Supplier\" " - + "type=\"application/xml\" title=\"Supplier\" href=\"Products(3)/$links/Supplier\" />\r\n" + + + "type=\"application/xml\" title=\"Supplier\" href=\"Products(3)/$links/Supplier\" />\r\n" + " <link rel=\"http://docs.oasis-open.org/odata/ns/relatedlinks/ProductDetail\"" - + " type=\"application/xml\" title=\"ProductDetail\" href=\"Products(3)/$links/ProductDetail\" />\r\n" + - " <content type=\"application/xml\">\r\n" + - " <metadata:properties>\r\n" + - " <data:ID metadata:type=\"Edm.Int32\">3</data:ID>\r\n" + - " <data:ReleaseDate metadata:type=\"Edm.DateTime\">2005-10-01T00:00:00</data:ReleaseDate>\r\n" + - " <data:DiscontinuedDate metadata:type=\"Edm.DateTime\">2006-10-01T00:00:00</data:DiscontinuedDate>\r\n" + - " <data:Rating metadata:type=\"Edm.Int16\">3</data:Rating>\r\n" + - " <data:Price metadata:type=\"Edm.Double\">19.9</data:Price>\r\n" + - " </metadata:properties>\r\n" + - " </content>\r\n" + + + " type=\"application/xml\" title=\"ProductDetail\" href=\"Products(3)/$links/ProductDetail\" />\r\n" + + " <content type=\"application/xml\">\r\n" + + " <metadata:properties>\r\n" + + " <data:ID metadata:type=\"Edm.Int32\">3</data:ID>\r\n" + + " <data:ReleaseDate metadata:type=\"Edm.DateTime\">2005-10-01T00:00:00</data:ReleaseDate>\r\n" + + " <data:DiscontinuedDate metadata:type=\"Edm.DateTime\">2006-10-01T00:00:00</data:DiscontinuedDate>\r\n" + + " <data:Rating metadata:type=\"Edm.Int16\">3</data:Rating>\r\n" + + " <data:Price metadata:type=\"Edm.Double\">19.9</data:Price>\r\n" + + " </metadata:properties>\r\n" + + " </content>\r\n" + " </entry>"; final AtomDeserializer deserializer = new AtomDeserializer(); final InputStream in = new ByteArrayInputStream(content.getBytes("UTF-8")); final ResWrap<Entity> entity = deserializer.toEntity(in); - + assertNotNull(entity); - assertNull(entity.getPayload().getNavigationLink("Supplier").getInlineEntitySet()); + assertNull(entity.getPayload().getInlineEntitySet("Categories")); + assertNull(entity.getPayload().getInlineEntity("Supplier")); } - + @Test public void filledInlineEntity() throws Exception { - final String content = "" + + final String content = "" + "<entry xmlns=\"http://www.w3.org/2005/Atom\" " + "xmlns:data=\"http://docs.oasis-open.org/odata/ns/data\" " + "xmlns:metadata=\"http://docs.oasis-open.org/odata/ns/metadata\" " + "xmlns:georss=\"http://www.georss.org/georss\" " + "xmlns:gml=\"http://www.opengis.net/gml\" " - + "xml:base=\"http://services.odata.org/V4/OData/OData.svc/\">\r\n" + - " <id>http://services.odata.org/V4/OData/OData.svc/Products(3)</id>\r\n" + + + "xml:base=\"http://services.odata.org/V4/OData/OData.svc/\">\r\n" + + " <id>http://services.odata.org/V4/OData/OData.svc/Products(3)</id>\r\n" + " <category term=\"#ODataDemo.Product\" " - + "scheme=\"http://docs.oasis-open.org/odata/ns/scheme\" />\r\n" + - " \r\n" + - " <link rel=\"edit\" title=\"Product\" href=\"Products\" />\r\n" + + + "scheme=\"http://docs.oasis-open.org/odata/ns/scheme\" />\r\n" + + " \r\n" + + " <link rel=\"edit\" title=\"Product\" href=\"Products\" />\r\n" + " <link rel=\"http://docs.oasis-open.org/odata/ns/related/Categories\" " - + "type=\"application/atom+xml;type=feed\" title=\"Categories\" href=\"Products(3)/Categories\" />\r\n" + + + "type=\"application/atom+xml;type=feed\" title=\"Categories\" href=\"Products(3)/Categories\" />\r\n" + " <link rel=\"http://docs.oasis-open.org/odata/ns/related/Supplier\" " - + "type=\"application/atom+xml;type=entry\" title=\"Supplier\" href=\"Products(3)/Supplier\">\r\n" + - " <metadata:inline>\r\n" + - " <entry>\r\n" + - " <id>http://services.odata.org/V4/OData/OData.svc/Suppliers(0)</id>\r\n" + + + "type=\"application/atom+xml;type=entry\" title=\"Supplier\" href=\"Products(3)/Supplier\">\r\n" + + " <metadata:inline>\r\n" + + " <entry>\r\n" + + " <id>http://services.odata.org/V4/OData/OData.svc/Suppliers(0)</id>\r\n" + " <category term=\"ODataDemo.Supplier\" " - + "scheme=\"http://docs.oasis-open.org/odata/ns/scheme\" />\r\n" + - " <link rel=\"edit\" title=\"Supplier\" href=\"Suppliers(0)\" />\r\n" + + + "scheme=\"http://docs.oasis-open.org/odata/ns/scheme\" />\r\n" + + " <link rel=\"edit\" title=\"Supplier\" href=\"Suppliers(0)\" />\r\n" + " <link rel=\"http://docs.oasis-open.org/odata/ns/related/Products\" " - + "type=\"application/atom+xml;type=feed\" title=\"Products\" href=\"Suppliers(0)/Products\" />\r\n" + - " <title type=\"text\">Exotic Liquids</title>\r\n" + - " <updated>2015-01-26T08:57:02Z</updated>\r\n" + - " <author>\r\n" + - " <name />\r\n" + - " </author>\r\n" + + + "type=\"application/atom+xml;type=feed\" title=\"Products\" href=\"Suppliers(0)/Products\" />\r\n" + + " <title type=\"text\">Exotic Liquids</title>\r\n" + + " <updated>2015-01-26T08:57:02Z</updated>\r\n" + + " <author>\r\n" + + " <name />\r\n" + + " </author>\r\n" + " <link rel=\"http://docs.oasis-open.org/odata/ns/relatedlinks/Products\" " - + "type=\"application/xml\" title=\"Products\" href=\"Suppliers(0)/$links/Products\" />\r\n" + - " <content type=\"application/xml\">\r\n" + - " <metadata:properties>\r\n" + - " <data:ID metadata:type=\"Edm.Int32\">0</data:ID>\r\n" + - " <data:Name>Exotic Liquids</data:Name>\r\n" + - " <data:Address metadata:type=\"ODataDemo.Address\">\r\n" + - " <data:Street>NE 228th</data:Street>\r\n" + - " <data:City>Sammamish</data:City>\r\n" + - " <data:State>WA</data:State>\r\n" + - " <data:ZipCode>98074</data:ZipCode>\r\n" + - " <data:Country>USA</data:Country>\r\n" + - " </data:Address>\r\n" + - " <data:Location metadata:type=\"Edm.GeographyPoint\">\r\n" + - " <gml:Point gml:srsName=\"http://www.opengis.net/def/crs/EPSG/0/4326\">\r\n" + - " <gml:pos>47.6316604614258 -122.03547668457</gml:pos>\r\n" + - " </gml:Point>\r\n" + - " </data:Location>\r\n" + - " <data:Concurrency metadata:type=\"Edm.Int32\">0</data:Concurrency>\r\n" + - " </metadata:properties>\r\n" + - " </content>\r\n" + - " </entry>" + - " </metadata:inline>\r\n" + - " </link>\r\n" + + + "type=\"application/xml\" title=\"Products\" href=\"Suppliers(0)/$links/Products\" />\r\n" + + " <content type=\"application/xml\">\r\n" + + " <metadata:properties>\r\n" + + " <data:ID metadata:type=\"Edm.Int32\">0</data:ID>\r\n" + + " <data:Name>Exotic Liquids</data:Name>\r\n" + + " <data:Address metadata:type=\"ODataDemo.Address\">\r\n" + + " <data:Street>NE 228th</data:Street>\r\n" + + " <data:City>Sammamish</data:City>\r\n" + + " <data:State>WA</data:State>\r\n" + + " <data:ZipCode>98074</data:ZipCode>\r\n" + + " <data:Country>USA</data:Country>\r\n" + + " </data:Address>\r\n" + + " <data:Location metadata:type=\"Edm.GeographyPoint\">\r\n" + + " <gml:Point gml:srsName=\"http://www.opengis.net/def/crs/EPSG/0/4326\">\r\n" + + " <gml:pos>47.6316604614258 -122.03547668457</gml:pos>\r\n" + + " </gml:Point>\r\n" + + " </data:Location>\r\n" + + " <data:Concurrency metadata:type=\"Edm.Int32\">0</data:Concurrency>\r\n" + + " </metadata:properties>\r\n" + + " </content>\r\n" + + " </entry>" + + " </metadata:inline>\r\n" + + " </link>\r\n" + " <link rel=\"http://docs.oasis-open.org/odata/ns/related/ProductDetail\" " + "type=\"application/atom+xml;type=entry\" " - + "title=\"ProductDetail\" href=\"Products(3)/ProductDetail\" />\r\n" + - " <title type=\"text\">Havina Cola</title>\r\n" + - " <summary type=\"text\">The Original Key Lime Cola</summary>\r\n" + - " <updated>2015-01-26T08:57:02Z</updated>\r\n" + - " <author>\r\n" + - " <name />\r\n" + - " </author>\r\n" + + + "title=\"ProductDetail\" href=\"Products(3)/ProductDetail\" />\r\n" + + " <title type=\"text\">Havina Cola</title>\r\n" + + " <summary type=\"text\">The Original Key Lime Cola</summary>\r\n" + + " <updated>2015-01-26T08:57:02Z</updated>\r\n" + + " <author>\r\n" + + " <name />\r\n" + + " </author>\r\n" + " <link rel=\"http://docs.oasis-open.org/odata/ns/relatedlinks/Categories\" " - + "type=\"application/xml\" title=\"Categories\" href=\"Products(3)/$links/Categories\" />\r\n" + + + "type=\"application/xml\" title=\"Categories\" href=\"Products(3)/$links/Categories\" />\r\n" + " <link rel=\"http://docs.oasis-open.org/odata/ns/relatedlinks/Supplier\" " - + "type=\"application/xml\" title=\"Supplier\" href=\"Products(3)/$links/Supplier\" />\r\n" + + + "type=\"application/xml\" title=\"Supplier\" href=\"Products(3)/$links/Supplier\" />\r\n" + " <link rel=\"http://docs.oasis-open.org/odata/ns/relatedlinks/ProductDetail\" " - + "type=\"application/xml\" title=\"ProductDetail\" href=\"Products(3)/$links/ProductDetail\" />\r\n" + - " <content type=\"application/xml\">\r\n" + - " <metadata:properties>\r\n" + - " <data:ID metadata:type=\"Edm.Int32\">3</data:ID>\r\n" + - " <data:ReleaseDate metadata:type=\"Edm.DateTime\">2005-10-01T00:00:00</data:ReleaseDate>\r\n" + - " <data:DiscontinuedDate metadata:type=\"Edm.DateTime\">2006-10-01T00:00:00</data:DiscontinuedDate>\r\n" + - " <data:Rating metadata:type=\"Edm.Int16\">3</data:Rating>\r\n" + - " <data:Price metadata:type=\"Edm.Double\">19.9</data:Price>\r\n" + - " </metadata:properties>\r\n" + - " </content>\r\n" + + + "type=\"application/xml\" title=\"ProductDetail\" href=\"Products(3)/$links/ProductDetail\" />\r\n" + + " <content type=\"application/xml\">\r\n" + + " <metadata:properties>\r\n" + + " <data:ID metadata:type=\"Edm.Int32\">3</data:ID>\r\n" + + " <data:ReleaseDate metadata:type=\"Edm.DateTime\">2005-10-01T00:00:00</data:ReleaseDate>\r\n" + + " <data:DiscontinuedDate metadata:type=\"Edm.DateTime\">2006-10-01T00:00:00</data:DiscontinuedDate>\r\n" + + " <data:Rating metadata:type=\"Edm.Int16\">3</data:Rating>\r\n" + + " <data:Price metadata:type=\"Edm.Double\">19.9</data:Price>\r\n" + + " </metadata:properties>\r\n" + + " </content>\r\n" + " </entry>"; final AtomDeserializer deserializer = new AtomDeserializer(); final InputStream in = new ByteArrayInputStream(content.getBytes("UTF-8")); final ResWrap<Entity> entity = deserializer.toEntity(in); - + assertNotNull(entity); - final Entity inlineEntity = entity.getPayload().getNavigationLink("Supplier").getInlineEntity(); + final Entity inlineEntity = entity.getPayload().getInlineEntity("Supplier"); assertNotNull(inlineEntity); - + assertEquals(new Integer(0), inlineEntity.getProperty("ID").getValue()); assertEquals("Exotic Liquids", inlineEntity.getProperty("Name").getValue()); } - + @Test public void emptyInlineEntityCollection() throws Exception { - final String content = "" + + final String content = "" + "<entry xmlns=\"http://www.w3.org/2005/Atom\" " + "xmlns:data=\"http://docs.oasis-open.org/odata/ns/data\" " + "xmlns:metadata=\"http://docs.oasis-open.org/odata/ns/metadata\" " + "xmlns:georss=\"http://www.georss.org/georss\" xmlns:gml=\"http://www.opengis.net/gml\" " - + "xml:base=\"http://services.odata.org/V3/OData/OData.svc/\">\r\n" + - " <id>http://services.odata.org/V3/OData/OData.svc/Products(3)</id>\r\n" + + + "xml:base=\"http://services.odata.org/V3/OData/OData.svc/\">\r\n" + + " <id>http://services.odata.org/V3/OData/OData.svc/Products(3)</id>\r\n" + " <category term=\"ODataDemo.Product\" " - + "scheme=\"http://docs.oasis-open.org/odata/ns/scheme\" />\r\n" + - " \r\n" + - " <link rel=\"edit\" title=\"Product\" href=\"Products(3)\" />\r\n" + + + "scheme=\"http://docs.oasis-open.org/odata/ns/scheme\" />\r\n" + + " \r\n" + + " <link rel=\"edit\" title=\"Product\" href=\"Products(3)\" />\r\n" + " <link rel=\"http://docs.oasis-open.org/odata/ns/related/Categories\" " - + "type=\"application/atom+xml;type=feed\" title=\"Categories\" href=\"Products(3)/Categories\" />\r\n" + + + "type=\"application/atom+xml;type=feed\" title=\"Categories\" href=\"Products(3)/Categories\" />\r\n" + " <link rel=\"http://docs.oasis-open.org/odata/ns/related/Supplier\" " - + "type=\"application/atom+xml;type=feed\" title=\"Supplier\" href=\"Products(3)/Supplier\">\r\n" + - " <metadata:inline>\r\n" + - " <feed>\r\n" + - " </feed>\r\n" + - " </metadata:inline>\r\n" + - " </link>\r\n" + + + "type=\"application/atom+xml;type=feed\" title=\"Supplier\" href=\"Products(3)/Supplier\">\r\n" + + " <metadata:inline>\r\n" + + " <feed>\r\n" + + " </feed>\r\n" + + " </metadata:inline>\r\n" + + " </link>\r\n" + " <link rel=\"http://docs.oasis-open.org/odata/ns/related/ProductDetail\" " + "type=\"application/atom+xml;type=entry\" " - + "title=\"ProductDetail\" href=\"Products(3)/ProductDetail\" />\r\n" + - " <title type=\"text\">Havina Cola</title>\r\n" + - " <summary type=\"text\">The Original Key Lime Cola</summary>\r\n" + - " <updated>2015-01-26T08:57:02Z</updated>\r\n" + - " <author>\r\n" + - " <name />\r\n" + - " </author>\r\n" + + + "title=\"ProductDetail\" href=\"Products(3)/ProductDetail\" />\r\n" + + " <title type=\"text\">Havina Cola</title>\r\n" + + " <summary type=\"text\">The Original Key Lime Cola</summary>\r\n" + + " <updated>2015-01-26T08:57:02Z</updated>\r\n" + + " <author>\r\n" + + " <name />\r\n" + + " </author>\r\n" + " <link rel=\"http://docs.oasis-open.org/odata/ns/relatedlinks/Categories\" " - + "type=\"application/xml\" title=\"Categories\" href=\"Products(3)/$links/Categories\" />\r\n" + + + "type=\"application/xml\" title=\"Categories\" href=\"Products(3)/$links/Categories\" />\r\n" + " <link rel=\"http://docs.oasis-open.org/odata/ns/relatedlinks/Supplier\" " - + "type=\"application/xml\" title=\"Supplier\" href=\"Products(3)/$links/Supplier\" />\r\n" + + + "type=\"application/xml\" title=\"Supplier\" href=\"Products(3)/$links/Supplier\" />\r\n" + " <link rel=\"http://docs.oasis-open.org/odata/ns/relatedlinks/ProductDetail\" " - + "type=\"application/xml\" title=\"ProductDetail\" href=\"Products(3)/$links/ProductDetail\" />\r\n" + - " <content type=\"application/xml\">\r\n" + - " <metadata:properties>\r\n" + - " <data:ID metadata:type=\"Edm.Int32\">3</data:ID>\r\n" + - " <data:ReleaseDate metadata:type=\"Edm.DateTime\">2005-10-01T00:00:00</data:ReleaseDate>\r\n" + - " <data:DiscontinuedDate metadata:type=\"Edm.DateTime\">2006-10-01T00:00:00</data:DiscontinuedDate>\r\n" + - " <data:Rating metadata:type=\"Edm.Int16\">3</data:Rating>\r\n" + - " <data:Price metadata:type=\"Edm.Double\">19.9</data:Price>\r\n" + - " </metadata:properties>\r\n" + - " </content>\r\n" + + + "type=\"application/xml\" title=\"ProductDetail\" href=\"Products(3)/$links/ProductDetail\" />\r\n" + + " <content type=\"application/xml\">\r\n" + + " <metadata:properties>\r\n" + + " <data:ID metadata:type=\"Edm.Int32\">3</data:ID>\r\n" + + " <data:ReleaseDate metadata:type=\"Edm.DateTime\">2005-10-01T00:00:00</data:ReleaseDate>\r\n" + + " <data:DiscontinuedDate metadata:type=\"Edm.DateTime\">2006-10-01T00:00:00</data:DiscontinuedDate>\r\n" + + " <data:Rating metadata:type=\"Edm.Int16\">3</data:Rating>\r\n" + + " <data:Price metadata:type=\"Edm.Double\">19.9</data:Price>\r\n" + + " </metadata:properties>\r\n" + + " </content>\r\n" + " </entry>"; final AtomDeserializer deserializer = new AtomDeserializer(); final InputStream in = new ByteArrayInputStream(content.getBytes("UTF-8")); final ResWrap<Entity> entity = deserializer.toEntity(in); - + assertNotNull(entity); - final EntitySet inlineEntitySet = entity.getPayload().getNavigationLink("Supplier").getInlineEntitySet(); + final EntitySet inlineEntitySet = entity.getPayload().getInlineEntitySet("Supplier"); assertNotNull(inlineEntitySet); assertEquals(0, inlineEntitySet.getEntities().size()); } - + @Test public void filledInlineEntityCollection() throws Exception { - final String content = "" + + final String content = "" + "<entry xmlns=\"http://www.w3.org/2005/Atom\" " + "xmlns:data=\"http://docs.oasis-open.org/odata/ns/data\" " + "xmlns:metadata=\"http://docs.oasis-open.org/odata/ns/metadata\" " + "xmlns:georss=\"http://www.georss.org/georss\" xmlns:gml=\"http://www.opengis.net/gml\" " - + "xml:base=\"http://services.odata.org/V3/OData/OData.svc/\">\r\n" + - " <id>http://services.odata.org/V3/OData/OData.svc/Products(3)</id>\r\n" + + + "xml:base=\"http://services.odata.org/V3/OData/OData.svc/\">\r\n" + + " <id>http://services.odata.org/V3/OData/OData.svc/Products(3)</id>\r\n" + " <category term=\"ODataDemo.Product\" " - + "scheme=\"http://docs.oasis-open.org/odata/ns/scheme\" />\r\n" + - " \r\n" + - " <link rel=\"edit\" title=\"Product\" href=\"Products(3)\" />\r\n" + + + "scheme=\"http://docs.oasis-open.org/odata/ns/scheme\" />\r\n" + + " \r\n" + + " <link rel=\"edit\" title=\"Product\" href=\"Products(3)\" />\r\n" + " <link rel=\"http://docs.oasis-open.org/odata/ns/related/Categories\" " - + "type=\"application/atom+xml;type=feed\" title=\"Categories\" href=\"Products(3)/Categories\" />\r\n" + + + "type=\"application/atom+xml;type=feed\" title=\"Categories\" href=\"Products(3)/Categories\" />\r\n" + " <link rel=\"http://docs.oasis-open.org/odata/ns/related/Supplier\" " - + "type=\"application/atom+xml;type=feed\" title=\"Supplier\" href=\"Products(3)/Supplier\">\r\n" + - " <metadata:inline>\r\n" + - " <feed>\r\n" + - " <entry>\r\n" + - " <id>http://services.odata.org/V3/OData/OData.svc/Suppliers(0)</id>\r\n" + + + "type=\"application/atom+xml;type=feed\" title=\"Supplier\" href=\"Products(3)/Supplier\">\r\n" + + " <metadata:inline>\r\n" + + " <feed>\r\n" + + " <entry>\r\n" + + " <id>http://services.odata.org/V3/OData/OData.svc/Suppliers(0)</id>\r\n" + " <category term=\"ODataDemo.Supplier\" " - + "scheme=\"http://docs.oasis-open.org/odata/ns/scheme\" />\r\n" + - " <link rel=\"edit\" title=\"Supplier\" href=\"Suppliers(0)\" />\r\n" + + + "scheme=\"http://docs.oasis-open.org/odata/ns/scheme\" />\r\n" + + " <link rel=\"edit\" title=\"Supplier\" href=\"Suppliers(0)\" />\r\n" + " <link rel=\"http://docs.oasis-open.org/odata/ns/related/Products\" " - + "type=\"application/atom+xml;type=feed\" title=\"Products\" href=\"Suppliers(0)/Products\" />\r\n" + - " <title type=\"text\">Exotic Liquids</title>\r\n" + - " <updated>2015-01-26T08:57:02Z</updated>\r\n" + - " <author>\r\n" + - " <name />\r\n" + - " </author>\r\n" + + + "type=\"application/atom+xml;type=feed\" title=\"Products\" href=\"Suppliers(0)/Products\" />\r\n" + + " <title type=\"text\">Exotic Liquids</title>\r\n" + + " <updated>2015-01-26T08:57:02Z</updated>\r\n" + + " <author>\r\n" + + " <name />\r\n" + + " </author>\r\n" + " <link rel=\"http://docs.oasis-open.org/odata/ns/relatedlinks/Products\" " - + "type=\"application/xml\" title=\"Products\" href=\"Suppliers(0)/$links/Products\" />\r\n" + - " <content type=\"application/xml\">\r\n" + - " <metadata:properties>\r\n" + - " <data:ID metadata:type=\"Edm.Int32\">0</data:ID>\r\n" + - " <data:Name>Exotic Liquids</data:Name>\r\n" + - " <data:Address metadata:type=\"ODataDemo.Address\">\r\n" + - " <data:Street>NE 228th</data:Street>\r\n" + - " <data:City>Sammamish</data:City>\r\n" + - " <data:State>WA</data:State>\r\n" + - " <data:ZipCode>98074</data:ZipCode>\r\n" + - " <data:Country>USA</data:Country>\r\n" + - " </data:Address>\r\n" + - " <data:Location metadata:type=\"Edm.GeographyPoint\">\r\n" + - " <gml:Point gml:srsName=\"http://www.opengis.net/def/crs/EPSG/0/4326\">\r\n" + - " <gml:pos>47.6316604614258 -122.03547668457</gml:pos>\r\n" + - " </gml:Point>\r\n" + - " </data:Location>\r\n" + - " <data:Concurrency metadata:type=\"Edm.Int32\">0</data:Concurrency>\r\n" + - " </metadata:properties>\r\n" + - " </content>\r\n" + + + "type=\"application/xml\" title=\"Products\" href=\"Suppliers(0)/$links/Products\" />\r\n" + + " <content type=\"application/xml\">\r\n" + + " <metadata:properties>\r\n" + + " <data:ID metadata:type=\"Edm.Int32\">0</data:ID>\r\n" + + " <data:Name>Exotic Liquids</data:Name>\r\n" + + " <data:Address metadata:type=\"ODataDemo.Address\">\r\n" + + " <data:Street>NE 228th</data:Street>\r\n" + + " <data:City>Sammamish</data:City>\r\n" + + " <data:State>WA</data:State>\r\n" + + " <data:ZipCode>98074</data:ZipCode>\r\n" + + " <data:Country>USA</data:Country>\r\n" + + " </data:Address>\r\n" + + " <data:Location metadata:type=\"Edm.GeographyPoint\">\r\n" + + " <gml:Point gml:srsName=\"http://www.opengis.net/def/crs/EPSG/0/4326\">\r\n" + + " <gml:pos>47.6316604614258 -122.03547668457</gml:pos>\r\n" + + " </gml:Point>\r\n" + + " </data:Location>\r\n" + + " <data:Concurrency metadata:type=\"Edm.Int32\">0</data:Concurrency>\r\n" + + " </metadata:properties>\r\n" + + " </content>\r\n" + " </entry>\r\n" + - " </feed>\r\n" + - " </metadata:inline>\r\n" + - " </link>\r\n" + + " </feed>\r\n" + + " </metadata:inline>\r\n" + + " </link>\r\n" + " <link rel=\"http://docs.oasis-open.org/odata/ns/related/ProductDetail\" " + "type=\"application/atom+xml;type=entry\" " - + "title=\"ProductDetail\" href=\"Products(3)/ProductDetail\" />\r\n" + - " <title type=\"text\">Havina Cola</title>\r\n" + - " <summary type=\"text\">The Original Key Lime Cola</summary>\r\n" + - " <updated>2015-01-26T08:57:02Z</updated>\r\n" + - " <author>\r\n" + - " <name />\r\n" + - " </author>\r\n" + + + "title=\"ProductDetail\" href=\"Products(3)/ProductDetail\" />\r\n" + + " <title type=\"text\">Havina Cola</title>\r\n" + + " <summary type=\"text\">The Original Key Lime Cola</summary>\r\n" + + " <updated>2015-01-26T08:57:02Z</updated>\r\n" + + " <author>\r\n" + + " <name />\r\n" + + " </author>\r\n" + " <link rel=\"http://docs.oasis-open.org/odata/ns/relatedlinks/Categories\" " - + "type=\"application/xml\" title=\"Categories\" href=\"Products(3)/$links/Categories\" />\r\n" + + + "type=\"application/xml\" title=\"Categories\" href=\"Products(3)/$links/Categories\" />\r\n" + " <link rel=\"http://docs.oasis-open.org/odata/ns/relatedlinks/Supplier\" " - + "type=\"application/xml\" title=\"Supplier\" href=\"Products(3)/$links/Supplier\" />\r\n" + + + "type=\"application/xml\" title=\"Supplier\" href=\"Products(3)/$links/Supplier\" />\r\n" + " <link rel=\"http://docs.oasis-open.org/odata/ns/relatedlinks/ProductDetail\" " - + "type=\"application/xml\" title=\"ProductDetail\" href=\"Products(3)/$links/ProductDetail\" />\r\n" + - " <content type=\"application/xml\">\r\n" + - " <metadata:properties>\r\n" + - " <data:ID metadata:type=\"Edm.Int32\">3</data:ID>\r\n" + - " <data:ReleaseDate metadata:type=\"Edm.DateTime\">2005-10-01T00:00:00</data:ReleaseDate>\r\n" + - " <data:DiscontinuedDate metadata:type=\"Edm.DateTime\">2006-10-01T00:00:00</data:DiscontinuedDate>\r\n" + - " <data:Rating metadata:type=\"Edm.Int16\">3</data:Rating>\r\n" + - " <data:Price metadata:type=\"Edm.Double\">19.9</data:Price>\r\n" + - " </metadata:properties>\r\n" + - " </content>\r\n" + + + "type=\"application/xml\" title=\"ProductDetail\" href=\"Products(3)/$links/ProductDetail\" />\r\n" + + " <content type=\"application/xml\">\r\n" + + " <metadata:properties>\r\n" + + " <data:ID metadata:type=\"Edm.Int32\">3</data:ID>\r\n" + + " <data:ReleaseDate metadata:type=\"Edm.DateTime\">2005-10-01T00:00:00</data:ReleaseDate>\r\n" + + " <data:DiscontinuedDate metadata:type=\"Edm.DateTime\">2006-10-01T00:00:00</data:DiscontinuedDate>\r\n" + + " <data:Rating metadata:type=\"Edm.Int16\">3</data:Rating>\r\n" + + " <data:Price metadata:type=\"Edm.Double\">19.9</data:Price>\r\n" + + " </metadata:properties>\r\n" + + " </content>\r\n" + " </entry>"; final AtomDeserializer deserializer = new AtomDeserializer(); final InputStream in = new ByteArrayInputStream(content.getBytes("UTF-8")); final ResWrap<Entity> entity = deserializer.toEntity(in); - + assertNotNull(entity); - final EntitySet inlineEntitySet = entity.getPayload().getNavigationLink("Supplier").getInlineEntitySet(); + final EntitySet inlineEntitySet = entity.getPayload().getInlineEntitySet("Supplier"); assertNotNull(inlineEntitySet); assertEquals(1, inlineEntitySet.getEntities().size()); }
