private void writeNavigationLinks()

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();
          }
        });                
      }
    }   
  }