/**
* The contents of this file are subject to the license and copyright
* detailed in the LICENSE and NOTICE files at the root of the source
* tree and available online at
*
* http://www.dspace.org/license/
*/
package org.dspace.rest;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;
import org.apache.log4j.Logger;
import org.dspace.rest.common.Report;
import org.dspace.services.ConfigurationService;
import org.dspace.services.factory.DSpaceServicesFactory;
/**
* Root of RESTful api. It provides login and logout. Also have method for
* printing every method which is provides by RESTful api.
*
* @author Terry Brady, Georgetown University
*
*/
@Path("/reports")
public class RestReports {
private static Logger log = Logger.getLogger(RestReports.class);
protected ConfigurationService configurationService = DSpaceServicesFactory.getInstance().getConfigurationService();
public static final String REST_RPT_URL = "rest.report-url.";
/**
* Return html page with information about REST api. It contains methods all
* methods provide by REST api.
*
* @return HTML page which has information about all methods of REST api.
*/
@GET
@Produces(MediaType.APPLICATION_XML)
public Report[] reportIndex()
throws WebApplicationException
{
ArrayList<Report> reports = new ArrayList<Report>();
List<String> propNames = configurationService.getPropertyKeys("rest");
for (String propName: propNames)
{
if (propName.startsWith(REST_RPT_URL))
{
String nickname = propName.substring(REST_RPT_URL.length());
String url = configurationService.getProperty(propName);
reports.add(new Report(nickname, url));
}
}
return reports.toArray(new Report[0]);
}
@Path("/{report_nickname}")
@GET
public Response customReport(@PathParam("report_nickname") String report_nickname, @Context UriInfo uriInfo)
throws WebApplicationException
{
URI uri = null;
if (!report_nickname.isEmpty())
{
log.info(String.format("Seeking report %s", report_nickname));
String url = configurationService.getProperty(REST_RPT_URL + report_nickname);
log.info(String.format("URL for report %s found: [%s]", report_nickname, url));
if (!url.isEmpty())
{
uri = uriInfo.getBaseUriBuilder().path(url).build("");
log.info(String.format("URI for report %s", uri));
}
}
if (uri != null)
{
return Response.temporaryRedirect(uri).build();
}
return Response.noContent().build();
}
}