View Javadoc

1   package pt.digitalis.dif.controller.interfaces;
2   
3   import pt.digitalis.dif.controller.objects.RESTAction;
4   import pt.digitalis.dif.exception.controller.ControllerException;
5   
6   /**
7    * AbstractChAL stands for <b>Ch</b>annel <b>A</b>bstraction <b>L</b>ayer and as the name implies it's purpose is to
8    * insulate the framework from the transport channel used by the original request. As can be implied from the statement
9    * above, AbstractChAL should be tailored to take care of a specific transport channel details. As such, AbstractChAL
10   * should be extended using inheritance and is the subclass that should be instantiated. To enforce the subclass
11   * instantiation AbstractChAL is declared <code>abstract</code>. AbstractChAL is responsible for translating the
12   * original request into a format that the framework can understand, then executing the appropriated Dispatcher and
13   * finally publish the results.
14   * 
15   * @author Pedro Viegas <a href="mailto:pviegas@digitalis.pt">pviegas@digitalis.pt</a>
16   * @param <RequestType>
17   *            the type of request of the specific AbstractChAL
18   * @param <ResponseType>
19   *            the type of response of the specific AbstractChAL
20   */
21  public interface IChAL<RequestType, ResponseType> {
22  
23      /**
24       * This method is responsible for the response translation from the framework internal format into the channel's own
25       * format. Each AbstractChAL should implement this method in a way adapted to the specific needs of the incoming
26       * request. The original request type is passed to the method because some technologies (such as Servlets) don't
27       * allow content writing on the response object.
28       * 
29       * @param difResponse
30       *            the framework's response
31       * @param originalRequest
32       *            the original request
33       * @param finalResponse
34       *            the response to send back to the Listener
35       */
36      public void publish(IDIFResponse difResponse, RequestType originalRequest, ResponseType finalResponse);
37  
38      /**
39       * This method will be called by the client via Listener.
40       * 
41       * @param originalRequest
42       *            the original request made by the client
43       * @param finalResponse
44       *            the response object passed by the Listener and that will be sent back
45       * @param action
46       *            the REST action if specified
47       * @return the DIFResponse containing the framework's response
48       */
49      public IDIFResponse serve(RequestType originalRequest, ResponseType finalResponse, RESTAction action);
50  
51      /**
52       * This method should receive the request from the Listener and translate it to a format understandable by the
53       * framework. Each AbstractChAL should implement this method in a way adapted to the specific needs of the incoming
54       * request.
55       * 
56       * @param originalRequest
57       *            The request received from the Listener
58       * @return a BaseDIFRequest object that will be sent to the Dispatcher
59       * @throws ControllerException
60       *             when any runtime exception is thrown
61       */
62      public IDIFRequest translateRequest(RequestType originalRequest) throws ControllerException;
63  }