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 5e5c7e2..3bdbe60 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 @@ -52,8 +52,8 @@ public class WorkspaceExplorerController implements EventHandler { public final static HandlerManager eventBus = new HandlerManager(null); private WorkspaceExplorerPanel workspaceExplorerPanel; private WorkspaceExplorer wsExplorer; - private Breadcrumbs breadcrumbs = new Breadcrumbs(); - private Navigation navigation = new Navigation(); + private Breadcrumbs breadcrumbs = new Breadcrumbs(eventBus); + private Navigation navigation = new Navigation(eventBus); public static final WorkspaceExplorerServiceAsync workspaceNavigatorService = GWT.create(WorkspaceExplorerService.class); @@ -66,7 +66,7 @@ public class WorkspaceExplorerController implements EventHandler { public WorkspaceExplorerController(String heightPanel){ bindEvents(); //As default all items are showable and selectable - wsExplorer = new WorkspaceExplorer(ItemType.values(), ItemType.values()); + wsExplorer = new WorkspaceExplorer(eventBus, ItemType.values(), ItemType.values()); workspaceExplorerPanel = new WorkspaceExplorerPanel(5, wsExplorer.getPanel(), breadcrumbs, navigation, heightPanel); } @@ -82,7 +82,7 @@ public class WorkspaceExplorerController implements EventHandler { public WorkspaceExplorerController(FilterCriteria filterCriteria, String heightPanel) { bindEvents(); //As default all items are showable and selectable - wsExplorer = new WorkspaceExplorer(filterCriteria, ItemType.values(), ItemType.values()); + wsExplorer = new WorkspaceExplorer(eventBus, filterCriteria, ItemType.values(), ItemType.values()); workspaceExplorerPanel = new WorkspaceExplorerPanel(5, wsExplorer.getPanel(), breadcrumbs, navigation, heightPanel); } diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/select/WorkspaceFolderExplorerSelectPanel.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/explore/WorkspaceResourcesExplorerPanel.java similarity index 71% rename from src/main/java/org/gcube/portlets/widgets/wsexplorer/client/select/WorkspaceFolderExplorerSelectPanel.java rename to src/main/java/org/gcube/portlets/widgets/wsexplorer/client/explore/WorkspaceResourcesExplorerPanel.java index 7ef80d7..6936502 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/select/WorkspaceFolderExplorerSelectPanel.java +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/explore/WorkspaceResourcesExplorerPanel.java @@ -1,18 +1,20 @@ /** * */ -package org.gcube.portlets.widgets.wsexplorer.client.select; +package org.gcube.portlets.widgets.wsexplorer.client.explore; import java.util.ArrayList; import java.util.List; import org.gcube.portlets.widgets.wsexplorer.client.Util; -import org.gcube.portlets.widgets.wsexplorer.client.WorkspaceExplorerConstants; import org.gcube.portlets.widgets.wsexplorer.client.WorkspaceExplorerController; import org.gcube.portlets.widgets.wsexplorer.client.event.ClickItemEvent; import org.gcube.portlets.widgets.wsexplorer.client.event.ClickItemEventHandler; +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.notification.WorkspaceExplorerSelectNotification.HasWorskpaceExplorerSelectNotificationListener; import org.gcube.portlets.widgets.wsexplorer.client.notification.WorkspaceExplorerSelectNotification.WorskpaceExplorerSelectNotificationListener; +import org.gcube.portlets.widgets.wsexplorer.client.view.Breadcrumbs; import org.gcube.portlets.widgets.wsexplorer.client.view.WorkspaceExplorer; import org.gcube.portlets.widgets.wsexplorer.client.view.grid.ItemsTable.DISPLAY_FIELD; import org.gcube.portlets.widgets.wsexplorer.shared.Item; @@ -25,6 +27,9 @@ import com.github.gwtbootstrap.client.ui.constants.ButtonType; import com.google.gwt.core.shared.GWT; 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.user.client.rpc.AsyncCallback; +import com.google.gwt.user.client.ui.DockPanel; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.ScrollPanel; import com.google.gwt.user.client.ui.VerticalPanel; @@ -37,9 +42,9 @@ import com.google.gwt.user.client.ui.VerticalPanel; * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it * Jul 28, 2015 */ -public class WorkspaceFolderExplorerSelectPanel extends ScrollPanel implements HasWorskpaceExplorerSelectNotificationListener{ +public class WorkspaceResourcesExplorerPanel extends DockPanel implements HasWorskpaceExplorerSelectNotificationListener{ - private WorkspaceFolderExplorerSelectPanel INSTANCE = this; + private WorkspaceResourcesExplorerPanel INSTANCE = this; private boolean isSelect = false; private String captionTxt; private Alert alertConfirm; @@ -48,7 +53,12 @@ public class WorkspaceFolderExplorerSelectPanel extends ScrollPanel implements H private VerticalPanel mainVP = new VerticalPanel(); private HorizontalPanel footerHP = new HorizontalPanel(); private WorkspaceExplorer wsExplorer; - + private ScrollPanel centerScrollable = new ScrollPanel(); + private ScrollPanel southPanel = new ScrollPanel(); + public int defaultWidth = 200; + public int defaultHeight = 200; + public final HandlerManager eventBus = new HandlerManager(null); + private Breadcrumbs breadcrumbs = new Breadcrumbs(eventBus); /** * Instantiates a new workspace folder explorer select panel. @@ -56,17 +66,16 @@ public class WorkspaceFolderExplorerSelectPanel extends ScrollPanel implements H * @param folderId the folder id * @throws Exception */ - public WorkspaceFolderExplorerSelectPanel(String folderId, String folderName) throws Exception { + public WorkspaceResourcesExplorerPanel(String folderId, String folderName) throws Exception { initExplorer(folderId, folderName, ItemType.values(), ItemType.values()); } private void initExplorer(String folderId, String folderName, ItemType[] selectableTypes, ItemType[] showableTypes) throws Exception{ bindEvents(); - wsExplorer = new WorkspaceExplorer(showableTypes, selectableTypes, new DISPLAY_FIELD[]{DISPLAY_FIELD.ICON, DISPLAY_FIELD.NAME}); + wsExplorer = new WorkspaceExplorer(eventBus, showableTypes, selectableTypes, new DISPLAY_FIELD[]{DISPLAY_FIELD.ICON, DISPLAY_FIELD.NAME}); Item item = new Item(folderId, folderName, true); wsExplorer.loadFolder(item); initPanel(""); - } /** @@ -76,7 +85,7 @@ public class WorkspaceFolderExplorerSelectPanel extends ScrollPanel implements H * @param showOnlyFolders the show only folders * @throws Exception */ - public WorkspaceFolderExplorerSelectPanel(String folderId, boolean showOnlyFolders) throws Exception { + public WorkspaceResourcesExplorerPanel(String folderId, boolean showOnlyFolders) throws Exception { if(showOnlyFolders){ ItemType[] itemsType = new ItemType[1]; @@ -92,7 +101,8 @@ public class WorkspaceFolderExplorerSelectPanel extends ScrollPanel implements H * Bind events. */ private void bindEvents(){ - WorkspaceExplorerController.eventBus.addHandler(ClickItemEvent.TYPE, new ClickItemEventHandler() { + + eventBus.addHandler(ClickItemEvent.TYPE, new ClickItemEventHandler() { @Override public void onClick(final ClickItemEvent clickItemEvent) { @@ -109,15 +119,68 @@ public class WorkspaceFolderExplorerSelectPanel extends ScrollPanel implements H isSelect = true; } }); + + eventBus.addHandler(LoadFolderEvent.TYPE, new LoadFolderEventHandler() { + + @Override + public void onLoadFolder(LoadFolderEvent loadFolderEvent) { + + if(loadFolderEvent.getTargetItem()!=null && loadFolderEvent.getTargetItem().isFolder()){ + try { + wsExplorer.loadFolder(loadFolderEvent.getTargetItem()); + loadParentBreadcrumbByItemId(loadFolderEvent.getTargetItem().getId(), true); + clearMoreInfo(); + } catch (Exception e) { + GWT.log(e.getMessage()); + } + } + } + }); } - @Override - public void onResize() { - super.onResize(); - GWT.log("on Resize..."); - adjustSize(); + + /** + * 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+"]"); + + WorkspaceExplorerController.workspaceNavigatorService.getBreadcrumbsByItemIdentifier(itemIdentifier, includeItemAsParent, new AsyncCallback>() { + + @Override + public void onFailure(Throwable caught) { + GWT.log(caught.getMessage()); + wsExplorer.setAlert(caught.getMessage(), AlertType.ERROR); + } + + @Override + public void onSuccess(List result) { + if(result!=null){ + breadcrumbs.setPath(result); + clearMoreInfo(); + } + } + }); } + /** + * Clear more info. + */ + private void clearMoreInfo(){ + southPanel.clear(); + } + +// @Override +// public void onResize() { +// super.onResize(); +// GWT.log("on Resize..."); +// adjustSize(); +// } + /* (non-Javadoc) * @see com.google.gwt.user.client.ui.Widget#onLoad() */ @@ -145,11 +208,19 @@ public class WorkspaceFolderExplorerSelectPanel extends ScrollPanel implements H if(this.captionTxt!=null && !this.captionTxt.isEmpty()) setTitle(this.captionTxt); - setWidth(WorkspaceExplorerConstants.WIDHT_DIALOG+"px"); + setSize(200+"px", 200+"px"); + add(breadcrumbs, DockPanel.NORTH); + +// centerScrollable.setSize(width+"px", height); setAlertConfirm("", false, null); + mainVP.add(wsExplorer.getPanel()); mainVP.add(footerHP); - add(mainVP); + centerScrollable.add(mainVP); + add(centerScrollable, DockPanel.CENTER); + + southPanel.ensureDebugId("SouthPanelWEP"); + add(footerHP, DockPanel.SOUTH); } 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 88eb1cc..8e80b56 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 @@ -6,7 +6,6 @@ package org.gcube.portlets.widgets.wsexplorer.client.view; import java.util.LinkedHashMap; import java.util.List; -import org.gcube.portlets.widgets.wsexplorer.client.WorkspaceExplorerController; import org.gcube.portlets.widgets.wsexplorer.client.event.BreadcrumbClickEvent; import org.gcube.portlets.widgets.wsexplorer.shared.Item; @@ -14,6 +13,7 @@ import com.github.gwtbootstrap.client.ui.NavLink; import com.google.gwt.core.client.GWT; 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.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.Composite; @@ -33,6 +33,8 @@ public class Breadcrumbs extends Composite { @UiField com.github.gwtbootstrap.client.ui.Breadcrumbs breadcrumbs; + + private HandlerManager eventBus; /** * The Interface BreadcrumbsUiBinder. @@ -46,8 +48,9 @@ public class Breadcrumbs extends Composite { /** * Instantiates a new breadcrumbs. */ - public Breadcrumbs() { + public Breadcrumbs(HandlerManager eventBus) { initWidget(uiBinder.createAndBindUi(this)); + this.eventBus = eventBus; breadcrumbs.setDivider(DIVIDER); // init(); // initBreadcrumb(true); @@ -109,7 +112,7 @@ public class Breadcrumbs extends Composite { Item target = hashListItems.get(navLink.getName()); // WorkspaceExplorerController.eventBus.fireEvent(new LoadFolderEvent(target)); - WorkspaceExplorerController.eventBus.fireEvent(new BreadcrumbClickEvent(target)); + eventBus.fireEvent(new BreadcrumbClickEvent(target)); } }); } 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 1ec3410..9ab51b8 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 @@ -16,6 +16,7 @@ import com.google.gwt.core.client.GWT; 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.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.rpc.AsyncCallback; @@ -37,6 +38,8 @@ public class Navigation extends Composite{ @UiField NavWidget vre_folder; + private HandlerManager eventBus; + /** * The Interface BreadcrumbsUiBinder. * @@ -47,10 +50,12 @@ public class Navigation extends Composite{ } /** + * @param eventbus * */ - public Navigation() { + public Navigation(HandlerManager eventBus) { initWidget(uiBinder.createAndBindUi(this)); + this.eventBus = eventBus; getElement().getStyle().setMarginLeft(5.0, Unit.PX); home.setActive(true); @@ -75,7 +80,7 @@ public class Navigation extends Composite{ @Override public void onClick(ClickEvent event) { - WorkspaceExplorerController.eventBus.fireEvent(new LoadRootEvent()); + Navigation.this.eventBus.fireEvent(new LoadRootEvent()); } }); @@ -102,7 +107,7 @@ public class Navigation extends Composite{ @Override public void onClick(ClickEvent event) { - WorkspaceExplorerController.eventBus.fireEvent(new LoadMySpecialFolderEvent()); + Navigation.this.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 77338e7..c8adc47 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 @@ -17,6 +17,7 @@ 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.event.shared.HandlerManager; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.HTML; @@ -54,17 +55,22 @@ public class WorkspaceExplorer implements ShowableTypes, SelectableTypes{ protected ScrollPanel explorerPanel; private ItemsTable itTables; private DISPLAY_FIELD[] displayFields; + private HandlerManager eventBus; + /** * Instantiates a new workspace explorer. * + * @param eventBus the event bus * @param showableTypes the showable types * @param selectableTypes the selectable types + * @param fields the fields */ - public WorkspaceExplorer(ItemType[] showableTypes, ItemType[] selectableTypes, DISPLAY_FIELD...fields) { + public WorkspaceExplorer(HandlerManager eventBus, ItemType[] showableTypes, ItemType[] selectableTypes, DISPLAY_FIELD...fields) { + this.eventBus = eventBus; setShowableTypes(showableTypes); setSelectableTypes(selectableTypes); - itTables = new ItemsTable(true, fields); + itTables = new ItemsTable(eventBus, true, fields); explorerPanel = new ScrollPanel(); } @@ -72,12 +78,14 @@ public class WorkspaceExplorer implements ShowableTypes, SelectableTypes{ /** * Instantiates a new workspace explorer. * + * @param eventBus the event bus * @param filterCriteria the filter criteria * @param showableTypes the showable types * @param selectableTypes the selectable types + * @param fields the fields */ - public WorkspaceExplorer(FilterCriteria filterCriteria, ItemType[] showableTypes, ItemType[] selectableTypes, DISPLAY_FIELD...fields) { - this(showableTypes, selectableTypes, fields); + public WorkspaceExplorer(HandlerManager eventBus, FilterCriteria filterCriteria, ItemType[] showableTypes, ItemType[] selectableTypes, DISPLAY_FIELD...fields) { + this(eventBus, showableTypes, selectableTypes, fields); this.filterCriteria = filterCriteria; } @@ -132,7 +140,7 @@ public class WorkspaceExplorer implements ShowableTypes, SelectableTypes{ } public void onSuccess(Item item) { - WorkspaceExplorerController.eventBus.fireEvent(new RootLoadedEvent(item)); + eventBus.fireEvent(new RootLoadedEvent(item)); updateExplorer(item.getChildren()); } @@ -249,6 +257,8 @@ public class WorkspaceExplorer implements ShowableTypes, SelectableTypes{ /** + * Gets the display fields. + * * @return the displayFields */ public DISPLAY_FIELD[] getDisplayFields() { @@ -257,6 +267,8 @@ public class WorkspaceExplorer implements ShowableTypes, SelectableTypes{ /** + * Sets the display fields. + * * @param displayFields the displayFields to set */ public void setDisplayFields(DISPLAY_FIELD[] displayFields) { diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/grid/AbstractItemsCellTable.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/grid/AbstractItemsCellTable.java index 4105a8a..78c560b 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/grid/AbstractItemsCellTable.java +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/grid/AbstractItemsCellTable.java @@ -2,7 +2,6 @@ package org.gcube.portlets.widgets.wsexplorer.client.view.grid; import java.util.List; -import org.gcube.portlets.widgets.wsexplorer.client.WorkspaceExplorerController; import org.gcube.portlets.widgets.wsexplorer.client.event.ClickItemEvent; import org.gcube.portlets.widgets.wsexplorer.client.resources.CellTableResources; import org.gcube.portlets.widgets.wsexplorer.shared.Item; @@ -16,6 +15,7 @@ import com.google.gwt.event.dom.client.ContextMenuEvent; import com.google.gwt.event.dom.client.ContextMenuHandler; import com.google.gwt.event.dom.client.DoubleClickEvent; import com.google.gwt.event.dom.client.DoubleClickHandler; +import com.google.gwt.event.shared.HandlerManager; import com.google.gwt.user.cellview.client.AbstractCellTable; import com.google.gwt.user.cellview.client.HasKeyboardSelectionPolicy.KeyboardSelectionPolicy; import com.google.gwt.user.cellview.client.SimplePager; @@ -40,6 +40,7 @@ public abstract class AbstractItemsCellTable { protected Item itemContextMenu = null; protected boolean showMoreInfo; protected final SingleSelectionModel ssm; + private final HandlerManager eventBus; /** * Inits the table. @@ -54,12 +55,16 @@ public abstract class AbstractItemsCellTable { public abstract void initTable(AbstractCellTable ItemTable, final SimplePager pager, final Pagination pagination); + + /** * Instantiates a new abstract items cell table. * - * @param fireMoreInfo the fire more info + * @param eventBus the event bus + * @param fireOnClick the fire on click */ - public AbstractItemsCellTable(boolean fireOnClick) { + public AbstractItemsCellTable(HandlerManager eventBus, boolean fireOnClick) { + this.eventBus = eventBus; this.showMoreInfo = fireOnClick; cellTable = new CellTable(1, CellTableResources.INSTANCE); cellTable.addStyleName("table-overflow"); @@ -81,7 +86,7 @@ public abstract class AbstractItemsCellTable { GWT.log("Clicked: "+selectedObject); // selectedItem(selectedObject); if(showMoreInfo) - WorkspaceExplorerController.eventBus.fireEvent(new ClickItemEvent(selectedObject)); + AbstractItemsCellTable.this.eventBus.fireEvent(new ClickItemEvent(selectedObject)); } } }); @@ -93,7 +98,7 @@ public abstract class AbstractItemsCellTable { Item selected = ssm.getSelectedObject(); if (selected != null) { GWT.log("Double Click: "+selected); - WorkspaceExplorerController.eventBus.fireEvent(new org.gcube.portlets.widgets.wsexplorer.client.event.LoadFolderEvent(selected)); + AbstractItemsCellTable.this.eventBus.fireEvent(new org.gcube.portlets.widgets.wsexplorer.client.event.LoadFolderEvent(selected)); } } }, @@ -124,7 +129,7 @@ public abstract class AbstractItemsCellTable { @Override public void execute() { - WorkspaceExplorerController.eventBus.fireEvent(new org.gcube.portlets.widgets.wsexplorer.client.event.LoadFolderEvent(itemContextMenu)); + AbstractItemsCellTable.this.eventBus.fireEvent(new org.gcube.portlets.widgets.wsexplorer.client.event.LoadFolderEvent(itemContextMenu)); } }; diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/grid/ItemsTable.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/grid/ItemsTable.java index cf9f672..42d4ddf 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/grid/ItemsTable.java +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/grid/ItemsTable.java @@ -18,6 +18,7 @@ import com.google.gwt.cell.client.ButtonCell; import com.google.gwt.cell.client.Cell.Context; import com.google.gwt.cell.client.ImageResourceCell; import com.google.gwt.dom.client.Style.Unit; +import com.google.gwt.event.shared.HandlerManager; import com.google.gwt.resources.client.ImageResource; import com.google.gwt.safehtml.shared.SafeHtml; import com.google.gwt.safehtml.shared.SafeHtmlBuilder; @@ -46,9 +47,10 @@ public class ItemsTable extends AbstractItemsCellTable implements SelectionItem{ /** * Instantiates a new items table. + * @param eventBus */ - public ItemsTable(boolean showMoreInfo, DISPLAY_FIELD[] fields) { - super(showMoreInfo); + public ItemsTable(HandlerManager eventBus, boolean showMoreInfo, DISPLAY_FIELD[] fields) { + super(eventBus, showMoreInfo); setDisplayFields(fields); initTable(cellTable, null, null); }