package org.gcube.portlets.user.td.columnwidget.client.mapping; import java.util.ArrayList; import org.gcube.portlets.user.td.columnwidget.client.custom.IconButton; import org.gcube.portlets.user.td.columnwidget.client.dimension.DimensionRowSelectionDialog; import org.gcube.portlets.user.td.columnwidget.client.dimension.DimensionRowSelectionListener; import org.gcube.portlets.user.td.columnwidget.client.dimension.DimensionRowsProperties; import org.gcube.portlets.user.td.columnwidget.client.resources.ResourceBundle; import org.gcube.portlets.user.td.columnwidget.client.utils.UtilsGXT3; import org.gcube.portlets.user.td.gwtservice.shared.tr.DimensionRow; import org.gcube.portlets.user.td.gwtservice.shared.tr.TabResource; import org.gcube.portlets.user.td.gwtservice.shared.tr.column.mapping.ColumnMappingData; import org.gcube.portlets.user.td.gwtservice.shared.tr.column.mapping.ColumnMappingList; import org.gcube.portlets.user.td.widgetcommonevent.shared.CellData; import org.gcube.portlets.user.td.widgetcommonevent.shared.TRId; import org.gcube.portlets.user.td.widgetcommonevent.shared.tr.column.ColumnData; import com.allen_sauer.gwt.log.client.Log; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; 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.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.SimpleContainer; 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.event.TriggerClickEvent; import com.sencha.gxt.widget.core.client.event.TriggerClickEvent.TriggerClickHandler; import com.sencha.gxt.widget.core.client.form.ComboBox; import com.sencha.gxt.widget.core.client.form.FieldLabel; /** * * @author "Giancarlo Panichi" email: g.panichi@isti.cnr.it * */ public class ColumnMappingPanel extends FramedPanel { protected static final String WIDTH = "520px"; protected static final String HEIGHT = "400px"; protected static final String COMBOWIDTH = "220px"; protected static final String CONTAINERHEIGHT = "340px"; protected static final String CONTAINERWIDTH = "500px"; protected ColumnMappingPanel thisPanel; protected ColumnMappingDialog parent; protected TRId trId; protected ColumnData selectedColumn; protected TabResource dimensionTR; protected ColumnData referenceColumn; protected EventBus eventBus; protected VerticalLayoutContainer vert; protected String itemIdSourceValueArg; protected String itemIdTargetValueArg; protected String itemIdBtnAdd; protected String itemIdBtnDel; protected ColumnMappingList columnMappingList; protected ArrayList mapping; private TextButton btnSave; private TextButton btnClose; /** * * * @param parent * @param trId * @param selectedColumn * @param dimensionTR * @param referenceColumn * @param eventBus */ public ColumnMappingPanel(ColumnMappingDialog parent, TRId trId, ColumnData selectedColumn, TabResource dimensionTR, ColumnData referenceColumn, EventBus eventBus) { this.parent = parent; this.trId = trId; this.selectedColumn = selectedColumn; this.dimensionTR = dimensionTR; this.referenceColumn = referenceColumn; this.eventBus = eventBus; thisPanel = this; Log.debug("ColumnMappingPanel: [parent:" + parent + " , trId:" + trId + ", selectedColumn:" + selectedColumn + ", dimensionTR:" + dimensionTR + ", columnReference:" + referenceColumn + ", eventBus:" + eventBus + "]"); columnMappingList = new ColumnMappingList(); mapping = new ArrayList(); initPanel(); create(); } protected void initPanel() { setHeaderVisible(false); setBodyBorder(false); } protected void create() { itemIdSourceValueArg = "SourceArg" + selectedColumn.getName(); itemIdTargetValueArg = "TargetArg" + selectedColumn.getName(); SimpleContainer container = new SimpleContainer(); container.setHeight(CONTAINERHEIGHT); container.setWidth(CONTAINERWIDTH); btnSave = new TextButton("Save"); btnSave.setIcon(ResourceBundle.INSTANCE.save()); btnSave.setIconAlign(IconAlign.RIGHT); btnSave.setToolTip("Save"); btnSave.addSelectHandler(new SelectHandler() { public void onSelect(SelectEvent event) { Log.debug("Pressed Save"); btnSave.disable(); save(); } }); 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(btnSave, new BoxLayoutData(new Margins(10, 4, 10, 4))); flowButton.add(btnClose, new BoxLayoutData(new Margins(10, 4, 10, 4))); vert = new VerticalLayoutContainer(); vert.setScrollMode(ScrollMode.AUTO); vert.setAdjustForScroll(true); setColumnMappingData(); container.add(vert); container.forceLayout(); FieldLabel rowsLabel = new FieldLabel(null, "Select rows"); rowsLabel.getElement().applyStyles("font-weight:bold"); VerticalLayoutContainer vPanel = new VerticalLayoutContainer(); vPanel.add(rowsLabel, new VerticalLayoutData(1, -1, new Margins(1))); vPanel.add(container, new VerticalLayoutData(1, -1)); vPanel.add(flowButton, new VerticalLayoutData(1, -1, new Margins(1))); add(vPanel); forceLayout(); } protected void save() { int lenght = vert.getWidgetCount(); int i = 0; for (; i < lenght; i++) { HBoxLayoutContainer h = (HBoxLayoutContainer) vert.getWidget(i); if (h != null) { @SuppressWarnings("unchecked") ComboBox comboSourceValue = (ComboBox) h .getItemByItemId(itemIdSourceValueArg); DimensionRow sourceValue = comboSourceValue.getValue(); if (sourceValue != null) { @SuppressWarnings("unchecked") ComboBox comboTargetValue = (ComboBox) h .getItemByItemId(itemIdTargetValueArg); DimensionRow targetValue = comboTargetValue.getValue(); if (targetValue != null) { ColumnMappingData columnMappingData = new ColumnMappingData( sourceValue, targetValue); mapping.add(columnMappingData); } } } else { } } if (mapping.size() > 0) { columnMappingList = new ColumnMappingList("1", "map", mapping); if (parent != null) { parent.saveMapping(columnMappingList); } } else { UtilsGXT3.info("Attention", "Creates a valid mapping"); btnSave.enable(); } } protected void close() { if (parent != null) { parent.close(); } hide(); } protected void setColumnMappingData() { final HBoxLayoutContainer horiz = new HBoxLayoutContainer(); // Source Combo DimensionRowsProperties propsSource = GWT .create(DimensionRowsProperties.class); ListStore storeComboSourceValue = new ListStore( propsSource.rowId()); final ComboBox comboSourceValue = new ComboBox( storeComboSourceValue, propsSource.value()); comboSourceValue.setItemId(itemIdSourceValueArg); Log.debug("ComboSourceValue created"); final DimensionRowSelectionListener sourceValueSelectedListener = new DimensionRowSelectionListener() { @Override public void selectedDimensionRow(DimensionRow dimensionRow) { Log.debug("Source DimensionRow selected: " + dimensionRow); comboSourceValue.setValue(dimensionRow, true); } @Override public void abortedDimensionRowSelection() { Log.debug("Source DimensionRow selection aborted"); } @Override public void failedDimensionRowSelection(String reason, String detail) { Log.error("Source DimensionRow selection error: " + reason); } }; comboSourceValue.addTriggerClickHandler(new TriggerClickHandler() { @Override public void onTriggerClick(TriggerClickEvent event) { Log.debug("ComboSourceValue TriggerClickEvent"); comboSourceValue.collapse(); CellData cellData = new CellData("", selectedColumn.getName(), selectedColumn.getColumnId(), selectedColumn.getLabel(), null, 0, 0); DimensionRowSelectionDialog dimensionRowSelectionDialog = new DimensionRowSelectionDialog( selectedColumn, cellData, true, false, true, false, true, eventBus); dimensionRowSelectionDialog .addListener(sourceValueSelectedListener); dimensionRowSelectionDialog.show(); } }); comboSourceValue.setEmptyText("Select a source..."); comboSourceValue.setWidth(COMBOWIDTH); comboSourceValue.setEditable(false); comboSourceValue.setTriggerAction(TriggerAction.ALL); // Target Combo DimensionRowsProperties propsTarget = GWT .create(DimensionRowsProperties.class); ListStore storeComboTargetValue = new ListStore( propsTarget.rowId()); final ComboBox comboTargetValue = new ComboBox( storeComboTargetValue, propsTarget.value()); comboTargetValue.setItemId(itemIdTargetValueArg); Log.debug("ComboTargetValue created"); final DimensionRowSelectionListener targetValueSelectedListener = new DimensionRowSelectionListener() { @Override public void selectedDimensionRow(DimensionRow dimensionRow) { Log.debug("Target DimensionRow selected: " + dimensionRow); comboTargetValue.setValue(dimensionRow, true); } @Override public void abortedDimensionRowSelection() { Log.debug("Target DimensionRow selection aborted"); } @Override public void failedDimensionRowSelection(String reason, String detail) { Log.error("Target DimensionRow selection error: " + reason); } }; comboTargetValue.addTriggerClickHandler(new TriggerClickHandler() { @Override public void onTriggerClick(TriggerClickEvent event) { Log.debug("ComboTargetValue TriggerClickEvent"); comboTargetValue.collapse(); CellData cellData = new CellData("", referenceColumn.getName(), referenceColumn.getColumnId(), referenceColumn .getLabel(), null, 0, 0); DimensionRowSelectionDialog dimensionRowSelectionDialog = new DimensionRowSelectionDialog( referenceColumn, cellData, true, false, true, false, true, eventBus); dimensionRowSelectionDialog .addListener(targetValueSelectedListener); dimensionRowSelectionDialog.show(); } }); comboTargetValue.setEmptyText("Select a target..."); comboTargetValue.setWidth(COMBOWIDTH); comboTargetValue.setEditable(false); comboTargetValue.setTriggerAction(TriggerAction.ALL); final IconButton btnAdd = new IconButton(); btnAdd.setItemId(itemIdBtnAdd); btnAdd.setIcon(ResourceBundle.INSTANCE.add()); btnAdd.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { Log.debug("Clicked btnAdd"); addColumnMappingData(); thisPanel.forceLayout(); vert.forceLayout(); } }); btnAdd.setVisible(true); final IconButton btnDel = new IconButton(); btnDel.setItemId(itemIdBtnDel); btnDel.setIcon(ResourceBundle.INSTANCE.delete()); btnDel.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { Log.debug("Clicked btnDel"); vert.remove(horiz); if (vert.getWidgetCount() == 0) { setColumnMappingData(); } else { } thisPanel.forceLayout(); vert.forceLayout(); } }); btnDel.setVisible(false); horiz.setHBoxLayoutAlign(HBoxLayoutAlign.MIDDLE); horiz.setPack(BoxLayoutPack.START); horiz.add(comboSourceValue, new BoxLayoutData(new Margins(2, 1, 2, 1))); horiz.add(comboTargetValue, new BoxLayoutData(new Margins(2, 1, 2, 1))); horiz.add(btnAdd, new BoxLayoutData(new Margins(2, 1, 2, 1))); horiz.add(btnDel, new BoxLayoutData(new Margins(2, 1, 2, 1))); vert.add(horiz); } protected void addColumnMappingData() { final HBoxLayoutContainer horiz = new HBoxLayoutContainer(); // Source Combo DimensionRowsProperties propsSource = GWT .create(DimensionRowsProperties.class); ListStore storeComboSourceValue = new ListStore( propsSource.rowId()); final ComboBox comboSourceValue = new ComboBox( storeComboSourceValue, propsSource.value()); comboSourceValue.setItemId(itemIdSourceValueArg); Log.debug("ComboSourceValue created"); final DimensionRowSelectionListener sourceValueSelectedListener = new DimensionRowSelectionListener() { @Override public void selectedDimensionRow(DimensionRow dimensionRow) { Log.debug("Source DimensionRow selected: " + dimensionRow); comboSourceValue.setValue(dimensionRow, true); } @Override public void abortedDimensionRowSelection() { Log.debug("Source DimensionRow selection aborted"); } @Override public void failedDimensionRowSelection(String reason, String detail) { Log.error("Source DimensionRow selection error: " + reason); } }; comboSourceValue.addTriggerClickHandler(new TriggerClickHandler() { @Override public void onTriggerClick(TriggerClickEvent event) { Log.debug("ComboSourceValue TriggerClickEvent"); comboSourceValue.collapse(); CellData cellData = new CellData("", selectedColumn.getName(), selectedColumn.getColumnId(), selectedColumn.getLabel(), null, 0, 0); DimensionRowSelectionDialog dimensionRowSelectionDialog = new DimensionRowSelectionDialog( selectedColumn, cellData, true, false, true, false, true, eventBus); dimensionRowSelectionDialog .addListener(sourceValueSelectedListener); dimensionRowSelectionDialog.show(); } }); comboSourceValue.setEmptyText("Select a source..."); comboSourceValue.setWidth(COMBOWIDTH); comboSourceValue.setEditable(false); comboSourceValue.setTriggerAction(TriggerAction.ALL); // Target Combo DimensionRowsProperties propsTarget = GWT .create(DimensionRowsProperties.class); ListStore storeComboTargetValue = new ListStore( propsTarget.rowId()); final ComboBox comboTargetValue = new ComboBox( storeComboTargetValue, propsTarget.value()); comboTargetValue.setItemId(itemIdTargetValueArg); Log.debug("ComboTargetValue created"); final DimensionRowSelectionListener targetValueSelectedListener = new DimensionRowSelectionListener() { @Override public void selectedDimensionRow(DimensionRow dimensionRow) { Log.debug("Target DimensionRow selected: " + dimensionRow); comboTargetValue.setValue(dimensionRow, true); } @Override public void abortedDimensionRowSelection() { Log.debug("Target DimensionRow selection aborted"); } @Override public void failedDimensionRowSelection(String reason, String detail) { Log.error("Target DimensionRow selection error: " + reason); } }; comboTargetValue.addTriggerClickHandler(new TriggerClickHandler() { @Override public void onTriggerClick(TriggerClickEvent event) { Log.debug("ComboTargetValue TriggerClickEvent"); comboTargetValue.collapse(); CellData cellData = new CellData("", referenceColumn.getName(), referenceColumn.getColumnId(), referenceColumn .getLabel(), null, 0, 0); DimensionRowSelectionDialog dimensionRowSelectionDialog = new DimensionRowSelectionDialog( referenceColumn, cellData, true, false, true, false, true, eventBus); dimensionRowSelectionDialog .addListener(targetValueSelectedListener); dimensionRowSelectionDialog.show(); } }); comboTargetValue.setEmptyText("Select a target..."); comboTargetValue.setWidth(COMBOWIDTH); comboTargetValue.setEditable(false); comboTargetValue.setTriggerAction(TriggerAction.ALL); final IconButton btnAdd = new IconButton(); btnAdd.setItemId(itemIdBtnAdd); btnAdd.setIcon(ResourceBundle.INSTANCE.add()); btnAdd.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { Log.debug("Clicked btnAdd"); addColumnMappingData(); thisPanel.forceLayout(); vert.forceLayout(); } }); btnAdd.setVisible(true); final IconButton btnDel = new IconButton(); btnDel.setItemId(itemIdBtnDel); btnDel.setIcon(ResourceBundle.INSTANCE.delete()); btnDel.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { Log.debug("Clicked btnDel"); vert.remove(horiz); if (vert.getWidgetCount() == 0) { setColumnMappingData(); } else { } thisPanel.forceLayout(); vert.forceLayout(); } }); btnDel.setVisible(true); horiz.setHBoxLayoutAlign(HBoxLayoutAlign.MIDDLE); horiz.setPack(BoxLayoutPack.START); horiz.add(comboSourceValue, new BoxLayoutData(new Margins(2, 1, 2, 1))); horiz.add(comboTargetValue, new BoxLayoutData(new Margins(2, 1, 2, 1))); horiz.add(btnAdd, new BoxLayoutData(new Margins(2, 1, 2, 1))); horiz.add(btnDel, new BoxLayoutData(new Margins(2, 1, 2, 1))); vert.add(horiz); } }