/** Invoked when an action occurs. */
  public void actionPerformed(final ActionEvent e) {
    final ReportRenderContext activeContext = getActiveContext();
    if (activeContext == null) {
      return;
    }

    final Object[] selectedElements = activeContext.getSelectionModel().getSelectedElements();
    final AbstractReportDefinition report = activeContext.getReportDefinition();

    final ArrayList<UndoEntry> undos = new ArrayList<UndoEntry>();
    if (collectChange(selectedElements, report, undos) == false) {
      // rollback ..
      for (int i = undos.size() - 1; i >= 0; i--) {
        final UndoEntry undoEntry = undos.get(i);
        undoEntry.undo(activeContext);
      }
    } else {
      final UndoEntry[] undoEntries = undos.toArray(new UndoEntry[undos.size()]);
      activeContext
          .getUndo()
          .addChange(
              ActionMessages.getString("AbstractLayerAction.UndoName"),
              new CompoundUndoEntry(undoEntries));
    }
    // re-select the elements (moving them causes them to be unselected)
    activeContext.getSelectionModel().setSelectedElements(selectedElements);
  }