boolean includePropertyDefinitions = getBooleanParameter(request, Constants.PARAM_PROPERTY_DEFINITIONS, false);
BigInteger maxItems = getBigIntegerParameter(request, Constants.PARAM_MAX_ITEMS);
BigInteger skipCount = getBigIntegerParameter(request, Constants.PARAM_SKIP_COUNT);
// execute
TypeDefinitionList typeList = service.getTypeChildren(repositoryId, typeId, includePropertyDefinitions,
maxItems, skipCount, null);
BigInteger numItems = (typeList == null ? null : typeList.getNumItems());
Boolean hasMoreItems = (typeList == null ? null : typeList.hasMoreItems());
String parentTypeId = null;
String typeName = "Type Children";
// in order to get the parent type, we need the type definition of this
// type as well
if (typeId != null) {
TypeDefinition typeDefinition = service.getTypeDefinition(repositoryId, typeId, null);
parentTypeId = (typeDefinition == null ? null : typeDefinition.getParentTypeId());
typeName = (typeDefinition == null ? typeId : typeDefinition.getDisplayName());
}
// write XML
response.setStatus(HttpServletResponse.SC_OK);
response.setContentType(Constants.MEDIATYPE_FEED);
AtomFeed feed = new AtomFeed();
feed.startDocument(response.getOutputStream());
feed.startFeed(true);
// write basic Atom feed elements
feed.writeFeedElements(typeId, TYPE_AUTHOR, typeName, new GregorianCalendar(), null, numItems);
// write links
UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
feed.writeServiceLink(baseUrl.toString(), repositoryId);
UrlBuilder selfLink = compileUrlBuilder(baseUrl, RESOURCE_TYPES, null);
selfLink.addParameter(Constants.PARAM_TYPE_ID, typeId);
selfLink.addParameter(Constants.PARAM_PROPERTY_DEFINITIONS, includePropertyDefinitions);
feed.writeSelfLink(selfLink.toString(), typeId);
feed.writeViaLink(compileUrl(baseUrl, RESOURCE_TYPE, typeId));
UrlBuilder downLink = compileUrlBuilder(baseUrl, RESOURCE_TYPESDESC, null);
downLink.addParameter(Constants.PARAM_TYPE_ID, typeId);
feed.writeDownLink(downLink.toString(), Constants.MEDIATYPE_DESCENDANTS);
if (parentTypeId != null) {
feed.writeUpLink(compileUrl(baseUrl, RESOURCE_TYPE, parentTypeId), Constants.MEDIATYPE_ENTRY);
}
// write paging links
UrlBuilder pagingUrl = compileUrlBuilder(baseUrl, RESOURCE_TYPES, null);
pagingUrl.addParameter(Constants.PARAM_TYPE_ID, typeId);
pagingUrl.addParameter(Constants.PARAM_PROPERTY_DEFINITIONS, includePropertyDefinitions);
feed.writePagingLinks(pagingUrl, maxItems, skipCount, numItems, hasMoreItems, PAGE_SIZE);
// write collection
UrlBuilder collectionUrl = compileUrlBuilder(baseUrl, RESOURCE_TYPES, null);
collectionUrl.addParameter(Constants.PARAM_TYPE_ID, typeId);
feed.writeCollection(collectionUrl.toString(), null, "Types Collection", "");
// write type entries
if ((typeList != null) && (typeList.getList() != null)) {
AtomEntry entry = new AtomEntry(feed.getWriter());
for (TypeDefinition type : typeList.getList()) {
writeTypeEntry(entry, type, null, repositoryId, baseUrl, false);
}
}
// we are done