Package er.rest.example

Source Code of er.rest.example.Application

package er.rest.example;

import er.extensions.appserver.ERXApplication;
import er.rest.ERXRestNameRegistry;
import er.rest.example.controllers.AnimalController;
import er.rest.example.controllers.PersonController;
import er.rest.example.model.Animal;
import er.rest.example.model.Company;
import er.rest.example.model.Person;
import er.rest.routes.ERXRoute;
import er.rest.routes.ERXRouteRequestHandler;

/**
* This sets up a simple ERRest application with three entities -- Company, Person, and Animal. Note that this example app does not demonstrate any authentication checks. Authentication with rest can be achieved through any of the normal approaches --
* basic auth, token.
*
* @author mschrag
*/
public class Application extends ERXApplication {
  public static void main(String[] argv) {
    ERXApplication.main(argv, Application.class);
  }

  public Application() {
    setDefaultRequestHandler(requestHandlerForKey(directActionRequestHandlerKey()));
   
    // They entity is "Animal" internally, but we want to name it "Pet" to the rest of the world
    ERXRestNameRegistry.registry().setExternalNameForInternalName("Pet", "Animal");

    // Register a route request handler and use the WO URL naming conventions (capitalized entity names, singular form, camel case -- i.e. /Company.plist)
    ERXRouteRequestHandler routeRequestHandler = new ERXRouteRequestHandler(ERXRouteRequestHandler.WO);

    // Add the default routes for Company -- CompanyController does some JSR-311 annotations
    // If you register routes without specifying a controller name, the request handler will automatically look for
    // a controller named [EntityName]Controller. In this case, it would expect a CompanyController class that extends
    // ERXRouteController.
    routeRequestHandler.addDefaultRoutes(Company.ENTITY_NAME);

    // Add the default routes for Animal -- AnimalController is a ERXDefaultRouteController, and is exposed as "Pet" externally
    // This is showing the more explicit registration for default routes, where we specify the entity name, the entity type,
    // whether the entity has numeric PKs (an attribute which may disappear later), and the controller class to use
    routeRequestHandler.addDefaultRoutes(Animal.ENTITY_NAME, Animal.ENTITY_NAME, true, AnimalController.class);

    // This is showing what addDefaultRoutes actually does and that you add your own custom routes this way as well.
    // routeRequestHandler.addDefaultRoutes(Person.ENTITY_NAME);
    routeRequestHandler.addRoute(new ERXRoute(Person.ENTITY_NAME, "/Person", ERXRoute.Method.Options, PersonController.class, "options"));
    routeRequestHandler.addRoute(new ERXRoute(Person.ENTITY_NAME, "/Person", ERXRoute.Method.Head, PersonController.class, "head"));
    routeRequestHandler.addRoute(new ERXRoute(Person.ENTITY_NAME, "/Person", ERXRoute.Method.Post, PersonController.class, "create"));
    routeRequestHandler.addRoute(new ERXRoute(Person.ENTITY_NAME, "/Person", ERXRoute.Method.All, PersonController.class, "index"));
    // MS: this only works with numeric ids
    routeRequestHandler.addRoute(new ERXRoute(Person.ENTITY_NAME, "/Person/{action:identifier}", ERXRoute.Method.Get, PersonController.class));
    routeRequestHandler.addRoute(new ERXRoute(Person.ENTITY_NAME, "/Person/{person:Person}", ERXRoute.Method.Get, PersonController.class, "show"));
    routeRequestHandler.addRoute(new ERXRoute(Person.ENTITY_NAME, "/Person/{person:Person}", ERXRoute.Method.Put, PersonController.class, "update"));
    routeRequestHandler.addRoute(new ERXRoute(Person.ENTITY_NAME, "/Person/{person:Person}", ERXRoute.Method.Delete, PersonController.class, "destroy"));
    routeRequestHandler.addRoute(new ERXRoute(Person.ENTITY_NAME, "/Person/{person:Person}/{action:identifier}", ERXRoute.Method.All, PersonController.class));

    // Car and Manufacturer are two non-EO classes. For this to work properly, you need to either manually register
    // delegates for them via IERXRestDelegate.Factory or create classes named <EntityName>RestDelegate, which is
    // how this project works -- CarRestDelegate and ManufacturerRestDelegate.
    routeRequestHandler.addDefaultRoutes("Car");
    routeRequestHandler.addDefaultRoutes("Manufacturer");

    // Register the request handler with the application -- it becomes the "ra" request handler
    ERXRouteRequestHandler.register(routeRequestHandler);
  }
}
TOP

Related Classes of er.rest.example.Application

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.