/* (c) 2014 Open Source Geospatial Foundation - all rights reserved * (c) 2001 - 2013 OpenPlans * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.ows; import org.geoserver.platform.Operation; import org.geoserver.platform.Service; import org.geoserver.platform.ServiceException; /** * Provides call backs for the life cycle of an ows request. * <p> * Instances of this interface should be registered in a spring application context like: * </p> * * <pre> * <bean id="myCallback" class="org.acme.MyCallback"/> * </pre> * * @author Justin Deoliveira, OpenGEO */ public interface DispatcherCallback { /** * Called immediately after a request has been received and initialized by the * dispatcher. * <p> * This method can modify the request object, or wrap and return it. If null is * returned the request passed in is used normally. * </p> * @param request The request being executed. */ Request init( Request request ); /** * Called after the service for the request has been determined. * <p> * This method can modify the service object, or wrap and return it. If null is * returned the service passed in is used normally. * </p> * @param request The request. * @param service The service descriptor for the service handling the request. */ Service serviceDispatched( Request request, Service service ) throws ServiceException; /** * Called after the operation for the request has been determined. * <p> * This method can modify the operation object, or wrap and return it. If null is * returned the operation passed in is used normally. * </p> * @param request The request. * @param operation The operation for the request. */ Operation operationDispatched( Request request, Operation operation ); /** * Called after the operation for a request has been executed. * <p> * <b>Note:</b>This method should handle the case where <tt>result</tt> is null as this * corresponds to an operation which does not return a value. * </p> * <p> * This method can modify the result object, or wrap and return it. If null is * returned the result passed in is used normally. * </p> * @param request The request. * @param operation The operation. * @param result The result of the operation, may be <code>null</code>. */ Object operationExecuted( Request request, Operation operation, Object result ); /** * Called after the response to a request has been dispatched. * <p> * <b>Note:</b> This method is only called when the operation returns a value. * </p> * <p> * This method can modify the response object, or wrap and return it. If null is * returned the response passed in is used normally. * </p> * @param request The request. * @param operation The operation. * @param result The result of the operation. * @param response The response to the operation. */ Response responseDispatched( Request request, Operation operation, Object result, Response response ); /** * Called after the response to the operation has been executed. * <p> * This method is called regardless if the operation was successful or not. In the event of a * request that resulted in an error, the error is available at {@link Request#error}. * </p> * * @param request The request. */ void finished( Request request ); }