() {
@Override
@@ -2151,16 +2245,16 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt
@Override
public void onSuccess(WindowOpenParameter windowOpenParam) {
String params = "?"+windowOpenParam.getParameters();
-
+
if(params.length()>1)
params+="&";
-
+
params+=ConstantsExplorer.REDIRECTONERROR+"="+windowOpenParam.isRedirectOnError();
-
+
windowOpenParam.getBrowserWindow().setUrl(ConstantsExplorer.DOWNLOAD_WORKSPACE_SERVICE+params);
-
-
-// com.google.gwt.user.client.Window.open(ConstantsExplorer.DOWNLOAD_WORKSPACE_SERVICE+params, windowOpenParam.getOption(), "");
+
+
+ // com.google.gwt.user.client.Window.open(ConstantsExplorer.DOWNLOAD_WORKSPACE_SERVICE+params, windowOpenParam.getOption(), "");
}
};
@@ -2170,7 +2264,7 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt
*/
public void expandFolder(final String itemIdentifier){
searching(false);
-
+
FileModel fileModel = this.explorerPanel.getAsycTreePanel().getFileModelByIdentifier(itemIdentifier);
if(fileModel==null) { //Loading by RPC
@@ -2181,11 +2275,11 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt
this.explorerPanel.getAsycTreePanel().selectItem(itemIdentifier); //select item
}
}
-
+
@Override
public void searching(boolean isSearch){
-// deselecteCurrentSelection();
+ // deselecteCurrentSelection();
explorerPanel.getAsycTreePanel().setSearch(isSearch);
}
-
+
}
diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/ConstantsExplorer.java b/src/main/java/org/gcube/portlets/user/workspace/client/ConstantsExplorer.java
index 5cde389..058cf16 100644
--- a/src/main/java/org/gcube/portlets/user/workspace/client/ConstantsExplorer.java
+++ b/src/main/java/org/gcube/portlets/user/workspace/client/ConstantsExplorer.java
@@ -15,6 +15,7 @@ public class ConstantsExplorer {
// public static final String FILE_SERVICE = GWT.getModuleBaseURL() + "fileservice";
public static final String RPC_WORKSPACE_SERVICE = GWT.getModuleBaseURL() + "rpcWorkspace";
public static final String UPLOAD_WORKSPACE_SERVICE = GWT.getModuleBaseURL() + "UploadService";
+ public static final String LOCAL_UPLOAD_WORKSPACE_SERVICE = GWT.getModuleBaseURL() + "LocalUploadService";
public static final String DOWNLOAD_WORKSPACE_SERVICE = GWT.getModuleBaseURL() + "DownloadService";
public static final String SERVER_ERROR = "Sorry, an error has occurred on the server when";
diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/DialogUpload.java b/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/DialogUpload.java
index ad68bc6..f36c738 100644
--- a/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/DialogUpload.java
+++ b/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/DialogUpload.java
@@ -170,7 +170,7 @@ public class DialogUpload extends Window {
this.setAutoWidth(true);
this.setAutoHeight(true);
- this.show();
+// this.show();
}
diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/FileUploader.java b/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/FileUploader.java
new file mode 100644
index 0000000..5e1b181
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/FileUploader.java
@@ -0,0 +1,93 @@
+/**
+ *
+ */
+package org.gcube.portlets.user.workspace.client.view.windows;
+
+import org.gcube.portlets.user.workspace.client.model.FileModel;
+import org.gcube.portlets.widgets.fileupload.client.view.UploadProgressDialog;
+
+import com.extjs.gxt.ui.client.widget.Info;
+import com.google.gwt.event.shared.HandlerManager;
+
+/**
+ * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
+ * @Jan 20, 2014
+ *
+ * This class calls the widget file uploader
+ */
+public class FileUploader {
+
+
+ private final UploadProgressDialog dlg;
+ private FileModel folderParent;
+ private UpdateServiceUploader updateServiceUploader;
+ private FileUploader INSTANCE = this;
+ private String uploadType;
+
+ /**
+ *
+ */
+ public FileUploader(HandlerManager eventBus, FileModel folderParent, String uploadType) {
+ this.folderParent = folderParent;
+ this.uploadType = uploadType;
+
+ /**
+ * Prepare new servlet uploader
+ */
+ updateServiceUploader = new UpdateServiceUploader(INSTANCE, folderParent, uploadType);
+
+ this.dlg = new UploadProgressDialog("Upload File in: "+folderParent.getName(), eventBus, true);
+ dlg.center();
+ dlg.show();
+ }
+
+
+ public void submitForm() {
+
+ try {
+
+ dlg.submitForm();
+
+ } catch (Exception e) {
+ Info.display("Error", "Sorry an error occurred on the server "+e.getLocalizedMessage() + ". Please try again later");
+ e.printStackTrace();
+ }
+
+ }
+
+ public void overwrite(){
+ updateServiceUploader.setOverwrite();
+ }
+
+ public void submitServletForm(String absolutePathOnServer){
+
+ updateServiceUploader.setFileName(absolutePathOnServer);
+
+ try {
+
+ updateServiceUploader.submitForm();
+
+ } catch (Exception e) {
+
+ dlg.showRegisteringResult(false);
+ }
+
+ }
+
+ public FileModel getFolderParent() {
+ return folderParent;
+ }
+
+ public String getUploadType() {
+ return uploadType;
+ }
+
+ public UpdateServiceUploader getUpdateServiceUploader() {
+ return updateServiceUploader;
+ }
+
+ public UploadProgressDialog getDlg() {
+ return dlg;
+ }
+
+}
diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/UpdateServiceUploader.java b/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/UpdateServiceUploader.java
new file mode 100644
index 0000000..21805b0
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/UpdateServiceUploader.java
@@ -0,0 +1,166 @@
+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 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(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;
+ }
+}
+
diff --git a/src/main/java/org/gcube/portlets/user/workspace/server/LocalUploadServlet.java b/src/main/java/org/gcube/portlets/user/workspace/server/LocalUploadServlet.java
new file mode 100644
index 0000000..0a24cc9
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/workspace/server/LocalUploadServlet.java
@@ -0,0 +1,474 @@
+/**
+ *
+ */
+package org.gcube.portlets.user.workspace.server;
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URLDecoder;
+import java.util.Calendar;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+import org.apache.commons.fileupload.FileUploadException;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.FilenameUtils;
+import org.apache.log4j.Logger;
+import org.gcube.common.homelibrary.home.exceptions.InternalErrorException;
+import org.gcube.common.homelibrary.home.workspace.Workspace;
+import org.gcube.common.homelibrary.home.workspace.WorkspaceFolder;
+import org.gcube.common.homelibrary.home.workspace.WorkspaceItem;
+import org.gcube.common.homelibrary.home.workspace.WorkspaceItemType;
+import org.gcube.common.homelibrary.home.workspace.exceptions.InsufficientPrivilegesException;
+import org.gcube.common.homelibrary.home.workspace.exceptions.ItemAlreadyExistException;
+import org.gcube.common.homelibrary.home.workspace.exceptions.ItemNotFoundException;
+import org.gcube.common.homelibrary.home.workspace.exceptions.WorkspaceFolderNotFoundException;
+import org.gcube.common.homelibrary.home.workspace.exceptions.WrongDestinationException;
+import org.gcube.common.homelibrary.home.workspace.exceptions.WrongItemTypeException;
+import org.gcube.common.homelibrary.home.workspace.folder.FolderItem;
+import org.gcube.common.homelibrary.home.workspace.folder.items.Report;
+import org.gcube.common.homelibrary.home.workspace.folder.items.ReportTemplate;
+import org.gcube.common.homelibrary.util.Extensions;
+import org.gcube.common.homelibrary.util.MimeTypeUtil;
+import org.gcube.common.homelibrary.util.WorkspaceUtil;
+import org.gcube.common.homelibrary.util.zip.UnzipUtil;
+import org.gcube.portlets.user.workspace.client.ConstantsExplorer;
+import org.gcube.portlets.user.workspace.server.notifications.NotificationsUtil;
+import org.gcube.portlets.user.workspace.server.util.WsUtil;
+import org.gcube.portlets.user.workspace.shared.HandlerResultMessage;
+
+/**
+ *
+ * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
+ * @Jan 21, 2014
+ *
+ */
+public class LocalUploadServlet extends HttpServlet {
+
+ /**
+ *
+ */
+ protected static final String UTF_8 = "UTF-8";
+
+ public static final String UPLOAD_TYPE = ConstantsExplorer.UPLOAD_TYPE;
+
+ public static final String ID_FOLDER = ConstantsExplorer.ID_FOLDER;
+
+ public static final String UPLOAD_FORM_ELEMENT = ConstantsExplorer.UPLOAD_FORM_ELEMENT;
+
+ public static final String IS_OVERWRITE = ConstantsExplorer.IS_OVERWRITE;
+
+ public static final String FILE = "File";
+
+ protected static Logger logger = Logger.getLogger(LocalUploadServlet.class);
+
+ public static final String D4ST = Extensions.REPORT_TEMPLATE.getName(); //extension of Report Template type
+ public static final String D4SR = Extensions.REPORT.getName(); //extension of Report type
+ /**
+ *
+ */
+ private static final long serialVersionUID = -4197748678713054285L;
+
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void init() throws ServletException {
+ super.init();
+
+ logger.trace("Workspace "+LocalUploadServlet.class+" ready.");
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+// System.out.println("GET on LocalUploadServlet");
+ logger.trace("GET on LocalUploadServlet");
+ String absolutePathFile = URLDecoder.decode(request.getParameter(UPLOAD_FORM_ELEMENT), UTF_8);
+ String destinationId = URLDecoder.decode(request.getParameter(ID_FOLDER), UTF_8);
+ String uploadType = URLDecoder.decode(request.getParameter(UPLOAD_TYPE), UTF_8);
+ boolean isOverwrite = Boolean.parseBoolean(URLDecoder.decode(request.getParameter(IS_OVERWRITE), UTF_8));
+ uploadData(request, response, absolutePathFile, destinationId, uploadType, isOverwrite);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @SuppressWarnings("rawtypes")
+ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+// System.out.println("POST on LocalUploadServlet");
+ logger.trace("POST on LocalUploadServlet");
+ String absolutePathFile = request.getParameter(UPLOAD_FORM_ELEMENT);
+ String destinationId = request.getParameter(ID_FOLDER);
+ String uploadType = request.getParameter(UPLOAD_TYPE);
+ boolean isOverwrite = Boolean.parseBoolean(request.getParameter(IS_OVERWRITE));
+ uploadData(request, response, absolutePathFile, destinationId, uploadType, isOverwrite);
+ }
+
+
+
+ private void uploadData(HttpServletRequest request, HttpServletResponse response, String absolutePathFile,String destinationId,String uploadType,boolean isOverwrite) throws ServletException, IOException{
+
+ File file = null;
+ InputStream fileUploadIS = null;
+
+ try {
+
+ if(absolutePathFile==null || absolutePathFile.isEmpty())
+ throw new FileUploadException("Absolute path is null or empty");
+
+
+ file = new File(absolutePathFile);
+
+ if(!file.exists())
+ throw new FileUploadException("File dosn't exists");
+
+ fileUploadIS = FileUtils.openInputStream(file);
+
+ logger.trace("Upload servlet parameters: [uploadItem: "+file.getAbsolutePath() +", destinationId: "+destinationId +", uploadType: "+uploadType+", isOverwrite: "+isOverwrite+"]");
+ } catch (Exception e) {
+ logger.error("Error processing request in upload servlet", e);
+ sendError(response, "Internal error: Error during request processing");
+ return;
+ }
+
+ /*
+ if (file == null) {
+ logger.error("Error processing request in upload servlet: No file to upload");
+ sendError(response, "Internal error: No file to upload");
+ return;
+ }*/
+
+ if (destinationId == null) {
+ logger.error("Error processing request in upload servlet: No destination folder id found");
+ sendError(response, "Internal error: No destination folder id found");
+ return;
+ }
+
+ logger.trace("destination folder id: "+destinationId);
+ logger.trace("uploadType: "+uploadType);
+
+ Workspace wa = null;
+ try {
+ wa = WsUtil.getWorkspace(request.getSession());
+ } catch (Exception e) {
+ logger.error("Error during workspace retrieving", e);
+ response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Error processing request in upload servlet");
+ return;
+ }
+
+ if (wa == null) {
+ logger.error("Now workspace found in session");
+ sendError(response, "Internal error: No workspace in session");
+ return;
+ }
+
+ WorkspaceItem item;
+ try {
+ item = wa.getItem(destinationId);
+ } catch (ItemNotFoundException e) {
+ logger.error("Error, no destination folder found", e);
+ sendError(response, "Internal error: No destination folder found");
+ return;
+ }
+
+ if (item.getType() != WorkspaceItemType.FOLDER && item.getType() != WorkspaceItemType.SHARED_FOLDER) {
+ logger.error("Error processing request in upload servlet: Wrong destination item");
+ sendError(response, "Internal error: Wrong destination item");
+ return;
+ }
+
+ WorkspaceFolder destinationFolder = (WorkspaceFolder) item;
+
+ try {
+ //we calculate an unique name for the current destination
+ String itemName = "";
+
+ if(!isOverwrite)
+ itemName = WorkspaceUtil.getUniqueName(file.getName(), destinationFolder);
+ else
+ itemName = file.getName();
+
+ String contentType = MimeTypeUtil.getMimeType(new BufferedInputStream(fileUploadIS));
+ logger.trace("Content type (mime type): "+contentType + " unique name: "+itemName);
+
+// System.out.println("Content type: "+contentType + " unique name: "+itemName);
+
+ String extension = FilenameUtils.getExtension(itemName);
+ logger.trace("extension: "+extension);
+
+// System.out.println("extension: "+extension);
+
+ if(uploadType.compareTo(FILE)==0) {//IS FILE UPLOAD
+
+ boolean isZipFile = MimeTypeUtil.isZipContentType(contentType);
+
+ if(isZipFile && (extension.compareToIgnoreCase(D4ST)==0)){ //Create REPORT TEMPLATE
+
+// String newItemName = "";
+//
+// if(!isOverwrite)
+// newItemName = itemName.substring(0,itemName.lastIndexOf(D4ST)-1); //remove extension
+// else
+// newItemName = item.getName();
+
+// System.out.println("itemwithoutext " +itemwithoutext);
+
+ String newItemName = itemName;
+
+ logger.trace("createTemplate: "+newItemName);
+ createTemplate(request.getSession(), wa, newItemName, FileUtils.openInputStream(file), destinationFolder, response, isOverwrite);
+
+ }else if(isZipFile && (extension.compareToIgnoreCase(D4SR)==0)){ //Create REPORT
+
+// String newItemName = "";
+//
+// if(!isOverwrite)
+// newItemName = itemName.substring(0,itemName.lastIndexOf(D4SR)-1); //remove extension
+// else
+// newItemName = item.getName();
+
+// System.out.println("itemwithoutext " +itemwithoutext);
+ String newItemName = itemName;
+ logger.trace("createReport: "+newItemName);
+ createReport(request.getSession(), wa, newItemName, FileUtils.openInputStream(file), destinationFolder, response, isOverwrite);
+
+ }else{ //CREATE AN EXTERNAL FILE
+
+ createExternalFile(request.getSession(), wa, itemName, FileUtils.openInputStream(file), destinationFolder, contentType, response, isOverwrite);
+ }
+
+ }else {//IS ARCHIVE UPLOAD
+
+ if (MimeTypeUtil.isZipContentType(contentType)){
+ logger.trace("Unziping content");
+ UnzipUtil.unzip(destinationFolder, FileUtils.openInputStream(file), itemName);
+
+ //TODO NOTIFY UPLOAD ARCHIVE
+ sendMessage(response, "Archive "+absolutePathFile+" imported correctly in "+destinationFolder.getPath());
+ } else
+ createExternalFile(request.getSession(), wa, itemName, FileUtils.openInputStream(file), destinationFolder, contentType, response, isOverwrite);
+ }
+
+ file.delete();
+ } catch (InsufficientPrivilegesException e) {
+ logger.error("Error creating elements", e);
+ sendError(response, "Internal error: Insufficient privileges");
+ return;
+ } catch (InternalErrorException e) {
+ logger.error("Error creating elements", e);
+ sendError(response, "Internal error: "+e.getMessage());
+ return;
+ } catch (ItemAlreadyExistException e) {
+ logger.error("Error creating elements", e);
+ sendError(response, "Internal error: An item with that name already exists");
+ return;
+ }catch (Exception e) {
+ logger.error("Error creating elements", e);
+ sendError(response, "Internal error: An error occurred on uploading the file, try again later");
+ return;
+ }
+
+ }
+
+
+
+ /**
+ *
+ * @param httpSession
+ * @param workspace
+ * @param itemId
+ * @param destinationFolderId
+ */
+ private void notifyUploadInSharedFolder(final HttpSession httpSession, final Workspace workspace, final String itemId, final String destinationFolderId, final boolean isOverwrite){
+
+ new Thread(){
+
+ public void run() {
+
+ WorkspaceItem sourceItem;
+ try {
+ sourceItem = workspace.getItem(itemId);
+ String sourceSharedId = sourceItem.getIdSharedFolder();
+ WorkspaceItem folderDestinationItem = workspace.getItem(destinationFolderId);
+
+ NotificationsUtil.checkSendNotifyChangedItemToShare(httpSession, sourceItem, sourceSharedId, folderDestinationItem,isOverwrite);
+
+
+ } catch (Exception e) {
+ logger.error("Error in notifyUploadInSharedFolder", e);
+
+ }
+
+ };
+
+ }.start();
+ }
+
+ private void createExternalFile(HttpSession httpSession, Workspace wa, String itemName, InputStream uploadItem, WorkspaceFolder destinationFolder, String contentType, HttpServletResponse response, boolean isOverwrite) throws InternalErrorException, InsufficientPrivilegesException, ItemAlreadyExistException, IOException {
+
+ FolderItem createdItem = null;
+
+ if(!isOverwrite){
+ //we need to recalculate the item name
+ itemName = WorkspaceUtil.getUniqueName(itemName, destinationFolder);
+ createdItem = WorkspaceUtil.createExternalFile(destinationFolder, itemName, "", contentType, uploadItem);
+ }
+ else
+ createdItem = overwriteItem(wa, itemName, uploadItem, destinationFolder); //CASE OVERWRITE
+
+ if(createdItem!=null){
+ notifyUploadInSharedFolder(httpSession,wa,createdItem.getId(),destinationFolder.getId(), isOverwrite);
+
+ sendMessage(response, "File "+createdItem.getName()+" imported correctly in "+destinationFolder.getPath());
+ }
+ else
+ sendError(response,"Internal error: Workspace Item Not Found");
+ }
+
+
+ private FolderItem overwriteItem(Workspace wa, String itemName, InputStream fileData, WorkspaceFolder destinationFolder){
+
+ FolderItem overwriteItem = null;
+
+ try {
+ logger.trace("case overwriting item.. "+itemName);
+ overwriteItem = (FolderItem) wa.find(itemName, destinationFolder.getId());
+ logger.trace("overwriteItem item was found, id is: "+overwriteItem.getId());
+ wa.updateItem(overwriteItem.getId(), fileData);
+ logger.trace("updateItem with id: "+overwriteItem.getId()+ ", is completed");
+ } catch (ItemNotFoundException e) {
+ logger.error("Error in createExternalFile, ItemNotFoundException", e);
+ } catch (WrongItemTypeException e) {
+ logger.error("Error in createExternalFile, WrongItemTypeException", e);
+ } catch (WorkspaceFolderNotFoundException e) {
+ logger.error("Error in createExternalFile, WorkspaceFolderNotFoundException", e);
+ } catch (WrongDestinationException e) {
+ logger.error("Error in createExternalFile, WrongDestinationException", e);
+ } catch (InsufficientPrivilegesException e) {
+ logger.error("Error in createExternalFile, InsufficientPrivilegesException", e);
+ } catch (ItemAlreadyExistException e) {
+ logger.error("Error in createExternalFile, ItemAlreadyExistException", e);
+ } catch (InternalErrorException e) {
+ logger.error("Error in createExternalFile, InternalErrorException", e);
+ }catch (Exception e) {
+ logger.error("Error in createExternalFile, Exception", e);
+ }
+
+ return overwriteItem;
+
+ }
+
+
+ private void createReport(HttpSession httpSession, Workspace wa, String itemName, InputStream stream, WorkspaceFolder destinationFolder, HttpServletResponse response, boolean isOverwrite) throws InsufficientPrivilegesException, ItemAlreadyExistException, InternalErrorException, IOException{
+
+ try {
+
+ Report report = null;
+
+ if(!isOverwrite){
+ itemName = WorkspaceUtil.getUniqueName(itemName, destinationFolder);
+ report = wa.createReport(itemName, "", Calendar.getInstance(), Calendar.getInstance(), "", "", "", 0, "", stream, destinationFolder.getId());
+
+ notifyUploadInSharedFolder(httpSession,wa,report.getId(),destinationFolder.getId(), isOverwrite);
+
+ sendMessage(response, "File "+report.getName()+" imported correctly in "+destinationFolder.getPath());
+ }
+ else{ //CASE OVERWRITE
+ FolderItem rep = overwriteItem(wa, itemName, stream, destinationFolder);
+
+ if(rep!=null){
+
+ notifyUploadInSharedFolder(httpSession,wa,rep.getId(),destinationFolder.getId(), isOverwrite);
+
+ sendMessage(response, "File "+rep.getName()+" imported correctly in "+destinationFolder.getPath());
+ }
+ else
+ sendError(response,"Internal error: Workspace Item Not Found");
+
+ }
+ } catch (WrongDestinationException e) {
+ logger.error("Error creating elements", e);
+ sendError(response, "Internal error: Wrong Destination");
+ } catch (WorkspaceFolderNotFoundException e) {
+ logger.error("Error creating elements", e);
+ sendError(response, "Internal error: Workspace Folder Not Found");
+ }
+
+ }
+
+ private void createTemplate(HttpSession httpSession, Workspace wa, String itemName, InputStream stream, WorkspaceFolder destinationFolder, HttpServletResponse response, boolean isOverwrite) throws InsufficientPrivilegesException, ItemAlreadyExistException, InternalErrorException, IOException{
+
+ try {
+
+ ReportTemplate template = null;
+
+ if(!isOverwrite){
+ itemName = WorkspaceUtil.getUniqueName(itemName, destinationFolder);
+ template = wa.createReportTemplate(itemName, "", Calendar.getInstance(), Calendar.getInstance(), "", "", 0, "", stream, destinationFolder.getId());
+
+ notifyUploadInSharedFolder(httpSession,wa,template.getId(),destinationFolder.getId(), isOverwrite);
+
+ sendMessage(response, "File "+template.getName()+" imported correctly in "+destinationFolder.getPath());
+
+ }else{ //CASE OVERWRITE
+ FolderItem rep = overwriteItem(wa, itemName, stream, destinationFolder);
+
+ if(rep!=null){
+
+ notifyUploadInSharedFolder(httpSession,wa,rep.getId(),destinationFolder.getId(), isOverwrite);
+
+ sendMessage(response, "File "+rep.getName()+" imported correctly in "+destinationFolder.getPath());
+ }
+ else
+ sendError(response,"Internal error: Workspace Item Not Found");
+
+ }
+
+ } catch (WrongDestinationException e) {
+ logger.error("Error creating elements", e);
+ sendError(response, "Internal error: Wrong Destination");
+ } catch (WorkspaceFolderNotFoundException e) {
+ logger.error("Error creating elements", e);
+ sendError(response, "Internal error: Workspace Folder Not Found");
+ }
+
+ }
+
+
+ protected void sendError(HttpServletResponse response, String message) throws IOException
+ {
+ response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ HandlerResultMessage resultMessage = HandlerResultMessage.errorResult(message);
+ response.getWriter().write(resultMessage.toString());
+ response.flushBuffer();
+ }
+
+ protected void sendMessage(HttpServletResponse response, String message) throws IOException
+ {
+ response.setStatus(HttpServletResponse.SC_ACCEPTED);
+ HandlerResultMessage resultMessage = HandlerResultMessage.okResult(message);
+ response.getWriter().write(resultMessage.toString());
+ response.flushBuffer();
+ }
+
+ protected void sendWarnMessage(HttpServletResponse response, String message) throws IOException
+ {
+ response.setStatus(HttpServletResponse.SC_ACCEPTED);
+ HandlerResultMessage resultMessage = HandlerResultMessage.warnResult(message);
+ response.getWriter().write(resultMessage.toString());
+ response.flushBuffer();
+ }
+
+
+}
diff --git a/src/main/java/org/gcube/portlets/user/workspace/server/UploadServlet.java b/src/main/java/org/gcube/portlets/user/workspace/server/UploadServlet.java
index 7b09daf..aa1fefd 100644
--- a/src/main/java/org/gcube/portlets/user/workspace/server/UploadServlet.java
+++ b/src/main/java/org/gcube/portlets/user/workspace/server/UploadServlet.java
@@ -116,7 +116,7 @@ public class UploadServlet extends HttpServlet {
while (it.hasNext()) {
FileItem item = (FileItem) it.next();
- if (!item.isFormField() && UPLOAD_FORM_ELEMENT.equals(item.getFieldName())) {
+ if (UPLOAD_FORM_ELEMENT.equals(item.getFieldName())) {
uploadItem = item;
}
diff --git a/src/main/java/org/gcube/portlets/user/workspace/server/util/WsUtil.java b/src/main/java/org/gcube/portlets/user/workspace/server/util/WsUtil.java
index 1d80e86..dac3ead 100644
--- a/src/main/java/org/gcube/portlets/user/workspace/server/util/WsUtil.java
+++ b/src/main/java/org/gcube/portlets/user/workspace/server/util/WsUtil.java
@@ -74,10 +74,10 @@ public class WsUtil {
/*USE ANOTHER ACCOUNT (OTHERWHISE BY TEST_USER) FOR RUNNING
* COMMENT THIS IN DEVELOP ENVIROMENT (UNCOMMENT IN PRODUCTION)*/
- user=TEST_USER;
+// user=TEST_USER;
//UNCOMMENT THIS IN DEVELOP ENVIROMENT
-// user = "francesco.mangiacrapa";
+ user = "francesco.mangiacrapa";
logger.warn("WORKSPACE PORTLET STARTING IN TEST MODE - NO USER FOUND - PORTLETS STARTING WITH FOLLOWING SETTINGS:");
logger.warn("session id: "+sessionID);