in fit/src/main/java/org/apache/olingo/fit/Services.java [698:795]
public Response getEntitySet(@Context final UriInfo uriInfo,
@HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) final String accept,
@PathParam("name") final String name,
@QueryParam("$top") @DefaultValue(StringUtils.EMPTY) final String top,
@QueryParam("$skip") @DefaultValue(StringUtils.EMPTY) final String skip,
@QueryParam("$format") @DefaultValue(StringUtils.EMPTY) final String format,
@QueryParam("$count") @DefaultValue(StringUtils.EMPTY) final String count,
@QueryParam("$filter") @DefaultValue(StringUtils.EMPTY) final String filter,
@QueryParam("$orderby") @DefaultValue(StringUtils.EMPTY) final String orderby,
@QueryParam("$skiptoken") @DefaultValue(StringUtils.EMPTY) final String skiptoken,
@PathParam("type") final String type) {
try {
final Accept acceptType;
if (StringUtils.isNotBlank(format)) {
acceptType = Accept.valueOf(format.toUpperCase());
} else {
acceptType = Accept.parse(accept);
}
final String location = uriInfo.getRequestUri().toASCIIString();
try {
// search for function ...
final InputStream func = FSManager.instance().readFile(name, acceptType);
return xml.createResponse(location, func, null, acceptType);
} catch (NotFoundException e) {
if (acceptType == Accept.XML || acceptType == Accept.TEXT) {
throw new UnsupportedMediaTypeException("Unsupported media type");
}
// search for entitySet ...
final String basePath = name + File.separatorChar;
final StringBuilder builder = new StringBuilder();
builder.append(basePath);
if (type != null) {
builder.append(type).append(File.separatorChar);
}
if (StringUtils.isNotBlank(orderby)) {
builder.append(Constants.get(ConstantKey.ORDERBY)).append(File.separatorChar).
append(orderby).append(File.separatorChar);
}
if (StringUtils.isNotBlank(filter)) {
builder.append(Constants.get(ConstantKey.FILTER)).append(File.separatorChar).
append(filter.replaceAll("/", "."));
} else if (StringUtils.isNotBlank(skiptoken)) {
builder.append(Constants.get(ConstantKey.SKIP_TOKEN)).append(File.separatorChar).
append(skiptoken);
} else {
builder.append(metadata.getEntitySet(name).isSingleton()
? Constants.get(ConstantKey.ENTITY)
: Constants.get(ConstantKey.FEED));
}
final InputStream feed = FSManager.instance().readFile(builder.toString(), Accept.ATOM);
final ResWrap<EntityCollection> container = atomDeserializer.toEntitySet(feed);
setInlineCount(container.getPayload(), count);
final ByteArrayOutputStream content = new ByteArrayOutputStream();
final OutputStreamWriter writer = new OutputStreamWriter(content, Constants.ENCODING);
// -----------------------------------------------
// Evaluate $skip and $top
// -----------------------------------------------
List<Entity> entries = new ArrayList<Entity>(container.getPayload().getEntities());
if (StringUtils.isNotBlank(skip)) {
entries = entries.subList(Integer.valueOf(skip), entries.size());
}
if (StringUtils.isNotBlank(top)) {
entries = entries.subList(0, Integer.valueOf(top));
}
container.getPayload().getEntities().clear();
container.getPayload().getEntities().addAll(entries);
// -----------------------------------------------
if (acceptType == Accept.ATOM) {
atomSerializer.write(writer, container);
} else {
jsonSerializer.write(writer, container);
}
return xml.createResponse(
location,
new ByteArrayInputStream(content.toByteArray()),
Commons.getETag(basePath),
acceptType);
}
} catch (Exception e) {
return xml.createFaultResponse(accept, e);
}
}