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 2ccc478..7c45170 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 @@ -6,7 +6,6 @@ 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; import org.gcube.portlets.user.dataminermanager.client.events.CancelExecutionFromComputationsRequestEvent; @@ -18,7 +17,7 @@ import org.gcube.portlets.user.dataminermanager.client.events.ResubmitComputatio import org.gcube.portlets.user.dataminermanager.client.events.UIStateEvent; 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.client.workspace.DownloadWidget; 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; @@ -29,11 +28,8 @@ import org.gcube.portlets.widgets.wsexplorer.shared.FilterCriteria; import org.gcube.portlets.widgets.wsexplorer.shared.Item; 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.sencha.gxt.cell.core.client.ButtonCell.ButtonScale; import com.sencha.gxt.cell.core.client.ButtonCell.IconAlign; import com.sencha.gxt.core.client.util.Margins; @@ -333,7 +329,7 @@ public class ComputationsExecutedPanel extends FramedPanel { @Override public void onSelect(SelectEvent event) { - downloadFile(); + downloadItem(); } }); @@ -479,63 +475,13 @@ public class ComputationsExecutedPanel extends FramedPanel { } - private void downloadFile() { + private void downloadItem() { if (selectedItem != null) { - if (selectedItem.isFolder()) { - StringBuilder actionUrl = new StringBuilder(); - actionUrl.append(GWT.getModuleBaseURL()); - actionUrl.append(Constants.DOWNLOAD_FOLDER_SERVLET + "?" - + Constants.DOWNLOAD_FOLDER_SERVLET_ITEM_ID_PARAMETER + "=" + selectedItem.getId() + "&" - + Constants.DOWNLOAD_FOLDER_SERVLET_FOLDER_NAME_PARAMETER + "=" + selectedItem.getName() + "&" - + Constants.CURR_GROUP_ID + "=" + GCubeClientContext.getCurrentContextId()); - - Log.debug("Retrieved link: " + actionUrl); - 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()); - - Window.open(URL.encode(url.toString()), "_blank", ""); - - /* - * 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(), ""); } - * - * }); - * - */ - } + DownloadWidget downloadWidget = new DownloadWidget(); + downloadWidget.download(selectedItem.getId()); } else { - UtilsGXT3.info("Attention", "Select a file!"); + UtilsGXT3.info("Attention", "Select a element!"); } - } private void cancelComputation() { 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 2caae09..7160d51 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 @@ -6,7 +6,6 @@ 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; import org.gcube.portlets.user.dataminermanager.client.events.DataMinerWorkAreaEvent; @@ -16,7 +15,7 @@ import org.gcube.portlets.user.dataminermanager.client.events.SyncRefreshUploadD import org.gcube.portlets.user.dataminermanager.client.events.UIStateEvent; 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.client.workspace.DownloadWidget; 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; @@ -27,11 +26,8 @@ import org.gcube.portlets.widgets.wsexplorer.shared.FilterCriteria; import org.gcube.portlets.widgets.wsexplorer.shared.Item; 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.sencha.gxt.cell.core.client.ButtonCell.ButtonScale; import com.sencha.gxt.cell.core.client.ButtonCell.IconAlign; import com.sencha.gxt.core.client.util.Margins; @@ -323,7 +319,7 @@ public class InputDataSetsPanel extends FramedPanel { @Override public void onSelect(SelectEvent event) { - downloadFile(); + downloadItem(); } }); @@ -429,60 +425,13 @@ public class InputDataSetsPanel extends FramedPanel { } } - private void downloadFile() { + private void downloadItem() { if (selectedItem != null) { - if (selectedItem.isFolder()) { - StringBuilder actionUrl = new StringBuilder(); - actionUrl.append(GWT.getModuleBaseURL()); - actionUrl.append(Constants.DOWNLOAD_FOLDER_SERVLET + "?" - + Constants.DOWNLOAD_FOLDER_SERVLET_ITEM_ID_PARAMETER + "=" + selectedItem.getId() + "&" - + Constants.DOWNLOAD_FOLDER_SERVLET_FOLDER_NAME_PARAMETER + "=" + selectedItem.getName() + "&" - + Constants.CURR_GROUP_ID + "=" + GCubeClientContext.getCurrentContextId()); - - Log.debug("Retrieved link: " + actionUrl); - 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()); - - Window.open(URL.encode(url.toString()), "_blank", ""); - - /* - * 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(), ""); } - * - * }); - */ - } + DownloadWidget downloadWidget = new DownloadWidget(); + downloadWidget.download(selectedItem.getId()); } else { - UtilsGXT3.info("Attention", "Select a file!"); + UtilsGXT3.info("Attention", "Select a element!"); } - } } 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 4b3243f..1ec65f5 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 @@ -6,7 +6,6 @@ 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; import org.gcube.portlets.user.dataminermanager.client.events.DataMinerWorkAreaEvent; @@ -16,7 +15,7 @@ import org.gcube.portlets.user.dataminermanager.client.events.SyncRefreshUploadD import org.gcube.portlets.user.dataminermanager.client.events.UIStateEvent; 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.client.workspace.DownloadWidget; 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; @@ -27,11 +26,8 @@ import org.gcube.portlets.widgets.wsexplorer.shared.FilterCriteria; import org.gcube.portlets.widgets.wsexplorer.shared.Item; 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.sencha.gxt.cell.core.client.ButtonCell.ButtonScale; import com.sencha.gxt.cell.core.client.ButtonCell.IconAlign; import com.sencha.gxt.core.client.util.Margins; @@ -323,7 +319,7 @@ public class OutputDataSetsPanel extends FramedPanel { @Override public void onSelect(SelectEvent event) { - downloadFile(); + downloadItem(); } }); @@ -429,62 +425,13 @@ public class OutputDataSetsPanel extends FramedPanel { } } - private void downloadFile() { + private void downloadItem() { if (selectedItem != null) { - if (selectedItem.isFolder()) { - StringBuilder actionUrl = new StringBuilder(); - actionUrl.append(GWT.getModuleBaseURL()); - actionUrl.append(Constants.DOWNLOAD_FOLDER_SERVLET + "?" - + Constants.DOWNLOAD_FOLDER_SERVLET_ITEM_ID_PARAMETER + "=" + selectedItem.getId() + "&" - + Constants.DOWNLOAD_FOLDER_SERVLET_FOLDER_NAME_PARAMETER + "=" + selectedItem.getName() + "&" - + Constants.CURR_GROUP_ID + "=" + GCubeClientContext.getCurrentContextId()); - - Log.debug("Retrieved link: " + actionUrl); - 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()); - - Window.open(URL.encode(url.toString()), "_blank", ""); - - /* - * 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(), ""); } - * - * }); - */ - } + DownloadWidget downloadWidget = new DownloadWidget(); + downloadWidget.download(selectedItem.getId()); } else { - UtilsGXT3.info("Attention", "Select a file!"); + UtilsGXT3.info("Attention", "Select a element!"); } - } } diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/parametersfield/FileFld.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/parametersfield/FileFld.java index 4fd7f01..d105295 100644 --- a/src/main/java/org/gcube/portlets/user/dataminermanager/client/parametersfield/FileFld.java +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/parametersfield/FileFld.java @@ -7,10 +7,9 @@ import org.gcube.data.analysis.dataminermanagercl.shared.parameters.FileParamete import org.gcube.data.analysis.dataminermanagercl.shared.parameters.Parameter; import org.gcube.data.analysis.dataminermanagercl.shared.workspace.ItemDescription; import org.gcube.portlets.user.dataminermanager.client.DataMinerManager; -import org.gcube.portlets.user.dataminermanager.client.common.EventBusProvider; -import org.gcube.portlets.user.dataminermanager.client.events.SessionExpiredEvent; import org.gcube.portlets.user.dataminermanager.client.rpc.DataMinerPortletServiceAsync; import org.gcube.portlets.user.dataminermanager.client.util.UtilsGXT3; +import org.gcube.portlets.user.dataminermanager.client.workspace.DownloadWidget; import org.gcube.portlets.user.dataminermanager.shared.exception.SessionExpiredServiceException; import org.gcube.portlets.widgets.netcdfbasicwidgets.client.event.SelectVariableEvent; import org.gcube.portlets.widgets.netcdfbasicwidgets.client.event.SelectVariableEvent.SelectVariableEventHandler; @@ -22,7 +21,6 @@ import org.gcube.portlets.widgets.wsexplorer.shared.ItemType; import com.allen_sauer.gwt.log.client.Log; import com.google.gwt.core.shared.GWT; -import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Widget; import com.sencha.gxt.core.client.dom.XDOM; @@ -238,32 +236,12 @@ public class FileFld extends AbstractFld { private void downloadFile() { if (selectedFileItem != null) { - DataMinerPortletServiceAsync.INSTANCE.getPublicLink(selectedFileItem, new AsyncCallback() { - - @Override - public void onFailure(Throwable caught) { - if (caught instanceof SessionExpiredServiceException) { - EventBusProvider.INSTANCE.fireEvent(new SessionExpiredEvent()); - } else { - Log.error("Error downloading file: " + caught.getLocalizedMessage()); - UtilsGXT3.alert("Error", caught.getLocalizedMessage()); - } - caught.printStackTrace(); - - } - - @Override - public void onSuccess(String link) { - Log.debug("Retrieved link: " + link); - Window.open(link, selectedFileItem.getName(), ""); - } - - }); - + DownloadWidget downloadWidget = new DownloadWidget(); + downloadWidget.download(selectedFileItem.getId()); } else { UtilsGXT3.info("Attention", "Select a file!"); } - + } private void showNetCDFFile() { diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/parametersfield/TabItem.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/parametersfield/TabItem.java index 4973df8..fce0e92 100644 --- a/src/main/java/org/gcube/portlets/user/dataminermanager/client/parametersfield/TabItem.java +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/parametersfield/TabItem.java @@ -4,10 +4,9 @@ import org.gcube.data.analysis.dataminermanagercl.shared.data.TableItemSimple; import org.gcube.data.analysis.dataminermanagercl.shared.parameters.TabularParameter; import org.gcube.data.analysis.dataminermanagercl.shared.workspace.ItemDescription; import org.gcube.portlets.user.dataminermanager.client.DataMinerManager; -import org.gcube.portlets.user.dataminermanager.client.common.EventBusProvider; -import org.gcube.portlets.user.dataminermanager.client.events.SessionExpiredEvent; import org.gcube.portlets.user.dataminermanager.client.rpc.DataMinerPortletServiceAsync; import org.gcube.portlets.user.dataminermanager.client.util.UtilsGXT3; +import org.gcube.portlets.user.dataminermanager.client.workspace.DownloadWidget; import org.gcube.portlets.user.dataminermanager.shared.exception.SessionExpiredServiceException; import org.gcube.portlets.widgets.wsexplorer.client.notification.WorkspaceExplorerSelectNotification.WorskpaceExplorerSelectNotificationListener; import org.gcube.portlets.widgets.wsexplorer.client.select.WorkspaceExplorerSelectDialog; @@ -15,7 +14,6 @@ import org.gcube.portlets.widgets.wsexplorer.shared.Item; import org.gcube.portlets.widgets.wsexplorer.shared.ItemType; import com.allen_sauer.gwt.log.client.Log; -import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; import com.sencha.gxt.core.client.dom.XDOM; import com.sencha.gxt.core.client.util.Margins; @@ -215,32 +213,11 @@ public class TabItem extends HBoxLayoutContainer { private void downloadFile() { if (itemDescriptionSelected != null) { - DataMinerPortletServiceAsync.INSTANCE.getPublicLink(itemDescriptionSelected, new AsyncCallback() { - - @Override - public void onFailure(Throwable caught) { - if (caught instanceof SessionExpiredServiceException) { - EventBusProvider.INSTANCE.fireEvent(new SessionExpiredEvent()); - } else { - Log.error("Error downloading table: " + caught.getLocalizedMessage()); - UtilsGXT3.alert("Error", caught.getLocalizedMessage()); - } - caught.printStackTrace(); - - } - - @Override - public void onSuccess(String link) { - Log.debug("Retrieved link: " + link); - Window.open(link, itemDescriptionSelected.getName(), ""); - } - - }); - + DownloadWidget downloadWidget = new DownloadWidget(); + downloadWidget.download(itemDescriptionSelected.getId()); } else { - UtilsGXT3.info("Attention", "Select a Table!"); + UtilsGXT3.info("Attention", "Select a table!"); } - } /** diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/parametersfield/TabularFld.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/parametersfield/TabularFld.java index 63cc9e1..1c7944a 100644 --- a/src/main/java/org/gcube/portlets/user/dataminermanager/client/parametersfield/TabularFld.java +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/parametersfield/TabularFld.java @@ -10,13 +10,12 @@ import org.gcube.data.analysis.dataminermanagercl.shared.parameters.Parameter; import org.gcube.data.analysis.dataminermanagercl.shared.parameters.TabularParameter; import org.gcube.data.analysis.dataminermanagercl.shared.workspace.ItemDescription; import org.gcube.portlets.user.dataminermanager.client.DataMinerManager; -import org.gcube.portlets.user.dataminermanager.client.common.EventBusProvider; -import org.gcube.portlets.user.dataminermanager.client.events.SessionExpiredEvent; import org.gcube.portlets.user.dataminermanager.client.events.TabularFldChangeEvent; import org.gcube.portlets.user.dataminermanager.client.events.TabularFldChangeEvent.HasTabularFldChangeEventHandler; import org.gcube.portlets.user.dataminermanager.client.events.TabularFldChangeEvent.TabularFldChangeEventHandler; import org.gcube.portlets.user.dataminermanager.client.rpc.DataMinerPortletServiceAsync; import org.gcube.portlets.user.dataminermanager.client.util.UtilsGXT3; +import org.gcube.portlets.user.dataminermanager.client.workspace.DownloadWidget; import org.gcube.portlets.user.dataminermanager.shared.exception.SessionExpiredServiceException; import org.gcube.portlets.widgets.wsexplorer.client.notification.WorkspaceExplorerSelectNotification.WorskpaceExplorerSelectNotificationListener; import org.gcube.portlets.widgets.wsexplorer.client.select.WorkspaceExplorerSelectDialog; @@ -26,7 +25,6 @@ import org.gcube.portlets.widgets.wsexplorer.shared.ItemType; import com.allen_sauer.gwt.log.client.Log; import com.google.gwt.event.shared.GwtEvent; import com.google.gwt.event.shared.HandlerRegistration; -import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Widget; import com.sencha.gxt.core.client.dom.XDOM; @@ -265,32 +263,11 @@ public class TabularFld extends AbstractFld implements HasTabularFldChangeEventH private void downloadFile() { if (itemDescriptionSelected != null) { - DataMinerPortletServiceAsync.INSTANCE.getPublicLink(itemDescriptionSelected, new AsyncCallback() { - - @Override - public void onFailure(Throwable caught) { - if (caught instanceof SessionExpiredServiceException) { - EventBusProvider.INSTANCE.fireEvent(new SessionExpiredEvent()); - } else { - Log.error("Error downloading table: " + caught.getLocalizedMessage()); - UtilsGXT3.alert("Error", caught.getLocalizedMessage()); - } - caught.printStackTrace(); - - } - - @Override - public void onSuccess(String link) { - Log.debug("Retrieved link: " + link); - Window.open(link, itemDescriptionSelected.getName(), ""); - } - - }); - + DownloadWidget downloadWidget = new DownloadWidget(); + downloadWidget.download(itemDescriptionSelected.getId()); } else { - UtilsGXT3.info("Attention", "Select a Table!"); + UtilsGXT3.info("Attention", "Select a table!"); } - } /** diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/rpc/DataMinerPortletService.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/rpc/DataMinerPortletService.java index b4602ef..9049883 100644 --- a/src/main/java/org/gcube/portlets/user/dataminermanager/client/rpc/DataMinerPortletService.java +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/rpc/DataMinerPortletService.java @@ -26,36 +26,32 @@ public interface DataMinerPortletService extends RemoteService { public UserInfo hello() throws ServiceException; - public List getOperatorsClassifications(boolean refresh) - throws ServiceException; + public List getOperatorsClassifications(boolean refresh) throws ServiceException; public List getParameters(Operator operator) throws ServiceException; public ComputationId startComputation(Operator op) throws ServiceException; - public ComputationStatus getComputationStatus(ComputationId computationId) - throws ServiceException; + public ComputationStatus getComputationStatus(ComputationId computationId) throws ServiceException; public ComputationId resubmit(ItemDescription itemDescription) throws ServiceException; - - public TableItemSimple retrieveTableInformation(ItemDescription item) - throws ServiceException; + public TableItemSimple retrieveTableInformation(ItemDescription item) throws ServiceException; public DataMinerWorkArea getDataMinerWorkArea() throws ServiceException; - public String getPublicLink(ItemDescription itemDescription) - throws ServiceException; + public String getPublicLink(ItemDescription itemDescription) throws ServiceException; public String cancelComputation(ComputationId computationId) throws ServiceException; - public void deleteItem(ItemDescription itemDescription) - throws ServiceException; - + public void deleteItem(ItemDescription itemDescription) throws ServiceException; + public OutputData getOutputDataByComputationId(ComputationId computationId) throws ServiceException; - + public ComputationData getComputationData(ItemDescription itemDescription) throws ServiceException; public String cancelComputation(ItemDescription itemDescription) throws ServiceException; - + + public ItemDescription getItemDescription(String itemId) throws ServiceException; + } diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/rpc/DataMinerPortletServiceAsync.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/rpc/DataMinerPortletServiceAsync.java index 87520b8..2dce7b8 100644 --- a/src/main/java/org/gcube/portlets/user/dataminermanager/client/rpc/DataMinerPortletServiceAsync.java +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/rpc/DataMinerPortletServiceAsync.java @@ -56,4 +56,6 @@ public interface DataMinerPortletServiceAsync { void cancelComputation(ItemDescription itemDescription, AsyncCallback asyncCallback); + void getItemDescription(String itemId, AsyncCallback asyncCallback); + } diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/workspace/DownloadWidget.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/workspace/DownloadWidget.java new file mode 100644 index 0000000..4eaaf80 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/workspace/DownloadWidget.java @@ -0,0 +1,77 @@ +package org.gcube.portlets.user.dataminermanager.client.workspace; + +import org.gcube.data.analysis.dataminermanagercl.shared.workspace.ItemDescription; +import org.gcube.portal.clientcontext.client.GCubeClientContext; +import org.gcube.portlets.user.dataminermanager.client.common.EventBusProvider; +import org.gcube.portlets.user.dataminermanager.client.events.SessionExpiredEvent; +import org.gcube.portlets.user.dataminermanager.client.rpc.DataMinerPortletServiceAsync; +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 com.allen_sauer.gwt.log.client.Log; +import com.google.gwt.core.client.GWT; +import com.google.gwt.http.client.URL; +import com.google.gwt.user.client.Window; +import com.google.gwt.user.client.rpc.AsyncCallback; + +/** + * + * @author Giancarlo Panichi + * + * + */ +public class DownloadWidget { + + public DownloadWidget() { + + } + + public void download(String itemId) { + DataMinerPortletServiceAsync.INSTANCE.getItemDescription(itemId, new AsyncCallback() { + + @Override + public void onFailure(Throwable caught) { + if (caught instanceof SessionExpiredServiceException) { + EventBusProvider.INSTANCE.fireEvent(new SessionExpiredEvent()); + } else { + Log.error("Error open item: " + caught.getLocalizedMessage(), caught); + UtilsGXT3.alert("Error", caught.getLocalizedMessage()); + } + caught.printStackTrace(); + + } + + @Override + public void onSuccess(ItemDescription itemDownloadInfo) { + Log.debug("Retrieved item download info: " + itemDownloadInfo); + requestDownload(itemDownloadInfo); + } + + }); + } + + private void requestDownload(ItemDescription itemDescription) { + switch (itemDescription.getType()) { + case "AbstractFileItem": + case "FolderItem": + executeDownload(itemDescription); + break; + default: + UtilsGXT3.info("Attention", "This item does not support download operation!"); + break; + } + + } + + private void executeDownload(ItemDescription itemDescription) { + StringBuilder url = new StringBuilder(); + url.append(GWT.getModuleBaseURL()); + url.append(Constants.DOWNLOAD_SERVLET + "/" + itemDescription.getName() + "?itemId=" + itemDescription.getId() + + "&" + Constants.CURR_GROUP_ID + "=" + GCubeClientContext.getCurrentContextId()); + + Window.open(URL.encode(url.toString()), "_blank", ""); + + } + +} diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/server/DataMinerManagerServiceImpl.java b/src/main/java/org/gcube/portlets/user/dataminermanager/server/DataMinerManagerServiceImpl.java index 378c556..9c65181 100644 --- a/src/main/java/org/gcube/portlets/user/dataminermanager/server/DataMinerManagerServiceImpl.java +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/server/DataMinerManagerServiceImpl.java @@ -24,9 +24,7 @@ import org.gcube.data.analysis.dataminermanagercl.shared.process.OperatorsClassi import org.gcube.portlets.user.dataminermanager.shared.session.UserInfo; import org.gcube.data.analysis.dataminermanagercl.shared.workspace.DataMinerWorkArea; import org.gcube.data.analysis.dataminermanagercl.shared.workspace.ItemDescription; -//import org.gcube.portlets.user.tdw.server.datasource.DataSourceFactoryRegistry; -//import org.gcube.portlets.widgets.file_dw_import_wizard.server.file.TargetRegistry; -//import org.gcube.portlets.widgets.wsexplorer.shared.Item; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -139,7 +137,7 @@ public class DataMinerManagerServiceImpl extends RemoteServiceServlet implements @Override public ComputationId resubmit(ItemDescription itemDescription) throws ServiceException { try { - StorageUtil storageUtil=new StorageUtil(); + StorageUtil storageUtil = new StorageUtil(); HttpServletRequest httpRequest = this.getThreadLocalRequest(); ServiceCredentials serviceCredentials = SessionUtil.getServiceCredentials(httpRequest); Map properties = storageUtil.getProperties(serviceCredentials.getUserName(), @@ -183,7 +181,7 @@ public class DataMinerManagerServiceImpl extends RemoteServiceServlet implements HttpServletRequest httpRequest = this.getThreadLocalRequest(); ServiceCredentials serviceCredentials = SessionUtil.getServiceCredentials(httpRequest); logger.debug("DeleteItem(): " + itemDescription); - StorageUtil storageUtil=new StorageUtil(); + StorageUtil storageUtil = new StorageUtil(); storageUtil.deleteItem(serviceCredentials.getUserName(), itemDescription.getId()); return; @@ -238,7 +236,7 @@ public class DataMinerManagerServiceImpl extends RemoteServiceServlet implements HttpServletRequest httpRequest = this.getThreadLocalRequest(); ServiceCredentials serviceCredentials = SessionUtil.getServiceCredentials(httpRequest); logger.debug("GetPublicLink(): " + itemDescription); - StorageUtil storageUtil=new StorageUtil(); + StorageUtil storageUtil = new StorageUtil(); String link = storageUtil.getPublicLink(serviceCredentials.getUserName(), itemDescription.getId()); return link; @@ -296,7 +294,7 @@ public class DataMinerManagerServiceImpl extends RemoteServiceServlet implements HttpServletRequest httpRequest = this.getThreadLocalRequest(); ServiceCredentials serviceCredentials = SessionUtil.getServiceCredentials(httpRequest); logger.debug("OutputDataByComputationItemt(): " + itemDescription); - StorageUtil storageUtil=new StorageUtil(); + StorageUtil storageUtil = new StorageUtil(); Map properties = storageUtil.getProperties(serviceCredentials.getUserName(), itemDescription.getId()); @@ -346,4 +344,23 @@ public class DataMinerManagerServiceImpl extends RemoteServiceServlet implements } } + @Override + public ItemDescription getItemDescription(String itemId) throws ServiceException { + try { + HttpServletRequest httpRequest = this.getThreadLocalRequest(); + ServiceCredentials serviceCredentials = SessionUtil.getServiceCredentials(httpRequest); + logger.debug("getItemDescription(): [itemId=" + itemId + "]"); + StorageUtil storageUtil = new StorageUtil(); + ItemDescription itemDownloadInfo = storageUtil.getItemDescription(serviceCredentials.getUserName(), itemId); + logger.debug("ItemDescription info: " + itemDownloadInfo); + return itemDownloadInfo; + } catch (ServiceException e) { + logger.error(e.getLocalizedMessage(), e); + throw e; + } catch (Throwable e) { + logger.error("Error retrieving item description: " + e.getLocalizedMessage(), e); + throw new ServiceException("Error retrieving item description: " + e.getLocalizedMessage(), e); + } + } + } 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 deleted file mode 100644 index 3d11343..0000000 --- a/src/main/java/org/gcube/portlets/user/dataminermanager/server/DownloadFolderServlet.java +++ /dev/null @@ -1,146 +0,0 @@ -package org.gcube.portlets.user.dataminermanager.server; - -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.StandardCopyOption; - -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.io.IOUtils; -import org.gcube.portlets.user.dataminermanager.server.storage.StorageUtil; -import org.gcube.data.analysis.dataminermanagercl.server.util.ServiceCredentials; -import org.gcube.portlets.user.dataminermanager.shared.Constants; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * - * @author Giancarlo Panichi - * - * - * Download Folder Servlet - * - */ -public class DownloadFolderServlet extends HttpServlet { - private static final long serialVersionUID = -1838255772767180518L; - private static Logger logger = LoggerFactory - .getLogger(DownloadFolderServlet.class); - - /** - * @see HttpServlet#HttpServlet() - */ - public DownloadFolderServlet() { - super(); - // TODO Auto-generated constructor stub - } - - /** - * @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 request, - HttpServletResponse response) throws ServletException, IOException { - try { - logger.debug("DownloadFolderServlet()"); - - HttpSession session = request.getSession(); - - if (session == null) { - logger.error("Error getting the session, no session valid found: " - + session); - response.sendError( - HttpServletResponse.SC_INTERNAL_SERVER_ERROR, - "ERROR-Error getting the user session, no session found " - + session); - return; - } - logger.debug("DownloadFolderServlet session id: " + session.getId()); - - ServiceCredentials serviceCredentials; - - String scopeGroupId = request.getHeader(Constants.CURR_GROUP_ID); - if (scopeGroupId == null || scopeGroupId.isEmpty()) { - scopeGroupId = request.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); - } - } - - try { - serviceCredentials = SessionUtil.getServiceCredentials(request, - scopeGroupId); - - } catch (Exception e) { - logger.error( - "Error retrieving credentials:" - + e.getLocalizedMessage(), e); - throw new ServletException(e.getLocalizedMessage()); - } - - String itemId = request - .getParameter(Constants.DOWNLOAD_FOLDER_SERVLET_ITEM_ID_PARAMETER); - String folderName = request - .getParameter(Constants.DOWNLOAD_FOLDER_SERVLET_FOLDER_NAME_PARAMETER); - logger.debug("Request: [itemId=" + itemId + ", folderName=" - + folderName + "]"); - StorageUtil storageUtil=new StorageUtil(); - InputStream is = storageUtil.zipFolder( - serviceCredentials.getUserName(), itemId); - Path tempFile = Files.createTempFile("dataMinerDownload", ".zip"); - Files.copy(is, tempFile, StandardCopyOption.REPLACE_EXISTING); - File tmpZip= tempFile.toFile(); - - response.setHeader("Content-Disposition", "attachment; filename=\"" - + folderName + ".zip\""); - response.setContentType("application/zip"); - response.setHeader("Content-Length", - String.valueOf(tmpZip.length())); - - - - OutputStream out = response.getOutputStream(); - - FileInputStream fileTmpZip = new FileInputStream(tmpZip); - IOUtils.copy(fileTmpZip, response.getOutputStream()); - out.flush(); - out.close(); - fileTmpZip.close(); - Files.delete(tempFile); - return; - - } catch (Throwable e) { - logger.error("Error in DownloadFolderServlet: " - + e.getLocalizedMessage(),e); - throw new ServletException("Error:" + e.getLocalizedMessage(), e); - - } - } - -} diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/server/DownloadFileServlet.java b/src/main/java/org/gcube/portlets/user/dataminermanager/server/DownloadServlet.java similarity index 57% rename from src/main/java/org/gcube/portlets/user/dataminermanager/server/DownloadFileServlet.java rename to src/main/java/org/gcube/portlets/user/dataminermanager/server/DownloadServlet.java index 4e25282..ca8458d 100644 --- a/src/main/java/org/gcube/portlets/user/dataminermanager/server/DownloadFileServlet.java +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/server/DownloadServlet.java @@ -14,8 +14,9 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; +import org.gcube.common.storagehub.model.items.FolderItem; 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.ItemDownload; 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; @@ -29,16 +30,16 @@ import org.slf4j.LoggerFactory; * * */ -public class DownloadFileServlet extends HttpServlet { +public class DownloadServlet extends HttpServlet { private static final long serialVersionUID = 5389118370656932343L; - private static Logger logger = LoggerFactory.getLogger(DownloadFileServlet.class); + private static Logger logger = LoggerFactory.getLogger(DownloadServlet.class); - public DownloadFileServlet() { + public DownloadServlet() { super(); } - + /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response) @@ -57,11 +58,10 @@ public class DownloadFileServlet extends HttpServlet { createResponse(request, response); } - private void createResponse(HttpServletRequest req, HttpServletResponse resp) - throws ServletException, IOException { + private void createResponse(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { try { - logger.debug("DownloadFileServlet()"); + logger.debug("DownloadServlet()"); HttpSession session = req.getSession(); @@ -71,7 +71,7 @@ public class DownloadFileServlet extends HttpServlet { "ERROR-Error getting the user session, no session found" + session); return; } - logger.debug("DownloadFileServlet session id: " + session.getId()); + logger.debug("DownloadServlet() session id: " + session.getId()); String scopeGroupId = req.getHeader(Constants.CURR_GROUP_ID); if (scopeGroupId == null || scopeGroupId.isEmpty()) { scopeGroupId = req.getParameter(Constants.CURR_GROUP_ID); @@ -82,26 +82,55 @@ public class DownloadFileServlet extends HttpServlet { "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 + "]"); + logger.info("DownloadServlet(): [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())); + ItemDownload itemDownload = filesStorage.getItemDownload(serviceCredentials.getUserName(), itemId); + if (itemDownload == null) { + logger.error("This type of item does not support download operation"); + throw new ServletException("This type of item does not support download operation"); + + } else { + if (itemDownload.getInputStream() == null) { + logger.error("This type of item does not support download operation"); + throw new ServletException("This type of item does not support download operation"); + } else { + String fileName; + if (itemDownload.getItemDescription() == null) { + fileName = "filename"; + } else { + if (itemDownload.getItemDescription().getName() == null + || itemDownload.getItemDescription().getName().isEmpty()) { + if (itemDownload.getItemDescription().getType() != null && itemDownload.getItemDescription() + .getType().compareTo(FolderItem.class.getSimpleName()) == 0) { + fileName = "folder.zip"; + } else { + fileName = itemDownload.getItemDescription().getName(); + } + } else { + if (itemDownload.getItemDescription().getType() != null && itemDownload.getItemDescription() + .getType().compareTo(FolderItem.class.getSimpleName()) == 0) { + fileName = itemDownload.getItemDescription().getName() + ".zip"; + } else { + fileName = itemDownload.getItemDescription().getName(); + } + } + } + + resp.setHeader("Content-Disposition:", "attachment;filename=\"" + fileName + "\""); + resp.setHeader("Content-Type", "application/force-download"); + stream(itemDownload.getInputStream(), resp.getOutputStream()); + } + } - stream(inputStream, resp.getOutputStream()); } catch (ServiceException e) { - logger.error("DownloadFileServlet():"+e.getLocalizedMessage(), e); + logger.error("DownloadServlet():" + 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); + logger.error("DownloadServlet(): " + e.getLocalizedMessage(), e); + throw new ServletException("Download item error: " + e.getLocalizedMessage(), e); } } diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/server/storage/ItemDownload.java b/src/main/java/org/gcube/portlets/user/dataminermanager/server/storage/ItemDownload.java new file mode 100644 index 0000000..6899c07 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/server/storage/ItemDownload.java @@ -0,0 +1,44 @@ +package org.gcube.portlets.user.dataminermanager.server.storage; + +import java.io.InputStream; + +import org.gcube.data.analysis.dataminermanagercl.shared.workspace.ItemDescription; + +/** + * + * @author Giancarlo Panichi + * + * + */ +public class ItemDownload { + private ItemDescription itemDescription; + private InputStream inputStream; + + public ItemDownload(ItemDescription itemDescription, InputStream inputStream) { + super(); + this.itemDescription = itemDescription; + this.inputStream = inputStream; + } + + public ItemDescription getItemDescription() { + return itemDescription; + } + + public void setItemDescription(ItemDescription itemDescription) { + this.itemDescription = itemDescription; + } + + public InputStream getInputStream() { + return inputStream; + } + + public void setInputStream(InputStream inputStream) { + this.inputStream = inputStream; + } + + @Override + public String toString() { + return "ItemDownload [itemDescription=" + itemDescription + ", inputStream=" + inputStream + "]"; + } + +} 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 b9805ce..2c461b0 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 @@ -8,6 +8,7 @@ import java.util.Map; import org.gcube.common.storagehub.client.StreamDescriptor; import org.gcube.common.storagehub.client.dsl.FileContainer; +import org.gcube.common.storagehub.client.dsl.FolderContainer; import org.gcube.common.storagehub.client.dsl.ItemContainer; import org.gcube.common.storagehub.client.dsl.ListResolver; import org.gcube.common.storagehub.client.dsl.OpenResolver; @@ -15,7 +16,9 @@ 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.GCubeItem; import org.gcube.common.storagehub.model.items.Item; +import org.gcube.common.storagehub.model.items.TrashItem; import org.gcube.data.analysis.dataminermanagercl.shared.workspace.ItemDescription; import org.gcube.portlets.user.dataminermanager.shared.exception.ServiceException; import org.slf4j.Logger; @@ -84,7 +87,42 @@ public class StorageUtil { throw new ServiceException(e.getLocalizedMessage(), e); } } - + + public ItemDownload getItemDownload(String user, String itemId) throws ServiceException { + try { + logger.debug("getInputStreamForItemOnWorkspace: [user=" + user + ", itemId=" + itemId + "]"); + StorageHubClient shc = new StorageHubClient(); + OpenResolver openResolver = shc.open(itemId); + ItemContainer itemContainer = openResolver.asItem(); + Item item = itemContainer.get(); + + StreamDescriptor streamDescriptor = null; + if (item instanceof AbstractFileItem) { + FileContainer fileContainer = openResolver.asFile(); + streamDescriptor = fileContainer.download(); + } else { + if (item instanceof FolderItem) { + FolderContainer folderContainer = openResolver.asFolder(); + streamDescriptor = folderContainer.download(); + } else { + } + } + + if (streamDescriptor == null) { + logger.error("This type of item does not support download: " + itemId); + return null; + } else { + ItemDescription itemDescription = new ItemDescription(item.getId(), item.getName(), item.getOwner(), + item.getPath(), getItemType(item)); + ItemDownload itemDownload = new ItemDownload(itemDescription, streamDescriptor.getStream()); + return itemDownload; + } + } catch (Throwable e) { + logger.error("Error retrieving InputStream for item: " + e.getLocalizedMessage(), e); + throw new ServiceException(e.getLocalizedMessage(), e); + } + } + /** * * @param user @@ -93,23 +131,18 @@ public class StorageUtil { * Item id * @return Item description * @throws ServiceException - * Exception + * Error */ - public ItemDescription getFileInfoOnWorkspace(String user, String itemId) - throws ServiceException { + public ItemDescription getItemDescription(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(); + ItemContainer itemContainer = openResolver.asItem(); + Item item = itemContainer.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())); + item.getPath(), getItemType(item)); return itemDescription; - } catch (Throwable e) { logger.error("Retrieve file info on workspace: " + e.getLocalizedMessage(), e); throw new ServiceException(e.getLocalizedMessage()); @@ -147,30 +180,26 @@ public class StorageUtil { * folder id * @return input stream * @throws ServiceException - * service exception + * service exception public InputStream zipFolder(String user, + * String folderId) throws ServiceException { try { + * logger.debug("zipFolder: [user=" + user + ", folderId=" + + * folderId + "]"); StorageHubClient shc = new + * StorageHubClient(); OpenResolver openResolver = + * shc.open(folderId); + * + * ItemContainer itemContainer = openResolver.asItem(); + * Item item = itemContainer.get(); if (item instanceof + * FolderItem) { StreamDescriptor streamDescriptor = + * openResolver.asFolder().download(); InputStream is = + * streamDescriptor.getStream(); return is; } else { throw new + * ServiceException("Is not a valid folder!"); } + * + * } catch (Throwable e) { logger.error("Error in zip Folder: " + * + e.getLocalizedMessage(), e); throw new + * ServiceException(e.getLocalizedMessage(), e); } + * + * } */ - public InputStream zipFolder(String user, String folderId) throws ServiceException { - try { - logger.debug("zipFolder: [user=" + user + ", folderId=" + folderId + "]"); - StorageHubClient shc = new StorageHubClient(); - OpenResolver openResolver = shc.open(folderId); - - ItemContainer itemContainer = openResolver.asItem(); - Item item = itemContainer.get(); - if (item instanceof FolderItem) { - StreamDescriptor streamDescriptor = openResolver.asFolder().download(); - InputStream is = streamDescriptor.getStream(); - return is; - } else { - throw new ServiceException("Is not a valid folder!"); - } - - } catch (Throwable e) { - logger.error("Error in zip Folder: " + e.getLocalizedMessage(), e); - throw new ServiceException(e.getLocalizedMessage(), e); - } - - } /** * @@ -182,17 +211,27 @@ public class StorageUtil { * @throws ServiceException * service exception */ - public Item getItemInRootFolderOnWorkspace(String user, String itemName) throws ServiceException { + public ItemDescription getItemInRootFolderOnWorkspace(String user, String itemName) throws ServiceException { try { logger.debug("GetItemInRootFolder: [user=" + user + ", itemName=" + itemName + "]"); StorageHubClient shc = new StorageHubClient(); ListResolver listResolver = shc.getWSRoot().findByName(itemName); List items = listResolver.getItems(); - if (items != null && !items.isEmpty()) { - return items.get(0); - } else { + if (items == null || items.isEmpty()) { + logger.debug("No item found"); return null; + } else { + Item item = items.get(0); + logger.debug("Item: " + item); + if (item != null) { + logger.debug("Item Id=" + item.getId()); + ItemDescription itemDescription = new ItemDescription(item.getId(), item.getName(), item.getOwner(), + item.getPath(), getItemType(item)); + return itemDescription; + } else { + return null; + } } } catch (Throwable e) { @@ -213,17 +252,28 @@ public class StorageUtil { * @throws ServiceException * service exception */ - public Item getItemInFolderOnWorkspace(String user, String folderId, String itemName) throws ServiceException { + public ItemDescription getItemInFolderOnWorkspace(String user, String folderId, String itemName) + throws ServiceException { try { logger.debug("GetItemInFolder: [user=" + user + ", folderId=" + folderId + ", itemName=" + itemName + "]"); StorageHubClient shc = new StorageHubClient(); ListResolver listResolver = shc.open(folderId).asFolder().findByName(itemName); List items = listResolver.getItems(); - if (items != null && !items.isEmpty()) { - return items.get(0); - } else { + if (items == null || items.isEmpty()) { + logger.debug("No item found"); return null; + } else { + Item item = items.get(0); + logger.debug("Item: " + item); + if (item != null) { + logger.debug("Item Id=" + item.getId()); + ItemDescription itemDescription = new ItemDescription(item.getId(), item.getName(), item.getOwner(), + item.getPath(), getItemType(item)); + return itemDescription; + } else { + return null; + } } } catch (Throwable e) { @@ -243,7 +293,7 @@ public class StorageUtil { */ public void deleteItem(String user, String itemId) throws ServiceException { try { - logger.debug("Delete Item: [User=" + user + ", ItemId=" + itemId+"]"); + logger.debug("Delete Item: [User=" + user + ", ItemId=" + itemId + "]"); StorageHubClient shc = new StorageHubClient(); OpenResolver openResolver = shc.open(itemId); @@ -259,4 +309,24 @@ public class StorageUtil { } + private String getItemType(Item item) { + if (item instanceof AbstractFileItem) { + return AbstractFileItem.class.getSimpleName(); + } else { + if (item instanceof FolderItem) { + return FolderItem.class.getSimpleName(); + } else { + if (item instanceof GCubeItem) { + return GCubeItem.class.getSimpleName(); + } else { + if (item instanceof TrashItem) { + return TrashItem.class.getSimpleName(); + } else { + return null; + } + } + } + } + } + } diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/server/util/DataMinerWorkAreaManager.java b/src/main/java/org/gcube/portlets/user/dataminermanager/server/util/DataMinerWorkAreaManager.java index 3ee5f5a..caba73c 100644 --- a/src/main/java/org/gcube/portlets/user/dataminermanager/server/util/DataMinerWorkAreaManager.java +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/server/util/DataMinerWorkAreaManager.java @@ -1,6 +1,5 @@ package org.gcube.portlets.user.dataminermanager.server.util; -import org.gcube.common.storagehub.model.items.Item; import org.gcube.data.analysis.dataminermanagercl.server.util.ServiceCredentials; import org.gcube.data.analysis.dataminermanagercl.shared.workspace.Computations; import org.gcube.data.analysis.dataminermanagercl.shared.workspace.DataMinerWorkArea; @@ -37,20 +36,13 @@ public class DataMinerWorkAreaManager { StorageUtil storageUtil = new StorageUtil(); try { - Item wiDataMinerFolder = storageUtil.getItemInRootFolderOnWorkspace(serviceCredentials.getUserName(), + ItemDescription dataMinerWorkAreaFolder = storageUtil.getItemInRootFolderOnWorkspace(serviceCredentials.getUserName(), DATA_MINER_FOLDER); - - if (wiDataMinerFolder == null) { + if (dataMinerWorkAreaFolder == null) { dataMinerWorkArea = new DataMinerWorkArea(null); return dataMinerWorkArea; } else { - ItemDescription dataMinerWorkAreaFolder = null; - - dataMinerWorkAreaFolder = new ItemDescription(wiDataMinerFolder.getId(), wiDataMinerFolder.getName(), - wiDataMinerFolder.getOwner(), wiDataMinerFolder.getPath(), - null); dataMinerWorkArea = new DataMinerWorkArea(dataMinerWorkAreaFolder); - } } catch (Throwable e) { @@ -62,14 +54,8 @@ public class DataMinerWorkAreaManager { InputDataSets inputDataSets = null; try { - Item wiImportedDataFolder = storageUtil.getItemInFolderOnWorkspace(serviceCredentials.getUserName(), + ItemDescription importedDataFolder = storageUtil.getItemInFolderOnWorkspace(serviceCredentials.getUserName(), dataMinerWorkArea.getDataMinerWorkAreaFolder().getId(), IMPORTED_DATA_FOLDER); - ItemDescription importedDataFolder = null; - - importedDataFolder = new ItemDescription(wiImportedDataFolder.getId(), wiImportedDataFolder.getName(), - wiImportedDataFolder.getOwner(), wiImportedDataFolder.getPath(), - null); - inputDataSets = new InputDataSets(importedDataFolder); } catch (Throwable e) { @@ -79,14 +65,9 @@ public class DataMinerWorkAreaManager { OutputDataSets outputDataSets = null; try { - Item wiComputedDataFolder = storageUtil.getItemInFolderOnWorkspace(serviceCredentials.getUserName(), + ItemDescription computedDataFolder = storageUtil.getItemInFolderOnWorkspace(serviceCredentials.getUserName(), dataMinerWorkArea.getDataMinerWorkAreaFolder().getId(), COMPUTED_DATA_FOLDER); - ItemDescription computedDataFolder = null; - - computedDataFolder = new ItemDescription(wiComputedDataFolder.getId(), wiComputedDataFolder.getName(), - wiComputedDataFolder.getOwner(), wiComputedDataFolder.getPath(), - null); - outputDataSets = new OutputDataSets(computedDataFolder); + outputDataSets = new OutputDataSets(computedDataFolder); } catch (Throwable e) { logger.debug("ComputedData Folder is set to null"); @@ -95,13 +76,8 @@ public class DataMinerWorkAreaManager { Computations computations = null; try { - Item wiComputationsDataFolder = storageUtil.getItemInFolderOnWorkspace(serviceCredentials.getUserName(), + ItemDescription computationsDataFolder = storageUtil.getItemInFolderOnWorkspace(serviceCredentials.getUserName(), dataMinerWorkArea.getDataMinerWorkAreaFolder().getId(), COMPUTATIONS_FOLDER); - ItemDescription computationsDataFolder = null; - - computationsDataFolder = new ItemDescription(wiComputationsDataFolder.getId(), - wiComputationsDataFolder.getName(), wiComputationsDataFolder.getOwner(), - wiComputationsDataFolder.getPath(), null); computations = new Computations(computationsDataFolder); } catch (Throwable e) { 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 0254a00..87e6283 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 @@ -44,10 +44,5 @@ public class Constants { 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"; - + public static final String DOWNLOAD_SERVLET = "DownloadServlet"; } diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml index 04245ee..8335160 100644 --- a/src/main/webapp/WEB-INF/web.xml +++ b/src/main/webapp/WEB-INF/web.xml @@ -15,12 +15,8 @@ - DownloadFileServlet - org.gcube.portlets.user.dataminermanager.server.DownloadFileServlet - - - DownloadFolderServlet - org.gcube.portlets.user.dataminermanager.server.DownloadFolderServlet + DownloadServlet + org.gcube.portlets.user.dataminermanager.server.DownloadServlet @@ -52,14 +48,11 @@ - DownloadFileServlet - /dataminermanager/DownloadFileServlet/* - - - DownloadFolderServlet - /dataminermanager/DownloadFolderServlet + DownloadServlet + /dataminermanager/DownloadServlet/* + workspaceExplorer /dataminermanager/WorkspaceExplorerService