workspace-tree-widget/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/UpdateServiceUploader.java

167 lines
5.3 KiB
Java

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.widget.Window;
import com.google.gwt.core.client.GWT;
import com.google.gwt.http.client.Request;
import com.google.gwt.http.client.RequestBuilder;
import com.google.gwt.http.client.RequestCallback;
import com.google.gwt.http.client.RequestException;
import com.google.gwt.http.client.Response;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.ui.HTML;
/**
*
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
* @Jan 20, 2014
*
*/
public class UpdateServiceUploader extends Window{
private FileUploader fileUploaderDlg = null;
private String fileName = "";
private boolean overwrite = false;
private FileModel parent;
private String uploadType;
/**
*
* @param fileUploader
* @param parent
* @param uploadType
*
* By default overwrite paramameter is false
*/
public UpdateServiceUploader(final FileUploader fileUploader, final FileModel parent, String uploadType){
this.fileUploaderDlg = fileUploader;
this.parent = parent;
this.uploadType = uploadType;
}
public void submitForm() throws Exception{
if(fileName == null || fileName.isEmpty())
throw new Exception("File absolute path on server is null");
String parameters = "";
parameters+=ConstantsExplorer.UPLOAD_FORM_ELEMENT+"="+fileName+"&";
if(parent.getIdentifier()!=null && !parent.getIdentifier().isEmpty())
parameters+=ConstantsExplorer.ID_FOLDER+"="+parent.getIdentifier()+"&";
else
throw new Exception("Parent Folder ID parameter is null or empty");
if(uploadType!=null && !uploadType.isEmpty())
parameters+=ConstantsExplorer.UPLOAD_TYPE+"="+uploadType+"&";
else
throw new Exception("UploadType parameter is null or empty");
parameters+=ConstantsExplorer.IS_OVERWRITE+"="+overwrite;
// String urlRequest = ConstantsExplorer.LOCAL_UPLOAD_WORKSPACE_SERVICE+"?"+URL.encodeQueryString(parameters);
String urlRequest = ConstantsExplorer.LOCAL_UPLOAD_WORKSPACE_SERVICE+"?"+parameters;
GWT.log("Encoded url request is: "+urlRequest);
RequestBuilder requestBuilder = new RequestBuilder(RequestBuilder.POST, urlRequest);
// requestBuilder.setHeader("Content-Type", "application/x-www-form-urlencoded");
try {
requestBuilder.sendRequest("", new RequestCallback() {
@Override
public void onResponseReceived(Request request, Response response) {
// int status = response.getStatusCode();
//expected <pre>200:Upload complete</pre>
/*we strip tags added by webserver,
*
* Massi fix because webkit returns
* <pre style="word-wrap: break-word; white-space: pre-wrap;">OK:File france_flag.png(0) imported correctly in /Workspace</pre>
*
* TODO: recall it next time
*/
//String strippedResult = result.replace("<pre>", "").replace("</pre>", ""); //this won't work for webkit
//replaced by new HTML(result).getText()
String strippedResult = new HTML(response.getText()).getText();
final HandlerResultMessage resultMessage = HandlerResultMessage.parseResult(strippedResult);
switch (resultMessage.getStatus()) {
case ERROR:
// new MessageBoxAlert("Error during upload", resultMessage.getMessage(), null);
GWT.log("Error during upload: "+resultMessage.getMessage());
fileUploaderDlg.getDlg().showRegisteringResult(false);
break;
case UNKNOWN:
// new MessageBoxAlert("Error during upload", resultMessage.getMessage(), null);
GWT.log("Error during upload: "+resultMessage.getMessage());
fileUploaderDlg.getDlg().showRegisteringResult(false);
break;
case WARN: {
// new MessageBoxAlert("Upload completed with warnings", resultMessage.getMessage(), null);
GWT.log("Upload completed with warnings: "+resultMessage.getMessage());
fileUploaderDlg.getDlg().showRegisteringResult(false);
break;
}
case OK: {
Timer t = new Timer() {
public void run() {
AppControllerExplorer.getEventBus().fireEvent(new CompletedFileUploadEvent(parent, null));
fileUploaderDlg.getDlg().showRegisteringResult(true);
// new InfoDisplayMessage("Upload completed successfully", resultMessage.getMessage());
}
};
t.schedule(250);
}
}
}
@Override
public void onError(Request request, Throwable exception) {
// MessageUtil.showErrorMessage("Error during upload", "An error occurred during file upload.");
fileUploaderDlg.getDlg().showRegisteringResult(false);
// new MessageBoxAlert("Error during upload", "An error occurred during file upload.", null);
return;
}
});
} catch (RequestException e) {
}
}
public void setOverwrite(){
overwrite = true;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
}