diff --git a/src/main/java/org/gcube/portlets/user/td/sdmxexportwidget/client/MeasureColumnSelectionCard.java b/src/main/java/org/gcube/portlets/user/td/sdmxexportwidget/client/MeasureColumnSelectionCard.java new file mode 100644 index 0000000..812de4c --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/td/sdmxexportwidget/client/MeasureColumnSelectionCard.java @@ -0,0 +1,92 @@ +/** + * + */ +package org.gcube.portlets.user.td.sdmxexportwidget.client; + +import org.gcube.portlets.user.td.gwtservice.shared.sdmx.SDMXExportSession; +import org.gcube.portlets.user.td.widgetcommonevent.shared.tr.column.ColumnData; +import org.gcube.portlets.user.td.wizardwidget.client.WizardCard; + +import com.allen_sauer.gwt.log.client.Log; +import com.google.gwt.user.client.Command; +import com.google.gwt.event.logical.shared.SelectionEvent; +import com.google.gwt.event.logical.shared.SelectionHandler; + +/** + * + * @author "Giancarlo Panichi" g.panichi@isti.cnr.it + * + */ +public class MeasureColumnSelectionCard extends WizardCard { + + private MeasureColumnSelectionCard thisCard; + private SDMXExportSession exportSession; + private MeasureColumnSelectionPanel measureColumnSelectionPanel; + //private Agencies agency; + + public MeasureColumnSelectionCard(final SDMXExportSession exportSession) { + super("Measure column selection", ""); + + this.exportSession = exportSession; + thisCard = this; + + this.measureColumnSelectionPanel = new MeasureColumnSelectionPanel(thisCard,res, exportSession); + + measureColumnSelectionPanel + .addSelectionHandler(new SelectionHandler() { + + public void onSelection(SelectionEvent event) { + exportSession.setObsValueColumn(measureColumnSelectionPanel + .getSelectedItem()); + getWizardWindow().setEnableNextButton(true); + + } + + }); + + setContent(measureColumnSelectionPanel); + + } + + @Override + public void setup() { + Command sayNextCard = new Command() { + + public void execute() { + SDMXTableDetailCard sdmxTableDetailCard = new SDMXTableDetailCard( + exportSession); + getWizardWindow().addCard(sdmxTableDetailCard); + Log.info("NextCard SDMXTableDetailCard"); + getWizardWindow().nextCard(); + + } + + }; + + getWizardWindow().setNextButtonCommand(sayNextCard); + + Command sayPreviousCard = new Command() { + public void execute() { + try { + getWizardWindow().previousCard(); + getWizardWindow().removeCard(thisCard); + Log.info("Remove measureColumnSelectionCard"); + } catch (Exception e) { + Log.error("sayPreviousCard :" + e.getLocalizedMessage()); + } + } + }; + + getWizardWindow().setPreviousButtonCommand(sayPreviousCard); + // getWizardWindow().setEnableNextButton(false); + + setEnableNextButton(false); + + setBackButtonVisible(true); + setEnableBackButton(true); + + + } + +} diff --git a/src/main/java/org/gcube/portlets/user/td/sdmxexportwidget/client/MeasureColumnSelectionPanel.java b/src/main/java/org/gcube/portlets/user/td/sdmxexportwidget/client/MeasureColumnSelectionPanel.java new file mode 100644 index 0000000..b2e45ee --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/td/sdmxexportwidget/client/MeasureColumnSelectionPanel.java @@ -0,0 +1,259 @@ +/** + * + */ +package org.gcube.portlets.user.td.sdmxexportwidget.client; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +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.sdmx.SDMXExportSession; +import org.gcube.portlets.user.td.sdmxexportwidget.client.properties.ColumnDataProperties; +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.tr.column.ColumnData; +import org.gcube.portlets.user.td.widgetcommonevent.shared.tr.column.ColumnTypeCode; +import org.gcube.portlets.user.td.wizardwidget.client.WizardCard; +import org.gcube.portlets.user.td.wizardwidget.client.dataresource.ResourceBundle; + +import com.allen_sauer.gwt.log.client.Log; +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.HasSelectionHandlers; +import com.google.gwt.event.logical.shared.SelectionHandler; +import com.google.gwt.event.shared.HandlerRegistration; +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.sencha.gxt.core.client.IdentityValueProvider; +import com.sencha.gxt.core.client.Style.SelectionMode; +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.ContentPanel; +import com.sencha.gxt.widget.core.client.button.TextButton; +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.toolbar.LabelToolItem; +import com.sencha.gxt.widget.core.client.toolbar.ToolBar; + +/** + * + * @author "Giancarlo Panichi" g.panichi@isti.cnr.it + * + */ +public class MeasureColumnSelectionPanel extends ContentPanel implements + HasSelectionHandlers { + + private static final ColumnDataProperties properties = GWT + .create(ColumnDataProperties.class); + + private static final ColumnConfig nameColumn = new ColumnConfig( + properties.label(), 50, "Name"); + + private Grid grid; + + private WizardCard parent; + private ResourceBundle res; + private SDMXExportSession sdmxExportSession; + + public MeasureColumnSelectionPanel(WizardCard parent, ResourceBundle res, + SDMXExportSession sdmxExportSession) { + this.parent = parent; + this.res = res; + this.sdmxExportSession = sdmxExportSession; + + setHeaderVisible(false); + buildPanel(properties.id(), + Arrays.> asList(nameColumn), + nameColumn); + } + + private void buildPanel(ModelKeyProvider keyProvider, + List> columns, + ColumnConfig autoexpandColumn) { + + ToolBar toolBar = new ToolBar(); + toolBar.add(new LabelToolItem("Search: ")); + final TextField searchField = new TextField(); + toolBar.add(searchField); + + TextButton btnReload = new TextButton(); + // btnReload.setText("Reload"); + btnReload.setIcon(res.refresh16()); + btnReload.setToolTip("Reload"); + toolBar.add(btnReload); + + IdentityValueProvider identity = new IdentityValueProvider(); + final CheckBoxSelectionModel sm = new CheckBoxSelectionModel( + identity); + + ColumnModel cm = new ColumnModel(columns); + + final ExtendedListStore store = new ExtendedListStore( + keyProvider); + + searchField.addKeyUpHandler(new KeyUpHandler() { + + public void onKeyUp(KeyUpEvent event) { + Log.trace("searchTerm: " + searchField.getCurrentValue()); + store.applyFilters(); + } + }); + + store.addFilter(new StoreFilter() { + + public boolean select(Store store, ColumnData parent, + ColumnData item) { + String searchTerm = searchField.getCurrentValue(); + if (searchTerm == null) + return true; + return MeasureColumnSelectionPanel.this + .select(item, searchTerm); + } + }); + + store.setEnableFilters(true); + + RpcProxy> proxy = new RpcProxy>() { + + public void load(ListLoadConfig loadConfig, + final AsyncCallback> callback) { + loadData(loadConfig, callback); + } + }; + final ListLoader> loader = new ListLoader>( + proxy); + + loader.setRemoteSort(false); + loader.addLoadHandler(new LoadResultListStoreBinding>( + store)); + + 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.getView().setAutoExpandColumn(autoexpandColumn); + grid.getView().setStripeRows(true); + grid.getView().setColumnLines(true); + grid.getView().setAutoFill(true); + grid.setBorders(false); + grid.setLoadMask(true); + grid.setColumnReordering(true); + + SelectHandler sh = new SelectHandler() { + public void onSelect(SelectEvent event) { + loader.load(); + } + }; + + btnReload.addSelectHandler(sh); + + VerticalLayoutContainer con = new VerticalLayoutContainer(); + con.add(toolBar, new VerticalLayoutData(1, -1)); + con.add(grid, new VerticalLayoutData(1, 1)); + setWidget(con); + } + + protected boolean select(ColumnData item, String searchTerm) { + if (item.getLabel() != null + && item.getLabel().toLowerCase() + .contains(searchTerm.toLowerCase())) + return true; + + return false; + } + + protected void loadData(ListLoadConfig loadConfig, + final AsyncCallback> callback) { + + TDGWTServiceAsync.INSTANCE.getColumns(sdmxExportSession + .getTabResource().getTrId(), + new AsyncCallback>() { + + public void onFailure(Throwable caught) { + if (caught instanceof TDGWTSessionExpiredException) { + parent.getEventBus() + .fireEvent( + new SessionExpiredEvent( + SessionExpiredType.EXPIREDONSERVER)); + } else { + Log.error("No ColumnData retrieved"); + } + callback.onFailure(caught); + } + + public void onSuccess(ArrayList result) { + Log.trace("loaded " + result.size() + " ColumnData"); + List measureColumn = new ArrayList<>(); + for (ColumnData column : result) { + if (column != null + && column.getTypeCode() != null + && column.getTypeCode().compareTo( + ColumnTypeCode.MEASURE.toString()) == 0) { + measureColumn.add(column); + } + } + + callback.onSuccess(new ListLoadResultBean( + measureColumn)); + } + }); + } + + public HandlerRegistration addSelectionHandler( + SelectionHandler handler) { + return grid.getSelectionModel().addSelectionHandler(handler); + } + + /* + * public List getSelectedItems() { return + * grid.getSelectionModel().getSelectedItems(); } + */ + + public ColumnData getSelectedItem() { + return grid.getSelectionModel().getSelectedItem(); + } + + protected class ExtendedListStore extends ListStore { + + public ExtendedListStore(ModelKeyProvider keyProvider) { + super(keyProvider); + } + + public void applyFilters() { + super.applyFilters(); + } + + } + +} diff --git a/src/main/java/org/gcube/portlets/user/td/sdmxexportwidget/client/SDMXAgenciesSelectionCard.java b/src/main/java/org/gcube/portlets/user/td/sdmxexportwidget/client/SDMXAgenciesSelectionCard.java index f8cade7..b27e0a3 100644 --- a/src/main/java/org/gcube/portlets/user/td/sdmxexportwidget/client/SDMXAgenciesSelectionCard.java +++ b/src/main/java/org/gcube/portlets/user/td/sdmxexportwidget/client/SDMXAgenciesSelectionCard.java @@ -64,10 +64,10 @@ public class SDMXAgenciesSelectionCard extends WizardCard { getWizardWindow().nextCard(); break; case DATASET: - ViewColumnSelectionCard viewColumnSelectionCard = new ViewColumnSelectionCard( + MeasureColumnSelectionCard measureColumnSelectionCard = new MeasureColumnSelectionCard( exportSession); - getWizardWindow().addCard(viewColumnSelectionCard); - Log.info("NextCard ViewColumnSelectionCard"); + getWizardWindow().addCard(measureColumnSelectionCard); + Log.info("NextCard MeasureColumnSelectionCard"); getWizardWindow().nextCard(); break; case GENERIC: diff --git a/src/main/java/org/gcube/portlets/user/td/sdmxexportwidget/client/SDMXTableDetailCard.java b/src/main/java/org/gcube/portlets/user/td/sdmxexportwidget/client/SDMXTableDetailCard.java index b52e9e8..1b896ec 100644 --- a/src/main/java/org/gcube/portlets/user/td/sdmxexportwidget/client/SDMXTableDetailCard.java +++ b/src/main/java/org/gcube/portlets/user/td/sdmxexportwidget/client/SDMXTableDetailCard.java @@ -43,7 +43,7 @@ public class SDMXTableDetailCard extends WizardCard { private TextField agencyName; private TextField registryBaseUrl; private TextField version; - private TextField viewColumn; + private TextField measureColumn; public SDMXTableDetailCard(final SDMXExportSession exportSession) { super("SDMX Table Detail", ""); @@ -128,10 +128,10 @@ public class SDMXTableDetailCard extends WizardCard { version.setValue(Constants.SDMX_DATASET_EXPORT_DEFAULT_ID); p.add(new FieldLabel(version, "Version"), new VerticalLayoutData(1, -1)); - viewColumn = new TextField(); - viewColumn.setValue(exportSession.getObsValueColumn().getLabel()); - viewColumn.setReadOnly(true); - p.add(new FieldLabel(viewColumn, "Codelist Column"), + measureColumn = new TextField(); + measureColumn.setValue(exportSession.getObsValueColumn().getLabel()); + measureColumn.setReadOnly(true); + p.add(new FieldLabel(measureColumn, "Measure Column"), new VerticalLayoutData(1, -1)); }