/**
   * Initialise apply settings.
   *
   * @param currentGeographicalArea the current geographical area
   * @param currentMapAreaSelectionBasket the current map area selection basket
   */
  public void initialiseApplySettings(
      Geography geography,
      AbstractGeographicalArea currentGeographicalArea,
      MapAreaSelectionBasket currentMapAreaSelectionBasket) {

    this.currentGeography = geography;
    this.currentGeographicalArea = currentGeographicalArea;
    this.currentMapAreaSelectionBasket = currentMapAreaSelectionBasket;
    mapAreaSelectionTableView.initialiseForm(
        currentGeographicalArea, currentMapAreaSelectionBasket);
    mapAreaSelectionTableView.showFirstResultPage();

    viewPanel.removeAll();
    viewPanel.add(mapAreaSelectionTableView.getPanel(), BorderLayout.CENTER);
    viewPanel.updateUI();

    // update the map display area
    GeoLevelSelect geoLevelSelect = currentGeographicalArea.getGeoLevelSelect();
    GeoLevelView geoLevelView = currentGeographicalArea.getGeoLevelView();
    GeoLevelArea geoLevelArea = currentGeographicalArea.getGeoLevelArea();

    // remove any observers for the current basket.  We want to clear
    // it without triggering updates elsewhere in the UI
    currentMapAreaSelectionBasket.deleteObservers();
    currentMapAreaSelectionBasket.addObserver(this);

    /*
    ArrayList<MapArea> mapAreas = currentMapAreaSelectionBasket.getMapAreas();
    try {
    	RIFStudySubmissionAPI service
    		= rifSession.getRIFStudySubmissionService();
    	User currentUser = rifSession.getUser();
    	BufferedImage bufferedImage
    		= service.getImage(
    			currentUser,
    			geography,
    			geoLevelSelect,
    			geoLevelArea,
    			geoLevelView,
    			mapAreas);
    	mapImagePanel.setData(bufferedImage);
    	mapImagePanel.repaint();
    }
    catch(RIFServiceException rifServiceException) {
    	ErrorDialog.showError(parentDialog, rifServiceException);
    }
    */

    // update the status panel

    updateBasketStatusPanel();

    // add the basket observers back in
    buildUI();
  }
  /** Update basket status panel. */
  private void updateBasketStatusPanel() {

    try {
      RIFStudySubmissionAPI service = rifSession.getRIFStudySubmissionService();
      User currentUser = rifSession.getUser();
      Geography currentGeography = rifSession.getCurrentGeography();
      GeoLevelSelect currentGeoLevelSelect = currentGeographicalArea.getGeoLevelSelect();
      GeoLevelArea currentGeoLevelArea = currentGeographicalArea.getGeoLevelArea();
      GeoLevelToMap currentGeoLevelToMap = currentGeographicalArea.getGeoLevelToMap();

      // Sensitise the control buttons appropriately to reflect
      // whether basket is empty or not
      if (currentMapAreaSelectionBasket.getSize() == 0) {
        String basketIsEmptyMessage =
            RIFJobSubmissionToolMessages.getMessage("mapAreaListSelectionPanel.basketIsEmpty");
        selectedItemsStatusTextArea.setText(basketIsEmptyMessage);

        // basket is empty
        basketControlButtonPanel.indicateEmptyState();
      } else {
        // current geo level select should only be null
        // when the application is first starting.  By this point,
        // GeoLevelSelect will not have been selected
        MapAreaSummaryData mapAreaSummaryData =
            service.getMapAreaSummaryInformation(
                currentUser,
                currentGeography,
                currentGeoLevelSelect,
                currentGeoLevelArea,
                currentGeoLevelToMap,
                currentMapAreaSelectionBasket.getMapAreas());

        // Display information about the areas currently in the basket
        StringBuilder selectedStatusMessage = new StringBuilder();
        String selectedAreasMessage =
            RIFJobSubmissionToolMessages.getMessage(
                "mapAreaListSelectionPanel.basketAreasMessage",
                String.valueOf(mapAreaSummaryData.getTotalViewAreas()),
                String.valueOf(mapAreaSummaryData.getTotalNumberToMapAreas()),
                currentGeoLevelToMap.getDisplayName());
        selectedStatusMessage.append(selectedAreasMessage);
        String totalAreaTotalPopulationMessage =
            RIFJobSubmissionToolMessages.getMessage(
                "mapAreaListSelectionPanel.totalAreaTotalPopulationMessage",
                String.valueOf(mapAreaSummaryData.getTotalPopulation()),
                String.valueOf(mapAreaSummaryData.getTotalArea()));
        selectedStatusMessage.append(totalAreaTotalPopulationMessage);
        selectedItemsStatusTextArea.setText(selectedStatusMessage.toString());

        basketControlButtonPanel.indicatePopulatedState();
      }
    } catch (RIFServiceException rifServiceException) {
      ErrorDialog.showError(parentDialog, rifServiceException.getErrorMessages());
    }
  }
  /**
   * Commit changes.
   *
   * @throws RIFJobSubmissionToolException the RIF job submission tool exception
   */
  public void commitChanges() throws RIFServiceException {

    currentGeographicalArea.setMapAreas(currentMapAreaSelectionBasket.getMapAreas());
  }