in lib/client-core/src/main/java/org/apache/olingo/client/core/serialization/AtomSerializer.java [214:307]
private void writeNavigationLinks(final XMLStreamWriter writer, final List<Link> links)
throws XMLStreamException, EdmPrimitiveTypeException {
final Map<String, List<String>> entitySetLinks = new HashMap<>();
for (Link link : links) {
if (link.getInlineEntity() != null || link.getInlineEntitySet() != null) {
writeLink(writer, link, new ExtraContent() {
@Override
public void write(XMLStreamWriter writer, Link link) throws XMLStreamException, EdmPrimitiveTypeException {
writer.writeStartElement(Constants.PREFIX_METADATA, Constants.ATOM_ELEM_INLINE, Constants.NS_METADATA);
if (link.getInlineEntity() != null) {
writer.writeStartElement(Constants.NS_ATOM, Constants.ATOM_ELEM_ENTRY);
entity(writer, link.getInlineEntity());
writer.writeEndElement();
}
if (link.getInlineEntitySet() != null) {
writer.writeStartElement(Constants.NS_ATOM, Constants.ATOM_ELEM_FEED);
entitySet(writer, link.getInlineEntitySet());
writer.writeEndElement();
}
writer.writeEndElement(); // inline
}
});
} else if (link.getBindingLink() != null) {
writeLink(writer, link, new ExtraContent() {
@Override
public void write(XMLStreamWriter writer, Link link) throws XMLStreamException, EdmPrimitiveTypeException {
writer.writeAttribute(Constants.ATTR_HREF, link.getBindingLink());
}
});
} else if (link.getBindingLinks() != null && !link.getBindingLinks().isEmpty()) {
writeLink(writer, link, new ExtraContent() {
@Override
public void write(XMLStreamWriter writer, Link link) throws XMLStreamException, EdmPrimitiveTypeException {
writer.writeStartElement(Constants.PREFIX_METADATA, Constants.ATOM_ELEM_INLINE, Constants.NS_METADATA);
writer.writeStartElement(Constants.NS_ATOM, Constants.ATOM_ELEM_FEED);
for (String binding:link.getBindingLinks()) {
Entity entity = new Entity();
entity.setId(URI.create(binding));
inlineEntityRef(writer, entity);
}
writer.writeEndElement(); //feed
writer.writeEndElement(); //inline
}
});
} else {
if (isEntitySetNavigation(link)) {
final List<String> uris;
if (entitySetLinks.containsKey(link.getTitle())) {
uris = entitySetLinks.get(link.getTitle());
} else {
uris = new ArrayList<>();
entitySetLinks.put(link.getTitle(), uris);
}
if (link.getHref() != null) {
uris.add(link.getHref());
}
} else {
writeLink(writer, link, new ExtraContent() {
@Override
public void write(XMLStreamWriter writer, Link link)
throws XMLStreamException, EdmPrimitiveTypeException {
}
});
}
}
}
for (Entry<String, List<String>> entry : entitySetLinks.entrySet()) {
final List<String>entitySetLink = entry.getValue();
if (!entitySetLink.isEmpty()) {
Link link = new Link();
link.setTitle(entry.getKey());
link.setType(Constants.ENTITY_SET_NAVIGATION_LINK_TYPE);
link.setRel(Constants.NS_NAVIGATION_LINK_REL+entry.getKey());
writeLink(writer, link, new ExtraContent() {
@Override
public void write(XMLStreamWriter writer, Link link) throws XMLStreamException, EdmPrimitiveTypeException {
writer.writeStartElement(Constants.PREFIX_METADATA, Constants.ATOM_ELEM_INLINE, Constants.NS_METADATA);
writer.writeStartElement(Constants.NS_ATOM, Constants.ATOM_ELEM_FEED);
for (String binding:entitySetLink) {
Entity entity = new Entity();
entity.setId(URI.create(binding));
inlineEntityRef(writer, entity);
}
writer.writeEndElement();
writer.writeEndElement();
}
});
}
}
}