package de.uni_luebeck.inb.krabbenhoeft.eQTL.client; 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.event.logical.shared.HasSelectionHandlers; import com.google.gwt.event.logical.shared.SelectionEvent; import com.google.gwt.event.logical.shared.SelectionHandler; import com.google.gwt.event.shared.HandlerRegistration; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.PopupPanel; import com.google.gwt.user.client.ui.Widget; import de.uni_luebeck.inb.krabbenhoeft.eQTL.api.gwt.DataProcessing; import de.uni_luebeck.inb.krabbenhoeft.eQTL.api.gwt.DataProcessingAsync; import de.uni_luebeck.inb.krabbenhoeft.eQTL.api.gwt.DataSetLayerOverview; import de.uni_luebeck.inb.krabbenhoeft.eQTL.api.gwt.DataSetProcessorOverview; public class LayerFilteringView extends CompositeWithChangeEvents implements HasSelectionHandlers<DataSetLayerOverview> { interface LayerFilteringViewUiBinder extends UiBinder<Widget, LayerFilteringView> { } private static LayerFilteringViewUiBinder uiBinder = GWT.create(LayerFilteringViewUiBinder.class); private final DataProcessingAsync dataProcessingService = GWT.create(DataProcessing.class); @UiField FlowPanel filterButtonList; private Integer dataSetKey; private Integer dataSetLayerKey; public LayerFilteringView(Integer indataSetKey, Integer indataSetLayerKey) { this.dataSetKey = indataSetKey; this.dataSetLayerKey = indataSetLayerKey; initWidget(uiBinder.createAndBindUi(this)); new AutoRetry<DataSetProcessorOverview[]>() { public void success(DataSetProcessorOverview[] result) { fillProcessorPanel(result); } public void invoke(AsyncCallback<DataSetProcessorOverview[]> callback) { dataProcessingService.enumerateProcessors(dataSetLayerKey, callback); } }.run(); } protected void fillProcessorPanel(DataSetProcessorOverview[] result) { for (final DataSetProcessorOverview processor : result) { filterButtonList.add(new Button(processor.name, new ClickHandler() { public void onClick(ClickEvent event) { clickProcessor(processor); } })); } } public HandlerRegistration addSelectionHandler(SelectionHandler<DataSetLayerOverview> handler) { return addSelectionHandlerImpl(handler); } private void clickProcessor(final DataSetProcessorOverview processor) { if (processor.key.equals("de.uni_luebeck.inb.krabbenhoeft.eQTL.server.processors.FilterByCategory")) { final PopupPanel popup = new PopupPanel(); popup.setGlassEnabled(true); final FilterByCategoryPopup fbc = new FilterByCategoryPopup(processor.parameterDescription); fbc.addSelectionHandler(new SelectionHandler<String>() { public void onSelection(SelectionEvent<String> event) { popup.hide(); applyProcessor(processor.key, event.getSelectedItem()); } }); popup.add(fbc); popup.show(); } else applyProcessor(processor.key, ""); } private void applyProcessor(final String key, final String param) { new AutoRetry<DataSetLayerOverview>() { public void success(DataSetLayerOverview result) { SelectionEvent.fire(LayerFilteringView.this, result); } public void invoke(AsyncCallback<DataSetLayerOverview> callback) { dataProcessingService.applyProcessor(dataSetKey, dataSetLayerKey, key, param, callback); } }.run(); } }