private Panel getBasicInfoPanel(final Reservoir reservoir) { FlowPanel panel = new FlowPanel(); panel.add(new HTMLPanel("<h3>Reservoir " + reservoir.getName() + "</h3>")); table = new FlexTable(); table.setHTML(1, 0, "Area (Million Sq. Feet): " + reservoir.getArea()); setBottomElevation("Bottom Elevation (Feet): " + reservoir.getBottomElevation()); bottomElevationButton = new Button("Recalculate Bottom Elevation"); table.setWidget(2, 2, bottomElevationButton); bottomElevationButton.addClickHandler( new ClickHandler() { public void onClick(ClickEvent event) { final DEMDataServiceAsync service = GWT.create(DEMDataService.class); List<double[]> latLngPoints = reservoir.getLatLngPoints(); List<DataPoint> points = new ArrayList<DataPoint>(); for (int i = 0; i < latLngPoints.size(); i++) { DataPoint p = new DataPoint(); double[] ll = latLngPoints.get(i); double[] utm = GeomUtils.convertToUTM(ll[0], ll[1]); p.x = utm[0]; p.y = utm[1]; points.add(p); } service.startCalculationOfAverageElevationInArea( points, new AsyncCallback<CalculationState>() { private Timer timer; private CalculationState state; public void onSuccess(CalculationState result) { state = result; timer = new Timer() { @Override public void run() { if (state.numberOfTasks == state.numberOfCompletedTasks) { timer.cancel(); reservoir.setBottomElevation(state.latestValue); setBottomElevation( "Bottom Elevation (Feet): " + reservoir.getBottomElevation()); } else { service.checkStatus( state, new AsyncCallback<CalculationState>() { public void onFailure(Throwable caught) { timer.cancel(); } public void onSuccess(CalculationState result) { state = result; setBottomElevation( "Calculation in progress " + (state.numberOfCompletedTasks / state.numberOfTasks * 100) + "% complete"); timer.schedule(2000); } }); } } }; timer.schedule(2000); } public void onFailure(Throwable caught) { timer = null; } }); } }); panel.add(table); FlexTable connectionTable = new FlexTable(); connectionTable.setStyleName("bordered-title"); connectionTable.setWidth("100%"); connectionTable.setHTML(0, 0, "<b>NODE</b>"); connectionTable.setHTML(0, 1, "<b>COEFF IN</b>"); connectionTable.setHTML(0, 2, "<b>COEFF OUT</b>"); connectionTable.getRowFormatter().setStyleName(0, "table-header"); List<ReservoirConnection> reservoirConnections = reservoir.getReservoirConnections(); int index = 1; for (ReservoirConnection reservoirConnection : reservoirConnections) { connectionTable.setHTML(index, 0, reservoirConnection.nodeId); connectionTable.setHTML(index, 1, "" + reservoirConnection.coefficientIn); connectionTable.setHTML(index, 2, "" + reservoirConnection.coefficientOut); index++; } panel.add(connectionTable); return panel; }