package org.opensextant.service;
import java.util.Properties;
import org.opensextant.service.processing.DocumentProcessorPool;
import org.restlet.Application;
import org.restlet.Restlet;
import org.restlet.routing.Router;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class OpenSextantApplication extends Application {
/** Log object. */
private static final Logger LOGGER = LoggerFactory.getLogger(OpenSextantApplication.class);
/** The pool of document processors. */
DocumentProcessorPool dpPool;
/** Properties. */
Properties prop;
public OpenSextantApplication(Properties prop) {
this.prop = prop;
}
@Override
public synchronized Restlet createInboundRoot() {
// initialize the pool with settings in the property file
LOGGER.info("Initializing pool of extractors");
dpPool = new DocumentProcessorPool(this.prop);
LOGGER.info("Warming up extractor pool");
// warm up the pool
String content = "We drove to Kabul.";
for (String p : dpPool.getProcessNames()) {
dpPool.process(p, content);
}
LOGGER.info(dpPool.toString());
// set up the routes
Router router = new Router();
// extraction route
router.attach("/extract", OpenSextantExtractorResource.class);
router.attach("/extract/", OpenSextantExtractorResource.class);
router.attach("/extract/{extracttype}", OpenSextantExtractorResource.class);
router.attach("/extract/{extracttype}/", OpenSextantExtractorResource.class);
router.attach("/extract/{extracttype}/{resultformat}", OpenSextantExtractorResource.class);
router.attach("/extract/{extracttype}/{resultformat}/", OpenSextantExtractorResource.class);
router.attach("/extract/{extracttype}/{resultformat}/url/{url}", OpenSextantExtractorResource.class);
// lookup routes
router.attach("/lookup/{format}/query/{query}", OpenSextantLookupResource.class);
router.attach("/lookup/{format}/{placename}", OpenSextantLookupResource.class);
router.attach("/lookup/{format}/{placename}/", OpenSextantLookupResource.class);
router.attach("/lookup/{format}/{placename}/{country}", OpenSextantLookupResource.class);
router.attach("/lookup/{format}/{placename}/{country}/", OpenSextantLookupResource.class);
// admin stuff
router.attach("/admin", OpenSextantAdminResource.class);
router.attach("/admin/", OpenSextantAdminResource.class);
router.attach("/admin/{operation}", OpenSextantAdminResource.class);
router.attach("/admin/{operation}/", OpenSextantAdminResource.class);
return router;
}
/** Accessor for the pool. */
public DocumentProcessorPool getPool() {
return this.dpPool;
}
/**
* (non-Javadoc)
*
* @see org.restlet.Application#stop()
*/
@Override
public synchronized void stop() throws Exception {
this.dpPool.cleanup();
super.stop();
}
}