@Override public Restlet createRoot() { Router root = new Router(getContext()); root.setDefaultMatchingMode(Router.BEST); root.setDefaultMatchQuery(false); RouterBuilder routes = new RouterBuilder(root); RootDirectory rootDirectory = new RootDirectory(root); root.attach("", guard(rootDirectory)).setMatchingMode(Template.MODE_EQUALS); root.attach("/", guard(rootDirectory)).setMatchingMode(Template.MODE_EQUALS); // root.attach("", new RootDirectory(root)).getTemplate().setMatchingMode(Template.MODE_EQUALS); // root.attach("/", new // RootDirectory(root)).getTemplate().setMatchingMode(Template.MODE_EQUALS); routes.addPage("", DirectoryService.class, null, false); routes.addPage("/contacts/form/{id}", ContactForm.class, URLS.Name.CONTACT_FORM); routes.addPage("/contacts/form/", ContactForm.class); routes.addPage("/contacts", ContactService.class, URLS.Name.CONTACT); routes.add("/library", LibraryResource.class); routes.addPage("/library/", LibraryResource.class); routes.addPage("/library/upload", CitationUploadForm.class); routes.addPage("/library/{id}", CitationFileForm.class); routes .add("/productpage/{id}", ProductPageService.class) .getTemplate() .getDefaultVariable() .setType(Variable.TYPE_ALL); routes.addPage( "/products/revisions/form/{id}/{rev}", ProductRevisionForm.class, URLS.Name.PRODUCT_REVISIONS_FORM); routes.addPage("/products/revisions/form/{id}/", ProductRevisionForm.class); routes.addPage( "/products/revisions/{id}/{rev}", ProductRevisionService.class, URLS.Name.PRODUCT_REVISIONS); routes.addPage("/products/revisions/{id}/", ProductRevisionService.class); routes.addPage("/products/form/{id}", ProductForm.class, URLS.Name.PRODUCT_FORM); routes.addPage("/products/form/", ProductForm.class); routes.addPage("/products/upload", ProductUploadForm.class); routes.add("/products", ProductService.class, URLS.Name.PRODUCT); routes.add( "/productnames/ac", AutoCompleteResource.ProductName.class, URLS.Name.AC_PRODUCT_NAME); routes.add("/producttypes", ProductTypeService.class); routes.add( "/producttypes/ac", AutoCompleteResource.ProductType.class, URLS.Name.AC_PRODUCT_TYPE); root.attach("/producttypes/{id}", ProductTypeService.class); routes.add("/stations", StationService.class); routes.add("/stations/ac", AutoCompleteResource.Station.class, URLS.Name.AC_STATION); routes.add( "/stations/types/ac", AutoCompleteResource.StationType.class, URLS.Name.AC_STATION_TYPE); routes.add("/stations/locations", StationLocationService.class); routes.add("/stations/overview", StationOverviewService.class); // @see ext comment in BaseResource routes.add("/stations/locations.{ext}", StationLocationService.class); routes.add("/stations/page/{id}", StationPageService.class, URLS.Name.STATION_PAGE); routes.addPage("/stations/upload", StationUploadForm.class); routes.add("/stations/all/products", ProductLinkService.class); routes.add("/stations/{id}/products", ProductLinkService.class, URLS.Name.PRODUCT_LINK); routes.add("/stations/{id}", StationService.class, URLS.Name.STATION); routes.add("/stations/", StationService.class); routes.addPage("/stations/form/{id}", StationForm.class, URLS.Name.STATION_FORM); routes.addPage("/stations/form/", StationForm.class); routes.addPage("/batches", BatchMonitorResource.class); routes.add("/nations/ac", AutoCompleteResource.Nation.class, URLS.Name.AC_NATIONS); routes.add("/regions/ac", AutoCompleteResource.Region.class); root.attach("/admin/debug", guard(new DebugRestlet())); root.attach( "/admin/refresh", guard( new Restlet() { public static final String PSCP_DESCRIPTION = "Refresh internal DB and Modified-Since caches"; @Override public void handle(Request request, Response response) { getLogger().info("Refresh issued"); lookupCache.refreshAll(); ModifiedCache.clear(); response.setEntity("Refresh Complete", MediaType.TEXT_HTML); } })); root.attach( "/login", guard( new Restlet() { public static final String PSCP_DESCRIPTION = "Provide Login Features"; @Override public void handle(Request request, Response response) { if (request.getChallengeResponse() != null) { Reference referrer = request.getReferrerRef(); String ret = request.getOriginalRef().getQueryAsForm().getFirstValue("ret"); if (ret != null) { response.redirectSeeOther(ret); } else if (referrer != null) { response.redirectSeeOther(referrer); } } } })); urls.put( root.attach( "/logout", new Restlet() { public static final String PSCP_DESCRIPTION = "Provide Logout Features"; @Override public void handle(Request request, Response response) { if (request.getChallengeResponse() != null) { String userName = request.getChallengeResponse().getParameters().getFirstValue("username"); if ("logout".equals(userName)) { response.setStatus(Status.SUCCESS_OK); response.setEntity("Logged Out", MediaType.ALL); CookieSetting cookie = new CookieSetting("u", ""); cookie.setPath("/"); response.getCookieSettings().add(cookie); response.redirectSeeOther(urls.getURL(URLS.Name.STATIC_MEDIA)); } else { response.setStatus(Status.SUCCESS_OK); response.setEntity("Logged Out", MediaType.ALL); CookieSetting cookie = new CookieSetting("u", ""); cookie.setPath("/"); response.getCookieSettings().add(cookie); } } else { ChallengeRequest cr = new ChallengeRequest(ChallengeScheme.HTTP_DIGEST, "PSCP"); response.setChallengeRequest(cr); response.setStatus(Status.CLIENT_ERROR_UNAUTHORIZED); } } }) .getTemplate(), URLS.Name.LOGOUT); return new HeaderFilter(getContext(), root); }