private void appendAtomMandatoryParts( final XMLStreamWriter writer, final EntityInfoAggregator eia, final Map<String, Object> data) throws EntityProviderException { try { writer.writeStartElement(FormatXml.ATOM_ID); location = properties.getServiceRoot().toASCIIString() + createSelfLink(eia, data, null); writer.writeCharacters(location); writer.writeEndElement(); writer.writeStartElement(FormatXml.ATOM_TITLE); writer.writeAttribute(FormatXml.ATOM_TYPE, FormatXml.ATOM_TEXT); EntityPropertyInfo titleInfo = eia.getTargetPathInfo(EdmTargetPath.SYNDICATION_TITLE); if (titleInfo != null) { EdmSimpleType st = (EdmSimpleType) titleInfo.getType(); Object object = data.get(titleInfo.getName()); String title = st.valueToString(object, EdmLiteralKind.DEFAULT, titleInfo.getFacets()); if (title != null) { writer.writeCharacters(title); } } else { writer.writeCharacters(eia.getEntitySetName()); } writer.writeEndElement(); writer.writeStartElement(FormatXml.ATOM_UPDATED); writer.writeCharacters(getUpdatedString(eia, data)); writer.writeEndElement(); } catch (XMLStreamException e) { throw new EntityProviderException(EntityProviderException.COMMON, e); } catch (EdmSimpleTypeException e) { throw new EntityProviderException(EntityProviderException.COMMON, e); } }
protected static String createSelfLink( final EntityInfoAggregator eia, final Map<String, Object> data, final String extension) throws EntityProviderException { StringBuilder sb = new StringBuilder(); if (!eia.isDefaultEntityContainer()) { sb.append(Encoder.encode(eia.getEntityContainerName())).append(Edm.DELIMITER); } sb.append(Encoder.encode(eia.getEntitySetName())); sb.append("(") .append(createEntryKey(eia, data)) .append(")") .append(extension == null ? "" : ("/" + extension)); return sb.toString(); }