/** * */ 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() { @Override public void onSelection(SelectionEvent event) { eventBus.fireEvent(new RibbonEvent( RibbonType.COLUMN_REPLACE_BATCH)); } }); replaceByExpressionItem .addSelectionHandler(new SelectionHandler() { @Override public void onSelection(SelectionEvent event) { eventBus.fireEvent(new RibbonEvent( RibbonType.COLUMN_REPLACE_BY_EXPRESSION)); } }); replaceByExternalColItem .addSelectionHandler(new SelectionHandler() { @Override public void onSelection(SelectionEvent 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() { @Override public void onSelection(SelectionEvent event) { eventBus.fireEvent(new RibbonEvent(RibbonType.ROW_DELETE)); } }); deleteDuplicateItem .addSelectionHandler(new SelectionHandler() { @Override public void onSelection(SelectionEvent event) { eventBus.fireEvent(new RibbonEvent(RibbonType.DUPLICATE_DELETE)); } }); deleteByExpressionItem .addSelectionHandler(new SelectionHandler() { @Override public void onSelection(SelectionEvent 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 tds = elem. 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()); } } }