256: Workspace explorer

Task-Url: https://support.d4science.org/issues/256

Added handlers to select and abort

git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/widgets/workspace-explorer@115615 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
Francesco Mangiacrapa 2015-06-29 13:14:00 +00:00
parent c4dcb70c19
commit a7f22fde61
8 changed files with 269 additions and 36 deletions

View File

@ -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;
}
}

View File

@ -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<Item> cellTable;
protected ListDataProvider<Item> dataProvider = new ListDataProvider<Item>();
@ -39,8 +40,7 @@ public abstract class AbstractItemsCellTable {
* @param pagination
* the pagination
*/
public abstract void initTable(AbstractCellTable<Item> ItemTable,
final SimplePager pager, final Pagination pagination);
public abstract void initTable(AbstractCellTable<Item> 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);
}
}
});

View File

@ -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<Item, ImageResource> icon;
private TextColumn<Item> name;
private TextColumn<Item> 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;
}
}

View File

@ -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<WorskpaceExplorerNotificationListener> listeners = new ArrayList<WorskpaceExplorerNotificationListener>();
/**
* 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);
}
}
}

View File

@ -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);
}

View File

@ -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 <code>addWorskpaceExplorerNotificationListener<code> 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 <code>addHasWorskpaceExplorerNotificationListener<code> 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);
}
}

View File

@ -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;
}

View File

@ -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<Item> 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();
}
}