Compare commits

...

10 Commits

22 changed files with 533 additions and 254 deletions

View File

@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<classpath> <classpath>
<classpathentry kind="src" output="target/workspace-explorer-app-1.3.0-SNAPSHOT/WEB-INF/classes" path="src/main/java"> <classpathentry kind="src" output="target/workspace-explorer-app-1.4.1-SNAPSHOT/WEB-INF/classes" path="src/main/java">
<attributes> <attributes>
<attribute name="optional" value="true"/> <attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/> <attribute name="maven.pomderived" value="true"/>
</attributes> </attributes>
</classpathentry> </classpathentry>
<classpathentry excluding="**" kind="src" output="target/workspace-explorer-app-1.3.0-SNAPSHOT/WEB-INF/classes" path="src/main/resources"> <classpathentry excluding="**" kind="src" output="target/workspace-explorer-app-1.4.1-SNAPSHOT/WEB-INF/classes" path="src/main/resources">
<attributes> <attributes>
<attribute name="maven.pomderived" value="true"/> <attribute name="maven.pomderived" value="true"/>
</attributes> </attributes>
@ -35,5 +35,5 @@
<attribute name="maven.pomderived" value="true"/> <attribute name="maven.pomderived" value="true"/>
</attributes> </attributes>
</classpathentry> </classpathentry>
<classpathentry kind="output" path="target/workspace-explorer-app-1.3.0-SNAPSHOT/WEB-INF/classes"/> <classpathentry kind="output" path="target/workspace-explorer-app-1.4.1-SNAPSHOT/WEB-INF/classes"/>
</classpath> </classpath>

View File

@ -1,6 +1,6 @@
eclipse.preferences.version=1 eclipse.preferences.version=1
jarsExcludedFromWebInfLib= jarsExcludedFromWebInfLib=
lastWarOutDir=/home/francesco/git/workspace-explorer-app/target/workspace-explorer-app-1.3.0-SNAPSHOT lastWarOutDir=/home/francescomangiacrapa/git/workspace-explorer-app/target/workspace-explorer-app-1.4.1-SNAPSHOT
launchConfigExternalUrlPrefix= launchConfigExternalUrlPrefix=
warSrcDir=src/main/webapp warSrcDir=src/main/webapp
warSrcDirIsOutput=false warSrcDirIsOutput=false

View File

@ -1,10 +1,67 @@
<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0"> <?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0">
<wb-module deploy-name="workspace-explorer-app-1.3.0-SNAPSHOT">
<wb-module deploy-name="workspace-explorer-app-1.4.1-SNAPSHOT">
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/> <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/> <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/>
<wb-resource deploy-path="/" source-path="/target/m2e-wtp/web-resources"/> <wb-resource deploy-path="/" source-path="/target/m2e-wtp/web-resources"/>
<wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/> <wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/>
<dependent-module archiveName="storagehub-client-wrapper-1.1.1-SNAPSHOT.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/storagehub-client-wrapper/storagehub-client-wrapper">
<dependency-type>uses</dependency-type>
</dependent-module>
<property name="context-root" value="workspace-explorer-app"/> <property name="context-root" value="workspace-explorer-app"/>
<property name="java-output-path" value="/workspace-explorer-app/target/workspace-explorer-app-0.0.1-SNAPSHOT/WEB-INF/classes"/> <property name="java-output-path" value="/workspace-explorer-app/target/workspace-explorer-app-0.0.1-SNAPSHOT/WEB-INF/classes"/>
</wb-module> </wb-module>
</project-modules> </project-modules>

60
CHANGELOG.md Normal file
View File

