diff --git a/src/main/java/org/gcube/portlets/user/td/client/TabularDataController.java b/src/main/java/org/gcube/portlets/user/td/client/TabularDataController.java
index 9d5e3af..9344087 100644
--- a/src/main/java/org/gcube/portlets/user/td/client/TabularDataController.java
+++ b/src/main/java/org/gcube/portlets/user/td/client/TabularDataController.java
@@ -761,10 +761,7 @@ public class TabularDataController {
case LOGS:
openLogsWindow();
break;
- case RULE_NEW:
- break;
- case RULE_MANAGE:
- break;
+
case DUPLICATE_DETECTION:
openDuplicatesRowsDetection();
break;
@@ -860,6 +857,16 @@ public class TabularDataController {
break;
case COLUMN_BATCH_REPLACE:
break;
+ case RULE_NEW:
+ break;
+ case RULE_MODIFY:
+ break;
+ case RULE_DELETE:
+ break;
+ case RULE_APPLY:
+ break;
+ case RULE_SHARE:
+ break;
case TEMPLATE_OPEN:
openTemplateOpen();
break;
diff --git a/src/main/java/org/gcube/portlets/user/td/client/ribbon/RuleToolBar.java b/src/main/java/org/gcube/portlets/user/td/client/ribbon/RuleToolBar.java
new file mode 100644
index 0000000..d6d3d0f
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/td/client/ribbon/RuleToolBar.java
@@ -0,0 +1,228 @@
+/**
+ *
+ */
+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.dom.client.Element;
+import com.google.gwt.dom.client.NodeList;
+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.toolbar.ToolBar;
+
+/**
+ *
+ * @author "Giancarlo Panichi" g.panichi@isti.cnr.it
+ *
+ */
+public class RuleToolBar {
+
+ private EventBus eventBus;
+ private ToolBar toolBar;
+
+ //Rules
+ private TextButton ruleNewButton;
+ private TextButton ruleModifyButton;
+ private TextButton ruleDeleteButton;
+ private TextButton ruleApplyButton;
+ private TextButton ruleShareButton;
+
+
+ public RuleToolBar(EventBus eventBus) {
+ this.eventBus = eventBus;
+ build();
+ }
+
+ public ToolBar getToolBar() {
+ return toolBar;
+ }
+
+ protected void build() {
+ toolBar = new ToolBar();
+ toolBar.setSpacing(1);
+ toolBar.setEnableOverflow(false);
+
+ // Rules
+ ButtonGroup rulesGroup = new ButtonGroup();
+ rulesGroup.setId("Manage");
+ rulesGroup.setStyleName("ribbon");
+ rulesGroup.setHeadingText("Manage");
+ //templateGroup.disable();
+ toolBar.add(rulesGroup);
+
+ FlexTable templateLayout = new FlexTable();
+ rulesGroup.add(templateLayout);
+
+ ruleNewButton = new TextButton("New",
+ TabularDataResources.INSTANCE.templateEdit32());
+ ruleNewButton.enable();
+ ruleNewButton.setToolTip("New");
+ ruleNewButton.setScale(ButtonScale.LARGE);
+ ruleNewButton.setIconAlign(IconAlign.TOP);
+ ruleNewButton.setArrowAlign(ButtonArrowAlign.BOTTOM);
+ ruleNewButton.addSelectHandler(new SelectHandler() {
+
+ public void onSelect(SelectEvent event) {
+ eventBus.fireEvent(new RibbonEvent(
+ RibbonType.RULE_NEW));
+ }
+ });
+
+ templateLayout.setWidget(0, 0, ruleNewButton);
+ templateLayout.getFlexCellFormatter().setRowSpan(0, 0, 2);
+
+ ruleModifyButton = new TextButton("Modify",
+ TabularDataResources.INSTANCE.templateAdd32());
+ ruleModifyButton.enable();
+ ruleModifyButton.setToolTip("Modify");
+ ruleModifyButton.setScale(ButtonScale.LARGE);
+ ruleModifyButton.setIconAlign(IconAlign.TOP);
+ ruleModifyButton.setArrowAlign(ButtonArrowAlign.BOTTOM);
+ ruleModifyButton.addSelectHandler(new SelectHandler() {
+
+ public void onSelect(SelectEvent event) {
+ eventBus.fireEvent(new RibbonEvent(
+ RibbonType.RULE_MODIFY));
+ }
+ });
+
+ templateLayout.setWidget(0, 1, ruleModifyButton);
+ templateLayout.getFlexCellFormatter().setRowSpan(0, 1, 2);
+
+
+ ruleDeleteButton = new TextButton("Delete",
+ TabularDataResources.INSTANCE.templateDelete32());
+ ruleDeleteButton.enable();
+ ruleDeleteButton.setToolTip("Delete");
+ ruleDeleteButton.setScale(ButtonScale.LARGE);
+ ruleDeleteButton.setIconAlign(IconAlign.TOP);
+ ruleDeleteButton.setArrowAlign(ButtonArrowAlign.BOTTOM);
+ ruleDeleteButton.addSelectHandler(new SelectHandler() {
+
+ public void onSelect(SelectEvent event) {
+ eventBus.fireEvent(new RibbonEvent(
+ RibbonType.RULE_DELETE));
+ }
+ });
+
+ templateLayout.setWidget(0, 2, ruleDeleteButton);
+ templateLayout.getFlexCellFormatter().setRowSpan(0, 2, 2);
+
+
+ ruleApplyButton = new TextButton("Apply",
+ TabularDataResources.INSTANCE.templateApply32());
+ ruleApplyButton.disable();
+ ruleApplyButton.setScale(ButtonScale.LARGE);
+ ruleApplyButton.setIconAlign(IconAlign.TOP);
+ ruleApplyButton.setToolTip("Apply Rule");
+ ruleApplyButton.setArrowAlign(ButtonArrowAlign.BOTTOM);
+ ruleApplyButton.addSelectHandler(new SelectHandler() {
+
+ public void onSelect(SelectEvent event) {
+ eventBus.fireEvent(new RibbonEvent(RibbonType.RULE_APPLY));
+ }
+ });
+
+ templateLayout.setWidget(0, 3, ruleApplyButton);
+ templateLayout.getFlexCellFormatter().setRowSpan(0, 3, 2);
+
+
+ ruleShareButton = new TextButton("Share",
+ TabularDataResources.INSTANCE.templateShare32());
+ ruleShareButton.enable();
+ ruleShareButton.setScale(ButtonScale.LARGE);
+ ruleShareButton.setIconAlign(IconAlign.TOP);
+ ruleShareButton.setToolTip("Share Rule");
+ ruleShareButton.setArrowAlign(ButtonArrowAlign.BOTTOM);
+ ruleShareButton.addSelectHandler(new SelectHandler() {
+
+ public void onSelect(SelectEvent event) {
+ eventBus.fireEvent(new RibbonEvent(RibbonType.RULE_SHARE));
+ }
+ });
+
+ templateLayout.setWidget(0, 4, ruleShareButton);
+ templateLayout.getFlexCellFormatter().setRowSpan(0, 4, 2);
+
+ cleanCells(templateLayout.getElement());
+
+ eventBus.addHandler(UIStateEvent.TYPE,
+ new UIStateEvent.UIStateHandler() {
+
+ public void onUIState(UIStateEvent event) {
+ setUI(event);
+
+ }
+ });
+
+ }
+
+ private 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:
+ ruleModifyButton.enable();
+ ruleNewButton.enable();
+ ruleDeleteButton.enable();
+ ruleApplyButton.disable();
+ ruleShareButton.enable();
+ break;
+ case TR_CLOSE:
+ case TR_READONLY:
+ ruleModifyButton.enable();
+ ruleNewButton.enable();
+ ruleDeleteButton.enable();
+ ruleApplyButton.disable();
+ ruleShareButton.enable();
+ break;
+ case TR_OPEN:
+ case TABLEUPDATE:
+ case TABLECURATION:
+ ruleModifyButton.enable();
+ ruleNewButton.enable();
+ ruleDeleteButton.enable();
+ ruleApplyButton.enable();
+ ruleShareButton.enable();
+ break;
+ case WIZARD_OPEN:
+ ruleModifyButton.disable();
+ ruleNewButton.disable();
+ ruleDeleteButton.disable();
+ ruleApplyButton.disable();
+ ruleShareButton.disable();
+ break;
+ default:
+ break;
+ }
+ } catch (Exception e) {
+ Log.error("setUI Error : " + e.getLocalizedMessage());
+ }
+ }
+}
diff --git a/src/main/java/org/gcube/portlets/user/td/client/ribbon/TabularDataRibbon.java b/src/main/java/org/gcube/portlets/user/td/client/ribbon/TabularDataRibbon.java
index cb07536..e8b1be3 100644
--- a/src/main/java/org/gcube/portlets/user/td/client/ribbon/TabularDataRibbon.java
+++ b/src/main/java/org/gcube/portlets/user/td/client/ribbon/TabularDataRibbon.java
@@ -27,6 +27,7 @@ public class TabularDataRibbon {
private FileToolBar fileToolBar;
private CurationToolBar curationToolBar;
private ModifyToolBar modifyToolBar;
+ private RuleToolBar ruleToolBar;
private TemplateToolBar templateToolBar;
private AnalyseToolBar analyseToolBar;
@@ -54,6 +55,11 @@ public class TabularDataRibbon {
con.add(modifyToolBar.getToolBar(), vldata);
ribbon.add(con, "Modify");
+ ruleToolBar = new RuleToolBar(eventBus);
+ con = new VerticalLayoutContainer();
+ con.add(ruleToolBar.getToolBar(), vldata);
+ ribbon.add(con, "Rule");
+
templateToolBar = new TemplateToolBar(eventBus);
con = new VerticalLayoutContainer();
con.add(templateToolBar.getToolBar(), vldata);