/**
* 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.step;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
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.app.webui.submit.JSPStep;
import org.dspace.app.webui.submit.JSPStepManager;
import org.dspace.app.webui.util.UIUtil;
import org.dspace.authorize.AuthorizeException;
import org.dspace.authorize.AuthorizeManager;
import org.dspace.authorize.ResourcePolicy;
import org.dspace.content.Item;
import org.dspace.core.ConfigurationManager;
import org.dspace.core.Context;
import org.dspace.submit.AbstractProcessingStep;
import org.dspace.submit.step.AccessStep;
/**
*
* @author Keiji Suzuki
* @version $Revision$
*/
public class JSPAccessStep extends JSPStep
{
/** JSP which displays the step to the user * */
private static final String DISPLAY_JSP = "/submit/access-step.jsp";
/** JSP which edits the selected resource policy to the user * */
private static final String EDIT_POLICY_JSP = "/submit/edit-policy.jsp";
private static final String REVIEW_JSP = "/submit/review-policy.jsp";
private boolean advanced = ConfigurationManager.getBooleanProperty("webui.submission.restrictstep.enableAdvancedForm", false);
/** log4j logger */
private static Logger log = Logger.getLogger(JSPAccessStep.class);
/**
* 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 void doPreProcessing(Context context, HttpServletRequest request,
HttpServletResponse response, SubmissionInfo subInfo)
throws ServletException, IOException, SQLException,
AuthorizeException
{
// Tell JSPStepManager class to load "access-step.jsp"
JSPStepManager.showJSP(request, response, subInfo, DISPLAY_JSP);
}
/**
* 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 void doPostProcessing(Context context, HttpServletRequest request,
HttpServletResponse response, SubmissionInfo subInfo, int status)
throws ServletException, IOException, SQLException,
AuthorizeException
{
String buttonPressed = UIUtil.getSubmitButton(request,
AbstractProcessingStep.NEXT_BUTTON);
if (status == AccessStep.STATUS_EDIT_POLICY)
{
JSPStepManager.showJSP(request, response, subInfo, EDIT_POLICY_JSP);
}
else if (buttonPressed.equals(AccessStep.FORM_ACCESS_BUTTON_ADD)
|| buttonPressed.startsWith("submit_delete_edit_policies_")
|| buttonPressed.equals(AccessStep.FORM_EDIT_BUTTON_CANCEL)
|| buttonPressed.equals(AccessStep.FORM_EDIT_BUTTON_SAVE)
|| status > 0)
{
// Here's some sample error message processing!
if (status > 0 && status != AccessStep.STATUS_EDIT_POLICY)
{
request.setAttribute("error_id", Integer.valueOf(status));
}
// special processing for this error message
JSPStepManager.showJSP(request, response, subInfo, DISPLAY_JSP);
}
}
/**
* Retrieves the number of pages that this "step" extends over. This method
* is used by the SubmissionController 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
{
return 1;
}
/**
* 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 String getReviewJSP(Context context, HttpServletRequest request,
HttpServletResponse response, SubmissionInfo subInfo)
{
// Policies List
List<ResourcePolicy> rpolicies = new ArrayList<ResourcePolicy>();
try
{
rpolicies = AuthorizeManager.findPoliciesByDSOAndType(context, subInfo.getSubmissionItem().getItem(), ResourcePolicy.TYPE_CUSTOM);
}
catch (SQLException e)
{
log.error(e.getMessage(), e);
}
Item item = subInfo.getSubmissionItem().getItem();
request.setAttribute("submission.item.isdiscoverable", item.isDiscoverable());
request.setAttribute("submission.item.rpolicies", rpolicies);
request.setAttribute("advancedEmbargo", advanced);
return REVIEW_JSP;
}
}