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.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.uibinder.client.UiHandler;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.DockLayoutPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.LayoutPanel;
import com.google.gwt.user.client.ui.RequiresResize;
import com.google.gwt.user.client.ui.Widget;
import de.uni_luebeck.inb.krabbenhoeft.eQTL.api.gwt.DataRetrieval;
import de.uni_luebeck.inb.krabbenhoeft.eQTL.api.gwt.DataRetrievalAsync;
import de.uni_luebeck.inb.krabbenhoeft.eQTL.api.gwt.DataSetLayerOverview;
public class LayerRowsContainer extends CompositeWithChangeEvents implements HasSelectionHandlers<DataSetLayerOverview>, RequiresResize {
interface LayerRowsContainerUiBinder extends UiBinder<Widget, LayerRowsContainer> {
}
private static LayerRowsContainerUiBinder uiBinder = GWT.create(LayerRowsContainerUiBinder.class);
private final DataRetrievalAsync dataRetrievalService = GWT.create(DataRetrieval.class);
private final MyMessages myMessages = (MyMessages) GWT.create(MyMessages.class);
private DataSetLayerOverview dataSetLayerOverview;
public LayerRowsContainer(DataSetLayerOverview dataSetLayerOverview) {
this.dataSetLayerOverview = dataSetLayerOverview;
initWidget(uiBinder.createAndBindUi(this));
if (this.dataSetLayerOverview.numberOfDataRows == -1) {
tabContents.add(new Label(myMessages.waitingForCalculationToComplete()));
new AutoRetry<DataSetLayerOverview>() {
public void success(DataSetLayerOverview result) {
LayerRowsContainer.this.dataSetLayerOverview = result;
enable();
}
public void invoke(AsyncCallback<DataSetLayerOverview> callback) {
final DataSetLayerOverview lo = LayerRowsContainer.this.dataSetLayerOverview;
dataRetrievalService.getLayerAfterCalculationCompletes(lo.dataSetKey, lo.layerKey, callback);
}
}.run(0); // refresh as fast as possible, this also hides msg
} else
enable();
}
private boolean enabled = false;
private void enable() {
if (enabled)
return;
enabled = true;
tabRow.selectTab(tableTab);
onClickTable(null);
}
@UiField
DockLayoutPanel layout;
@UiField
LayoutPanel tabContents;
@UiField
TabButtonRow tabRow;
@UiField
TabButton tableTab;
@UiHandler("tableTab")
public void onClickTable(ClickEvent event) {
if (!enabled)
return;
tabContents.clear();
tabContents.add(new LayerTableView(dataSetLayerOverview));
}
@UiHandler("gaugeTab")
public void onClickGauge(ClickEvent event) {
if (!enabled)
return;
tabContents.clear();
tabContents.add(new LayerGaugeView(dataSetLayerOverview));
}
@UiHandler("mapTab")
public void onClickMap(ClickEvent event) {
if (!enabled)
return;
tabContents.clear();
tabContents.add(new LayerMapView(dataSetLayerOverview));
}
@UiHandler("filteringTab")
public void onClickFiltering(ClickEvent event) {
if (!enabled)
return;
tabContents.clear();
final LayerFilteringView layerFilteringView = new LayerFilteringView(dataSetLayerOverview.dataSetKey, dataSetLayerOverview.layerKey);
layerFilteringView.addSelectionHandler(new SelectionHandler<DataSetLayerOverview>() {
public void onSelection(SelectionEvent<DataSetLayerOverview> event) {
SelectionEvent.fire(LayerRowsContainer.this, event.getSelectedItem());
}
});
tabContents.add(layerFilteringView);
}
@UiHandler("rTab")
public void onClickR(ClickEvent event) {
if (!enabled)
return;
tabContents.clear();
tabContents.add(new LayerRView(dataSetLayerOverview));
}
public HandlerRegistration addSelectionHandler(SelectionHandler<DataSetLayerOverview> handler) {
return addSelectionHandlerImpl(handler);
}
public void onResize() {
layout.onResize();
}
}