private void appendInlineEntry(final XMLStreamWriter writer, final String navigationPropertyName, final EntityInfoAggregator eia, final Entity data) throws EntityProviderException, XMLStreamException, EdmException { if (data.getNavigations() != null && data.getNavigations().containsKey(navigationPropertyName)) { EdmNavigationProperty navProp = (EdmNavigationProperty) eia.getEntityType().getProperty(navigationPropertyName); Entity inlineData = (Entity) data.getNavigation(navigationPropertyName); if ((inlineData == null) || inlineData.getProperties().size() == 0) { return; } writer.writeStartElement(Edm.NAMESPACE_M_2007_08, FormatXml.M_INLINE); if (inlineData != null && !(inlineData.getProperties().isEmpty())) { inlineData.setWriteProperties(inlineData.getWriteProperties() == null ? data.getWriteProperties() : inlineData .getWriteProperties()); EdmEntitySet inlineEntitySet = eia.getEntitySet().getRelatedEntitySet(navProp); AtomEntryEntitySerializer inlineProducer = new AtomEntryEntitySerializer(inlineData.getWriteProperties()); EntityInfoAggregator inlineEia = EntityInfoAggregator.create(inlineEntitySet, null); inlineProducer.append(writer, inlineEia, inlineData, false, false); } writer.writeEndElement(); } }
public static Entity addPropertiesToEntity(Map<String, Object> properties, EdmEntityType entityType) throws EdmException, ODataException { Entity entity = new Entity(); List<String> navigationProperties = entityType.getNavigationPropertyNames(); List<String> propertiesInEntity = entityType.getPropertyNames(); deepInsertChildren.addEntity(addPropertiesToEntity(entry, targetType)); entity.addNavigation(propertyName, deepInsertChildren); } else { Map<String, Object> childEntity = null; entity.addNavigation(propertyName, addPropertiesToEntity(childEntity, targetType)); } else if (properties.get(propertyName) instanceof Map) { // Complex entity.addProperty(propertyName, addPropertiesToMap((Map<String, Object>) properties.get(propertyName))); entity.addProperty(propertyName, properties.get(propertyName));
throws EntityProviderException, EdmException, URISyntaxException, XMLStreamException { for (Entry<String, Object> entry : data.getNavigations().entrySet()) { final EntityInfoAggregator targetEntityInfo = EntityInfoAggregator.create( eia.getEntitySet().getRelatedEntitySet( Map<String, Object> navigationKeyMap = navigationEntity.getProperties(); if (navigationKeyMap != null && !navigationKeyMap.isEmpty()) { String navigationPropertyName = entry.getKey(); String selfLink = createSelfLink(eia, data.getProperties(), navigationPropertyName, properties.isKeyAutoGenerated(), false); appendNavigationLink(writer, selfLink, navigationPropertyName); String selfLink = createSelfLink(eia, data.getProperties(), navigationPropertyName, properties.isKeyAutoGenerated(), false); if (!((EntityCollection) entry.getValue()).getEntities().isEmpty()) {
private void appendInlineFeed(final XMLStreamWriter writer, final String navigationPropertyName, final EntityInfoAggregator eia, final Entity data) throws EntityProviderException, XMLStreamException, EdmException { if (eia.getNavigationPropertyNames().contains(navigationPropertyName) && data != null && data.getNavigations().containsKey(navigationPropertyName)) { EdmNavigationProperty navProp = (EdmNavigationProperty) eia.getEntityType().getProperty(navigationPropertyName); if (navProp == null) { throw new EntityProviderProducerException(EntityProviderException.EXPANDNOTSUPPORTED); } EntityCollection inlineData; inlineData = (EntityCollection) data.getNavigation(navigationPropertyName); if (inlineData == null) { inlineData = new EntityCollection(); } if (inlineData.getEntities().isEmpty()) { return; } writer.writeStartElement(Edm.NAMESPACE_M_2007_08, FormatXml.M_INLINE); EntityCollectionSerializerProperties inlineProperties = inlineData.getCollectionProperties() == null ? EntityCollectionSerializerProperties.serviceRoot(data.getWriteProperties().getServiceRoot()).build() : inlineData.getCollectionProperties(); EdmEntitySet inlineEntitySet = eia.getEntitySet().getRelatedEntitySet(navProp); AtomFeedSerializer inlineFeedProducer = new AtomFeedSerializer(inlineProperties); inlineData.setCollectionProperties(inlineProperties); EntityInfoAggregator inlineEia = EntityInfoAggregator.create(inlineEntitySet, null); inlineFeedProducer.append(writer, inlineEia, inlineData, true); writer.writeEndElement(); } }
entity.setWriteProperties(EntitySerializerProperties.serviceRoot(URI.create(serviceUri)).build()); try {
throw new EntityProviderException(EntityProviderException.NULL_VALUE); if (inlineData != null && inlineData.getProperties() != null && !inlineData.getProperties().isEmpty()) { final EntitySerializerProperties inlineProperties = inlineData.getWriteProperties() == null ? EntitySerializerProperties. serviceRoot(properties.getServiceRoot()).build() : inlineData.getWriteProperties(); final EntityInfoAggregator inlineEntityInfo = EntityInfoAggregator.create(inlineEntitySet, null);
private void appendEntries(final XMLStreamWriter writer, final EntityInfoAggregator eia, final EntityCollection data) throws EntityProviderException { AtomEntryEntitySerializer entryProvider; for (Entity singleEntryData : data.getEntities()) { entryProvider = singleEntryData.getWriteProperties() == null? data.getGlobalEntityProperties() == null ? new AtomEntryEntitySerializer (EntitySerializerProperties.serviceRoot(data.getCollectionProperties().getServiceRoot()).build()) : new AtomEntryEntitySerializer(data.getGlobalEntityProperties()): new AtomEntryEntitySerializer(singleEntryData.getWriteProperties()); entryProvider.append(writer, eia, singleEntryData, false, true); } }
/** * If <code>value</code> is a {@link Map} the element with given <code>name</code> as key is returned. * If <code>value</code> is NOT a {@link Map} its {@link String#valueOf(Object)} result is returned. * * @param value * @param name * @return name or result (see above) */ private Object extractChildValue(final Object value, final String name) { if (value instanceof Map) { Map<?, ?> map = (Map<?, ?>) value; return map.get(name); }else if (value instanceof Entity) { Map<?, ?> map = ((Entity) value).getProperties(); return map.get(name); } return String.valueOf(value); }
/** * * @param writer * @param propertyInfo * @param value * @throws XMLStreamException * @throws EdmException * @throws EntityProviderException */ private void appendProperty(final XMLStreamWriter writer, final EntityComplexPropertyInfo propertyInfo, final Object value) throws XMLStreamException, EdmException, EntityProviderException { if (value == null) { writer.writeAttribute(Edm.NAMESPACE_M_2007_08, FormatXml.ATOM_NULL, FormatXml.ATOM_VALUE_TRUE); } else { writer.writeAttribute(Edm.NAMESPACE_M_2007_08, FormatXml.ATOM_TYPE, getFqnTypeName(propertyInfo)); List<EntityPropertyInfo> propertyInfos = propertyInfo.getPropertyInfos(); for (EntityPropertyInfo childPropertyInfo : propertyInfos) { if ( value instanceof Map && !((Map<?,?>)value).containsKey(childPropertyInfo.getName())|| (value instanceof Entity && (((Entity)value).getProperty(childPropertyInfo.getName()))==null)) { continue; } Object childValue = extractChildValue(value, childPropertyInfo.getName()); append(writer, childPropertyInfo.getName(), childPropertyInfo, childValue); } } }
writeMetadata(entityInfo, data.getProperties(), type); containsMetadata = true; writeProperties(entityInfo, data.getProperties(), type, containsMetadata); writeNavigationProperties(writer, entityInfo, data.getNavigations(), type); jsonStreamWriter.endObject();
entity.setWriteProperties(EntitySerializerProperties.serviceRoot(URI.create(serviceUri)).build()); try { response = ODataClient.newInstance().createSerializer(contentType).writeEntry(entitySet, entity);
private void appendEntries(final Writer writer, final EntityInfoAggregator entityInfo, final EntityCollection data, JsonStreamWriter jsonStreamWriter) throws EntityProviderException, IOException { boolean first = true; for (Entity entryData : data.getEntities()) { if (first) { first = false; } else { jsonStreamWriter.separator(); } EntitySerializerProperties entryProperties = entryData == null || entryData.getWriteProperties() == null ? data.getGlobalEntityProperties() != null? data.getGlobalEntityProperties(): EntitySerializerProperties. serviceRoot(properties.getServiceRoot()). build() : entryData.getWriteProperties(); JsonEntryEntitySerializer entryProducer = new JsonEntryEntitySerializer(entryProperties); entryProducer.append(writer, entityInfo, entryData); } } }
if (properties.isIncludeMetadata()) { selfLink = createSelfLink(eia, data.getProperties(), null, properties.isKeyAutoGenerated(), false); appendAtomMandatoryParts(writer, eia, data.getProperties()); appendAtomOptionalParts(writer, eia, data.getProperties()); appendAtomEditLink(writer, eia, selfLink); if (eia.getEntityType().hasStream()) { appendAtomContentLink(writer, eia, data.getProperties(), selfLink); appendCustomProperties(writer, eia, data.getProperties()); appendAtomContentPart(writer, eia, data.getProperties(), selfLink); appendProperties(writer, eia, data.getProperties()); } else { writer.writeStartElement(FormatXml.ATOM_CONTENT); writer.writeAttribute(FormatXml.ATOM_TYPE, ContentType.APPLICATION_XML.toString()); appendProperties(writer, eia, data.getProperties()); writer.writeEndElement();
@Override public ODataResponse writeEntry(EdmEntitySet entitySet, Entity data) throws EntityProviderException { final EntitySerializerProperties properties = data == null ? EntitySerializerProperties.serviceRoot(null).build() : data.getWriteProperties() == null ? EntitySerializerProperties.serviceRoot(null).build() : data.getWriteProperties(); final EntityInfoAggregator entityInfo = EntityInfoAggregator.create(entitySet, null); CircleStreamBuffer buffer = new CircleStreamBuffer(); try { BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(buffer.getOutputStream(), DEFAULT_CHARSET)); JsonEntryEntitySerializer producer = new JsonEntryEntitySerializer(properties); producer.append(writer, entityInfo, data); writer.flush(); buffer.closeWrite(); return ODataResponse.entity(buffer.getInputStream()) .idLiteral(producer.getLocation()) .build(); } catch (EntityProviderException e) { buffer.close(); throw e; } catch (Exception e) { buffer.close(); throw new EntityProviderProducerException(EntityProviderException.EXCEPTION_OCCURRED.addContent(e.getClass() .getSimpleName()), e); } }
final EdmSimpleType type = (EdmSimpleType) propertyInfo.getType(); final Object contentValue = value instanceof Entity ? ((Entity) value). getProperties().get(propertyInfo.getName()) : value; final EdmFacets facets = validatingFacets ? propertyInfo.getFacets(): null; String valueAsString = null;
@Override public ODataResponse writeEntry( EdmEntitySet entitySet, Entity data ) throws EntityProviderException { CircleStreamBuffer csb = new CircleStreamBuffer(); try { if(data == null){ throw new EntityProviderProducerException(EntityProviderException.NULL_VALUE); } OutputStream outStream = csb.getOutputStream(); XMLStreamWriter writer = XmlHelper.getXMLOutputFactory().createXMLStreamWriter(outStream, DEFAULT_CHARSET); writer.writeStartDocument(DEFAULT_CHARSET, XML_VERSION); EntitySerializerProperties properties = data.getWriteProperties(); AtomEntryEntitySerializer as = new AtomEntryEntitySerializer(properties ); EntityInfoAggregator eia = EntityInfoAggregator.create(entitySet, null); as.append(writer, eia, data, true, false); writer.flush(); csb.closeWrite(); ODataResponseBuilder response = ODataResponse.entity(csb.getInputStream()); return response.build(); } catch (EntityProviderException e) { csb.close(); throw e; } catch (Exception e) { csb.close(); throw new EntityProviderProducerException(EntityProviderException.EXCEPTION_OCCURRED.addContent(e.getClass() .getSimpleName()), e); } }