diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/WorkspaceExplorerConstants.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/WorkspaceExplorerConstants.java index 05be445..818a092 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/WorkspaceExplorerConstants.java +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/WorkspaceExplorerConstants.java @@ -1,5 +1,11 @@ package org.gcube.portlets.widgets.wsexplorer.client; +/** + * The Class WorkspaceExplorerConstants. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Jun 30, 2015 + */ public class WorkspaceExplorerConstants { public static final String SPECIAL_FOLDERS_LABEL = "MySpecialFolders"; diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/rpc/WorkspaceExplorerService.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/rpc/WorkspaceExplorerService.java index 28859cf..77a8f3d 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/rpc/WorkspaceExplorerService.java +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/rpc/WorkspaceExplorerService.java @@ -4,6 +4,7 @@ import java.util.List; import org.gcube.portlets.widgets.wsexplorer.shared.FilterCriteria; import org.gcube.portlets.widgets.wsexplorer.shared.Item; +import org.gcube.portlets.widgets.wsexplorer.shared.ItemCategory; import org.gcube.portlets.widgets.wsexplorer.shared.ItemType; import org.gcube.portlets.widgets.wsexplorer.shared.WorkspaceNavigatorServiceException; @@ -65,4 +66,11 @@ public interface WorkspaceExplorerService extends RemoteService { Item getMySpecialFolder(List showableTypes, boolean purgeEmpyFolders, FilterCriteria filterCriteria) throws WorkspaceNavigatorServiceException; + + /** + * @param category + * @return + * @throws WorkspaceNavigatorServiceException + */ + Item getItemByCategory(ItemCategory category)throws WorkspaceNavigatorServiceException; } diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/rpc/WorkspaceExplorerServiceAsync.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/rpc/WorkspaceExplorerServiceAsync.java index 217e000..2e35d93 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/rpc/WorkspaceExplorerServiceAsync.java +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/rpc/WorkspaceExplorerServiceAsync.java @@ -7,13 +7,15 @@ import java.util.List; import org.gcube.portlets.widgets.wsexplorer.shared.FilterCriteria; import org.gcube.portlets.widgets.wsexplorer.shared.Item; +import org.gcube.portlets.widgets.wsexplorer.shared.ItemCategory; import org.gcube.portlets.widgets.wsexplorer.shared.ItemType; import com.google.gwt.user.client.rpc.AsyncCallback; /** - * + * The Interface WorkspaceExplorerServiceAsync. + * * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it * Jun 24, 2015 */ @@ -76,8 +78,23 @@ public interface WorkspaceExplorerServiceAsync { boolean includeItemAsParent, AsyncCallback> asyncCallback); /** - * @param asyncCallback + * Gets the my special folder. + * + * @param showableTypes the showable types + * @param purgeEmpyFolders the purge empy folders + * @param filterCriteria the filter criteria + * @param asyncCallback the async callback + * @return the my special folder */ public void getMySpecialFolder(List showableTypes, boolean purgeEmpyFolders, FilterCriteria filterCriteria, AsyncCallback asyncCallback); + + /** + * Gets the item by category. + * + * @param category the category + * @param asyncCallback the async callback + * @return the item by category + */ + public void getItemByCategory(ItemCategory category, AsyncCallback asyncCallback); } diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/Navigation.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/Navigation.java index e32f944..1ec3410 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/Navigation.java +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/Navigation.java @@ -8,6 +8,8 @@ import org.gcube.portlets.widgets.wsexplorer.client.WorkspaceExplorerController; import org.gcube.portlets.widgets.wsexplorer.client.event.LoadMySpecialFolderEvent; import org.gcube.portlets.widgets.wsexplorer.client.event.LoadRootEvent; import org.gcube.portlets.widgets.wsexplorer.client.resources.WorkspaceExplorerResources; +import org.gcube.portlets.widgets.wsexplorer.shared.Item; +import org.gcube.portlets.widgets.wsexplorer.shared.ItemCategory; import com.github.gwtbootstrap.client.ui.NavWidget; import com.google.gwt.core.client.GWT; @@ -16,6 +18,7 @@ import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Widget; @@ -50,10 +53,24 @@ public class Navigation extends Composite{ initWidget(uiBinder.createAndBindUi(this)); getElement().getStyle().setMarginLeft(5.0, Unit.PX); home.setActive(true); - home.setText(WorkspaceExplorerConstants.HOME_LABEL); + + WorkspaceExplorerController.workspaceNavigatorService.getItemByCategory(ItemCategory.HOME, new AsyncCallback() { + + @Override + public void onSuccess(Item result) { + home.setText(result.getName()); + + } + + @Override + public void onFailure(Throwable caught) { + GWT.log(caught.getMessage()); + home.setText(WorkspaceExplorerConstants.HOME_LABEL); + } + }); + + home.setBaseIcon(WorkspaceExplorerResources.CustomIconType.home); - - home.addClickHandler(new ClickHandler() { @Override @@ -63,9 +80,24 @@ public class Navigation extends Composite{ }); vre_folder.setActive(true); - vre_folder.setText(WorkspaceExplorerConstants.VRE_FOLDERS_LABEL); vre_folder.setBaseIcon(WorkspaceExplorerResources.CustomIconType.vre_folder); + WorkspaceExplorerController.workspaceNavigatorService.getItemByCategory(ItemCategory.VRE_FOLDER, new AsyncCallback() { + + @Override + public void onSuccess(Item result) { + vre_folder.setText(result.getName()); + + } + + @Override + public void onFailure(Throwable caught) { + GWT.log(caught.getMessage()); + vre_folder.setText(WorkspaceExplorerConstants.VRE_FOLDERS_LABEL); + + } + }); + vre_folder.addClickHandler(new ClickHandler() { @Override diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/Navigation.ui.xml b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/Navigation.ui.xml index 978e0af..641508c 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/Navigation.ui.xml +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/Navigation.ui.xml @@ -1,7 +1,7 @@ - + diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/WorkspaceExplorer.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/WorkspaceExplorer.java index e72714a..cd2ae55 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/WorkspaceExplorer.java +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/WorkspaceExplorer.java @@ -13,8 +13,11 @@ import org.gcube.portlets.widgets.wsexplorer.shared.FilterCriteria; import org.gcube.portlets.widgets.wsexplorer.shared.Item; import org.gcube.portlets.widgets.wsexplorer.shared.ItemType; +import com.github.gwtbootstrap.client.ui.Alert; +import com.github.gwtbootstrap.client.ui.constants.AlertType; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Style.Unit; +import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.HorizontalPanel; @@ -41,6 +44,8 @@ public class WorkspaceExplorer implements ShowableTypes, SelectableTypes{ loading.getElement().getStyle().setPaddingLeft(5.0, Unit.PX); LOADING_PANEL.add(loading); } + + protected Alert alert = new Alert(); protected List selectableTypes = new ArrayList(); protected List showableTypes = new ArrayList(); protected List allowedMimeTypes = new ArrayList(); @@ -69,6 +74,14 @@ public class WorkspaceExplorer implements ShowableTypes, SelectableTypes{ explorerPanel = new ScrollPanel(); } + + protected void setAlert(String html, AlertType type){ + explorerPanel.clear(); + alert.setHTML(html); + alert.setType(type); + alert.setClose(false); + explorerPanel.add(alert); + } /** * Set the panel in loading mode. @@ -103,6 +116,8 @@ public class WorkspaceExplorer implements ShowableTypes, SelectableTypes{ WorkspaceExplorerController.workspaceNavigatorService.getRoot(showableTypesParam, purgeEmpyFolders, filterCriteria, new AsyncCallback() { public void onFailure(Throwable caught) { + Window.alert(caught.getMessage()); + setAlert(caught.getMessage(), AlertType.ERROR); GWT.log("Error loading workspace tree from server",caught); } @@ -140,8 +155,9 @@ public class WorkspaceExplorer implements ShowableTypes, SelectableTypes{ @Override public void onFailure(Throwable caught) { - GWT.log("Error loading workspace folder from server", - caught); + Window.alert(caught.getMessage()); + setAlert(caught.getMessage(), AlertType.ERROR); + GWT.log("Error loading workspace folder from server",caught); } @Override @@ -177,8 +193,9 @@ public class WorkspaceExplorer implements ShowableTypes, SelectableTypes{ @Override public void onFailure(Throwable caught) { - GWT.log("Error loading workspace folder from server", - caught); + Window.alert(caught.getMessage()); + setAlert(caught.getMessage(), AlertType.ERROR); + GWT.log("Error loading workspace folder from server",caught); } @Override diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/server/WorkspaceExplorerServiceImpl.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/server/WorkspaceExplorerServiceImpl.java index b5e284b..bac428f 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/server/WorkspaceExplorerServiceImpl.java +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/server/WorkspaceExplorerServiceImpl.java @@ -20,6 +20,7 @@ import org.gcube.portlets.widgets.wsexplorer.client.WorkspaceExplorerConstants; import org.gcube.portlets.widgets.wsexplorer.client.rpc.WorkspaceExplorerService; import org.gcube.portlets.widgets.wsexplorer.shared.FilterCriteria; import org.gcube.portlets.widgets.wsexplorer.shared.Item; +import org.gcube.portlets.widgets.wsexplorer.shared.ItemCategory; import org.gcube.portlets.widgets.wsexplorer.shared.ItemType; import org.gcube.portlets.widgets.wsexplorer.shared.WorkspaceNavigatorServiceException; import org.slf4j.Logger; @@ -100,40 +101,29 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement try { Workspace workspace = getWorkspace(); - _log.trace("Start getRoot..."); - -// WorkspaceFolder specials = workspace.getMySpecialFolders(); WorkspaceItem root = workspace.getRoot(); _log.trace("GetRoot - Replyiing root"); - long startTime = System.currentTimeMillis(); _log.trace("start time - " + startTime); Item rootItem = ItemBuilder.getItem(null, root, showableTypes, filterCriteria, true); + rootItem.setName(WorkspaceExplorerConstants.HOME_LABEL); /* SPECIAL FOLDERS Item specialFolders = ItemBuilder.getItem(null, specials, showableTypes, filterCriteria, 2); specialFolders.setShared(true); rootItem.addChild(specialFolders); */ - if(rootItem==null) - _log.trace("############ rootItem null"); - - _log.trace("Only showable types:"); - //printName("", rootItem); - if (purgeEmpyFolders) rootItem = ItemBuilder.purgeEmptyFolders(rootItem); _log.trace("Returning:"); - Long endTime = System.currentTimeMillis() - startTime; String time = String.format("%d msc %d sec", endTime, TimeUnit.MILLISECONDS.toSeconds(endTime)); _log.trace("end time - " + time); - //printName("", rootItem); Collections.sort(rootItem.getChildren(), new ItemComparator()); _log.info("Returning children size: "+rootItem.getChildren().size()); @@ -141,7 +131,7 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement } catch (Exception e) { _log.error("Error during root retrieving", e); - throw new WorkspaceNavigatorServiceException(e.getMessage()); + throw new WorkspaceNavigatorServiceException("Sorry, an error occurred when performing get root"); } } @@ -158,33 +148,53 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement WorkspaceItem folder = workspace.getItem(folderId); _log.trace("GetFolder - Replyiing folder"); - long startTime = System.currentTimeMillis(); _log.trace("start time - " + startTime); - Item itemFolder = ItemBuilder.getItem(null, folder, showableTypes, filterCriteria, true); - _log.trace("Only showable types:"); - //printName("", folderItem); - + if (purgeEmpyFolders) itemFolder = ItemBuilder.purgeEmptyFolders(itemFolder); _log.trace("Returning:"); - Long endTime = System.currentTimeMillis() - startTime; String time = String.format("%d msc %d sec", endTime, TimeUnit.MILLISECONDS.toSeconds(endTime)); _log.trace("end time - " + time); - //printName("", folderItem); - Collections.sort(itemFolder.getChildren(), new ItemComparator()); return itemFolder; } catch (Exception e) { _log.error("Error during folder retrieving", e); - throw new WorkspaceNavigatorServiceException(e.getMessage()); + throw new WorkspaceNavigatorServiceException("Sorry, an error occurred when performing get folder"); + } + } + + @Override + public Item getItemByCategory(ItemCategory category) throws WorkspaceNavigatorServiceException{ + _log.trace("GetItemByCategory category: "+category); + try { + Workspace workspace = getWorkspace(); + Item item = null; + + switch(category){ + case HOME:{ + WorkspaceItem root = workspace.getRoot(); + ASLSession session = getASLSession(this.getThreadLocalRequest().getSession()); + item = new Item(null, root.getId(), session.getUsername()+"'s", ItemType.ROOT, root.getPath(), root.getOwner().getPortalLogin(), root.isFolder()); + break; + } + case VRE_FOLDER:{ + WorkspaceItem folder = workspace.getMySpecialFolders(); + item = new Item(null, folder.getId(), WorkspaceExplorerConstants.VRE_FOLDERS_LABEL, ItemType.ROOT, folder.getPath(), folder.getOwner().getPortalLogin(), folder.isFolder()); + break; + } + } + return item; + } catch (Exception e) { + _log.error("Error during get item by category", e); + throw new WorkspaceNavigatorServiceException("Sorry, an error occurred when performing get item by category"); } } @@ -229,7 +239,7 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement } catch (Exception e) { _log.error("Error during special folders retrieving", e); - throw new WorkspaceNavigatorServiceException(e.getMessage()); + throw new WorkspaceNavigatorServiceException("Sorry, an error occurred when performing get My Special Folder"); } } diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/shared/ItemCategory.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/shared/ItemCategory.java new file mode 100644 index 0000000..4960de4 --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/shared/ItemCategory.java @@ -0,0 +1,17 @@ +/** + * + */ +package org.gcube.portlets.widgets.wsexplorer.shared; + + +/** + * The Enum ItemCategory. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Jun 30, 2015 + */ +public enum ItemCategory { + + HOME, + VRE_FOLDER; +}