/**
   * Calls {@link ManifestUpdater#updateManifest(IProject)} on the current project
   *
   * @param aMonitor Progress monitor
   * @throws CoreException An error occurred during manipulation
   */
  protected void updateManifest(final IProgressMonitor aMonitor) throws CoreException {

    IProgressMonitor monitor = aMonitor;
    if (aMonitor == null) {
      monitor = new NullProgressMonitor();

    } else if (aMonitor.isCanceled()) {
      // Work cancelled
      return;
    }

    // Do the job
    final IStatus result = pManifestUpdater.updateManifest(getProject(), monitor);

    // Store the manipulation time
    getProject()
        .setSessionProperty(PROJECT_LAST_MANIPULATION, Long.valueOf(System.currentTimeMillis()));

    // Log the result
    if (result.isOK()) {
      // No problem : full success
      Activator.logInfo(getProject(), "Manipulation done");

    } else {
      // Errors have already been logged, so just pop a dialog
      StatusManager.getManager().handle(result, StatusManager.SHOW);
    }
  }