328 lines
9.7 KiB
Java
328 lines
9.7 KiB
Java
/**
|
|
*
|
|
*/
|
|
package org.gcube.portlets.widgets.workspaceuploader.client.uploader;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
import org.gcube.portlets.widgets.workspaceuploader.client.ConstantsWorkspaceUploader;
|
|
import org.gcube.portlets.widgets.workspaceuploader.client.DialogResult;
|
|
import org.gcube.portlets.widgets.workspaceuploader.client.WorkspaceUploaderServiceAsync;
|
|
import org.gcube.portlets.widgets.workspaceuploader.shared.HandlerResultMessage;
|
|
import org.gcube.portlets.widgets.workspaceuploader.shared.WorkspaceUploadFile;
|
|
import org.gcube.portlets.widgets.workspaceuploader.shared.WorkspaceUploaderItem;
|
|
import org.gcube.portlets.widgets.workspaceuploader.shared.WorkspaceUploaderItem.UPLOAD_STATUS;
|
|
|
|
import com.google.gwt.core.client.GWT;
|
|
import com.google.gwt.event.dom.client.ClickEvent;
|
|
import com.google.gwt.event.dom.client.ClickHandler;
|
|
import com.google.gwt.json.client.JSONArray;
|
|
import com.google.gwt.json.client.JSONObject;
|
|
import com.google.gwt.json.client.JSONString;
|
|
import com.google.gwt.user.client.Window;
|
|
import com.google.gwt.user.client.rpc.AsyncCallback;
|
|
import com.google.gwt.user.client.ui.FormPanel.SubmitCompleteEvent;
|
|
import com.google.gwt.user.client.ui.FormPanel.SubmitCompleteHandler;
|
|
import com.google.gwt.user.client.ui.FormPanel.SubmitEvent;
|
|
import com.google.gwt.user.client.ui.FormPanel.SubmitHandler;
|
|
import com.google.gwt.user.client.ui.HTML;
|
|
|
|
/**
|
|
* The Class MultipleDilaogUploadStream.
|
|
*
|
|
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
|
|
* Sep 11, 2015
|
|
*/
|
|
public class MultipleDilaogUploadStream extends DialogUploadStream{
|
|
|
|
|
|
private static final String FILE_DELEMITER = ";";
|
|
private String fileUploadID;
|
|
|
|
/**
|
|
* Instantiates a new multiple dilaog upload stream.
|
|
*
|
|
* @param headerTitle the header title
|
|
* @param parentId the parent id
|
|
* @param uploadType the upload type
|
|
*/
|
|
public MultipleDilaogUploadStream(String headerTitle, String parentId, UPLOAD_TYPE uploadType) {
|
|
super(headerTitle, parentId, uploadType);
|
|
fileUpload.getElement().setAttribute("multiple", "multiple");
|
|
fileUploadID = GenerateUUID.get(10, 16); //is tagID
|
|
fileUpload.getElement().setId(fileUploadID);
|
|
this.addHandlers();
|
|
this.addListeners();
|
|
}
|
|
|
|
/**
|
|
* Adds the listeners.
|
|
*/
|
|
@Override
|
|
protected void addListeners() {
|
|
|
|
btnUpload.addClickHandler(new ClickHandler() {
|
|
|
|
@Override
|
|
public void onClick(ClickEvent event) {
|
|
GWT.log("btnSubmit click");
|
|
if (fileUpload.getFilename()==null || !(fileUpload.getFilename().length()>2)) {
|
|
GWT.log("No file specified ");
|
|
return;
|
|
}
|
|
|
|
String[] files = null;
|
|
String filesSelected = getFilesSelected(fileUploadID, FILE_DELEMITER);
|
|
GWT.log("getFilesSelected: "+filesSelected);
|
|
files = filesSelected.split(FILE_DELEMITER);
|
|
|
|
//NORMALIZE FILE NAMES
|
|
for (int i=0; i<files.length; i++) {
|
|
String normalizedFileName = files[i];
|
|
if (normalizedFileName.contains("\\")) {
|
|
files[i] = normalizedFileName.substring(normalizedFileName.lastIndexOf("\\")+1); //remove C:\fakepath\ if exists
|
|
}
|
|
}
|
|
|
|
//GENERATE NEW UPLOADERS
|
|
generateFakeUploaders(files, parentIdentifier);
|
|
GWT.log(fakeUploaders.toString());
|
|
String jsonKeys = createJsonKeyForFiles(fakeUploaders);
|
|
GWT.log(jsonKeys);
|
|
|
|
if(jsonKeys==null){
|
|
Window.alert("Sorry an error occurred during file/s submit. Try again");
|
|
return;
|
|
}
|
|
|
|
//ADD TO FORM PANEL
|
|
// initJsonClientKeys();
|
|
jsonClientKeys.setValue(jsonKeys);
|
|
|
|
//CASE 1 FILE
|
|
if(files.length==1){
|
|
/*
|
|
* TODO: recall: Some browser would write in fileUploadField.getValue() C:\fakepath\$fileName
|
|
*/
|
|
|
|
final String label = files[0];
|
|
WorkspaceUploaderServiceAsync.Util.getInstance().itemExistsInWorkpaceFolder(parentIdentifier, label, new AsyncCallback<String>() {
|
|
|
|
@Override
|
|
public void onSuccess(final String itemId) {
|
|
GWT.log("itemExistsInWorkpaceFolder: "+itemId);
|
|
if(itemId!=null){
|
|
// HANDLE OWERWRITE
|
|
if(Window.confirm(label + " exists in folder. Overwrite?")){
|
|
removeItemAndSubmitForm(itemId);
|
|
updateItemSubmitForm(itemId);
|
|
}
|
|
}else
|
|
submitForm(); //ITEM does NOT EXIST SO SUBMIT FORM;
|
|
}
|
|
|
|
@Override
|
|
public void onFailure(Throwable caught) {
|
|
GWT.log("Sorry an error occurred on the server "+caught.getLocalizedMessage() + ". Please try again later");
|
|
Window.alert(caught.getMessage());
|
|
}
|
|
|
|
});
|
|
}else
|
|
submitForm();
|
|
}
|
|
});
|
|
/*
|
|
btnCancel.addClickHandler(new ClickHandler() {
|
|
|
|
@Override
|
|
public void onClick(ClickEvent event) {
|
|
hide();
|
|
|
|
}
|
|
});*/
|
|
}
|
|
|
|
/**
|
|
* Generate new upload client keys.
|
|
*
|
|
* @param nmb the nmb
|
|
* @return
|
|
*/
|
|
private void generateFakeUploaders(String[] files, String parentId){
|
|
|
|
fakeUploaders = new ArrayList<WorkspaceUploaderItem>(files.length);
|
|
for (int i = 0; i <files.length; i++){
|
|
WorkspaceUploaderItem fakeItem = new WorkspaceUploaderItem();
|
|
fakeItem.setClientUploadKey(GenerateUUID.get());
|
|
fakeItem.setUploadStatus(UPLOAD_STATUS.WAIT);
|
|
WorkspaceUploadFile fakeFile = new WorkspaceUploadFile();
|
|
fakeFile.setFileName(files[i]);
|
|
fakeFile.setParentId(parentId);
|
|
fakeItem.setFile(fakeFile);
|
|
fakeUploaders.add(fakeItem);
|
|
}
|
|
}
|
|
|
|
|
|
/* (non-Javadoc)
|
|
* @see org.gcube.portlets.widgets.workspaceuploader.client.uploader.DialogUploadStream#addHandlers()
|
|
*/
|
|
@Override
|
|
protected void addHandlers() {
|
|
|
|
// handle the post
|
|
formPanel.addSubmitCompleteHandler(new SubmitCompleteHandler() {
|
|
|
|
@Override
|
|
public void onSubmitComplete(SubmitCompleteEvent event) {
|
|
GWT.log("onSubmitComplete");
|
|
hide();
|
|
// isStatusCompleted = true;
|
|
String result = event.getResults();
|
|
|
|
if (result == null) {
|
|
removeLoading();
|
|
new DialogResult(null, "Error during upload", "An error occurred during file upload.").center();
|
|
return;
|
|
}
|
|
String strippedResult = new HTML(result).getText();
|
|
final HandlerResultMessage resultMessage = HandlerResultMessage.parseResult(strippedResult);
|
|
|
|
switch (resultMessage.getStatus()) {
|
|
case ERROR:
|
|
removeLoading();
|
|
GWT.log("Error during upload "+resultMessage.getMessage());
|
|
break;
|
|
case UNKNOWN:
|
|
removeLoading();
|
|
GWT.log("Error during upload "+resultMessage.getMessage());
|
|
break;
|
|
case WARN: {
|
|
GWT.log("Upload completed with warnings "+resultMessage.getMessage());
|
|
removeLoading();
|
|
break;
|
|
}
|
|
case OK: {
|
|
// removeLoading();
|
|
// UploaderMonitor.getInstance().pollWorkspaceUploaderId(resultMessage.getMessage());
|
|
|
|
/*Timer t = new Timer() {
|
|
public void run() {
|
|
GWT.log("Upload started with id: "+resultMessage.getMessage());
|
|
UploaderMonitor.getInstance().pollWorkspaceUploaderId(resultMessage.getMessage());
|
|
}
|
|
};
|
|
|
|
t.schedule(250);*/
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
formPanel.addSubmitHandler(new SubmitHandler() {
|
|
|
|
@Override
|
|
public void onSubmit(SubmitEvent event) {
|
|
GWT.log("SubmitEvent");
|
|
addLoading();
|
|
enableButtons(false);
|
|
|
|
for (final WorkspaceUploaderItem workspaceUploaderItem : fakeUploaders) {
|
|
|
|
UploaderMonitor.getInstance().addNewSubmit(workspaceUploaderItem, workspaceUploaderItem.getFile().getFileName());
|
|
setVisible(false);
|
|
removeLoading();
|
|
UploaderMonitor.getInstance().pollWorkspaceUploaderId(workspaceUploaderItem.getClientUploadKey());
|
|
|
|
//WAITING 0.1 SEC TO FIRST UPDATES
|
|
/*new Timer() {
|
|
|
|
@Override
|
|
public void run() {
|
|
removeLoading();
|
|
UploaderMonitor.getInstance().pollWorkspaceUploaderId(workspaceUploaderItem.getClientUploadKey());
|
|
|
|
}
|
|
}.schedule(100);*/
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Creates the json key for files.
|
|
*
|
|
* @param files the files
|
|
* @param currentClientKeys
|
|
* @return the string
|
|
*/
|
|
protected String createJsonKeyForFiles(List<WorkspaceUploaderItem> fakeFiles){
|
|
|
|
try {
|
|
JSONObject productObj = new JSONObject();
|
|
JSONArray jsonArray = new JSONArray();
|
|
productObj.put(ConstantsWorkspaceUploader.JSON_CLIENT_KEYS, jsonArray);
|
|
|
|
for (int i=0; i<fakeFiles.size(); i++){
|
|
WorkspaceUploaderItem file = fakeFiles.get(i);
|
|
JSONObject obj = new JSONObject();
|
|
obj.put(file.getClientUploadKey(), new JSONString(file.getFile().getFileName()));
|
|
jsonArray.set(i, obj);
|
|
}
|
|
return productObj.toString();
|
|
|
|
}catch (Exception e) {
|
|
GWT.log("error "+e.getMessage());
|
|
return null;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* Submit form.
|
|
*/
|
|
@Override
|
|
public void submitForm(){
|
|
formPanel.submit();
|
|
// for (final WorkspaceUploaderItem workspaceUploaderItem : fakeUploaders) {
|
|
//
|
|
// UploaderMonitor.getInstance().addNewSubmit(workspaceUploaderItem, workspaceUploaderItem.getFile().getFileName());
|
|
// setVisible(false);
|
|
// removeLoading();
|
|
//// UploaderMonitor.getInstance().pollWorkspaceUploaderId(workspaceUploaderItem.getClientUploadKey());
|
|
//
|
|
// //WAITING 0.1 SEC TO FIRST UPDATES
|
|
// /*new Timer() {
|
|
//
|
|
// @Override
|
|
// public void run() {
|
|
// removeLoading();
|
|
// UploaderMonitor.getInstance().pollWorkspaceUploaderId(workspaceUploaderItem.getClientUploadKey());
|
|
//
|
|
// }
|
|
// }.schedule(100);*/
|
|
// }
|
|
}
|
|
|
|
/**
|
|
* Gets the files selected.
|
|
* @param the tagID
|
|
* @param fileDelimiter the file delimiter
|
|
* @return the files selected
|
|
*/
|
|
public static native String getFilesSelected(final String tagId, final String fileDelimiter) /*-{
|
|
var count = $wnd.$("#"+tagId)[0].files.length;
|
|
console.log(count);
|
|
var out = "";
|
|
|
|
for (i = 0; i < count; i++) {
|
|
var file = $wnd.$("#"+tagId)[0].files[i];
|
|
// out += file.name + fileDelimiter + file.size + fileDelimiter;
|
|
out += file.name + fileDelimiter;
|
|
}
|
|
return out;
|
|
}-*/;
|
|
}
|