in lib/client-core/src/main/java/org/apache/olingo/client/core/serialization/AtomDeserializer.java [623:743]
private Entity entity(final XMLEventReader reader, final StartElement start)
throws XMLStreamException, EdmPrimitiveTypeException {
final Entity entity;
if (entryRefQName.equals(start.getName())) {
entity = entityRef(start);
} else if (Constants.QNAME_ATOM_ELEM_ENTRY.equals(start.getName())) {
entity = new Entity();
final Attribute xmlBase = start.getAttributeByName(Constants.QNAME_ATTR_XML_BASE);
if (xmlBase != null) {
entity.setBaseURI(URI.create(xmlBase.getValue()));
}
final Attribute etag = start.getAttributeByName(etagQName);
if (etag != null) {
entity.setETag(etag.getValue());
}
boolean foundEndEntry = false;
while (reader.hasNext() && !foundEndEntry) {
final XMLEvent event = reader.nextEvent();
if (event.isStartElement()) {
if (Constants.QNAME_ATOM_ELEM_ID.equals(event.asStartElement().getName())) {
common(reader, event.asStartElement(), entity, "id");
} else if (Constants.QNAME_ATOM_ELEM_TITLE.equals(event.asStartElement().getName())) {
common(reader, event.asStartElement(), entity, "title");
} else if (Constants.QNAME_ATOM_ELEM_SUMMARY.equals(event.asStartElement().getName())) {
common(reader, event.asStartElement(), entity, "summary");
} else if (Constants.QNAME_ATOM_ELEM_UPDATED.equals(event.asStartElement().getName())) {
common(reader, event.asStartElement(), entity, "updated");
} else if (Constants.QNAME_ATOM_ELEM_CATEGORY.equals(event.asStartElement().getName())) {
final Attribute term = event.asStartElement().getAttributeByName(QName.valueOf(Constants.ATOM_ATTR_TERM));
if (term != null) {
entity.setType(new EdmTypeInfo.Builder().setTypeExpression(term.getValue()).build().internal());
}
} else if (Constants.QNAME_ATOM_ELEM_LINK.equals(event.asStartElement().getName())) {
final Link link = new Link();
final Attribute rel = event.asStartElement().getAttributeByName(QName.valueOf(Constants.ATTR_REL));
if (rel != null) {
link.setRel(rel.getValue());
}
final Attribute title = event.asStartElement().getAttributeByName(QName.valueOf(Constants.ATTR_TITLE));
if (title != null) {
link.setTitle(title.getValue());
}
final Attribute href = event.asStartElement().getAttributeByName(QName.valueOf(Constants.ATTR_HREF));
if (href != null) {
link.setHref(href.getValue());
}
final Attribute type = event.asStartElement().getAttributeByName(QName.valueOf(Constants.ATTR_TYPE));
if (type != null) {
link.setType(type.getValue());
}
if (Constants.SELF_LINK_REL.equals(link.getRel())) {
entity.setSelfLink(link);
} else if (Constants.EDIT_LINK_REL.equals(link.getRel())) {
entity.setEditLink(link);
} else if (Constants.EDITMEDIA_LINK_REL.equals(link.getRel())) {
final Attribute mediaETag = event.asStartElement().getAttributeByName(etagQName);
if (mediaETag != null) {
entity.setMediaETag(mediaETag.getValue());
}
} else if (link.getRel().startsWith(Constants.NS_NAVIGATION_LINK_REL)) {
entity.getNavigationLinks().add(link);
inline(reader, event.asStartElement(), link);
} else if (link.getRel().startsWith(Constants.NS_ASSOCIATION_LINK_REL)) {
entity.getAssociationLinks().add(link);
} else if (link.getRel().startsWith(Constants.NS_MEDIA_EDIT_LINK_REL) ||
link.getRel().startsWith(Constants.NS_MEDIA_READ_LINK_REL)) {
final Attribute metag = event.asStartElement().getAttributeByName(etagQName);
if (metag != null) {
link.setMediaETag(metag.getValue());
}
entity.getMediaEditLinks().add(link);
}
} else if (actionQName.equals(event.asStartElement().getName())) {
final Operation operation = new Operation();
final Attribute metadata =
event.asStartElement().getAttributeByName(QName.valueOf(Constants.ATTR_METADATA));
if (metadata != null) {
operation.setMetadataAnchor(metadata.getValue());
}
final Attribute title = event.asStartElement().getAttributeByName(QName.valueOf(Constants.ATTR_TITLE));
if (title != null) {
operation.setTitle(title.getValue());
}
final Attribute target = event.asStartElement().getAttributeByName(QName.valueOf(Constants.ATTR_TARGET));
if (target != null) {
operation.setTarget(URI.create(target.getValue()));
}
entity.getOperations().add(operation);
} else if (Constants.QNAME_ATOM_ELEM_CONTENT.equals(event.asStartElement().getName())) {
final Attribute type = event.asStartElement().getAttributeByName(QName.valueOf(Constants.ATTR_TYPE));
if (type == null || ContentType.APPLICATION_XML.toContentTypeString().equals(type.getValue())) {
properties(reader, skipBeforeFirstStartElement(reader), entity);
} else {
entity.setMediaContentType(type.getValue());
final Attribute src = event.asStartElement().getAttributeByName(QName.valueOf(Constants.ATOM_ATTR_SRC));
if (src != null) {
entity.setMediaContentSource(URI.create(src.getValue()));
}
}
} else if (propertiesQName.equals(event.asStartElement().getName())) {
properties(reader, event.asStartElement(), entity);
} else if (annotationQName.equals(event.asStartElement().getName())) {
entity.getAnnotations().add(annotation(reader, event.asStartElement()));
}
}
if (event.isEndElement() && start.getName().equals(event.asEndElement().getName())) {
foundEndEntry = true;
}
}
} else {
entity = null;
}
return entity;
}