tabular-data-expression-widget/src/main/java/org/gcube/portlets/user/td/expressionwidget/client/ConditionWidget.java

100 lines
3.4 KiB
Java

package org.gcube.portlets.user.td.expressionwidget.client;
import org.gcube.data.analysis.tabulardata.expression.Operator;
import org.gcube.portlets.user.td.expressionwidget.client.operation.Operation;
import org.gcube.portlets.user.td.expressionwidget.client.operation.OperationProperties;
import org.gcube.portlets.user.td.expressionwidget.client.operation.OperationsStore;
import com.allen_sauer.gwt.log.client.Log;
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.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
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.LabelProvider;
import com.sencha.gxt.data.shared.ListStore;
import com.sencha.gxt.widget.core.client.container.HorizontalLayoutContainer;
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.container.HorizontalLayoutContainer.HorizontalLayoutData;
import com.sencha.gxt.widget.core.client.form.ComboBox;
import com.sencha.gxt.widget.core.client.info.Info;
/**
*
* @author "Giancarlo Panichi"
* <a href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class ConditionWidget extends SimpleContainer {
protected Operator op;
protected ComboBox<Operation> comboOp=null;
ConditionWidget(String columnPlaceHolderId,String columnTypeCode, String dataTypeName){
VerticalLayoutContainer vert=new VerticalLayoutContainer();
vert.setScrollMode(ScrollMode.AUTO);
vert.setAdjustForScroll(true);
HorizontalLayoutContainer horiz=new HorizontalLayoutContainer();
OperationProperties props = GWT.create(OperationProperties.class);
ListStore<Operation> storeOp = new ListStore<Operation>(props.id());
storeOp.addAll(OperationsStore.getAll(dataTypeName));
Log.trace("Store created");
comboOp = new ComboBox<Operation>(storeOp,
props.label());
Log.trace("ComboOperation created");
addHandlersForEventObservation(comboOp, props.label());
comboOp.setEmptyText("Select a operation...");
comboOp.setWidth(150);
comboOp.setTypeAhead(true);
comboOp.setTriggerAction(TriggerAction.ALL);
horiz.add(comboOp,new HorizontalLayoutData(-1, -1, new Margins(0)));
vert.add(horiz,new VerticalLayoutData(-1, -1, new Margins(0)));
add(vert);
}
private <T> void addHandlersForEventObservation(ComboBox<T> combo,
final LabelProvider<T> labelProvider) {
combo.addValueChangeHandler(new ValueChangeHandler<T>() {
public void onValueChange(ValueChangeEvent<T> event) {
Info.display(
"Value Changed",
"New value: "
+ (event.getValue() == null ? "nothing"
: labelProvider.getLabel(event
.getValue()) + "!"));
}
});
combo.addSelectionHandler(new SelectionHandler<T>() {
public void onSelection(SelectionEvent<T> event) {
Info.display(
"State Selected",
"You selected "
+ (event.getSelectedItem() == null ? "nothing"
: labelProvider.getLabel(event
.getSelectedItem()) + "!"));
}
});
}
}