Esempio n. 1
0
  @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);
  }