256: Workspace explorer

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

Enhancements

git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/widgets/workspace-explorer@117008 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
Francesco Mangiacrapa 2015-07-06 10:27:48 +00:00
parent f5933696b7
commit 706f53b60f
15 changed files with 638 additions and 48 deletions

View File

@ -11,6 +11,8 @@ import org.gcube.portlets.widgets.wsexplorer.client.event.LoadMySpecialFolderEve
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.event.MoreInfoShowEvent;
import org.gcube.portlets.widgets.wsexplorer.client.event.MoreInfoShowEventHandler;
import org.gcube.portlets.widgets.wsexplorer.client.rpc.WorkspaceExplorerService;
import org.gcube.portlets.widgets.wsexplorer.client.rpc.WorkspaceExplorerServiceAsync;
import org.gcube.portlets.widgets.wsexplorer.client.view.Breadcrumbs;
@ -20,6 +22,7 @@ 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.github.gwtbootstrap.client.ui.Alert;
import com.github.gwtbootstrap.client.ui.constants.AlertType;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.shared.EventHandler;
@ -97,6 +100,25 @@ public class WorkspaceExplorerController implements EventHandler {
}
});
eventBus.addHandler(MoreInfoShowEvent.TYPE, new MoreInfoShowEventHandler() {
@Override
public void onMoreInfo(MoreInfoShowEvent moreInfoShowEvent) {
if(moreInfoShowEvent.getItem()!=null){
workspaceExplorerPanel.getSouthPanel().clear();
Alert alert = new Alert();
alert.setText(moreInfoShowEvent.getItem().toString());
alert.setType(AlertType.INFO);
alert.setClose(true);
workspaceExplorerPanel.getSouthPanel().add(alert);
// GWT.log("onMoreInfo");
// setupPopover(navigation.getMoreInfoPanel(), moreInfoShowEvent.getItem().getName(), "Info "+moreInfoShowEvent.getItem().getName()).show();
}
}
});
eventBus.addHandler(LoadMySpecialFolderEvent.TYPE, new LoadMySpecialFolderEventHandler() {
@Override

View File

@ -22,6 +22,7 @@ public class WorkspaceExplorerPanel extends DockPanel{
private ScrollPanel westPanel = new ScrollPanel();
private ScrollPanel centerScrollable = new ScrollPanel();
private ScrollPanel southPanel = new ScrollPanel();
/**
* Instantiates a new workspace explorer panel.
@ -38,16 +39,25 @@ public class WorkspaceExplorerPanel extends DockPanel{
// setHorizontalAlignment(DockPanel.ALIGN_CENTER);
add(breadcrumbs, DockPanel.NORTH);
// northPanel.add(breadcrumbs);
southPanel.ensureDebugId("SouthPanelWEP");
add(southPanel, DockPanel.SOUTH);
westPanel.setWidth(west_width+"px");
westPanel.add(navigation);
add(westPanel, DockPanel.WEST);
centerScrollable.setSize(width+"px", height+"px");
centerScrollable.add(wsExplorer);
add(centerScrollable, DockPanel.CENTER);
}
/**
* @return the southPanel
*/
public ScrollPanel getSouthPanel() {
return southPanel;
}
/**
* Gets the west panel.
*

View File

@ -0,0 +1,48 @@
package org.gcube.portlets.widgets.wsexplorer.client.event;
import org.gcube.portlets.widgets.wsexplorer.shared.Item;
import com.google.gwt.event.shared.GwtEvent;
/**
* The Class DisplaySelectedReleaseEvent.
*
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
* Feb 19, 2015
*/
public class MoreInfoShowEvent extends GwtEvent<MoreInfoShowEventHandler> {
public static Type<MoreInfoShowEventHandler> TYPE = new Type<MoreInfoShowEventHandler>();
private Item item;
/**
* Instantiates a new display selected release event.
*
* @param release the release
*/
public MoreInfoShowEvent(Item item) {
this.item = item;
}
/* (non-Javadoc)
* @see com.google.gwt.event.shared.GwtEvent#getAssociatedType()
*/
@Override
public Type<MoreInfoShowEventHandler> getAssociatedType() {
return TYPE;
}
/* (non-Javadoc)
* @see com.google.gwt.event.shared.GwtEvent#dispatch(com.google.gwt.event.shared.EventHandler)
*/
@Override
protected void dispatch(MoreInfoShowEventHandler handler) {
handler.onMoreInfo(this);
}
/**
* @return the item
*/
public Item getItem() {
return item;
}
}

View File

@ -0,0 +1,17 @@
package org.gcube.portlets.widgets.wsexplorer.client.event;
import com.google.gwt.event.shared.EventHandler;
/**
* The Interface DisplaySelectedReleaseEventHandler.
*
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
* Feb 19, 2015
*/
public interface MoreInfoShowEventHandler extends EventHandler {
/**
* @param moreInfoShowEvent
*/
void onMoreInfo(MoreInfoShowEvent moreInfoShowEvent);
}

View File

@ -31,5 +31,8 @@ public interface WorkspaceExplorerIcons extends ClientBundle {
@Source("home.png")
ImageResource home();
@Source("info.png")
ImageResource info();
}

View File

@ -27,6 +27,11 @@ public class WorkspaceExplorerResources {
return AbstractImagePrototype.create(ICONS.loading());
}
public static AbstractImagePrototype getIconInfo() {
return AbstractImagePrototype.create(ICONS.info());
}
/** My custom base icon collection */
public enum CustomIconType implements BaseIconType {

Binary file not shown.

After

Width:  |  Height:  |  Size: 260 B

View File

@ -0,0 +1,321 @@
/**
*
*/
package org.gcube.portlets.widgets.wsexplorer.client.save;
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.event.LoadRootEvent;
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 org.gcube.portlets.widgets.wsexplorer.shared.ItemType;
import com.github.gwtbootstrap.client.ui.Alert;
import com.github.gwtbootstrap.client.ui.Button;
import com.github.gwtbootstrap.client.ui.Modal;
import com.github.gwtbootstrap.client.ui.ModalFooter;
import com.github.gwtbootstrap.client.ui.constants.AlertType;
import com.github.gwtbootstrap.client.ui.constants.ButtonType;
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;
/**
* The Class WorkspaceExplorerLoadDialog.
*
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
* Jun 30, 2015
*/
public class WorkspaceExplorerSaveDialog extends Modal implements HasWorskpaceExplorerNotificationListener{
public static final String SELECT = "Select";
public static final String MAX_HEIGHT_DIALOG = "500px";
public static final int WIDHT_DIALOG = 720;
private Button selectButton;
private WorkspaceExplorerSaveDialog INSTANCE = this;
private boolean isSelect = false;
private String captionTxt;
private ModalFooter footer = new ModalFooter();
private Alert alertConfirm;
private WorkspaceExplorerController controller = new WorkspaceExplorerController();
private List<WorskpaceExplorerNotificationListener> listeners = new ArrayList<WorskpaceExplorerNotificationListener>();
/**
* Instantiates a new workspace explorer load dialog.
*
* @param captionTxt the caption txt
* You can implement {@link WorskpaceExplorerNotificationListener} to receive events
*/
public WorkspaceExplorerSaveDialog(String captionTxt) {
WorkspaceExplorerController.eventBus.fireEvent(new LoadRootEvent());
initDialog(captionTxt);
}
/**
* Instantiates a new workspace explorer load dialog.
*
* @param captionTxt the caption txt
* @param showOnlyFolders the show only folders
*/
public WorkspaceExplorerSaveDialog(String captionTxt, boolean showOnlyFolders) {
if(showOnlyFolders){
ItemType[] itemsType = new ItemType[2];
itemsType[0] = ItemType.ROOT;
itemsType[1] = ItemType.FOLDER;
setSelectableTypes(itemsType);
setShowableTypes(itemsType);
}
WorkspaceExplorerController.eventBus.fireEvent(new LoadRootEvent());
initDialog(captionTxt);
}
/**
* Instantiates a new workspace explorer save dialog.
*
* @param captionTxt captionTxt sets the text inside the caption, if null sets "Workspace Explorer"
* @param selectableTypes the selectable types
* @param showableTypes the showable types
*
* You can implement {@link WorskpaceExplorerNotificationListener} to receive events
*/
public WorkspaceExplorerSaveDialog(String captionTxt, List<ItemType> selectableTypes, List<ItemType> showableTypes) {
if(selectableTypes!=null){
ItemType[] itemsType = new ItemType[selectableTypes.size()];
itemsType = selectableTypes.toArray(itemsType);
setSelectableTypes(selectableTypes.toArray(itemsType));
}
if(showableTypes!=null){
ItemType[] itemsType = new ItemType[showableTypes.size()];
itemsType = showableTypes.toArray(itemsType);
setShowableTypes(showableTypes.toArray(itemsType));
}
WorkspaceExplorerController.eventBus.fireEvent(new LoadRootEvent());
initDialog(captionTxt);
}
/**
* Inits the dialog.
*
* @param captionTxt the caption txt
*/
private void initDialog(String captionTxt) {
this.captionTxt = (captionTxt==null || captionTxt.isEmpty())?WorkspaceExplorerConstants.WORKSPACE_EXPLORER_CAPTION:captionTxt;
setAnimation(false);
setCloseVisible(true);
setTitle(this.captionTxt);
selectButton = new Button(SELECT);
selectButton.setType(ButtonType.PRIMARY);
setWidth(WIDHT_DIALOG);
setMaxHeigth(MAX_HEIGHT_DIALOG);
hide(false);
addHideHandler(new HideHandler() {
@Override
public void onHide(HideEvent hideEvent) {
if(!isSelect)
notifyAborted();
}
});
add(controller.getWorkspaceExplorerPanel());
selectButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
isSelect = false;
Item item = controller.getWsExplorer().getItemSelected();
if(item!=null){
isSelect = true;
INSTANCE.hide();
notifySelectedItem(item);
}else if(!controller.getWsExplorer().itemIsSelectable()){ //IGNORING ITEMS NOT SELECTABLE, USING BREADCRUMBS
Item itemB = controller.getBreadcrumbs().getLastParent();
if(itemB!=null){
setAlertConfirm("Selecting \""+itemB.getName()+"\", confirm?", true, itemB);
}
}
}
});
setAlertConfirm("", false, null);
footer.add(selectButton);
add(footer);
}
/**
* Sets the alert confirm.
*
* @param html the html
* @param bool the bool
*/
private void setAlertConfirm(String html, boolean show, final Item item){
try{
footer.remove(alertConfirm);
}catch(Exception e){
//silent
}
alertConfirm = new Alert();
alertConfirm.setText(html);
alertConfirm.setVisible(show);
alertConfirm.setClose(true);
alertConfirm.setType(AlertType.INFO);
Button yes = new Button("Yes");
yes.setType(ButtonType.LINK);
yes.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
if(item!=null){
isSelect = true;
INSTANCE.hide();
notifySelectedItem(item);
}
}
});
Button no = new Button("No");
no.setType(ButtonType.LINK);
no.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
alertConfirm.close();
}
});
alertConfirm.add(yes);
alertConfirm.add(no);
footer.insert(alertConfirm,0);
}
/**
* Notify selected item.
*
* @param selected the selected
*/
private void notifySelectedItem(Item selected){
for (WorskpaceExplorerNotificationListener worskpaceExplorerNotificationListener : listeners) {
worskpaceExplorerNotificationListener.onSelectedItem(selected);
}
}
/**
* Notify aborted.
*/
private void notifyAborted(){
for (WorskpaceExplorerNotificationListener worskpaceExplorerNotificationListener : listeners) {
worskpaceExplorerNotificationListener.onAborted();
}
}
/**
* Notify failed.
*
* @param t the t
*/
@SuppressWarnings("unused")
private void notifyFailed(Throwable t){
for (WorskpaceExplorerNotificationListener worskpaceExplorerNotificationListener : listeners) {
worskpaceExplorerNotificationListener.onFailed(t);
}
}
/**
* Gets the caption txt.
*
* @return the captionTxt
*/
public String getCaptionTxt() {
return captionTxt;
}
/**
* Checks if is valid hide.
*
* @return the isValidHide
*/
public boolean 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);
}
}
/**
* Set which items are selectable.
* @param selectableTypes the selectableTypes to set
*/
private void setSelectableTypes(ItemType ... selectableTypes) {
controller.setSelectableTypes(selectableTypes);
}
/**
* Gets the selectable types.
*
* @return the selectable types
*/
public List<ItemType> getSelectableTypes() {
return controller.getSelectableTypes();
}
/**
* Return the showable items.
* @return the showableTypes
*/
public List<ItemType> getShowableTypes() {
return controller.getShowableTypes();
}
/**
* Set the showable items. The folders items are show as default.
* @param showableTypes the showableTypes to set
*/
private void setShowableTypes(ItemType ... showableTypes) {
controller.setShowableTypes(showableTypes);
}
}

