4055: Workspace Uploder enhancement: work with multiple-instances of DnD Workspace Uploader in the DOM

Task-Url: https://support.d4science.org/issues/4055

Added a unique XMLHttRequest to send file/s via DnD, so we are switching for sequential upload instead of parallel

git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/widgets/workspace-uploader@128686 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
Francesco Mangiacrapa 2016-05-19 14:42:42 +00:00
parent efea5d3c8f
commit 8cc2a28cf1
1 changed files with 51 additions and 41 deletions

View File

@ -222,6 +222,18 @@ public class MultipleDNDUpload extends LayoutPanel implements HasWorskpaceUpload
field.createJsonKeyForFiles();
}
/**
* Gets the json key for files.
*
* @param uploadUUID the upload uuid
* @return the json key for files
*/
private String getJsonKeyForFiles(String uploadUUID) {
WorkspaceFieldsUploadManager field = getFieldsUploadManager(uploadUUID);
return field.getJsonKeys();
}
/**
* Generate fake uploaders.
*
@ -581,52 +593,46 @@ public class MultipleDNDUpload extends LayoutPanel implements HasWorskpaceUpload
console.log("# of file/s: " + files.length);
var filesSelected = "";
for (i = 0; i < files.length; i++) {
filesSelected += files[i].name + fileDelimiter;
}
console.log("filesSelected: " + filesSelected);
instance.@org.gcube.portlets.widgets.workspaceuploader.client.uploader.dragdrop.MultipleDNDUpload::generateFakeUploaders(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)(filesSelected,idfolder,uploadUUID);
instance.@org.gcube.portlets.widgets.workspaceuploader.client.uploader.dragdrop.MultipleDNDUpload::createJsonKeyForFiles(Ljava/lang/String;)(uploadUUID);
instance.@org.gcube.portlets.widgets.workspaceuploader.client.uploader.dragdrop.MultipleDNDUpload::updateJsonKeys(Ljava/lang/String;)(uploadUUID);
instance.@org.gcube.portlets.widgets.workspaceuploader.client.uploader.dragdrop.MultipleDNDUpload::setCurrentJsonKeValue(Ljava/lang/String;)(uploadUUID);
var jsonKeys = instance.@org.gcube.portlets.widgets.workspaceuploader.client.uploader.dragdrop.MultipleDNDUpload::currentJsonKey;
// var jsonKeys = instance.@org.gcube.portlets.widgets.workspaceuploader.client.uploader.dragdrop.MultipleDNDUpload::getJsonKeyForFiles(Ljava/lang/String;)
// var jsonKeysMap = instance.@org.gcube.portlets.widgets.workspaceuploader.client.uploader.dragdrop.MultipleDNDUpload::jsonKeys;
console.log("jsonKeys: " + jsonKeys);
var xhr = new XMLHttpRequest();
xhr.open(opts.type, opts.url, true);
var formdata = new FormData();
formdata.append("client_upload_keys", jsonKeys);
formdata.append("uploadType", uploadType);
formdata.append("idFolder", idfolder);
var overwrite = false;
formdata.append("isOverwrite", overwrite);
var numFolder = 0;
for (var i = 0; i < files.length; i++) {
var file = files[i];
var fileSelected = files[i].name + fileDelimiter;
if (!isFolder(file)) {
console.log("fileSelected: " + fileSelected);
console.log("files: " + files);
instance.@org.gcube.portlets.widgets.workspaceuploader.client.uploader.dragdrop.MultipleDNDUpload::generateFakeUploaders(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)(fileSelected,idfolder,uploadUUID);
instance.@org.gcube.portlets.widgets.workspaceuploader.client.uploader.dragdrop.MultipleDNDUpload::createJsonKeyForFiles(Ljava/lang/String;)(uploadUUID);
instance.@org.gcube.portlets.widgets.workspaceuploader.client.uploader.dragdrop.MultipleDNDUpload::updateJsonKeys(Ljava/lang/String;)(uploadUUID);
// var jsonKeysMap = instance.@org.gcube.portlets.widgets.workspaceuploader.client.uploader.dragdrop.MultipleDNDUpload::jsonKeys;
// console.log("jsonKeysMap: " + jsonKeysMap);
// instance.@org.gcube.portlets.widgets.workspaceuploader.client.uploader.dragdrop.MultipleDNDUpload::setCurrentJsonKeValue(Ljava/lang/String;)(uploadUUID);
// var keyVal = instance.@org.gcube.portlets.widgets.workspaceuploader.client.uploader.dragdrop.MultipleDNDUpload::currentJsonKey;
// console.log("keyVal: " + keyVal);
var jsonKeysMap = instance.@org.gcube.portlets.widgets.workspaceuploader.client.uploader.dragdrop.MultipleDNDUpload::jsonKeys;
console.log("jsonKeysMap: " + jsonKeysMap);
instance.@org.gcube.portlets.widgets.workspaceuploader.client.uploader.dragdrop.MultipleDNDUpload::setCurrentJsonKeValue(Ljava/lang/String;)(uploadUUID);
var keyVal = instance.@org.gcube.portlets.widgets.workspaceuploader.client.uploader.dragdrop.MultipleDNDUpload::currentJsonKey;
console.log("keyVal: " + keyVal);
var xhr = new XMLHttpRequest();
// var upload = xhr.upload;
// upload.fileIndex = i;
// upload.fileObj = file;
// upload.downloadStartTime = new Date().getTime();
// upload.currentStart = upload.downloadStartTime;
// upload.currentProgress = 0;
// upload.startData = 0;
// console.log("upload: " + upload.toString());
// add listeners
// upload.addEventListener("progress", progress, false);
// upload.addEventListener("load", load, false);
xhr.open(opts.type, opts.url, true);
// var boundary = "AJAX--------------" + (new Date).getTime();
// var contentType = "multipart/form-data; boundary=" + boundary;
// xhr.setRequestHeader("Content-Type", contentType);
// Use native function(Chrome 5+ ,Safari 5+ and Firefox 4+), for dealing
// with multipart/form-data and boundray generation
var formdata = new FormData();
formdata.append("client_upload_keys", keyVal);
formdata.append("uploadType", uploadType);
formdata.append("idFolder", idfolder);
//OVERWRITE??
var overwrite = false;
if(files.length == 1){
console.log("one drag, overwrite?");
var wsUtil = instance.@org.gcube.portlets.widgets.workspaceuploader.client.uploader.dragdrop.MultipleDNDUpload::workspaceUtil;
@ -649,18 +655,22 @@ public class MultipleDNDUpload extends LayoutPanel implements HasWorskpaceUpload
}
}
// var xhr = new XMLHttpRequest();
// xhr.open(opts.type, opts.url, true);
formdata.append("isOverwrite", overwrite);
// formdata.append("isOverwrite", overwrite);
//*********uploadFormElement MUST BE THE LAST!!!
formdata.append('uploadFormElement', file);
xhr.send(formdata);
instance.@org.gcube.portlets.widgets.workspaceuploader.client.uploader.dragdrop.MultipleDNDUpload::addNewSubmitToMonitor(Ljava/lang/String;)(uploadUUID);
// xhr.send(formdata);
// reader.readAsText(file);
}else{
numFolder++;
}
}
xhr.send(formdata);
instance.@org.gcube.portlets.widgets.workspaceuploader.client.uploader.dragdrop.MultipleDNDUpload::addNewSubmitToMonitor(Ljava/lang/String;)(uploadUUID);
if(numFolder>0){
var msg;
if(numFolder==files.length){