diff --git a/.classpath b/.classpath
index c73cdaa..d1d7469 100644
--- a/.classpath
+++ b/.classpath
@@ -1,12 +1,12 @@
-
+
-
+
@@ -34,5 +34,5 @@
-
+
diff --git a/distro/changelog.xml b/distro/changelog.xml
index 1c88ad0..f6c5a2b 100644
--- a/distro/changelog.xml
+++ b/distro/changelog.xml
@@ -1,52 +1,49 @@
-
- Updated to new WorkspaceExplorer widget that support
- StorageHUB[ticket #11721]
+
+ Updated download item to support StorageHub[ticket #11720]
+
-
+
+ Updated to new WorkspaceExplorer widget that support
+ StorageHUB[ticket #11721]
+
+
+
Integrated DataMiner CL for simplify integration with new
StorageHub[ticket #11720]
Added refresh button in operators panel[ticket #11741]
Added hyperlink for log that contains http reference[ticket
- #11529]
+ #11529]
+
-
+
Added NetCDF files support
Added [TEXTAREA] string support
-
+
Support Java 8 compatibility [ticket #8471]
-
+
Fixed load balancing [ticket #7576]
-
+
Updated PortalContext [ticket #6278]
Added encoded parameters in equivalent http request [ticket
#7167]
-
+
Updated Output support
Added PortalContext
-
+
Updated to Auth 2.0
Added Spatial data support [Ticket #4172]
Added Temporal data support [Ticket #4172]
-
+
First release
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index d876bc6..4d42f80 100644
--- a/pom.xml
+++ b/pom.xml
@@ -12,7 +12,7 @@
org.gcube.portlets.user
data-miner-manager
- 1.8.0-SNAPSHOT
+ 1.9.0-SNAPSHOT
war
data-miner-manager
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/computations/ComputationsExecutedPanel.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/computations/ComputationsExecutedPanel.java
index c4dc48b..2ccc478 100644
--- a/src/main/java/org/gcube/portlets/user/dataminermanager/client/computations/ComputationsExecutedPanel.java
+++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/computations/ComputationsExecutedPanel.java
@@ -5,6 +5,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import org.gcube.data.analysis.dataminermanagercl.shared.workspace.ItemDescription;
import org.gcube.portal.clientcontext.client.GCubeClientContext;
import org.gcube.portlets.user.dataminermanager.client.DataMinerManager;
import org.gcube.portlets.user.dataminermanager.client.common.EventBusProvider;
@@ -14,14 +15,10 @@ import org.gcube.portlets.user.dataminermanager.client.events.DataMinerWorkAreaE
import org.gcube.portlets.user.dataminermanager.client.events.DeleteItemRequestEvent;
import org.gcube.portlets.user.dataminermanager.client.events.RefreshDataMinerWorkAreaEvent;
import org.gcube.portlets.user.dataminermanager.client.events.ResubmitComputationExecutionRequestEvent;
-import org.gcube.portlets.user.dataminermanager.client.events.SessionExpiredEvent;
import org.gcube.portlets.user.dataminermanager.client.events.UIStateEvent;
-import org.gcube.portlets.user.dataminermanager.client.rpc.DataMinerPortletServiceAsync;
import org.gcube.portlets.user.dataminermanager.client.type.DataMinerWorkAreaElementType;
import org.gcube.portlets.user.dataminermanager.client.util.UtilsGXT3;
import org.gcube.portlets.user.dataminermanager.shared.Constants;
-import org.gcube.portlets.user.dataminermanager.shared.exception.SessionExpiredServiceException;
-import org.gcube.data.analysis.dataminermanagercl.shared.workspace.ItemDescription;
import org.gcube.portlets.widgets.workspaceuploader.client.WorkspaceUploadNotification.WorskpaceUploadNotificationListener;
import org.gcube.portlets.widgets.workspaceuploader.client.uploader.DialogUpload.UPLOAD_TYPE;
import org.gcube.portlets.widgets.workspaceuploader.client.uploader.dragdrop.MultipleDNDUpload;
@@ -35,8 +32,8 @@ import com.allen_sauer.gwt.log.client.Log;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.logical.shared.ResizeEvent;
import com.google.gwt.event.logical.shared.ResizeHandler;
+import com.google.gwt.http.client.URL;
import com.google.gwt.user.client.Window;
-import com.google.gwt.user.client.rpc.AsyncCallback;
import com.sencha.gxt.cell.core.client.ButtonCell.ButtonScale;
import com.sencha.gxt.cell.core.client.ButtonCell.IconAlign;
import com.sencha.gxt.core.client.util.Margins;
@@ -59,7 +56,8 @@ public class ComputationsExecutedPanel extends FramedPanel {
private Item selectedItem;
private MultipleDNDUpload dnd;
- //private WorkspaceResourcesExplorerPanelPaginated wsResourcesExplorerPanel;
+ // private WorkspaceResourcesExplorerPanelPaginated
+ // wsResourcesExplorerPanel;
private WorkspaceResourcesExplorerPanel wsResourcesExplorerPanel;
private TextButton btnShow;
private TextButton btnDownload;
@@ -492,35 +490,47 @@ public class ComputationsExecutedPanel extends FramedPanel {
+ Constants.CURR_GROUP_ID + "=" + GCubeClientContext.getCurrentContextId());
Log.debug("Retrieved link: " + actionUrl);
- Window.open(actionUrl.toString(), selectedItem.getName(), "");
+ Window.open(URL.encode(actionUrl.toString()), selectedItem.getName(), "");
} else {
-
final ItemDescription itemDescription = new ItemDescription(selectedItem.getId(),
selectedItem.getName(), selectedItem.getOwner(), selectedItem.getPath(),
selectedItem.getType().name());
+ Log.debug("ItemDescription: " + itemDescription);
+ StringBuilder url = new StringBuilder();
+ url.append(GWT.getModuleBaseURL());
+ url.append(Constants.DOWNLOAD_FILE_SERVLET + "/" + itemDescription.getName() + "?itemId="
+ + itemDescription.getId() + "&" + Constants.CURR_GROUP_ID + "="
+ + GCubeClientContext.getCurrentContextId());
- DataMinerPortletServiceAsync.INSTANCE.getPublicLink(itemDescription, new AsyncCallback() {
+ Window.open(URL.encode(url.toString()), "_blank", "");
- @Override
- public void onFailure(Throwable caught) {
- if (caught instanceof SessionExpiredServiceException) {
- EventBusProvider.INSTANCE.fireEvent(new SessionExpiredEvent());
- } else {
- Log.error("Error open file: " + caught.getLocalizedMessage());
- UtilsGXT3.alert("Error", caught.getLocalizedMessage());
- }
- caught.printStackTrace();
-
- }
-
- @Override
- public void onSuccess(String link) {
- Log.debug("Retrieved link: " + link);
- Window.open(link, itemDescription.getName(), "");
- }
-
- });
+ /*
+ * final ItemDescription itemDescription = new
+ * ItemDescription(selectedItem.getId(), selectedItem.getName(),
+ * selectedItem.getOwner(), selectedItem.getPath(),
+ * selectedItem.getType().name());
+ *
+ * DataMinerPortletServiceAsync.INSTANCE.getPublicLink(
+ * itemDescription, new AsyncCallback() {
+ *
+ * @Override public void onFailure(Throwable caught) { if
+ * (caught instanceof SessionExpiredServiceException) {
+ * EventBusProvider.INSTANCE.fireEvent(new
+ * SessionExpiredEvent()); } else {
+ * Log.error("Error open file: " +
+ * caught.getLocalizedMessage()); UtilsGXT3.alert("Error",
+ * caught.getLocalizedMessage()); } caught.printStackTrace();
+ *
+ * }
+ *
+ * @Override public void onSuccess(String link) {
+ * Log.debug("Retrieved link: " + link); Window.open(link,
+ * itemDescription.getName(), ""); }
+ *
+ * });
+ *
+ */
}
} else {
UtilsGXT3.info("Attention", "Select a file!");
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/dataspace/InputDataSetsPanel.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/dataspace/InputDataSetsPanel.java
index 13c185f..2caae09 100644
--- a/src/main/java/org/gcube/portlets/user/dataminermanager/client/dataspace/InputDataSetsPanel.java
+++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/dataspace/InputDataSetsPanel.java
@@ -12,14 +12,11 @@ import org.gcube.portlets.user.dataminermanager.client.common.EventBusProvider;
import org.gcube.portlets.user.dataminermanager.client.events.DataMinerWorkAreaEvent;
import org.gcube.portlets.user.dataminermanager.client.events.DeleteItemRequestEvent;
import org.gcube.portlets.user.dataminermanager.client.events.RefreshDataMinerWorkAreaEvent;
-import org.gcube.portlets.user.dataminermanager.client.events.SessionExpiredEvent;
import org.gcube.portlets.user.dataminermanager.client.events.SyncRefreshUploadDataSpaceEvent;
import org.gcube.portlets.user.dataminermanager.client.events.UIStateEvent;
-import org.gcube.portlets.user.dataminermanager.client.rpc.DataMinerPortletServiceAsync;
import org.gcube.portlets.user.dataminermanager.client.type.DataMinerWorkAreaElementType;
import org.gcube.portlets.user.dataminermanager.client.util.UtilsGXT3;
import org.gcube.portlets.user.dataminermanager.shared.Constants;
-import org.gcube.portlets.user.dataminermanager.shared.exception.SessionExpiredServiceException;
import org.gcube.portlets.widgets.workspaceuploader.client.WorkspaceUploadNotification.WorskpaceUploadNotificationListener;
import org.gcube.portlets.widgets.workspaceuploader.client.uploader.DialogUpload.UPLOAD_TYPE;
import org.gcube.portlets.widgets.workspaceuploader.client.uploader.dragdrop.MultipleDNDUpload;
@@ -33,8 +30,8 @@ import com.allen_sauer.gwt.log.client.Log;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.logical.shared.ResizeEvent;
import com.google.gwt.event.logical.shared.ResizeHandler;
+import com.google.gwt.http.client.URL;
import com.google.gwt.user.client.Window;
-import com.google.gwt.user.client.rpc.AsyncCallback;
import com.sencha.gxt.cell.core.client.ButtonCell.ButtonScale;
import com.sencha.gxt.cell.core.client.ButtonCell.IconAlign;
import com.sencha.gxt.core.client.util.Margins;
@@ -283,10 +280,10 @@ public class InputDataSetsPanel extends FramedPanel {
public void onUploadCompleted(String parentId, String itemId) {
Log.debug("InputDataSetsPanel Upload completed: [parentID: " + parentId + ", itemId: " + itemId
+ "]");
- SyncRefreshUploadDataSpaceEvent ev=new SyncRefreshUploadDataSpaceEvent();
+ SyncRefreshUploadDataSpaceEvent ev = new SyncRefreshUploadDataSpaceEvent();
EventBusProvider.INSTANCE.fireEvent(ev);
- //wsResourcesExplorerPanel.refreshRootFolderView();
- //forceLayout();
+ // wsResourcesExplorerPanel.refreshRootFolderView();
+ // forceLayout();
}
@@ -306,10 +303,10 @@ public class InputDataSetsPanel extends FramedPanel {
public void onOverwriteCompleted(String parentId, String itemId) {
Log.debug("InputDataSetsPanel Upload Override Completed: [parentID: " + parentId + ", itemId: "
+ itemId + "]");
- SyncRefreshUploadDataSpaceEvent ev=new SyncRefreshUploadDataSpaceEvent();
+ SyncRefreshUploadDataSpaceEvent ev = new SyncRefreshUploadDataSpaceEvent();
EventBusProvider.INSTANCE.fireEvent(ev);
- //wsResourcesExplorerPanel.refreshRootFolderView();
- //forceLayout();
+ // wsResourcesExplorerPanel.refreshRootFolderView();
+ // forceLayout();
}
};
@@ -443,33 +440,44 @@ public class InputDataSetsPanel extends FramedPanel {
+ Constants.CURR_GROUP_ID + "=" + GCubeClientContext.getCurrentContextId());
Log.debug("Retrieved link: " + actionUrl);
- Window.open(actionUrl.toString(), selectedItem.getName(), "");
+ Window.open(URL.encode(actionUrl.toString()), selectedItem.getName(), "");
} else {
final ItemDescription itemDescription = new ItemDescription(selectedItem.getId(),
selectedItem.getName(), selectedItem.getOwner(), selectedItem.getPath(),
selectedItem.getType().name());
+ Log.debug("ItemDescription: " + itemDescription);
+ StringBuilder url = new StringBuilder();
+ url.append(GWT.getModuleBaseURL());
+ url.append(Constants.DOWNLOAD_FILE_SERVLET + "/" + itemDescription.getName() + "?itemId="
+ + itemDescription.getId() + "&" + Constants.CURR_GROUP_ID + "=" + GCubeClientContext.getCurrentContextId());
- DataMinerPortletServiceAsync.INSTANCE.getPublicLink(itemDescription, new AsyncCallback() {
+ Window.open(URL.encode(url.toString()), "_blank", "");
- @Override
- public void onFailure(Throwable caught) {
- if (caught instanceof SessionExpiredServiceException) {
- EventBusProvider.INSTANCE.fireEvent(new SessionExpiredEvent());
- } else {
- Log.error("Error open file: " + caught.getLocalizedMessage(), caught);
- UtilsGXT3.alert("Error", caught.getLocalizedMessage());
- }
- caught.printStackTrace();
-
- }
-
- @Override
- public void onSuccess(String link) {
- Log.debug("Retrieved link: " + link);
- Window.open(link, itemDescription.getName(), "");
- }
-
- });
+ /*
+ * final ItemDescription itemDescription = new
+ * ItemDescription(selectedItem.getId(), selectedItem.getName(),
+ * selectedItem.getOwner(), selectedItem.getPath(),
+ * selectedItem.getType().name());
+ *
+ * DataMinerPortletServiceAsync.INSTANCE.getPublicLink(
+ * itemDescription, new AsyncCallback() {
+ *
+ * @Override public void onFailure(Throwable caught) { if
+ * (caught instanceof SessionExpiredServiceException) {
+ * EventBusProvider.INSTANCE.fireEvent(new
+ * SessionExpiredEvent()); } else {
+ * Log.error("Error open file: " + caught.getLocalizedMessage(),
+ * caught); UtilsGXT3.alert("Error",
+ * caught.getLocalizedMessage()); } caught.printStackTrace();
+ *
+ * }
+ *
+ * @Override public void onSuccess(String link) {
+ * Log.debug("Retrieved link: " + link); Window.open(link,
+ * itemDescription.getName(), ""); }
+ *
+ * });
+ */
}
} else {
UtilsGXT3.info("Attention", "Select a file!");
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/dataspace/OutputDataSetsPanel.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/dataspace/OutputDataSetsPanel.java
index c42c820..4b3243f 100644
--- a/src/main/java/org/gcube/portlets/user/dataminermanager/client/dataspace/OutputDataSetsPanel.java
+++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/dataspace/OutputDataSetsPanel.java
@@ -12,14 +12,11 @@ import org.gcube.portlets.user.dataminermanager.client.common.EventBusProvider;
import org.gcube.portlets.user.dataminermanager.client.events.DataMinerWorkAreaEvent;
import org.gcube.portlets.user.dataminermanager.client.events.DeleteItemRequestEvent;
import org.gcube.portlets.user.dataminermanager.client.events.RefreshDataMinerWorkAreaEvent;
-import org.gcube.portlets.user.dataminermanager.client.events.SessionExpiredEvent;
import org.gcube.portlets.user.dataminermanager.client.events.SyncRefreshUploadDataSpaceEvent;
import org.gcube.portlets.user.dataminermanager.client.events.UIStateEvent;
-import org.gcube.portlets.user.dataminermanager.client.rpc.DataMinerPortletServiceAsync;
import org.gcube.portlets.user.dataminermanager.client.type.DataMinerWorkAreaElementType;
import org.gcube.portlets.user.dataminermanager.client.util.UtilsGXT3;
import org.gcube.portlets.user.dataminermanager.shared.Constants;
-import org.gcube.portlets.user.dataminermanager.shared.exception.SessionExpiredServiceException;
import org.gcube.portlets.widgets.workspaceuploader.client.WorkspaceUploadNotification.WorskpaceUploadNotificationListener;
import org.gcube.portlets.widgets.workspaceuploader.client.uploader.DialogUpload.UPLOAD_TYPE;
import org.gcube.portlets.widgets.workspaceuploader.client.uploader.dragdrop.MultipleDNDUpload;
@@ -33,8 +30,8 @@ import com.allen_sauer.gwt.log.client.Log;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.logical.shared.ResizeEvent;
import com.google.gwt.event.logical.shared.ResizeHandler;
+import com.google.gwt.http.client.URL;
import com.google.gwt.user.client.Window;
-import com.google.gwt.user.client.rpc.AsyncCallback;
import com.sencha.gxt.cell.core.client.ButtonCell.ButtonScale;
import com.sencha.gxt.cell.core.client.ButtonCell.IconAlign;
import com.sencha.gxt.core.client.util.Margins;
@@ -201,13 +198,11 @@ public class OutputDataSetsPanel extends FramedPanel {
}
}
-
-
+
private void manageSyncRefreshUploadDataSpaceEvents() {
Log.debug("OutputDataSetsPanel received SyncRefreshUploadDataSpaceEvents: ");
refreshWSResourceExplorerPanel();
}
-
private void create(DataMinerWorkAreaEvent event) {
Log.debug("Create OutputDataSetsPanel");
@@ -276,24 +271,26 @@ public class OutputDataSetsPanel extends FramedPanel {
// DND
dnd = new MultipleDNDUpload();
-
+
dnd.setParameters(event.getDataMinerWorkArea().getOutputDataSets().getFolder().getId(), UPLOAD_TYPE.File);
dnd.addUniqueContainer(wsResourcesExplorerPanel);
WorskpaceUploadNotificationListener workspaceUploaderListenerOutputDataSetsPanel = new WorskpaceUploadNotificationListener() {
@Override
public void onUploadCompleted(String parentId, String itemId) {
- Log.debug("OutputDataSetsPanel Upload completed: [parentID: " + parentId + ", itemId: " + itemId + "]");
- SyncRefreshUploadDataSpaceEvent ev=new SyncRefreshUploadDataSpaceEvent();
+ Log.debug("OutputDataSetsPanel Upload completed: [parentID: " + parentId + ", itemId: " + itemId
+ + "]");
+ SyncRefreshUploadDataSpaceEvent ev = new SyncRefreshUploadDataSpaceEvent();
EventBusProvider.INSTANCE.fireEvent(ev);
- //wsResourcesExplorerPanel.refreshRootFolderView();
- //forceLayout();
+ // wsResourcesExplorerPanel.refreshRootFolderView();
+ // forceLayout();
}
@Override
public void onUploadAborted(String parentId, String itemId) {
- Log.debug("OutputDataSetsPanel Upload Aborted: [parentID: " + parentId + ", itemId: " + itemId + "]");
+ Log.debug(
+ "OutputDataSetsPanel Upload Aborted: [parentID: " + parentId + ", itemId: " + itemId + "]");
}
@Override
@@ -304,11 +301,12 @@ public class OutputDataSetsPanel extends FramedPanel {
@Override
public void onOverwriteCompleted(String parentId, String itemId) {
- Log.debug("OutputDataSetsPanel Upload Override Completed: [parentID: " + parentId + ", itemId: " + itemId + "]");
- SyncRefreshUploadDataSpaceEvent ev=new SyncRefreshUploadDataSpaceEvent();
+ Log.debug("OutputDataSetsPanel Upload Override Completed: [parentID: " + parentId + ", itemId: "
+ + itemId + "]");
+ SyncRefreshUploadDataSpaceEvent ev = new SyncRefreshUploadDataSpaceEvent();
EventBusProvider.INSTANCE.fireEvent(ev);
- //wsResourcesExplorerPanel.refreshRootFolderView();
- //forceLayout();
+ // wsResourcesExplorerPanel.refreshRootFolderView();
+ // forceLayout();
}
};
@@ -442,33 +440,46 @@ public class OutputDataSetsPanel extends FramedPanel {
+ Constants.CURR_GROUP_ID + "=" + GCubeClientContext.getCurrentContextId());
Log.debug("Retrieved link: " + actionUrl);
- Window.open(actionUrl.toString(), selectedItem.getName(), "");
+ Window.open(URL.encode(actionUrl.toString()), selectedItem.getName(), "");
} else {
final ItemDescription itemDescription = new ItemDescription(selectedItem.getId(),
selectedItem.getName(), selectedItem.getOwner(), selectedItem.getPath(),
selectedItem.getType().name());
+ Log.debug("ItemDescription: " + itemDescription);
- DataMinerPortletServiceAsync.INSTANCE.getPublicLink(itemDescription, new AsyncCallback() {
+ StringBuilder url = new StringBuilder();
+ url.append(GWT.getModuleBaseURL());
+ url.append(Constants.DOWNLOAD_FILE_SERVLET + "/" + itemDescription.getName() + "?itemId="
+ + itemDescription.getId() + "&" + Constants.CURR_GROUP_ID + "="
+ + GCubeClientContext.getCurrentContextId());
- @Override
- public void onFailure(Throwable caught) {
- if (caught instanceof SessionExpiredServiceException) {
- EventBusProvider.INSTANCE.fireEvent(new SessionExpiredEvent());
- } else {
- Log.error("Error open file: " + caught.getLocalizedMessage(), caught);
- UtilsGXT3.alert("Error", caught.getLocalizedMessage());
- }
- caught.printStackTrace();
+ Window.open(URL.encode(url.toString()), "_blank", "");
- }
-
- @Override
- public void onSuccess(String link) {
- Log.debug("Retrieved link: " + link);
- Window.open(link, itemDescription.getName(), "");
- }
-
- });
+ /*
+ * final ItemDescription itemDescription = new
+ * ItemDescription(selectedItem.getId(), selectedItem.getName(),
+ * selectedItem.getOwner(), selectedItem.getPath(),
+ * selectedItem.getType().name());
+ *
+ * DataMinerPortletServiceAsync.INSTANCE.getPublicLink(
+ * itemDescription, new AsyncCallback() {
+ *
+ * @Override public void onFailure(Throwable caught) { if
+ * (caught instanceof SessionExpiredServiceException) {
+ * EventBusProvider.INSTANCE.fireEvent(new
+ * SessionExpiredEvent()); } else {
+ * Log.error("Error open file: " + caught.getLocalizedMessage(),
+ * caught); UtilsGXT3.alert("Error",
+ * caught.getLocalizedMessage()); } caught.printStackTrace();
+ *
+ * }
+ *
+ * @Override public void onSuccess(String link) {
+ * Log.debug("Retrieved link: " + link); Window.open(link,
+ * itemDescription.getName(), ""); }
+ *
+ * });
+ */
}
} else {
UtilsGXT3.info("Attention", "Select a file!");
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/server/DownloadFileServlet.java b/src/main/java/org/gcube/portlets/user/dataminermanager/server/DownloadFileServlet.java
new file mode 100644
index 0000000..4e25282
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/dataminermanager/server/DownloadFileServlet.java
@@ -0,0 +1,123 @@
+package org.gcube.portlets.user.dataminermanager.server;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.nio.ByteBuffer;
+import java.nio.channels.Channels;
+import java.nio.channels.ReadableByteChannel;
+import java.nio.channels.WritableByteChannel;
+
+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.gcube.data.analysis.dataminermanagercl.server.util.ServiceCredentials;
+import org.gcube.data.analysis.dataminermanagercl.shared.workspace.ItemDescription;
+import org.gcube.portlets.user.dataminermanager.server.storage.StorageUtil;
+import org.gcube.portlets.user.dataminermanager.shared.Constants;
+import org.gcube.portlets.user.dataminermanager.shared.exception.ServiceException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Download Servlet
+ *
+ * @author Giancarlo Panichi
+ *
+ *
+ */
+public class DownloadFileServlet extends HttpServlet {
+
+ private static final long serialVersionUID = 5389118370656932343L;
+
+ private static Logger logger = LoggerFactory.getLogger(DownloadFileServlet.class);
+
+ public DownloadFileServlet() {
+ super();
+ }
+
+ /**
+ * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
+ * response)
+ */
+ protected void doGet(HttpServletRequest request, HttpServletResponse response)
+ throws ServletException, IOException {
+ createResponse(request, response);
+ }
+
+ /**
+ * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
+ * response)
+ */
+ protected void doPost(HttpServletRequest request, HttpServletResponse response)
+ throws ServletException, IOException {
+ createResponse(request, response);
+ }
+
+ private void createResponse(HttpServletRequest req, HttpServletResponse resp)
+ throws ServletException, IOException {
+
+ try {
+ logger.debug("DownloadFileServlet()");
+
+ HttpSession session = req.getSession();
+
+ if (session == null) {
+ logger.error("Error getting the download session, no session valid found: " + session);
+ resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
+ "ERROR-Error getting the user session, no session found" + session);
+ return;
+ }
+ logger.debug("DownloadFileServlet session id: " + session.getId());
+ String scopeGroupId = req.getHeader(Constants.CURR_GROUP_ID);
+ if (scopeGroupId == null || scopeGroupId.isEmpty()) {
+ scopeGroupId = req.getParameter(Constants.CURR_GROUP_ID);
+ if (scopeGroupId == null || scopeGroupId.isEmpty()) {
+ logger.error(
+ "CURR_GROUP_ID is null, it is a mandatory parameter in custom servlet: " + scopeGroupId);
+ throw new ServletException(
+ "CURR_GROUP_ID is null, it is a mandatory parameter in custom servlet: " + scopeGroupId);
+ }
+ }
+ String itemId = req.getParameter("itemId");
+ logger.info("DownloadFileServlet(): [scopeGroupId=" + scopeGroupId + ",ItemId=" + itemId + "]");
+ ServiceCredentials serviceCredentials = SessionUtil.getServiceCredentials(req, scopeGroupId);
+ StorageUtil filesStorage = new StorageUtil();
+ ItemDescription itemDescription = filesStorage.getFileInfoOnWorkspace(serviceCredentials.getUserName(),
+ itemId);
+ logger.debug("Item retrieved: " + itemDescription);
+ InputStream inputStream = filesStorage.getFileOnWorkspace(serviceCredentials.getUserName(), itemId);
+
+ resp.setHeader("Content-Disposition:", "attachment;filename=\"" + itemDescription.getName() + "\"");
+ resp.setHeader("Content-Type", "application/force-download");
+ resp.setHeader("Content-Length", String.valueOf(itemDescription.getLenght()));
+
+ stream(inputStream, resp.getOutputStream());
+ } catch (ServiceException e) {
+ logger.error("DownloadFileServlet():"+e.getLocalizedMessage(), e);
+ throw new ServletException(e.getLocalizedMessage(), e);
+ } catch (Throwable e) {
+ logger.error("DownloadFileServlet(): " + e.getLocalizedMessage(), e);
+ throw new ServletException("Download:" + e.getLocalizedMessage(), e);
+ }
+ }
+
+ private long stream(InputStream input, OutputStream output) throws IOException {
+ try (ReadableByteChannel inputChannel = Channels.newChannel(input);
+ WritableByteChannel outputChannel = Channels.newChannel(output);) {
+ ByteBuffer buffer = ByteBuffer.allocateDirect(10240);
+ long size = 0;
+
+ while (inputChannel.read(buffer) != -1) {
+ buffer.flip();
+ size += outputChannel.write(buffer);
+ buffer.clear();
+ }
+
+ return size;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/server/DownloadFolderServlet.java b/src/main/java/org/gcube/portlets/user/dataminermanager/server/DownloadFolderServlet.java
index 2c3f0a2..3d11343 100644
--- a/src/main/java/org/gcube/portlets/user/dataminermanager/server/DownloadFolderServlet.java
+++ b/src/main/java/org/gcube/portlets/user/dataminermanager/server/DownloadFolderServlet.java
@@ -64,7 +64,7 @@ public class DownloadFolderServlet extends HttpServlet {
private void createResponse(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
try {
- logger.debug("DownloadFolderServlet");
+ logger.debug("DownloadFolderServlet()");
HttpSession session = request.getSession();
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/server/storage/StorageUtil.java b/src/main/java/org/gcube/portlets/user/dataminermanager/server/storage/StorageUtil.java
index 0d104cb..b9805ce 100644
--- a/src/main/java/org/gcube/portlets/user/dataminermanager/server/storage/StorageUtil.java
+++ b/src/main/java/org/gcube/portlets/user/dataminermanager/server/storage/StorageUtil.java
@@ -13,8 +13,10 @@ import org.gcube.common.storagehub.client.dsl.ListResolver;
import org.gcube.common.storagehub.client.dsl.OpenResolver;
import org.gcube.common.storagehub.client.dsl.StorageHubClient;
import org.gcube.common.storagehub.model.Metadata;
+import org.gcube.common.storagehub.model.items.AbstractFileItem;
import org.gcube.common.storagehub.model.items.FolderItem;
import org.gcube.common.storagehub.model.items.Item;
+import org.gcube.data.analysis.dataminermanagercl.shared.workspace.ItemDescription;
import org.gcube.portlets.user.dataminermanager.shared.exception.ServiceException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -69,7 +71,7 @@ public class StorageUtil {
* @throws ServiceException
* service exception
*/
- public InputStream getInputStreamForItemOnWorkspace(String user, String itemId) throws ServiceException {
+ public InputStream getFileOnWorkspace(String user, String itemId) throws ServiceException {
try {
logger.debug("getInputStreamForItemOnWorkspace: [user=" + user + ", itemId=" + itemId + "]");
StorageHubClient shc = new StorageHubClient();
@@ -82,6 +84,37 @@ public class StorageUtil {
throw new ServiceException(e.getLocalizedMessage(), e);
}
}
+
+ /**
+ *
+ * @param user
+ * User
+ * @param itemId
+ * Item id
+ * @return Item description
+ * @throws ServiceException
+ * Exception
+ */
+ public ItemDescription getFileInfoOnWorkspace(String user, String itemId)
+ throws ServiceException {
+ try {
+ logger.info("Retrieve file info on workspace: [user=" + user + ", itemId=" + itemId + "]");
+ StorageHubClient shc = new StorageHubClient();
+ OpenResolver openResolver = shc.open(itemId);
+
+ FileContainer fileContainer = openResolver.asFile();
+ AbstractFileItem item = fileContainer.get();
+ ItemDescription itemDescription = new ItemDescription(item.getId(), item.getName(), item.getOwner(),
+ item.getPath(), item.getClass().getSimpleName());
+ itemDescription.setMimeType(item.getContent().getMimeType());
+ itemDescription.setLenght(String.valueOf(item.getContent().getSize()));
+ return itemDescription;
+
+ } catch (Throwable e) {
+ logger.error("Retrieve file info on workspace: " + e.getLocalizedMessage(), e);
+ throw new ServiceException(e.getLocalizedMessage());
+ }
+ }
/**
*
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/server/util/TableReader.java b/src/main/java/org/gcube/portlets/user/dataminermanager/server/util/TableReader.java
index 1140666..502b21b 100644
--- a/src/main/java/org/gcube/portlets/user/dataminermanager/server/util/TableReader.java
+++ b/src/main/java/org/gcube/portlets/user/dataminermanager/server/util/TableReader.java
@@ -37,7 +37,7 @@ public class TableReader {
public TableItemSimple getTableItemSimple() throws ServiceException {
StorageUtil storageUtil=new StorageUtil();
- InputStream is = storageUtil.getInputStreamForItemOnWorkspace(
+ InputStream is = storageUtil.getFileOnWorkspace(
serviceCredentials.getUserName(), item.getId());
Reader fileReader = new InputStreamReader(is);
CSVReader csvReader = new CSVReader(fileReader);
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/shared/Constants.java b/src/main/java/org/gcube/portlets/user/dataminermanager/shared/Constants.java
index b844e59..0254a00 100644
--- a/src/main/java/org/gcube/portlets/user/dataminermanager/shared/Constants.java
+++ b/src/main/java/org/gcube/portlets/user/dataminermanager/shared/Constants.java
@@ -15,23 +15,21 @@ public class Constants {
public static final String DATA_MINER_LANG_COOKIE = "DataMinerLangCookie";
public static final String DATA_MINER_LANG = "DataMinerLang";
public static final String DATA_MINER_OPERATOR_ID = "OperatorId";
-
+
public static final String DEFAULT_USER = "giancarlo.panichi";
public final static String DEFAULT_SCOPE = "/gcube/devNext/NextNext";
public final static String DEFAULT_TOKEN = "";
public static final String DEFAULT_ROLE = "OrganizationMember";
-
+
public static final String SClientMap = "DataMinerClientMap";
public static final String DATA_MINER_SERVICE_NAME = "DataMiner";
public static final String DATAMINER_SERVICE_CATEGORY = "DataAnalysis";
-
public static final String TD_DATASOURCE_FACTORY_ID = "DataMinerManager";
public static final int TIME_UPDATE_COMPUTATION_STATUS_PANEL = 5 * 1000;// 7*1000;
-
// WPS Data Miner
public static final String WPSServiceURL = "http://dataminer-d-d4s.d4science.org:80/wps/";
public static final String WPSWebProcessingService = "WebProcessingService";
@@ -39,17 +37,17 @@ public class Constants {
public static final String WPSToken = "";
public static final String WPSUser = "giancarlo.panichi";
public static final String WPSLanguage = "en-US";
+
+ /* public static final String WPSUser = "gianpaolo.coro"; */
+
+ // Session
+ public static final String CURR_GROUP_ID = "CURR_GROUP_ID";
- /*public static final String WPSUser = "gianpaolo.coro";*/
-
-
- //DownloadFolderServlet
- public static final String DOWNLOAD_FOLDER_SERVLET= "DownloadFolderServlet";
+ // Download
+ public static final String DOWNLOAD_FILE_SERVLET = "DownloadFileServlet";
+
+ public static final String DOWNLOAD_FOLDER_SERVLET = "DownloadFolderServlet";
public static final String DOWNLOAD_FOLDER_SERVLET_ITEM_ID_PARAMETER = "itemId";
public static final String DOWNLOAD_FOLDER_SERVLET_FOLDER_NAME_PARAMETER = "folderName";
-
- //Session
- public static final String CURR_GROUP_ID="CURR_GROUP_ID";
- public static final String CURR_USER_ID = "CURR_USER_ID";
}
diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml
index 4e6ab4a..04245ee 100644
--- a/src/main/webapp/WEB-INF/web.xml
+++ b/src/main/webapp/WEB-INF/web.xml
@@ -12,10 +12,17 @@
jUnitHostImpl
com.google.gwt.junit.server.JUnitHostImpl
+
+
+
+ DownloadFileServlet
+ org.gcube.portlets.user.dataminermanager.server.DownloadFileServlet
+
DownloadFolderServlet
org.gcube.portlets.user.dataminermanager.server.DownloadFolderServlet
+
workspaceExplorer
org.gcube.portlets.widgets.wsexplorer.server.WorkspaceExplorerServiceImpl
@@ -42,10 +49,17 @@
jUnitHostImpl
/dataminermanager/junithost/*
+
+
+
+ DownloadFileServlet
+ /dataminermanager/DownloadFileServlet/*
+
DownloadFolderServlet
/dataminermanager/DownloadFolderServlet
+
workspaceExplorer
/dataminermanager/WorkspaceExplorerService