Skip to content

Commit

Permalink
Merge pull request #5 from lap82/DS-1252-bte
Browse files Browse the repository at this point in the history
Add UI support for the upload file in submission lookup
  • Loading branch information
Kostas Stamatis committed Oct 19, 2013
2 parents 8bb44db + 51e5f6e commit c097807
Show file tree
Hide file tree
Showing 7 changed files with 291 additions and 25 deletions.
Expand Up @@ -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;
Expand Down Expand Up @@ -184,4 +187,9 @@ public void setSearchTerms(Map<String, Set<String>> searchTerms) {
}
}
}

public void setFile(InputStream inputStream) {
// TODO Auto-generated method stub

}
}
Expand Up @@ -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;
Expand All @@ -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/";
Expand Down Expand Up @@ -149,4 +146,9 @@ public static String getProviderName(Record rec) {
public static String getType(Record rec) {
return SubmissionLookupUtils.getFirstValue(rec, SubmissionLookupProvider.TYPE);
}

public List<String> getFileProviders() {
// TODO Auto-generated method stub
return null;
}
}
9 changes: 8 additions & 1 deletion dspace-api/src/main/resources/Messages.properties
Expand Up @@ -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
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
Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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<String, Set<String>> identifiers = new HashMap<String, Set<String>>();
Enumeration e = req.getParameterNames();
Expand All @@ -77,17 +88,20 @@ public void doJSONRequest(Context context, HttpServletRequest req,

List<ItemSubmissionLookupDTO> result = new ArrayList<ItemSubmissionLookupDTO>();

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();
Expand Down Expand Up @@ -117,15 +131,18 @@ public void doJSONRequest(Context context, HttpServletRequest req,
searchTerms.put("title", tmp1);
searchTerms.put("authors", tmp2);
searchTerms.put("year", tmp3);

List<ItemSubmissionLookupDTO> result = new ArrayList<ItemSubmissionLookupDTO>();

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());
Expand All @@ -149,13 +166,86 @@ public void doJSONRequest(Context context, HttpServletRequest req,
Map<String, Object> 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<String, String> valueMap = new HashMap<String, String>();
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<ItemSubmissionLookupDTO> result = new ArrayList<ItemSubmissionLookupDTO>();

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<Map<String, Object>> dto = getLightResultList(result);
if (valueMap.containsKey("skip_loader")) {
if (valueMap.get("skip_loader").equals("true")) {
Map<String, Object> skip = new HashMap<String, Object>();
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<String, Object> getDetails(ItemSubmissionLookupDTO item,
Context context) {
List<String> fieldOrder = getFieldOrderFromConfiguration();
Record totalData = item.getTotalPublication(service.getProviders());
Record totalData = item.getTotalPublication(service.getProviders());
Set<String> availableFields = totalData.getFields();
List<String[]> fieldsLabels = new ArrayList<String[]>();
for (String f : fieldOrder) {
Expand All @@ -172,7 +262,7 @@ private Map<String, Object> getDetails(ItemSubmissionLookupDTO item,
}
Map<String, Object> data = new HashMap<String, Object>();
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);
Expand All @@ -199,17 +289,22 @@ private List<String> getFieldOrderFromConfiguration() {
private List<Map<String, Object>> getLightResultList(
List<ItemSubmissionLookupDTO> result) {
List<Map<String, Object>> publications = new ArrayList<Map<String, Object>>();
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<String, Object> data = new HashMap<String, Object>();
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);
}
Expand Down
Expand Up @@ -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;
Expand Down Expand Up @@ -173,8 +174,11 @@ public void doPreProcessing(Context context, HttpServletRequest request,
.getProvidersIdentifiersMap();
List<SubmissionLookupProvider> searchProviders = slService
.getSearchProviders();
List<String> 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
Expand Down
62 changes: 62 additions & 0 deletions dspace-jspui/src/main/webapp/static/js/submission-lookup.js
Expand Up @@ -113,6 +113,14 @@ submissionLookupShowResult = function(info){
j('#result-list').html(" ");
for (var i=0;i<info.result.length;i++)
{
if(info.result[i].skip==true) {
//skip details
j('#collectionid').val(info.result[i].collectionid);
j('#suuid').val(info.result[i].uuid);
j('#form-submission').submit();
return false;
}

var bt = j('<button class="btn btn-info" type="button">').append(j('#jsseedetailsbuttonmessage').text());
var par = j('<p class="sl-result">');
var divImg = j('<div class="submission-lookup-providers">');
Expand Down Expand Up @@ -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('<input type="hidden" name="s_uuid" value="'+suuidVal+'">');
var collectionidVal = j('#select-collection-file').val();
var collectionid = j('<input type="hidden" name="collectionid" value="'+collectionidVal+'">');
var preview_loader = "";
if(j('#preview_loader').is (':checked')) {
preview_loader = j('<input type="hidden" name="skip_loader" value="false">');
}
else {
preview_loader = j('<input type="hidden" name="skip_loader" value="true">');
}

var provider_loaderVal = j('#provider_loader').val();
var provider_loader = j('<input type="hidden" name="provider_loader" value="'+provider_loaderVal+'">');

var iframe = j('<iframe name="postiframe" id="postiframe" style="display: none" />');

j("body").append(iframe);

var form = j('#form-loader');
form.attr("action", dspaceContextPath+"/json/submissionLookup");
form.attr("method", "post");
form.attr("enctype", "multipart/form-data");
form.attr("encoding", "multipart/form-data");
form.attr("target", "postiframe");
form.attr("file", j('#file_upload').val());
j(form).append(suuid);
j(form).append(collectionid);
j(form).append(preview_loader);
j(form).append(provider_loader);
form.submit();

j("#postiframe").load(function () {
var iframeContents = j("#postiframe")[0].contentWindow.document.body.innerHTML;
j('#iframecontent').html(iframeContents);
var json = j.parseJSON(j("#iframecontent").text());
if (json == null || json.result == null || json.result.length == 0)
{
j('#result-list').hide();
j('#empty-result').show();
}
else
{
submissionLookupShowResult(json);
}
j('#loading-file-result').modal("hide");
j('#tabs').find('a[href="#tabs-result"]').click();
});
j('#loading-file-result').modal("show");

}

0 comments on commit c097807

Please sign in to comment.