📄 submitservlet.java
字号:
// 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(); // Everything went OK if we get to here, so now response // to the original button press if (request.getParameter("submit_next") != null) { // Update user's progress userHasReached(subInfo, EDIT_METADATA_1); // User has clicked "Next" doStep(context, request, response, subInfo, EDIT_METADATA_1); context.complete(); } else { // Progress bar button clicked doStepJump(context, request, response, subInfo); context.complete(); } } /** * process input from edit-metadata.jsp * * @param context * current DSpace context * @param request * current servlet request object * @param response * current servlet response object * @param subInfo * submission info object * @param curStep * page number in edit sequence, starting at zero */ private void processEditMetadata(Context context, HttpServletRequest request, HttpServletResponse response, SubmissionInfo subInfo, int curStep) 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, curStep, curStep); return; } Item item = subInfo.submission.getItem(); // lookup applicable inputs Collection c = subInfo.submission.getCollection(); DCInput[] inputs = inputsReader.getInputs(c.getHandle()).getPageRows(curStep - EDIT_METADATA_1, subInfo.submission.hasMultipleTitles(), subInfo.submission.isPublishedBefore()); // clear out all item metadata defined for this collection and page for (int i = 0; i < inputs.length; i++) { String dcQualifier = inputs[i].getQualifier(); if (dcQualifier == null && inputs[i].getInputType().equals("qualdrop_value")) { dcQualifier = Item.ANY; } item.clearMetadata(inputs[i].getSchema(), inputs[i].getElement(), dcQualifier, Item.ANY); } // now update the item metadata. String fieldName; boolean moreInput = false; for (int j = 0; j < inputs.length; j++) { String dcElement = inputs[j].getElement(); String dcQualifier = inputs[j].getQualifier(); String dcSchema = inputs[j].getSchema(); if (dcQualifier != null && ! dcQualifier.equals(Item.ANY)) { fieldName = dcSchema + "_" + dcElement + '_' + dcQualifier; } else { fieldName = dcSchema + "_" + dcElement; } String inputType = inputs[j].getInputType(); if (inputType.equals("name")) { readNames(request, item, dcSchema, dcElement, dcQualifier, inputs[j].getRepeatable()); } else if (inputType.equals("date")) { readDate(request, item, dcSchema, dcElement, dcQualifier); } else if (inputType.equals("series")) { readSeriesNumbers(request, item, dcSchema, dcElement, dcQualifier, inputs[j].getRepeatable()); } else if (inputType.equals("qualdrop_value")) { List quals = getRepeatedParameter(request, dcSchema + "_" + dcElement + "_qualifier"); List vals = getRepeatedParameter(request, dcSchema + "_" + dcElement + "_value"); for (int z = 0; z < vals.size(); z++) { String thisQual = (String)quals.get(z); if ( "".equals(thisQual) ) { thisQual = null; } String thisVal = (String)vals.get(z); if (! buttonPressed.equals("submit_" + dcSchema + "_" + dcElement + "_remove_" + z) && ! thisVal.equals("")) { item.addMetadata(dcSchema, dcElement, thisQual, null, thisVal); } } } else if (inputType.equals("dropdown")) { String[] vals = request.getParameterValues(fieldName); if (vals != null) { for (int z = 0; z < vals.length; z++) { item.addMetadata(dcSchema, dcElement, dcQualifier, "en", vals[z]); } } } else if ((inputType.equals("onebox")) || (inputType.equals("twobox")) || (inputType.equals("textarea"))) { readText(request, item, dcSchema, dcElement, dcQualifier, inputs[j].getRepeatable(), "en"); } else { throw new ServletException("Field "+ fieldName + " has an unknown input type: " + inputType); } // Proceed according to button pressed if (! moreInput && buttonPressed.equals("submit_" + fieldName + "_more")) { subInfo.moreBoxesFor = fieldName; subInfo.jumpToField = fieldName; moreInput = true; } } int nextStep = -1; if ( moreInput ) { nextStep = curStep; } if (buttonPressed.equals("submit_prev")) { // NB: code here assumes steps are sequentially numbered! nextStep = curStep-1; } else if (buttonPressed.equals("submit_next")) { // scan for missing fields String gotoField = null; subInfo.missingFields = new ArrayList(); //subInfo.missingRowNums = new Vector(); for (int i = 0; i < inputs.length; i++) { String element = inputs[i].getElement(); String qual = inputs[i].getQualifier(); String schema = inputs[i].getSchema(); log.info(" inner "+schema); DCValue[] valArray = item.getMetadata(schema, element, qual, Item.ANY); boolean isEmpty = (valArray.length == 0); if (inputs[i].isRequired() && isEmpty) { subInfo.missingFields.add( new Integer(i) ); if (qual != null && !qual.equals("*")) { gotoField = schema + "_" + element + '_' + qual; } else { gotoField = schema + "_" + element; } } } // return to current edit metadata screen if any fields missing if (subInfo.missingFields.size() > 0 ) { subInfo.jumpToField = gotoField; nextStep = curStep; } else { // determine next step - skipping unused MD pages int lastMDPage = EDIT_METADATA_1 + inputsReader.getNumberInputPages(c.getHandle()) - 1; if ( curStep == lastMDPage ) { curStep = EDIT_METADATA_2; } userHasReached(subInfo, curStep+1); nextStep = curStep+1; } } else if (buttonPressed.indexOf("remove") > -1) { // Remove button pressed - stay with same form nextStep = curStep; } // Write changes to database subInfo.submission.update(); if (nextStep != -1) { doStep(context, request, response, subInfo, nextStep); } else { doStepJump(context, request, response, subInfo); } context.complete(); } /** * Process the input from the choose file page * * @param context * current DSpace context * @param request * current servlet request object * @param response * current servlet response object */ private void processChooseFile(Context context, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, SQLException, AuthorizeException { File temp = null; FileUploadRequest wrapper = null; SubmissionInfo subInfo = null; boolean ok = false; String buttonPressed = null; BitstreamFormat bf = null; Bitstream b = null; /* * To distinguish between an IOException caused by a problem with the * file upload and one caused by displaying a JSP, we do all the upload * handling in a try/catch block */ try { // Wrap multipart request to get the submission info wrapper = new FileUploadRequest(request); subInfo = getSubmissionInfo(context, wrapper); buttonPressed = UIUtil.getSubmitButton(wrapper, "submit_next"); if ((subInfo != null) && buttonPressed.equals("submit_next")) { // Create the bitstream Item item = subInfo.submission.getItem(); temp = wrapper.getFile("file"); if (temp != null && temp.length() > 0) { // Read the temp file into a bitstream InputStream is = new BufferedInputStream( new FileInputStream(temp)); // do we already have a bundle? Bundle[] bundles = item.getBundles("ORIGINAL"); if (bundles.length < 1) { // set bundle's name to ORIGINAL b = item.createSingleBitstream(is, "ORIGINAL"); } else { // we have a bundle already, just add bitstream b = bundles[0].createBitstream(is); } // Strip all but the last filename. It would be nice // to know which OS the file came from. String noPath = wrapper.getFilesystemName("file"); while (noPath.indexOf('/') > -1) { noPath = noPath.substring(noPath.indexOf('/') + 1); } while (noPath.indexOf('\\') > -1) { noPath = noPath.substring(noPath.indexOf('\\') + 1); } b.setName(noPath); b.setSource(wrapper.getFilesystemName("file")); b.setDescription(wrapper.getParameter("description")); // Identify the format bf = FormatIdentifier.guessFormat(context, b); b.setFormat(bf); // Update to DB b.update(); item.update(); ok = true; } } } catch (IOException ie) { // Problem with uploading log.warn(LogManager.getHeader(context, "upload_error", ""), ie); } if (subInfo == null) { // In any event, if we don't have the submission info, the request // was malformed log.warn(LogManager.getHeader(context, "integrity_error", UIUtil .getRequestLogInfo(request))); } else if (buttonPressed.equals("submit_cancel")) { doCancellation(request, response, subInfo, SubmitServlet.CHOOSE_FILE, SubmitServlet.UPLOAD_FILES); } else if (buttonPressed.equals("submit_prev")) { // Slightly tricky; if the user clicks on "previous," // and they haven't uploaded any files yet, the previous // screen is the edit metadata 2 page. If there are // upload files, we go back to the file list page, // without uploading the file they've specified. if (subInfo.submission.getItem().getBundles("ORIGINAL").length > 0) { // Have files, go to list showUploadFileList(request, response, subInfo, false, false); } else { // No files, go back to last edit metadata page Collection c = subInfo.submission.getCollection();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -