package uk.bl.odin.orcid;
import java.util.logging.Logger;
import org.restlet.Context;
import org.restlet.resource.Directory;
import org.restlet.routing.Filter;
import org.restlet.routing.Router;
import uk.bl.odin.orcid.rest.CacheFilter;
import uk.bl.odin.orcid.rest.MetadataFetchResource;
import uk.bl.odin.orcid.rest.OrcidAuthURLResource;
import uk.bl.odin.orcid.rest.OrcidIdentifierResource;
import uk.bl.odin.orcid.rest.OrcidProfileResource;
import uk.bl.odin.orcid.rest.OrcidSearchResource;
import uk.bl.odin.orcid.rest.OrcidTokenResource;
import uk.bl.odin.orcid.rest.OrcidWorkCreationResource;
import uk.bl.odin.orcid.rest.report.DatacentreDOIPrefixResource;
import uk.bl.odin.orcid.rest.report.OrcidDataCentreReportResource;
import uk.bl.odin.orcid.rest.report.PublisherDOIPrefixResource;
/**
* RESTlet routing and general application configuration.
*/
public class RootRouter extends Router {
private static final Logger log = Logger.getLogger(RootRouter.class.getName());
/**
* Configures endpoints, sets up OrcidOAuthClient & OrcidWorkProvider and
* places them in the RESTlet Context
*
* Routes:
* <ul>
* <li>"/orcid/token" convert authz codes from orcid into authz tokens</li>
* <li>"/orcid/requests" generate a authz request url (?redirect=true to
* bounce user)</li>
* <li>"/orcid/requests/{originalRef}" generate a authz request url with
* originalRef as state param (?redirect=true to bounce user)</li>
* <li>"/orcid/{orcid}/orcid-works/create" create a work by posting
* OrcidWork XML (requires ?token= orcid oauth token)</li>
* <li>"/meta/{id}" fetch metadata from external source - use (?json) for
* raw form</li>
* <li>"/webjars" webjars endpoint - example:
* /webjars/bootstrap/3.0.3/css/bootstrap.min.css</li>
* </ul>
*
*
*/
public RootRouter(Context context) {
super(context);
// import work rest routes
this.attach("/orcid/token", OrcidTokenResource.class);
//this.attach("/orcid/requests/{originalRef}", OrcidAuthURLResource.class);
this.attach("/orcid/requests", OrcidAuthURLResource.class);//?originalRef optional
this.attach("/orcid/search", OrcidSearchResource.class);
this.attach("/orcid/{orcid}/orcid-works/create", OrcidWorkCreationResource.class);
this.attach("/orcid/{orcid}", OrcidProfileResource.class);
this.attach("/meta", MetadataFetchResource.class); //the configured type
// reporting rest routes
this.attach("/report/datatable", OrcidDataCentreReportResource.class);
this.attach("/doiprefix/publishers", PublisherDOIPrefixResource.class);
this.attach("/doiprefix/datacentres", DatacentreDOIPrefixResource.class);
// identifier enumerations
this.attach("/identifier/{type}", OrcidIdentifierResource.class);
// add a webjars listener(see
// http://demeranville.com/controlling-the-cache-headers-for-a-restlet-directory/
final Directory dir = new Directory(getContext(), "clap://class/META-INF/resources/webjars");
Filter cache = new CacheFilter(getContext(), dir);
this.attach("/webjars", cache);
log.info("RootRouter created, ready to serve");
}
}