/* * SampleStep.java * * Version: $Revision: 3738 $ * * Date: $Date: 2009-04-24 04:32:12 +0000 (Fri, 24 Apr 2009) $ * * Copyright (c) 2002-2009, The DSpace Foundation. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * - Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * - Neither the name of the DSpace Foundation nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * DAMAGE. */ package org.dspace.submit.step; import java.io.IOException; import java.sql.SQLException; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; import org.dspace.app.util.SubmissionInfo; import org.dspace.authorize.AuthorizeException; import org.dspace.core.Context; import org.dspace.submit.AbstractProcessingStep; /** * This is a Sample Step class which can be used as template for creating new * custom Step processing classes! * <p> * Please Note: The basic methods you will want to override are described below. * However, obviously, you are completely free to create your own methods for * this Step, or override other methods. For more examples, look at the code * from one of the provided DSpace step classes in the "org.dspace.submit.step" * package. * <P> * This class performs all the behind-the-scenes processing that * this particular step requires. This class's methods are utilized * by both the JSP-UI and the Manakin XML-UI * <P> * If you are utilizing the JSP-UI, you will also be required to create * a class which implements org.dspace.app.webui.submit.JSPStep, and provide * the necessary JSP-related methods. There is a corresponding sample * of such a class at org.dspace.app.webui.submit.step.JSPSampleStep. * * @see org.dspace.app.util.SubmissionConfig * @see org.dspace.app.util.SubmissionStepConfig * @see org.dspace.submit.AbstractProcessingStep * * @author Tim Donohue * @version $Revision: 3738 $ */ public class SampleStep extends AbstractProcessingStep { /*************************************************************************** * STATUS / ERROR FLAGS (returned by doProcessing() if an error occurs or * additional user interaction may be required) * * (Do NOT use status of 0, since it corresponds to STATUS_COMPLETE flag * defined in the JSPStepManager class) **************************************************************************/ public static final int STATUS_USER_INPUT_ERROR = 1; /** log4j logger */ private static Logger log = Logger.getLogger(SampleStep.class); /** * Do any processing of the information input by the user, and/or perform * step processing (if no user interaction required) * <P> * It is this method's job to save any data to the underlying database, as * necessary, and return error messages (if any) which can then be processed * by the appropriate user interface (JSP-UI or XML-UI) * <P> * NOTE: If this step is a non-interactive step (i.e. requires no UI), then * it should perform *all* of its processing in this method! * * @param context * current DSpace context * @param request * current servlet request object * @param response * current servlet response object * @param subInfo * submission info object * @return Status or error flag which will be processed by * doPostProcessing() below! (if STATUS_COMPLETE or 0 is returned, * no errors occurred!) */ public int doProcessing(Context context, HttpServletRequest request, HttpServletResponse response, SubmissionInfo subInfo) throws ServletException, IOException, SQLException, AuthorizeException { /* * In this method, you should do any processing of any user input (if * this step requires user input). If this step does not require user * interaction (i.e. it has no UI), then ALL of the backend processing * should occur in this method. * * Processing may include, but is not limited to: * * 1) Saving user input data to the database (e.g. saving metadata from * a web form that a user filled out) 2) Performing ALL backend * processing for non-interactive steps 3) Determine if any errors * occurred during processing, and if so, return those error flags. * * For steps with user interaction, this method is called right after * the web form or page is submitted. For steps without user * interaction, this method is called whenever the step itself is * supposed to be processed. * */ /* * HINT: * * If any errors occurred, its recommended to create a global "flag" to * represent that error. It's much easier then for the * JSP-UI or Manakin XML-UI to determine what to do with that error. * * For example, if an error occurred, you may specify the following * return call: * * return USER_INPUT_ERROR_FLAG; * * (Note: this flag is defined at the top of this class) */ // If no errors occurred, and there were no other special messages to // report to the doPostProcessing() method, just return STATUS_COMPLETE! return STATUS_COMPLETE; } /** * Retrieves the number of pages that this "step" extends over. This method * is used to build the progress bar. * <P> * This method may just return 1 for most steps (since most steps consist of * a single page). But, it should return a number greater than 1 for any * "step" which spans across a number of HTML pages. For example, the * configurable "Describe" step (configured using input-forms.xml) overrides * this method to return the number of pages that are defined by its * configuration file. * <P> * Steps which are non-interactive (i.e. they do not display an interface to * the user) should return a value of 1, so that they are only processed * once! * * * @param request * The HTTP Request * @param subInfo * The current submission information object * * @return the number of pages in this step */ public int getNumberOfPages(HttpServletRequest request, SubmissionInfo subInfo) throws ServletException { /* * This method reports how many "pages" to put in * the Progress Bar for this Step. * * Most steps should just return 1 (which means the Step only appears * once in the Progress Bar). * * If this Step should be shown as multiple "Pages" in the Progress Bar, * then return a value higher than 1. For example, return 2 in order to * have this Step appear twice in a row within the Progress Bar. * * If you return 0, this Step will not appear in the Progress Bar at * ALL! Therefore it is important for non-interactive steps to return 0. */ // in most cases, you'll want to just return 1 return 1; } }