Package com.intellij.openapi.graph.builder.actions

Source Code of com.intellij.openapi.graph.builder.actions.DeleteSelectionAction

/*
* Copyright 2000-2006 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/

/*
* Created by IntelliJ IDEA.
* User: Sergey.Vasiliev
* Date: Oct 2, 2006
* Time: 5:28:50 PM
*/
package com.intellij.openapi.graph.builder.actions;

import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.graph.base.Edge;
import com.intellij.openapi.graph.base.EdgeCursor;
import com.intellij.openapi.graph.base.Node;
import com.intellij.openapi.graph.base.NodeCursor;
import com.intellij.openapi.graph.builder.DeleteProvider;
import com.intellij.openapi.graph.builder.GraphBuilder;
import com.intellij.openapi.graph.builder.GraphBundle;
import com.intellij.openapi.graph.view.Graph2D;
import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.openapi.ui.Messages;
import com.intellij.util.Icons;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.util.ArrayList;
import java.util.List;

public class DeleteSelectionAction extends AbstractGraphAction {

  protected void actionPerformed(final AnActionEvent e, final Graph2D graph) {
    final DeleteProvider deleteProvider = getDeleteProvider(e);
    final GraphBuilder graphBuilder = getGraphBuilder(e);

    if (deleteProvider == null || graphBuilder == null) return;

    final List<Node> nodesToBeDeleted = getNodesToBeDeleted(graph, graphBuilder, deleteProvider);
    final List<Edge> edgesToBeDeleted = getEdgesToBeDeleted(graph, graphBuilder, deleteProvider);

    if (nodesToBeDeleted.size() > 0 || edgesToBeDeleted.size() > 0) {
      final String messageText = GraphBundle.message("graph.delete.message") + "?";
      final String messageCaption = GraphBundle.message("graph.delete.message.caption");
      if (DialogWrapper.OK_EXIT_CODE ==
          Messages.showOkCancelDialog(messageText, messageCaption, Messages.getQuestionIcon())) {

        for (Node node : nodesToBeDeleted) {
          final Object nodeObject = graphBuilder.getNodeObject(node);

          if (nodeObject != null) deleteProvider.deleteNode(nodeObject);
        }
        for (Edge edge : edgesToBeDeleted) {
          final Object edgeObject = graphBuilder.getEdgeObject(edge);

          if (edgeObject != null) deleteProvider.deleteEdge(edgeObject);
        }
      }

      graphBuilder.updateGraph();
    }
  }

  protected void update(final AnActionEvent e, final Graph2D graph) {
    final DeleteProvider deleteProvider = getDeleteProvider(e);
    final GraphBuilder graphBuilder = getGraphBuilder(e);

    boolean enabled = false;
    if (deleteProvider == null || graphBuilder == null) {
      e.getPresentation().setVisible(false);
    }
    else {
      final List<Node> toBeDeleted = getNodesToBeDeleted(graph, graphBuilder, deleteProvider);
      final List<Edge> edgesToBeDeleted = getEdgesToBeDeleted(graph, graphBuilder, deleteProvider);

      enabled = toBeDeleted.size() > 0 || edgesToBeDeleted.size() > 0;
    }
    e.getPresentation().setEnabled(enabled);
    e.getPresentation().setText(GraphBundle.message("graph.delete.message"));
    e.getPresentation().setIcon(Icons.DELETE_ICON);
  }

  private static List<Node> getNodesToBeDeleted(final Graph2D graph,
                                                @NotNull final GraphBuilder graphBuilder,
                                                @NotNull final DeleteProvider deleteProvider) {
    List<Node> toBeDeleted = new ArrayList<Node>();

    for (NodeCursor nc = graph.selectedNodes(); nc.ok(); nc.next()) {
      final Node node = nc.node();
      final Object nodeObject = graphBuilder.getNodeObject(node);

      if (nodeObject != null && deleteProvider.canDeleteNode(nodeObject)) {
        toBeDeleted.add(node);
      }
    }

    return toBeDeleted;
  }

  private static List<Edge> getEdgesToBeDeleted(final Graph2D graph, final GraphBuilder graphBuilder, final DeleteProvider deleteProvider) {
    List<Edge> toBeDeleted = new ArrayList<Edge>();


    for (EdgeCursor edgeCursor = graph.selectedEdges(); edgeCursor.ok(); edgeCursor.next()) {
      final Edge edge = edgeCursor.edge();
      final Object edgeObject = graphBuilder.getEdgeObject(edge);
      if (edgeObject != null && deleteProvider.canDeleteEdge(edgeObject)) {
        toBeDeleted.add(edge);
      }

    }

    return toBeDeleted;
  }

  @Nullable
  private static DeleteProvider getDeleteProvider(final AnActionEvent e) {
    return (DeleteProvider)e.getDataContext().getData(DeleteProvider.GRAPH_DELETE_PROVIDER_KEY);
  }

  @Nullable
  private static GraphBuilder getGraphBuilder(final AnActionEvent e) {
    return (GraphBuilder)e.getDataContext().getData(GraphBuilder.GRAPH_BUILDER_KEY);
  }
}
TOP

Related Classes of com.intellij.openapi.graph.builder.actions.DeleteSelectionAction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.