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 5fadeaa..5fa9de4 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 @@ -44,7 +44,7 @@ public class WorkspaceExplorerController implements EventHandler{ */ public WorkspaceExplorerController(){ bindEvents(); - workspaceExplorerPanel = new WorkspaceExplorerPanel(5, wsExplorer.getExplorerPanel(), breadcrumbs, navigation); + workspaceExplorerPanel = new WorkspaceExplorerPanel(5, wsExplorer.getPanel(), breadcrumbs, navigation); } /** @@ -118,4 +118,11 @@ public class WorkspaceExplorerController implements EventHandler{ public WorkspaceExplorerPanel getWorkspaceExplorerPanel() { return workspaceExplorerPanel; } + + /** + * @return the wsExplorer + */ + public WorkspaceExplorer getWsExplorer() { + return wsExplorer; + } } 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 9ef73db..1db9826 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 @@ -3,6 +3,7 @@ package org.gcube.portlets.widgets.wsexplorer.client.grid; import java.util.List; import org.gcube.portlets.widgets.wsexplorer.client.WorkspaceExplorerController; +import org.gcube.portlets.widgets.wsexplorer.client.notification.SelectionItem; import org.gcube.portlets.widgets.wsexplorer.client.resources.CellTableResources; import org.gcube.portlets.widgets.wsexplorer.shared.Item; @@ -24,7 +25,7 @@ import com.google.gwt.view.client.SingleSelectionModel; * * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it Feb 19, 2015 */ -public abstract class AbstractItemsCellTable { +public abstract class AbstractItemsCellTable implements SelectionItem{ protected CellTable cellTable; protected ListDataProvider dataProvider = new ListDataProvider(); @@ -39,8 +40,7 @@ public abstract class AbstractItemsCellTable { * @param pagination * the pagination */ - public abstract void initTable(AbstractCellTable ItemTable, - final SimplePager pager, final Pagination pagination); + public abstract void initTable(AbstractCellTable ItemTable, final SimplePager pager, final Pagination pagination); /** * Instantiates a new abstract Item table. @@ -66,7 +66,10 @@ public abstract class AbstractItemsCellTable { public void onSelectionChange(final SelectionChangeEvent event) { final Item selectedObject = ssm.getSelectedObject(); - GWT.log("Clicked: "+selectedObject); + if(selectedObject!=null){ + GWT.log("Clicked: "+selectedObject); + selectedItem(selectedObject); + } } }); 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 5cd00b2..00c8dca 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 @@ -14,8 +14,6 @@ import org.gcube.portlets.widgets.wsexplorer.shared.Item; import com.github.gwtbootstrap.client.ui.Pagination; import com.google.gwt.cell.client.Cell.Context; import com.google.gwt.cell.client.ImageResourceCell; -import com.google.gwt.dom.client.Element; -import com.google.gwt.dom.client.NativeEvent; import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.resources.client.ImageResource; import com.google.gwt.safehtml.shared.SafeHtmlBuilder; @@ -34,11 +32,12 @@ import com.google.gwt.view.client.SingleSelectionModel; * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it * Feb 19, 2015 */ -public class ItemsTable extends AbstractItemsCellTable{ +public class ItemsTable extends AbstractItemsCellTable { private Column icon; private TextColumn name; private TextColumn owner; + private Item selectedItem = null; /** * Instantiates a new items table. @@ -206,4 +205,20 @@ public class ItemsTable extends AbstractItemsCellTable{ // pagination.clear(); } + + /* (non-Javadoc) + * @see org.gcube.portlets.widgets.wsexplorer.client.grid.AbstractItemsCellTable#selectedItem(org.gcube.portlets.widgets.wsexplorer.shared.Item) + */ + @Override + public void selectedItem(Item item) { + this.selectedItem = item; + } + + /* (non-Javadoc) + * @see org.gcube.portlets.widgets.wsexplorer.client.notification.SelectionItemHandler#getSelectionItem() + */ + @Override + public Item getSelectedItem() { + return selectedItem; + } } diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/load/WorkspaceExplorerLoadDialog.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/load/WorkspaceExplorerLoadDialog.java index 64641c4..4d6a99d 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/load/WorkspaceExplorerLoadDialog.java +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/load/WorkspaceExplorerLoadDialog.java @@ -3,40 +3,49 @@ */ package org.gcube.portlets.widgets.wsexplorer.client.load; +import java.util.ArrayList; +import java.util.List; + import org.gcube.portlets.widgets.wsexplorer.client.WorkspaceExplorerConstants; import org.gcube.portlets.widgets.wsexplorer.client.WorkspaceExplorerController; +import org.gcube.portlets.widgets.wsexplorer.client.notification.WorskpaceExplorerNotification.HasWorskpaceExplorerNotificationListener; +import org.gcube.portlets.widgets.wsexplorer.client.notification.WorskpaceExplorerNotification.WorskpaceExplorerNotificationListener; +import org.gcube.portlets.widgets.wsexplorer.shared.Item; import com.github.gwtbootstrap.client.ui.Modal; import com.github.gwtbootstrap.client.ui.ModalFooter; -import com.google.gwt.dom.client.Style.Unit; +import com.github.gwtbootstrap.client.ui.event.HideEvent; +import com.github.gwtbootstrap.client.ui.event.HideHandler; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.user.client.ui.Button; -import com.google.gwt.user.client.ui.DialogBox; -import com.google.gwt.user.client.ui.DockPanel; -import com.google.gwt.user.client.ui.HasHorizontalAlignment; -import com.google.gwt.user.client.ui.HorizontalPanel; + /** - * The Class WorspaceNavigatorDialog. + * The Class WorkspaceExplorerLoadDialog. * * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it - * Jun 24, 2015 + * Jun 29, 2015 + * + * */ -public class WorkspaceExplorerLoadDialog extends Modal{ +public class WorkspaceExplorerLoadDialog extends Modal implements HasWorskpaceExplorerNotificationListener{ - private Button cancel; + private Button openButton; private WorkspaceExplorerLoadDialog INSTANCE = this; - private boolean isValidHide; + private boolean isSelect = false; private String captionTxt; private ModalFooter footer = new ModalFooter(); private WorkspaceExplorerController controller = new WorkspaceExplorerController(); + private List listeners = new ArrayList(); /** * Instantiates a new worspace navigator dialog. * * @param captionTxt sets the text inside the caption, if null sets "Workspace Explorer" + * + * Add {@link WorskpaceExplorerNotificationListener} to receive events */ public WorkspaceExplorerLoadDialog(String captionTxt) { this.captionTxt = (captionTxt==null || captionTxt.isEmpty())?WorkspaceExplorerConstants.WORKSPACE_EXPLORER_CAPTION:captionTxt; @@ -44,11 +53,21 @@ public class WorkspaceExplorerLoadDialog extends Modal{ setAnimation(false); setCloseVisible(true); setTitle(this.captionTxt); - isValidHide = false; - cancel = new Button("Close"); + openButton = new Button("Open"); setWidth(710); // setHeight("650px"); setMaxHeigth("500px"); + hide(false); + + addHideHandler(new HideHandler() { + + @Override + public void onHide(HideEvent hideEvent) { + if(!isSelect) + notifyAborted(); + } + }); + // DockPanel dock = new DockPanel(); // dock.setSpacing(5); @@ -80,21 +99,65 @@ public class WorkspaceExplorerLoadDialog extends Modal{ // // } // }); - cancel.addClickHandler(new ClickHandler() { + openButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { - isValidHide = false; - INSTANCE.hide(); + isSelect = false; + Item item = controller.getWsExplorer().getItemSelected(); + if(item!=null){ + isSelect = true; + INSTANCE.hide(); + notifySelectedItem(item); + } + } }); - footer.add(cancel); + footer.add(openButton); add(footer); } /** + * Notify selected item. + * + * @param selected the selected + */ + private void notifySelectedItem(Item selected){ + + for (WorskpaceExplorerNotificationListener worskpaceExplorerNotificationListener : listeners) { + worskpaceExplorerNotificationListener.onSelectedItem(selected); + } + } + + /** + * Notify aborted. + * + * @param selected the selected + */ + private void notifyAborted(){ + + for (WorskpaceExplorerNotificationListener worskpaceExplorerNotificationListener : listeners) { + worskpaceExplorerNotificationListener.onAborted(); + } + } + + /** + * Notify failed. + * + * @param t the t + */ + private void notifyFailed(Throwable t){ + + for (WorskpaceExplorerNotificationListener worskpaceExplorerNotificationListener : listeners) { + worskpaceExplorerNotificationListener.onFailed(t); + } + } + + /** + * Gets the caption txt. + * * @return the captionTxt */ public String getCaptionTxt() { @@ -107,11 +170,36 @@ public class WorkspaceExplorerLoadDialog extends Modal{ * @return the isValidHide */ public boolean isValidHide() { - return isValidHide; + return isSelect; } + /* (non-Javadoc) + * @see com.github.gwtbootstrap.client.ui.Modal#show() + */ @Override public void show() { super.show(); + isSelect = false; + } + + + /* (non-Javadoc) + * @see org.gcube.portlets.widgets.wsexplorer.client.notification.WorskpaceExplorerNotification.HasWorskpaceExplorerNotificationListener#addWorkspaceExplorerNotificationListener(org.gcube.portlets.widgets.wsexplorer.client.notification.WorskpaceExplorerNotification.WorskpaceExplorerNotificationListener) + */ + @Override + public void addWorkspaceExplorerNotificationListener(WorskpaceExplorerNotificationListener handler) { + if(handler!=null) + 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) + */ + @Override + public void removeWorkspaceExplorerNotificationListener(WorskpaceExplorerNotificationListener handler) { + if(handler!=null){ + if(listeners.contains(handler)) + listeners.remove(handler); + } } } diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/notification/SelectionItem.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/notification/SelectionItem.java new file mode 100644 index 0000000..e0b598f --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/notification/SelectionItem.java @@ -0,0 +1,32 @@ +/** + * + */ +package org.gcube.portlets.widgets.wsexplorer.client.notification; + +import org.gcube.portlets.widgets.wsexplorer.shared.Item; + + + + +/** + * The Class SelectionItemNotification. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Jun 29, 2015 + */ +public interface SelectionItem { + + /** + * Gets the selected item. + * + * @return the selected item + */ + Item getSelectedItem(); + + /** + * Selected item. + * + * @param item the item + */ + void selectedItem(Item item); +} \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/notification/WorskpaceExplorerNotification.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/notification/WorskpaceExplorerNotification.java new file mode 100644 index 0000000..39e6865 --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/notification/WorskpaceExplorerNotification.java @@ -0,0 +1,89 @@ +/** + * + */ +package org.gcube.portlets.widgets.wsexplorer.client.notification; + +import java.util.ArrayList; +import java.util.List; + +import org.gcube.portlets.widgets.wsexplorer.shared.Item; + + +/** + * The Class WorskpaceExplorerNotification. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Jun 29, 2015 + */ +public class WorskpaceExplorerNotification { + + + /** + * The listener interface for receiving worskpaceExplorerNotification events. + * The class that is interested in processing a worskpaceExplorerNotification + * event implements this interface, and the object created + * with that class is registered with a component using the + * component's addWorskpaceExplorerNotificationListener method. When + * the worskpaceExplorerNotification event occurs, that object's appropriate + * method is invoked. + * + * @see WorskpaceExplorerNotificationEvent + */ + public interface WorskpaceExplorerNotificationListener { + + + /** + * On selecte item. + * + * @param expressionWrapperNotification the expression wrapper notification + */ + void onSelectedItem(Item item); + + + /** + * On aborted. + */ + void onAborted(); + + + /** + * On failed. + * + * @param throwable the throwable + */ + void onFailed(Throwable throwable); + } + + + + /** + * The listener interface for receiving hasWorskpaceExplorerNotification events. + * The class that is interested in processing a hasWorskpaceExplorerNotification + * event implements this interface, and the object created + * with that class is registered with a component using the + * component's addHasWorskpaceExplorerNotificationListener method. When + * the hasWorskpaceExplorerNotification event occurs, that object's appropriate + * method is invoked. + * + * @see HasWorskpaceExplorerNotificationEvent + */ + public interface HasWorskpaceExplorerNotificationListener { + + /** + * Adds the workspace explorer notification listener. + * + * @param handler the handler + */ + public void addWorkspaceExplorerNotificationListener(WorskpaceExplorerNotificationListener handler); + + + /** + * Removes the workspace explorer notification listener. + * + * @param handler the handler + */ + public void removeWorkspaceExplorerNotificationListener(WorskpaceExplorerNotificationListener handler); + + } + +} \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/resources/CellTable.css b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/resources/CellTable.css index 987d0c8..5443ff5 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/resources/CellTable.css +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/resources/CellTable.css @@ -216,8 +216,7 @@ cursor: pointer; } -.cellTableKeyboardSelectedRow, .cellTableKeyboardSelectedRow td, - .cellTableKeyboardSelectedRow th { +.cellTableKeyboardSelectedRow, .cellTableKeyboardSelectedRow td, .cellTableKeyboardSelectedRow th { background: #3A87AD !important; } @@ -230,18 +229,15 @@ } -.cellTableSelectedRowCell, .cellTableSelectedRow td.cellTableSelectedRowCell - { +.cellTableSelectedRowCell, .cellTableSelectedRow td.cellTableSelectedRowCell { background: #3A87AD !important; } -.cellTableKeyboardSelectedRowCell, .cellTableKeyboardSelectedRow td.cellTableKeyboardSelectedRowCell - { +.cellTableKeyboardSelectedRowCell, .cellTableKeyboardSelectedRow td.cellTableKeyboardSelectedRowCell{ background: #3A87AD !important; } -.cellTableKeyboardSelectedCell, .cellTableKeyboardSelectedRow td.cellTableKeyboardSelectedCell - { +.cellTableKeyboardSelectedCell, .cellTableKeyboardSelectedRow td.cellTableKeyboardSelectedCell{ background: #3A87AD !important; color: white !important; } 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 6fcce6b..29d3647 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 @@ -49,6 +49,7 @@ public class WorkspaceExplorer { */ protected ScrollPanel explorerPanel; + private ItemsTable itTables; public WorkspaceExplorer() { // as default all items are showable and selectable @@ -186,7 +187,7 @@ public class WorkspaceExplorer { private void updateExplorer(ArrayList items){ GWT.log("workspace explorer updating.."); explorerPanel.clear(); - ItemsTable itTables = new ItemsTable(); + itTables = new ItemsTable(); itTables.addItems(items); explorerPanel.add(itTables.getCellTable()); GWT.log("workspace explorer updated"); @@ -195,9 +196,11 @@ public class WorkspaceExplorer { /** * @return the explorerPanel */ - public ScrollPanel getExplorerPanel() { + public ScrollPanel getPanel() { return explorerPanel; } - + public Item getItemSelected(){ + return itTables.getSelectedItem(); + } }