@ -0,0 +1,60 @@
# Changelog
All notable changes to this project will be documented in this file.
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [v1.4.1-SNAPSHOT] - 2022-03-08
- [#22783] Moved to SHUB 2.x through the storagehub-client-wrapper 1.1.1
#### Enhancements
[#22782] Moved to SHUB(1.x, 3.x)
## [v1.4.0] - 2021-12-03
- [#19786] Integrated items of type "URL"
## [v1.3.1] - 2020-09-25
- [#19317] Just to include the storagehub-client-wrapper at 1.0.0 version
#### Fixes
[#19671#note-10] Resolve public link on private folder with at least one shared folder as descendant
## [v1.3.0] - 2020-04-14
[Task #18920] Migrated to SHUB
## [v1.2.0] - 2018-03-07
[Feature #11374] Download items with double click
## [v1.1.0] - 2017-10-11
[Feature #9926] read the scope from environment variable
## [v1.0.2] - 2017-10-10
Removed markAsRead method. It is performed by HL
## [v1.0.1] - 2017-07-03
[Task #9104] removed log4j.properties file
## [v.0.0.1] - 2016-11-10
Incident #5722: fixed
## [v1.0.0] - 2016-09-13
first release

View File

@ -15,7 +15,7 @@
<include>README.md</include> <include>README.md</include>
<include>LICENSE.md</include> <include>LICENSE.md</include>
<include>profile.xml</include> <include>profile.xml</include>
<include>changelog.xml</include> <include>CHANGELOG.md</include>
</includes> </includes>
<fileMode>755</fileMode> <fileMode>755</fileMode>
<filtered>true</filtered> <filtered>true</filtered>

45
pom.xml
View File

@ -12,7 +12,7 @@
<groupId>org.gcube.portlets.user</groupId> <groupId>org.gcube.portlets.user</groupId>
<artifactId>workspace-explorer-app</artifactId> <artifactId>workspace-explorer-app</artifactId>
<version>1.3.0</version> <version>1.4.1-SNAPSHOT</version>
<packaging>war</packaging> <packaging>war</packaging>
<description> <description>
@ -42,6 +42,19 @@
</properties> </properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.gcube.distribution</groupId>
<artifactId>gcube-smartgears-bom</artifactId>
<version>2.1.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies> <dependencies>
<!-- TO RUN BY ECLIPSE SET THE FOLLOWING SCOPE AT COMPILE --> <!-- TO RUN BY ECLIPSE SET THE FOLLOWING SCOPE AT COMPILE -->
@ -92,29 +105,15 @@
<version>1.4</version> <version>1.4</version>
</dependency> </dependency>
<!-- <dependency> -->
<!-- <groupId>com.github.gwtmaterialdesign</groupId> -->
<!-- <artifactId>gwt-material-addins</artifactId> -->
<!-- <version>1.5.0-SNAPSHOT</version> -->
<!-- </dependency> -->
<!-- <dependency> -->
<!-- <groupId>com.github.gwtmaterialdesign</groupId> -->
<!-- <artifactId>gwt-material-addins</artifactId> -->
<!-- <version>${gwt-material.version}</version> -->
<!-- </dependency> -->
<!-- FWS --> <!-- FWS -->
<dependency> <dependency>
<groupId>org.gcube.resources.discovery</groupId> <groupId>org.gcube.resources.discovery</groupId>
<artifactId>ic-client</artifactId> <artifactId>ic-client</artifactId>
<version>[1.0.0,2.0.0-SNAPSHOT)</version>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.gcube.core</groupId> <groupId>org.gcube.core</groupId>
<artifactId>common-scope-maps</artifactId> <artifactId>common-scope-maps</artifactId>
<version>[1.0.2, 2.0.0-SNAPSHOT)</version>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
@ -130,14 +129,13 @@
<dependency> <dependency>
<groupId>org.gcube.common</groupId> <groupId>org.gcube.common</groupId>
<artifactId>storagehub-client-wrapper</artifactId> <artifactId>storagehub-client-wrapper</artifactId>
<version>[0.0.1, 1.0.0-SNAPSHOT)</version> <version>[1.0.0-SNAPSHOT, 2.0.0-SNAPSHOT)</version>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.gcube.core</groupId> <groupId>org.gcube.core</groupId>
<artifactId>common-encryption</artifactId> <artifactId>common-encryption</artifactId>
<version>[1.0.0, 2.0.0-SNAPSHOT)</version>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
@ -154,27 +152,16 @@
<version>1.8</version> <version>1.8</version>
</dependency> </dependency>
<!-- LOGGER -->
<dependency> <dependency>
<groupId>org.slf4j</groupId> <groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId> <artifactId>slf4j-api</artifactId>
<version>1.6.4</version>
<scope>compile</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.slf4j</groupId> <groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId> <artifactId>slf4j-log4j12</artifactId>
<version>1.6.4</version> <version>1.6.4</version>
<scope>compile</scope> <scope>test</scope>
</dependency>
<!-- LOGGER -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
<scope>compile</scope>
</dependency> </dependency>
<dependency> <dependency>

View File

@ -8,6 +8,7 @@ import java.util.List;
import org.gcube.portlets.user.workspaceexplorerapp.client.download.DownloadType; import org.gcube.portlets.user.workspaceexplorerapp.client.download.DownloadType;
import org.gcube.portlets.user.workspaceexplorerapp.client.event.DownloadItemEvent; import org.gcube.portlets.user.workspaceexplorerapp.client.event.DownloadItemEvent;
import org.gcube.portlets.user.workspaceexplorerapp.client.event.LoadFolderEvent;
import org.gcube.portlets.user.workspaceexplorerapp.client.grid.DisplayField; import org.gcube.portlets.user.workspaceexplorerapp.client.grid.DisplayField;
import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.GWT;
@ -64,6 +65,9 @@ public class WorkspaceExplorerAppMainPanel extends Composite {
@UiField @UiField
MaterialNavSection we_nav_right; MaterialNavSection we_nav_right;
@UiField
MaterialLink home_we;
@UiField @UiField
MaterialLink download_we; MaterialLink download_we;
@ -116,6 +120,18 @@ public class WorkspaceExplorerAppMainPanel extends Composite {
}); });
we_nav_right.add(order); we_nav_right.add(order);
home_we.addClickHandler(new ClickHandler() {
/* (non-Javadoc)
* @see com.google.gwt.event.dom.client.ClickHandler#onClick(com.google.gwt.event.dom.client.ClickEvent)
*/
@Override
public void onClick(ClickEvent event) {
WorkspaceExplorerAppMainPanel.this.handlerManager.fireEvent(new LoadFolderEvent(null));
}
});
download_we.addClickHandler(new ClickHandler() { download_we.addClickHandler(new ClickHandler() {
/* (non-Javadoc) /* (non-Javadoc)

View File

@ -63,6 +63,8 @@
<g:Image styleName="{style.navigation_explorer}" url="img/d4science_workspace_logo_180.png" <g:Image styleName="{style.navigation_explorer}" url="img/d4science_workspace_logo_180.png"
ui:field="d4science_workspace_logo_180" title="D4Science Workspace Folder Explorer" ui:field="d4science_workspace_logo_180" title="D4Science Workspace Folder Explorer"
altText="D4Science Workspace Folder Explorer" /> altText="D4Science Workspace Folder Explorer" />
<m:MaterialLink iconType="HOME" iconPosition="LEFT"
textColor="blue" text="Home" ui:field="home_we" />
<m:MaterialLink iconType="OPEN_IN_NEW" iconPosition="LEFT" <m:MaterialLink iconType="OPEN_IN_NEW" iconPosition="LEFT"
textColor="blue" text="Open" ui:field="show_we" /> textColor="blue" text="Open" ui:field="show_we" />
<m:MaterialLink iconType="INBOX" iconPosition="LEFT" <m:MaterialLink iconType="INBOX" iconPosition="LEFT"

View File

@ -30,7 +30,6 @@ import org.gcube.portlets.user.workspaceexplorerapp.client.view.WorkspaceExplore
import org.gcube.portlets.user.workspaceexplorerapp.shared.Item; import org.gcube.portlets.user.workspaceexplorerapp.shared.Item;
import org.gcube.portlets.user.workspaceexplorerapp.shared.ItemType; import org.gcube.portlets.user.workspaceexplorerapp.shared.ItemType;
import com.github.gwtbootstrap.client.ui.constants.AlertType;
import com.google.gwt.core.shared.GWT; import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.shared.HandlerManager; import com.google.gwt.event.shared.HandlerManager;
import com.google.gwt.http.client.RequestBuilder; import com.google.gwt.http.client.RequestBuilder;
@ -46,50 +45,51 @@ import gwt.material.design.client.ui.MaterialToast;
/** /**
* The Class WorkspaceResourcesExplorerPanel. * The Class WorkspaceResourcesExplorerPanel.
* *
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
* Dec 3, 2015 *
* Dec 3, 2021
*/ */
public class WorkspaceResourcesExplorerPanel extends DockPanel implements HasWorskpaceExplorerSelectNotificationListener{ public class WorkspaceResourcesExplorerPanel extends DockPanel
implements HasWorskpaceExplorerSelectNotificationListener {
public HandlerManager eventBus; public HandlerManager eventBus;
private Breadcrumbs breadcrumbs; private Breadcrumbs breadcrumbs;
private boolean isSelect = false; private boolean isSelect = false;
private String captionTxt; private String captionTxt;
// private WorkspaceExplorerController controller;
private List<WorskpaceExplorerSelectNotificationListener> listeners = new ArrayList<WorskpaceExplorerSelectNotificationListener>(); private List<WorskpaceExplorerSelectNotificationListener> listeners = new ArrayList<WorskpaceExplorerSelectNotificationListener>();
private VerticalPanel mainVP = new VerticalPanel(); private VerticalPanel mainVP = new VerticalPanel();
// private HorizontalPanel footerHP = new HorizontalPanel();
private WorkspaceExplorer wsExplorer; private WorkspaceExplorer wsExplorer;
private ScrollPanel centerScrollable = new ScrollPanel(); private ScrollPanel centerScrollable = new ScrollPanel();
// private ScrollPanel southPanel = new ScrollPanel();
private String folderId;
private String folderName; private String folderName;
public static final DisplayField[] displayFields = new DisplayField[]{DisplayField.ICON, DisplayField.NAME, DisplayField.OWNER, DisplayField.CREATION_DATE}; private Item baseFolder;
public static final DisplayField[] displayFields = new DisplayField[] { DisplayField.ICON, DisplayField.NAME,
DisplayField.OWNER, DisplayField.CREATION_DATE };
/** /**
* Instantiates a new workspace folder explorer select panel. * Instantiates a new workspace folder explorer select panel.
* *
* @param eventBus the event bus * @param eventBus the event bus
* @param folderId the folder id like root folder to explore * @param folderId the folder id like root folder to explore
* @param folderName the folder name * @param folderName the folder name
* @throws Exception the exception * @throws Exception the exception
*/ */
public WorkspaceResourcesExplorerPanel(HandlerManager eventBus, String folderId, String folderName) throws Exception { public WorkspaceResourcesExplorerPanel(HandlerManager eventBus, String folderId, String folderName)
throws Exception {
initExplorer(eventBus, folderId, folderName, ItemType.values(), ItemType.values()); initExplorer(eventBus, folderId, folderName, ItemType.values(), ItemType.values());
} }
/** /**
* Inits the explorer. * Inits the explorer.
* *
* @param eventBus the event bus * @param eventBus the event bus
* @param folderId the folder id * @param folderId the folder id
* @param folderName the folder name * @param folderName the folder name
* @param selectableTypes the selectable types * @param selectableTypes the selectable types
* @param showableTypes the showable types * @param showableTypes the showable types
* @throws Exception the exception * @throws Exception the exception
*/ */
private void initExplorer(HandlerManager eventBus, String folderId, String folderName, ItemType[] selectableTypes, ItemType[] showableTypes) throws Exception{ private void initExplorer(HandlerManager eventBus, String folderId, String folderName, ItemType[] selectableTypes,
this.folderId = folderId; ItemType[] showableTypes) throws Exception {
this.folderName = folderName; this.folderName = folderName;
this.eventBus = eventBus; this.eventBus = eventBus;
this.breadcrumbs = new Breadcrumbs(eventBus); this.breadcrumbs = new Breadcrumbs(eventBus);
@ -97,7 +97,9 @@ public class WorkspaceResourcesExplorerPanel extends DockPanel implements HasWor
wsExplorer = new WorkspaceExplorer(eventBus, showableTypes, selectableTypes, displayFields); wsExplorer = new WorkspaceExplorer(eventBus, showableTypes, selectableTypes, displayFields);
Item item = new Item(folderId, folderName, true); Item item = new Item(folderId, folderName, true);
if(folderId!=null && !folderId.isEmpty()) this.baseFolder = item;
wsExplorer.setBaseFolder(item);
if (folderId != null && !folderId.isEmpty())
wsExplorer.loadFolder(item); wsExplorer.loadFolder(item);
initPanel(""); initPanel("");
} }
@ -105,26 +107,27 @@ public class WorkspaceResourcesExplorerPanel extends DockPanel implements HasWor
/** /**
* Instantiates a new workspace explorer select panel. * Instantiates a new workspace explorer select panel.
* *
* @param folderId the folder id * @param eventBus the event bus
* @param folderId the folder id
* @param showOnlyFolders the show only folders * @param showOnlyFolders the show only folders
* @throws Exception the exception * @throws Exception the exception
*/ */
public WorkspaceResourcesExplorerPanel(HandlerManager eventBus, String folderId, boolean showOnlyFolders) throws Exception { public WorkspaceResourcesExplorerPanel(HandlerManager eventBus, String folderId, boolean showOnlyFolders)
throws Exception {
if(showOnlyFolders){ if (showOnlyFolders) {
ItemType[] itemsType = new ItemType[1]; ItemType[] itemsType = new ItemType[1];
itemsType[0] = ItemType.FOLDER; itemsType[0] = ItemType.FOLDER;
initExplorer(eventBus, folderId, "", itemsType, itemsType); initExplorer(eventBus, folderId, "", itemsType, itemsType);
}else{ } else {
initExplorer(eventBus, folderId, "", ItemType.values(), ItemType.values()); initExplorer(eventBus, folderId, "", ItemType.values(), ItemType.values());
} }
} }
/** /**
* Bind events. * Bind events.
*/ */
private void bindEvents(){ private void bindEvents() {
eventBus.addHandler(ClickItemEvent.TYPE, new ClickItemEventHandler() { eventBus.addHandler(ClickItemEvent.TYPE, new ClickItemEventHandler() {
@ -149,14 +152,12 @@ public class WorkspaceResourcesExplorerPanel extends DockPanel implements HasWor
@Override @Override
public void onLoadFolder(LoadFolderEvent loadFolderEvent) { public void onLoadFolder(LoadFolderEvent loadFolderEvent) {
GWT.log("LoadFolderEvent fired"); GWT.log("LoadFolderEvent fired");
if(loadFolderEvent.getTargetFolder()==null) Item item = loadFolderEvent.getTargetFolder() == null ? baseFolder : loadFolderEvent.getTargetFolder();
return;
Item item = loadFolderEvent.getTargetFolder(); if (item.isFolder()) {
if(item.isFolder()){
try { try {
wsExplorer.loadFolder(item); wsExplorer.loadFolder(item);
loadParentBreadcrumbByItemId(item.getId(), true); loadParentBreadcrumbByItemId(item.getId(), true);
@ -172,7 +173,7 @@ public class WorkspaceResourcesExplorerPanel extends DockPanel implements HasWor
@Override @Override
public void onBreadcrumbClick(BreadcrumbClickEvent breadcrumbClickEvent) { public void onBreadcrumbClick(BreadcrumbClickEvent breadcrumbClickEvent) {
if(breadcrumbClickEvent.getTargetItem()!=null) if (breadcrumbClickEvent.getTargetItem() != null)
eventBus.fireEvent(new LoadFolderEvent(breadcrumbClickEvent.getTargetItem())); eventBus.fireEvent(new LoadFolderEvent(breadcrumbClickEvent.getTargetItem()));
} }
}); });
@ -183,36 +184,19 @@ public class WorkspaceResourcesExplorerPanel extends DockPanel implements HasWor
public void onOrderDataBy(OrderDataByEvent orderDataByEvent) { public void onOrderDataBy(OrderDataByEvent orderDataByEvent) {
wsExplorer.getItTables().sortDataBy(orderDataByEvent.getLabel()); wsExplorer.getItTables().sortDataBy(orderDataByEvent.getLabel());
/*ArrayList<Item> items = ItemComparatorUtility.sortItems(DisplayField.NAME, true, wsExplorer.getItTables().getDataProvider().getList());
wsExplorer.updateExplorer(items);*/
} }
}); });
eventBus.addHandler(RightClickItemEvent.TYPE, new RightClickItemEventHandler() { eventBus.addHandler(RightClickItemEvent.TYPE, new RightClickItemEventHandler() {
@Override @Override
public void onClick(RightClickItemEvent rightClickItemEvent) { public void onClick(RightClickItemEvent rightClickItemEvent) {
if(rightClickItemEvent.getItem()!=null && rightClickItemEvent.getItem().getId()!=null){ if (rightClickItemEvent.getItem() != null && rightClickItemEvent.getItem().getId() != null) {
PopupContextMenu popupCM = new PopupContextMenu(true, eventBus, rightClickItemEvent.getItem()); PopupContextMenu popupCM = new PopupContextMenu(true, eventBus, rightClickItemEvent.getItem());
popupCM.showPopup(rightClickItemEvent.getXPos(), Window.getScrollTop()+rightClickItemEvent.getYPos()); popupCM.showPopup(rightClickItemEvent.getXPos(),
Window.getScrollTop() + rightClickItemEvent.getYPos());
/*final PopupPanel contextMenu = new PopupPanel(true);
contextMenu.getElement().getStyle().setBackgroundColor("#F5F5F5");
Navigation nav = new Navigation(eventBus, rightClickItemEvent.getItem());
nav.addCommandOnDownloadClick(new Command() {
@Override
public void execute() {
contextMenu.hide();
}
});
contextMenu.add(nav);
contextMenu.setPopupPosition(rightClickItemEvent.getXPos(), Window.getScrollTop()+rightClickItemEvent.getYPos());
contextMenu.show();*/
} }
} }
}); });
@ -223,24 +207,27 @@ public class WorkspaceResourcesExplorerPanel extends DockPanel implements HasWor
public void onDownloadItem(DownloadItemEvent downloadItemEvent) { public void onDownloadItem(DownloadItemEvent downloadItemEvent) {
GWT.log("Fired event DownloadItemEvent"); GWT.log("Fired event DownloadItemEvent");
String itemIds = ""; String itemIds = "";
if(downloadItemEvent.getItem()!=null) if (downloadItemEvent.getItem() != null)
itemIds = downloadItemEvent.getItem().getId()+WorkspaceExplorerAppConstants.IDS_SEPARATOR; itemIds = downloadItemEvent.getItem().getId() + WorkspaceExplorerAppConstants.IDS_SEPARATOR;
else{ else {
List<Item> lstItems = toList(wsExplorer.getItemsSelected()); List<Item> lstItems = toList(wsExplorer.getItemsSelected());
for (Item item : lstItems) { for (Item item : lstItems) {
itemIds +=item.getId()+WorkspaceExplorerAppConstants.IDS_SEPARATOR; itemIds += item.getId() + WorkspaceExplorerAppConstants.IDS_SEPARATOR;
} }
} }
GWT.log("itemIds: "+itemIds); GWT.log("itemIds: " + itemIds);
if(!itemIds.isEmpty()){ if (!itemIds.isEmpty()) {
// MaterialToast.fireToast("Download..."); // MaterialToast.fireToast("Download...");
switch (downloadItemEvent.getType()) { switch (downloadItemEvent.getType()) {
case DOWNLOAD: case DOWNLOAD:
MaterialToast.fireToast("Download..."); MaterialToast.fireToast("Download...");
try { try {
new RequestBuilderWorkspaceValidateItem(RequestBuilder.GET,WorkspaceExplorerAppConstants.DOWNLOAD_WORKSPACE_SERVICE, WorkspaceExplorerAppConstants.IDS+"="+itemIds, "_self", downloadHandlerCallback); new RequestBuilderWorkspaceValidateItem(RequestBuilder.GET,
WorkspaceExplorerAppConstants.DOWNLOAD_WORKSPACE_SERVICE,
WorkspaceExplorerAppConstants.IDS + "=" + itemIds, "_self",
downloadHandlerCallback);
} catch (Exception e) { } catch (Exception e) {
Window.alert("Sorry, an error occurred while contacting server, try again"); Window.alert("Sorry, an error occurred while contacting server, try again");
} }
@ -249,8 +236,45 @@ public class WorkspaceResourcesExplorerPanel extends DockPanel implements HasWor
// break; // break;
case OPEN: case OPEN:
MaterialToast.fireToast("Showing..."); MaterialToast.fireToast("Showing...");
if (downloadItemEvent.getItem().getType().equals(ItemType.URL_DOCUMENT)) {
final NewBrowserWindow newBrowserWindow = NewBrowserWindow.open("", "_blank", "");
final String theItemIds = itemIds;
WorkspaceExplorerAppConstants.workspaceNavigatorService
.getUrlById(downloadItemEvent.getItem().getId(), new AsyncCallback<String>() {
@Override
public void onSuccess(String result) {
newBrowserWindow.setUrl(result);
}
@Override
public void onFailure(Throwable caught) {
try {
new RequestBuilderWorkspaceValidateItem(RequestBuilder.GET,
WorkspaceExplorerAppConstants.DOWNLOAD_WORKSPACE_SERVICE,
WorkspaceExplorerAppConstants.IDS + "=" + theItemIds
+ "&viewContent=true",
"_blank", downloadHandlerCallback);
} catch (Exception e) {
Window.alert(
"Sorry, an error occurred while contacting server, try again");
}
}
});
return;
}
try { try {
new RequestBuilderWorkspaceValidateItem(RequestBuilder.GET, WorkspaceExplorerAppConstants.DOWNLOAD_WORKSPACE_SERVICE, WorkspaceExplorerAppConstants.IDS+"="+itemIds+"&viewContent=true", "_blank", downloadHandlerCallback); new RequestBuilderWorkspaceValidateItem(RequestBuilder.GET,
WorkspaceExplorerAppConstants.DOWNLOAD_WORKSPACE_SERVICE,
WorkspaceExplorerAppConstants.IDS + "=" + itemIds + "&viewContent=true", "_blank",
downloadHandlerCallback);
} catch (Exception e) { } catch (Exception e) {
Window.alert("Sorry, an error occurred while contacting server, try again"); Window.alert("Sorry, an error occurred while contacting server, try again");
@ -259,92 +283,67 @@ public class WorkspaceResourcesExplorerPanel extends DockPanel implements HasWor
default: default:
break; break;
} }
/*final NewBrowserWindow newBW = NewBrowserWindow.open("", "_self", "");
WorkspaceExplorerAppConstants.workspaceNavigatorService.getPublicLinkForItemId(itemId, new AsyncCallback<String>() {
@Override
public void onFailure(Throwable caught) {
Window.alert(caught.getMessage());
}
@Override
public void onSuccess(String url) {
if(url!=null){
newBW.setUrl(url);
}else
Window.alert("Sorry, the item selected is not available for download");
}
});*/
} }
} }
}); });
} }
/** /**
* To list. * To list.
* *
* @param items the items * @param items the items
* @return the list * @return the list
*/ */
private List<Item> toList(Set<Item> items){ private List<Item> toList(Set<Item> items) {
if(items!=null && items.size()>0){ if (items != null && items.size() > 0) {
List<Item> lstItems = new ArrayList<Item> (items.size()); List<Item> lstItems = new ArrayList<Item>(items.size());
lstItems.addAll(items); lstItems.addAll(items);
return lstItems; return lstItems;
} }
return null; return null;
} }
/** /**
* Load parent breadcrumb by item id. * Load parent breadcrumb by item id.
* *
* @param itemIdentifier the item identifier * @param itemIdentifier the item identifier
* @param includeItemAsParent the include item as parent * @param includeItemAsParent the include item as parent
*/ */
protected void loadParentBreadcrumbByItemId(final String itemIdentifier, boolean includeItemAsParent){ protected void loadParentBreadcrumbByItemId(final String itemIdentifier, boolean includeItemAsParent) {
GWT.log("Reload Parent Breadcrumb: [Item id: "+itemIdentifier+"]"); GWT.log("Reload Parent Breadcrumb: [Item id: " + itemIdentifier + "]");
WorkspaceExplorerAppConstants.workspaceNavigatorService.getBreadcrumbsByItemIdentifierToParentLimit(itemIdentifier, folderId, includeItemAsParent, new AsyncCallback<List<Item>>() { WorkspaceExplorerAppConstants.workspaceNavigatorService.getBreadcrumbsByItemIdentifierToParentLimit(
itemIdentifier, baseFolder.getId(), includeItemAsParent, new AsyncCallback<List<Item>>() {
@Override @Override
public void onFailure(Throwable caught) { public void onFailure(Throwable caught) {
GWT.log(caught.getMessage()); GWT.log(caught.getMessage());
wsExplorer.setAlert(caught.getMessage(), AlertType.ERROR); Item goToBaseFolder = null;
} // I'm adding go to folder only if is a sub-folder of baseFolder
if (itemIdentifier != baseFolder.getId())
goToBaseFolder = baseFolder;
@Override // wsExplorer.setAlert(caught.getMessage(), AlertType.ERROR, goToBaseFolder);
public void onSuccess(List<Item> result) { }
if(result!=null){
breadcrumbs.setPath(result); @Override
// clearMoreInfo(); public void onSuccess(List<Item> result) {
} if (result != null) {
} breadcrumbs.setPath(result);
}); }
}
});
} }
/** /**
* Refresh root folder view. * Refresh root folder view.
*/ */
public void refreshRootFolderView(){ public void refreshRootFolderView() {
Item item = new Item(folderId, folderName, true); // Item item = new Item(baseFolder.getId(), folderName, true);
eventBus.fireEvent(new LoadFolderEvent(item)); eventBus.fireEvent(new LoadFolderEvent(baseFolder));
} }
// /**
// * Clear more info.
// */
// private void clearMoreInfo(){
// southPanel.clear();
// }
/** /**
* Inits the panel. * Inits the panel.
* *
@ -356,14 +355,14 @@ public class WorkspaceResourcesExplorerPanel extends DockPanel implements HasWor
this.getElement().setAttribute("id", "WorkspaceExplorerContainer"); this.getElement().setAttribute("id", "WorkspaceExplorerContainer");
this.getElement().addClassName("workspace-explorer-container"); this.getElement().addClassName("workspace-explorer-container");
if(this.captionTxt!=null && !this.captionTxt.isEmpty()) if (this.captionTxt != null && !this.captionTxt.isEmpty())
setTitle(this.captionTxt); setTitle(this.captionTxt);
setWidth("100%"); setWidth("100%");
add(breadcrumbs, DockPanel.NORTH); add(breadcrumbs, DockPanel.NORTH);
mainVP.add(wsExplorer.getPanel()); mainVP.add(wsExplorer.getPanel());
centerScrollable.add(mainVP); centerScrollable.add(mainVP);
add(centerScrollable, DockPanel.CENTER); add(centerScrollable, DockPanel.CENTER);
} }
/** /**
@ -371,7 +370,7 @@ public class WorkspaceResourcesExplorerPanel extends DockPanel implements HasWor
* *
* @param selected the selected * @param selected the selected
*/ */
private void notifySelectedItem(Item selected){ private void notifySelectedItem(Item selected) {
for (WorskpaceExplorerSelectNotificationListener worskpaceExplorerNotificationListener : listeners) { for (WorskpaceExplorerSelectNotificationListener worskpaceExplorerNotificationListener : listeners) {
worskpaceExplorerNotificationListener.onSelectedItem(selected); worskpaceExplorerNotificationListener.onSelectedItem(selected);
@ -381,18 +380,17 @@ public class WorkspaceResourcesExplorerPanel extends DockPanel implements HasWor
/** /**
* Notify aborted. * Notify aborted.
*/ */
private void notifyAborted(){ private void notifyAborted() {
for (WorskpaceExplorerSelectNotificationListener worskpaceExplorerNotificationListener : listeners) { for (WorskpaceExplorerSelectNotificationListener worskpaceExplorerNotificationListener : listeners) {
worskpaceExplorerNotificationListener.onAborted(); worskpaceExplorerNotificationListener.onAborted();
} }
} }
/** /**
* Notify not valid selection. * Notify not valid selection.
*/ */
private void notifyNotValidSelection(){ private void notifyNotValidSelection() {
for (WorskpaceExplorerSelectNotificationListener worskpaceExplorerNotificationListener : listeners) { for (WorskpaceExplorerSelectNotificationListener worskpaceExplorerNotificationListener : listeners) {
worskpaceExplorerNotificationListener.onNotValidSelection(); worskpaceExplorerNotificationListener.onNotValidSelection();
@ -405,7 +403,7 @@ public class WorkspaceResourcesExplorerPanel extends DockPanel implements HasWor
* @param t the t * @param t the t
*/ */
@SuppressWarnings("unused") @SuppressWarnings("unused")
private void notifyFailed(Throwable t){ private void notifyFailed(Throwable t) {
for (WorskpaceExplorerSelectNotificationListener worskpaceExplorerNotificationListener : listeners) { for (WorskpaceExplorerSelectNotificationListener worskpaceExplorerNotificationListener : listeners) {
worskpaceExplorerNotificationListener.onFailed(t); worskpaceExplorerNotificationListener.onFailed(t);
@ -430,22 +428,44 @@ public class WorkspaceResourcesExplorerPanel extends DockPanel implements HasWor
return isSelect; return isSelect;
} }
/* (non-Javadoc) /**
* @see org.gcube.portlets.widgets.wsexplorer.client.notification.WorskpaceExplorerNotification.HasWorskpaceExplorerNotificationListener#addWorkspaceExplorerNotificationListener(org.gcube.portlets.widgets.wsexplorer.client.notification.WorskpaceExplorerNotification.WorskpaceExplorerNotificationListener) * Adds the workspace explorer select notification listener.
*
* @param handler the handler
*/
/*
* (non-Javadoc)
*
* @see org.gcube.portlets.widgets.wsexplorer.client.notification.
* WorskpaceExplorerNotification.HasWorskpaceExplorerNotificationListener#
* addWorkspaceExplorerNotificationListener(org.gcube.portlets.widgets.
* wsexplorer.client.notification.WorskpaceExplorerNotification.
* WorskpaceExplorerNotificationListener)
*/ */
@Override @Override
public void addWorkspaceExplorerSelectNotificationListener(WorskpaceExplorerSelectNotificationListener handler) { public void addWorkspaceExplorerSelectNotificationListener(WorskpaceExplorerSelectNotificationListener handler) {
if(handler!=null) if (handler != null)
listeners.add(handler); listeners.add(handler);
} }
/* (non-Javadoc) /**
* @see org.gcube.portlets.widgets.wsexplorer.client.notification.WorskpaceExplorerNotification.HasWorskpaceExplorerNotificationListener#removeWorkspaceExplorerNotificationListener(org.gcube.portlets.widgets.wsexplorer.client.notification.WorskpaceExplorerNotification.WorskpaceExplorerNotificationListener) * Removes the workspace explorer select notification listener.
*
* @param handler the handler
*/
/*
* (non-Javadoc)
*
* @see org.gcube.portlets.widgets.wsexplorer.client.notification.
* WorskpaceExplorerNotification.HasWorskpaceExplorerNotificationListener#
* removeWorkspaceExplorerNotificationListener(org.gcube.portlets.widgets.
* wsexplorer.client.notification.WorskpaceExplorerNotification.
* WorskpaceExplorerNotificationListener)
*/ */
@Override @Override
public void removeWorkspaceExplorerSelectNotificationListener(WorskpaceExplorerSelectNotificationListener handler) { public void removeWorkspaceExplorerSelectNotificationListener(WorskpaceExplorerSelectNotificationListener handler) {
if(handler!=null){ if (handler != null) {
if(listeners.contains(handler)) if (listeners.contains(handler))
listeners.remove(handler); listeners.remove(handler);
} }
} }
@ -456,18 +476,19 @@ public class WorkspaceResourcesExplorerPanel extends DockPanel implements HasWor
* @param item the item * @param item the item
* @return true, if successful * @return true, if successful
*/ */
public boolean itemIsSelectable(Item item){ public boolean itemIsSelectable(Item item) {
GWT.log("Selectable type: "+wsExplorer.getSelectableTypes()); GWT.log("Selectable type: " + wsExplorer.getSelectableTypes());
GWT.log("item: "+item); GWT.log("item: " + item);
if (item!=null){ if (item != null) {
boolean selectable = wsExplorer.getSelectableTypes().contains(item.getType()); boolean selectable = wsExplorer.getSelectableTypes().contains(item.getType());
return selectable?true:false; return selectable ? true : false;
} }
return false; return false;
} }
/** /**
* Gets the ws explorer.
*
* @return the wsExplorer * @return the wsExplorer
*/ */
public WorkspaceExplorer getWsExplorer() { public WorkspaceExplorer getWsExplorer() {
@ -493,11 +514,12 @@ public class WorkspaceResourcesExplorerPanel extends DockPanel implements HasWor
@Override @Override
public void onSuccess(WindowOpenParameter windowOpenParam) { public void onSuccess(WindowOpenParameter windowOpenParam) {
String params = "?"+windowOpenParam.getParameters(); String params = "?" + windowOpenParam.getParameters();
if(params.length()>1) if (params.length() > 1)
params+="&"; params += "&";
params+=WorkspaceExplorerAppConstants.REDIRECTONERROR+"="+windowOpenParam.isRedirectOnError(); params += WorkspaceExplorerAppConstants.REDIRECTONERROR + "=" + windowOpenParam.isRedirectOnError();
windowOpenParam.getBrowserWindow().setUrl(WorkspaceExplorerAppConstants.DOWNLOAD_WORKSPACE_SERVICE+params); windowOpenParam.getBrowserWindow()
.setUrl(WorkspaceExplorerAppConstants.DOWNLOAD_WORKSPACE_SERVICE + params);
} }
}; };
} }

View File

@ -1,29 +1,27 @@
package org.gcube.portlets.user.workspaceexplorerapp.client.event; package org.gcube.portlets.user.workspaceexplorerapp.client.event;
import org.gcube.portlets.user.workspaceexplorerapp.client.download.DownloadType; import org.gcube.portlets.user.workspaceexplorerapp.client.download.DownloadType;
import org.gcube.portlets.user.workspaceexplorerapp.shared.ItemInterface; import org.gcube.portlets.user.workspaceexplorerapp.shared.Item;
import com.google.gwt.event.shared.GwtEvent; import com.google.gwt.event.shared.GwtEvent;
/** /**
* The Class ClickItemEvent. * The Class ClickItemEvent.
* *
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it Jul 6, 2015
* Jul 6, 2015
*/ */
public class DownloadItemEvent extends GwtEvent<DownloadItemEventHandler> { public class DownloadItemEvent extends GwtEvent<DownloadItemEventHandler> {
public static Type<DownloadItemEventHandler> TYPE = new Type<DownloadItemEventHandler>(); public static Type<DownloadItemEventHandler> TYPE = new Type<DownloadItemEventHandler>();
private ItemInterface item; private Item item;
private DownloadType type; private DownloadType type;
/** /**
* Instantiates a new click item event. * Instantiates a new click item event.
* *
* @param itemDownload the item download * @param itemDownload the item download
* @param type the type * @param type the type
*/ */
public DownloadItemEvent(ItemInterface itemDownload, DownloadType type) { public DownloadItemEvent(Item itemDownload, DownloadType type) {
this.item = itemDownload; this.item = itemDownload;
this.type = type; this.type = type;
} }
@ -36,7 +34,9 @@ public class DownloadItemEvent extends GwtEvent<DownloadItemEventHandler> {
return type; return type;
} }
/* (non-Javadoc) /*
* (non-Javadoc)
*
* @see com.google.gwt.event.shared.GwtEvent#getAssociatedType() * @see com.google.gwt.event.shared.GwtEvent#getAssociatedType()
*/ */
@Override @Override
@ -44,8 +44,12 @@ public class DownloadItemEvent extends GwtEvent<DownloadItemEventHandler> {
return TYPE; return TYPE;
} }
/* (non-Javadoc) /*
* @see com.google.gwt.event.shared.GwtEvent#dispatch(com.google.gwt.event.shared.EventHandler) * (non-Javadoc)
*
* @see
* com.google.gwt.event.shared.GwtEvent#dispatch(com.google.gwt.event.shared.
* EventHandler)
*/ */
@Override @Override
protected void dispatch(DownloadItemEventHandler handler) { protected void dispatch(DownloadItemEventHandler handler) {
@ -54,10 +58,10 @@ public class DownloadItemEvent extends GwtEvent<DownloadItemEventHandler> {
/** /**
* Gets the item. * Gets the item.
* *
* @return the item * @return the item
*/ */
public ItemInterface getItem() { public Item getItem() {
return item; return item;
} }
} }

View File

@ -5,7 +5,7 @@ package org.gcube.portlets.user.workspaceexplorerapp.client.grid;
import org.gcube.portlets.user.workspaceexplorerapp.client.download.DownloadType; import org.gcube.portlets.user.workspaceexplorerapp.client.download.DownloadType;
import org.gcube.portlets.user.workspaceexplorerapp.client.event.DownloadItemEvent; import org.gcube.portlets.user.workspaceexplorerapp.client.event.DownloadItemEvent;
import org.gcube.portlets.user.workspaceexplorerapp.shared.ItemInterface; import org.gcube.portlets.user.workspaceexplorerapp.shared.Item;
import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickEvent;
@ -42,7 +42,7 @@ public class MenuMoreOptionsOnItem extends Composite {
private HandlerManager eventBus; private HandlerManager eventBus;
private ItemInterface itemToDownload; private Item itemToDownload;
private Command commandOnClick; private Command commandOnClick;
@ -86,7 +86,7 @@ public class MenuMoreOptionsOnItem extends Composite {
* @param itemToDownload the item to download * @param itemToDownload the item to download
* @param commandOnClick the command on click * @param commandOnClick the command on click
*/ */
public void initOnItem(ItemInterface itemToDownload, Command commandOnClick){ public void initOnItem(Item itemToDownload, Command commandOnClick){
this.itemToDownload = itemToDownload; this.itemToDownload = itemToDownload;
this.commandOnClick = commandOnClick; this.commandOnClick = commandOnClick;
} }

View File

@ -21,11 +21,18 @@ public interface WorkspaceExplorerAppService extends RemoteService {
/** /**
* Gets the folder. * Gets the folder.
* *
* @param folder the folder @param showableTypes the showable types @param * @param folder the folder @param showableTypes the showable
* purgeEmpyFolders the purge empy folders @param filterCriteria * types @param purgeEmpyFolders the purge empy
* the filter criteria @return the folder @throws * folders @param filterCriteria the filter
* WorkspaceNavigatorServiceException the workspace navigator * criteria @return the folder @throws
* service exception @throws * WorkspaceNavigatorServiceException the workspace
* navigator service exception @throws
* @param showableTypes the showable types
* @param purgeEmpyFolders the purge empy folders
* @param filterCriteria the filter criteria
* @return the folder
* @throws WorkspaceNavigatorServiceException the workspace navigator service
* exception
*/ */
Item getFolder(Item folder, List<ItemType> showableTypes, boolean purgeEmpyFolders, FilterCriteria filterCriteria) Item getFolder(Item folder, List<ItemType> showableTypes, boolean purgeEmpyFolders, FilterCriteria filterCriteria)
throws WorkspaceNavigatorServiceException; throws WorkspaceNavigatorServiceException;
@ -71,12 +78,12 @@ public interface WorkspaceExplorerAppService extends RemoteService {
/** /**
* Gets the breadcrumbs by item identifier. * Gets the breadcrumbs by item identifier.
* *
* @param itemIdentifier the item identifier * @param itemId the item id
* @param includeItemAsParent the include item as parent
* @return the breadcrumbs by item identifier * @return the breadcrumbs by item identifier
* @throws Exception the exception * @throws Exception the exception
*/ */
//List<Item> getBreadcrumbsByItemIdentifier(String itemIdentifier, boolean includeItemAsParent) throws Exception; // List<Item> getBreadcrumbsByItemIdentifier(String itemIdentifier, boolean
// includeItemAsParent) throws Exception;
/** /**
* Gets the public link for item id. * Gets the public link for item id.
@ -96,4 +103,13 @@ public interface WorkspaceExplorerAppService extends RemoteService {
*/ */
String getFolderIdFromEncrypted(String encryptedFolderId) throws Exception; String getFolderIdFromEncrypted(String encryptedFolderId) throws Exception;
/**
* Gets the url by id.
*
* @param itemId the item id
* @return the url by id
* @throws Exception the exception
*/
String getUrlById(String itemId) throws Exception;
} }

View File

@ -64,12 +64,14 @@ public interface WorkspaceExplorerAppServiceAsync {
/** /**
* Gets the breadcrumbs by item identifier. * Gets the breadcrumbs by item identifier.
* *
* @param itemIdentifier the item identifier * @param showableTypes the showable types
* @param includeItemAsParent the include item as parent * @param purgeEmpyFolders the purge empy folders
* @param asyncCallback the async callback * @param filterCriteria the filter criteria
* @param asyncCallback the async callback
* @return the breadcrumbs by item identifier * @return the breadcrumbs by item identifier
*/ */
//public void getBreadcrumbsByItemIdentifier(String itemIdentifier, boolean includeItemAsParent, AsyncCallback<List<Item>> asyncCallback); // public void getBreadcrumbsByItemIdentifier(String itemIdentifier, boolean
// includeItemAsParent, AsyncCallback<List<Item>> asyncCallback);
/** /**
* Gets the my special folder. * Gets the my special folder.
@ -95,4 +97,13 @@ public interface WorkspaceExplorerAppServiceAsync {
void getBreadcrumbsByItemIdentifierToParentLimit(String itemIdentifier, String parentLimit, void getBreadcrumbsByItemIdentifierToParentLimit(String itemIdentifier, String parentLimit,
boolean includeItemAsParent, AsyncCallback<List<Item>> callback); boolean includeItemAsParent, AsyncCallback<List<Item>> callback);
/**
* Gets the url by id.
*
* @param itemId the item id
* @param callback the callback
* @return the url by id
*/
void getUrlById(String itemId, AsyncCallback<String> callback);
} }

View File

@ -4,7 +4,7 @@
package org.gcube.portlets.user.workspaceexplorerapp.client.view; package org.gcube.portlets.user.workspaceexplorerapp.client.view;
import org.gcube.portlets.user.workspaceexplorerapp.client.grid.MenuMoreOptionsOnItem; import org.gcube.portlets.user.workspaceexplorerapp.client.grid.MenuMoreOptionsOnItem;
import org.gcube.portlets.user.workspaceexplorerapp.shared.ItemInterface; import org.gcube.portlets.user.workspaceexplorerapp.shared.Item;
import com.google.gwt.core.shared.GWT; import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.shared.HandlerManager; import com.google.gwt.event.shared.HandlerManager;
@ -30,7 +30,7 @@ public class PopupContextMenu extends PopupPanel{
* @param eventBus the event bus * @param eventBus the event bus
* @param itemToDownload the item to download * @param itemToDownload the item to download
*/ */
public PopupContextMenu(boolean autohide, HandlerManager eventBus, ItemInterface itemToDownload) { public PopupContextMenu(boolean autohide, HandlerManager eventBus, Item itemToDownload) {
super(autohide); super(autohide);
GWT.log("PopupContextMenu opened"); GWT.log("PopupContextMenu opened");
menuOpts = new MenuMoreOptionsOnItem(eventBus); menuOpts = new MenuMoreOptionsOnItem(eventBus);

View File

@ -1,5 +1,4 @@
package org.gcube.portlets.user.workspaceexplorerapp.client.view; package org.gcube.portlets.user.workspaceexplorerapp.client.view;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
@ -8,6 +7,7 @@ import java.util.Set;
import org.gcube.portlets.user.workspaceexplorerapp.client.Util; import org.gcube.portlets.user.workspaceexplorerapp.client.Util;
import org.gcube.portlets.user.workspaceexplorerapp.client.WorkspaceExplorerApp; import org.gcube.portlets.user.workspaceexplorerapp.client.WorkspaceExplorerApp;
import org.gcube.portlets.user.workspaceexplorerapp.client.WorkspaceExplorerAppConstants; import org.gcube.portlets.user.workspaceexplorerapp.client.WorkspaceExplorerAppConstants;
import org.gcube.portlets.user.workspaceexplorerapp.client.event.LoadFolderEvent;
import org.gcube.portlets.user.workspaceexplorerapp.client.event.RootLoadedEvent; import org.gcube.portlets.user.workspaceexplorerapp.client.event.RootLoadedEvent;
import org.gcube.portlets.user.workspaceexplorerapp.client.grid.DisplayField; import org.gcube.portlets.user.workspaceexplorerapp.client.grid.DisplayField;
import org.gcube.portlets.user.workspaceexplorerapp.client.grid.ItemsTable; import org.gcube.portlets.user.workspaceexplorerapp.client.grid.ItemsTable;
@ -17,11 +17,14 @@ import org.gcube.portlets.user.workspaceexplorerapp.shared.Item;
import org.gcube.portlets.user.workspaceexplorerapp.shared.ItemType; import org.gcube.portlets.user.workspaceexplorerapp.shared.ItemType;
import com.github.gwtbootstrap.client.ui.Alert; import com.github.gwtbootstrap.client.ui.Alert;
import com.github.gwtbootstrap.client.ui.Button;
import com.github.gwtbootstrap.client.ui.constants.AlertType; import com.github.gwtbootstrap.client.ui.constants.AlertType;
import com.github.gwtbootstrap.client.ui.constants.ButtonType;
import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.shared.HandlerManager; import com.google.gwt.event.shared.HandlerManager;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.HorizontalPanel;
@ -60,6 +63,7 @@ public class WorkspaceExplorer implements ShowableTypes, SelectableTypes{
private ItemsTable itTables; private ItemsTable itTables;
private DisplayField[] displayFields; private DisplayField[] displayFields;
private HandlerManager eventBus; private HandlerManager eventBus;
private Item baseFolder;
/** /**
@ -100,11 +104,25 @@ public class WorkspaceExplorer implements ShowableTypes, SelectableTypes{
* *
* @param html the html * @param html the html
* @param type the type * @param type the type
* @param goToFolder the go to folder
*/ */
public void setAlert(String html, AlertType type){ public void setAlert(String html, AlertType type, final Item goToFolder){
explorerPanel.clear(); explorerPanel.clear();
alert.setHTML(html); alert.setHTML(html);
alert.setType(type); alert.setType(type);
if(goToFolder!=null) {
Button buttGoToHome = new Button("Go to Home");
buttGoToHome.setType(ButtonType.LINK);
buttGoToHome.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
eventBus.fireEvent(new LoadFolderEvent(goToFolder));
}
});
alert.add(buttGoToHome);
}
alert.setClose(false); alert.setClose(false);
explorerPanel.add(alert); explorerPanel.add(alert);
} }
@ -140,9 +158,9 @@ public class WorkspaceExplorer implements ShowableTypes, SelectableTypes{
WorkspaceExplorerAppConstants.workspaceNavigatorService.getRoot(showableTypesParam, purgeEmpyFolders, filterCriteria, new AsyncCallback<Item>() { WorkspaceExplorerAppConstants.workspaceNavigatorService.getRoot(showableTypesParam, purgeEmpyFolders, filterCriteria, new AsyncCallback<Item>() {
public void onFailure(Throwable caught) { public void onFailure(Throwable caught) {
Window.alert(caught.getMessage()); //Window.alert(caught.getMessage());
setAlert(caught.getMessage(), AlertType.ERROR);
GWT.log("Error loading workspace tree from server",caught); GWT.log("Error loading workspace tree from server",caught);
setAlert(caught.getMessage(), AlertType.ERROR, null);
} }
public void onSuccess(Item item) { public void onSuccess(Item item) {
@ -186,9 +204,9 @@ public class WorkspaceExplorer implements ShowableTypes, SelectableTypes{
@Override @Override
public void onFailure(Throwable caught) { public void onFailure(Throwable caught) {
Window.alert(caught.getMessage()); //Window.alert(caught.getMessage());
setAlert(caught.getMessage(), AlertType.ERROR);
GWT.log("Error loading workspace folder from server",caught); GWT.log("Error loading workspace folder from server",caught);
setAlert(caught.getMessage(), AlertType.ERROR, null);
} }
@Override @Override
@ -226,9 +244,10 @@ public class WorkspaceExplorer implements ShowableTypes, SelectableTypes{
@Override @Override
public void onFailure(Throwable caught) { public void onFailure(Throwable caught) {
Window.alert(caught.getMessage()); //Window.alert(caught.getMessage());
setAlert(caught.getMessage(), AlertType.ERROR);
GWT.log("Error loading workspace folder from server",caught); GWT.log("Error loading workspace folder from server",caught);
setAlert(caught.getMessage(), AlertType.ERROR, null);
} }
@Override @Override
@ -267,7 +286,18 @@ public class WorkspaceExplorer implements ShowableTypes, SelectableTypes{
// explorerPanel.add(itTables.getCellTable()); // explorerPanel.add(itTables.getCellTable());
GWT.log("added item: "+item.getName() +", to Explorer"); GWT.log("added item: "+item.getName() +", to Explorer");
} }
/**
* Sets the base folder.
*
* @param item the new base folder
*/
public void setBaseFolder(Item baseFolder) {
this.baseFolder = baseFolder;
}
/** /**
* Gets the panel. * Gets the panel.
* *
@ -358,4 +388,5 @@ public class WorkspaceExplorer implements ShowableTypes, SelectableTypes{
this.showableTypes.clear(); this.showableTypes.clear();
if (showableTypes!=null) for (ItemType type:showableTypes) this.showableTypes.add(type); if (showableTypes!=null) for (ItemType type:showableTypes) this.showableTypes.add(type);
} }
} }

View File

@ -17,7 +17,6 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
import org.apache.log4j.Logger;
import org.gcube.common.storagehubwrapper.server.tohl.Workspace; import org.gcube.common.storagehubwrapper.server.tohl.Workspace;
import org.gcube.common.storagehubwrapper.shared.tohl.WorkspaceFolder; import org.gcube.common.storagehubwrapper.shared.tohl.WorkspaceFolder;
import org.gcube.common.storagehubwrapper.shared.tohl.WorkspaceItem; import org.gcube.common.storagehubwrapper.shared.tohl.WorkspaceItem;
@ -33,6 +32,8 @@ import org.gcube.portlets.user.workspaceexplorerapp.server.workspace.AllowedMime
import org.gcube.portlets.user.workspaceexplorerapp.server.workspace.MimeTypeUtility; import org.gcube.portlets.user.workspaceexplorerapp.server.workspace.MimeTypeUtility;
import org.gcube.portlets.user.workspaceexplorerapp.server.workspace.WsInstanceUtil; import org.gcube.portlets.user.workspaceexplorerapp.server.workspace.WsInstanceUtil;
import org.gcube.portlets.user.workspaceexplorerapp.shared.HandlerResultMessage; import org.gcube.portlets.user.workspaceexplorerapp.shared.HandlerResultMessage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/** /**
* The Class DownloadServlet. * The Class DownloadServlet.
@ -48,7 +49,7 @@ public class DownloadWorkspaceExplorerServlet extends HttpServlet{
private static final long serialVersionUID = -8423345575690165644L; private static final long serialVersionUID = -8423345575690165644L;
protected static Logger logger = Logger.getLogger(DownloadWorkspaceExplorerServlet.class); protected static Logger logger = LoggerFactory.getLogger(DownloadWorkspaceExplorerServlet.class);
public static final String ERROR_ITEM_DOES_NOT_EXIST = "Item does not exist. It may have been deleted by another user"; public static final String ERROR_ITEM_DOES_NOT_EXIST = "Item does not exist. It may have been deleted by another user";
public static final String REDIRECTONERROR = "redirectonerror"; public static final String REDIRECTONERROR = "redirectonerror";

View File

@ -15,6 +15,8 @@ import org.gcube.common.storagehubwrapper.shared.tohl.WorkspaceFolder;
import org.gcube.common.storagehubwrapper.shared.tohl.WorkspaceItem; import org.gcube.common.storagehubwrapper.shared.tohl.WorkspaceItem;
import org.gcube.common.storagehubwrapper.shared.tohl.WorkspaceItemType; import org.gcube.common.storagehubwrapper.shared.tohl.WorkspaceItemType;
import org.gcube.common.storagehubwrapper.shared.tohl.items.FileItem; import org.gcube.common.storagehubwrapper.shared.tohl.items.FileItem;
import org.gcube.common.storagehubwrapper.shared.tohl.items.URLFileItem;
import org.gcube.common.storagehubwrapper.shared.tohl.items.URLItem;
import org.gcube.portlets.user.workspaceexplorerapp.client.WorkspaceExplorerAppConstants; import org.gcube.portlets.user.workspaceexplorerapp.client.WorkspaceExplorerAppConstants;
import org.gcube.portlets.user.workspaceexplorerapp.client.rpc.WorkspaceExplorerAppService; import org.gcube.portlets.user.workspaceexplorerapp.client.rpc.WorkspaceExplorerAppService;
import org.gcube.portlets.user.workspaceexplorerapp.server.workspace.ItemBuilder; import org.gcube.portlets.user.workspaceexplorerapp.server.workspace.ItemBuilder;
@ -145,6 +147,13 @@ public class WorkspaceExplorerAppServiceImpl extends RemoteServiceServlet implem
} catch (Exception e) { } catch (Exception e) {
logger.error("Error during item retrieving", e); logger.error("Error during item retrieving", e);
if(e.getMessage()!=null && e.getMessage().startsWith("Insufficent Privileges")) {
String erroMsg = item.getName()!=null?"The folder '"+item.getName()+"'":"This folder";
erroMsg+= " is not accessible as an anonymous user!";
throw new WorkspaceNavigatorServiceException(erroMsg);
}
throw new WorkspaceNavigatorServiceException("Sorry, an error occurred when performing get folder. Does it still exist?"); throw new WorkspaceNavigatorServiceException("Sorry, an error occurred when performing get folder. Does it still exist?");
} }
@ -197,10 +206,11 @@ public class WorkspaceExplorerAppServiceImpl extends RemoteServiceServlet implem
@Override @Override
public Item getMySpecialFolder(List<ItemType> showableTypes, boolean purgeEmpyFolders, FilterCriteria filterCriteria) throws WorkspaceNavigatorServiceException { public Item getMySpecialFolder(List<ItemType> showableTypes, boolean purgeEmpyFolders, FilterCriteria filterCriteria) throws WorkspaceNavigatorServiceException {
logger.info("called getMySpecialFolder showableTypes: "+showableTypes+" purgeEmpyFolders: "+purgeEmpyFolders+" filterCriteria: "+filterCriteria); logger.info("called getMySpecialFolder showableTypes: "+showableTypes+" purgeEmpyFolders: "+purgeEmpyFolders+" filterCriteria: "+filterCriteria);
throw new WorkspaceNavigatorServiceException("The method getMySpecialFolder is no longer maintained");
/*try {
try { Workspace workspace = getWorkspace()
Workspace workspace = getWorkspace();
WorkspaceItem folder = workspace.getMySpecialFolders(); WorkspaceItem folder = workspace.getMySpecialFolders();
long startTime = System.currentTimeMillis(); long startTime = System.currentTimeMillis();
@ -229,7 +239,7 @@ public class WorkspaceExplorerAppServiceImpl extends RemoteServiceServlet implem
} catch (Exception e) { } catch (Exception e) {
logger.error("Error during special folders retrieving", e); logger.error("Error during special folders retrieving", e);
throw new WorkspaceNavigatorServiceException("Sorry, an error occurred when performing get My Special Folder"); throw new WorkspaceNavigatorServiceException("Sorry, an error occurred when performing get My Special Folder");
} }*/
} }
/** /**
@ -357,7 +367,7 @@ public class WorkspaceExplorerAppServiceImpl extends RemoteServiceServlet implem
} catch (Exception e) { } catch (Exception e) {
logger.error("Error in get List Parents By Item Identifier ", e); logger.error("Error in get List Parents By Item Identifier ", e);
throw new Exception("Sorry, an error occurred during path retrieving!"); throw new Exception("Sorry, I'm not able to load the location of the folder. Does it still exist?");
} }
} }
@ -453,5 +463,34 @@ public class WorkspaceExplorerAppServiceImpl extends RemoteServiceServlet implem
throw new Exception("Sorry, an error occurred when decrypting the folder id. Try again or contact the support"); throw new Exception("Sorry, an error occurred when decrypting the folder id. Try again or contact the support");
} }
} }
@Override
public String getUrlById(String itemId) throws Exception {
try {
if (itemId == null)
throw new Exception("Workspace itemId is null");
logger.debug("get URL by id: " + itemId);
Workspace workspace = getWorkspace();
WorkspaceItem wsItem = workspace.getItemForExplorer(itemId, false, false, false);
// workspace
if (wsItem instanceof org.gcube.common.storagehubwrapper.shared.tohl.impl.URLFileItem) {
URLFileItem fileItem = (URLFileItem) wsItem;
return WsInstanceUtil.getUrl(workspace, fileItem);
} else if (wsItem instanceof URLItem) {
URLItem urlFile = (URLItem) wsItem;
return urlFile.getValue().toString();
} else {
throw new Exception("The itemId " + itemId + " is not a URLFileItem or a URLItem");
}
} catch (Exception e) {
logger.error("Error occurred in getUrlById: ", e);
throw new Exception(e.getMessage());
}
}
} }

View File

@ -223,6 +223,8 @@ public class ItemBuilder {
else else
return ItemType.UNKNOWN_TYPE; return ItemType.UNKNOWN_TYPE;
case URL_ITEM:
return ItemType.URL_DOCUMENT;
default: default:
return null; return null;

View File

@ -3,18 +3,24 @@
*/ */
package org.gcube.portlets.user.workspaceexplorerapp.server.workspace; package org.gcube.portlets.user.workspaceexplorerapp.server.workspace;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSession;
import org.gcube.common.storagehubwrapper.server.StorageHubWrapper; import org.gcube.common.storagehubwrapper.server.StorageHubWrapper;
import org.gcube.common.storagehubwrapper.server.tohl.Workspace;
import org.gcube.common.storagehubwrapper.shared.tohl.exceptions.InternalErrorException;
import org.gcube.common.storagehubwrapper.shared.tohl.items.URLFileItem;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
/** /**
* The Class WsUtil. * The Class WsUtil.
* *
* @author Francesco Mangiacrapa at ISTI-CNR Pisa (Italy) * @author Francesco Mangiacrapa at ISTI-CNR Pisa (Italy) Apr 9, 2020
* Apr 9, 2020
*/ */
public class WsInstanceUtil { public class WsInstanceUtil {
@ -35,18 +41,18 @@ public class WsInstanceUtil {
try { try {
String scope = getScope(httpSession); String scope = getScope(httpSession);
String applicationToken = getApplicationToken(httpSession); String applicationToken = getApplicationToken(httpSession);
if(applicationToken==null || applicationToken.isEmpty()) { if (applicationToken == null || applicationToken.isEmpty()) {
throw new Exception("No Application Token found. Impossible to istance the SHUB"); throw new Exception("No Application Token found. Impossible to istance the SHUB");
} }
return new StorageHubWrapper(scope, applicationToken, false, false, false); return new StorageHubWrapper(scope, applicationToken, false, false, false);
} catch (Exception e) { } catch (Exception e) {
logger.error("Error when instancing the storageHub wrapper", e); logger.error("Error when instancing the storageHub wrapper", e);
throw new Exception("Error on inizializing the StorageHub wrapper. Please contact the support!"); throw new Exception("Error on inizializing the StorageHub wrapper. Please contact the support!");
} }
} }
/** /**
* Gets the workpace. * Gets the workpace.
* *
@ -54,7 +60,8 @@ public class WsInstanceUtil {
* @return the workpace * @return the workpace
* @throws Exception the exception * @throws Exception the exception
*/ */
public static org.gcube.common.storagehubwrapper.server.tohl.Workspace getWorkspace(HttpSession httpSession) throws Exception { public static org.gcube.common.storagehubwrapper.server.tohl.Workspace getWorkspace(HttpSession httpSession)
throws Exception {
try { try {
StorageHubWrapper wrapper = getStorageHubWrapper(httpSession); StorageHubWrapper wrapper = getStorageHubWrapper(httpSession);
@ -89,7 +96,6 @@ public class WsInstanceUtil {
return scope; return scope;
} }
/** /**
* Gets the application token. * Gets the application token.
* *
@ -102,17 +108,54 @@ public class WsInstanceUtil {
String appTokenEnvVarName = null; String appTokenEnvVarName = null;
try { try {
logger.info("Reading " + ENVIRONMENT_VARIABLE_TOKEN_NAME + " from web.xml context"); logger.info("Reading " + ENVIRONMENT_VARIABLE_TOKEN_NAME + " from web.xml context");
appTokenEnvVarName = httpSession.getServletContext() appTokenEnvVarName = httpSession.getServletContext().getInitParameter(ENVIRONMENT_VARIABLE_TOKEN_NAME);
.getInitParameter(ENVIRONMENT_VARIABLE_TOKEN_NAME);
logger.info("Found param-value '" + appTokenEnvVarName logger.info("Found param-value '" + appTokenEnvVarName
+ "' from web context, reading its value from ENVIRONMENT"); + "' from web context, reading its value from ENVIRONMENT");
appToken = System.getenv(appTokenEnvVarName); appToken = System.getenv(appTokenEnvVarName);
logger.info("Value of " + appTokenEnvVarName + " from ENVIRONMENT is: " + appToken); logger.info("Value of " + appTokenEnvVarName + " from ENVIRONMENT is: " + appToken);
}catch (Exception e) { } catch (Exception e) {
logger.error("Error on reading the ENV VARIABLE '"+appTokenEnvVarName+"' from ENVIRONMENT"); logger.error("Error on reading the ENV VARIABLE '" + appTokenEnvVarName + "' from ENVIRONMENT");
} }
return appToken; return appToken;
} }
/**
* Gets the url.
*
* @param workspace the workspace
* @param fileItem the file item
* @return the url
* @throws Exception the exception
*/
public static String getUrl(Workspace workspace, URLFileItem fileItem) throws Exception {
try {
return readStreamAsString(
workspace.downloadFile(fileItem.getId(), fileItem.getName(), null, null).getStream());
} catch (IOException e) {
logger.error("GET URL error for file: " + fileItem, e);
throw new InternalErrorException(e.getMessage());
}
}
/**
* Read the entire input stream as string. The system encoding is used.
*
* @param is the input stream.
* @return the read string.
* @throws IOException Signals that an I/O exception has occurred.
*/
public static String readStreamAsString(InputStream is) throws java.io.IOException {
StringBuilder sb = new StringBuilder(1000);
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
char[] buf = new char[1024];
int numRead = 0;
while ((numRead = reader.read(buf)) != -1) {
sb.append(buf, 0, numRead);
}
reader.close();
return sb.toString();
}
} }

1
src/test/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/resources/

View File

@ -1,19 +0,0 @@
/**
*
*/
/**
*
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
* Sep 16, 2016
*/
public class TestFolderIDDecrypt {
public static void main(String[] args) {
}
}

View File

@ -0,0 +1,6 @@
package org.gcube.portlets.user.workspaceexplorerapp;
public class WorkspaceExplorerAppTests {
}