diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/MultipleSubmissionLookupDataLoader.java b/dspace-api/src/main/java/org/dspace/submit/lookup/MultipleSubmissionLookupDataLoader.java index 68f3e2c57c49..c876a940ea0e 100644 --- a/dspace-api/src/main/java/org/dspace/submit/lookup/MultipleSubmissionLookupDataLoader.java +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/MultipleSubmissionLookupDataLoader.java @@ -7,6 +7,9 @@ */ package org.dspace.submit.lookup; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.io.OutputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; @@ -184,4 +187,9 @@ public void setSearchTerms(Map> searchTerms) { } } } + + public void setFile(InputStream inputStream) { + // TODO Auto-generated method stub + + } } diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/SubmissionLookupService.java b/dspace-api/src/main/java/org/dspace/submit/lookup/SubmissionLookupService.java index 446fd2d119f1..9e1e1439f564 100644 --- a/dspace-api/src/main/java/org/dspace/submit/lookup/SubmissionLookupService.java +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/SubmissionLookupService.java @@ -7,8 +7,8 @@ */ package org.dspace.submit.lookup; -import edu.emory.mathcs.backport.java.util.Arrays; import gr.ekt.bte.core.Record; +import gr.ekt.bte.core.TransformationEngine; import java.util.ArrayList; import java.util.HashMap; @@ -18,11 +18,8 @@ import javax.servlet.http.HttpServletRequest; import org.apache.log4j.Logger; -import org.dspace.identifier.DOI; import org.dspace.submit.util.SubmissionLookupDTO; -import gr.ekt.bte.core.TransformationEngine; - public class SubmissionLookupService { public static final String SL_NAMESPACE_PREFIX = "http://www.dspace.org/sl/"; @@ -149,4 +146,9 @@ public static String getProviderName(Record rec) { public static String getType(Record rec) { return SubmissionLookupUtils.getFirstValue(rec, SubmissionLookupProvider.TYPE); } + + public List getFileProviders() { + // TODO Auto-generated method stub + return null; + } } diff --git a/dspace-api/src/main/resources/Messages.properties b/dspace-api/src/main/resources/Messages.properties index aa15dff7476e..0b255e7aa5cf 100644 --- a/dspace-api/src/main/resources/Messages.properties +++ b/dspace-api/src/main/resources/Messages.properties @@ -1716,4 +1716,11 @@ jsp.submit.start-lookup-submission.js.errormessage = Sorry, an error is occurred jsp.submit.start-lookup-submission.js.detailsbuttonmessage = See details jsp.submit.start-lookup-submission.js.filldataandstartbuttonmessage = Fill data and start submission jsp.submit.start-lookup-submission.js.titlepopupmessage = Publication details -jsp.submit.start-lookup-submission.no-collection.dialog.return = I understand \ No newline at end of file +jsp.submit.start-lookup-submission.no-collection.dialog.return = I understand + +jsp.submit.start-lookup-submission.byfile = Upload a file +jsp.submit.start-lookup-submission.byfile.hints = Choose a file to upload, if you want select one publication from the set filled into the file check out the preview mode otherwise choose an owner collection, in the last case all publications will be imported - recall that in this mode the owner collection will be extract automatically from file +jsp.submit.start-lookup-submission.byfile.chooseprovider = Select data provider +jsp.submit.start-lookup-submission.byfile.file = File +jsp.submit.start-lookup-submission.byfile.filepreview = Check this if you want the preview mode +jsp.submit.start-lookup-submission.byfile.filecollection = Collection \ No newline at end of file diff --git a/dspace-jspui/src/main/java/org/dspace/app/webui/json/SubmissionLookupJSONRequest.java b/dspace-jspui/src/main/java/org/dspace/app/webui/json/SubmissionLookupJSONRequest.java index 49a5ceb1d3fa..c66801a5596c 100644 --- a/dspace-jspui/src/main/java/org/dspace/app/webui/json/SubmissionLookupJSONRequest.java +++ b/dspace-jspui/src/main/java/org/dspace/app/webui/json/SubmissionLookupJSONRequest.java @@ -15,10 +15,12 @@ import gr.ekt.bte.exceptions.MalformedSourceException; import java.io.IOException; +import java.io.InputStream; import java.util.ArrayList; import java.util.Enumeration; import java.util.HashMap; import java.util.HashSet; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.MissingResourceException; @@ -27,6 +29,14 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.apache.commons.fileupload.FileItem; +import org.apache.commons.fileupload.FileItemFactory; +import org.apache.commons.fileupload.FileItemIterator; +import org.apache.commons.fileupload.FileItemStream; +import org.apache.commons.fileupload.FileUploadException; +import org.apache.commons.fileupload.disk.DiskFileItemFactory; +import org.apache.commons.fileupload.servlet.ServletFileUpload; +import org.apache.commons.fileupload.util.Streams; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.dspace.app.webui.util.UIUtil; @@ -53,10 +63,11 @@ public class SubmissionLookupJSONRequest extends JSONRequest { @Override public void doJSONRequest(Context context, HttpServletRequest req, - HttpServletResponse resp) throws AuthorizeException, IOException - { + HttpServletResponse resp) throws AuthorizeException, IOException { String suuid = req.getParameter("s_uuid"); SubmissionLookupDTO subDTO = service.getSubmissionLookupDTO(req, suuid); + // Check that we have a file upload request + boolean isMultipart = ServletFileUpload.isMultipartContent(req); if ("identifiers".equalsIgnoreCase(req.getParameter("type"))) { Map> identifiers = new HashMap>(); Enumeration e = req.getParameterNames(); @@ -77,17 +88,20 @@ public void doJSONRequest(Context context, HttpServletRequest req, List result = new ArrayList(); - TransformationEngine transformationEngine = service.getPhase1TransformationEngine(); - if (transformationEngine != null){ - MultipleSubmissionLookupDataLoader dataLoader = (MultipleSubmissionLookupDataLoader)transformationEngine.getDataLoader(); + TransformationEngine transformationEngine = service + .getPhase1TransformationEngine(); + if (transformationEngine != null) { + MultipleSubmissionLookupDataLoader dataLoader = (MultipleSubmissionLookupDataLoader) transformationEngine + .getDataLoader(); dataLoader.setIdentifiers(identifiers); try { log.debug("BTE transformation is about to start!"); transformationEngine.transform(new TransformationSpec()); log.debug("BTE transformation finished!"); - - SubmissionLookupOutputGenerator outputGenerator = (SubmissionLookupOutputGenerator)transformationEngine.getOutputGenerator(); + + SubmissionLookupOutputGenerator outputGenerator = (SubmissionLookupOutputGenerator) transformationEngine + .getOutputGenerator(); result = outputGenerator.getDtoList(); } catch (BadTransformationSpec e1) { e1.printStackTrace(); @@ -117,15 +131,18 @@ public void doJSONRequest(Context context, HttpServletRequest req, searchTerms.put("title", tmp1); searchTerms.put("authors", tmp2); searchTerms.put("year", tmp3); - + List result = new ArrayList(); - TransformationEngine transformationEngine = service.getPhase1TransformationEngine(); - if (transformationEngine != null){ - MultipleSubmissionLookupDataLoader dataLoader = (MultipleSubmissionLookupDataLoader)transformationEngine.getDataLoader(); + TransformationEngine transformationEngine = service + .getPhase1TransformationEngine(); + if (transformationEngine != null) { + MultipleSubmissionLookupDataLoader dataLoader = (MultipleSubmissionLookupDataLoader) transformationEngine + .getDataLoader(); dataLoader.setSearchTerms(searchTerms); - SubmissionLookupOutputGenerator outputGenerator = (SubmissionLookupOutputGenerator)transformationEngine.getOutputGenerator(); + SubmissionLookupOutputGenerator outputGenerator = (SubmissionLookupOutputGenerator) transformationEngine + .getOutputGenerator(); result = outputGenerator.getDtoList(); try { transformationEngine.transform(new TransformationSpec()); @@ -149,13 +166,86 @@ public void doJSONRequest(Context context, HttpServletRequest req, Map dto = getDetails(subDTO.getLookupItem(i_uuid), context); serializer.deepSerialize(dto, resp.getWriter()); + } else if (isMultipart) { + + // Create a factory for disk-based file items + FileItemFactory factory = new DiskFileItemFactory(); + // Create a new file upload handler + ServletFileUpload upload = new ServletFileUpload(factory); + // Parse the request + Map valueMap = new HashMap(); + InputStream io = null; + // Parse the request + FileItemIterator iter; + try { + iter = upload.getItemIterator(req); + while (iter.hasNext()) { + FileItemStream item = iter.next(); + String name = item.getFieldName(); + InputStream stream = item.openStream(); + if (item.isFormField()) { + String value = Streams.asString(stream); + valueMap.put(name, value); + } else { + io = stream; + // Process the input stream + } + } + } catch (FileUploadException e) { + throw new IOException(e); + } + + + List result = new ArrayList(); + + TransformationEngine transformationEngine = service + .getPhase1TransformationEngine(); + if (transformationEngine != null) { + MultipleSubmissionLookupDataLoader dataLoader = (MultipleSubmissionLookupDataLoader) transformationEngine + .getDataLoader(); + dataLoader.setFile(io); + + SubmissionLookupOutputGenerator outputGenerator = (SubmissionLookupOutputGenerator) transformationEngine + .getOutputGenerator(); + result = outputGenerator.getDtoList(); + try { + transformationEngine.transform(new TransformationSpec()); + } catch (BadTransformationSpec e1) { + e1.printStackTrace(); + } catch (MalformedSourceException e1) { + e1.printStackTrace(); + } + } + subDTO.setItems(result); + service.storeDTOs(req, valueMap.get("s_uuid"), subDTO); + List> dto = getLightResultList(result); + if (valueMap.containsKey("skip_loader")) { + if (valueMap.get("skip_loader").equals("true")) { + Map skip = new HashMap(); + skip.put( + "skip", + Boolean.TRUE); + skip.put( + "uuid", + valueMap.containsKey("s_uuid") ? valueMap.get("s_uuid") + : -1); + skip.put( + "collectionid", + valueMap.containsKey("collectionid") ? valueMap + .get("collectionid") : -1); + dto.add(skip); + } + } + JSONSerializer serializer = new JSONSerializer(); + serializer.rootName("result"); + serializer.deepSerialize(dto, resp.getWriter()); } } private Map getDetails(ItemSubmissionLookupDTO item, Context context) { List fieldOrder = getFieldOrderFromConfiguration(); - Record totalData = item.getTotalPublication(service.getProviders()); + Record totalData = item.getTotalPublication(service.getProviders()); Set availableFields = totalData.getFields(); List fieldsLabels = new ArrayList(); for (String f : fieldOrder) { @@ -172,7 +262,7 @@ private Map getDetails(ItemSubmissionLookupDTO item, } Map data = new HashMap(); String uuid = item.getUUID(); - Record pub = item.getTotalPublication(service.getProviders()); + Record pub = item.getTotalPublication(service.getProviders()); data.put("uuid", uuid); data.put("providers", item.getProviders()); data.put("publication", pub); @@ -199,17 +289,22 @@ private List getFieldOrderFromConfiguration() { private List> getLightResultList( List result) { List> publications = new ArrayList>(); - if (result != null && result.size()>0) { + if (result != null && result.size() > 0) { for (ItemSubmissionLookupDTO item : result) { String uuid = item.getUUID(); Record pub = item.getTotalPublication(service.getProviders()); Map data = new HashMap(); data.put("uuid", uuid); data.put("providers", item.getProviders()); - data.put("title", SubmissionLookupUtils.getFirstValue(pub, "title")); - data.put("authors",pub.getValues("authors")!=null? - StringUtils.join(SubmissionLookupUtils.getValues(pub, "authors").iterator(), ", "):""); - data.put("issued", SubmissionLookupUtils.getFirstValue(pub, "issued")); + data.put("title", + SubmissionLookupUtils.getFirstValue(pub, "title")); + data.put( + "authors", + pub.getValues("authors") != null ? StringUtils.join( + SubmissionLookupUtils.getValues(pub, "authors") + .iterator(), ", ") : ""); + data.put("issued", + SubmissionLookupUtils.getFirstValue(pub, "issued")); publications.add(data); } diff --git a/dspace-jspui/src/main/java/org/dspace/app/webui/submit/step/JSPStartSubmissionLookupStep.java b/dspace-jspui/src/main/java/org/dspace/app/webui/submit/step/JSPStartSubmissionLookupStep.java index df8ac7585d94..8d4b9fb4838a 100644 --- a/dspace-jspui/src/main/java/org/dspace/app/webui/submit/step/JSPStartSubmissionLookupStep.java +++ b/dspace-jspui/src/main/java/org/dspace/app/webui/submit/step/JSPStartSubmissionLookupStep.java @@ -9,6 +9,7 @@ import java.io.IOException; import java.sql.SQLException; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.UUID; @@ -173,8 +174,11 @@ public void doPreProcessing(Context context, HttpServletRequest request, .getProvidersIdentifiersMap(); List searchProviders = slService .getSearchProviders(); + List fileProviders = slService + .getFileProviders(); request.setAttribute("identifiers2providers", identifiers2providers); request.setAttribute("searchProviders", searchProviders); + request.setAttribute("fileLoaders", fileProviders); request.setAttribute("identifiers", slService.getIdentifiers()); // we need to load the select collection JSP JSPStepManager diff --git a/dspace-jspui/src/main/webapp/static/js/submission-lookup.js b/dspace-jspui/src/main/webapp/static/js/submission-lookup.js index 6fbf373e01d1..1b674a60088e 100644 --- a/dspace-jspui/src/main/webapp/static/js/submission-lookup.js +++ b/dspace-jspui/src/main/webapp/static/js/submission-lookup.js @@ -113,6 +113,14 @@ submissionLookupShowResult = function(info){ j('#result-list').html(" "); for (var i=0;i').append(j('#jsseedetailsbuttonmessage').text()); var par = j('

'); var divImg = j('

'); @@ -186,4 +194,58 @@ submissionLookupShowDetails = function(info){ }); modalfooter.append(start); j('#loading-details').modal('show'); +} + +submissionLookupPreview = function(){ + + var suuidVal = j('#suuid').val(); + var suuid = j(''); + var collectionidVal = j('#select-collection-file').val(); + var collectionid = j(''); + var preview_loader = ""; + if(j('#preview_loader').is (':checked')) { + preview_loader = j(''); + } + else { + preview_loader = j(''); + } + + var provider_loaderVal = j('#provider_loader').val(); + var provider_loader = j(''); + + var iframe = j('