public IStatus execute(final IProgressMonitor monitor, IAdaptable info)
      throws ExecutionException {
    Display display = (Display) info.getAdapter(Display.class);

    // set map extent
    try {
      monitor.subTask(Messages.get("OpenMapOperation_calcLayersBounds"));

      if (map.getLayers().isEmpty()) {
        display.asyncExec(
            new Runnable() {
              public void run() {
                MessageBox box = new MessageBox(page.getWorkbenchWindow().getShell());
                box.setText(Messages.get("OpenMapOperation_noLayersText"));
                box.setMessage(Messages.get("OpenMapOperation_noLayersMsg"));
                box.open();
              }
            });
        return Status.CANCEL_STATUS;
      }

      final ReferencedEnvelope bbox =
          map.getMaxExtent() == null
              ? calcLayersBounds(map.getLayers(), map.getCRS(), monitor)
              : map.getMaxExtent();

      if (map.getMaxExtent() == null && bbox != null) {
        log.info("### No map max extent -> using calculated values: " + bbox);
        map.setMaxExtent(bbox);
      }
      if (bbox == null && !map.getLayers().isEmpty()) {
        display.syncExec(
            new Runnable() {
              public void run() {
                MessageBox box = new MessageBox(page.getWorkbenchWindow().getShell());
                box.setText(Messages.get("OpenMapOperation_bboxErrorText"));
                box.setMessage(Messages.get("OpenMapOperation_bboxErrorMsg"));
                box.open();
              }
            });
      } else {
        map.setVisible(true);
      }
      return Status.OK_STATUS;
    } catch (Exception e) {
      throw new ExecutionException(e.getLocalizedMessage(), e);
    }
  }