netcdf-basic-widgets/src/main/java/org/gcube/portlets/widgets/netcdfbasicwidgets/client/widgets/SamplePanel.java

122 lines
3.7 KiB
Java

package org.gcube.portlets.widgets.netcdfbasicwidgets.client.widgets;
import java.util.ArrayList;
import org.gcube.portlets.widgets.netcdfbasicwidgets.client.event.NetCDFDataEvent;
import org.gcube.portlets.widgets.netcdfbasicwidgets.client.event.NetCDFDataEvent.NetCDFDataEventHandler;
import org.gcube.portlets.widgets.netcdfbasicwidgets.client.event.SampleVariableDataEvent;
import org.gcube.portlets.widgets.netcdfbasicwidgets.client.event.SampleVariableDataEvent.SampleVariableDataEventHandler;
import org.gcube.portlets.widgets.netcdfbasicwidgets.client.model.NetCDFDataModel;
import org.gcube.portlets.widgets.netcdfbasicwidgets.shared.netcdf.VariableData;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.HasVerticalAlignment;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.TextArea;
public class SamplePanel extends SimplePanel implements NetCDFDataEventHandler {
private static final String HEIGHT = "350px";
private static final String WIDTH = "700px";
private NetCDFDataModel netCDFDataModel;
private ListBox variablesBox;
private TextArea sampleData;
private ArrayList<VariableData> variables;
public SamplePanel(NetCDFDataModel netCDFDataModel) {
this.netCDFDataModel = netCDFDataModel;
init();
create();
}
private void init() {
setHeight(HEIGHT);
setWidth(WIDTH);
}
private void create() {
netCDFDataModel.addNetCDFDataEventHandler(this);
// ////////
// Form
FlexTable sampleFlexTable = new FlexTable();
sampleFlexTable.setCellSpacing(2);
// Add a drop box with the list types
variablesBox = new ListBox();
variablesBox.setEnabled(false);
variablesBox.ensureDebugId("samplePanelVariablesBox");
variablesBox.addChangeHandler(new ChangeHandler() {
@Override
public void onChange(ChangeEvent event) {
sampleData.setValue("");
int index = variablesBox.getSelectedIndex();
String value = variablesBox.getValue(index);
retrieveSample(value);
}
});
sampleFlexTable.setHTML(0, 0, "Variable:");
sampleFlexTable.setWidget(0, 1, variablesBox);
sampleData = new TextArea();
//sampleData.setWidth("616px");
sampleData.setHeight("318px");
sampleData.getElement().setPropertyString("resize", "none");
sampleData.getElement().setPropertyString("width", "616px !important");
sampleData.setReadOnly(true);
sampleFlexTable.getFlexCellFormatter().setVerticalAlignment(1, 0, HasVerticalAlignment.ALIGN_TOP);
sampleFlexTable.setHTML(1, 0, "Sample:");
sampleFlexTable.setWidget(1, 1, sampleData);
setWidget(sampleFlexTable);
}
private void retrieveSample(String selectedValue) {
VariableData variableRequested = null;
if (Integer.valueOf(selectedValue) != -1) {
for (VariableData variableData : variables) {
if (variableData.getId() == Integer.valueOf(selectedValue)) {
variableRequested = variableData;
break;
}
}
if (variableRequested != null) {
SampleVariableDataEventHandler handler = new SampleVariableDataEventHandler() {
@Override
public void onSample(SampleVariableDataEvent event) {
sampleData.setValue(event.getSampleValues().getArrayData().asString());
}
};
netCDFDataModel.retrieveSampleOfVariable(handler, variableRequested);
}
}
}
@Override
public void onNetCDFDataReady(NetCDFDataEvent event) {
variables = event.getNetCDFData().getVariables();
variablesBox.clear();
variablesBox.addItem(" ", "-1");
for (VariableData varData : variables) {
variablesBox.addItem(varData.getFullName(), String.valueOf(varData.getId()));
}
variablesBox.setEnabled(true);
}
}