@GET public Property getClassProperty( @PathParam("wikiName") String wikiName, @PathParam("className") String className, @PathParam("propertyName") String propertyName) throws XWikiException { String database = Utils.getXWikiContext(componentManager).getDatabase(); try { Utils.getXWikiContext(componentManager).setDatabase(wikiName); com.xpn.xwiki.api.Class xwikiClass = Utils.getXWikiApi(componentManager).getClass(className); if (xwikiClass == null) { throw new WebApplicationException(Status.NOT_FOUND); } Class clazz = DomainObjectFactory.createClass( objectFactory, uriInfo.getBaseUri(), wikiName, xwikiClass); for (Property property : clazz.getProperties()) { if (property.getName().equals(propertyName)) { String classUri = UriBuilder.fromUri(uriInfo.getBaseUri()) .path(ClassResource.class) .build(wikiName, xwikiClass.getName()) .toString(); Link classLink = objectFactory.createLink(); classLink.setHref(classUri); classLink.setRel(Relations.CLASS); property.getLinks().add(classLink); return property; } } throw new WebApplicationException(Status.NOT_FOUND); } finally { Utils.getXWiki(componentManager).setDatabase(database); } }
@GET public Spaces getSpaces( @PathParam("wikiName") String wikiName, @QueryParam("start") @DefaultValue("0") Integer start, @QueryParam("number") @DefaultValue("-1") Integer number) throws XWikiException, QueryException, ComponentLookupException { String database = Utils.getXWikiContext(componentManager).getDatabase(); Spaces spaces = objectFactory.createSpaces(); /* This try is just needed for executing the finally clause. */ try { Utils.getXWikiContext(componentManager).setDatabase(wikiName); List<String> spaceNames = queryManager .getNamedQuery("getSpaces") .addFilter(componentManager.<QueryFilter>getInstance(QueryFilter.class, "hidden")) .setOffset(start) .setLimit(number) .execute(); for (String spaceName : spaceNames) { String homeId = Utils.getPageId(wikiName, spaceName, "WebHome"); Document home = null; XWiki xwikiApi = Utils.getXWikiApi(componentManager); if (xwikiApi.hasAccessLevel("view", homeId)) { if (xwikiApi.exists(homeId)) { home = Utils.getXWikiApi(componentManager).getDocument(homeId); } spaces .getSpaces() .add( DomainObjectFactory.createSpace( objectFactory, uriInfo.getBaseUri(), wikiName, spaceName, home)); } } } finally { Utils.getXWikiContext(componentManager).setDatabase(database); } return spaces; }