From 944e3fb32b62ff6ae106586a18d66036da8c44f8 Mon Sep 17 00:00:00 2001 From: Giancarlo Panichi Date: Tue, 19 May 2015 16:54:51 +0000 Subject: [PATCH] 81: Allow the creation and use of expressions on multi column in TDM portlet Task-Url: https://support.d4science.org/issues/81 Updated Rule on Table creation git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/tabular-data-rule-widget@114808 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../td/rulewidget/client/RuleActivePanel.java | 2 +- .../td/rulewidget/client/RuleApplyPanel.java | 2 +- .../rulewidget/client/RuleDeleteDialog.java | 2 +- .../td/rulewidget/client/RuleDeletePanel.java | 2 +- .../td/rulewidget/client/RuleInfoDialog.java | 2 +- .../td/rulewidget/client/RuleOpenDialog.java | 2 +- .../td/rulewidget/client/RuleOpenPanel.java | 2 +- .../td/rulewidget/client/RuleShareDialog.java | 2 +- .../td/rulewidget/client/RuleSharePanel.java | 2 +- .../CreateRuleOnTableDefinitionCard.java | 296 ++++++++++++++++++ .../multicolumn/CreateRuleOnTableWizard.java | 42 +++ 11 files changed, 347 insertions(+), 9 deletions(-) create mode 100644 src/main/java/org/gcube/portlets/user/td/rulewidget/client/multicolumn/CreateRuleOnTableDefinitionCard.java create mode 100644 src/main/java/org/gcube/portlets/user/td/rulewidget/client/multicolumn/CreateRuleOnTableWizard.java diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleActivePanel.java b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleActivePanel.java index 03c3c5f..d376db7 100644 --- a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleActivePanel.java +++ b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleActivePanel.java @@ -12,7 +12,7 @@ import org.gcube.portlets.user.td.gwtservice.shared.exception.TDGWTIsLockedExcep import org.gcube.portlets.user.td.gwtservice.shared.exception.TDGWTSessionExpiredException; import org.gcube.portlets.user.td.gwtservice.shared.rule.AppliedRulesResponseData; import org.gcube.portlets.user.td.gwtservice.shared.rule.DetachColumnRulesSession; -import org.gcube.portlets.user.td.gwtservice.shared.rule.RuleDescriptionData; +import org.gcube.portlets.user.td.gwtservice.shared.rule.description.RuleDescriptionData; import org.gcube.portlets.user.td.rulewidget.client.resources.ResourceBundle; import org.gcube.portlets.user.td.widgetcommonevent.client.event.SessionExpiredEvent; import org.gcube.portlets.user.td.widgetcommonevent.client.type.SessionExpiredType; diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleApplyPanel.java b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleApplyPanel.java index 8397a41..0d18f77 100644 --- a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleApplyPanel.java +++ b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleApplyPanel.java @@ -13,7 +13,7 @@ import org.gcube.portlets.user.td.gwtservice.shared.exception.TDGWTIsLockedExcep import org.gcube.portlets.user.td.gwtservice.shared.exception.TDGWTSessionExpiredException; import org.gcube.portlets.user.td.gwtservice.shared.rule.AppliedRulesResponseData; import org.gcube.portlets.user.td.gwtservice.shared.rule.ApplyAndDetachColumnRulesSession; -import org.gcube.portlets.user.td.gwtservice.shared.rule.RuleDescriptionData; +import org.gcube.portlets.user.td.gwtservice.shared.rule.description.RuleDescriptionData; import org.gcube.portlets.user.td.rulewidget.client.resources.ResourceBundle; import org.gcube.portlets.user.td.widgetcommonevent.client.event.SessionExpiredEvent; import org.gcube.portlets.user.td.widgetcommonevent.client.type.SessionExpiredType; diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleDeleteDialog.java b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleDeleteDialog.java index 153449a..21d8025 100644 --- a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleDeleteDialog.java +++ b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleDeleteDialog.java @@ -5,7 +5,7 @@ import java.util.ArrayList; import org.gcube.portlets.user.td.expressionwidget.client.rpc.ExpressionServiceAsync; import org.gcube.portlets.user.td.expressionwidget.client.utils.UtilsGXT3; import org.gcube.portlets.user.td.gwtservice.shared.exception.TDGWTSessionExpiredException; -import org.gcube.portlets.user.td.gwtservice.shared.rule.RuleDescriptionData; +import org.gcube.portlets.user.td.gwtservice.shared.rule.description.RuleDescriptionData; import org.gcube.portlets.user.td.rulewidget.client.resources.ResourceBundle; import org.gcube.portlets.user.td.widgetcommonevent.client.event.SessionExpiredEvent; import org.gcube.portlets.user.td.widgetcommonevent.client.type.SessionExpiredType; diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleDeletePanel.java b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleDeletePanel.java index d79e14c..4410583 100644 --- a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleDeletePanel.java +++ b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleDeletePanel.java @@ -6,8 +6,8 @@ import java.util.List; import org.gcube.portlets.user.td.expressionwidget.client.rpc.ExpressionServiceAsync; import org.gcube.portlets.user.td.expressionwidget.shared.rule.RuleDescriptionDataProperties; import org.gcube.portlets.user.td.gwtservice.shared.exception.TDGWTSessionExpiredException; -import org.gcube.portlets.user.td.gwtservice.shared.rule.RuleDescriptionData; import org.gcube.portlets.user.td.gwtservice.shared.rule.RuleScopeType; +import org.gcube.portlets.user.td.gwtservice.shared.rule.description.RuleDescriptionData; import org.gcube.portlets.user.td.rulewidget.client.resources.ResourceBundle; import org.gcube.portlets.user.td.widgetcommonevent.client.event.SessionExpiredEvent; import org.gcube.portlets.user.td.widgetcommonevent.client.type.SessionExpiredType; diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleInfoDialog.java b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleInfoDialog.java index 4e6fdd9..f629e1b 100644 --- a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleInfoDialog.java +++ b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleInfoDialog.java @@ -1,6 +1,6 @@ package org.gcube.portlets.user.td.rulewidget.client; -import org.gcube.portlets.user.td.gwtservice.shared.rule.RuleDescriptionData; +import org.gcube.portlets.user.td.gwtservice.shared.rule.description.RuleDescriptionData; import org.gcube.portlets.user.td.rulewidget.client.resources.ResourceBundle; import com.sencha.gxt.core.client.util.Margins; diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleOpenDialog.java b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleOpenDialog.java index 38a0801..4211bdf 100644 --- a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleOpenDialog.java +++ b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleOpenDialog.java @@ -3,7 +3,7 @@ package org.gcube.portlets.user.td.rulewidget.client; import org.gcube.portlets.user.td.expressionwidget.client.RuleEditDialog; import org.gcube.portlets.user.td.expressionwidget.client.notification.RuleEditDialogNotification; import org.gcube.portlets.user.td.expressionwidget.client.notification.RuleEditDialogNotification.RuleEditDialogNotificationListener; -import org.gcube.portlets.user.td.gwtservice.shared.rule.RuleDescriptionData; +import org.gcube.portlets.user.td.gwtservice.shared.rule.description.RuleDescriptionData; import org.gcube.portlets.user.td.rulewidget.client.resources.ResourceBundle; import com.allen_sauer.gwt.log.client.Log; diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleOpenPanel.java b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleOpenPanel.java index cde304a..7dc942d 100644 --- a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleOpenPanel.java +++ b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleOpenPanel.java @@ -6,8 +6,8 @@ import java.util.List; import org.gcube.portlets.user.td.expressionwidget.client.rpc.ExpressionServiceAsync; import org.gcube.portlets.user.td.expressionwidget.shared.rule.RuleDescriptionDataProperties; import org.gcube.portlets.user.td.gwtservice.shared.exception.TDGWTSessionExpiredException; -import org.gcube.portlets.user.td.gwtservice.shared.rule.RuleDescriptionData; import org.gcube.portlets.user.td.gwtservice.shared.rule.RuleScopeType; +import org.gcube.portlets.user.td.gwtservice.shared.rule.description.RuleDescriptionData; import org.gcube.portlets.user.td.rulewidget.client.resources.ResourceBundle; import org.gcube.portlets.user.td.widgetcommonevent.client.event.SessionExpiredEvent; import org.gcube.portlets.user.td.widgetcommonevent.client.type.SessionExpiredType; diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleShareDialog.java b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleShareDialog.java index 0e58702..8638807 100644 --- a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleShareDialog.java +++ b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleShareDialog.java @@ -1,6 +1,6 @@ package org.gcube.portlets.user.td.rulewidget.client; -import org.gcube.portlets.user.td.gwtservice.shared.rule.RuleDescriptionData; +import org.gcube.portlets.user.td.gwtservice.shared.rule.description.RuleDescriptionData; import org.gcube.portlets.user.td.rulewidget.client.resources.ResourceBundle; import org.gcube.portlets.user.td.sharewidget.client.RuleShare; diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleSharePanel.java b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleSharePanel.java index 272ddd8..2a273de 100644 --- a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleSharePanel.java +++ b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleSharePanel.java @@ -6,8 +6,8 @@ import java.util.List; import org.gcube.portlets.user.td.expressionwidget.client.rpc.ExpressionServiceAsync; import org.gcube.portlets.user.td.expressionwidget.shared.rule.RuleDescriptionDataProperties; import org.gcube.portlets.user.td.gwtservice.shared.exception.TDGWTSessionExpiredException; -import org.gcube.portlets.user.td.gwtservice.shared.rule.RuleDescriptionData; import org.gcube.portlets.user.td.gwtservice.shared.rule.RuleScopeType; +import org.gcube.portlets.user.td.gwtservice.shared.rule.description.RuleDescriptionData; import org.gcube.portlets.user.td.rulewidget.client.RuleDeletePanel.RuleDeleteTemplates; import org.gcube.portlets.user.td.rulewidget.client.resources.ResourceBundle; import org.gcube.portlets.user.td.widgetcommonevent.client.event.SessionExpiredEvent; diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/multicolumn/CreateRuleOnTableDefinitionCard.java b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/multicolumn/CreateRuleOnTableDefinitionCard.java new file mode 100644 index 0000000..15aa6dc --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/multicolumn/CreateRuleOnTableDefinitionCard.java @@ -0,0 +1,296 @@ +package org.gcube.portlets.user.td.rulewidget.client.multicolumn; + +import java.util.ArrayList; + +import org.gcube.portlets.user.td.expressionwidget.client.properties.RuleColumnPlaceHolderDescriptorProperties; +import org.gcube.portlets.user.td.gwtservice.shared.chart.ChartTopRatingSession; +import org.gcube.portlets.user.td.gwtservice.shared.rule.RuleColumnPlaceHolderDescriptor; +import org.gcube.portlets.user.td.gwtservice.shared.rule.type.TDRuleTableType; +import org.gcube.portlets.user.td.widgetcommonevent.shared.tr.TableType; +import org.gcube.portlets.user.td.widgetcommonevent.shared.tr.column.ColumnDataType; +import org.gcube.portlets.user.td.wizardwidget.client.WizardCard; + +import com.allen_sauer.gwt.log.client.Log; +import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.Command; +import com.sencha.gxt.core.client.util.Padding; +import com.sencha.gxt.data.shared.ListStore; +import com.sencha.gxt.widget.core.client.box.AlertMessageBox; +import com.sencha.gxt.widget.core.client.container.MarginData; +import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer; +import com.sencha.gxt.widget.core.client.event.HideEvent; +import com.sencha.gxt.widget.core.client.event.HideEvent.HideHandler; +import com.sencha.gxt.widget.core.client.form.FormPanel; +import com.sencha.gxt.widget.core.client.grid.ColumnConfig; +import com.sencha.gxt.widget.core.client.grid.ColumnModel; +import com.sencha.gxt.widget.core.client.grid.Grid; + +/** + * + * @author "Giancarlo Panichi" g.panichi@isti.cnr.it + * + */ +public class CreateRuleOnTableDefinitionCard extends WizardCard { + + private CreateRuleOnTableDefinitionCard thisCard; + private TDRuleTableType tdRuleTableType; + private Grid grid; + + public CreateRuleOnTableDefinitionCard() { + super("Columns Definition", ""); + this.thisCard = this; + FormPanel panel = createPanel(); + setCenterWidget(panel, new MarginData(0)); + + } + + protected FormPanel createPanel() { + FormPanel panel = new FormPanel(); + panel.setLabelWidth(90); + panel.getElement().setPadding(new Padding(5)); + + VerticalLayoutContainer content = new VerticalLayoutContainer(); + panel.add(content); + + RuleColumnPlaceHolderDescriptorProperties props = GWT + .create(RuleColumnPlaceHolderDescriptorProperties.class); + // + ColumnConfig labelColumn = new ColumnConfig( + props.label(), 220, "Label"); + ColumnConfig columnDataTypeColumn = new ColumnConfig( + props.columnDataType(), 130, "Data Type"); + + ArrayList> l = new ArrayList>(); + l.add(labelColumn); + l.add(columnDataTypeColumn); + + ColumnModel columns = new ColumnModel( + l); + + final ListStore store = new ListStore( + props.id()); + + grid = new Grid(store, columns); + grid.getView().setStripeRows(true); + grid.getView().setColumnLines(true); + grid.getView().setAutoFill(true); + grid.setBorders(false); + grid.setLoadMask(true); + grid.setColumnReordering(false); + grid.getView().setAutoExpandColumn(labelColumn); + + // EDITING // + /* + SimpleComboBox comboColumnDataType = new SimpleComboBox( + new StringLabelProvider()); + comboColumnDataType.setClearValueOnParseError(false); + comboColumnDataType.setPropertyEditor(new PropertyEditor() { + @Override + public Light parse(CharSequence text) throws ParseException { + return Light.parseString(text.toString()); + } + + @Override + public String render(ColumnDataType object) { + return object == null ? Light.SUNNY.toString() : object + .toString(); + } + }); + comboColumnDataType.setTriggerAction(TriggerAction.ALL); + comboColumnDataType.add(Light.SUNNY); + comboColumnDataType.add(Light.MOSTLYSUNNY); + comboColumnDataType.add(Light.SUNORSHADE); + comboColumnDataType.add(Light.MOSTLYSHADY); + comboColumnDataType.add(Light.SHADE); + + Converter lightConverter = new Converter() { + @Override + public String convertFieldValue(Light object) { + return object == null ? "" : object.toString(); + } + + @Override + public Light convertModelValue(String object) { + try { + return Light.parseString(object); + } catch (ParseException e) { + return null; + } + } + }; + + DateTimeFormat dateFormat = DateTimeFormat + .getFormat(PredefinedFormat.DATE_SHORT); + DateField dateField = new DateField(new DateTimePropertyEditor( + dateFormat)); + dateField.setClearValueOnParseError(false); + + final GridEditing editing = createGridEditing(grid); + editing.addEditor(labelColumn, new TextField()); + editing.addEditor(columnDataTypeColumn, lightConverter, comboColumnDataType); + + + // EDITING // + customizeGrid(grid); + + TextButton addButton = new TextButton("Add Plant"); + addButton.addSelectHandler(new SelectHandler() { + @Override + public void onSelect(SelectEvent event) { + Plant plant = new Plant(); + plant.setName("New Plant 1"); + plant.setLight("Mostly Shady"); + plant.setPrice(0); + plant.setAvailable(new DateWrapper().clearTime().asDate()); + plant.setIndoor(false); + + editing.cancelEditing(); + store.add(0, plant); + + int row = store.indexOf(plant); + editing.startEditing(new GridCell(row, 0)); + } + }); + + ToolBar toolBar = new ToolBar(); + toolBar.add(addButton); + + VerticalLayoutContainer verticalLayoutContainer = new VerticalLayoutContainer(); + verticalLayoutContainer.setBorders(true); + verticalLayoutContainer.add(toolBar, new VerticalLayoutData(1, -1)); + verticalLayoutContainer.add(grid, new VerticalLayoutData(1, 1)); + + panel = new FramedPanel(); + panel.setHeadingText("Editable Grid Example"); + panel.setPixelSize(600, 400); + panel.addStyleName("margin-10"); + panel.setWidget(verticalLayoutContainer); + + panel.setButtonAlign(BoxLayoutPack.CENTER); + panel.addButton(new TextButton("Reset", new SelectHandler() { + @Override + public void onSelect(SelectEvent event) { + store.rejectChanges(); + } + })); + + panel.addButton(new TextButton("Save", new SelectHandler() { + @Override + public void onSelect(SelectEvent event) { + store.commitChanges(); + } + }));*/ + + return panel; + } + + @Override + public void setup() { + Log.debug("ChartSelectionCard Setup"); + Command sayNextCard = new Command() { + + public void execute() { + Log.debug("ChartSelectionCard Call sayNextCard"); + checkData(); + } + + }; + + Command sayPreviousCard = new Command() { + public void execute() { + try { + getWizardWindow().previousCard(); + getWizardWindow().removeCard(thisCard); + Log.info("Remove ChartSelectionCard"); + } catch (Exception e) { + Log.error("sayPreviousCard :" + e.getLocalizedMessage()); + } + } + }; + + getWizardWindow().setPreviousButtonCommand(sayPreviousCard); + getWizardWindow().setNextButtonCommand(sayNextCard); + + setEnableBackButton(false); + setEnableNextButton(true); + } + + protected void checkData() { + getWizardWindow().setEnableNextButton(false); + getWizardWindow().setEnableBackButton(false); + + HideHandler hideHandler = new HideHandler() { + + public void onHide(HideEvent event) { + getWizardWindow().setEnableNextButton(true); + getWizardWindow().setEnableBackButton(false); + + } + }; + + /* + if (chartTypeSelected == null) { + AlertMessageBox d = new AlertMessageBox("Attention", + "No chart selected"); + d.addHideHandler(hideHandler); + d.setModal(false); + d.show(); + return; + } + + switch (chartTypeSelected) { + case TopRating: + checkTopRating(); + break; + default: + AlertMessageBox d = new AlertMessageBox("Attention", + "No chart selected"); + d.addHideHandler(hideHandler); + d.setModal(false); + d.show(); + break; + + } + */ + + } + + /* + protected void checkTopRating() { + String tableTypeName = chartSession.getTrId().getTableTypeName(); + if (tableTypeName.compareTo(TableType.DATASET.toString()) == 0) { + try { + ChartTopRatingSession chartTopRatingSession = new ChartTopRatingSession(); + chartTopRatingSession.setTrId(chartSession.getTrId()); + TopRatingColumnSelectionCard topRatingColumnSelectionCard = new TopRatingColumnSelectionCard( + chartSession, chartTopRatingSession); + getWizardWindow().addCard(topRatingColumnSelectionCard); + getWizardWindow().nextCard(); + + } catch (Exception e) { + Log.error("sayNextCard :" + e.getLocalizedMessage()); + } + } else { + AlertMessageBox d = new AlertMessageBox("Attention", + "Chart not applicable, table is not a Dataset!"); + d.addHideHandler(new HideHandler() { + + public void onHide(HideEvent event) { + getWizardWindow().setEnableNextButton(true); + getWizardWindow().setEnableBackButton(false); + + } + }); + d.setModal(false); + d.show(); + } + + }*/ + + @Override + public void dispose() { + + } + +} diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/multicolumn/CreateRuleOnTableWizard.java b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/multicolumn/CreateRuleOnTableWizard.java new file mode 100644 index 0000000..c8114f8 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/multicolumn/CreateRuleOnTableWizard.java @@ -0,0 +1,42 @@ +package org.gcube.portlets.user.td.rulewidget.client.multicolumn; + + + +import org.gcube.portlets.user.td.gwtservice.shared.rule.description.RuleDescriptionData; +import org.gcube.portlets.user.td.wizardwidget.client.WizardWindow; + +import com.allen_sauer.gwt.log.client.Log; +import com.google.web.bindery.event.shared.EventBus; + + + +/** + * + * @author giancarlo + * email: g.panichi@isti.cnr.it + * + */ +public class CreateRuleOnTableWizard extends WizardWindow { + + + /** + * + * @param title + * @param eventBus + */ + public CreateRuleOnTableWizard(EventBus eventBus) { + super("Create Rule On Table",eventBus); + Log.debug("CreateRuleOnMultiColumnWizard"); + create(); + } + + + private void create() { + CreateRuleOnTableDefinitionCard createRuleOnTableDefinitionCard=new CreateRuleOnTableDefinitionCard(); + addCard(createRuleOnTableDefinitionCard); + createRuleOnTableDefinitionCard.setup(); + show(); + } + + +} \ No newline at end of file