From bebfa3e47d0530d43a040cfab06d3af17068f909 Mon Sep 17 00:00:00 2001 From: Francesco Mangiacrapa Date: Thu, 25 Jun 2015 15:22:13 +0000 Subject: [PATCH] 256: Workspace explorer Task-Url: https://support.d4science.org/issues/256 Added LoadMySpecialFolder git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/widgets/workspace-explorer@115555 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../client/WorkspaceExplorerController.java | 32 +++++++++- .../client/event/LoadFolderEvent.java | 9 ++- .../event/LoadMySpecialFolderEvent.java | 35 ++++++++++ .../LoadMySpecialFolderEventHandler.java | 21 ++++++ .../client/event/LoadRootEvent.java | 10 ++- .../client/grid/AbstractItemsCellTable.java | 4 +- .../wsexplorer/client/grid/ItemsTable.java | 18 +++--- .../wsexplorer/client/resources/loading.gif | Bin 7146 -> 11976 bytes .../client/rpc/WorkspaceExplorerService.java | 11 ++++ .../rpc/WorkspaceExplorerServiceAsync.java | 5 ++ .../wsexplorer/client/view/Breadcrumbs.java | 5 +- .../wsexplorer/client/view/Navigation.java | 9 +++ .../client/view/WorkspaceExplorer.java | 60 ++++++++++++++---- .../server/WorkspaceExplorerServiceImpl.java | 45 +++++++++++++ .../widgets/wsexplorer/shared/Item.java | 26 ++++++-- 15 files changed, 247 insertions(+), 43 deletions(-) create mode 100644 src/main/java/org/gcube/portlets/widgets/wsexplorer/client/event/LoadMySpecialFolderEvent.java create mode 100644 src/main/java/org/gcube/portlets/widgets/wsexplorer/client/event/LoadMySpecialFolderEventHandler.java diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/WorkspaceExplorerController.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/WorkspaceExplorerController.java index 87d9ee0..5fadeaa 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/WorkspaceExplorerController.java +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/WorkspaceExplorerController.java @@ -7,6 +7,8 @@ import java.util.List; import org.gcube.portlets.widgets.wsexplorer.client.event.LoadFolderEvent; import org.gcube.portlets.widgets.wsexplorer.client.event.LoadFolderEventHandler; +import org.gcube.portlets.widgets.wsexplorer.client.event.LoadMySpecialFolderEvent; +import org.gcube.portlets.widgets.wsexplorer.client.event.LoadMySpecialFolderEventHandler; import org.gcube.portlets.widgets.wsexplorer.client.event.LoadRootEvent; import org.gcube.portlets.widgets.wsexplorer.client.event.LoadRootEventHandler; import org.gcube.portlets.widgets.wsexplorer.client.rpc.WorkspaceExplorerService; @@ -21,8 +23,10 @@ import com.google.gwt.event.shared.EventHandler; import com.google.gwt.event.shared.HandlerManager; import com.google.gwt.user.client.rpc.AsyncCallback; + /** - * + * The Class WorkspaceExplorerController. + * * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it * Jun 25, 2015 */ @@ -35,11 +39,17 @@ public class WorkspaceExplorerController implements EventHandler{ private Navigation navigation = new Navigation(); public static final WorkspaceExplorerServiceAsync workspaceNavigatorService = GWT.create(WorkspaceExplorerService.class); + /** + * Instantiates a new workspace explorer controller. + */ public WorkspaceExplorerController(){ bindEvents(); workspaceExplorerPanel = new WorkspaceExplorerPanel(5, wsExplorer.getExplorerPanel(), breadcrumbs, navigation); } + /** + * Bind events. + */ private void bindEvents() { eventBus.addHandler(LoadFolderEvent.TYPE, new LoadFolderEventHandler() { @@ -47,7 +57,7 @@ public class WorkspaceExplorerController implements EventHandler{ @Override public void onLoadFolder(LoadFolderEvent loadFolderEvent) { - if(loadFolderEvent.getTargetItem()!=null){ + if(loadFolderEvent.getTargetItem()!=null && loadFolderEvent.getTargetItem().isFolder()){ wsExplorer.loadFolder(loadFolderEvent.getTargetItem()); loadParentBreadcrumbByItemId(loadFolderEvent.getTargetItem().getId(), true); } @@ -58,13 +68,27 @@ public class WorkspaceExplorerController implements EventHandler{ @Override public void onLoadRoot(LoadRootEvent loadRootEvent) { - wsExplorer.loadTree(); breadcrumbs.init(); } }); + + eventBus.addHandler(LoadMySpecialFolderEvent.TYPE, new LoadMySpecialFolderEventHandler() { + + @Override + public void onLoadMySpecialFolder(LoadMySpecialFolderEvent loadMySpecialFolderEvent) { + wsExplorer.loadMySpecialFolder(); + breadcrumbs.init(); + } + }); } + /** + * Load parent breadcrumb by item id. + * + * @param itemIdentifier the item identifier + * @param includeItemAsParent the include item as parent + */ protected void loadParentBreadcrumbByItemId(final String itemIdentifier, boolean includeItemAsParent){ GWT.log("Reload Parent Breadcrumb: [Item id: "+itemIdentifier+"]"); @@ -87,6 +111,8 @@ public class WorkspaceExplorerController implements EventHandler{ } /** + * Gets the workspace explorer panel. + * * @return the workspaceExplorerPanel */ public WorkspaceExplorerPanel getWorkspaceExplorerPanel() { diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/event/LoadFolderEvent.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/event/LoadFolderEvent.java index 0d46f0a..40abac6 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/event/LoadFolderEvent.java +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/event/LoadFolderEvent.java @@ -7,7 +7,7 @@ import com.google.gwt.event.shared.GwtEvent; /** - * The Class DoubleClickEvent. + * The Class LoadFolderEvent. * * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it * Jun 25, 2015 @@ -17,8 +17,9 @@ public class LoadFolderEvent extends GwtEvent { private Item targetItem; + /** - * Instantiates a new double click event. + * Instantiates a new load folder event. * * @param target the target */ @@ -43,6 +44,8 @@ public class LoadFolderEvent extends GwtEvent { } /** + * Gets the target item. + * * @return the targetItem */ public Item getTargetItem() { @@ -50,6 +53,8 @@ public class LoadFolderEvent extends GwtEvent { } /** + * Sets the target item. + * * @param targetItem the targetItem to set */ public void setTargetItem(Item targetItem) { diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/event/LoadMySpecialFolderEvent.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/event/LoadMySpecialFolderEvent.java new file mode 100644 index 0000000..0d740c8 --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/event/LoadMySpecialFolderEvent.java @@ -0,0 +1,35 @@ +package org.gcube.portlets.widgets.wsexplorer.client.event; + +import com.google.gwt.event.shared.GwtEvent; + +/** + * + */ +public class LoadMySpecialFolderEvent extends GwtEvent { + + public static Type TYPE = new Type(); + + /** + * Instantiates a new double click event. + * + * @param target the target + */ + public LoadMySpecialFolderEvent() { + } + + /* (non-Javadoc) + * @see com.google.gwt.event.shared.GwtEvent#getAssociatedType() + */ + @Override + public Type getAssociatedType() { + return TYPE; + } + + /* (non-Javadoc) + * @see com.google.gwt.event.shared.GwtEvent#dispatch(com.google.gwt.event.shared.EventHandler) + */ + @Override + protected void dispatch(LoadMySpecialFolderEventHandler handler) { + handler.onLoadMySpecialFolder(this); + } +} diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/event/LoadMySpecialFolderEventHandler.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/event/LoadMySpecialFolderEventHandler.java new file mode 100644 index 0000000..da3aae4 --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/event/LoadMySpecialFolderEventHandler.java @@ -0,0 +1,21 @@ +package org.gcube.portlets.widgets.wsexplorer.client.event; + +import com.google.gwt.event.shared.EventHandler; + + + +/** + * The Interface LoadMySpecialFolderEventHandler. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Jun 25, 2015 + */ +public interface LoadMySpecialFolderEventHandler extends EventHandler { + + /** + * On load my special folder. + * + * @param loadMySpecialFolderEvent the load my special folder event + */ + void onLoadMySpecialFolder(LoadMySpecialFolderEvent loadMySpecialFolderEvent); +} \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/event/LoadRootEvent.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/event/LoadRootEvent.java index dfd0fbf..93c995d 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/event/LoadRootEvent.java +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/event/LoadRootEvent.java @@ -3,17 +3,15 @@ package org.gcube.portlets.widgets.wsexplorer.client.event; import com.google.gwt.event.shared.GwtEvent; /** - * + * The Class LoadRootEvent. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Jun 25, 2015 */ public class LoadRootEvent extends GwtEvent { public static Type TYPE = new Type(); - /** - * Instantiates a new double click event. - * - * @param target the target - */ public LoadRootEvent() { } diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/grid/AbstractItemsCellTable.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/grid/AbstractItemsCellTable.java index edeef4c..ddb1a34 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/grid/AbstractItemsCellTable.java +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/grid/AbstractItemsCellTable.java @@ -52,8 +52,8 @@ public abstract class AbstractItemsCellTable { cellTable = new CellTable(1, CellTableResources.INSTANCE); cellTable.addStyleName("table-overflow"); cellTable.setStriped(true); - cellTable.setBordered(true); -// cellTable.setCondensed(true); +// cellTable.setBordered(true); + cellTable.setCondensed(true); cellTable.setWidth("99%", true); dataProvider.addDataDisplay(cellTable); initTable(cellTable, null, null); diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/grid/ItemsTable.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/grid/ItemsTable.java index 235744b..5cd00b2 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/grid/ItemsTable.java +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/grid/ItemsTable.java @@ -95,14 +95,14 @@ public class ItemsTable extends AbstractItemsCellTable{ return Util.getImage(dataObj); } - @Override - public void onBrowserEvent(Context context, Element elem, Item object, NativeEvent event) { - super.onBrowserEvent(context, elem, object, event); - if ("click".equals(event.getType())) { -// Window.open(object.getURL(), "_blank", ""); -// GcubeReleasesAppController.eventBus.fireEvent(new PackageClickEvent(object, AccoutingReference.DOWNLOAD)); - } - } +// @Override +// public void onBrowserEvent(Context context, Element elem, Item object, NativeEvent event) { +// super.onBrowserEvent(context, elem, object, event); +// if ("click".equals(event.getType())) { +//// Window.open(object.getURL(), "_blank", ""); +//// GcubeReleasesAppController.eventBus.fireEvent(new PackageClickEvent(object, AccoutingReference.DOWNLOAD)); +// } +// } /* (non-Javadoc) * @see com.google.gwt.user.cellview.client.Column#render(com.google.gwt.cell.client.Cell.Context, java.lang.Object, com.google.gwt.safehtml.shared.SafeHtmlBuilder) @@ -113,7 +113,7 @@ public class ItemsTable extends AbstractItemsCellTable{ } }; - icon.setCellStyleNames("img-centered-clickable"); +// icon.setCellStyleNames("img-centered-clickable"); icon.setSortable(false); packageTable.addColumn(icon, ""); packageTable.setColumnWidth(icon, 10.0, Unit.PCT); diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/resources/loading.gif b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/resources/loading.gif index ae484b26586f2fda12e6c467ee450da8675fcd0e..ad155c0789ce0fbda1a5a89716e2a4b8057ed38b 100644 GIT binary patch literal 11976 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 I;xglZ0oT@V>;M1& 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 541b781..28859cf 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 @@ -54,4 +54,15 @@ public interface WorkspaceExplorerService extends RemoteService { Item getRoot(List showableTypes, boolean purgeEmpyFolders, FilterCriteria filterCriteria) throws WorkspaceNavigatorServiceException; + + /** + * @param showableTypes + * @param purgeEmpyFolders + * @param filterCriteria + * @return + * @throws WorkspaceNavigatorServiceException + */ + Item getMySpecialFolder(List showableTypes, + boolean purgeEmpyFolders, FilterCriteria filterCriteria) + 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 5ecfa91..217e000 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 @@ -75,4 +75,9 @@ public interface WorkspaceExplorerServiceAsync { public void getListParentsByItemIdentifier(String itemIdentifier, boolean includeItemAsParent, AsyncCallback> asyncCallback); + /** + * @param asyncCallback + */ + public void getMySpecialFolder(List showableTypes, boolean purgeEmpyFolders, FilterCriteria filterCriteria, AsyncCallback asyncCallback); + } diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/Breadcrumbs.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/Breadcrumbs.java index 17afba6..f446d64 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/Breadcrumbs.java +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/Breadcrumbs.java @@ -90,7 +90,7 @@ public class Breadcrumbs extends Composite { * the parent */ public void addNavigationLink(Item parent) { - if (parent != null && parent.getParent() != null) { + if (parent != null && parent.getParent() != null && !parent.isSpecialFolder()) { final NavLink navLink = new NavLink(parent.getName()); navLink.setName(parent.getId()); breadcrumbs.add(navLink); @@ -101,11 +101,10 @@ public class Breadcrumbs extends Composite { public void onClick(ClickEvent event) { Item target = hashListItems.get(navLink.getName()); - WorkspaceExplorerController.eventBus.fireEvent(new LoadFolderEvent(target)); } }); - } else { // is Root + } else { //IS ROOT OR SPECIAL FOLDER // final NavLink navLink = new NavLink(""); NavLink navLink = new NavLink(""); breadcrumbs.add(navLink);// INIT 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 4440541..34fc3ed 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 @@ -5,6 +5,7 @@ package org.gcube.portlets.widgets.wsexplorer.client.view; import org.gcube.portlets.widgets.wsexplorer.client.WorkspaceExplorerConstants; 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 com.github.gwtbootstrap.client.ui.NavWidget; @@ -63,5 +64,13 @@ public class Navigation extends Composite{ vre_folder.setActive(true); vre_folder.setText(WorkspaceExplorerConstants.VRE_FOLDERS_LABEL); vre_folder.setIcon(IconType.FOLDER_CLOSE); + + vre_folder.addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + WorkspaceExplorerController.eventBus.fireEvent(new LoadMySpecialFolderEvent()); + } + }); } } 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 b3fd2bf..6fcce6b 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 @@ -104,13 +104,7 @@ public class WorkspaceExplorer { } public void onSuccess(Item item) { - GWT.log("workspace tree retrieved."); - // then we remove the loading icon - explorerPanel.clear(); - ItemsTable itTables = new ItemsTable(); - itTables.addItems(item.getChildren()); - explorerPanel.add(itTables.getCellTable()); - GWT.log("workspace tree loaded"); + updateExplorer(item.getChildren()); } }); @@ -147,17 +141,57 @@ public class WorkspaceExplorer { @Override public void onSuccess(Item result) { - GWT.log("workspace folder retrieved."); - explorerPanel.clear(); - ItemsTable itTables = new ItemsTable(); - itTables.addItems(result.getChildren()); - explorerPanel.add(itTables.getCellTable()); - GWT.log("workspace folder loaded"); + updateExplorer(result.getChildren()); } }); } } + /** + * Load the Workspace Tree. + */ + public void loadMySpecialFolder() { + GWT.log("loading folder data"); + setLoading(); + + + // we make a copy of showable types + List showableTypesParam = new ArrayList(showableTypes); + + // we get sure that folders are displayed + for (ItemType folder : Util.FOLDERS) { + if (!showableTypesParam.contains(folder)) + showableTypesParam.add(folder); + } + + boolean purgeEmpyFolders = !showEmptyFolders; + FilterCriteria filterCriteria = new FilterCriteria(allowedMimeTypes,requiredProperties); + + GWT.log("loading workspace tree from server"); + WorkspaceExplorerController.workspaceNavigatorService.getMySpecialFolder(showableTypesParam, purgeEmpyFolders, filterCriteria, new AsyncCallback() { + + @Override + public void onFailure(Throwable caught) { + GWT.log("Error loading workspace folder from server", + caught); + } + + @Override + public void onSuccess(Item items) { + updateExplorer(items.getChildren()); + } + }); + } + + private void updateExplorer(ArrayList items){ + GWT.log("workspace explorer updating.."); + explorerPanel.clear(); + ItemsTable itTables = new ItemsTable(); + itTables.addItems(items); + explorerPanel.add(itTables.getCellTable()); + GWT.log("workspace explorer updated"); + } + /** * @return the explorerPanel */ 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 88aaf6f..47c1804 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 @@ -16,6 +16,7 @@ import org.gcube.common.homelibrary.home.workspace.Workspace; import org.gcube.common.homelibrary.home.workspace.WorkspaceFolder; import org.gcube.common.homelibrary.home.workspace.WorkspaceItem; import org.gcube.common.homelibrary.home.workspace.exceptions.WorkspaceFolderNotFoundException; +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; @@ -186,6 +187,50 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement throw new WorkspaceNavigatorServiceException(e.getMessage()); } } + + /** + * {@inheritDoc} + */ + @Override + public Item getMySpecialFolder(List showableTypes, boolean purgeEmpyFolders, FilterCriteria filterCriteria) throws WorkspaceNavigatorServiceException { + _log.trace("GetMySpecialFolder showableTypes: "+showableTypes+" purgeEmpyFolders: "+purgeEmpyFolders+" filterCriteria: "+filterCriteria); + + try { + + Workspace workspace = getWorkspace(); + WorkspaceItem folder = workspace.getMySpecialFolders(); + + long startTime = System.currentTimeMillis(); + _log.trace("start time - " + startTime); + + + Item itemFolder = ItemBuilder.getItem(null, folder, showableTypes, filterCriteria, true); + itemFolder.setName(WorkspaceExplorerConstants.SPECIAL_FOLDERS_LABEL); + itemFolder.setSpecialFolder(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 special folders retrieving", e); + throw new WorkspaceNavigatorServiceException(e.getMessage()); + } + } + /** * {@inheritDoc} diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/shared/Item.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/shared/Item.java index 9349d8c..4d972c5 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/shared/Item.java +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/shared/Item.java @@ -26,7 +26,8 @@ public class Item implements IsSerializable{ protected ArrayList children; private String owner; private boolean isFolder; - + private boolean isSpecialFolder; + /** * Instantiates a new item. */ @@ -191,6 +192,19 @@ public class Item implements IsSerializable{ children.remove(child); } + /** + * @return the isSpecialFolder + */ + public boolean isSpecialFolder() { + return isSpecialFolder; + } + + /** + * @param isSpecialFolder the isSpecialFolder to set + */ + public void setSpecialFolder(boolean isSpecialFolder) { + this.isSpecialFolder = isSpecialFolder; + } /** @@ -253,7 +267,9 @@ public class Item implements IsSerializable{ @Override public String toString() { StringBuilder builder = new StringBuilder(); - builder.append("Item [id="); + builder.append("Item [parent="); + builder.append(parent); + builder.append(", id="); builder.append(id); builder.append(", name="); builder.append(name); @@ -261,14 +277,14 @@ public class Item implements IsSerializable{ builder.append(type); builder.append(", path="); builder.append(path); - builder.append(", shared="); + builder.append(", isSharedFolder="); builder.append(isSharedFolder); - builder.append(", children="); - builder.append(children); builder.append(", owner="); builder.append(owner); builder.append(", isFolder="); builder.append(isFolder); + builder.append(", isSpecialFolder="); + builder.append(isSpecialFolder); builder.append("]"); return builder.toString(); }