package org.opensextant.xlayer.server.xgeo;
import java.io.IOException;
import java.net.URL;
import java.util.logging.Logger;
import org.opensextant.ConfigException;
import org.opensextant.extraction.MatchFilter;
import org.opensextant.extractors.geo.PlaceGeocoder;
import org.opensextant.xlayer.server.XlayerApp;
import org.restlet.Context;
import org.restlet.Restlet;
import org.restlet.routing.Router;
/**
* @author ubaldino
*
*/
public class XlayerRestlet extends XlayerApp {
/** The log. */
protected Logger log = null;
public XlayerRestlet(Context c) {
super(c);
version = "v2.9";
log = getContext().getCurrentLogger();
}
@Override
public synchronized Restlet createInboundRoot() {
Router router = new Router(getContext());
info("Starting Xponents Xlayer Service");
try {
banner();
configure();
Context ctx = getContext();
ctx.getAttributes().put("xgeo", tagger);
info("%%%% Xponents Geo Phase Configured");
} catch (Exception err) {
error("Unable to start", err);
System.exit(-1);
}
router.attach("/process", XponentsGeotagger.class);
return router;
}
private PlaceGeocoder tagger = null;
/**
*
* @throws ConfigException
*/
public void configure() throws ConfigException {
// Default - process place/country mentions in document texts.
//
tagger = new PlaceGeocoder();
// tagger.setParameters(this.params); See Xponents concept of Parameters
tagger.enablePersonNameMatching(true);
tagger.configure();
// TODO: refine this filter list. Use "/filters/non-placenames,user.csv" going forward.
//
String userFilterPath = "/filters/non-placenames,user.csv";
URL filterFile = getClass().getResource(userFilterPath);
if (filterFile != null) {
// Add User filter here. This prevents irrelevant stuff from
// getting out of naiive tagging phase.
//
try {
MatchFilter filt = new MatchFilter(filterFile);
tagger.setMatchFilter(filt);
} catch (IOException err) {
throw new ConfigException("Setup error with geonames utility or other configuration", err);
}
} else {
info("Optional user filter not found. User exclusion list is file=" + userFilterPath);
}
}
}