/** * The contents of this file are subject to the license and copyright * detailed in the LICENSE and NOTICE files at the root of the source * tree and available online at * * http://www.dspace.org/license/ */ package org.dspace.app.webui.submit; import java.io.IOException; import java.sql.SQLException; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.dspace.app.util.SubmissionInfo; import org.dspace.authorize.AuthorizeException; import org.dspace.core.Context; /** * Abstract 'binding' class for DSpace Submission Steps which use the JSP-UI. * <P> * These methods revolve around the following: (1) pre-processing of data to * prepare for display, (2) displaying the JSP, and (3) post-processing of any * user input (or alternatively backend processing, for non-interactive steps). * <P> * For the JSP UI, the job of this class is to maintain the context of where the * user is within the current "step" of the submission process. Each "step" can * consist of multiple "pages" (which roughly correspond to HTML displays), so * this class helps manage which page the user should see next. * <P> * The methods of the JSPStepManager are called in this order: * <ul> * <li>Call doPreProcessing() method</li> * <li>If showJSP() was specified from doPreProcessing(), then the JSP * specified will be displayed</li> * <li>If showJSP() was not specified from doPreProcessing(), then the * doProcessing() method is called an the step completes immediately</li> * <li>Call doProcessing() method on appropriate AbstractProcessingStep after the user returns from the JSP, in order * to process the user input</li> * <li>Call doPostProcessing() method to determine if more user interaction is * required, and if further JSPs need to be called.</li> * <li>If there are more "pages" in this step then, the process begins again * (for the new page).</li> * <li>Once all pages are complete, control is forwarded back to the * SubmissionController, and the next step is called.</li> * </ul> * * @see org.dspace.submit.AbstractProcessingStep * @see org.dspace.app.webui.servlet.SubmissionController * @see org.dspace.app.util.SubmissionConfig * @see org.dspace.app.util.SubmissionStepConfig * * @author Tim Donohue * @version $Revision$ */ public abstract class JSPStep { /** * Value to return from doPreProcessing to specify not to load any JSP Page * (equal to "") * */ public static final String NO_JSP = ""; /** * Do any pre-processing to determine which JSP (if any) is used to generate * the UI for this step. This method should include the gathering and * validating of all data required by the JSP. In addition, if the JSP * requires any variable to passed to it on the Request, this method should * set those variables. * <P> * If this step requires user interaction, then this method must call the * JSP to display, using the "showJSP()" method of the JSPStepManager class. * <P> * If this step doesn't require user interaction OR you are solely using * Manakin for your user interface, then this method may be left EMPTY, * since all step processing should occur in the doProcessing() method. * * @param context * current DSpace context * @param request * current servlet request object * @param response * current servlet response object * @param subInfo * submission info object */ public abstract void doPreProcessing(Context context, HttpServletRequest request, HttpServletResponse response, SubmissionInfo subInfo) throws ServletException, IOException, SQLException, AuthorizeException; /** * Do any post-processing after the step's backend processing occurred (in * the doProcessing() method). * <P> * It is this method's job to determine whether processing completed * successfully, or display another JSP informing the users of any potential * problems/errors. * <P> * If this step doesn't require user interaction OR you are solely using * Manakin for your user interface, then this method may be left EMPTY, * since all step processing should occur in the doProcessing() method. * * @param context * current DSpace context * @param request * current servlet request object * @param response * current servlet response object * @param subInfo * submission info object * @param status * any status/errors reported by doProcessing() method */ public abstract void doPostProcessing(Context context, HttpServletRequest request, HttpServletResponse response, SubmissionInfo subInfo, int status) throws ServletException, IOException, SQLException, AuthorizeException; /** * Return the URL path (e.g. /submit/review-metadata.jsp) of the JSP * which will review the information that was gathered in this Step. * <P> * This Review JSP is loaded by the 'Verify' Step, in order to dynamically * generate a submission verification page consisting of the information * gathered in all the enabled submission steps. * * @param context * current DSpace context * @param request * current servlet request object * @param response * current servlet response object * @param subInfo * submission info object */ public abstract String getReviewJSP(Context context, HttpServletRequest request, HttpServletResponse response, SubmissionInfo subInfo); }