data-miner-manager/src/main/java/org/gcube/portlets/user/dataminermanager/client/form/ColumnListFld.java

169 lines
4.2 KiB
Java

/**
*
*/
package org.gcube.portlets.user.dataminermanager.client.form;
import java.util.ArrayList;
import java.util.List;
import org.gcube.portlets.user.dataminermanager.client.bean.parameters.ColumnListParameter;
import org.gcube.portlets.user.dataminermanager.client.bean.parameters.Parameter;
import org.gcube.portlets.user.dataminermanager.client.properties.ColumnItemProperties;
import org.gcube.portlets.user.dataminermanager.shared.data.ColumnItem;
import org.gcube.portlets.user.dataminermanager.shared.data.TableItemSimple;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Widget;
import com.sencha.gxt.core.client.IdentityValueProvider;
import com.sencha.gxt.core.client.Style.SelectionMode;
import com.sencha.gxt.data.shared.ListStore;
import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer;
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;
/**
*
* @author Giancarlo Panichi email: <a
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class ColumnListFld extends AbstractFld {
private VerticalLayoutContainer vp;
private ColumnListParameter columnListParameter;
private ListStore<ColumnItem> store;
private Grid<ColumnItem> grid;
private CheckBoxSelectionModel<ColumnItem> sm;
/**
*
* @param parameter
*/
public ColumnListFld(Parameter parameter) {
super(parameter);
this.columnListParameter = (ColumnListParameter) parameter;
vp = new VerticalLayoutContainer();
init();
showNoSelectionField();
}
private void init() {
ColumnItemProperties props = GWT.create(ColumnItemProperties.class);
ColumnConfig<ColumnItem, String> labelCol = new ColumnConfig<ColumnItem, String>(
props.label());
IdentityValueProvider<ColumnItem> identity = new IdentityValueProvider<ColumnItem>();
sm = new CheckBoxSelectionModel<ColumnItem>(identity);
List<ColumnConfig<ColumnItem, ?>> l = new ArrayList<ColumnConfig<ColumnItem, ?>>();
l.add(sm.getColumn());
l.add(labelCol);
ColumnModel<ColumnItem> cm = new ColumnModel<ColumnItem>(l);
store = new ListStore<ColumnItem>(props.id());
grid = new Grid<ColumnItem>(store, cm);
sm.setSelectionMode(SelectionMode.MULTI);
grid.setSelectionModel(sm);
// grid.getView().setAutoExpandColumn(labelCol);
grid.setSize("150px", "150px");
grid.getView().setStripeRows(true);
grid.getView().setColumnLines(true);
grid.getView().setAutoFill(true);
grid.setBorders(false);
grid.setLoadMask(true);
grid.setColumnReordering(true);
grid.setColumnResize(false);
grid.disable();
}
/**
*
*/
private void showNoSelectionField() {
vp.clear();
vp.add(grid);
vp.add(new HTML(
"<div class='workflow-parameters-description'>Select table from parameter "
+ this.columnListParameter
.getReferredTabularParameterName() + "</div>"));
vp.forceLayout();
}
/**
*
*/
private void showFieldWithSelection(TableItemSimple tableItem) {
vp.clear();
vp.add(grid);
vp.add(new HTML(
"<div class='workflow-parameters-description'>Columns of Data Set "
+ tableItem.getName() + "</div>"));
vp.forceLayout();
}
/**
*
*/
@Override
public String getValue() {
String separator = columnListParameter.getSeparator();
String value = "";
boolean first = true;
for (ColumnItem columnItem : sm.getSelection()) {
String columnName = columnItem.getName();
value += (first ? "" : separator) + columnName;
first = false;
}
return value;
}
/**
*
*/
@Override
public Widget getWidget() {
return vp;
}
/**
*
*/
@Override
public void fireEvent(Object message) {
if (message == null) {
store.clear();
store.commitChanges();
grid.disable();
showNoSelectionField();
} else {
TableItemSimple tableItem = (TableItemSimple) message;
store.clear();
store.commitChanges();
store.addAll(tableItem.getColumns());
store.commitChanges();
grid.enable();
showFieldWithSelection(tableItem);
}
}
/**
*
*/
@Override
public boolean isValid() {
return store.size() > 0;
}
}