@Override
  public IStatus execute(final IProgressMonitor monitor)
      throws CoreException, InvocationTargetException {
    final SubMonitor progress =
        SubMonitor.convert(
            monitor,
            Messages.getString("org.kalypso.model.flood.ui.map.operations.ImportTinOperation.0"),
            100); //$NON-NLS-1$

    /* Add sources as new tin references */
    progress.subTask(
        Messages.getString(
            "org.kalypso.model.flood.ui.map.operations.ImportTinOperation.1")); //$NON-NLS-1$
    m_tinRefs = new ITinReference[m_sources.length];
    final Feature[] changedFeatures = new Feature[m_sources.length];

    for (int i = 0; i < m_sources.length; i++) {
      final IGmlSource source = m_sources[i];

      final ITinReference tinRef = m_tins.addNew(-1, ITinReference.QNAME, ITinReference.class);
      tinRef.setName(source.getName());
      tinRef.setDescription(source.getDescription());
      tinRef.setSourceLocation(source.getLocation());
      tinRef.setSourceFeaturePath(source.getPath());
      tinRef.setSourceType(typeForSource(source));

      m_tinRefs[i] = tinRef;
      changedFeatures[i] = tinRef;
    }
    ProgressUtilities.worked(progress, 20);

    /* post command for events stuff... */
    final Feature parentFeature = m_tins.getParentFeature();
    final GMLWorkspace workspace = parentFeature.getWorkspace();
    final ModellEvent modelEvent =
        new FeatureStructureChangeModellEvent(
            workspace,
            parentFeature,
            changedFeatures,
            FeatureStructureChangeModellEvent.STRUCTURE_CHANGE_ADD);
    workspace.fireModellEvent(modelEvent);
    /* Save data model */
    // progress.subTask( "speichere Datenmodell" );
    // m_provider.saveModel( IFloodModel.class, progress.newChild( 20 ) );
    /* update tins */
    progress.subTask(
        Messages.getString(
            "org.kalypso.model.flood.ui.map.operations.ImportTinOperation.2")); //$NON-NLS-1$
    final UpdateTinsOperation updateOp = new UpdateTinsOperation(m_tinRefs, m_provider);
    updateOp.execute(progress.newChild(60));

    /* Jump to imported tins */
    final GM_Envelope envelope = FeatureHelper.getEnvelope(changedFeatures);
    final GM_Envelope scaledBox =
        envelope == null ? null : GeometryUtilities.scaleEnvelope(envelope, 1.05);
    if (m_mapPanel != null && scaledBox != null) m_mapPanel.setBoundingBox(scaledBox);

    return Status.OK_STATUS;
  }
 @Override
 public boolean handleResult(final Shell shell, final IStatus resultStatus) {
   if (!resultStatus.isOK()) KalypsoCorePlugin.getDefault().getLog().log(resultStatus);
   ErrorDialog.openError(
       shell,
       Messages.getString("org.kalypso.model.flood.ui.map.operations.ImportTinOperation.6"),
       Messages.getString("org.kalypso.model.flood.ui.map.operations.ImportTinOperation.7"),
       resultStatus); //$NON-NLS-1$ //$NON-NLS-2$
   return resultStatus.isOK();
 }
  @Override
  public IStatus execute(final IProgressMonitor monitor)
      throws CoreException, InvocationTargetException {
    monitor.beginTask(
        Messages.getString("RemoveEventOperation_0"), m_treeSelection.length + 10); // $NON-NLS-1$

    final Collection<IStatus> removeResults = new ArrayList<>();
    try {
      for (final Object element : m_treeSelection) {
        final Feature featureToRemove = (Feature) element;
        monitor.subTask(
            String.format(
                String.format(
                    Messages.getString("RemoveEventOperation_1"),
                    featureToRemove.getName()))); // $NON-NLS-1$

        final IStatus removeResult =
            removeEvent(
                featureToRemove,
                new SubProgressMonitor(
                    monitor, 1, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK));
        if (!removeResult.isOK()) removeResults.add(removeResult);
      }

      /* Save model, as undo is not possible here and the user should not be able to revert the changes */
      monitor.subTask(Messages.getString("RemoveEventOperation_2")); // $NON-NLS-1$
      m_provider.saveModel(IFloodModel.class.getName(), new SubProgressMonitor(monitor, 10));
    } catch (final Exception e) {
      if (e instanceof CoreException) throw (CoreException) e;

      throw new InvocationTargetException(e);
    }

    if (removeResults.size() == 0) return Status.OK_STATUS;

    final IStatus[] children = removeResults.toArray(new IStatus[removeResults.size()]);
    return new MultiStatus(
        KalypsoModelFloodPlugin.PLUGIN_ID,
        0,
        children,
        Messages.getString("RemoveEventOperation_3"),
        null); //$NON-NLS-1$
  }
  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;
  }