View File

@ -22,7 +22,6 @@ import com.github.gwtbootstrap.client.ui.constants.AlertType;
import com.github.gwtbootstrap.client.ui.constants.ButtonType;
import com.github.gwtbootstrap.client.ui.event.HideEvent;
import com.github.gwtbootstrap.client.ui.event.HideHandler;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
@ -50,7 +49,7 @@ public class WorkspaceExplorerSelectDialog extends Modal implements HasWorskpace
/**
* Instantiates a new workspace explorer load dialog.
* Instantiates a new workspace explorer select dialog.
*
* @param captionTxt the caption txt
* You can implement {@link WorskpaceExplorerNotificationListener} to receive events
@ -61,7 +60,7 @@ public class WorkspaceExplorerSelectDialog extends Modal implements HasWorskpace
}
/**
* Instantiates a new workspace explorer load dialog.
* Instantiates a new workspace explorer select dialog.
*
* @param captionTxt the caption txt
* @param showOnlyFolders the show only folders
@ -81,7 +80,7 @@ public class WorkspaceExplorerSelectDialog extends Modal implements HasWorskpace
}
/**
* Instantiates a new workspace explorer load dialog.
* Instantiates a new workspace explorer select dialog.
*
* @param captionTxt captionTxt sets the text inside the caption, if null sets "Workspace Explorer"
* @param selectableTypes the selectable types

View File

@ -20,6 +20,7 @@ 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.HorizontalPanel;
import com.google.gwt.user.client.ui.Widget;
/**

View File

@ -213,7 +213,7 @@ public class WorkspaceExplorer implements ShowableTypes, SelectableTypes{
private void updateExplorer(ArrayList<Item> items){
GWT.log("workspace explorer updating..");
explorerPanel.clear();
itTables = new ItemsTable();
itTables = new ItemsTable(true);
itTables.addItems(items);
explorerPanel.add(itTables.getCellTable());
GWT.log("workspace explorer updated");

View File

@ -37,6 +37,8 @@ public abstract class AbstractItemsCellTable implements SelectionItem{
protected CellTable<Item> cellTable;
protected ListDataProvider<Item> dataProvider = new ListDataProvider<Item>();
protected Item itemContextMenu = null;
protected boolean showMoreInfo;
/**
* Inits the table.
@ -52,11 +54,14 @@ public abstract class AbstractItemsCellTable implements SelectionItem{
/**
* Instantiates a new abstract Item table.
* @param showMoreInfo
* @param showMoreInfo
*
* @param showGroupId
* the show group id
*/
public AbstractItemsCellTable() {
public AbstractItemsCellTable(boolean showMoreInfo) {
this.showMoreInfo = showMoreInfo;
cellTable = new CellTable<Item>(1, CellTableResources.INSTANCE);
cellTable.addStyleName("table-overflow");
cellTable.setStriped(true);
@ -111,47 +116,50 @@ public abstract class AbstractItemsCellTable implements SelectionItem{
}
}); */
addContextMenu();
}
private void addContextMenu(){
MenuBar options = new MenuBar(true);
ScheduledCommand command = new ScheduledCommand() {
ScheduledCommand openCommand = new ScheduledCommand() {
@Override
public void execute() {
WorkspaceExplorerController.eventBus.fireEvent(new org.gcube.portlets.widgets.wsexplorer.client.event.LoadFolderEvent(getSelectedItem()));
WorkspaceExplorerController.eventBus.fireEvent(new org.gcube.portlets.widgets.wsexplorer.client.event.LoadFolderEvent(itemContextMenu));
}
};
MenuItem openItem = new MenuItem("Open", command);
MenuItem openItem = new MenuItem("Open", openCommand);
options.addItem(openItem);
final DialogBox menuWrapper = new DialogBox(true);
menuWrapper.getElement().getStyle().setBorderStyle(BorderStyle.NONE);
menuWrapper.getElement().getStyle().setZIndex(10000);
menuWrapper.add(options);
cellTable.sinkEvents(Event.ONCONTEXTMENU);
cellTable.addHandler(
new ContextMenuHandler() {
@Override
public void onContextMenu(ContextMenuEvent event) {
GWT.log("On Context Menu");
if(getSelectedItem().isFolder()){
event.preventDefault();
event.stopPropagation();
menuWrapper.setPopupPosition(event.getNativeEvent().getClientX(),event.getNativeEvent().getClientY());
menuWrapper.show();
}
}
}, ContextMenuEvent.getType()
);
cellTable.sinkEvents(Event.ONCONTEXTMENU);
cellTable.addHandler(new ContextMenuHandler() {
@Override
public void onContextMenu(ContextMenuEvent event) {
GWT.log("On Context Menu: " + event.getNativeEvent().getEventTarget().toString());
Item selectedObject = (Item) event.getSource();
itemContextMenu = selectedObject;
if (selectedObject != null && selectedObject.isFolder()) {
event.preventDefault();
event.stopPropagation();
menuWrapper.setPopupPosition(event.getNativeEvent().getClientX(), event.getNativeEvent().getClientY());
menuWrapper.show();
}
}
}, ContextMenuEvent.getType());
// ssm.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
//
// @Override
// public void onSelectionChange(SelectionChangeEvent event) {
// // changed the context menu selection
// GWT.log("Selected item is" + ssm.getSelectedObject());
//
// }
// });
}
/**

View File

@ -9,23 +9,38 @@ import java.util.List;
import java.util.Set;
import org.gcube.portlets.widgets.wsexplorer.client.Util;
import org.gcube.portlets.widgets.wsexplorer.client.WorkspaceExplorerController;
import org.gcube.portlets.widgets.wsexplorer.client.event.MoreInfoShowEvent;
import org.gcube.portlets.widgets.wsexplorer.client.resources.WorkspaceExplorerResources;
import org.gcube.portlets.widgets.wsexplorer.shared.Item;
import com.github.gwtbootstrap.client.ui.Pagination;
import com.github.gwtbootstrap.client.ui.Popover;
import com.github.gwtbootstrap.client.ui.Tooltip;
import com.github.gwtbootstrap.client.ui.constants.Placement;
import com.github.gwtbootstrap.client.ui.constants.Trigger;
import com.google.gwt.cell.client.ButtonCell;
import com.google.gwt.cell.client.Cell.Context;
import com.google.gwt.cell.client.FieldUpdater;
import com.google.gwt.cell.client.ImageCell;
import com.google.gwt.cell.client.ImageResourceCell;
import com.google.gwt.core.shared.GWT;
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.SafeHtml;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.safehtml.shared.SafeHtmlUtils;
import com.google.gwt.user.cellview.client.AbstractCellTable;
import com.google.gwt.user.cellview.client.Column;
import com.google.gwt.user.cellview.client.ColumnSortEvent.ListHandler;
import com.google.gwt.user.cellview.client.SimplePager;
import com.google.gwt.user.cellview.client.TextColumn;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.view.client.SelectionChangeEvent;
import com.google.gwt.view.client.SelectionChangeEvent.Handler;
import com.google.gwt.view.client.SingleSelectionModel;
import com.google.gwt.user.client.ui.Widget;
/**
* The Class PackagesTable.
*
@ -38,13 +53,13 @@ public class ItemsTable extends AbstractItemsCellTable {
private TextColumn<Item> name;
private TextColumn<Item> owner;
private Item selectedItem = null;
private Column<Item, ImageResource> moreInfo;
/**
* Instantiates a new items table.
*/
public ItemsTable() {
super();
public ItemsTable(boolean showMoreInfo) {
super(showMoreInfo);
}
/* (non-Javadoc)
@ -75,7 +90,7 @@ public class ItemsTable extends AbstractItemsCellTable {
* @see org.gcube.portlets.admin.gcubereleases.client.view.AbstractPackageTable#initTable(com.google.gwt.user.cellview.client.AbstractCellTable, com.google.gwt.user.cellview.client.SimplePager, com.github.gwtbootstrap.client.ui.Pagination)
*/
@Override
public void initTable(AbstractCellTable<Item> packageTable, final SimplePager pager, final Pagination pagination) {
public void initTable(final AbstractCellTable<Item> packageTable, final SimplePager pager, final Pagination pagination) {
packageTable.setEmptyTableWidget(new Label("No data."));
//ICONS
@ -115,7 +130,7 @@ public class ItemsTable extends AbstractItemsCellTable {
};
name.setSortable(true);
packageTable.addColumn(name, "Name");
packageTable.setColumnWidth(name, 60.0, Unit.PCT);
packageTable.setColumnWidth(name, 50.0, Unit.PCT);
ListHandler<Item> nameColumnHandler = new ListHandler<Item>(dataProvider.getList());
nameColumnHandler.setComparator(name, new Comparator<Item>() {
@ -147,14 +162,149 @@ public class ItemsTable extends AbstractItemsCellTable {
});
packageTable.addColumnSortHandler(ownerColumnHandler);
final SingleSelectionModel<Item> selectionModel = new SingleSelectionModel<Item>();
if(showMoreInfo){
/*
// ButtonCell.
final ButtonCell buttonCell = new ButtonCell();
final Column<Item, String> column = new Column<Item, String>(buttonCell) {
@Override
public String getValue(Item dataObj) {
return "Info";
}
@Override
public void render(Context context, Item object, SafeHtmlBuilder sb) {
super.render(context, object, sb);
}
};
column.setFieldUpdater(new FieldUpdater<Item, String>() {
@Override
public void update(int index, Item object, String value) {
GWT.log("mouseover mouseover mouseover");
Popover pop = new Popover();
pop.setHeading("Info");
pop.setText("MouseOver on");
pop.setPlacement(Placement.RIGHT);
pop.setHtml(true);
pop.setTrigger(Trigger.HOVER);
// pop.setWidget(buttonCell);
setupPopover(packageTable.asWidget(), "MouseOver", "title");
}
});
column.setSortable(false);
packageTable.addColumn(column, "");
packageTable.setColumnWidth(column, 10.0, Unit.PCT);
*/
/*
final Column<Item, String> buttonImageCellTest = new Column<Item, String>(new ButtonImageCell()) {
private HorizontalPanel widget;
@Override
public String getValue(Item row) {
//url to image
return WorkspaceExplorerResources.ICONS.info().getSafeUri().toString();
}
@Override
public void render(Context context, Item object, SafeHtmlBuilder sb) {
// TODO Auto-generated method stub
super.render(context, object, sb);
widget = new HorizontalPanel();
sb.appendEscaped(widget.getElement().getInnerHTML());
}
@Override
public void setFieldUpdater(
FieldUpdater<Item, String> fieldUpdater) {
// TODO Auto-generated method stub
super.setFieldUpdater(fieldUpdater);
setupPopover(widget, "", "").show();
}
};
packageTable.addColumn(buttonImageCellTest, "");
packageTable.setColumnWidth(buttonImageCellTest, 10.0, Unit.PCT);
*/
//ICONS
ImageResourceCell moreInfoResourceCell = new ImageResourceCell() {
public Set<String> getConsumedEvents() {
HashSet<String> events = new HashSet<String>();
events.add("click");
return events;
}
};
moreInfo = new Column<Item, ImageResource>(moreInfoResourceCell) {
@Override
public ImageResource getValue(Item dataObj) {
return WorkspaceExplorerResources.ICONS.info();
}
@Override
public void onBrowserEvent(Context context, Element elem, Item object, NativeEvent event) {
super.onBrowserEvent(context, elem, object, event);
if ("click".equals(event.getType())) {
WorkspaceExplorerController.eventBus.fireEvent(new MoreInfoShowEvent(object));
}
}
};
moreInfo.setFieldUpdater(new FieldUpdater<Item, ImageResource>() {
@Override
public void update(int index, Item object, ImageResource value) {
// TODO Auto-generated method stub
}
});
// icon.setCellStyleNames("img-centered-clickable");
moreInfo.setSortable(false);
packageTable.addColumn(moreInfo, "");
packageTable.setColumnWidth(moreInfo, 10.0, Unit.PCT);
}
/*final SingleSelectionModel<Item> selectionModel = new SingleSelectionModel<Item>();
selectionModel.addSelectionChangeHandler(new Handler() {
@Override
public void onSelectionChange(SelectionChangeEvent event) {
}
});
});*/
}
private Tooltip setupPopover(Widget w, String message, String heading) {
Tooltip popover = new Tooltip();
popover.setWidget(w);
popover.setText(message);
// popover.setHeading(heading);
popover.setPlacement(Placement.RIGHT);
popover.reconfigure();
return popover;
}
public class ButtonImageCell extends ButtonCell{
@Override
public void render(com.google.gwt.cell.client.Cell.Context context,
String value, SafeHtmlBuilder sb) {
SafeHtml html = SafeHtmlUtils.fromTrustedString(new Image(value).toString());
sb.append(html);
}
}
/* (non-Javadoc)
* @see org.gcube.portlets.widgets.wsexplorer.client.grid.AbstractItemsCellTable#selectedItem(org.gcube.portlets.widgets.wsexplorer.shared.Item)
*/

View File

@ -13,4 +13,8 @@
.breadcrumbs-navigator .breadcrumb {
margin-bottom: 3px !important;
}
.moreinfo{
margin-top: 60%;
}

View File

@ -26,8 +26,10 @@ public class ItemComparator implements Comparator<Item> {
boolean isItem1Folder = Util.isFolder(item1.getType());
boolean isItem2Folder = Util.isFolder(item2.getType());
if (isSpecialFolder(item1) ^ isSpecialFolder(item2)) return isSpecialFolder(item1) ? -1 : 1;
//XOR
if (isSpecialFolder(item1) ^ isSpecialFolder(item2)) return isSpecialFolder(item1) ? -1 : 1;
//XOR
if (isItem1Folder ^ isItem2Folder) return isItem1Folder ? -1 : 1;
//otherwise we compare the names
@ -35,6 +37,6 @@ public class ItemComparator implements Comparator<Item> {
}
private boolean isSpecialFolder(Item item) {
return item.getName().equals(WorkspaceExplorerConstants.VRE_FOLDERS_LABEL);
return item.getName().equals(WorkspaceExplorerConstants.VRE_FOLDERS_LABEL) && item.getParent()!=null && item.getParent().isRoot();
}
}