📄 submitservlet.java
字号:
else { /* * If the submission info was invalid, set the step to an * invalid number so an integrity error will be shown */ step = -1; } } if (step >= EDIT_METADATA_1 && step <= EDIT_METADATA_2) { processEditMetadata(context, request, response, subInfo, step); return; } switch (step) { case INITIAL_QUESTIONS: processInitialQuestions(context, request, response, subInfo); break; case GET_FILE_FORMAT: processGetFileFormat(context, request, response, subInfo); break; case FILE_LIST: processFileList(context, request, response, subInfo); break; case UPLOAD_ERROR: processUploadError(context, request, response, subInfo); break; case CHANGE_FILE_DESCRIPTION: processChangeFileDescription(context, request, response, subInfo); break; case REVIEW_SUBMISSION: processReview(context, request, response, subInfo); break; case CC_LICENSE: processCC(context, request, response, subInfo); break; case GRANT_LICENSE: processLicense(context, request, response, subInfo); break; case SUBMISSION_CANCELLED: processCancellation(context, request, response, subInfo); break; case VERIFY_PRUNE: processVerifyPrune(context, request, response, subInfo); break; default: log.warn(LogManager.getHeader(context, "integrity_error", UIUtil .getRequestLogInfo(request))); JSPManager.showIntegrityError(request, response); } } //**************************************************************** //**************************************************************** // METHODS FOR PROCESSING POSTED FORMS //**************************************************************** //**************************************************************** /** * Process the selection collection stage, or the clicking of a "submit to * this collection" button on a collection home page. * * @param context * current DSpace context * @param request * current servlet request object * @param response * current servlet response object */ private void processSelectCollection(Context context, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, SQLException, AuthorizeException { // The user might have clicked cancel. We don't do a // standard cancellation at this stage, since we don't // actually have an item to keep or remove yet. if (request.getParameter("submit_cancel") != null) { // Just send them to their "My DSpace" for now. response.sendRedirect(response.encodeRedirectURL(request .getContextPath() + "/mydspace")); return; } // First we find the collection int id = UIUtil.getIntParameter(request, "collection"); Collection col = Collection.find(context, id); // Show an error if we don't have a collection if (col == null) { JSPManager.showInvalidIDError(request, response, request .getParameter("collection"), Constants.COLLECTION); } else { WorkspaceItem wi = WorkspaceItem.create(context, col, true); // Proceed to first step SubmissionInfo si = new SubmissionInfo(); si.submission = wi; doStep(context, request, response, si, INITIAL_QUESTIONS); context.complete(); } } /** * process input from initial-questions.jsp * * @param context * current DSpace context * @param request * current servlet request object * @param response * current servlet response object * @param subInfo * submission info object */ private void processInitialQuestions(Context context, HttpServletRequest request, HttpServletResponse response, SubmissionInfo subInfo) throws ServletException, IOException, SQLException, AuthorizeException { String buttonPressed = UIUtil.getSubmitButton(request, "submit_next"); // Firstly, check for a click of the cancel button. if (buttonPressed.equals("submit_cancel")) { doCancellation(request, response, subInfo, INITIAL_QUESTIONS, INITIAL_QUESTIONS); return; } // Get the values from the form boolean multipleTitles = UIUtil.getBoolParameter(request, "multiple_titles"); boolean publishedBefore = UIUtil.getBoolParameter(request, "published_before"); boolean multipleFiles = UIUtil.getBoolParameter(request, "multiple_files"); boolean isThesis = ConfigurationManager .getBooleanProperty("webui.submit.blocktheses") && UIUtil.getBoolParameter(request, "is_thesis"); if (isWorkflow(subInfo)) { // Thesis question does not appear in workflow mode.. isThesis = false; // Pretend "multiple files" is true in workflow mode // (There will always be the license file) multipleFiles = true; } // First and foremost - if it's a thesis, reject the submission if (isThesis) { WorkspaceItem wi = (WorkspaceItem) subInfo.submission; wi.deleteAll(); // Remember that we've removed a thesis in the session request.getSession().setAttribute("removed_thesis", new Boolean(true)); // Display appropriate message JSPManager.showJSP(request, response, "/submit/no-theses.jsp"); context.complete(); return; } // Now check to see if the changes will remove any values // (i.e. multiple files, titles or an issue date.) boolean willRemoveTitles = false; boolean willRemoveDate = false; boolean willRemoveFiles = false; if (multipleTitles == false) { DCValue[] altTitles = subInfo.submission.getItem().getDC( "title", "alternative", Item.ANY); willRemoveTitles = altTitles.length > 0; } if (publishedBefore == false) { DCValue[] dateIssued = subInfo.submission.getItem().getDC("date", "issued", Item.ANY); DCValue[] citation = subInfo.submission.getItem().getDC( "identifier", "citation", Item.ANY); DCValue[] publisher = subInfo.submission.getItem().getDC( "publisher", null, Item.ANY); willRemoveDate = (dateIssued.length > 0) || (citation.length > 0) || (publisher.length > 0); } if (multipleFiles == false) { // see if number of bitstreams in "ORIGINAL" bundle > 1 // FIXME: Assumes multiple bundles, clean up someday... Bundle[] bundles = subInfo.submission.getItem().getBundles( "ORIGINAL"); if (bundles.length > 0) { Bitstream[] bitstreams = bundles[0].getBitstreams(); willRemoveFiles = bitstreams.length > 1; } } // If anything is going to be removed from the item as a result // of changing the answer to one of the questions, we need // to inform the user and make sure that's OK if (willRemoveTitles || willRemoveDate || willRemoveFiles) { // Verify pruning of extra bits request.setAttribute("submission.info", subInfo); request .setAttribute("multiple.titles", new Boolean(multipleTitles)); request.setAttribute("published.before", new Boolean( publishedBefore)); request.setAttribute("multiple.files", new Boolean(multipleFiles)); request.setAttribute("will.remove.titles", new Boolean( willRemoveTitles)); request.setAttribute("will.remove.date", new Boolean(willRemoveDate)); request.setAttribute("will.remove.files", new Boolean( willRemoveFiles)); request.setAttribute("button.pressed", UIUtil.getSubmitButton( request, "submit_next")); JSPManager.showJSP(request, response, "/submit/verify-prune.jsp"); } else { // Nothing needs removing, so just make the changes subInfo.submission.setMultipleTitles(multipleTitles); subInfo.submission.setPublishedBefore(publishedBefore); // "Multiple files" irrelevant in workflow mode if (!isWorkflow(subInfo)) { subInfo.submission.setMultipleFiles(multipleFiles); } subInfo.submission.update(); // On to the next stage if (buttonPressed.equals("submit_next")) { // Update user's progress userHasReached(subInfo, EDIT_METADATA_1); // User has clicked "Next" doStep(context, request, response, subInfo, EDIT_METADATA_1); } else { // Progress bar button clicked doStepJump(context, request, response, subInfo); } context.complete(); } } /** * Process input from "verify prune" step * * @param context * current DSpace context * @param request * current servlet request object * @param response * current servlet response object * @param subInfo * submission info object */ private void processVerifyPrune(Context context, HttpServletRequest request, HttpServletResponse response, SubmissionInfo subInfo) throws ServletException, IOException, SQLException, AuthorizeException { if (request.getParameter("do_not_proceed") != null) { // User cancelled doStep(context, request, response, subInfo, INITIAL_QUESTIONS); return; } // User elected to proceed - do the pruning // Get the values from the form boolean multipleTitles = UIUtil.getBoolParameter(request, "multiple_titles"); boolean publishedBefore = UIUtil.getBoolParameter(request, "published_before"); // Multiple files question does not appear in workflow mode. // Since the submission will have a license, the answer to // this question will always be "yes" boolean multipleFiles = (isWorkflow(subInfo) || UIUtil .getBoolParameter(request, "multiple_files")); Item item = subInfo.submission.getItem(); if (!multipleTitles) { item.clearDC("title", "alternative", Item.ANY); } if (publishedBefore == false) { item.clearDC("date", "issued", Item.ANY); item.clearDC("identifier", "citation", Item.ANY); item.clearDC("publisher", null, Item.ANY); } if (multipleFiles == false) { // remove all but first bitstream from bundle[0] // FIXME: Assumes multiple bundles, clean up someday... // (only messes with the first bundle.) Bundle[] bundles = item.getBundles("ORIGINAL"); if (bundles.length > 0) { Bitstream[] bitstreams = bundles[0].getBitstreams(); // Remove all but the first bitstream for (int i = 1; i < bitstreams.length; i++) { bundles[0].removeBitstream(bitstreams[i]); } } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -