ref 11720: DataMiner - Update to StorageHUB

https://support.d4science.org/issues/11720

Updated to StorageHub 

git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/widgets/data-miner-manager-widget@171796 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
Giancarlo Panichi 2018-10-01 16:56:15 +00:00
parent 91d67aaeb9
commit dd43e49dff
12 changed files with 316 additions and 125 deletions

View File

@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" output="target/data-miner-manager-widget-1.2.0-SNAPSHOT/WEB-INF/classes" path="src/main/java">
<classpathentry kind="src" output="target/data-miner-manager-widget-1.3.0-SNAPSHOT/WEB-INF/classes" path="src/main/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry excluding="**" kind="src" output="target/data-miner-manager-widget-1.2.0-SNAPSHOT/WEB-INF/classes" path="src/main/resources">
<classpathentry excluding="**" kind="src" output="target/data-miner-manager-widget-1.3.0-SNAPSHOT/WEB-INF/classes" path="src/main/resources">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
@ -33,5 +33,5 @@
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="output" path="target/data-miner-manager-widget-1.2.0-SNAPSHOT/WEB-INF/classes"/>
<classpathentry kind="output" path="target/data-miner-manager-widget-1.3.0-SNAPSHOT/WEB-INF/classes"/>
</classpath>

View File

@ -10,4 +10,4 @@ org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
org.eclipse.jdt.core.compiler.source=1.7
org.eclipse.jdt.core.compiler.source=1.8

View File

@ -1,7 +1,11 @@
<ReleaseNotes>
<Changeset component="org.gcube.portlets.widgets.data-miner-manager-widget.1-3-0"
date="2018-10-01">
<Change>Updated to support download by StorageHub[ticket #11879]</Change>
</Changeset>
<Changeset component="org.gcube.portlets.widgets.data-miner-manager-widget.1-2-0"
date="2018-07-01">
<Change>Updated to support StorageHUB[ticket #11879]</Change>
<Change>Updated to support StorageHub[ticket #11879]</Change>
<Change>Added support to netcdf files</Change>
</Changeset>
<Changeset component="org.gcube.portlets.widgets.data-miner-manager-widget.1-1-0"

View File

@ -12,7 +12,7 @@
<groupId>org.gcube.portlets.widgets</groupId>
<artifactId>data-miner-manager-widget</artifactId>
<version>1.2.0-SNAPSHOT</version>
<version>1.3.0-SNAPSHOT</version>
<name>data-miner-manager-widget</name>
<description>data-miner-manager-widget offers a unique access to perform data mining and statistical operations on heterogeneous data</description>

View File

@ -14,14 +14,10 @@ import org.gcube.portlets.widgets.dataminermanagerwidget.client.events.Computati
import org.gcube.portlets.widgets.dataminermanagerwidget.client.events.DataMinerWorkAreaEvent;
import org.gcube.portlets.widgets.dataminermanagerwidget.client.events.DeleteItemRequestEvent;
import org.gcube.portlets.widgets.dataminermanagerwidget.client.events.RefreshDataMinerWorkAreaEvent;
import org.gcube.portlets.widgets.dataminermanagerwidget.client.events.SessionExpiredEvent;
import org.gcube.portlets.widgets.dataminermanagerwidget.client.events.UIStateEvent;
import org.gcube.portlets.widgets.dataminermanagerwidget.client.rpc.DataMinerPortletServiceAsync;
import org.gcube.portlets.widgets.dataminermanagerwidget.client.type.DataMinerWorkAreaElementType;
import org.gcube.portlets.widgets.dataminermanagerwidget.client.util.UtilsGXT3;
import org.gcube.portlets.widgets.dataminermanagerwidget.shared.Constants;
import org.gcube.portlets.widgets.dataminermanagerwidget.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;
@ -35,8 +31,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;
@ -492,35 +488,46 @@ 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<String>() {
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<String>() {
*
* @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!");

View File

@ -7,21 +7,16 @@ import java.util.Map;
import org.gcube.data.analysis.dataminermanagercl.shared.workspace.ItemDescription;
import org.gcube.portal.clientcontext.client.GCubeClientContext;
import org.gcube.portlets.widgets.dataminermanagerwidget.client.DataMinerManagerPanel;
import org.gcube.portlets.widgets.dataminermanagerwidget.client.common.EventBusProvider;
import org.gcube.portlets.widgets.dataminermanagerwidget.client.events.DataMinerWorkAreaEvent;
import org.gcube.portlets.widgets.dataminermanagerwidget.client.events.DeleteItemRequestEvent;
import org.gcube.portlets.widgets.dataminermanagerwidget.client.events.RefreshDataMinerWorkAreaEvent;
import org.gcube.portlets.widgets.dataminermanagerwidget.client.events.SessionExpiredEvent;
import org.gcube.portlets.widgets.dataminermanagerwidget.client.events.SyncRefreshUploadDataSpaceEvent;
import org.gcube.portlets.widgets.dataminermanagerwidget.client.events.UIStateEvent;
import org.gcube.portlets.widgets.dataminermanagerwidget.client.rpc.DataMinerPortletServiceAsync;
import org.gcube.portlets.widgets.dataminermanagerwidget.client.type.DataMinerWorkAreaElementType;
import org.gcube.portlets.widgets.dataminermanagerwidget.client.util.UtilsGXT3;
import org.gcube.portlets.widgets.dataminermanagerwidget.shared.Constants;
import org.gcube.portlets.widgets.dataminermanagerwidget.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;
@ -35,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;
@ -285,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();
}
@ -308,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();
}
};
@ -445,33 +440,45 @@ 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<String>() {
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<String>() {
*
* @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!");
@ -479,5 +486,4 @@ public class InputDataSetsPanel extends FramedPanel {
}
}

View File

@ -12,14 +12,11 @@ import org.gcube.portlets.widgets.dataminermanagerwidget.client.common.EventBusP
import org.gcube.portlets.widgets.dataminermanagerwidget.client.events.DataMinerWorkAreaEvent;
import org.gcube.portlets.widgets.dataminermanagerwidget.client.events.DeleteItemRequestEvent;
import org.gcube.portlets.widgets.dataminermanagerwidget.client.events.RefreshDataMinerWorkAreaEvent;
import org.gcube.portlets.widgets.dataminermanagerwidget.client.events.SessionExpiredEvent;
import org.gcube.portlets.widgets.dataminermanagerwidget.client.events.SyncRefreshUploadDataSpaceEvent;
import org.gcube.portlets.widgets.dataminermanagerwidget.client.events.UIStateEvent;
import org.gcube.portlets.widgets.dataminermanagerwidget.client.rpc.DataMinerPortletServiceAsync;
import org.gcube.portlets.widgets.dataminermanagerwidget.client.type.DataMinerWorkAreaElementType;
import org.gcube.portlets.widgets.dataminermanagerwidget.client.util.UtilsGXT3;
import org.gcube.portlets.widgets.dataminermanagerwidget.shared.Constants;
import org.gcube.portlets.widgets.dataminermanagerwidget.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;
@ -55,7 +52,6 @@ import com.sencha.gxt.widget.core.client.toolbar.ToolBar;
*/
public class OutputDataSetsPanel extends FramedPanel {
private Item selectedItem;
private MultipleDNDUpload dnd;
// private WorkspaceResourcesExplorerPanelPaginated
@ -202,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");
@ -277,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
@ -305,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();
}
};
@ -448,28 +445,40 @@ public class OutputDataSetsPanel extends FramedPanel {
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<String>() {
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<String>() {
*
* @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!");

View File

@ -0,0 +1,123 @@
package org.gcube.portlets.widgets.dataminermanagerwidget.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.widgets.dataminermanagerwidget.server.storage.StorageUtil;
import org.gcube.portlets.widgets.dataminermanagerwidget.shared.Constants;
import org.gcube.portlets.widgets.dataminermanagerwidget.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;
}
}
}

View File

@ -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.widgets.dataminermanagerwidget.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());
}
}
/**
*
@ -210,7 +243,7 @@ public class StorageUtil {
*/
public void deleteItem(String user, String itemId) throws ServiceException {
try {
logger.debug("User: " + user + ", ItemId:" + itemId);
logger.debug("Delete Item: [User=" + user + ", ItemId=" + itemId+"]");
StorageHubClient shc = new StorageHubClient();
OpenResolver openResolver = shc.open(itemId);

View File

@ -38,7 +38,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);

View File

@ -15,22 +15,19 @@ 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 final static String DEFAULT_SCOPE = "/gcube/devNext";
//public final static String DEFAULT_SCOPE = "/gcube/devNext/NextNext";
// public final static String DEFAULT_SCOPE = "/gcube/devNext/NextNext";
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;
@ -45,20 +42,18 @@ public class Constants {
public static final String WPSServiceURL = "http://dataminer-d-d4s.d4science.org:80/wps/";
public static final String WPSWebProcessingService = "WebProcessingService";
public static final String WPSCancelComputationServlet = "CancelComputationServlet";
public static final String WPSToken = "f0666597-4302-49ce-bea2-555b94e569cb";
public static final String WPSUser = "giancarlo.panichi";
public static final String WPSToken = "";
public static final String WPSUser = "";
public static final String WPSLanguage = "en-US";
/*public static final String WPSToken = "4ccc2c35-60c9-4c9b-9800-616538d5d48b";
public static final String WPSUser = "gianpaolo.coro";*/
//DownloadFolderServlet
public static final String DOWNLOAD_FOLDER_SERVLET= "DownloadFolderServlet";
// Session
public static final String CURR_GROUP_ID = "CURR_GROUP_ID";
// 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";
}

View File

@ -12,10 +12,17 @@
<servlet-name>jUnitHostImpl</servlet-name>
<servlet-class>com.google.gwt.junit.server.JUnitHostImpl</servlet-class>
</servlet>
<!-- Download -->
<servlet>
<servlet-name>DownloadFileServlet</servlet-name>
<servlet-class>org.gcube.portlets.widgets.dataminermanagerwidget.server.DownloadFileServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>DownloadFolderServlet</servlet-name>
<servlet-class>org.gcube.portlets.widgets.dataminermanagerwidget.server.DownloadFolderServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>workspaceExplorer</servlet-name>
<servlet-class>org.gcube.portlets.widgets.wsexplorer.server.WorkspaceExplorerServiceImpl</servlet-class>
@ -43,10 +50,17 @@
<servlet-name>jUnitHostImpl</servlet-name>
<url-pattern>/dataminermanagerwidget/junithost/*</url-pattern>
</servlet-mapping>
<!-- Download -->
<servlet-mapping>
<servlet-name>DownloadFileServlet</servlet-name>
<url-pattern>/dataminermanagerwidget/DownloadFileServlet/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>DownloadFolderServlet</servlet-name>
<url-pattern>/dataminermanagerwidget/DownloadFolderServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>workspaceExplorer</servlet-name>
<url-pattern>/dataminermanagerwidget/WorkspaceExplorerService</url-pattern>