tabular-data-manager/src/main/java/org/gcube/portlets/user/td/client/ribbon/ModifyToolBar.java

532 lines
16 KiB
Java

/**
*
*/
package org.gcube.portlets.user.td.client.ribbon;
import org.gcube.portlets.user.td.client.resource.TabularDataResources;
import org.gcube.portlets.user.td.widgetcommonevent.client.event.RibbonEvent;
import org.gcube.portlets.user.td.widgetcommonevent.client.event.UIStateEvent;
import org.gcube.portlets.user.td.widgetcommonevent.client.type.RibbonType;
import org.gcube.portlets.user.td.widgetcommonevent.client.type.UIStateType;
import com.allen_sauer.gwt.log.client.Log;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.NodeList;
import com.google.gwt.event.logical.shared.SelectionEvent;
import com.google.gwt.event.logical.shared.SelectionHandler;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.web.bindery.event.shared.EventBus;
import com.sencha.gxt.cell.core.client.ButtonCell.ButtonArrowAlign;
import com.sencha.gxt.cell.core.client.ButtonCell.ButtonScale;
import com.sencha.gxt.cell.core.client.ButtonCell.IconAlign;
import com.sencha.gxt.core.client.dom.XElement;
import com.sencha.gxt.widget.core.client.button.ButtonGroup;
import com.sencha.gxt.widget.core.client.button.TextButton;
import com.sencha.gxt.widget.core.client.event.SelectEvent;
import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler;
import com.sencha.gxt.widget.core.client.menu.Item;
import com.sencha.gxt.widget.core.client.menu.Menu;
import com.sencha.gxt.widget.core.client.menu.MenuItem;
import com.sencha.gxt.widget.core.client.toolbar.ToolBar;
/**
*
* @author Giancarlo Panichi
*
*
*/
public class ModifyToolBar {
private EventBus eventBus;
private ToolBar toolBar;
// Rows
private TextButton replaceButton;
private TextButton deleteButton;
private TextButton addRowButton;
private TextButton filterButton;
// Table
private TextButton unionButton;
private TextButton groupbyButton;
private TextButton timeAggregationButton;
// Geospatial
private TextButton csquareButton;
private TextButton oceanAreaButton;
private TextButton downscaleCSquareButton;
// Geometry
private TextButton pointButton;
// Menu
// Replace Menu
private MenuItem replaceBatchItem;
private MenuItem replaceByExpressionItem;
private MenuItem replaceByExternalColItem;
// Delete Menu
private MenuItem deleteSelectedRowsItem;
private MenuItem deleteDuplicateItem;
private MenuItem deleteByExpressionItem;
private ModifyToolBarMessages msgs;
public ModifyToolBar(EventBus eventBus) {
this.eventBus = eventBus;
msgs = GWT.create(ModifyToolBarMessages.class);
build();
}
public ToolBar getToolBar() {
return toolBar;
}
protected void build() {
toolBar = new ToolBar();
toolBar.setSpacing(1);
toolBar.setEnableOverflow(false);
// Tools Group
ButtonGroup rowsGroup = new ButtonGroup();
rowsGroup.setId("Rows");
rowsGroup.setStyleName("ribbon");
rowsGroup.setHeadingText(msgs.rowsGroupHeadingText());
rowsGroup.enable();
toolBar.add(rowsGroup);
FlexTable rowsLayout = new FlexTable();
rowsGroup.add(rowsLayout);
replaceButton = new TextButton(msgs.replaceButton(),
TabularDataResources.INSTANCE.tableReplaceRows32());
replaceButton.disable();
replaceButton.setScale(ButtonScale.LARGE);
replaceButton.setIconAlign(IconAlign.TOP);
replaceButton.setToolTip(msgs.replaceButtonToolTip());
replaceButton.setArrowAlign(ButtonArrowAlign.RIGHT);
replaceButton.setMenu(createReplaceMenu());
rowsLayout.setWidget(0, 0, replaceButton);
rowsLayout.getFlexCellFormatter().setRowSpan(0, 0, 2);
deleteButton = new TextButton(msgs.deleteButton(),
TabularDataResources.INSTANCE.tableRowDelete32());
deleteButton.disable();
deleteButton.setScale(ButtonScale.LARGE);
deleteButton.setIconAlign(IconAlign.TOP);
deleteButton.setToolTip(msgs.deleteButtonToolTip());
deleteButton.setArrowAlign(ButtonArrowAlign.RIGHT);
deleteButton.setMenu(createDeleteMenu());
rowsLayout.setWidget(0, 1, deleteButton);
rowsLayout.getFlexCellFormatter().setRowSpan(0, 1, 2);
addRowButton = new TextButton(msgs.addRowButton(),
TabularDataResources.INSTANCE.rowInsert32());
addRowButton.disable();
addRowButton.setScale(ButtonScale.LARGE);
addRowButton.setIconAlign(IconAlign.TOP);
addRowButton.setToolTip(msgs.addRowButtonToolTip());
addRowButton.setArrowAlign(ButtonArrowAlign.BOTTOM);
addRowButton.addSelectHandler(new SelectHandler() {
public void onSelect(SelectEvent event) {
eventBus.fireEvent(new RibbonEvent(RibbonType.ROW_ADD));
}
});
rowsLayout.setWidget(0, 2, addRowButton);
rowsLayout.getFlexCellFormatter().setRowSpan(0, 2, 2);
filterButton = new TextButton(msgs.filterButton(),
TabularDataResources.INSTANCE.filter32());
filterButton.disable();
filterButton.setScale(ButtonScale.LARGE);
filterButton.setIconAlign(IconAlign.TOP);
filterButton.setToolTip(msgs.filterButtonToolTip());
filterButton.setArrowAlign(ButtonArrowAlign.BOTTOM);
filterButton.addSelectHandler(new SelectHandler() {
public void onSelect(SelectEvent event) {
eventBus.fireEvent(new RibbonEvent(RibbonType.COLUMN_FILTER));
}
});
rowsLayout.setWidget(0, 3, filterButton);
rowsLayout.getFlexCellFormatter().setRowSpan(0, 3, 2);
cleanCells(rowsLayout.getElement());
// Table Group
ButtonGroup tableGroup = new ButtonGroup();
tableGroup.setId("Table");
tableGroup.setStyleName("ribbon");
tableGroup.setHeadingText(msgs.tableGroupHeadingText());
tableGroup.enable();
toolBar.add(tableGroup);
FlexTable tableLayout = new FlexTable();
tableGroup.add(tableLayout);
groupbyButton = new TextButton(msgs.groupbyButton(),
TabularDataResources.INSTANCE.group32());
groupbyButton.disable();
groupbyButton.setScale(ButtonScale.LARGE);
groupbyButton.setIconAlign(IconAlign.TOP);
groupbyButton.setToolTip(msgs.groupbyButtonToolTip());
groupbyButton.setArrowAlign(ButtonArrowAlign.BOTTOM);
groupbyButton.addSelectHandler(new SelectHandler() {
public void onSelect(SelectEvent event) {
eventBus.fireEvent(new RibbonEvent(RibbonType.TABLE_GROUPBY));
}
});
tableLayout.setWidget(0, 0, groupbyButton);
tableLayout.getFlexCellFormatter().setRowSpan(0, 0, 2);
timeAggregationButton = new TextButton(msgs.timeAggregationButton(),
TabularDataResources.INSTANCE.timeAggregate32());
timeAggregationButton.disable();
timeAggregationButton.setScale(ButtonScale.LARGE);
timeAggregationButton.setIconAlign(IconAlign.TOP);
timeAggregationButton.setToolTip(msgs.timeAggregationButtonToolTip());
timeAggregationButton.setArrowAlign(ButtonArrowAlign.BOTTOM);
timeAggregationButton.addSelectHandler(new SelectHandler() {
public void onSelect(SelectEvent event) {
eventBus.fireEvent(new RibbonEvent(
RibbonType.TABLE_TIME_AGGREGATE));
}
});
tableLayout.setWidget(0, 1, timeAggregationButton);
tableLayout.getFlexCellFormatter().setRowSpan(0, 1, 2);
unionButton = new TextButton(msgs.unionButton(),
TabularDataResources.INSTANCE.union32());
unionButton.disable();
unionButton.setScale(ButtonScale.LARGE);
unionButton.setIconAlign(IconAlign.TOP);
unionButton.setToolTip(msgs.unionButtonToolTip());
unionButton.setArrowAlign(ButtonArrowAlign.BOTTOM);
unionButton.addSelectHandler(new SelectHandler() {
public void onSelect(SelectEvent event) {
eventBus.fireEvent(new RibbonEvent(RibbonType.TABLE_UNION));
}
});
tableLayout.setWidget(0, 2, unionButton);
tableLayout.getFlexCellFormatter().setRowSpan(0, 2, 2);
cleanCells(tableLayout.getElement());
// Geospatial Group
ButtonGroup geospatialGroup = new ButtonGroup();
geospatialGroup.setId("Geospatial");
geospatialGroup.setStyleName("ribbon");
geospatialGroup.setHeadingText(msgs.geospatialGroupHeadingText());
geospatialGroup.enable();
geospatialGroup.setVisible(true);
toolBar.add(geospatialGroup);
FlexTable geospatialLayout = new FlexTable();
geospatialGroup.add(geospatialLayout);
csquareButton = new TextButton(msgs.csquareButton(),
TabularDataResources.INSTANCE.geospatialCSquare32());
csquareButton.disable();
csquareButton.setScale(ButtonScale.LARGE);
csquareButton.setIconAlign(IconAlign.TOP);
csquareButton.setToolTip(msgs.csquareButtonToolTip());
csquareButton.setArrowAlign(ButtonArrowAlign.BOTTOM);
csquareButton.addSelectHandler(new SelectHandler() {
public void onSelect(SelectEvent event) {
eventBus.fireEvent(new RibbonEvent(
RibbonType.GEOSPATIAL_CSQUARE));
}
});
geospatialLayout.setWidget(0, 0, csquareButton);
geospatialLayout.getFlexCellFormatter().setRowSpan(0, 0, 2);
downscaleCSquareButton = new TextButton(msgs.downscaleCSquareButton(),
TabularDataResources.INSTANCE.downscaleCSquare32());
downscaleCSquareButton.disable();
downscaleCSquareButton.setScale(ButtonScale.LARGE);
downscaleCSquareButton.setIconAlign(IconAlign.TOP);
downscaleCSquareButton.setToolTip(msgs.downscaleCSquareButtonToolTip());
downscaleCSquareButton.setArrowAlign(ButtonArrowAlign.BOTTOM);
downscaleCSquareButton.addSelectHandler(new SelectHandler() {
public void onSelect(SelectEvent event) {
eventBus.fireEvent(new RibbonEvent(RibbonType.DOWNSCALE_CSQUARE));
}
});
geospatialLayout.setWidget(0, 1, downscaleCSquareButton);
geospatialLayout.getFlexCellFormatter().setRowSpan(0, 1, 2);
oceanAreaButton = new TextButton(msgs.oceanAreaButton(),
TabularDataResources.INSTANCE.geospatialOceanArea32());
oceanAreaButton.disable();
oceanAreaButton.setScale(ButtonScale.LARGE);
oceanAreaButton.setIconAlign(IconAlign.TOP);
oceanAreaButton.setToolTip(msgs.oceanAreaButtonToolTip());
oceanAreaButton.setArrowAlign(ButtonArrowAlign.BOTTOM);
oceanAreaButton.addSelectHandler(new SelectHandler() {
public void onSelect(SelectEvent event) {
eventBus.fireEvent(new RibbonEvent(
RibbonType.GEOSPATIAL_OCEAN_AREA));
}
});
geospatialLayout.setWidget(0, 2, oceanAreaButton);
geospatialLayout.getFlexCellFormatter().setRowSpan(0, 2, 2);
cleanCells(geospatialLayout.getElement());
// Geometry Group
ButtonGroup geometryGroup = new ButtonGroup();
geometryGroup.setId("Geometry");
geometryGroup.setStyleName("ribbon");
geometryGroup.setHeadingText(msgs.geometryGroupHeadingText());
geometryGroup.enable();
geometryGroup.setVisible(true);
toolBar.add(geometryGroup);
FlexTable geometryLayout = new FlexTable();
geometryGroup.add(geometryLayout);
pointButton = new TextButton(msgs.pointButton(),
TabularDataResources.INSTANCE.geometryPoint32());
pointButton.disable();
pointButton.setScale(ButtonScale.LARGE);
pointButton.setIconAlign(IconAlign.TOP);
pointButton.setToolTip(msgs.pointButtonToolTip());
pointButton.setArrowAlign(ButtonArrowAlign.BOTTOM);
pointButton.addSelectHandler(new SelectHandler() {
public void onSelect(SelectEvent event) {
eventBus.fireEvent(new RibbonEvent(RibbonType.GEOMETRY_POINT));
}
});
geometryLayout.setWidget(0, 0, pointButton);
geometryLayout.getFlexCellFormatter().setRowSpan(0, 0, 2);
cleanCells(geospatialLayout.getElement());
eventBus.addHandler(UIStateEvent.TYPE,
new UIStateEvent.UIStateHandler() {
public void onUIState(UIStateEvent event) {
setUI(event);
}
});
}
private Menu createReplaceMenu() {
Menu menuReplace = new Menu();
replaceBatchItem = new MenuItem(msgs.replaceBatchItem(),
TabularDataResources.INSTANCE.columnReplaceBatch());
replaceByExpressionItem = new MenuItem(msgs.replaceByExpressionItem(),
TabularDataResources.INSTANCE.columnReplaceByExpression());
replaceByExternalColItem = new MenuItem(msgs.replaceByExternalColItem(),
TabularDataResources.INSTANCE.replaceByExternalCol());
replaceBatchItem
.addSelectionHandler(new SelectionHandler<Item>() {
@Override
public void onSelection(SelectionEvent<Item> event) {
eventBus.fireEvent(new RibbonEvent(
RibbonType.COLUMN_REPLACE_BATCH));
}
});
replaceByExpressionItem
.addSelectionHandler(new SelectionHandler<Item>() {
@Override
public void onSelection(SelectionEvent<Item> event) {
eventBus.fireEvent(new RibbonEvent(
RibbonType.COLUMN_REPLACE_BY_EXPRESSION));
}
});
replaceByExternalColItem
.addSelectionHandler(new SelectionHandler<Item>() {
@Override
public void onSelection(SelectionEvent<Item> event) {
eventBus.fireEvent(new RibbonEvent(
RibbonType.COLUMN_REPLACE_BY_EXTERNAL_COL));
}
});
menuReplace.add(replaceBatchItem);
menuReplace.add(replaceByExpressionItem);
menuReplace.add(replaceByExternalColItem);
return menuReplace;
}
private Menu createDeleteMenu() {
Menu menuDelete = new Menu();
deleteSelectedRowsItem = new MenuItem(msgs.deleteSelectedRowsItem(),
TabularDataResources.INSTANCE.tableRowDeleteSelected());
deleteDuplicateItem = new MenuItem(msgs.deleteDuplicateItem(),
TabularDataResources.INSTANCE.tableDuplicateRowsRemove());
deleteByExpressionItem = new MenuItem(msgs.deleteByExpressionItem(),
TabularDataResources.INSTANCE.tableRowDeleteByExpression());
deleteSelectedRowsItem
.addSelectionHandler(new SelectionHandler<Item>() {
@Override
public void onSelection(SelectionEvent<Item> event) {
eventBus.fireEvent(new RibbonEvent(RibbonType.ROW_DELETE));
}
});
deleteDuplicateItem
.addSelectionHandler(new SelectionHandler<Item>() {
@Override
public void onSelection(SelectionEvent<Item> event) {
eventBus.fireEvent(new RibbonEvent(RibbonType.DUPLICATE_DELETE));
}
});
deleteByExpressionItem
.addSelectionHandler(new SelectionHandler<Item>() {
@Override
public void onSelection(SelectionEvent<Item> event) {
eventBus.fireEvent(new RibbonEvent(RibbonType.BYEXPRESSION_DELETE));
}
});
menuDelete.add(deleteSelectedRowsItem);
menuDelete.add(deleteDuplicateItem);
menuDelete.add(deleteByExpressionItem);
return menuDelete;
}
protected void cleanCells(Element elem) {
NodeList<Element> tds = elem.<XElement> cast().select("td");
for (int i = 0; i < tds.getLength(); i++) {
Element td = tds.getItem(i);
if (!td.hasChildNodes() && td.getClassName().equals("")) {
td.removeFromParent();
}
}
}
public void setUI(UIStateEvent event) {
UIStateType uiStateType = event.getUIStateType();
try {
switch (uiStateType) {
case START:
// Tools
replaceButton.disable();
deleteButton.disable();
filterButton.disable();
unionButton.disable();
addRowButton.disable();
//Group
groupbyButton.disable();
timeAggregationButton.disable();
// Geospatial
csquareButton.disable();
downscaleCSquareButton.disable();
oceanAreaButton.disable();
// Geometry
pointButton.disable();
break;
case TR_CLOSE:
case TR_READONLY:
// Tools
replaceButton.disable();
deleteButton.disable();
filterButton.disable();
unionButton.disable();
addRowButton.disable();
//Group
groupbyButton.disable();
timeAggregationButton.disable();
// Geospatial
csquareButton.disable();
downscaleCSquareButton.disable();
oceanAreaButton.disable();
// Geometry
pointButton.disable();
break;
case TR_OPEN:
case TABLEUPDATE:
case TABLECURATION:
// Tools
replaceButton.enable();
deleteButton.enable();
filterButton.enable();
unionButton.enable();
addRowButton.enable();
//Group
groupbyButton.enable();
timeAggregationButton.enable();
// Geospatial
csquareButton.enable();
downscaleCSquareButton.enable();
oceanAreaButton.enable();
// Geometry
pointButton.enable();
break;
case WIZARD_OPEN:
// Tools
replaceButton.disable();
deleteButton.disable();
filterButton.disable();
unionButton.disable();
addRowButton.disable();
//Group
groupbyButton.disable();
timeAggregationButton.disable();
// Geospatial
csquareButton.disable();
downscaleCSquareButton.disable();
oceanAreaButton.disable();
// Geometry
pointButton.disable();
break;
default:
break;
}
} catch (Exception e) {
Log.error("setUI Error on Ribbon Curation: "
+ e.getLocalizedMessage());
}
}
}