in fit/src/main/java/org/apache/olingo/fit/Services.java [957:1063]
protected Response getEntityInternal(
final String location,
final String accept,
final String entitySetName,
final String entityId,
final String format,
final String expand,
final String select) {
try {
final Map.Entry<Accept, AbstractUtilities> utils = getUtilities(accept, format);
if (utils.getKey() == Accept.XML || utils.getKey() == Accept.TEXT) {
throw new UnsupportedMediaTypeException("Unsupported media type");
}
final Map.Entry<String, InputStream> entityInfo =
utils.getValue().readEntity(entitySetName, entityId, Accept.ATOM);
final InputStream entity = entityInfo.getValue();
ResWrap<Entity> container = atomDeserializer.toEntity(entity);
if (container.getContextURL() == null) {
container = new ResWrap<Entity>(URI.create(Constants.get(ConstantKey.ODATA_METADATA_PREFIX)
+ entitySetName + Constants.get(ConstantKey.ODATA_METADATA_ENTITY_SUFFIX)),
container.getMetadataETag(), container.getPayload());
}
final Entity entry = container.getPayload();
if ((this instanceof KeyAsSegment)) {
final Link editLink = new Link();
editLink.setRel("edit");
editLink.setTitle(entitySetName);
editLink.setHref(Constants.get(ConstantKey.DEFAULT_SERVICE_URL) + entitySetName + "/" + entityId);
entry.setEditLink(editLink);
}
if (StringUtils.isNotBlank(select)) {
final List<String> properties = Arrays.asList(select.split(","));
final Set<Property> toBeRemoved = new HashSet<Property>();
for (Property property : entry.getProperties()) {
if (!properties.contains(property.getName())) {
toBeRemoved.add(property);
}
}
entry.getProperties().removeAll(toBeRemoved);
final Set<Link> linkToBeRemoved = new HashSet<Link>();
for (Link link : entry.getNavigationLinks()) {
if (!properties.contains(link.getTitle().replaceAll("@.*$", "")) && !properties.contains(link.getTitle())) {
linkToBeRemoved.add(link);
}
}
entry.getNavigationLinks().removeAll(linkToBeRemoved);
}
String tempExpand = expand;
if (StringUtils.isNotBlank(tempExpand)) {
tempExpand = StringUtils.substringBefore(tempExpand, "(");
final List<String> links = Arrays.asList(tempExpand.split(","));
final Map<Link, Link> replace = new HashMap<Link, Link>();
for (Link link : entry.getNavigationLinks()) {
if (links.contains(link.getTitle())) {
// expand link
final Link rep = new Link();
rep.setHref(link.getHref());
rep.setRel(link.getRel());
rep.setTitle(link.getTitle());
rep.setType(link.getType());
if (link.getType().equals(Constants.get(ConstantKey.ATOM_LINK_ENTRY))) {
// inline entry
final Entity inline = atomDeserializer.toEntity(
xml.expandEntity(entitySetName, entityId, link.getTitle())).getPayload();
rep.setInlineEntity(inline);
} else if (link.getType().equals(Constants.get(ConstantKey.ATOM_LINK_FEED))) {
// inline feed
final EntityCollection inline = atomDeserializer.toEntitySet(
xml.expandEntity(entitySetName, entityId, link.getTitle())).getPayload();
rep.setInlineEntitySet(inline);
}
replace.put(link, rep);
}
}
for (Map.Entry<Link, Link> link : replace.entrySet()) {
entry.getNavigationLinks().remove(link.getKey());
entry.getNavigationLinks().add(link.getValue());
}
}
return xml.createResponse(
location,
xml.writeEntity(utils.getKey(), container),
Commons.getETag(entityInfo.getKey()),
utils.getKey());
} catch (Exception e) {
LOG.error("Error retrieving entity", e);
return xml.createFaultResponse(accept, e);
}
}