From ab431a827579cc992838100ea72dcda192e6bd76 Mon Sep 17 00:00:00 2001 From: Giancarlo Panichi Date: Mon, 25 May 2015 17:02:41 +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 Create Rule on Table Wizard git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/tabular-data-rule-widget@114889 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../td/rulewidget/client/RuleWidgetEntry.java | 28 +++ .../CreateRuleOnTableDefinitionCard.java | 2 +- .../CreateRuleOnTableExpressionCard.java | 97 ++++------- ...ateRuleOnTableOperationInProgressCard.java | 161 ++++++++++++++++++ .../multicolumn/CreateRuleOnTableWizard.java | 7 +- .../client/resources/ResourceBundle.java | 13 ++ .../client/resources/rule-table-add.png | Bin 0 -> 889 bytes .../client/resources/rule-table-add_32.png | Bin 0 -> 1958 bytes .../client/resources/rule-table-apply.png | Bin 0 -> 872 bytes .../client/resources/rule-table-apply_32.png | Bin 0 -> 1818 bytes .../user/td/rulewidget/RuleWidget.gwt.xml | 10 +- .../client/resources/rule-table-add.png | Bin 0 -> 889 bytes .../client/resources/rule-table-add_32.png | Bin 0 -> 1958 bytes .../client/resources/rule-table-apply.png | Bin 0 -> 872 bytes .../client/resources/rule-table-apply_32.png | Bin 0 -> 1818 bytes 15 files changed, 249 insertions(+), 69 deletions(-) create mode 100644 src/main/java/org/gcube/portlets/user/td/rulewidget/client/multicolumn/CreateRuleOnTableOperationInProgressCard.java create mode 100644 src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-table-add.png create mode 100644 src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-table-add_32.png create mode 100644 src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-table-apply.png create mode 100644 src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-table-apply_32.png create mode 100644 src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-table-add.png create mode 100644 src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-table-add_32.png create mode 100644 src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-table-apply.png create mode 100644 src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-table-apply_32.png diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleWidgetEntry.java b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleWidgetEntry.java index 7b8d4b8..c06e05b 100644 --- a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleWidgetEntry.java +++ b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleWidgetEntry.java @@ -5,6 +5,8 @@ import org.gcube.portlets.user.td.gwtservice.client.rpc.TDGWTServiceAsync; import org.gcube.portlets.user.td.gwtservice.shared.exception.TDGWTSessionExpiredException; import org.gcube.portlets.user.td.gwtservice.shared.user.UserInfo; import org.gcube.portlets.user.td.rulewidget.client.multicolumn.CreateRuleOnTableWizard; +import org.gcube.portlets.user.td.widgetcommonevent.shared.TRId; +import org.gcube.portlets.user.td.wizardwidget.client.WizardListener; import com.allen_sauer.gwt.log.client.Log; import com.google.gwt.core.client.EntryPoint; @@ -31,6 +33,32 @@ public class RuleWidgetEntry implements EntryPoint { try { CreateRuleOnTableWizard createRuleOnTableWizard = new CreateRuleOnTableWizard( eventBus); + createRuleOnTableWizard.addListener(new WizardListener() { + + @Override + public void putInBackground() { + Log.debug("Putted In Background"); + + } + + @Override + public void failed(String title, String message, String details, + Throwable throwable) { + Log.debug("Failed"); + + } + + @Override + public void completed(TRId id) { + Log.debug("Completed"); + + } + + @Override + public void aborted() { + Log.debug("Aborted"); + } + }); createRuleOnTableWizard.show(); } catch (Throwable e) { e.printStackTrace(); 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 index 739a047..99046cc 100644 --- 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 @@ -372,9 +372,9 @@ public class CreateRuleOnTableDefinitionCard extends WizardCard { tdRuleTableType); getWizardWindow().addCard(createRuleOnTableExpressionCard); getWizardWindow().nextCard(); - } catch (Exception e) { Log.error("sayNextCard :" + e.getLocalizedMessage()); + e.printStackTrace(); } } diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/multicolumn/CreateRuleOnTableExpressionCard.java b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/multicolumn/CreateRuleOnTableExpressionCard.java index 08e9b35..75ca937 100644 --- a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/multicolumn/CreateRuleOnTableExpressionCard.java +++ b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/multicolumn/CreateRuleOnTableExpressionCard.java @@ -1,60 +1,23 @@ package org.gcube.portlets.user.td.rulewidget.client.multicolumn; -import java.util.ArrayList; +import java.util.Date; -import org.gcube.portlets.user.td.expressionwidget.client.properties.RuleColumnPlaceHolderDescriptorProperties; -import org.gcube.portlets.user.td.gwtservice.shared.rule.RuleColumnPlaceHolderDescriptor; +import org.gcube.portlets.user.td.expressionwidget.client.MultiColumnExpressionPanel; +import org.gcube.portlets.user.td.expressionwidget.client.exception.MultiColumnExpressionPanelException; +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.gwtservice.shared.rule.type.TDRuleTableType; -import org.gcube.portlets.user.td.rulewidget.client.resources.ResourceBundle; -import org.gcube.portlets.user.td.widgetcommonevent.shared.tr.column.ColumnDataType; import org.gcube.portlets.user.td.wizardwidget.client.WizardCard; -import org.gcube.portlets.user.td.wizardwidget.client.util.UtilsGXT3; import com.allen_sauer.gwt.log.client.Log; -import com.google.gwt.core.client.GWT; -import com.google.gwt.editor.client.Editor.Path; +import com.google.gwt.i18n.client.DateTimeFormat; import com.google.gwt.user.client.Command; -import com.sencha.gxt.cell.core.client.ButtonCell.IconAlign; -import com.sencha.gxt.cell.core.client.form.ComboBoxCell.TriggerAction; -import com.sencha.gxt.core.client.Style.SelectionMode; -import com.sencha.gxt.core.client.util.Margins; import com.sencha.gxt.core.client.util.Padding; -import com.sencha.gxt.data.shared.LabelProvider; -import com.sencha.gxt.data.shared.ListStore; -import com.sencha.gxt.data.shared.ModelKeyProvider; -import com.sencha.gxt.data.shared.PropertyAccess; -import com.sencha.gxt.dnd.core.client.DND.Feedback; -import com.sencha.gxt.dnd.core.client.DndDragStartEvent; -import com.sencha.gxt.dnd.core.client.DndDragStartEvent.DndDragStartHandler; -import com.sencha.gxt.dnd.core.client.GridDragSource; -import com.sencha.gxt.dnd.core.client.GridDropTarget; import com.sencha.gxt.widget.core.client.box.AlertMessageBox; -import com.sencha.gxt.widget.core.client.button.ButtonBar; -import com.sencha.gxt.widget.core.client.button.TextButton; 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.container.VerticalLayoutContainer.VerticalLayoutData; -import com.sencha.gxt.widget.core.client.event.BeforeStartEditEvent; -import com.sencha.gxt.widget.core.client.event.BeforeStartEditEvent.BeforeStartEditHandler; -import com.sencha.gxt.widget.core.client.event.CancelEditEvent; -import com.sencha.gxt.widget.core.client.event.CancelEditEvent.CancelEditHandler; -import com.sencha.gxt.widget.core.client.event.CompleteEditEvent; -import com.sencha.gxt.widget.core.client.event.CompleteEditEvent.CompleteEditHandler; 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.event.SelectEvent; -import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler; -import com.sencha.gxt.widget.core.client.form.ComboBox; import com.sencha.gxt.widget.core.client.form.FormPanel; -import com.sencha.gxt.widget.core.client.form.TextField; -import com.sencha.gxt.widget.core.client.form.validator.EmptyValidator; -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; -import com.sencha.gxt.widget.core.client.grid.Grid.GridCell; -import com.sencha.gxt.widget.core.client.grid.GridSelectionModel; -import com.sencha.gxt.widget.core.client.grid.editing.GridRowEditing; -import com.sencha.gxt.widget.core.client.toolbar.ToolBar; /** * @@ -63,9 +26,11 @@ import com.sencha.gxt.widget.core.client.toolbar.ToolBar; * */ public class CreateRuleOnTableExpressionCard extends WizardCard { - + private DateTimeFormat sdf = DateTimeFormat.getFormat("yyyy-MM-dd HH:mm:ss"); private CreateRuleOnTableExpressionCard thisCard; private TDRuleTableType tdRuleTableType; + private RuleDescriptionData ruleDescriptionData; + private MultiColumnExpressionPanel multiColumnExpressionPanel; public CreateRuleOnTableExpressionCard(TDRuleTableType tdRuleTableType) { super("Create Expression", @@ -81,12 +46,15 @@ public class CreateRuleOnTableExpressionCard extends WizardCard { FormPanel panel = new FormPanel(); panel.setLabelWidth(90); panel.getElement().setPadding(new Padding(5)); - - VerticalLayoutContainer v = new VerticalLayoutContainer(); - panel.add(v); - //v.add(toolBar, new VerticalLayoutData(1, -1, new Margins(0))); - + ruleDescriptionData=new RuleDescriptionData(0, null, null,sdf.format(new Date()),null, null,RuleScopeType.TABLE, null, tdRuleTableType); + try { + multiColumnExpressionPanel = new MultiColumnExpressionPanel(null, ruleDescriptionData); + panel.add(multiColumnExpressionPanel); + } catch (Throwable e) { + showErrorAndHide("Error", e.getLocalizedMessage(), e.getLocalizedMessage(), e); + } + return panel; } @@ -130,41 +98,44 @@ public class CreateRuleOnTableExpressionCard extends WizardCard { public void onHide(HideEvent event) { getWizardWindow().setEnableNextButton(true); - getWizardWindow().setEnableBackButton(false); + getWizardWindow().setEnableBackButton(true); } }; - /*if (store == null || store.size() <= 0) { + try { + if(multiColumnExpressionPanel!=null){ + ruleDescriptionData = multiColumnExpressionPanel.getRuleOnTable(); + } else { + showErrorAndHide("Error","Error creating rule on table!", "", new Exception("Error creating rule on table!")); + return; + } + } catch (MultiColumnExpressionPanelException e) { AlertMessageBox d = new AlertMessageBox("Attention", - "Add at least one column"); + e.getLocalizedMessage()); d.addHideHandler(hideHandler); d.setModal(false); d.show(); return; } - - tdRuleTableType = new TDRuleTableType( - new ArrayList(store.getAll())); - */ goNext(); } protected void goNext(){ - /*try { - ChartTopRatingSession chartTopRatingSession = new ChartTopRatingSession(); - chartTopRatingSession.setTrId(chartSession.getTrId()); - TopRatingColumnSelectionCard topRatingColumnSelectionCard = new TopRatingColumnSelectionCard( - chartSession, chartTopRatingSession); - getWizardWindow().addCard(topRatingColumnSelectionCard); + try { + CreateRuleOnTableOperationInProgressCard createRuleOnTableExpressionCard = new CreateRuleOnTableOperationInProgressCard( + ruleDescriptionData); + getWizardWindow().addCard(createRuleOnTableExpressionCard); getWizardWindow().nextCard(); } catch (Exception e) { Log.error("sayNextCard :" + e.getLocalizedMessage()); - }*/ + } } + + @Override public void dispose() { diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/multicolumn/CreateRuleOnTableOperationInProgressCard.java b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/multicolumn/CreateRuleOnTableOperationInProgressCard.java new file mode 100644 index 0000000..5a901e0 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/multicolumn/CreateRuleOnTableOperationInProgressCard.java @@ -0,0 +1,161 @@ +/** + * + */ +package org.gcube.portlets.user.td.rulewidget.client.multicolumn; + +import org.gcube.portlets.user.td.expressionwidget.client.rpc.ExpressionServiceAsync; +import org.gcube.portlets.user.td.gwtservice.shared.exception.TDGWTIsLockedException; +import org.gcube.portlets.user.td.gwtservice.shared.exception.TDGWTSessionExpiredException; +import org.gcube.portlets.user.td.gwtservice.shared.rule.description.RuleDescriptionData; +import org.gcube.portlets.user.td.widgetcommonevent.client.event.SessionExpiredEvent; +import org.gcube.portlets.user.td.widgetcommonevent.client.type.SessionExpiredType; +import org.gcube.portlets.user.td.wizardwidget.client.WizardCard; +import org.gcube.portlets.user.td.wizardwidget.client.util.UtilsGXT3; + +import com.allen_sauer.gwt.log.client.Log; +import com.google.gwt.safehtml.shared.SafeHtmlBuilder; +import com.google.gwt.user.client.Command; +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.google.gwt.user.client.ui.FlexTable; +import com.sencha.gxt.core.client.util.Margins; +import com.sencha.gxt.widget.core.client.FramedPanel; +import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutData; +import com.sencha.gxt.widget.core.client.container.HtmlLayoutContainer; +import com.sencha.gxt.widget.core.client.container.MarginData; +import com.sencha.gxt.widget.core.client.container.VBoxLayoutContainer; +import com.sencha.gxt.widget.core.client.container.VBoxLayoutContainer.VBoxLayoutAlign; + +/** + * + * @author "Giancarlo Panichi" g.panichi@isti.cnr.it + * + */ +public class CreateRuleOnTableOperationInProgressCard extends WizardCard { + + protected CreateRuleOnTableOperationInProgressCard thisCard; + protected RuleDescriptionData ruleDescriptionData; + protected HtmlLayoutContainer resultField; + + public CreateRuleOnTableOperationInProgressCard( + RuleDescriptionData ruleDescriptionData) { + super("Save Rule On Table", ""); + + this.ruleDescriptionData = ruleDescriptionData; + thisCard = this; + + VBoxLayoutContainer operationInProgressPanel = new VBoxLayoutContainer(); + operationInProgressPanel.setVBoxLayoutAlign(VBoxLayoutAlign.CENTER); + + final FlexTable description = new FlexTable(); + // FlexCellFormatter cellFormatter = description.getFlexCellFormatter(); + description.setCellSpacing(10); + description.setCellPadding(4); + description.setBorderWidth(0); + + // display:block;vertical-align:text-top; + description.setHTML(0, 0, + "Rule Name: "); + description.setText(0, 1, ruleDescriptionData.getName()); + description.setHTML(1, 0, + "Rule Description: "); + description.setText(1, 1, ruleDescriptionData.getDescription()); + + FramedPanel summary = new FramedPanel(); + summary.setHeadingText("Rule On Table"); + summary.setWidth(400); + summary.add(description); + operationInProgressPanel.add(summary, new BoxLayoutData(new Margins(20, + 5, 10, 5))); + + resultField = new HtmlLayoutContainer("
"); + + operationInProgressPanel.add(resultField, new BoxLayoutData( + new Margins(10, 5, 10, 5))); + + setCenterWidget(operationInProgressPanel, new MarginData(0)); + resultField.setVisible(false); + + } + + public void saveRuleOnTable() { + ExpressionServiceAsync.INSTANCE.saveRule(ruleDescriptionData, + new AsyncCallback() { + + @Override + public void onSuccess(String ruleId) { + Log.debug("Saved Rule: " + ruleId); + operationComplete(); + + UtilsGXT3.info("Save Rule", "The rule is saved!"); + + } + + @Override + public void onFailure(Throwable caught) { + if (caught instanceof TDGWTSessionExpiredException) { + getEventBus() + .fireEvent( + new SessionExpiredEvent( + SessionExpiredType.EXPIREDONSERVER)); + } else { + if (caught instanceof TDGWTIsLockedException) { + Log.error(caught.getLocalizedMessage()); + showErrorAndHide("Error", + "Error saving rule on table", + caught.getLocalizedMessage(), caught); + } else { + showErrorAndHide("Error", + "Error saving rule on table: ", + caught.getLocalizedMessage(), caught); + + } + } + + } + }); + + } + + @Override + public void setup() { + getWizardWindow().setEnableBackButton(false); + setBackButtonVisible(false); + getWizardWindow().setEnableNextButton(false); + getWizardWindow().setNextButtonToFinish(); + saveRuleOnTable(); + } + + + + public void operationComplete() { + SafeHtmlBuilder safeHtmlBuilder = new SafeHtmlBuilder(); + safeHtmlBuilder + .appendHtmlConstant("
Operation Completed
"); + resultField.setHTML(safeHtmlBuilder.toSafeHtml()); + resultField.setVisible(true); + + Command sayComplete = new Command() { + public void execute() { + try { + getWizardWindow().close(false); + + getWizardWindow().fireCompleted(null); + + } catch (Exception e) { + Log.error("fire Complete :" + e.getLocalizedMessage()); + } + } + }; + + getWizardWindow().setNextButtonCommand(sayComplete); + + setNextButtonVisible(true); + getWizardWindow().setEnableNextButton(true); + + forceLayout(); + + } + + +} 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 index 5d46756..ff4515f 100644 --- 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 @@ -2,6 +2,7 @@ package org.gcube.portlets.user.td.rulewidget.client.multicolumn; +import org.gcube.portlets.user.td.rulewidget.client.resources.ResourceBundle; import org.gcube.portlets.user.td.wizardwidget.client.WizardWindow; import com.allen_sauer.gwt.log.client.Log; @@ -16,7 +17,8 @@ import com.google.web.bindery.event.shared.EventBus; * */ public class CreateRuleOnTableWizard extends WizardWindow { - + private static final String WIZARDWIDTH = "950px"; + private static final String WIZARDHEIGHT = "512px"; /** * @@ -26,6 +28,9 @@ public class CreateRuleOnTableWizard extends WizardWindow { public CreateRuleOnTableWizard(EventBus eventBus) { super("Create Rule On Table",eventBus); Log.debug("CreateRuleOnMultiColumnWizard"); + setWidth(WIZARDWIDTH); + setHeight(WIZARDHEIGHT); + getHeader().setIcon(ResourceBundle.INSTANCE.ruleTableAdd()); create(); } diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/ResourceBundle.java b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/ResourceBundle.java index 5831873..97ca740 100644 --- a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/ResourceBundle.java +++ b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/ResourceBundle.java @@ -115,6 +115,19 @@ public interface ResourceBundle extends ClientBundle { @Source("rule-column-detach_32.png") ImageResource ruleColumnDetach32(); + @Source("rule-table-add.png") + ImageResource ruleTableAdd(); + + @Source("rule-table-add_32.png") + ImageResource ruleTableAdd32(); + + @Source("rule-table-apply.png") + ImageResource ruleTableApply(); + + @Source("rule-table-apply_32.png") + ImageResource ruleTableApply32(); + + @Source("rule-tabularresource.png") ImageResource ruleTabularResource(); diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-table-add.png b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-table-add.png new file mode 100644 index 0000000000000000000000000000000000000000..4e0cece133acd0db1ab5d8ab7e65ac7378fa6b81 GIT binary patch literal 889 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 IM6N<$f@An{l>h($ literal 0 HcmV?d00001 diff --git a/src/main/resources/org/gcube/portlets/user/td/rulewidget/RuleWidget.gwt.xml b/src/main/resources/org/gcube/portlets/user/td/rulewidget/RuleWidget.gwt.xml index 0f3b753..8699222 100644 --- a/src/main/resources/org/gcube/portlets/user/td/rulewidget/RuleWidget.gwt.xml +++ b/src/main/resources/org/gcube/portlets/user/td/rulewidget/RuleWidget.gwt.xml @@ -39,18 +39,20 @@ values="en" /> --> - - - + + + /> diff --git a/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-table-add.png b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-table-add.png new file mode 100644 index 0000000000000000000000000000000000000000..4e0cece133acd0db1ab5d8ab7e65ac7378fa6b81 GIT binary patch literal 889 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 IM6N<$f@An{l>h($ literal 0 HcmV?d00001