package org.gcube.portlets.user.workspace.client.view.windows; import org.gcube.portlets.user.workspace.client.AppControllerExplorer; import org.gcube.portlets.user.workspace.client.ConstantsExplorer; import org.gcube.portlets.user.workspace.client.event.CompletedFileUploadEvent; import org.gcube.portlets.user.workspace.client.model.FileModel; import org.gcube.portlets.user.workspace.shared.HandlerResultMessage; import com.extjs.gxt.ui.client.Style.HorizontalAlignment; import com.extjs.gxt.ui.client.event.ButtonEvent; import com.extjs.gxt.ui.client.event.Events; import com.extjs.gxt.ui.client.event.FormEvent; import com.extjs.gxt.ui.client.event.Listener; import com.extjs.gxt.ui.client.event.MessageBoxEvent; import com.extjs.gxt.ui.client.event.SelectionListener; import com.extjs.gxt.ui.client.widget.Dialog; import com.extjs.gxt.ui.client.widget.Info; import com.extjs.gxt.ui.client.widget.Window; import com.extjs.gxt.ui.client.widget.button.Button; import com.extjs.gxt.ui.client.widget.form.FileUploadField; import com.extjs.gxt.ui.client.widget.form.FormPanel; import com.extjs.gxt.ui.client.widget.form.FormPanel.Encoding; import com.extjs.gxt.ui.client.widget.form.FormPanel.Method; import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.Hidden; /** * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it * */ public class DialogUpload extends Window { /** * */ private final FormPanel formPanel = new FormPanel(); private FileUploadField fileUploadField = new FileUploadField(); private MessageBoxWait messageBoxWait = null; private boolean isStatusCompleted = false; private Button btnSubmit = new Button("Submit"); private Button btnCancel = new Button("Cancel"); private Hidden hiddenOverwrite = new Hidden(ConstantsExplorer.IS_OVERWRITE,"false"); private String parentIdentifier = ""; private String parentName = ""; public DialogUpload(String headerTitle, String parentName, final FileModel parent, String fieldLabel){ this.setHeaderVisible(true); this.setHeading(headerTitle + parentName); this.parentIdentifier = parent.getIdentifier(); this.parentName = parentName; this.setStyleAttribute("margin", "10px"); // Create a FormPanel and point it at a service. // Create a FormPanel and point it at a service. formPanel.setHeaderVisible(false); formPanel.setFrame(true); formPanel.setAction(ConstantsExplorer.UPLOAD_WORKSPACE_SERVICE); formPanel.setEncoding(Encoding.MULTIPART); formPanel.setMethod(Method.POST); formPanel.setButtonAlign(HorizontalAlignment.CENTER); formPanel.setWidth(400); // TextField name = new TextField(); // name.setFieldLabel("Name"); // formPanel.add(name); fileUploadField.setAllowBlank(false); fileUploadField.setName(ConstantsExplorer.UPLOAD_FORM_ELEMENT); // Add hidden parameters formPanel.add(new Hidden(ConstantsExplorer.ID_FOLDER,parent.getIdentifier())); formPanel.add(new Hidden(ConstantsExplorer.UPLOAD_TYPE,fieldLabel)); formPanel.add(hiddenOverwrite); // fileUploadField.setFieldLabel(ConstantsExplorer.FILE); fileUploadField.setFieldLabel(fieldLabel); formPanel.add(fileUploadField); formPanel.addButton(btnSubmit); formPanel.addButton(btnCancel); // handle the post formPanel.addListener(Events.Submit, new Listener() { public void handleEvent(FormEvent event) { // When the form submission is successfully completed, this // event is // fired. Assuming the service returned a response of type // text/html, isStatusCompleted = true; // Log.trace("onSubmitComplete"); String result = event.getResultHtml(); // Log.trace("Result "+result); hide(); messageBoxWait.getMessageBoxWait().close(); if (result == null) { // MessageUtil.showErrorMessage("Error during upload", "An error occurred during file upload."); new MessageBoxAlert("Error during upload", "An error occurred during file upload.", null); return; } //expected
200:Upload complete
/*we strip tags added by webserver, * * Massi fix because webkit returns *
OK:File france_flag.png(0) imported correctly in /Workspace
* * TODO: recall it next time */ //String strippedResult = result.replace("
", "").replace("
", ""); //this won't work for webkit //replaced by new HTML(result).getText() String strippedResult = new HTML(result).getText(); // com.google.gwt.user.client.Window.alert(result); // com.google.gwt.user.client.Window.alert("Stripped: " + strippedResult); final HandlerResultMessage resultMessage = HandlerResultMessage.parseResult(strippedResult); switch (resultMessage.getStatus()) { case ERROR: new MessageBoxAlert("Error during upload", resultMessage.getMessage(), null); break; case UNKNOWN: new MessageBoxAlert("Error during upload", resultMessage.getMessage(), null); break; case WARN: { new MessageBoxAlert("Upload completed with warnings", resultMessage.getMessage(), null); break; } case OK: { Timer t = new Timer() { public void run() { AppControllerExplorer.getEventBus().fireEvent(new CompletedFileUploadEvent(parent, null)); new InfoDisplayMessage("Upload completed successfully", resultMessage.getMessage()); } }; t.schedule(250); } } } }); add(formPanel); this.addListeners(); this.setAutoWidth(true); this.setAutoHeight(true); // this.show(); } private void addListeners() { btnSubmit.addSelectionListener(new SelectionListener() { @Override public void componentSelected(ButtonEvent ce) { if (fileUploadField.getValue()==null || !(fileUploadField.getValue().length()>2)) { new MessageBoxAlert(ConstantsExplorer.ERROR, ConstantsExplorer.NOFILESPECIFIED, null); return; } // com.google.gwt.user.client.Window.alert("parentIdentifier "+parentIdentifier); // com.google.gwt.user.client.Window.alert("fileUploadField.getValue() "+fileUploadField.getValue()); // com.google.gwt.user.client.Window.alert("parentName "+parentName); /* * TODO: recall: Some browser would write in fileUploadField.getValue() C:\fakepath\$fileName */ String normalizedFileName = fileUploadField.getValue(); // com.google.gwt.user.client.Window.alert("fileUploadField.getValue() "+fileUploadField.getValue()); if (normalizedFileName.contains("\\")) { normalizedFileName = normalizedFileName.substring(normalizedFileName.lastIndexOf("\\")+1); //remove C:\fakepath\ if exists // com.google.gwt.user.client.Window.alert("normalizedFileName= "+normalizedFileName); } final String label = normalizedFileName; AppControllerExplorer.rpcWorkspaceService.itemExistsInWorkpaceFolder(parentIdentifier, normalizedFileName, new AsyncCallback() { @Override public void onSuccess(final String itemId) { if(itemId!=null){ MessageBoxConfirm msg = new MessageBoxConfirm("Replace "+label+"?", label + " exists in folder "+parentName + ". Overwrite?"); msg.getMessageBoxConfirm().addCallback(new Listener() { public void handleEvent(MessageBoxEvent be) { //IF NOT CANCELLED String clickedButton = be.getButtonClicked().getItemId(); if(clickedButton.equals(Dialog.YES)){ // removeItemAndSubmitForm(itemId); updateItemSubmitForm(itemId); } } }); }else submitForm(); //ITEM does NOT EXIST SO SUBMIT FORM; } @Override public void onFailure(Throwable caught) { Info.display("Error", "Sorry an error occurred on the server "+caught.getLocalizedMessage() + ". Please try again later"); } }); } }); btnCancel.addSelectionListener(new SelectionListener() { @Override public void componentSelected(ButtonEvent ce) { hide(); } }); } public void submitForm(){ messageBoxWait = new MessageBoxWait(ConstantsExplorer.PROGRESS, ConstantsExplorer.SAVINGYOURFILE, fileUploadField.getValue()); //Progress bar for upload final Timer t = new Timer() { public void run() { if (isStatusCompleted) { cancel(); messageBoxWait.getMessageBoxWait().close(); } } }; t.scheduleRepeating(500); formPanel.submit(); } private void removeItemAndSubmitForm(String itemId){ AppControllerExplorer.rpcWorkspaceService.removeItem(itemId, new AsyncCallback() { @Override public void onFailure(Throwable caught) { Info.display("Error", caught.getMessage()); } @Override public void onSuccess(Boolean result) { if(result){ hiddenOverwrite.setValue("true"); submitForm(); } } }); } private void updateItemSubmitForm(String itemId){ hiddenOverwrite.setValue("true"); submitForm(); } }