package me.osm.gazetteer.web;
import me.osm.gazetteer.web.api.FeatureAPI;
import me.osm.gazetteer.web.api.GeocodeCSVAPI;
import me.osm.gazetteer.web.api.HealthAPI;
import me.osm.gazetteer.web.api.ImportLocations;
import me.osm.gazetteer.web.api.ImportOSMDoc;
import me.osm.gazetteer.web.api.IndexAPI;
import me.osm.gazetteer.web.api.InverseGeocodeAPI;
import me.osm.gazetteer.web.api.MetaInfoAPI;
import me.osm.gazetteer.web.api.OSMDocAPI;
import me.osm.gazetteer.web.api.SearchAPI;
import me.osm.gazetteer.web.api.Sitemap;
import me.osm.gazetteer.web.api.SnapshotsAPI;
import me.osm.gazetteer.web.api.Static;
import me.osm.gazetteer.web.api.StatisticAPI;
import me.osm.gazetteer.web.api.SuggestAPI;
import org.jboss.netty.handler.codec.http.HttpMethod;
import org.restexpress.Flags;
import org.restexpress.Parameters;
import org.restexpress.RestExpress;
import org.slf4j.LoggerFactory;
public class Routes {
private static final int MINUTE = 60;
private static final int HOUR = 60 * MINUTE;
private static final int DAY = 24 * HOUR;
private static final int WEEK = 7 * DAY;
public static void defineRoutes(RestExpress server) {
Configuration config = GazetteerWeb.config();
String root = config.getWebRoot();
LoggerFactory.getLogger(Routes.class).info("Define routes with web root: {}", root);
server.uri(root + "/info.{format}",
new MetaInfoAPI(server))
.flag(Flags.Auth.PUBLIC_ROUTE)
.method(HttpMethod.GET);
server.uri(root + "/location/_import",
new ImportLocations())
.method(HttpMethod.GET)
.flag(Flags.Cache.DONT_CACHE);
SearchAPI searchAPIInstance = new SearchAPI();
server.uri(root + "/location/_search",
searchAPIInstance)
.method(HttpMethod.GET)
.name("feature")
.flag(Flags.Auth.PUBLIC_ROUTE)
.parameter(Parameters.Cache.MAX_AGE, MINUTE);
server.uri(root + "/location/_geocode_csv",
new GeocodeCSVAPI(searchAPIInstance))
.method(HttpMethod.GET)
.flag(Flags.Auth.PUBLIC_ROUTE);
server.uri(root + "/location/_suggest",
new SuggestAPI())
.method(HttpMethod.GET)
.name("feature")
.flag(Flags.Auth.PUBLIC_ROUTE)
.parameter(Parameters.Cache.MAX_AGE, MINUTE);
server.uri(root + "/location/{id}/{_related}",
new FeatureAPI())
.alias(root + "/location/{id}")
.method(HttpMethod.GET)
.name("feature")
.flag(Flags.Auth.PUBLIC_ROUTE)
.parameter(Parameters.Cache.MAX_AGE, MINUTE);
server.uri(root + "/location/latlon/{lat}/{lon}/{_related}",
new InverseGeocodeAPI())
.alias(root + "/location/latlon/{lat}/{lon}")
.alias(root + "/_inverse")
.method(HttpMethod.GET)
.name("feature")
.flag(Flags.Auth.PUBLIC_ROUTE)
.parameter(Parameters.Cache.MAX_AGE, MINUTE);
server.uri(root + "/osmdoc/hierarchy/{lang}/{id}",
new OSMDocAPI())
.method(HttpMethod.GET)
.flag(Flags.Auth.PUBLIC_ROUTE)
.parameter("handler", "hierarchy")
.parameter(Parameters.Cache.MAX_AGE, DAY);
server.uri(root + "/osmdoc/_import",
new ImportOSMDoc())
.method(HttpMethod.GET);
server.uri(root + "/osmdoc/statistic/tagvalues.{format}",
new StatisticAPI())
.method(HttpMethod.GET)
.flag(Flags.Auth.PUBLIC_ROUTE)
.defaultFormat("json")
.parameter(Parameters.Cache.MAX_AGE, DAY);
server.uri(root + "/osmdoc/poi-class/{lang}/{id}",
new OSMDocAPI())
.method(HttpMethod.GET)
.flag(Flags.Auth.PUBLIC_ROUTE)
.parameter("handler", "poi-class")
.parameter(Parameters.Cache.MAX_AGE, DAY);
server.uri(root + "/health.{format}",
new HealthAPI())
.method(HttpMethod.GET)
.flag(Flags.Auth.PUBLIC_ROUTE);
server.uri(root + "/index",
new IndexAPI())
.method(HttpMethod.GET);
server.uri(root + "/snapshot/.*",
new SnapshotsAPI(config))
.method(HttpMethod.GET)
.flag(Flags.Auth.PUBLIC_ROUTE)
.parameter(Parameters.Cache.MAX_AGE, MINUTE)
.noSerialization();
if(config.isServeStatic()) {
server.uri(root + "/static/.*", new Static())
.method(HttpMethod.GET)
.flag(Flags.Auth.PUBLIC_ROUTE)
.noSerialization();
}
server.uri(root + "/sitemap.*", new Sitemap())
.method(HttpMethod.GET)
.flag(Flags.Auth.PUBLIC_ROUTE)
.parameter(Parameters.Cache.MAX_AGE, WEEK)
.noSerialization();
}
}