private DataServicesAtomEntry parseDSAtomEntry( String etag, XMLEventReader2 reader, XMLEvent2 event) { DataServicesAtomEntry dsae = new DataServicesAtomEntry(); dsae.etag = etag; dsae.properties = Enumerable.create(parseProperties(reader, event.asStartElement())).toList(); return dsae; }
private AtomEntry parseEntry(XMLEventReader2 reader, StartElement2 entryElement) { String id = null; String categoryTerm = null; String categoryScheme = null; String title = null; String summary = null; String updated = null; String contentType = null; List<AtomLink> atomLinks = new ArrayList<AtomLink>(); String etag = getAttributeValueIfExists(entryElement, M_ETAG); AtomEntry rt = null; while (reader.hasNext()) { XMLEvent2 event = reader.nextEvent(); if (event.isEndElement() && event.asEndElement().getName().equals(entryElement.getName())) { rt.id = id; // http://localhost:8810/Oneoff01.svc/Comment(1) rt.title = title; rt.summary = summary; rt.updated = updated; rt.categoryScheme = categoryScheme; // http://schemas.microsoft.com/ado/2007/08/dataservices/scheme rt.categoryTerm = categoryTerm; // NorthwindModel.Customer rt.contentType = contentType; rt.atomLinks = atomLinks; if (rt instanceof DataServicesAtomEntry) { DataServicesAtomEntry dsae = (DataServicesAtomEntry) rt; String entitySetName = this.entitySetName; if (rt.id != null && rt.id.endsWith(")")) entitySetName = parseEntitySetName(rt.id); EdmEntitySet ees = metadata.findEdmEntitySet(entitySetName); if (ees == null) { // panic! could not determine the entity-set, is it a function? EdmFunctionImport efi = metadata.findEdmFunctionImport(entitySetName); if (efi != null) ees = efi.entitySet; } if (ees == null) throw new RuntimeException("Could not derive the entity-set for entry: " + rt.id); dsae.setOEntity(entityFromAtomEntry(metadata, ees, dsae, fcMapping)); } return rt; } if (isStartElement(event, ATOM_ID)) { id = reader.getElementText(); } else if (isStartElement(event, ATOM_TITLE)) { title = reader.getElementText(); } else if (isStartElement(event, ATOM_SUMMARY)) { summary = reader.getElementText(); } else if (isStartElement(event, ATOM_UPDATED)) { updated = reader.getElementText(); } else if (isStartElement(event, ATOM_CATEGORY)) { categoryTerm = getAttributeValueIfExists(event.asStartElement(), "term"); categoryScheme = getAttributeValueIfExists(event.asStartElement(), "scheme"); } else if (isStartElement(event, ATOM_LINK)) { AtomLink link = parseAtomLink(reader, event.asStartElement()); atomLinks.add(link); } else if (isStartElement(event, M_PROPERTIES)) { rt = parseDSAtomEntry(etag, reader, event); } else if (isStartElement(event, ATOM_CONTENT)) { contentType = getAttributeValueIfExists(event.asStartElement(), "type"); if (contentType.equals(MediaType.APPLICATION_XML)) { StartElement2 contentElement = event.asStartElement(); StartElement2 valueElement = null; while (reader.hasNext()) { XMLEvent2 event2 = reader.nextEvent(); if (valueElement == null && event2.isStartElement()) { valueElement = event2.asStartElement(); if (isStartElement(event2, M_PROPERTIES)) { rt = parseDSAtomEntry(etag, reader, event2); } else { BasicAtomEntry bae = new BasicAtomEntry(); bae.content = innerText(reader, event2.asStartElement()); rt = bae; } } if (event2.isEndElement() && event2.asEndElement().getName().equals(contentElement.getName())) { break; } } } else { BasicAtomEntry bae = new BasicAtomEntry(); bae.content = innerText(reader, event.asStartElement()); rt = bae; } } } throw new RuntimeException(); }