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;
  }