EdmNavigationProperty navigationProperty =
(EdmNavigationProperty) eia.getEntityType().getProperty(navigationPropertyName);
EdmEntitySet inlineEntitySet = eia.getEntitySet().getRelatedEntitySet(navigationProperty);
EntityInfoAggregator inlineEia = EntityInfoAggregator.create(inlineEntitySet);
EntityProviderReadProperties inlineReadProperties;
OnReadInlineContent callback = readProperties.getCallback();
try {
if (callback == null) {
inlineReadProperties =
EntityProviderReadProperties.init()
.mergeSemantic(readProperties.getMergeSemantic())
.isValidatingFacets(readProperties.isValidatingFacets())
.build();
} else {
inlineReadProperties = callback.receiveReadProperties(readProperties, navigationProperty);
}
if (navigationProperty.getMultiplicity() == EdmMultiplicity.MANY) {
JsonFeedConsumer inlineConsumer = new JsonFeedConsumer(reader, inlineEia, inlineReadProperties);
ODataFeed feed = inlineConsumer.readStartedInlineFeed(name);
updateExpandSelectTree(navigationPropertyName, feed);
if (callback == null) {
properties.put(navigationPropertyName, feed);
resultEntry.setContainsInlineEntry(true);
} else {
ReadFeedResult result = new ReadFeedResult(inlineReadProperties, navigationProperty, feed);
callback.handleReadFeed(result);
}
} else {
JsonEntryConsumer inlineConsumer = new JsonEntryConsumer(reader, inlineEia, inlineReadProperties);
ODataEntry entry = inlineConsumer.readInlineEntry(name);
updateExpandSelectTree(navigationPropertyName, entry);
if (callback == null) {
properties.put(navigationPropertyName, entry);
resultEntry.setContainsInlineEntry(true);
} else {
ReadEntryResult result = new ReadEntryResult(inlineReadProperties, navigationProperty, entry);
callback.handleReadEntry(result);
}
}
} catch (ODataApplicationException e) {
throw new EntityProviderException(EntityProviderException.EXCEPTION_OCCURRED.addContent(e.getClass()
.getSimpleName()), e);
}
}
reader.endObject();
} else if (peek == JsonToken.NULL) {
reader.nextNull();
} else {
final EdmNavigationProperty navigationProperty =
(EdmNavigationProperty) eia.getEntityType().getProperty(navigationPropertyName);
final EdmEntitySet inlineEntitySet = eia.getEntitySet().getRelatedEntitySet(navigationProperty);
final EntityInfoAggregator inlineInfo = EntityInfoAggregator.create(inlineEntitySet);
OnReadInlineContent callback = readProperties.getCallback();
EntityProviderReadProperties inlineReadProperties;
if (callback == null) {
inlineReadProperties =
EntityProviderReadProperties.init()
.mergeSemantic(readProperties.getMergeSemantic())
.isValidatingFacets(readProperties.isValidatingFacets())
.build();
} else {
try {
inlineReadProperties = callback.receiveReadProperties(readProperties, navigationProperty);
} catch (final ODataApplicationException e) {
throw new EntityProviderException(EntityProviderException.EXCEPTION_OCCURRED.addContent(e.getClass()
.getSimpleName()), e);
}
}
ODataFeed feed = new JsonFeedConsumer(reader, inlineInfo, inlineReadProperties).readInlineFeedStandalone();
updateExpandSelectTree(navigationPropertyName, feed);
if (callback == null) {
properties.put(navigationPropertyName, feed);
resultEntry.setContainsInlineEntry(true);
} else {
ReadFeedResult result = new ReadFeedResult(inlineReadProperties, navigationProperty, feed);
try {
callback.handleReadFeed(result);
} catch (final ODataApplicationException e) {
throw new EntityProviderException(EntityProviderException.EXCEPTION_OCCURRED.addContent(e.getClass()
.getSimpleName()), e);
}
}