private IStatus removeEvent(final Feature featureToRemove, final IProgressMonitor monitor)
      throws CoreException, Exception {
    final String msg =
        String.format(
            Messages.getString("RemoveEventOperation_4"), featureToRemove.getName()); // $NON-NLS-1$
    monitor.beginTask(msg, 100);

    final IRunoffEvent runoffEvent = (IRunoffEvent) featureToRemove.getAdapter(IRunoffEvent.class);
    IStatus removeResult = null;
    if (runoffEvent != null) {
      monitor.subTask(Messages.getString("RemoveEventOperation_5")); // $NON-NLS-1$
      deleteThemes(m_wspThemes, runoffEvent);
      monitor.worked(10);

      /* Delete underlying tin files */
      monitor.subTask(Messages.getString("RemoveEventOperation_6")); // $NON-NLS-1$
      final ICoverageCollection resultCoverages = runoffEvent.getResultCoverages();
      removeResult = FloodModelHelper.removeResultCoverages(m_provider, resultCoverages);
      monitor.worked(60);

      /* Delete event folder */
      monitor.subTask(Messages.getString("RemoveEventOperation_7")); // $NON-NLS-1$
      final IFolder eventFolder = EventManagementWidget.getEventFolder(runoffEvent);
      eventFolder.delete(true, new SubProgressMonitor(monitor, 20));
    }

    /* Delete coverage from collection */
    monitor.subTask(Messages.getString("RemoveEventOperation_8")); // $NON-NLS-1$
    final CommandableWorkspace workspace =
        m_provider.getCommandableWorkSpace(IFloodModel.class.getName());
    final DeleteFeatureCommand command = new DeleteFeatureCommand(featureToRemove);
    workspace.postCommand(command);
    monitor.worked(10);

    // TODO: Probably we need a more sophisticated error handling here
    if (removeResult != null) return removeResult;
    return Status.OK_STATUS;
  }
  private void deleteThemes(final IKalypsoCascadingTheme wspThemes, final IRunoffEvent event) {
    final IKalypsoTheme[] allThemes = wspThemes.getAllThemes();
    for (final IKalypsoTheme kalypsoTheme : allThemes) {
      if (kalypsoTheme instanceof IKalypsoFeatureTheme) {
        final IKalypsoFeatureTheme featureTheme = (IKalypsoFeatureTheme) kalypsoTheme;
        final IKalypsoStyle[] styles = featureTheme.getStyles();
        for (final IKalypsoStyle style : styles) {
          if (style instanceof GisTemplateUserStyle) {
            final GisTemplateUserStyle pooledUserStyle = (GisTemplateUserStyle) style;
            final PoolableObjectType poolKey = pooledUserStyle.getPoolKey();

            final String styleLocationForEventWsp =
                AddEventOperation.styleLocationForEventWsp(event);

            if (poolKey.getLocation().equals(styleLocationForEventWsp)) {
              wspThemes.removeTheme(kalypsoTheme);
              break;
            }
          }
        }
        // check for result coverages
        final FeatureList featureList = featureTheme.getFeatureList();
        if (featureList != null) {
          for (final Object object : featureList) {
            if (object instanceof Feature) {
              final Feature feature = (Feature) object;

              // the papa papa of the coverage is the event
              final Feature parent = feature.getOwner().getOwner();
              if (parent != null) {
                if (parent.getId().equals(event.getId())) {
                  wspThemes.removeTheme(kalypsoTheme);
                }
              }
            }
          }
        }
      }
    }
  }