diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..eeee3e0 --- /dev/null +++ b/.classpath @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.project b/.project new file mode 100644 index 0000000..b6d5d88 --- /dev/null +++ b/.project @@ -0,0 +1,53 @@ + + + tabular-data-rule-widget + + + + + + org.eclipse.wst.jsdt.core.javascriptValidator + + + + + org.eclipse.wst.common.project.facet.core.builder + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.wst.validation.validationbuilder + + + + + com.google.gdt.eclipse.core.webAppProjectValidator + + + + + com.google.gwt.eclipse.core.gwtProjectValidator + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jem.workbench.JavaEMFNature + org.eclipse.wst.common.modulecore.ModuleCoreNature + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + org.eclipse.wst.common.project.facet.core.nature + org.eclipse.wst.jsdt.core.jsNature + com.google.gwt.eclipse.core.gwtNature + + diff --git a/RuleWidget.launch b/RuleWidget.launch new file mode 100644 index 0000000..6098c85 --- /dev/null +++ b/RuleWidget.launch @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/config/profile.xml b/config/profile.xml new file mode 100644 index 0000000..fd635b8 --- /dev/null +++ b/config/profile.xml @@ -0,0 +1,29 @@ + + + + Service + + tabular-data-rule-widget allows to manage rules + PortletsUser + tabular-data-rule-widget + 1.0.0-SNAPSHOT + + + tabular-data-rule-widget allows to manage rules + tabular-data-rule-widget + 1.0.0-SNAPSHOT + + org.gcube.portlets.user + tabular-data-rule-widget + 1.0.0-SNAPSHOT + + library + + tabular-data-rule-widget-1.0.0-SNAPSHOT.jar + + + + + + + diff --git a/distro/INSTALL b/distro/INSTALL new file mode 100644 index 0000000..e69de29 diff --git a/distro/LICENSE b/distro/LICENSE new file mode 100644 index 0000000..cc51139 --- /dev/null +++ b/distro/LICENSE @@ -0,0 +1,6 @@ +gCube System - License +------------------------------------------------------------ + +The gCube/gCore software is licensed as Free Open Source software conveying to the EUPL (http://ec.europa.eu/idabc/eupl). +The software and documentation is provided by its authors/distributors "as is" and no expressed or +implied warranty is given for its use, quality or fitness for a particular case. \ No newline at end of file diff --git a/distro/MAINTAINERS b/distro/MAINTAINERS new file mode 100644 index 0000000..0bc9be3 --- /dev/null +++ b/distro/MAINTAINERS @@ -0,0 +1 @@ +Giancarlo Panichi (giancarlo.panichi@isti.cnr.it), CNR Pisa, Istituto di Scienza e Tecnologie dell'Informazione "A. Faedo" diff --git a/distro/README b/distro/README new file mode 100644 index 0000000..9d76855 --- /dev/null +++ b/distro/README @@ -0,0 +1,48 @@ +The gCube System - tabular-data-rule-widget +------------------------------------------------------------ + +This work has been supported by the following European projects: iMarine (FP7-INFRASTRUCTURES-2011-2) + +Authors +------- + +Giancarlo Panichi (giancarlo.panichi@isti.cnr.it), CNR Pisa, +Istituto di Scienza e Tecnologie dell'Informazione "A. Faedo" + + +Version and Release Date +------------------------ + +v. 1.0.0-SNAPSHOT (2015-04-30) + + +Description +----------- + +tabular-data-rule-widget allows to manage rules + + +Download information +-------------------- +Source code is available from SVN: + https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/tabular-data-rule-widget + +Binaries can be downloaded from: + http://software.d4science.research-infrastructures.eu/ + + +Documentation +------------- + +tabular-data-rule-widget allows to manage rules + +Documentation is available on-line from the Projects Documentation Wiki: + https://gcube.wiki.gcube-system.org/gcube/index.php/Tabular_Data_Manager + + +Licensing +--------- + +This software is licensed under the terms you may find in the file named "LICENSE" in this directory. + + diff --git a/distro/changelog.xml b/distro/changelog.xml new file mode 100644 index 0000000..f36766d --- /dev/null +++ b/distro/changelog.xml @@ -0,0 +1,6 @@ + + + First Release + + \ No newline at end of file diff --git a/distro/svnpath.txt b/distro/svnpath.txt new file mode 100644 index 0000000..28c302e --- /dev/null +++ b/distro/svnpath.txt @@ -0,0 +1 @@ +https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/tabular-data-rule-widget \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..2fb9608 --- /dev/null +++ b/pom.xml @@ -0,0 +1,360 @@ + + + + + maven-parent + org.gcube.tools + 1.0.0 + + + + + 4.0.0 + org.gcube.portlets.user + tabular-data-rule-widget + 1.0.0-SNAPSHOT + + + tabular-data-rule-widget + tabular-data-rule-widget allows to manage rules + + + https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/tabular-data-rule-widget + + + + + Giancarlo Panichi + g.panichi@isti.cnr.it + CNR Pisa, Istituto di Scienza e Tecnologie dell'Informazione "A. Faedo" + + architect + developer + + + + + + ${project.basedir}/distro + ${project.build.directory}/${project.build.finalName} + 2015-04-30 + https://gcube.wiki.gcube-system.org/gcube/index.php/Tabular_Data_Manager + templates + distro + config + + + 2.6.1 + 3.3.2 + 3.1.1 + + ${env.KEYS} + + + UTF-8 + UTF-8 + + + + + + + localRun + + + org.slf4j + slf4j-api + compile + + + ch.qos.logback + logback-classic + 1.0.1 + runtime + + + org.gcube.common + home-library + [1.0.0-SNAPSHOT, 2.0.0-SNAPSHOT) + + + + org.gcube.data.analysis.tabulardata + service-client-impl + [2.0.0-SNAPSHOT,3.0.0-SNAPSHOT) + + + org.gcube.core + common-scope-maps + [1.0.2-SNAPSHOT,2.0.0-SNAPSHOT) + compile + + + org.gcube.applicationsupportlayer + aslsocial + + + org.gcube.portal + custom-portal-handler + + + org.gcube.applicationsupportlayer + aslcore + + + org.gcube.applicationsupportlayer + accesslogger + + + + + + + + + com.google.gwt + gwt-servlet + ${gwtVersion} + + + com.google.gwt + gwt-user + ${gwtVersion} + + + + com.sencha.gxt + gxt + ${gxtVersion} + + + + + org.gcube.portlets.user + tabular-data-widget-common-event + [1.0.0-SNAPSHOT,2.0.0-SNAPSHOT) + provided + + + + + org.gcube.portlets.user + tabular-data-gwt-service + [2.0.0-SNAPSHOT,3.0.0-SNAPSHOT) + provided + + + + + org.gcube.portlets.user + tabular-data-expression-widget + [1.0.0-SNAPSHOT, 2.0.0-SNAPSHOT) + provided + + + + + + + org.gcube.portlets.user + tabular-data-monitor-widget + [1.0.0-SNAPSHOT,2.0.0-SNAPSHOT) + provided + + + + + org.gcube.portlets.user + tabular-data-wizard-widget + [1.0.0-SNAPSHOT,2.0.0-SNAPSHOT) + provided + + + + + + org.gcube.portlets.user + tabular-data-share-widget + [1.0.0-SNAPSHOT,2.0.0-SNAPSHOT) + provided + + + + + + com.allen-sauer.gwt.log + gwt-log + ${gwtLogVersion} + provided + + + + org.slf4j + slf4j-api + + + + + junit + junit + 4.8.1 + test + + + + + + + + ${webappDirectory}/WEB-INF/classes + + + src/main/resources + + **/*.* + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.16 + + true + + + + + org.apache.maven.surefire + surefire-junit47 + 2.16 + + + + + + + org.codehaus.mojo + gwt-maven-plugin + ${gwtVersion} + + + + resources + + + + + RuleWidget.html + ${webappDirectory} + org.gcube.portlets.user.td.rulewidget.RuleWidget + + + + + + maven-resources-plugin + 2.6 + + + copy-profile + process-resources + + copy-resources + + + ${configDirectory} + + + ${templatesDirectory} + + profile.xml + + true + + + + + + copy-distro-resources + process-resources + + copy-resources + + + ${distroDirectory} + + + ${templatesDirectory} + + profile.xml + descriptor.xml + + true + + + + + + + + maven-clean-plugin + 2.5 + + + + ${distroDirectory} + + ** + + false + + + ${configDirectory} + + ** + + false + + + + + + org.apache.maven.plugins + maven-assembly-plugin + 2.2 + + + ${templatesDirectory}/descriptor.xml + + + + + servicearchive + package + + single + + + + + + + + + + + + + org.gcube.distribution + maven-portal-bom + LATEST + pom + import + + + + diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/RuleWidget.gwt.xml b/src/main/java/org/gcube/portlets/user/td/rulewidget/RuleWidget.gwt.xml new file mode 100644 index 0000000..4a8c7d8 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/td/rulewidget/RuleWidget.gwt.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleActiveDialog.java b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleActiveDialog.java new file mode 100644 index 0000000..d308e8c --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleActiveDialog.java @@ -0,0 +1,63 @@ +package org.gcube.portlets.user.td.rulewidget.client; + +import org.gcube.portlets.user.td.rulewidget.client.resources.ResourceBundle; +import org.gcube.portlets.user.td.widgetcommonevent.shared.TRId; + +import com.google.web.bindery.event.shared.EventBus; +import com.sencha.gxt.widget.core.client.Window; +import com.sencha.gxt.widget.core.client.event.SelectEvent; +import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler; + +/** + * + * @author "Giancarlo Panichi" g.panichi@isti.cnr.it + * + */ +public class RuleActiveDialog extends Window { + private static final String WIDTH = "720px"; + private static final String HEIGHT = "428px"; + public RuleActiveDialog(TRId trId, EventBus eventBus) { + initWindow(); + + RuleActivePanel ruleActivePanel = new RuleActivePanel(this, + trId, eventBus); + add(ruleActivePanel); + } + + protected void initWindow() { + setWidth(WIDTH); + setHeight(HEIGHT); + setBodyBorder(false); + setResizable(false); + setHeadingText("Active Rules On TabularResource"); + setClosable(true); + setModal(true); + forceLayoutOnResize = true; + getHeader().setIcon(ResourceBundle.INSTANCE.ruleTabularResource()); + + } + + /** + * {@inheritDoc} + */ + @Override + protected void initTools() { + super.initTools(); + + closeBtn.addSelectHandler(new SelectHandler() { + + public void onSelect(SelectEvent event) { + close(); + } + }); + + } + + protected void close() { + hide(); + } + + + +} 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 new file mode 100644 index 0000000..03c3c5f --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleActivePanel.java @@ -0,0 +1,481 @@ +package org.gcube.portlets.user.td.rulewidget.client; + +import java.util.ArrayList; +import java.util.HashMap; +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.client.rpc.TDGWTServiceAsync; +import org.gcube.portlets.user.td.gwtservice.shared.exception.TDGWTIsFinalException; +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.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.rulewidget.client.resources.ResourceBundle; +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.widgetcommonevent.shared.TRId; +import org.gcube.portlets.user.td.widgetcommonevent.shared.tr.column.ColumnData; +import org.gcube.portlets.user.td.wizardwidget.client.util.UtilsGXT3; + +import com.allen_sauer.gwt.log.client.Log; +import com.google.gwt.cell.client.AbstractCell; +import com.google.gwt.core.client.GWT; +import com.google.gwt.event.logical.shared.SelectionEvent; +import com.google.gwt.event.logical.shared.SelectionHandler; +import com.google.gwt.safehtml.shared.SafeHtml; +import com.google.gwt.safehtml.shared.SafeHtmlBuilder; +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.google.web.bindery.event.shared.EventBus; +import com.sencha.gxt.cell.core.client.ButtonCell.IconAlign; +import com.sencha.gxt.core.client.XTemplates; +import com.sencha.gxt.core.client.dom.ScrollSupport.ScrollMode; +import com.sencha.gxt.core.client.util.Margins; +import com.sencha.gxt.data.shared.ListStore; +import com.sencha.gxt.widget.core.client.FramedPanel; +import com.sencha.gxt.widget.core.client.button.TextButton; +import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutData; +import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutPack; +import com.sencha.gxt.widget.core.client.container.HBoxLayoutContainer; +import com.sencha.gxt.widget.core.client.container.HBoxLayoutContainer.HBoxLayoutAlign; +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.SelectEvent; +import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler; +import com.sencha.gxt.widget.core.client.form.FieldLabel; +import com.sencha.gxt.widget.core.client.form.FieldSet; +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.filters.GridFilters; +import com.sencha.gxt.widget.core.client.grid.filters.StringFilter; +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; + +/** + * + * @author giancarlo email: g.panichi@isti.cnr.it + * + */ +public class RuleActivePanel extends FramedPanel { + private static final int RULE_ON_COLUMN_FIELDSET_HEIGHT = 348; + private static final String RULES_GRID_HEIGHT = "102px"; + private static final String WIDTH = "630px"; + private static final String HEIGHT = "418px"; + + interface RuleApplyTemplates extends XTemplates { + @XTemplate("{value}") + SafeHtml format(String value); + } + + private EventBus eventBus; + private RuleActiveDialog parent; + private TRId trId; + private ArrayList columns; + + private AppliedRulesResponseData appliedRuleResponseData; + + private TextButton btnClose; + private VerticalLayoutContainer mainLayoutContainer; + + public RuleActivePanel(RuleActiveDialog parent, TRId trId, + EventBus eventBus) { + this.parent = parent; + this.trId = trId; + + Log.debug("RuleActivePanel"); + setWidth(WIDTH); + setHeight(HEIGHT); + setHeaderVisible(false); + setBodyBorder(false); + this.eventBus = eventBus; + retrieveColumns(); + + } + + protected void retrieveColumns() { + TDGWTServiceAsync.INSTANCE.getColumns(trId, + new AsyncCallback>() { + + @Override + public void onFailure(Throwable caught) { + if (caught instanceof TDGWTSessionExpiredException) { + eventBus.fireEvent(new SessionExpiredEvent( + SessionExpiredType.EXPIREDONSERVER)); + } else { + if (caught instanceof TDGWTIsLockedException) { + Log.error(caught.getLocalizedMessage()); + UtilsGXT3.alert("Error Locked", + caught.getLocalizedMessage()); + } else { + if (caught instanceof TDGWTIsFinalException) { + Log.error(caught.getLocalizedMessage()); + UtilsGXT3.alert("Error Final", + caught.getLocalizedMessage()); + } else { + Log.debug("Error retrieving columns: " + + caught.getLocalizedMessage()); + UtilsGXT3 + .alert("Error retrieving columns", + "Error retrieving column on server!"); + } + } + } + + } + + @Override + public void onSuccess(ArrayList result) { + Log.debug("Retrieved Columns"); + if (result == null) { + UtilsGXT3.alert("Error", + "The requested columns is null"); + } + columns = result; + + getActiveRulesOnColumn(); + + } + }); + } + + protected void create() { + + Log.debug("Create RuleActivePanel(): " + trId); + + // SimpleContainer rulesOnColumnContainer=new SimpleContainer(); + FieldSet columnRulesFieldSet = new FieldSet(); + columnRulesFieldSet.setHeadingText("Rules On Column"); + columnRulesFieldSet.setCollapsible(false); + + VerticalLayoutContainer columnRulesFieldSetLayout = new VerticalLayoutContainer(); + columnRulesFieldSetLayout.setScrollMode(ScrollMode.AUTO); + columnRulesFieldSetLayout.setAdjustForScroll(true); + + columnRulesFieldSet.add(columnRulesFieldSetLayout); + + HashMap> columnRuleMapping = appliedRuleResponseData + .getColumnRuleMapping(); + if (columnRuleMapping != null && columnRuleMapping.size() > 0) { + + for (ColumnData column : columns) { + ArrayList columnAppliedRules = columnRuleMapping + .get(column.getColumnId()); + if (columnAppliedRules != null && columnAppliedRules.size() > 0) { + FieldLabel columnLabel = createColumnRules(column, + columnAppliedRules); + columnRulesFieldSetLayout.add(columnLabel, + new VerticalLayoutData(1, -1, new Margins(0))); + } + } + } else { + FieldLabel noRulesLabel = new FieldLabel(null, "No rules applied!"); + noRulesLabel.setLabelSeparator(""); + columnRulesFieldSetLayout.add(noRulesLabel, new VerticalLayoutData( + 1, -1, new Margins(0))); + + } + + btnClose = new TextButton("Close"); + btnClose.setIcon(ResourceBundle.INSTANCE.close()); + btnClose.setIconAlign(IconAlign.RIGHT); + btnClose.setToolTip("Close"); + btnClose.addSelectHandler(new SelectHandler() { + + public void onSelect(SelectEvent event) { + Log.debug("Pressed Close"); + close(); + } + }); + + HBoxLayoutContainer flowButton = new HBoxLayoutContainer(); + flowButton.setHBoxLayoutAlign(HBoxLayoutAlign.MIDDLE); + flowButton.setPack(BoxLayoutPack.CENTER); + flowButton.add(btnClose, new BoxLayoutData(new Margins(2, 4, 2, 4))); + + mainLayoutContainer = new VerticalLayoutContainer(); + mainLayoutContainer.add(columnRulesFieldSet, new VerticalLayoutData(-1, + RULE_ON_COLUMN_FIELDSET_HEIGHT, new Margins(0))); + mainLayoutContainer.add(flowButton, + new VerticalLayoutData(1, 36, new Margins(5, 2, 5, 2))); + add(mainLayoutContainer); + + } + + private FieldLabel createColumnRules(ColumnData column, + ArrayList columnAppliedRules) { + // Rules + + RuleDescriptionDataProperties propsRules = GWT + .create(RuleDescriptionDataProperties.class); + + ColumnConfig nameCol = new ColumnConfig( + propsRules.name(), 120, "Name"); + + nameCol.setCell(new AbstractCell() { + + @Override + public void render(Context context, String value, SafeHtmlBuilder sb) { + RuleApplyTemplates ruleApplyTemplates = GWT + .create(RuleApplyTemplates.class); + sb.append(ruleApplyTemplates.format(value)); + } + }); + + ColumnConfig descriptionCol = new ColumnConfig( + propsRules.description(), 120, "Description"); + descriptionCol.setCell(new AbstractCell() { + + @Override + public void render(Context context, String value, SafeHtmlBuilder sb) { + RuleApplyTemplates ruleApplyTemplates = GWT + .create(RuleApplyTemplates.class); + sb.append(ruleApplyTemplates.format(value)); + } + }); + + ColumnConfig ownerCol = new ColumnConfig( + propsRules.ownerLogin(), 70, "Owner"); + ownerCol.setCell(new AbstractCell() { + + @Override + public void render(Context context, String value, SafeHtmlBuilder sb) { + RuleApplyTemplates ruleApplyTemplates = GWT + .create(RuleApplyTemplates.class); + sb.append(ruleApplyTemplates.format(value)); + } + }); + + /* + ColumnConfig readableExpressionCol = new ColumnConfig( + propsRules.readableExpression(), 160, "Expression"); + + + readableExpressionCol.setCell(new AbstractCell() { + + @Override + public void render(Context context, String value, SafeHtmlBuilder sb) { + RuleApplyTemplates ruleApplyTemplates = GWT + .create(RuleApplyTemplates.class); + sb.append(ruleApplyTemplates.format(value)); + } + });*/ + + List> l = new ArrayList>(); + l.add(nameCol); + l.add(descriptionCol); + l.add(ownerCol); + //l.add(readableExpressionCol); + + ColumnModel cm = new ColumnModel( + l); + + StringFilter nameFilter = new StringFilter( + propsRules.name()); + StringFilter descriptionFilter = new StringFilter( + propsRules.description()); + + // Applies Rules + ListStore appliedRulesStore = new ListStore( + propsRules.id()); + + if (columnAppliedRules != null && columnAppliedRules.size() > 0) { + appliedRulesStore.addAll(columnAppliedRules); + } + + final Grid gridAppliedRules = new Grid( + appliedRulesStore, cm); + gridAppliedRules.setItemId(column.getColumnId()); + gridAppliedRules.setHeight(RULES_GRID_HEIGHT); + gridAppliedRules.getView().setStripeRows(true); + gridAppliedRules.getView().setColumnLines(true); + gridAppliedRules.getView().setAutoFill(true); + gridAppliedRules.setBorders(false); + gridAppliedRules.setLoadMask(true); + gridAppliedRules.setColumnReordering(true); + gridAppliedRules.setColumnResize(true); + gridAppliedRules.getView().setAutoExpandColumn(descriptionCol); + + GridFilters filtersAppliesRules = new GridFilters(); + filtersAppliesRules.initPlugin(gridAppliedRules); + filtersAppliesRules.setLocal(true); + filtersAppliesRules.addFilter(nameFilter); + filtersAppliesRules.addFilter(descriptionFilter); + + createContextMenu(gridAppliedRules); + + FieldLabel rulesAppliedLabel = new FieldLabel(gridAppliedRules, + column.getLabel()); + + return rulesAppliedLabel; + } + + protected void getActiveRulesOnColumn() { + + ExpressionServiceAsync.INSTANCE.getActiveRulesByTabularResourceId( + trId, new AsyncCallback() { + + @Override + public void onFailure(Throwable caught) { + if (caught instanceof TDGWTSessionExpiredException) { + eventBus.fireEvent(new SessionExpiredEvent( + SessionExpiredType.EXPIREDONSERVER)); + } else { + Log.error(caught.getLocalizedMessage()); + UtilsGXT3.alert("Error retrieving active rules", + caught.getLocalizedMessage()); + } + + } + + @Override + public void onSuccess(AppliedRulesResponseData result) { + Log.trace("AppliedRuleResponseData: " + result); + appliedRuleResponseData = result; + create(); + } + }); + + } + + + protected void updateActiveRulesOnColumn() { + + ExpressionServiceAsync.INSTANCE.getActiveRulesByTabularResourceId( + trId, new AsyncCallback() { + + @Override + public void onFailure(Throwable caught) { + if (caught instanceof TDGWTSessionExpiredException) { + eventBus.fireEvent(new SessionExpiredEvent( + SessionExpiredType.EXPIREDONSERVER)); + } else { + Log.error(caught.getLocalizedMessage()); + UtilsGXT3.alert("Error retrieving applied rules", + caught.getLocalizedMessage()); + } + + } + + @Override + public void onSuccess(AppliedRulesResponseData result) { + Log.trace("AppliedRuleResponseData: " + result); + appliedRuleResponseData = result; + recreate(); + } + }); + + } + + + protected void close() { + parent.close(); + } + + + + + protected void requestInfo(RuleDescriptionData rule) { + final RuleInfoDialog infoRuleDialog = new RuleInfoDialog(rule); + infoRuleDialog.show(); + + + } + + protected void createContextMenu(final Grid grid) { + Menu contextMenu = new Menu(); + + MenuItem infoItem = new MenuItem(); + infoItem.setText("Info"); + infoItem.setToolTip("Info"); + infoItem.setIcon(ResourceBundle.INSTANCE.information()); + infoItem.addSelectionHandler(new SelectionHandler() { + + @Override + public void onSelection(SelectionEvent event) { + RuleDescriptionData selected = grid.getSelectionModel() + .getSelectedItem(); + Log.debug(selected.toString()); + requestInfo(selected); + } + }); + + MenuItem detachItem = new MenuItem(); + detachItem.setText("Detach"); + detachItem.setToolTip("Detach rule"); + detachItem.setIcon(ResourceBundle.INSTANCE.ruleColumnDetach()); + detachItem.addSelectionHandler(new SelectionHandler() { + + @Override + public void onSelection(SelectionEvent event) { + RuleDescriptionData selected = grid.getSelectionModel() + .getSelectedItem(); + Log.debug(selected.toString()); + requestDetach(selected, grid); + } + + + }); + + + contextMenu.add(infoItem); + contextMenu.add(detachItem); + + grid.setContextMenu(contextMenu); + + } + + protected void requestDetach(RuleDescriptionData selected, + final Grid grid) { + + String columnLocalId=grid.getItemId(); + ColumnData columnData=new ColumnData(); + columnData.setColumnId(columnLocalId); + ArrayList detachRules=new ArrayList(); + detachRules.add(selected); + + DetachColumnRulesSession detachColumnRulesSession=new DetachColumnRulesSession(trId, columnData, detachRules); + + ExpressionServiceAsync.INSTANCE.setDetachColumnRules(detachColumnRulesSession, + new AsyncCallback() { + + @Override + public void onFailure(Throwable caught) { + if (caught instanceof TDGWTSessionExpiredException) { + eventBus.fireEvent(new SessionExpiredEvent( + SessionExpiredType.EXPIREDONSERVER)); + } else { + Log.error(caught.getLocalizedMessage()); + UtilsGXT3.alert("Error in detach rules", + caught.getLocalizedMessage()); + } + + } + + @Override + public void onSuccess(Void result) { + updateActiveRulesOnColumn(); + Log.debug("The rule is detached!"); + UtilsGXT3.info("Detach Rule", + "The rule is detached!"); + + } + }); + + } + + + protected void recreate(){ + remove(mainLayoutContainer); + create(); + forceLayout(); + + + } + + +} diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleApplyDialog.java b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleApplyDialog.java new file mode 100644 index 0000000..57cf27c --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleApplyDialog.java @@ -0,0 +1,172 @@ +package org.gcube.portlets.user.td.rulewidget.client; + + +import org.gcube.portlets.user.td.expressionwidget.client.rpc.ExpressionServiceAsync; +import org.gcube.portlets.user.td.gwtservice.shared.exception.TDGWTIsFinalException; +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.ApplyAndDetachColumnRulesSession; +import org.gcube.portlets.user.td.monitorwidget.client.MonitorDialog; +import org.gcube.portlets.user.td.monitorwidget.client.MonitorDialogListener; +import org.gcube.portlets.user.td.rulewidget.client.resources.ResourceBundle; +import org.gcube.portlets.user.td.widgetcommonevent.client.event.ChangeTableRequestEvent; +import org.gcube.portlets.user.td.widgetcommonevent.client.event.SessionExpiredEvent; +import org.gcube.portlets.user.td.widgetcommonevent.client.type.ChangeTableRequestType; +import org.gcube.portlets.user.td.widgetcommonevent.client.type.ChangeTableWhy; +import org.gcube.portlets.user.td.widgetcommonevent.client.type.SessionExpiredType; +import org.gcube.portlets.user.td.widgetcommonevent.shared.OperationResult; +import org.gcube.portlets.user.td.widgetcommonevent.shared.TRId; +import org.gcube.portlets.user.td.wizardwidget.client.util.UtilsGXT3; + +import com.allen_sauer.gwt.log.client.Log; +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.google.web.bindery.event.shared.EventBus; +import com.sencha.gxt.widget.core.client.Window; +import com.sencha.gxt.widget.core.client.event.SelectEvent; +import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler; + +/** + * + * @author "Giancarlo Panichi" g.panichi@isti.cnr.it + * + */ +public class RuleApplyDialog extends Window implements + MonitorDialogListener { + private static final String WIDTH = "720px"; + private static final String HEIGHT = "530px"; + private EventBus eventBus; + + public RuleApplyDialog(TRId trId, EventBus eventBus) { + this.eventBus = eventBus; + initWindow(); + + RuleApplyPanel ruleApplyPanel = new RuleApplyPanel(this, + trId, eventBus); + add(ruleApplyPanel); + } + + protected void initWindow() { + setWidth(WIDTH); + setHeight(HEIGHT); + setBodyBorder(false); + setResizable(false); + setHeadingText("Apply Rules On Column"); + setClosable(true); + setModal(true); + forceLayoutOnResize = true; + getHeader().setIcon(ResourceBundle.INSTANCE.ruleColumnApply()); + + } + + /** + * {@inheritDoc} + */ + @Override + protected void initTools() { + super.initTools(); + + closeBtn.addSelectHandler(new SelectHandler() { + + public void onSelect(SelectEvent event) { + close(); + } + }); + + } + + protected void close() { + hide(); + } + + protected void applyRules(ApplyAndDetachColumnRulesSession applyColumnRulesSession) { + ExpressionServiceAsync.INSTANCE.startApplyAndDetachColumnRules(applyColumnRulesSession, new AsyncCallback() { + + @Override + public void onFailure(Throwable caught) { + if (caught instanceof TDGWTSessionExpiredException) { + eventBus.fireEvent(new SessionExpiredEvent( + SessionExpiredType.EXPIREDONSERVER)); + } else { + if (caught instanceof TDGWTIsLockedException) { + Log.error(caught.getLocalizedMessage()); + UtilsGXT3.alert("Error Locked", + caught.getLocalizedMessage()); + } else { + if (caught instanceof TDGWTIsFinalException) { + Log.error(caught.getLocalizedMessage()); + UtilsGXT3.alert("Error Is Final", + caught.getLocalizedMessage()); + } else { + Log.debug("Apply Rules On Column Error: " + + caught.getLocalizedMessage()); + UtilsGXT3 + .alert("Apply Rules On Column", + caught.getLocalizedMessage()); + } + } + } + + } + + @Override + public void onSuccess(String taskId) { + if(taskId!=null){ + openMonitorDialog(taskId); + } else { + close(); + } + + } + + + + }); + + } + + protected void openMonitorDialog(String taskId) { + MonitorDialog monitorDialog = new MonitorDialog(taskId, eventBus); + monitorDialog.addProgressDialogListener(this); + monitorDialog.show(); + } + + @Override + public void operationComplete(OperationResult operationResult) { + ChangeTableWhy why = ChangeTableWhy.TABLEUPDATED; + ChangeTableRequestEvent changeTableRequestEvent = new ChangeTableRequestEvent( + ChangeTableRequestType.RULESONCOLUMNAPPLY, operationResult.getTrId(), why); + eventBus.fireEvent(changeTableRequestEvent); + close(); + } + + @Override + public void operationFailed(Throwable caught, String reason, String details) { + UtilsGXT3.alert(reason, details); + close(); + + } + + @Override + public void operationStopped(OperationResult operationResult, String reason, String details) { + ChangeTableWhy why = ChangeTableWhy.TABLECURATION; + ChangeTableRequestEvent changeTableRequestEvent = new ChangeTableRequestEvent( + ChangeTableRequestType.RULESONCOLUMNAPPLY, operationResult.getTrId(), why); + eventBus.fireEvent(changeTableRequestEvent); + close(); + + } + + @Override + public void operationAborted() { + close(); + + } + + @Override + public void operationPutInBackground() { + close(); + + } + +} 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 new file mode 100644 index 0000000..8397a41 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleApplyPanel.java @@ -0,0 +1,602 @@ +package org.gcube.portlets.user.td.rulewidget.client; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import org.gcube.portlets.user.td.expressionwidget.client.properties.ColumnDataPropertiesCombo; +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.client.rpc.TDGWTServiceAsync; +import org.gcube.portlets.user.td.gwtservice.shared.exception.TDGWTIsFinalException; +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.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.rulewidget.client.resources.ResourceBundle; +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.widgetcommonevent.shared.TRId; +import org.gcube.portlets.user.td.widgetcommonevent.shared.tr.column.ColumnData; +import org.gcube.portlets.user.td.wizardwidget.client.util.UtilsGXT3; + +import com.allen_sauer.gwt.log.client.Log; +import com.google.gwt.cell.client.AbstractCell; +import com.google.gwt.core.client.GWT; +import com.google.gwt.event.logical.shared.SelectionEvent; +import com.google.gwt.event.logical.shared.SelectionHandler; +import com.google.gwt.safehtml.shared.SafeHtml; +import com.google.gwt.safehtml.shared.SafeHtmlBuilder; +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.google.gwt.user.client.ui.HTML; +import com.google.web.bindery.event.shared.EventBus; +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.XTemplates; +import com.sencha.gxt.core.client.util.Margins; +import com.sencha.gxt.data.shared.LabelProvider; +import com.sencha.gxt.data.shared.ListStore; +import com.sencha.gxt.dnd.core.client.GridDragSource; +import com.sencha.gxt.dnd.core.client.GridDropTarget; +import com.sencha.gxt.widget.core.client.FramedPanel; +import com.sencha.gxt.widget.core.client.button.TextButton; +import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutData; +import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutPack; +import com.sencha.gxt.widget.core.client.container.HBoxLayoutContainer; +import com.sencha.gxt.widget.core.client.container.HBoxLayoutContainer.HBoxLayoutAlign; +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.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.FieldLabel; +import com.sencha.gxt.widget.core.client.form.FieldSet; +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.filters.GridFilters; +import com.sencha.gxt.widget.core.client.grid.filters.StringFilter; +import com.sencha.gxt.widget.core.client.info.Info; +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; + +/** + * + * @author giancarlo email: g.panichi@isti.cnr.it + * + */ +public class RuleApplyPanel extends FramedPanel { + private static final String RULE_TIP = "

Tip.: Use drag and drop in order to change selected rules.

"; + private static final String RULES_GRID_HEIGHT = "184px"; + private static final String SET_RULES = "SetRules"; + + interface RuleApplyTemplates extends XTemplates { + @XTemplate("{value}") + SafeHtml format(String value); + } + + private static final String WIDTH = "630px"; + private static final String HEIGHT = "520px"; + + private EventBus eventBus; + private RuleApplyDialog parent; + private TRId trId; + private ArrayList columns; + private ColumnData column; + private AppliedRulesResponseData appliedRuleResponseData; + private ArrayList applicableRules; + private ArrayList appliedRules; + + private TextButton btnApply; + private TextButton btnClose; + + private ComboBox comboColumns; + private ListStore applicableRulesStore; + private Grid gridApplicableRules; + private ListStore selectedRulesStore; + private Grid gridSelectedRules; + + public RuleApplyPanel(RuleApplyDialog parent, TRId trId, EventBus eventBus) { + this.parent = parent; + this.trId = trId; + applicableRules = new ArrayList(); + + Log.debug("RuleApplyPanel"); + setWidth(WIDTH); + setHeight(HEIGHT); + setHeaderVisible(false); + setBodyBorder(false); + this.eventBus = eventBus; + retrieveColumns(); + + } + + protected void retrieveColumns() { + TDGWTServiceAsync.INSTANCE.getColumns(trId, + new AsyncCallback>() { + + @Override + public void onFailure(Throwable caught) { + if (caught instanceof TDGWTSessionExpiredException) { + eventBus.fireEvent(new SessionExpiredEvent( + SessionExpiredType.EXPIREDONSERVER)); + } else { + if (caught instanceof TDGWTIsLockedException) { + Log.error(caught.getLocalizedMessage()); + UtilsGXT3.alert("Error Locked", + caught.getLocalizedMessage()); + } else { + if (caught instanceof TDGWTIsFinalException) { + Log.error(caught.getLocalizedMessage()); + UtilsGXT3.alert("Error Final", + caught.getLocalizedMessage()); + } else { + Log.debug("Error retrieving columns: " + + caught.getLocalizedMessage()); + UtilsGXT3 + .alert("Error retrieving columns", + "Error retrieving column on server!"); + } + } + } + + } + + @Override + public void onSuccess(ArrayList result) { + Log.debug("Retrieved Columns"); + if (result == null) { + UtilsGXT3.alert("Error", + "The requested columns is null"); + } + columns = result; + + getAppliedBaseColumnRules(); + + } + }); + } + + protected void create() { + + Log.debug("Create RuleApplyPanel(): " + trId); + + FieldSet configurationFieldSet = new FieldSet(); + configurationFieldSet.setHeadingText("Configuration"); + configurationFieldSet.setCollapsible(false); + + VerticalLayoutContainer configurationFieldSetLayout = new VerticalLayoutContainer(); + configurationFieldSet.add(configurationFieldSetLayout); + + // Column Data + ColumnDataPropertiesCombo propsColumnData = GWT + .create(ColumnDataPropertiesCombo.class); + ListStore storeCombo = new ListStore( + propsColumnData.id()); + storeCombo.addAll(columns); + + Log.trace("StoreCombo created"); + comboColumns = new ComboBox(storeCombo, + propsColumnData.label()); + + Log.trace("Combo ColumnData created"); + + addHandlersForComboColumn(propsColumnData.label()); + comboColumns.setEmptyText("Select a column..."); + comboColumns.setWidth(191); + comboColumns.setTypeAhead(false); + comboColumns.setEditable(false); + comboColumns.setTriggerAction(TriggerAction.ALL); + + FieldLabel comboColumnsLabel = new FieldLabel(comboColumns, "Column"); + configurationFieldSetLayout.add(comboColumnsLabel, + new VerticalLayoutData(1, -1, new Margins(0))); + + // Rules + + RuleDescriptionDataProperties propsRules = GWT + .create(RuleDescriptionDataProperties.class); + + ColumnConfig nameCol = new ColumnConfig( + propsRules.name(), 120, "Name"); + + nameCol.setCell(new AbstractCell() { + + @Override + public void render(Context context, String value, SafeHtmlBuilder sb) { + RuleApplyTemplates ruleApplyTemplates = GWT + .create(RuleApplyTemplates.class); + sb.append(ruleApplyTemplates.format(value)); + } + }); + + ColumnConfig descriptionCol = new ColumnConfig( + propsRules.description(), 120, "Description"); + descriptionCol.setCell(new AbstractCell() { + + @Override + public void render(Context context, String value, SafeHtmlBuilder sb) { + RuleApplyTemplates ruleApplyTemplates = GWT + .create(RuleApplyTemplates.class); + sb.append(ruleApplyTemplates.format(value)); + } + }); + + ColumnConfig ownerCol = new ColumnConfig( + propsRules.ownerLogin(), 70, "Owner"); + ownerCol.setCell(new AbstractCell() { + + @Override + public void render(Context context, String value, SafeHtmlBuilder sb) { + RuleApplyTemplates ruleApplyTemplates = GWT + .create(RuleApplyTemplates.class); + sb.append(ruleApplyTemplates.format(value)); + } + }); + + List> l = new ArrayList>(); + l.add(nameCol); + l.add(descriptionCol); + l.add(ownerCol); + // l.add(readableExpressionCol); + + ColumnModel cm = new ColumnModel( + l); + + StringFilter nameFilter = new StringFilter( + propsRules.name()); + StringFilter descriptionFilter = new StringFilter( + propsRules.description()); + + // Applicable Rules + applicableRulesStore = new ListStore( + propsRules.id()); + + gridApplicableRules = new Grid( + applicableRulesStore, cm); + gridApplicableRules.setHeight(RULES_GRID_HEIGHT); + gridApplicableRules.getView().setStripeRows(true); + gridApplicableRules.getView().setColumnLines(true); + gridApplicableRules.getView().setAutoFill(true); + gridApplicableRules.setBorders(false); + gridApplicableRules.setLoadMask(true); + gridApplicableRules.setColumnReordering(true); + gridApplicableRules.setColumnResize(true); + gridApplicableRules.getView().setAutoExpandColumn(descriptionCol); + + GridFilters filtersApplicableRules = new GridFilters(); + filtersApplicableRules.initPlugin(gridApplicableRules); + filtersApplicableRules.setLocal(true); + filtersApplicableRules.addFilter(nameFilter); + filtersApplicableRules.addFilter(descriptionFilter); + + createContextMenu(gridApplicableRules); + + // Selected Rules + selectedRulesStore = new ListStore(propsRules.id()); + + gridSelectedRules = new Grid(selectedRulesStore, + cm); + gridSelectedRules.setHeight(RULES_GRID_HEIGHT); + gridSelectedRules.getView().setStripeRows(true); + gridSelectedRules.getView().setColumnLines(true); + gridSelectedRules.getView().setAutoFill(true); + gridSelectedRules.setBorders(false); + gridSelectedRules.setLoadMask(true); + gridSelectedRules.setColumnReordering(true); + gridSelectedRules.setColumnResize(true); + gridSelectedRules.getView().setAutoExpandColumn(descriptionCol); + + GridFilters filtersSelectedRules = new GridFilters(); + filtersSelectedRules.initPlugin(gridSelectedRules); + filtersSelectedRules.setLocal(true); + filtersSelectedRules.addFilter(nameFilter); + filtersSelectedRules.addFilter(descriptionFilter); + + createContextMenu(gridSelectedRules); + + // + + new GridDragSource(gridApplicableRules) + .setGroup(SET_RULES); + new GridDragSource(gridSelectedRules) + .setGroup(SET_RULES); + + new GridDropTarget(gridApplicableRules) + .setGroup(SET_RULES); + new GridDropTarget(gridSelectedRules) + .setGroup(SET_RULES); + + // + FieldLabel rulesApplicableLabel = new FieldLabel(gridApplicableRules, + "Applicable Rules"); + + configurationFieldSetLayout.add(rulesApplicableLabel, + new VerticalLayoutData(1, -1, new Margins(0))); + + FieldLabel rulesSelectedLabel = new FieldLabel(gridSelectedRules, + "Selected Rules"); + + configurationFieldSetLayout.add(rulesSelectedLabel, + new VerticalLayoutData(1, -1, new Margins(0))); + + // + HTML rulesNote = new HTML(RULE_TIP); + configurationFieldSetLayout.add(rulesNote, + new VerticalLayoutData(-1, -1, new Margins(0))); + // Button + btnApply = new TextButton("Apply"); + btnApply.setIcon(ResourceBundle.INSTANCE.ruleColumnApply()); + btnApply.setIconAlign(IconAlign.RIGHT); + btnApply.setToolTip("Apply Rule"); + btnApply.addSelectHandler(new SelectHandler() { + + public void onSelect(SelectEvent event) { + Log.debug("Pressed Apply"); + apply(); + + } + }); + + btnClose = new TextButton("Close"); + btnClose.setIcon(ResourceBundle.INSTANCE.close()); + btnClose.setIconAlign(IconAlign.RIGHT); + btnClose.setToolTip("Close"); + btnClose.addSelectHandler(new SelectHandler() { + + public void onSelect(SelectEvent event) { + Log.debug("Pressed Close"); + close(); + } + }); + + HBoxLayoutContainer flowButton = new HBoxLayoutContainer(); + flowButton.setHBoxLayoutAlign(HBoxLayoutAlign.MIDDLE); + flowButton.setPack(BoxLayoutPack.CENTER); + + flowButton.add(btnApply, new BoxLayoutData(new Margins(2, 4, 2, 4))); + flowButton.add(btnClose, new BoxLayoutData(new Margins(2, 4, 2, 4))); + + VerticalLayoutContainer v = new VerticalLayoutContainer(); + v.add(configurationFieldSet, new VerticalLayoutData(-1, -1, + new Margins(0))); + v.add(flowButton, + new VerticalLayoutData(1, 36, new Margins(5, 2, 5, 2))); + add(v); + + } + + private void addHandlersForComboColumn( + final LabelProvider labelProvider) { + comboColumns.addSelectionHandler(new SelectionHandler() { + public void onSelection(SelectionEvent event) { + Info.display( + "Column Selected", + "You selected " + + (event.getSelectedItem() == null ? "nothing" + : labelProvider.getLabel(event + .getSelectedItem()) + "!")); + Log.debug("ComboColumn selected: " + event.getSelectedItem()); + ColumnData columnData = event.getSelectedItem(); + updateRulesInGrids(columnData); + } + + }); + + } + + protected void updateRulesInGrids(ColumnData columnData) { + column = columnData; + applicableRulesStore.clear(); + selectedRulesStore.clear(); + HashMap> columnRuleMapping = appliedRuleResponseData + .getColumnRuleMapping(); + + if (columnRuleMapping != null) { + ArrayList applied = columnRuleMapping + .get(columnData.getColumnId()); + + if (applied != null) { + appliedRules = applied; + selectedRulesStore.addAll(new ArrayList( + applied)); + + } + } + getApplicableBaseColumnRules(); + + } + + protected void getApplicableBaseColumnRules() { + ExpressionServiceAsync.INSTANCE.getApplicableBaseColumnRules(column, + new AsyncCallback>() { + + @Override + public void onFailure(Throwable caught) { + if (caught instanceof TDGWTSessionExpiredException) { + eventBus.fireEvent(new SessionExpiredEvent( + SessionExpiredType.EXPIREDONSERVER)); + } else { + Log.error(caught.getLocalizedMessage()); + UtilsGXT3.alert( + "Error retrieving applicable rules", + caught.getLocalizedMessage()); + } + + } + + @Override + public void onSuccess(ArrayList result) { + Log.trace("loaded " + result.size() + " Rules"); + if (appliedRules != null && appliedRules.size() > 0) { + ArrayList removableRules = new ArrayList(); + for (RuleDescriptionData ruleApplied : appliedRules) { + for (RuleDescriptionData ruleApplicable : result) { + if (ruleApplicable.equals(ruleApplied)) { + removableRules.add(ruleApplicable); + break; + } + } + + } + result.removeAll(removableRules); + + } + applicableRules = result; + applicableRulesStore + .addAll(new ArrayList( + applicableRules)); + + forceLayout(); + + } + }); + + } + + protected void getAppliedBaseColumnRules() { + + ExpressionServiceAsync.INSTANCE.getActiveRulesByTabularResourceId(trId, + new AsyncCallback() { + + @Override + public void onFailure(Throwable caught) { + if (caught instanceof TDGWTSessionExpiredException) { + eventBus.fireEvent(new SessionExpiredEvent( + SessionExpiredType.EXPIREDONSERVER)); + } else { + Log.error(caught.getLocalizedMessage()); + UtilsGXT3.alert("Error retrieving selected rules", + caught.getLocalizedMessage()); + } + + } + + @Override + public void onSuccess(AppliedRulesResponseData result) { + Log.trace("AppliedRuleResponseData: " + result); + appliedRuleResponseData = result; + create(); + } + }); + + } + + protected ArrayList getSelectedItems() { + List selectedItems = selectedRulesStore.getAll(); + ArrayList rulesSelected = new ArrayList( + selectedItems); + return rulesSelected; + } + + protected void apply() { + ColumnData column = comboColumns.getCurrentValue(); + if (column != null) { + ArrayList selectedRules = getSelectedItems(); + if(selectedRules==null){ + selectedRules=new ArrayList(); + } + ArrayList rulesThatWillBeDetach = new ArrayList(); + ArrayList rulesThatWillBeApplied = new ArrayList(); + HashMap> columnRuleMapping = appliedRuleResponseData + .getColumnRuleMapping(); + if (columnRuleMapping != null) { + ArrayList rulesApplied = columnRuleMapping + .get(column.getColumnId()); + if (rulesApplied != null && rulesApplied.size() > 0) { + for (RuleDescriptionData ruleApplied : rulesApplied) { + boolean ruleStillApplied = false; + for (RuleDescriptionData ruleSelected : selectedRules) { + if (ruleSelected.getId() == ruleApplied.getId()) { + ruleStillApplied = true; + break; + } + } + + if (!ruleStillApplied) { + rulesThatWillBeDetach.add(ruleApplied); + } + } + } + } + + for (RuleDescriptionData ruleSelected : selectedRules) { + boolean ruleApplied = false; + + if (columnRuleMapping != null) { + ArrayList rulesApplied = columnRuleMapping + .get(column.getColumnId()); + if (rulesApplied != null) { + for (RuleDescriptionData ruleAlreadyApplied : rulesApplied) { + if (ruleSelected.getId() == ruleAlreadyApplied + .getId()) { + ruleApplied = true; + break; + } + } + } else { + + } + } else { + + } + + if (ruleApplied == false) { + rulesThatWillBeApplied.add(ruleSelected); + } + } + + if(rulesThatWillBeApplied.size()<=0&&rulesThatWillBeDetach.size()<=0){ + Log.error("Select a rule!"); + UtilsGXT3.alert("Attention", "Select a rule!"); + return; + } + + ApplyAndDetachColumnRulesSession applyColumnRulesSession = new ApplyAndDetachColumnRulesSession( + trId, column, rulesThatWillBeApplied, rulesThatWillBeDetach); + parent.applyRules(applyColumnRulesSession); + + } else { + Log.error("No column selected"); + UtilsGXT3.alert("Attention", "Select a column"); + } + } + + protected void close() { + parent.close(); + } + + protected void requestInfo(RuleDescriptionData rule) { + final RuleInfoDialog infoRuleDialog = new RuleInfoDialog(rule); + infoRuleDialog.show(); + + + } + + protected void createContextMenu(final Grid grid) { + Menu contextMenu = new Menu(); + + MenuItem infoItem = new MenuItem(); + infoItem.setText("Info"); + infoItem.setIcon(ResourceBundle.INSTANCE.information()); + infoItem.addSelectionHandler(new SelectionHandler() { + + @Override + public void onSelection(SelectionEvent event) { + RuleDescriptionData selected = grid.getSelectionModel() + .getSelectedItem(); + Log.debug(selected.toString()); + requestInfo(selected); + } + }); + + contextMenu.add(infoItem); + + grid.setContextMenu(contextMenu); + + } + +} 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 new file mode 100644 index 0000000..153449a --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleDeleteDialog.java @@ -0,0 +1,103 @@ +package org.gcube.portlets.user.td.rulewidget.client; + +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.rulewidget.client.resources.ResourceBundle; +import org.gcube.portlets.user.td.widgetcommonevent.client.event.SessionExpiredEvent; +import org.gcube.portlets.user.td.widgetcommonevent.client.type.SessionExpiredType; + +import com.allen_sauer.gwt.log.client.Log; +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.google.web.bindery.event.shared.EventBus; +import com.sencha.gxt.widget.core.client.Window; +import com.sencha.gxt.widget.core.client.event.SelectEvent; +import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler; + +/** + * + * @author "Giancarlo Panichi" g.panichi@isti.cnr.it + * + */ +public class RuleDeleteDialog extends Window { + private static final String WIDTH = "720px"; + private static final String HEIGHT = "530px"; + private EventBus eventBus; + private RuleDeletePanel ruleDeletePanel; + + public RuleDeleteDialog(EventBus eventBus) { + this.eventBus = eventBus; + initWindow(); + + ruleDeletePanel = new RuleDeletePanel(this, eventBus); + add(ruleDeletePanel); + } + + protected void initWindow() { + setWidth(WIDTH); + setHeight(HEIGHT); + setBodyBorder(false); + setResizable(false); + setHeadingText("Delete Rule"); + setClosable(true); + setModal(true); + forceLayoutOnResize = true; + getHeader().setIcon(ResourceBundle.INSTANCE.ruleDelete()); + + } + + /** + * {@inheritDoc} + */ + @Override + protected void initTools() { + super.initTools(); + + closeBtn.addSelectHandler(new SelectHandler() { + + public void onSelect(SelectEvent event) { + close(); + } + }); + + } + + protected void close() { + hide(); + } + + protected void removeRule(ArrayList rules) { + + ExpressionServiceAsync.INSTANCE.removeRulesById(rules, + new AsyncCallback() { + + @Override + public void onSuccess(Void v) { + Log.debug("Rule is deleted!"); + UtilsGXT3.info("Delete Rule", "The rule is deleted!"); + ruleDeletePanel.gridReload(); + } + + @Override + public void onFailure(Throwable caught) { + if (caught instanceof TDGWTSessionExpiredException) { + eventBus.fireEvent(new SessionExpiredEvent( + SessionExpiredType.EXPIREDONSERVER)); + } else { + Log.error("Error deleting column rule: " + + caught.getLocalizedMessage()); + caught.printStackTrace(); + UtilsGXT3.alert("Error deleting column rule", + caught.getLocalizedMessage()); + } + ruleDeletePanel.gridReload(); + + } + }); + } + +} 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 new file mode 100644 index 0000000..d79e14c --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleDeletePanel.java @@ -0,0 +1,430 @@ +package org.gcube.portlets.user.td.rulewidget.client; + +import java.util.ArrayList; +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.rulewidget.client.resources.ResourceBundle; +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.util.UtilsGXT3; + +import com.allen_sauer.gwt.log.client.Log; +import com.google.gwt.cell.client.AbstractCell; +import com.google.gwt.core.client.GWT; +import com.google.gwt.core.client.Scheduler; +import com.google.gwt.core.client.Scheduler.ScheduledCommand; +import com.google.gwt.event.dom.client.KeyUpEvent; +import com.google.gwt.event.dom.client.KeyUpHandler; +import com.google.gwt.event.logical.shared.SelectionEvent; +import com.google.gwt.event.logical.shared.SelectionHandler; +import com.google.gwt.safehtml.shared.SafeHtml; +import com.google.gwt.safehtml.shared.SafeHtmlBuilder; +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.google.web.bindery.event.shared.EventBus; +import com.sencha.gxt.cell.core.client.ButtonCell.IconAlign; +import com.sencha.gxt.core.client.IdentityValueProvider; +import com.sencha.gxt.core.client.Style.SelectionMode; +import com.sencha.gxt.core.client.XTemplates; +import com.sencha.gxt.core.client.resources.ThemeStyles; +import com.sencha.gxt.core.client.util.Margins; +import com.sencha.gxt.data.client.loader.RpcProxy; +import com.sencha.gxt.data.shared.ListStore; +import com.sencha.gxt.data.shared.ModelKeyProvider; +import com.sencha.gxt.data.shared.Store; +import com.sencha.gxt.data.shared.Store.StoreFilter; +import com.sencha.gxt.data.shared.loader.ListLoadConfig; +import com.sencha.gxt.data.shared.loader.ListLoadResult; +import com.sencha.gxt.data.shared.loader.ListLoadResultBean; +import com.sencha.gxt.data.shared.loader.ListLoader; +import com.sencha.gxt.data.shared.loader.LoadResultListStoreBinding; +import com.sencha.gxt.widget.core.client.FramedPanel; +import com.sencha.gxt.widget.core.client.button.TextButton; +import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutData; +import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutPack; +import com.sencha.gxt.widget.core.client.container.HBoxLayoutContainer; +import com.sencha.gxt.widget.core.client.container.HBoxLayoutContainer.HBoxLayoutAlign; +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.SelectEvent; +import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler; +import com.sencha.gxt.widget.core.client.form.TextField; +import com.sencha.gxt.widget.core.client.grid.CheckBoxSelectionModel; +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.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.LabelToolItem; +import com.sencha.gxt.widget.core.client.toolbar.ToolBar; + +public class RuleDeletePanel extends FramedPanel { + private static final String WIDTH = "630px"; + private static final String HEIGHT = "520px"; + + interface RuleDeleteTemplates extends XTemplates { + @XTemplate("{value}") + SafeHtml format(String value); + } + + private EventBus eventBus; + private RuleDeleteDialog parent; + + private TextButton btnDelete; + private TextButton btnClose; + + private ListLoader> loader; + private Grid grid; + private ExtendedListStore store; + + public RuleDeletePanel(RuleDeleteDialog parent, EventBus eventBus) { + this.parent = parent; + Log.debug("RuleDeletePanel"); + setWidth(WIDTH); + setHeight(HEIGHT); + setHeaderVisible(false); + setBodyBorder(false); + this.eventBus = eventBus; + + create(); + + } + + protected void create() { + ToolBar toolBarHead = new ToolBar(); + toolBarHead.add(new LabelToolItem("Search: ")); + final TextField searchField = new TextField(); + toolBarHead.add(searchField); + + TextButton btnReload = new TextButton(); + // btnReload.setText("Reload"); + btnReload.setIcon(ResourceBundle.INSTANCE.refresh()); + btnReload.setToolTip("Reload"); + toolBarHead.add(btnReload); + + IdentityValueProvider identity = new IdentityValueProvider(); + CheckBoxSelectionModel sm = new CheckBoxSelectionModel( + identity); + + RuleDescriptionDataProperties props = GWT + .create(RuleDescriptionDataProperties.class); + + ColumnConfig nameCol = new ColumnConfig( + props.name(), 120, "Name"); + + nameCol.setCell(new AbstractCell() { + + @Override + public void render(Context context, String value, SafeHtmlBuilder sb) { + RuleDeleteTemplates ruleDeleteTemplates = GWT + .create(RuleDeleteTemplates.class); + sb.append(ruleDeleteTemplates.format(value)); + } + }); + + ColumnConfig scopeCol = new ColumnConfig( + props.scopeLabel(), 40, "Scope"); + + nameCol.setCell(new AbstractCell() { + + @Override + public void render(Context context, String value, SafeHtmlBuilder sb) { + RuleDeleteTemplates ruleDeleteTemplates = GWT + .create(RuleDeleteTemplates.class); + sb.append(ruleDeleteTemplates.format(value)); + } + }); + + ColumnConfig descriptionCol = new ColumnConfig( + props.description(), 120, "Description"); + descriptionCol.setCell(new AbstractCell() { + + @Override + public void render(Context context, String value, SafeHtmlBuilder sb) { + RuleDeleteTemplates ruleDeleteTemplates = GWT + .create(RuleDeleteTemplates.class); + sb.append(ruleDeleteTemplates.format(value)); + } + }); + + ColumnConfig ownerCol = new ColumnConfig( + props.ownerLogin(), 70, "Owner"); + ownerCol.setCell(new AbstractCell() { + + @Override + public void render(Context context, String value, SafeHtmlBuilder sb) { + RuleDeleteTemplates ruleDeleteTemplates = GWT + .create(RuleDeleteTemplates.class); + sb.append(ruleDeleteTemplates.format(value)); + } + }); + + /* + ColumnConfig readableExpressionCol = new ColumnConfig( + props.readableExpression(), 160, "Expression"); + + readableExpressionCol.setCell(new AbstractCell() { + + @Override + public void render(Context context, String value, SafeHtmlBuilder sb) { + RuleDeleteTemplates ruleDeleteTemplates = GWT + .create(RuleDeleteTemplates.class); + sb.append(ruleDeleteTemplates.format(value)); + } + });*/ + + List> l = new ArrayList>(); + l.add(nameCol); + l.add(scopeCol); + l.add(descriptionCol); + l.add(ownerCol); + //l.add(readableExpressionCol); + + ColumnModel cm = new ColumnModel( + l); + + store = new ExtendedListStore(props.id()); + + searchField.addKeyUpHandler(new KeyUpHandler() { + + public void onKeyUp(KeyUpEvent event) { + Log.trace("searchTerm: " + searchField.getCurrentValue()); + store.applyFilters(); + } + }); + + store.addFilter(new StoreFilter() { + + @Override + public boolean select(Store store, + RuleDescriptionData parent, RuleDescriptionData item) { + String searchTerm = searchField.getCurrentValue(); + if (searchTerm == null) + return true; + return RuleDeletePanel.this.select(item, searchTerm); + } + }); + + store.setEnableFilters(true); + + RpcProxy> proxy = new RpcProxy>() { + + public void load( + ListLoadConfig loadConfig, + final AsyncCallback> callback) { + loadData(loadConfig, callback); + } + }; + loader = new ListLoader>( + proxy); + + loader.setRemoteSort(false); + loader.addLoadHandler(new LoadResultListStoreBinding>( + store) { + }); + + SelectHandler sh = new SelectHandler() { + public void onSelect(SelectEvent event) { + loader.load(); + } + }; + + btnReload.addSelectHandler(sh); + + grid = new Grid(store, cm) { + @Override + protected void onAfterFirstAttach() { + super.onAfterFirstAttach(); + Scheduler.get().scheduleDeferred(new ScheduledCommand() { + + public void execute() { + loader.load(); + } + }); + } + }; + + sm.setSelectionMode(SelectionMode.MULTI); + grid.setLoader(loader); + grid.setSelectionModel(sm); + grid.setHeight("384px"); + grid.getView().setStripeRows(true); + grid.getView().setColumnLines(true); + grid.getView().setAutoFill(true); + grid.setBorders(false); + grid.setLoadMask(true); + grid.setColumnReordering(true); + grid.setColumnResize(true); + grid.getView().setAutoExpandColumn(descriptionCol); + + createContextMenu(); + + ToolBar toolBar = new ToolBar(); + toolBar.add(grid); + toolBar.addStyleName(ThemeStyles.get().style().borderTop()); + toolBar.getElement().getStyle().setProperty("borderBottom", "none"); + + btnDelete = new TextButton("Delete"); + btnDelete.setIcon(ResourceBundle.INSTANCE.ruleDelete()); + btnDelete.setIconAlign(IconAlign.RIGHT); + btnDelete.setToolTip("Delete"); + btnDelete.addSelectHandler(new SelectHandler() { + + public void onSelect(SelectEvent event) { + Log.debug("Pressed Delete"); + delete(); + + } + }); + + btnClose = new TextButton("Close"); + btnClose.setIcon(ResourceBundle.INSTANCE.close()); + btnClose.setIconAlign(IconAlign.RIGHT); + btnClose.setToolTip("Close"); + btnClose.addSelectHandler(new SelectHandler() { + + public void onSelect(SelectEvent event) { + Log.debug("Pressed Close"); + close(); + } + }); + + HBoxLayoutContainer flowButton = new HBoxLayoutContainer(); + flowButton.setHBoxLayoutAlign(HBoxLayoutAlign.MIDDLE); + flowButton.setPack(BoxLayoutPack.CENTER); + + BoxLayoutData boxLayoutData = new BoxLayoutData(new Margins(2, 4, 2, 4)); + flowButton.add(btnDelete, boxLayoutData); + flowButton.add(btnClose, boxLayoutData); + + VerticalLayoutContainer v = new VerticalLayoutContainer(); + v.add(toolBarHead, new VerticalLayoutData(1, -1, new Margins(0))); + v.add(grid, new VerticalLayoutData(1, -1, new Margins(0))); + v.add(toolBar, new VerticalLayoutData(1, 25, new Margins(0))); + v.add(flowButton, + new VerticalLayoutData(1, 36, new Margins(5, 2, 5, 2))); + add(v); + + } + + protected void loadData(ListLoadConfig loadConfig, + final AsyncCallback> callback) { + + ExpressionServiceAsync.INSTANCE.getRules(RuleScopeType.COLUMN, + new AsyncCallback>() { + + @Override + public void onFailure(Throwable caught) { + if (caught instanceof TDGWTSessionExpiredException) { + eventBus.fireEvent(new SessionExpiredEvent( + SessionExpiredType.EXPIREDONSERVER)); + } else { + Log.error("Load rules failure:" + + caught.getLocalizedMessage()); + UtilsGXT3.alert("Error retrieving rules", + "Error retrieving rules"); + } + callback.onFailure(caught); + + } + + @Override + public void onSuccess(ArrayList result) { + Log.trace("loaded " + result.size() + " Rules"); + callback.onSuccess(new ListLoadResultBean( + result)); + + } + }); + } + + protected ArrayList getSelectedItem() { + ArrayList rules = new ArrayList(); + for (RuleDescriptionData rule : grid.getSelectionModel() + .getSelectedItems()) { + rules.add(rule); + } + return rules; + } + + protected void delete() { + ArrayList rules = getSelectedItem(); + if (rules == null || rules.size() == 0) { + UtilsGXT3.info("Attention", "Select the rule to be deleted"); + } else { + Log.debug("Rules Delete: " + rules); + parent.removeRule(rules); + + } + + } + + protected void close() { + parent.close(); + } + + protected class ExtendedListStore extends ListStore { + + public ExtendedListStore(ModelKeyProvider keyProvider) { + super(keyProvider); + } + + public void applyFilters() { + super.applyFilters(); + } + + } + + public void gridReload() { + grid.getLoader().load(); + } + + protected boolean select(RuleDescriptionData item, String searchTerm) { + if (item.getName() != null + && item.getName().toLowerCase() + .contains(searchTerm.toLowerCase())) + return true; + if (item.getDescription() != null + && item.getDescription().toLowerCase() + .contains(searchTerm.toLowerCase())) + return true; + return false; + } + + protected void requestInfo(RuleDescriptionData rule) { + + final RuleInfoDialog infoRuleDialog = new RuleInfoDialog(rule); + infoRuleDialog.show(); + + + } + + protected void createContextMenu() { + Menu contextMenu = new Menu(); + + MenuItem infoItem = new MenuItem(); + infoItem.setText("Info"); + infoItem.setIcon(ResourceBundle.INSTANCE.information()); + infoItem.addSelectionHandler(new SelectionHandler() { + + @Override + public void onSelection(SelectionEvent event) { + RuleDescriptionData selected = grid.getSelectionModel() + .getSelectedItem(); + Log.debug(selected.toString()); + requestInfo(selected); + } + }); + + contextMenu.add(infoItem); + + grid.setContextMenu(contextMenu); + + } + +} 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 new file mode 100644 index 0000000..4e6fdd9 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleInfoDialog.java @@ -0,0 +1,98 @@ +package org.gcube.portlets.user.td.rulewidget.client; + +import org.gcube.portlets.user.td.gwtservice.shared.rule.RuleDescriptionData; +import org.gcube.portlets.user.td.rulewidget.client.resources.ResourceBundle; + +import com.sencha.gxt.core.client.util.Margins; +import com.sencha.gxt.widget.core.client.Dialog; +import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutPack; +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.form.FieldLabel; +import com.sencha.gxt.widget.core.client.form.FieldSet; +import com.sencha.gxt.widget.core.client.form.TextArea; +import com.sencha.gxt.widget.core.client.form.TextField; + + +/** + * + * @author giancarlo + * email: g.panichi@isti.cnr.it + * + */ +public class RuleInfoDialog extends Dialog { + RuleDescriptionData ruleDescriptionData; + + public RuleInfoDialog(RuleDescriptionData ruleDescriptionData){ + this.ruleDescriptionData=ruleDescriptionData; + initWindow(); + create(); + } + + protected void initWindow(){ + setModal(true); + setHeadingText("Info Rule"); + getHeader().setIcon( + ResourceBundle.INSTANCE.information()); + setPredefinedButtons(PredefinedButton.OK); + setHideOnButtonClick(true); + setButtonAlign(BoxLayoutPack.CENTER); + setWidth(500); + + } + + protected void create(){ + FieldSet configurationFieldSet = new FieldSet(); + configurationFieldSet.setHeadingText("Configuration"); + configurationFieldSet.setCollapsible(false); + configurationFieldSet.setBorders(true); + + VerticalLayoutContainer configurationFieldSetLayout = new VerticalLayoutContainer(); + configurationFieldSet.add(configurationFieldSetLayout, + new MarginData(0)); + + TextField ruleName = new TextField(); + ruleName.setValue(ruleDescriptionData.getName()); + ruleName.setReadOnly(true); + FieldLabel ruleNameLabel = new FieldLabel(ruleName, "Name"); + configurationFieldSetLayout.add(ruleNameLabel, new VerticalLayoutData( + 1, -1, new Margins(0))); + + TextField ruleScope = new TextField(); + ruleScope.setValue(ruleDescriptionData.getScopeLabel()); + ruleScope.setReadOnly(true); + FieldLabel ruleScopeLabel = new FieldLabel(ruleScope, "Scope"); + configurationFieldSetLayout.add(ruleScopeLabel, new VerticalLayoutData( + 1, -1, new Margins(0))); + + TextArea ruleDescription = new TextArea(); + ruleDescription.setValue(ruleDescriptionData.getDescription()); + ruleDescription.setReadOnly(true); + FieldLabel ruleDescriptionLabel = new FieldLabel(ruleDescription, + "Description"); + configurationFieldSetLayout.add(ruleDescriptionLabel, + new VerticalLayoutData(1, -1, new Margins(0))); + + TextField ruleOwner = new TextField(); + ruleOwner.setValue(ruleDescriptionData.getOwnerLogin()); + ruleOwner.setReadOnly(true); + FieldLabel ruleOwnerLabel = new FieldLabel(ruleOwner, "Owner"); + configurationFieldSetLayout.add(ruleOwnerLabel, new VerticalLayoutData( + 1, -1, new Margins(0))); + + TextArea ruleExpression = new TextArea(); + ruleExpression.setValue(ruleDescriptionData.getReadableExpression()); + ruleExpression.setReadOnly(true); + ruleExpression.setHeight("82px"); + FieldLabel ruleExpressionLabel = new FieldLabel(ruleExpression, + "Expression"); + configurationFieldSetLayout.add(ruleExpressionLabel, + new VerticalLayoutData(1, -1, new Margins(0))); + + add(configurationFieldSet, new MarginData(0)); + + } + + +} 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 new file mode 100644 index 0000000..38a0801 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleOpenDialog.java @@ -0,0 +1,105 @@ +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.rulewidget.client.resources.ResourceBundle; + +import com.allen_sauer.gwt.log.client.Log; +import com.google.web.bindery.event.shared.EventBus; +import com.sencha.gxt.widget.core.client.Window; +import com.sencha.gxt.widget.core.client.event.SelectEvent; +import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler; + +/** + * + * @author "Giancarlo Panichi" g.panichi@isti.cnr.it + * + */ +public class RuleOpenDialog extends Window implements RuleEditDialogNotificationListener { + private static final String WIDTH = "720px"; + private static final String HEIGHT = "530px"; + private RuleOpenPanel rulesOpenPanel; + private EventBus eventBus; + + public RuleOpenDialog(EventBus eventBus) { + this.eventBus=eventBus; + initWindow(); + rulesOpenPanel= new RuleOpenPanel(this, + eventBus); + add(rulesOpenPanel); + } + + protected void initWindow() { + setWidth(WIDTH); + setHeight(HEIGHT); + setBodyBorder(false); + setResizable(false); + setHeadingText("Open Rule"); + setClosable(true); + setModal(true); + forceLayoutOnResize = true; + getHeader().setIcon(ResourceBundle.INSTANCE.ruleOpen()); + + } + + /** + * {@inheritDoc} + */ + @Override + protected void initTools() { + super.initTools(); + + closeBtn.addSelectHandler(new SelectHandler() { + + public void onSelect(SelectEvent event) { + close(); + } + }); + + } + + protected void close() { + hide(); + } + + public void ruleEdit(RuleDescriptionData ruleDescriptionData) { + openRuleDialog(ruleDescriptionData); + + } + + protected void openRuleDialog(RuleDescriptionData ruleDescriptionData) { + Log.debug("Request Open New Rule Dialog"); + RuleEditDialog reDialog = new RuleEditDialog(ruleDescriptionData,eventBus); + reDialog.addRuleEditDialogNotificationListener(this); + reDialog.show(); + + + } + + @Override + public void onNotification(RuleEditDialogNotification ruleEditDialogNotification) { + rulesOpenPanel.gridReload(); + + } + + @Override + public void aborted() { + + } + + @Override + public void failed(Throwable throwable) { + Log.debug("Error in edit rule: "+throwable.getLocalizedMessage()); + + } + + + + + + + +} 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 new file mode 100644 index 0000000..cde304a --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleOpenPanel.java @@ -0,0 +1,436 @@ +package org.gcube.portlets.user.td.rulewidget.client; + +import java.util.ArrayList; +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.rulewidget.client.resources.ResourceBundle; +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.util.UtilsGXT3; + +import com.allen_sauer.gwt.log.client.Log; +import com.google.gwt.cell.client.AbstractCell; +import com.google.gwt.core.client.GWT; +import com.google.gwt.core.client.Scheduler; +import com.google.gwt.core.client.Scheduler.ScheduledCommand; +import com.google.gwt.event.dom.client.KeyUpEvent; +import com.google.gwt.event.dom.client.KeyUpHandler; +import com.google.gwt.event.logical.shared.SelectionEvent; +import com.google.gwt.event.logical.shared.SelectionHandler; +import com.google.gwt.safehtml.shared.SafeHtml; +import com.google.gwt.safehtml.shared.SafeHtmlBuilder; +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.google.web.bindery.event.shared.EventBus; +import com.sencha.gxt.cell.core.client.ButtonCell.IconAlign; +import com.sencha.gxt.core.client.IdentityValueProvider; +import com.sencha.gxt.core.client.Style.SelectionMode; +import com.sencha.gxt.core.client.XTemplates; +import com.sencha.gxt.core.client.resources.ThemeStyles; +import com.sencha.gxt.core.client.util.Margins; +import com.sencha.gxt.data.client.loader.RpcProxy; +import com.sencha.gxt.data.shared.ListStore; +import com.sencha.gxt.data.shared.ModelKeyProvider; +import com.sencha.gxt.data.shared.Store; +import com.sencha.gxt.data.shared.Store.StoreFilter; +import com.sencha.gxt.data.shared.loader.ListLoadConfig; +import com.sencha.gxt.data.shared.loader.ListLoadResult; +import com.sencha.gxt.data.shared.loader.ListLoadResultBean; +import com.sencha.gxt.data.shared.loader.ListLoader; +import com.sencha.gxt.data.shared.loader.LoadResultListStoreBinding; +import com.sencha.gxt.widget.core.client.FramedPanel; +import com.sencha.gxt.widget.core.client.button.TextButton; +import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutData; +import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutPack; +import com.sencha.gxt.widget.core.client.container.HBoxLayoutContainer; +import com.sencha.gxt.widget.core.client.container.HBoxLayoutContainer.HBoxLayoutAlign; +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.SelectEvent; +import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler; +import com.sencha.gxt.widget.core.client.form.TextField; +import com.sencha.gxt.widget.core.client.grid.CheckBoxSelectionModel; +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.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.LabelToolItem; +import com.sencha.gxt.widget.core.client.toolbar.ToolBar; + +/** + * + * @author giancarlo email: g.panichi@isti.cnr.it + * + */ +public class RuleOpenPanel extends FramedPanel { + private static final String WIDTH = "630px"; + private static final String HEIGHT = "520px"; + + interface RuleOpenTemplates extends XTemplates { + @XTemplate("{value}") + SafeHtml format(String value); + } + + private EventBus eventBus; + private RuleOpenDialog parent; + + private TextButton btnOpen; + private TextButton btnClose; + + private ListLoader> loader; + private Grid grid; + private ExtendedListStore store; + + public RuleOpenPanel(RuleOpenDialog parent, EventBus eventBus) { + this.parent = parent; + Log.debug("RuleOpenPanel"); + setWidth(WIDTH); + setHeight(HEIGHT); + setHeaderVisible(false); + setBodyBorder(false); + this.eventBus = eventBus; + + create(); + + } + + protected void create() { + ToolBar toolBarHead = new ToolBar(); + toolBarHead.add(new LabelToolItem("Search: ")); + final TextField searchField = new TextField(); + toolBarHead.add(searchField); + + TextButton btnReload = new TextButton(); + // btnReload.setText("Reload"); + btnReload.setIcon(ResourceBundle.INSTANCE.refresh()); + btnReload.setToolTip("Reload"); + toolBarHead.add(btnReload); + + IdentityValueProvider identity = new IdentityValueProvider(); + CheckBoxSelectionModel sm = new CheckBoxSelectionModel( + identity); + + RuleDescriptionDataProperties props = GWT + .create(RuleDescriptionDataProperties.class); + + ColumnConfig nameCol = new ColumnConfig( + props.name(), 120, "Name"); + + nameCol.setCell(new AbstractCell() { + + @Override + public void render(Context context, String value, SafeHtmlBuilder sb) { + RuleOpenTemplates ruleOpenTemplates = GWT + .create(RuleOpenTemplates.class); + sb.append(ruleOpenTemplates.format(value)); + } + }); + + ColumnConfig scopeCol = new ColumnConfig( + props.scopeLabel(), 40, "Scope"); + + nameCol.setCell(new AbstractCell() { + + @Override + public void render(Context context, String value, SafeHtmlBuilder sb) { + RuleOpenTemplates ruleOpenTemplates = GWT + .create(RuleOpenTemplates.class); + sb.append(ruleOpenTemplates.format(value)); + } + }); + + ColumnConfig descriptionCol = new ColumnConfig( + props.description(), 120, "Description"); + descriptionCol.setCell(new AbstractCell() { + + @Override + public void render(Context context, String value, SafeHtmlBuilder sb) { + RuleOpenTemplates ruleOpenTemplates = GWT + .create(RuleOpenTemplates.class); + sb.append(ruleOpenTemplates.format(value)); + } + }); + + ColumnConfig ownerCol = new ColumnConfig( + props.ownerLogin(), 70, "Owner"); + ownerCol.setCell(new AbstractCell() { + + @Override + public void render(Context context, String value, SafeHtmlBuilder sb) { + RuleOpenTemplates ruleOpenTemplates = GWT + .create(RuleOpenTemplates.class); + sb.append(ruleOpenTemplates.format(value)); + } + }); + + /* + ColumnConfig readableExpressionCol = new ColumnConfig( + props.readableExpression(), 160, "Expression"); + + readableExpressionCol.setCell(new AbstractCell() { + + @Override + public void render(Context context, String value, SafeHtmlBuilder sb) { + RuleOpenTemplates ruleOpenTemplates = GWT + .create(RuleOpenTemplates.class); + sb.append(ruleOpenTemplates.format(value)); + } + });*/ + + List> l = new ArrayList>(); + l.add(nameCol); + l.add(scopeCol); + l.add(descriptionCol); + l.add(ownerCol); + //l.add(readableExpressionCol); + + ColumnModel cm = new ColumnModel( + l); + + store = new ExtendedListStore(props.id()); + + searchField.addKeyUpHandler(new KeyUpHandler() { + + public void onKeyUp(KeyUpEvent event) { + Log.trace("searchTerm: " + searchField.getCurrentValue()); + store.applyFilters(); + } + }); + + store.addFilter(new StoreFilter() { + + @Override + public boolean select(Store store, + RuleDescriptionData parent, RuleDescriptionData item) { + String searchTerm = searchField.getCurrentValue(); + if (searchTerm == null) + return true; + return RuleOpenPanel.this.select(item, searchTerm); + } + }); + + store.setEnableFilters(true); + + RpcProxy> proxy = new RpcProxy>() { + + public void load( + ListLoadConfig loadConfig, + final AsyncCallback> callback) { + loadData(loadConfig, callback); + } + }; + loader = new ListLoader>( + proxy); + + loader.setRemoteSort(false); + loader.addLoadHandler(new LoadResultListStoreBinding>( + store) { + }); + + SelectHandler sh = new SelectHandler() { + public void onSelect(SelectEvent event) { + loader.load(); + } + }; + + btnReload.addSelectHandler(sh); + + grid = new Grid(store, cm) { + @Override + protected void onAfterFirstAttach() { + super.onAfterFirstAttach(); + Scheduler.get().scheduleDeferred(new ScheduledCommand() { + + public void execute() { + loader.load(); + } + }); + } + }; + + sm.setSelectionMode(SelectionMode.SINGLE); + grid.setLoader(loader); + grid.setSelectionModel(sm); + grid.setHeight("384px"); + grid.getView().setStripeRows(true); + grid.getView().setColumnLines(true); + grid.getView().setAutoFill(true); + grid.setBorders(false); + grid.setLoadMask(true); + grid.setColumnReordering(true); + grid.setColumnResize(true); + grid.getView().setAutoExpandColumn(descriptionCol); + + createContextMenu(); + + ToolBar toolBar = new ToolBar(); + toolBar.add(grid); + toolBar.addStyleName(ThemeStyles.get().style().borderTop()); + toolBar.getElement().getStyle().setProperty("borderBottom", "none"); + + btnOpen = new TextButton("Edit"); + btnOpen.setIcon(ResourceBundle.INSTANCE.ruleEdit()); + btnOpen.setIconAlign(IconAlign.RIGHT); + btnOpen.setToolTip("Edit Rule"); + btnOpen.addSelectHandler(new SelectHandler() { + + public void onSelect(SelectEvent event) { + Log.debug("Pressed Open"); + edit(); + + } + }); + + btnClose = new TextButton("Close"); + btnClose.setIcon(ResourceBundle.INSTANCE.close()); + btnClose.setIconAlign(IconAlign.RIGHT); + btnClose.setToolTip("Close"); + btnClose.addSelectHandler(new SelectHandler() { + + public void onSelect(SelectEvent event) { + Log.debug("Pressed Close"); + close(); + } + }); + + HBoxLayoutContainer flowButton = new HBoxLayoutContainer(); + flowButton.setHBoxLayoutAlign(HBoxLayoutAlign.MIDDLE); + flowButton.setPack(BoxLayoutPack.CENTER); + + BoxLayoutData boxLayoutData = new BoxLayoutData(new Margins(2, 4, 2, 4)); + flowButton.add(btnOpen, boxLayoutData); + flowButton.add(btnClose, boxLayoutData); + + VerticalLayoutContainer v = new VerticalLayoutContainer(); + v.add(toolBarHead, new VerticalLayoutData(1, -1, new Margins(0))); + v.add(grid, new VerticalLayoutData(1, -1, new Margins(0))); + v.add(toolBar, new VerticalLayoutData(1, 25, new Margins(0))); + v.add(flowButton, + new VerticalLayoutData(1, 36, new Margins(5, 2, 5, 2))); + add(v); + + } + + protected void loadData(ListLoadConfig loadConfig, + final AsyncCallback> callback) { + + ExpressionServiceAsync.INSTANCE.getRules(RuleScopeType.COLUMN, + new AsyncCallback>() { + + @Override + public void onFailure(Throwable caught) { + if (caught instanceof TDGWTSessionExpiredException) { + eventBus.fireEvent(new SessionExpiredEvent( + SessionExpiredType.EXPIREDONSERVER)); + } else { + Log.error("Load rules failure:" + + caught.getLocalizedMessage()); + UtilsGXT3.alert("Error retrieving rules", + "Error retrieving rules"); + } + callback.onFailure(caught); + + } + + @Override + public void onSuccess(ArrayList result) { + if (result != null) { + Log.trace("loaded " + result.size() + " Rules"); + } else { + Log.trace("get Rules return: null"); + } + callback.onSuccess(new ListLoadResultBean( + result)); + + } + }); + + } + + protected RuleDescriptionData getSelectedItem() { + RuleDescriptionData template = grid.getSelectionModel() + .getSelectedItem(); + return template; + } + + protected void edit() { + + RuleDescriptionData rule = getSelectedItem(); + if (rule == null) { + UtilsGXT3.info("Attention", "Select the rule"); + } else { + parent.ruleEdit(rule); + + } + + } + + protected void close() { + parent.close(); + } + + protected class ExtendedListStore extends ListStore { + + public ExtendedListStore(ModelKeyProvider keyProvider) { + super(keyProvider); + } + + public void applyFilters() { + super.applyFilters(); + } + + } + + public void gridReload() { + grid.getLoader().load(); + } + + protected boolean select(RuleDescriptionData item, String searchTerm) { + if (item.getName() != null + && item.getName().toLowerCase() + .contains(searchTerm.toLowerCase())) + return true; + if (item.getDescription() != null + && item.getDescription().toLowerCase() + .contains(searchTerm.toLowerCase())) + return true; + return false; + } + + protected void requestInfo(RuleDescriptionData rule) { + final RuleInfoDialog infoRuleDialog = new RuleInfoDialog(rule); + infoRuleDialog.show(); + + + } + + protected void createContextMenu() { + Menu contextMenu = new Menu(); + + MenuItem infoItem = new MenuItem(); + infoItem.setText("Info"); + infoItem.setIcon(ResourceBundle.INSTANCE.information()); + infoItem.addSelectionHandler(new SelectionHandler() { + + @Override + public void onSelection(SelectionEvent event) { + RuleDescriptionData selected = grid.getSelectionModel() + .getSelectedItem(); + Log.debug(selected.toString()); + requestInfo(selected); + } + }); + + contextMenu.add(infoItem); + + grid.setContextMenu(contextMenu); + + } +} 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 new file mode 100644 index 0000000..0e58702 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleShareDialog.java @@ -0,0 +1,76 @@ +package org.gcube.portlets.user.td.rulewidget.client; + +import org.gcube.portlets.user.td.gwtservice.shared.rule.RuleDescriptionData; +import org.gcube.portlets.user.td.rulewidget.client.resources.ResourceBundle; +import org.gcube.portlets.user.td.sharewidget.client.RuleShare; + +import com.allen_sauer.gwt.log.client.Log; +import com.google.web.bindery.event.shared.EventBus; +import com.sencha.gxt.widget.core.client.Window; +import com.sencha.gxt.widget.core.client.event.SelectEvent; +import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler; + +/** + * + * @author "Giancarlo Panichi" g.panichi@isti.cnr.it + * + */ +public class RuleShareDialog extends Window { + private static final String WIDTH = "720px"; + private static final String HEIGHT = "530px"; + + private EventBus eventBus; + + public RuleShareDialog(EventBus eventBus) { + this.eventBus = eventBus; + initWindow(); + + RuleSharePanel templateDeletePanel = new RuleSharePanel(this, + eventBus); + add(templateDeletePanel); + } + + protected void initWindow() { + setWidth(WIDTH); + setHeight(HEIGHT); + setBodyBorder(false); + setResizable(false); + setHeadingText("Share Rule"); + setClosable(true); + setModal(true); + forceLayoutOnResize = true; + getHeader().setIcon(ResourceBundle.INSTANCE.ruleShare()); + + } + + /** + * {@inheritDoc} + */ + @Override + protected void initTools() { + super.initTools(); + + closeBtn.addSelectHandler(new SelectHandler() { + + public void onSelect(SelectEvent event) { + close(); + } + }); + + } + + protected void close() { + hide(); + } + + + public void ruleShare(RuleDescriptionData ruleDescriptionData) { + Log.debug("Share Window"); + @SuppressWarnings("unused") + RuleShare ruleShare = new RuleShare(ruleDescriptionData, eventBus); + close(); + + } + +} 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 new file mode 100644 index 0000000..272ddd8 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleSharePanel.java @@ -0,0 +1,422 @@ +package org.gcube.portlets.user.td.rulewidget.client; + +import java.util.ArrayList; +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.rulewidget.client.RuleDeletePanel.RuleDeleteTemplates; +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; +import org.gcube.portlets.user.td.wizardwidget.client.util.UtilsGXT3; + +import com.allen_sauer.gwt.log.client.Log; +import com.google.gwt.cell.client.AbstractCell; +import com.google.gwt.core.client.GWT; +import com.google.gwt.core.client.Scheduler; +import com.google.gwt.core.client.Scheduler.ScheduledCommand; +import com.google.gwt.event.dom.client.KeyUpEvent; +import com.google.gwt.event.dom.client.KeyUpHandler; +import com.google.gwt.event.logical.shared.SelectionEvent; +import com.google.gwt.event.logical.shared.SelectionHandler; +import com.google.gwt.safehtml.shared.SafeHtmlBuilder; +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.google.web.bindery.event.shared.EventBus; +import com.sencha.gxt.cell.core.client.ButtonCell.IconAlign; +import com.sencha.gxt.core.client.IdentityValueProvider; +import com.sencha.gxt.core.client.Style.SelectionMode; +import com.sencha.gxt.core.client.resources.ThemeStyles; +import com.sencha.gxt.core.client.util.Margins; +import com.sencha.gxt.data.client.loader.RpcProxy; +import com.sencha.gxt.data.shared.ListStore; +import com.sencha.gxt.data.shared.ModelKeyProvider; +import com.sencha.gxt.data.shared.Store; +import com.sencha.gxt.data.shared.Store.StoreFilter; +import com.sencha.gxt.data.shared.loader.ListLoadConfig; +import com.sencha.gxt.data.shared.loader.ListLoadResult; +import com.sencha.gxt.data.shared.loader.ListLoadResultBean; +import com.sencha.gxt.data.shared.loader.ListLoader; +import com.sencha.gxt.data.shared.loader.LoadResultListStoreBinding; +import com.sencha.gxt.widget.core.client.FramedPanel; +import com.sencha.gxt.widget.core.client.button.TextButton; +import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutData; +import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutPack; +import com.sencha.gxt.widget.core.client.container.HBoxLayoutContainer; +import com.sencha.gxt.widget.core.client.container.HBoxLayoutContainer.HBoxLayoutAlign; +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.SelectEvent; +import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler; +import com.sencha.gxt.widget.core.client.form.TextField; +import com.sencha.gxt.widget.core.client.grid.CheckBoxSelectionModel; +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.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.LabelToolItem; +import com.sencha.gxt.widget.core.client.toolbar.ToolBar; + +/** + * + * @author giancarlo email: g.panichi@isti.cnr.it + * + */ +public class RuleSharePanel extends FramedPanel { + private static final String WIDTH = "630px"; + private static final String HEIGHT = "520px"; + private EventBus eventBus; + private RuleShareDialog parent; + + private TextButton btnClose; + private TextButton btnShare; + + private ListLoader> loader; + private Grid grid; + private ExtendedListStore store; + + public RuleSharePanel(RuleShareDialog parent, EventBus eventBus) { + this.parent = parent; + Log.debug("RuleSharePanel"); + setWidth(WIDTH); + setHeight(HEIGHT); + setHeaderVisible(false); + setBodyBorder(false); + this.eventBus = eventBus; + + create(); + + } + + protected void create() { + ToolBar toolBarHead = new ToolBar(); + toolBarHead.add(new LabelToolItem("Search: ")); + final TextField searchField = new TextField(); + toolBarHead.add(searchField); + + TextButton btnReload = new TextButton(); + // btnReload.setText("Reload"); + btnReload.setIcon(ResourceBundle.INSTANCE.refresh()); + btnReload.setToolTip("Reload"); + toolBarHead.add(btnReload); + + IdentityValueProvider identity = new IdentityValueProvider(); + CheckBoxSelectionModel sm = new CheckBoxSelectionModel( + identity); + + RuleDescriptionDataProperties props = GWT + .create(RuleDescriptionDataProperties.class); + + ColumnConfig nameCol = new ColumnConfig( + props.name(), 120, "Name"); + + nameCol.setCell(new AbstractCell() { + + @Override + public void render(Context context, String value, SafeHtmlBuilder sb) { + RuleDeleteTemplates ruleDeleteTemplates = GWT + .create(RuleDeleteTemplates.class); + sb.append(ruleDeleteTemplates.format(value)); + } + }); + + ColumnConfig scopeCol = new ColumnConfig( + props.scopeLabel(), 40, "Scope"); + + nameCol.setCell(new AbstractCell() { + + @Override + public void render(Context context, String value, SafeHtmlBuilder sb) { + RuleDeleteTemplates ruleDeleteTemplates = GWT + .create(RuleDeleteTemplates.class); + sb.append(ruleDeleteTemplates.format(value)); + } + }); + + ColumnConfig descriptionCol = new ColumnConfig( + props.description(), 120, "Description"); + descriptionCol.setCell(new AbstractCell() { + + @Override + public void render(Context context, String value, SafeHtmlBuilder sb) { + RuleDeleteTemplates ruleDeleteTemplates = GWT + .create(RuleDeleteTemplates.class); + sb.append(ruleDeleteTemplates.format(value)); + } + }); + + ColumnConfig ownerCol = new ColumnConfig( + props.ownerLogin(), 70, "Owner"); + ownerCol.setCell(new AbstractCell() { + + @Override + public void render(Context context, String value, SafeHtmlBuilder sb) { + RuleDeleteTemplates ruleDeleteTemplates = GWT + .create(RuleDeleteTemplates.class); + sb.append(ruleDeleteTemplates.format(value)); + } + }); + + + List> l = new ArrayList>(); + l.add(nameCol); + l.add(scopeCol); + l.add(descriptionCol); + l.add(ownerCol); + + + ColumnModel cm = new ColumnModel(l); + + store = new ExtendedListStore(props.id()); + + searchField.addKeyUpHandler(new KeyUpHandler() { + + public void onKeyUp(KeyUpEvent event) { + Log.trace("searchTerm: " + searchField.getCurrentValue()); + store.applyFilters(); + } + }); + + store.addFilter(new StoreFilter() { + + @Override + public boolean select(Store store, + RuleDescriptionData parent, RuleDescriptionData item) { + String searchTerm = searchField.getCurrentValue(); + if (searchTerm == null) + return true; + return RuleSharePanel.this.select(item, searchTerm); + } + }); + + store.setEnableFilters(true); + + RpcProxy> proxy = new RpcProxy>() { + + public void load(ListLoadConfig loadConfig, + final AsyncCallback> callback) { + loadData(loadConfig, callback); + } + }; + loader = new ListLoader>( + proxy); + + loader.setRemoteSort(false); + loader.addLoadHandler(new LoadResultListStoreBinding>( + store) { + }); + + SelectHandler sh = new SelectHandler() { + public void onSelect(SelectEvent event) { + loader.load(); + } + }; + + btnReload.addSelectHandler(sh); + + grid = new Grid(store, cm) { + @Override + protected void onAfterFirstAttach() { + super.onAfterFirstAttach(); + Scheduler.get().scheduleDeferred(new ScheduledCommand() { + + public void execute() { + loader.load(); + } + }); + } + }; + + sm.setSelectionMode(SelectionMode.SINGLE); + grid.setLoader(loader); + grid.setSelectionModel(sm); + grid.setHeight("384px"); + grid.getView().setStripeRows(true); + grid.getView().setColumnLines(true); + grid.getView().setAutoFill(true); + grid.setBorders(false); + grid.setLoadMask(true); + grid.setColumnReordering(true); + grid.setColumnResize(true); + grid.getView().setAutoExpandColumn(descriptionCol); + + createContextMenu(); + + + ToolBar toolBar = new ToolBar(); + toolBar.add(grid); + toolBar.addStyleName(ThemeStyles.get().style().borderTop()); + toolBar.getElement().getStyle().setProperty("borderBottom", "none"); + + + + btnClose = new TextButton("Close"); + btnClose.setIcon(ResourceBundle.INSTANCE.close()); + btnClose.setIconAlign(IconAlign.RIGHT); + btnClose.setToolTip("Close"); + btnClose.addSelectHandler(new SelectHandler() { + + public void onSelect(SelectEvent event) { + Log.debug("Pressed Close"); + close(); + } + }); + + btnShare = new TextButton("Share"); + btnShare.setIcon(ResourceBundle.INSTANCE.ruleShare()); + btnShare.setIconAlign(IconAlign.RIGHT); + btnShare.setToolTip("Share"); + btnShare.addSelectHandler(new SelectHandler() { + + public void onSelect(SelectEvent event) { + Log.debug("Pressed Share"); + share(); + } + }); + + HBoxLayoutContainer flowButton = new HBoxLayoutContainer(); + flowButton.setHBoxLayoutAlign(HBoxLayoutAlign.MIDDLE); + flowButton.setPack(BoxLayoutPack.CENTER); + + BoxLayoutData boxLayoutData = new BoxLayoutData(new Margins(2, 4, 2, 4)); + flowButton.add(btnShare, boxLayoutData); + flowButton.add(btnClose, boxLayoutData); + + VerticalLayoutContainer v = new VerticalLayoutContainer(); + v.add(toolBarHead, new VerticalLayoutData(1, -1, new Margins(0))); + v.add(grid, new VerticalLayoutData(1, -1, new Margins(0))); + v.add(toolBar, new VerticalLayoutData(1, 25, new Margins(0))); + v.add(flowButton, + new VerticalLayoutData(1, 36, new Margins(5, 2, 5, 2))); + add(v); + + } + + protected void loadData(ListLoadConfig loadConfig, + final AsyncCallback> callback) { + + ExpressionServiceAsync.INSTANCE.getRules(RuleScopeType.COLUMN, + new AsyncCallback>() { + + @Override + public void onFailure(Throwable caught) { + if (caught instanceof TDGWTSessionExpiredException) { + eventBus.fireEvent(new SessionExpiredEvent( + SessionExpiredType.EXPIREDONSERVER)); + } else { + Log.error("Load rules failure:" + + caught.getLocalizedMessage()); + UtilsGXT3.alert("Error retrieving rules", + "Error retrieving rules"); + } + callback.onFailure(caught); + + } + + @Override + public void onSuccess(ArrayList result) { + Log.trace("loaded " + result.size() + " Rules"); + callback.onSuccess(new ListLoadResultBean( + result)); + + } + }); + + } + + + + protected ArrayList getSelectedItem() { + ArrayList rules = new ArrayList(); + for (RuleDescriptionData rule : grid.getSelectionModel() + .getSelectedItems()) { + rules.add(rule); + } + return rules; + } + + + protected void share() { + + ArrayList rules = getSelectedItem(); + if (rules == null || rules.size() == 0) { + UtilsGXT3.info("Attention", "Select the rule"); + } else { + RuleDescriptionData rule = rules.get(0); + Log.debug("templateShare: " + rule); + parent.ruleShare(rule); + + } + + } + + protected void close() { + parent.close(); + } + + protected class ExtendedListStore extends ListStore { + + public ExtendedListStore(ModelKeyProvider keyProvider) { + super(keyProvider); + } + + public void applyFilters() { + super.applyFilters(); + } + + } + + public void gridReload() { + grid.getLoader().load(); + } + + protected boolean select(RuleDescriptionData item, String searchTerm) { + if (item.getName() != null + && item.getName().toLowerCase() + .contains(searchTerm.toLowerCase())) + return true; + if (item.getDescription() != null + && item.getDescription().toLowerCase() + .contains(searchTerm.toLowerCase())) + return true; + return false; + } + + protected void requestInfo(RuleDescriptionData rule) { + final RuleInfoDialog infoRuleDialog = new RuleInfoDialog(rule); + infoRuleDialog.show(); + + } + + protected void createContextMenu() { + Menu contextMenu = new Menu(); + + MenuItem infoItem = new MenuItem(); + infoItem.setText("Info"); + infoItem.setIcon(ResourceBundle.INSTANCE.information()); + infoItem.addSelectionHandler(new SelectionHandler() { + + @Override + public void onSelection(SelectionEvent event) { + RuleDescriptionData selected = grid.getSelectionModel() + .getSelectedItem(); + Log.debug(selected.toString()); + requestInfo(selected); + } + }); + + contextMenu.add(infoItem); + + grid.setContextMenu(contextMenu); + + } + + + +} 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 new file mode 100644 index 0000000..df91380 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/RuleWidgetEntry.java @@ -0,0 +1,83 @@ +package org.gcube.portlets.user.td.rulewidget.client; + +import org.gcube.portlets.user.td.expressionwidget.client.utils.UtilsGXT3; +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 com.allen_sauer.gwt.log.client.Log; +import com.google.gwt.core.client.EntryPoint; +import com.google.gwt.user.client.rpc.AsyncCallback; + + +/** + * + * @author "Giancarlo Panichi" g.panichi@isti.cnr.it + * + */ +public class RuleWidgetEntry implements EntryPoint { + + public void onModuleLoad() { + callHello(); + } + + protected void test() { + + // EventBus eventBus= new SimpleEventBus(); + // TRId trId=new TRId("86",TabResourceType.STANDARD, "1159"); + + + + + /* + * RemoveColumnDialog dialog=new RemoveColumnDialog(trId); + * dialog.show(); ChangeToAnnotationColumnDialog changeToAnnotation=new + * ChangeToAnnotationColumnDialog(trId); changeToAnnotation.show(); + */ + /* + * ChangeColumnTypeDialog changeColumnType=new + * ChangeColumnTypeDialog(trId,eventBus); changeColumnType.show(); + */ + + /* + * ChangeColumnTypeProgressDialog c=new + * ChangeColumnTypeProgressDialog(eventBus); + * c.addProgressDialogListener(changeColumnType); c.show(); + */ + + /* + * DialogCodelistSelection dcs=new DialogCodelistSelection(); + * dcs.show(); + */ + + Log.info("Hello!"); + + } + + protected void callHello() { + TDGWTServiceAsync.INSTANCE.hello(new AsyncCallback() { + + @Override + public void onFailure(Throwable caught) { + Log.info("No valid user found: " + caught.getMessage()); + caught.printStackTrace(); + if (caught instanceof TDGWTSessionExpiredException) { + UtilsGXT3.alert("Error", "Expired Session"); + + } else { + UtilsGXT3.alert("Error", "No user found"); + } + } + + @Override + public void onSuccess(UserInfo result) { + Log.info("Hello: " + result.getUsername()); + test(); + } + + }); + + } + +} diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/Dialog.css b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/Dialog.css new file mode 100644 index 0000000..d44d232 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/Dialog.css @@ -0,0 +1,3 @@ +@CHARSET "UTF-8"; + + diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/DialogCSS.java b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/DialogCSS.java new file mode 100644 index 0000000..97b503a --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/DialogCSS.java @@ -0,0 +1,19 @@ +/** + * + */ +package org.gcube.portlets.user.td.rulewidget.client.resources; + +import com.google.gwt.resources.client.CssResource; + +/** + * + * @author "Giancarlo Panichi" + * g.panichi@isti.cnr.it + * + */ +public interface DialogCSS extends CssResource { + + + + +} 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 new file mode 100644 index 0000000..fda8029 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/ResourceBundle.java @@ -0,0 +1,130 @@ +package org.gcube.portlets.user.td.rulewidget.client.resources; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.resources.client.ClientBundle; +import com.google.gwt.resources.client.ImageResource; + +/** + * + * @author "Giancarlo Panichi" g.panichi@isti.cnr.it + * + */ +public interface ResourceBundle extends ClientBundle { + + public static final ResourceBundle INSTANCE = GWT + .create(ResourceBundle.class); + + @Source("Dialog.css") + DialogCSS dialogCSS(); + + @Source("arrow-refresh_16.png") + ImageResource refresh(); + + @Source("arrow-refresh_32.png") + ImageResource refresh32(); + + @Source("magnifier.png") + ImageResource magnifier(); + + @Source("magnifier_32.png") + ImageResource magnifier32(); + + @Source("close-red.png") + ImageResource close(); + + @Source("close-red_32.png") + ImageResource close32(); + + @Source("disk.png") + ImageResource save(); + + @Source("disk_32.png") + ImageResource save32(); + + @Source("add.png") + ImageResource add(); + + @Source("add_32.png") + ImageResource add32(); + + @Source("delete.png") + ImageResource delete(); + + @Source("delete_32.png") + ImageResource delete32(); + + + @Source("rule-add_32.png") + ImageResource ruleAdd32(); + + @Source("rule-add.png") + ImageResource ruleAdd(); + + @Source("rule-edit_32.png") + ImageResource ruleEdit32(); + + @Source("rule-edit.png") + ImageResource ruleEdit(); + + @Source("rule-close_32.png") + ImageResource ruleClose32(); + + @Source("rule-close.png") + ImageResource ruleClose(); + + @Source("rule-open_32.png") + ImageResource ruleOpen32(); + + @Source("rule-open.png") + ImageResource ruleOpen(); + + @Source("rule-delete.png") + ImageResource ruleDelete(); + + @Source("rule-delete_32.png") + ImageResource ruleDelete32(); + + @Source("rule-apply.png") + ImageResource ruleApply(); + + @Source("rule-apply_32.png") + ImageResource ruleApply32(); + + @Source("rule-share.png") + ImageResource ruleShare(); + + @Source("rule-share_32.png") + ImageResource ruleShare32(); + + @Source("rule-column-add.png") + ImageResource ruleColumnAdd(); + + @Source("rule-column-add_32.png") + ImageResource ruleColumnAdd32(); + + @Source("rule-column-apply.png") + ImageResource ruleColumnApply(); + + @Source("rule-column-apply_32.png") + ImageResource ruleColumnApply32(); + + @Source("rule-column-detach.png") + ImageResource ruleColumnDetach(); + + @Source("rule-column-detach_32.png") + ImageResource ruleColumnDetach32(); + + @Source("rule-tabularresource.png") + ImageResource ruleTabularResource(); + + @Source("rule-tabularresource_32.png") + ImageResource ruleActive32(); + + @Source("information_32.png") + ImageResource information32(); + + @Source("information.png") + ImageResource information(); + +} diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/accept.png b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/accept.png new file mode 100644 index 0000000..89c8129 Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/accept.png differ diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/add.png b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/add.png new file mode 100644 index 0000000..6b1ab47 Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/add.png differ diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/add_32.png b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/add_32.png new file mode 100644 index 0000000..6981821 Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/add_32.png differ diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/arrow-refresh_16.png b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/arrow-refresh_16.png new file mode 100644 index 0000000..72edf8a Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/arrow-refresh_16.png differ diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/arrow-refresh_32.png b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/arrow-refresh_32.png new file mode 100644 index 0000000..f3521ea Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/arrow-refresh_32.png differ diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/close-red.png b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/close-red.png new file mode 100644 index 0000000..978f945 Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/close-red.png differ diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/close-red_32.png b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/close-red_32.png new file mode 100644 index 0000000..8e877f1 Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/close-red_32.png differ diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/close.png b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/close.png new file mode 100644 index 0000000..978f945 Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/close.png differ diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/close_32.png b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/close_32.png new file mode 100644 index 0000000..8e877f1 Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/close_32.png differ diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/delete.png b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/delete.png new file mode 100644 index 0000000..b639afd Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/delete.png differ diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/delete_32.png b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/delete_32.png new file mode 100644 index 0000000..020b555 Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/delete_32.png differ diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/disk.png b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/disk.png new file mode 100644 index 0000000..9cce534 Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/disk.png differ diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/disk_32.png b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/disk_32.png new file mode 100644 index 0000000..fbb32bc Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/disk_32.png differ diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/error.png b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/error.png new file mode 100644 index 0000000..c37bd06 Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/error.png differ diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/information.png b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/information.png new file mode 100644 index 0000000..fd2adea Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/information.png differ diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/information_32.png b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/information_32.png new file mode 100644 index 0000000..95e0dd3 Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/information_32.png differ diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/loading.gif b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/loading.gif new file mode 100644 index 0000000..e846e1d Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/loading.gif differ diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/magnifier.png b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/magnifier.png new file mode 100644 index 0000000..13024cd Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/magnifier.png differ diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/magnifier_32.png b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/magnifier_32.png new file mode 100644 index 0000000..531f8ab Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/magnifier_32.png differ diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-add.png b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-add.png new file mode 100644 index 0000000..b3ee5c2 Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-add.png differ diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-add_32.png b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-add_32.png new file mode 100644 index 0000000..269e927 Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-add_32.png differ diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-apply.png b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-apply.png new file mode 100644 index 0000000..edf83f0 Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-apply.png differ diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-apply_32.png b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-apply_32.png new file mode 100644 index 0000000..3ea6ae5 Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-apply_32.png differ diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-close.png b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-close.png new file mode 100644 index 0000000..3f05d50 Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-close.png differ diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-close_32.png b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-close_32.png new file mode 100644 index 0000000..34fd2c2 Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-close_32.png differ diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-column-add.png b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-column-add.png new file mode 100644 index 0000000..15e8736 Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-column-add.png differ diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-column-add_32.png b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-column-add_32.png new file mode 100644 index 0000000..230cb1b Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-column-add_32.png differ diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-column-apply.png b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-column-apply.png new file mode 100644 index 0000000..1148d23 Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-column-apply.png differ diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-column-apply_32.png b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-column-apply_32.png new file mode 100644 index 0000000..212fda5 Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-column-apply_32.png differ diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-column-close.png b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-column-close.png new file mode 100644 index 0000000..90c75ed Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-column-close.png differ diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-column-close_32.png b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-column-close_32.png new file mode 100644 index 0000000..fb3b6e4 Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-column-close_32.png differ diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-column-detach.png b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-column-detach.png new file mode 100644 index 0000000..c78de34 Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-column-detach.png differ diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-column-detach_32.png b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-column-detach_32.png new file mode 100644 index 0000000..23df18a Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-column-detach_32.png differ diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-delete.png b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-delete.png new file mode 100644 index 0000000..744f6d8 Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-delete.png differ diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-delete_32.png b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-delete_32.png new file mode 100644 index 0000000..9ace2f1 Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-delete_32.png differ diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-edit.png b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-edit.png new file mode 100644 index 0000000..0357292 Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-edit.png differ diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-edit_32.png b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-edit_32.png new file mode 100644 index 0000000..55b7db8 Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-edit_32.png differ diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-open.png b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-open.png new file mode 100644 index 0000000..bcefe15 Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-open.png differ diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-open_32.png b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-open_32.png new file mode 100644 index 0000000..86f0848 Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-open_32.png differ diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-share.png b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-share.png new file mode 100644 index 0000000..5e8164d Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-share.png differ diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-share_32.png b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-share_32.png new file mode 100644 index 0000000..04b84b1 Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-share_32.png differ diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-tabularresource.png b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-tabularresource.png new file mode 100644 index 0000000..f0cd78c Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-tabularresource.png differ diff --git a/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-tabularresource_32.png b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-tabularresource_32.png new file mode 100644 index 0000000..1d53f7d Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/td/rulewidget/client/resources/rule-tabularresource_32.png differ 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 new file mode 100644 index 0000000..348e002 --- /dev/null +++ b/src/main/resources/org/gcube/portlets/user/td/rulewidget/RuleWidget.gwt.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/Dialog.css b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/Dialog.css new file mode 100644 index 0000000..d44d232 --- /dev/null +++ b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/Dialog.css @@ -0,0 +1,3 @@ +@CHARSET "UTF-8"; + + diff --git a/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/accept.png b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/accept.png new file mode 100644 index 0000000..89c8129 Binary files /dev/null and b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/accept.png differ diff --git a/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/add.png b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/add.png new file mode 100644 index 0000000..6b1ab47 Binary files /dev/null and b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/add.png differ diff --git a/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/add_32.png b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/add_32.png new file mode 100644 index 0000000..6981821 Binary files /dev/null and b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/add_32.png differ diff --git a/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/arrow-refresh_16.png b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/arrow-refresh_16.png new file mode 100644 index 0000000..72edf8a Binary files /dev/null and b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/arrow-refresh_16.png differ diff --git a/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/arrow-refresh_32.png b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/arrow-refresh_32.png new file mode 100644 index 0000000..f3521ea Binary files /dev/null and b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/arrow-refresh_32.png differ diff --git a/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/close-red.png b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/close-red.png new file mode 100644 index 0000000..978f945 Binary files /dev/null and b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/close-red.png differ diff --git a/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/close-red_32.png b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/close-red_32.png new file mode 100644 index 0000000..8e877f1 Binary files /dev/null and b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/close-red_32.png differ diff --git a/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/close.png b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/close.png new file mode 100644 index 0000000..978f945 Binary files /dev/null and b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/close.png differ diff --git a/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/close_32.png b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/close_32.png new file mode 100644 index 0000000..8e877f1 Binary files /dev/null and b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/close_32.png differ diff --git a/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/delete.png b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/delete.png new file mode 100644 index 0000000..b639afd Binary files /dev/null and b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/delete.png differ diff --git a/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/delete_32.png b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/delete_32.png new file mode 100644 index 0000000..020b555 Binary files /dev/null and b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/delete_32.png differ diff --git a/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/disk.png b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/disk.png new file mode 100644 index 0000000..9cce534 Binary files /dev/null and b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/disk.png differ diff --git a/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/disk_32.png b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/disk_32.png new file mode 100644 index 0000000..fbb32bc Binary files /dev/null and b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/disk_32.png differ diff --git a/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/error.png b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/error.png new file mode 100644 index 0000000..c37bd06 Binary files /dev/null and b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/error.png differ diff --git a/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/information.png b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/information.png new file mode 100644 index 0000000..fd2adea Binary files /dev/null and b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/information.png differ diff --git a/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/information_32.png b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/information_32.png new file mode 100644 index 0000000..95e0dd3 Binary files /dev/null and b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/information_32.png differ diff --git a/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/loading.gif b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/loading.gif new file mode 100644 index 0000000..e846e1d Binary files /dev/null and b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/loading.gif differ diff --git a/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/magnifier.png b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/magnifier.png new file mode 100644 index 0000000..13024cd Binary files /dev/null and b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/magnifier.png differ diff --git a/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/magnifier_32.png b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/magnifier_32.png new file mode 100644 index 0000000..531f8ab Binary files /dev/null and b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/magnifier_32.png differ diff --git a/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-add.png b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-add.png new file mode 100644 index 0000000..b3ee5c2 Binary files /dev/null and b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-add.png differ diff --git a/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-add_32.png b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-add_32.png new file mode 100644 index 0000000..269e927 Binary files /dev/null and b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-add_32.png differ diff --git a/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-apply.png b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-apply.png new file mode 100644 index 0000000..edf83f0 Binary files /dev/null and b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-apply.png differ diff --git a/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-apply_32.png b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-apply_32.png new file mode 100644 index 0000000..3ea6ae5 Binary files /dev/null and b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-apply_32.png differ diff --git a/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-close.png b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-close.png new file mode 100644 index 0000000..3f05d50 Binary files /dev/null and b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-close.png differ diff --git a/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-close_32.png b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-close_32.png new file mode 100644 index 0000000..34fd2c2 Binary files /dev/null and b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-close_32.png differ diff --git a/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-column-add.png b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-column-add.png new file mode 100644 index 0000000..15e8736 Binary files /dev/null and b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-column-add.png differ diff --git a/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-column-add_32.png b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-column-add_32.png new file mode 100644 index 0000000..230cb1b Binary files /dev/null and b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-column-add_32.png differ diff --git a/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-column-apply.png b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-column-apply.png new file mode 100644 index 0000000..1148d23 Binary files /dev/null and b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-column-apply.png differ diff --git a/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-column-apply_32.png b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-column-apply_32.png new file mode 100644 index 0000000..212fda5 Binary files /dev/null and b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-column-apply_32.png differ diff --git a/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-column-close.png b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-column-close.png new file mode 100644 index 0000000..90c75ed Binary files /dev/null and b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-column-close.png differ diff --git a/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-column-close_32.png b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-column-close_32.png new file mode 100644 index 0000000..fb3b6e4 Binary files /dev/null and b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-column-close_32.png differ diff --git a/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-column-detach.png b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-column-detach.png new file mode 100644 index 0000000..c78de34 Binary files /dev/null and b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-column-detach.png differ diff --git a/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-column-detach_32.png b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-column-detach_32.png new file mode 100644 index 0000000..23df18a Binary files /dev/null and b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-column-detach_32.png differ diff --git a/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-delete.png b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-delete.png new file mode 100644 index 0000000..744f6d8 Binary files /dev/null and b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-delete.png differ diff --git a/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-delete_32.png b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-delete_32.png new file mode 100644 index 0000000..9ace2f1 Binary files /dev/null and b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-delete_32.png differ diff --git a/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-edit.png b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-edit.png new file mode 100644 index 0000000..0357292 Binary files /dev/null and b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-edit.png differ diff --git a/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-edit_32.png b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-edit_32.png new file mode 100644 index 0000000..55b7db8 Binary files /dev/null and b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-edit_32.png differ diff --git a/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-open.png b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-open.png new file mode 100644 index 0000000..bcefe15 Binary files /dev/null and b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-open.png differ diff --git a/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-open_32.png b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-open_32.png new file mode 100644 index 0000000..86f0848 Binary files /dev/null and b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-open_32.png differ diff --git a/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-share.png b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-share.png new file mode 100644 index 0000000..5e8164d Binary files /dev/null and b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-share.png differ diff --git a/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-share_32.png b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-share_32.png new file mode 100644 index 0000000..04b84b1 Binary files /dev/null and b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-share_32.png differ diff --git a/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-tabularresource.png b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-tabularresource.png new file mode 100644 index 0000000..f0cd78c Binary files /dev/null and b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-tabularresource.png differ diff --git a/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-tabularresource_32.png b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-tabularresource_32.png new file mode 100644 index 0000000..1d53f7d Binary files /dev/null and b/src/main/resources/org/gcube/portlets/user/td/rulewidget/client/resources/rule-tabularresource_32.png differ diff --git a/src/main/webapp/RuleWidget.css b/src/main/webapp/RuleWidget.css new file mode 100644 index 0000000..7aca7ac --- /dev/null +++ b/src/main/webapp/RuleWidget.css @@ -0,0 +1,34 @@ +/** Add css rules here for your application. */ + + +/** Example rules used by the template application (remove for your app) */ +h1 { + font-size: 2em; + font-weight: bold; + color: #777777; + margin: 40px 0px 70px; + text-align: center; +} + +.sendButton { + display: block; + font-size: 16pt; +} + +/** Most GWT widgets already have a style name defined */ +.gwt-DialogBox { + width: 400px; +} + +.dialogVPanel { + margin: 5px; +} + +.serverResponseLabelError { + color: red; +} + +/** Set ids using widget.getElement().setId("idOfElement") */ +#closeButton { + margin: 15px 6px 6px; +} diff --git a/src/main/webapp/RuleWidget.html b/src/main/webapp/RuleWidget.html new file mode 100644 index 0000000..e11a725 --- /dev/null +++ b/src/main/webapp/RuleWidget.html @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + Web Application Starter Project + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..1ff4adb --- /dev/null +++ b/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,35 @@ + + + + + + + + TDGWTService + org.gcube.portlets.user.td.gwtservice.server.TDGWTServiceImpl + + + + jUnitHostImpl + com.google.gwt.junit.server.JUnitHostImpl + + + + + TDGWTService + /RuleWidget/TDGWTService + + + jUnitHostImpl + /RuleWidget/junithost/* + + + + + + ColumnWidget.html + + + diff --git a/src/test/java/org/gcube/portlets/user/td/rulewidget/client/GwtTestRuleWidget.java b/src/test/java/org/gcube/portlets/user/td/rulewidget/client/GwtTestRuleWidget.java new file mode 100644 index 0000000..c3399ab --- /dev/null +++ b/src/test/java/org/gcube/portlets/user/td/rulewidget/client/GwtTestRuleWidget.java @@ -0,0 +1,64 @@ +package org.gcube.portlets.user.td.rulewidget.client; + + + +import com.google.gwt.junit.client.GWTTestCase; + +/** + * GWT JUnit integration tests must extend GWTTestCase. + * Using "GwtTest*" naming pattern exclude them from running with + * surefire during the test phase. + * + * If you run the tests using the Maven command line, you will have to + * navigate with your browser to a specific url given by Maven. + * See http://mojo.codehaus.org/gwt-maven-plugin/user-guide/testing.html + * for details. + */ +public class GwtTestRuleWidget extends GWTTestCase { + + /** + * Must refer to a valid module that sources this class. + */ + public String getModuleName() { + return "org.gcube.portlets.user.td.rulewidget.RuleWidgetJUnit"; + } + + + /** + * This test will send a request to the server using the greetServer method in + * GreetingService and verify the response. + */ + public void testGreetingService() { + // Create the service that we will test. + //GreetingServiceAsync greetingService = GWT.create(GreetingService.class); + //ServiceDefTarget target = (ServiceDefTarget) greetingService; + //target.setServiceEntryPoint(GWT.getModuleBaseURL() + "SDMXImportWizardTD/greet"); + + // Since RPC calls are asynchronous, we will need to wait for a response + // after this test method returns. This line tells the test runner to wait + // up to 10 seconds before timing out. + //delayTestFinish(10000); + + // Send a request to the server. + /* greetingService.greetServer("GWT User", new AsyncCallback() { + public void onFailure(Throwable caught) { + // The request resulted in an unexpected error. + fail("Request failure: " + caught.getMessage()); + } + + + public void onSuccess(String result) { + // Verify that the response is correct. + assertTrue(result.startsWith("Hello, GWT User!")); + + // Now that we have received a response, we need to tell the test runner + // that the test is complete. You must call finishTest() after an + // asynchronous test finishes successfully, or the test will time out. + finishTest(); + } + });*/ + + } + + +} diff --git a/src/test/resources/org/gcube/portlets/user/td/rulewidget/RuleWidgetJUnit.gwt.xml b/src/test/resources/org/gcube/portlets/user/td/rulewidget/RuleWidgetJUnit.gwt.xml new file mode 100644 index 0000000..fb7c226 --- /dev/null +++ b/src/test/resources/org/gcube/portlets/user/td/rulewidget/RuleWidgetJUnit.gwt.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/templates/INSTALL b/templates/INSTALL new file mode 100644 index 0000000..e69de29 diff --git a/templates/LICENSE b/templates/LICENSE new file mode 100644 index 0000000..cc51139 --- /dev/null +++ b/templates/LICENSE @@ -0,0 +1,6 @@ +gCube System - License +------------------------------------------------------------ + +The gCube/gCore software is licensed as Free Open Source software conveying to the EUPL (http://ec.europa.eu/idabc/eupl). +The software and documentation is provided by its authors/distributors "as is" and no expressed or +implied warranty is given for its use, quality or fitness for a particular case. \ No newline at end of file diff --git a/templates/MAINTAINERS b/templates/MAINTAINERS new file mode 100644 index 0000000..0bc9be3 --- /dev/null +++ b/templates/MAINTAINERS @@ -0,0 +1 @@ +Giancarlo Panichi (giancarlo.panichi@isti.cnr.it), CNR Pisa, Istituto di Scienza e Tecnologie dell'Informazione "A. Faedo" diff --git a/templates/README b/templates/README new file mode 100644 index 0000000..7e3ad55 --- /dev/null +++ b/templates/README @@ -0,0 +1,48 @@ +The gCube System - ${name} +------------------------------------------------------------ + +This work has been supported by the following European projects: iMarine (FP7-INFRASTRUCTURES-2011-2) + +Authors +------- + +Giancarlo Panichi (giancarlo.panichi@isti.cnr.it), CNR Pisa, +Istituto di Scienza e Tecnologie dell'Informazione "A. Faedo" + + +Version and Release Date +------------------------ + +v. ${version} (${release.date}) + + +Description +----------- + +${project.description} + + +Download information +-------------------- +Source code is available from SVN: + ${scm.url} + +Binaries can be downloaded from: + http://software.d4science.research-infrastructures.eu/ + + +Documentation +------------- + +${project.description} + +Documentation is available on-line from the Projects Documentation Wiki: + ${wikiurl} + + +Licensing +--------- + +This software is licensed under the terms you may find in the file named "LICENSE" in this directory. + + diff --git a/templates/changelog.xml b/templates/changelog.xml new file mode 100644 index 0000000..c1bd89a --- /dev/null +++ b/templates/changelog.xml @@ -0,0 +1,6 @@ + + + First Release + + \ No newline at end of file diff --git a/templates/descriptor.xml b/templates/descriptor.xml new file mode 100644 index 0000000..b978636 --- /dev/null +++ b/templates/descriptor.xml @@ -0,0 +1,39 @@ + + servicearchive + + tar.gz + + / + + + ${distroDirectory} + / + true + + README + LICENSE + INSTALL + MAINTAINERS + changelog.xml + + 755 + + + + + ${distroDirectory}/svnpath.txt + /${artifactId} + + + ${configDirectory}/profile.xml + / + + + target/${build.finalName}.${packaging} + /${artifactId} + + + \ No newline at end of file diff --git a/templates/profile.xml b/templates/profile.xml new file mode 100644 index 0000000..19ed5bc --- /dev/null +++ b/templates/profile.xml @@ -0,0 +1,29 @@ + + + + Service + + ${project.description} + PortletsUser + ${project.name} + ${version} + + + ${project.description} + ${project.name} + ${version} + + ${project.groupId} + ${project.artifactId} + ${project.version} + + library + + ${project.build.finalName}.${project.packaging} + + + + + + + diff --git a/templates/svnpath.txt b/templates/svnpath.txt new file mode 100644 index 0000000..dcd0d22 --- /dev/null +++ b/templates/svnpath.txt @@ -0,0 +1 @@ +${scm.url} \ No newline at end of file