401 lines
13 KiB
Java
401 lines
13 KiB
Java
package org.gcube.portlets.user.td.unionwizardwidget.client;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.HashMap;
|
|
|
|
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.tr.ColumnData;
|
|
import org.gcube.portlets.user.td.gwtservice.shared.tr.union.UnionColumnsMapping;
|
|
import org.gcube.portlets.user.td.unionwizardwidget.client.custom.IconButton;
|
|
import org.gcube.portlets.user.td.unionwizardwidget.client.properties.ColumnDataProperties;
|
|
import org.gcube.portlets.user.td.unionwizardwidget.client.resources.UnionResourceBundle;
|
|
import org.gcube.portlets.user.td.unionwizardwidget.client.utils.UtilsGXT3;
|
|
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.wizardwidget.client.dataresource.ResourceBundle;
|
|
|
|
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.gwt.user.client.rpc.AsyncCallback;
|
|
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.ContentPanel;
|
|
import com.sencha.gxt.widget.core.client.Resizable;
|
|
import com.sencha.gxt.widget.core.client.Resizable.Dir;
|
|
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.ResizeContainer;
|
|
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.form.ComboBox;
|
|
import com.sencha.gxt.widget.core.client.form.FieldLabel;
|
|
import com.sencha.gxt.widget.core.client.form.TextField;
|
|
|
|
/**
|
|
*
|
|
* @author "Giancarlo Panichi" email: <a
|
|
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
|
|
*
|
|
*/
|
|
public class ColumnMappingPanel extends ContentPanel {
|
|
|
|
private static final String COMBOWIDTH = "120px";
|
|
private static final String COLUMNLABELWIDTH = "120px";
|
|
protected ResourceBundle res;
|
|
protected ColumnMappingCard parent;
|
|
protected VerticalLayoutContainer vert;
|
|
protected ArrayList<ColumnData> sourceColumns;
|
|
protected ArrayList<ColumnData> unionColumns;
|
|
protected ResizeContainer thisPanel;
|
|
|
|
protected HashMap<ColumnData,ColumnData> columnMap;
|
|
protected ArrayList<UnionColumnsMapping> listUnionColumnsMapping;
|
|
|
|
protected String itemIdSourceColumn = "itemIdSourceColumn";
|
|
protected String itemIdUnionColumn = "itemIdUnionColumn";
|
|
protected String itemIdLabelColumn = "itemIdLabelColumn";
|
|
protected String itemIdBtnAdd = "itemIdBtnAdd";
|
|
protected String itemIdBtnDel = "itemIdBtnDel";
|
|
|
|
/**
|
|
*
|
|
* @param parent
|
|
* @param res
|
|
*/
|
|
public ColumnMappingPanel(ColumnMappingCard parent, ResourceBundle res) {
|
|
this.res = res;
|
|
this.parent = parent;
|
|
thisPanel = this;
|
|
parent.unionSession.getColumnsMatch();
|
|
Log.debug("ColumnMappingPanel");
|
|
init();
|
|
retrieveSourceColumns();
|
|
}
|
|
|
|
protected void init() {
|
|
setHeaderVisible(false);
|
|
new Resizable(this, Dir.E, Dir.SE, Dir.S);
|
|
|
|
}
|
|
|
|
protected void create() {
|
|
|
|
SimpleContainer container = new SimpleContainer();
|
|
|
|
vert = new VerticalLayoutContainer();
|
|
vert.setScrollMode(ScrollMode.AUTO);
|
|
vert.setAdjustForScroll(true);
|
|
|
|
setColumnMap();
|
|
|
|
container.add(vert);
|
|
container.forceLayout();
|
|
|
|
FieldLabel rowsLabel = new FieldLabel(null, "Select columns");
|
|
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));
|
|
|
|
add(vPanel);
|
|
forceLayout();
|
|
|
|
}
|
|
|
|
private void retrieveSourceColumns() {
|
|
TRId trId = parent.unionSession.getTrId();
|
|
TDGWTServiceAsync.INSTANCE.getColumns(trId,
|
|
new AsyncCallback<ArrayList<ColumnData>>() {
|
|
|
|
@Override
|
|
public void onFailure(Throwable caught) {
|
|
if (caught instanceof TDGWTSessionExpiredException) {
|
|
parent.getEventBus()
|
|
.fireEvent(
|
|
new SessionExpiredEvent(
|
|
SessionExpiredType.EXPIREDONSERVER));
|
|
} else {
|
|
Log.debug("Error retrieving source columns: "
|
|
+ caught.getLocalizedMessage());
|
|
UtilsGXT3
|
|
.alert("Error retrieving source columns",
|
|
"Error retrieving source columns on server!");
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onSuccess(ArrayList<ColumnData> result) {
|
|
sourceColumns = result;
|
|
retrieveUnionColumns();
|
|
|
|
}
|
|
});
|
|
|
|
}
|
|
|
|
private void retrieveUnionColumns() {
|
|
TRId trId = parent.unionSession.getUnionTabularResource().getTrId();
|
|
TDGWTServiceAsync.INSTANCE.getColumns(trId,
|
|
new AsyncCallback<ArrayList<ColumnData>>() {
|
|
|
|
@Override
|
|
public void onFailure(Throwable caught) {
|
|
if (caught instanceof TDGWTSessionExpiredException) {
|
|
parent.getEventBus()
|
|
.fireEvent(
|
|
new SessionExpiredEvent(
|
|
SessionExpiredType.EXPIREDONSERVER));
|
|
} else {
|
|
Log.debug("Error retrieving union columns: "
|
|
+ caught.getLocalizedMessage());
|
|
UtilsGXT3
|
|
.alert("Error retrieving union columns",
|
|
"Error retrieving union columns on server!");
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onSuccess(ArrayList<ColumnData> result) {
|
|
unionColumns = result;
|
|
create();
|
|
|
|
}
|
|
});
|
|
|
|
}
|
|
|
|
protected void setColumnMap() {
|
|
|
|
final HBoxLayoutContainer horiz = new HBoxLayoutContainer();
|
|
|
|
// Column Label
|
|
TextField columnLabel = new TextField();
|
|
columnLabel.setItemId(itemIdLabelColumn);
|
|
columnLabel.setAllowBlank(false);
|
|
columnLabel.setWidth(COLUMNLABELWIDTH);
|
|
|
|
// Source Combo
|
|
ColumnDataProperties propsSourceColumn = GWT
|
|
.create(ColumnDataProperties.class);
|
|
ListStore<ColumnData> storeComboSourceColumn = new ListStore<ColumnData>(
|
|
propsSourceColumn.id());
|
|
storeComboSourceColumn.addAll(sourceColumns);
|
|
|
|
final ComboBox<ColumnData> comboSourceColumn = new ComboBox<ColumnData>(
|
|
storeComboSourceColumn, propsSourceColumn.label());
|
|
comboSourceColumn.setItemId(itemIdSourceColumn);
|
|
|
|
Log.debug("ComboSourceColumn created");
|
|
|
|
comboSourceColumn.setEmptyText("Select a column...");
|
|
comboSourceColumn.setWidth(COMBOWIDTH);
|
|
comboSourceColumn.setEditable(false);
|
|
comboSourceColumn.setTriggerAction(TriggerAction.ALL);
|
|
|
|
// Union Combo
|
|
ColumnDataProperties propsUnionColumn = GWT
|
|
.create(ColumnDataProperties.class);
|
|
ListStore<ColumnData> storeComboUnionColumn = new ListStore<ColumnData>(
|
|
propsUnionColumn.id());
|
|
storeComboUnionColumn.addAll(unionColumns);
|
|
|
|
final ComboBox<ColumnData> comboUnionColumn = new ComboBox<ColumnData>(
|
|
storeComboUnionColumn, propsUnionColumn.label());
|
|
comboUnionColumn.setItemId(itemIdUnionColumn);
|
|
|
|
Log.debug("ComboUnionColumn created");
|
|
|
|
comboUnionColumn.setEmptyText("Select a column...");
|
|
comboUnionColumn.setWidth(COMBOWIDTH);
|
|
comboUnionColumn.setEditable(false);
|
|
comboUnionColumn.setTriggerAction(TriggerAction.ALL);
|
|
|
|
final IconButton btnAdd = new IconButton();
|
|
btnAdd.setItemId(itemIdBtnAdd);
|
|
btnAdd.setIcon(UnionResourceBundle.INSTANCE.add());
|
|
btnAdd.addClickHandler(new ClickHandler() {
|
|
|
|
public void onClick(ClickEvent event) {
|
|
Log.debug("Clicked btnAdd");
|
|
addColumnMap();
|
|
thisPanel.forceLayout();
|
|
vert.forceLayout();
|
|
|
|
}
|
|
});
|
|
btnAdd.setVisible(true);
|
|
|
|
final IconButton btnDel = new IconButton();
|
|
btnDel.setItemId(itemIdBtnDel);
|
|
btnDel.setIcon(UnionResourceBundle.INSTANCE.delete());
|
|
btnDel.addClickHandler(new ClickHandler() {
|
|
|
|
public void onClick(ClickEvent event) {
|
|
Log.debug("Clicked btnDel");
|
|
vert.remove(horiz);
|
|
if (vert.getWidgetCount() == 0) {
|
|
setColumnMap();
|
|
} else {
|
|
|
|
}
|
|
thisPanel.forceLayout();
|
|
vert.forceLayout();
|
|
|
|
}
|
|
});
|
|
btnDel.setVisible(false);
|
|
|
|
|
|
horiz.setHBoxLayoutAlign(HBoxLayoutAlign.MIDDLE);
|
|
horiz.setPack(BoxLayoutPack.START);
|
|
|
|
horiz.add(columnLabel, new BoxLayoutData(new Margins(2, 1, 2, 1)));
|
|
horiz.add(comboSourceColumn, new BoxLayoutData(new Margins(2, 1, 2, 1)));
|
|
horiz.add(comboUnionColumn, 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 addColumnMap() {
|
|
|
|
final HBoxLayoutContainer horiz = new HBoxLayoutContainer();
|
|
|
|
// Column Label
|
|
TextField columnLabel = new TextField();
|
|
columnLabel.setItemId(itemIdLabelColumn);
|
|
columnLabel.setAllowBlank(false);
|
|
columnLabel.setWidth(COLUMNLABELWIDTH);
|
|
|
|
// Source Combo
|
|
ColumnDataProperties propsSourceColumn = GWT
|
|
.create(ColumnDataProperties.class);
|
|
ListStore<ColumnData> storeComboSourceColumn = new ListStore<ColumnData>(
|
|
propsSourceColumn.id());
|
|
storeComboSourceColumn.addAll(unionColumns);
|
|
|
|
final ComboBox<ColumnData> comboSourceColumn = new ComboBox<ColumnData>(
|
|
storeComboSourceColumn, propsSourceColumn.label());
|
|
comboSourceColumn.setItemId(itemIdSourceColumn);
|
|
|
|
Log.debug("ComboSourceColumn created");
|
|
|
|
comboSourceColumn.setEmptyText("Select a column...");
|
|
comboSourceColumn.setWidth(COMBOWIDTH);
|
|
comboSourceColumn.setEditable(false);
|
|
comboSourceColumn.setTriggerAction(TriggerAction.ALL);
|
|
|
|
// Union Combo
|
|
ColumnDataProperties propsUnionColumn = GWT
|
|
.create(ColumnDataProperties.class);
|
|
ListStore<ColumnData> storeComboUnionColumn = new ListStore<ColumnData>(
|
|
propsUnionColumn.id());
|
|
storeComboUnionColumn.addAll(unionColumns);
|
|
|
|
final ComboBox<ColumnData> comboUnionColumn = new ComboBox<ColumnData>(
|
|
storeComboUnionColumn, propsUnionColumn.label());
|
|
comboUnionColumn.setItemId(itemIdUnionColumn);
|
|
|
|
Log.debug("ComboUnionColumn created");
|
|
|
|
comboUnionColumn.setEmptyText("Select a column...");
|
|
comboUnionColumn.setWidth(COMBOWIDTH);
|
|
comboUnionColumn.setEditable(false);
|
|
comboUnionColumn.setTriggerAction(TriggerAction.ALL);
|
|
|
|
final IconButton btnAdd = new IconButton();
|
|
btnAdd.setItemId(itemIdBtnAdd);
|
|
btnAdd.setIcon(UnionResourceBundle.INSTANCE.add());
|
|
btnAdd.addClickHandler(new ClickHandler() {
|
|
|
|
public void onClick(ClickEvent event) {
|
|
Log.debug("Clicked btnAdd");
|
|
addColumnMap();
|
|
thisPanel.forceLayout();
|
|
vert.forceLayout();
|
|
|
|
}
|
|
});
|
|
btnAdd.setVisible(true);
|
|
|
|
final IconButton btnDel = new IconButton();
|
|
btnDel.setItemId(itemIdBtnDel);
|
|
btnDel.setIcon(UnionResourceBundle.INSTANCE.delete());
|
|
btnDel.addClickHandler(new ClickHandler() {
|
|
|
|
public void onClick(ClickEvent event) {
|
|
Log.debug("Clicked btnDel");
|
|
vert.remove(horiz);
|
|
if (vert.getWidgetCount() == 0) {
|
|
setColumnMap();
|
|
} else {
|
|
|
|
}
|
|
thisPanel.forceLayout();
|
|
vert.forceLayout();
|
|
|
|
}
|
|
});
|
|
btnDel.setVisible(false);
|
|
|
|
horiz.setHBoxLayoutAlign(HBoxLayoutAlign.MIDDLE);
|
|
horiz.setPack(BoxLayoutPack.START);
|
|
|
|
horiz.add(columnLabel, new BoxLayoutData(new Margins(2, 1, 2, 1)));
|
|
horiz.add(comboSourceColumn, new BoxLayoutData(new Margins(2, 1, 2, 1)));
|
|
horiz.add(comboUnionColumn, 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);
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @return
|
|
*/
|
|
protected ArrayList<UnionColumnsMapping> getSelectedMap() {
|
|
listUnionColumnsMapping=new ArrayList<UnionColumnsMapping>();
|
|
|
|
int lenght = vert.getWidgetCount();
|
|
int i = 0;
|
|
for (; i < lenght; i++) {
|
|
HBoxLayoutContainer h = (HBoxLayoutContainer) vert.getWidget(i);
|
|
if (h != null) {
|
|
@SuppressWarnings("unchecked")
|
|
ComboBox<ColumnData> comboSourceColumn = (ComboBox<ColumnData>) h
|
|
.getItemByItemId(itemIdSourceColumn);
|
|
ColumnData sourceColumn = comboSourceColumn.getCurrentValue();
|
|
if (sourceColumn != null) {
|
|
@SuppressWarnings("unchecked")
|
|
ComboBox<ColumnData> comboUnionColumn= (ComboBox<ColumnData>) h
|
|
.getItemByItemId(itemIdUnionColumn);
|
|
ColumnData unionColumn = comboUnionColumn.getCurrentValue();
|
|
if (unionColumn != null) {
|
|
UnionColumnsMapping colMatch= new UnionColumnsMapping(sourceColumn, unionColumn);
|
|
listUnionColumnsMapping.add(colMatch);
|
|
}
|
|
}
|
|
} else {
|
|
|
|
}
|
|
}
|
|
|
|
return listUnionColumnsMapping;
|
|
|
|
}
|
|
|
|
}
|