@Override
public void execute() {
//Note that a function to inverse selection directly in the table with DataTablesController
//would be more efficient than calculating it here, but this example demonstrates some table selection features.
DataTablesController dtc = Lookup.getDefault().lookup(DataTablesController.class);
Graph graph = Lookup.getDefault().lookup(GraphController.class).getModel().getGraph();
if (dtc.isNodeTableMode()) {
//Get currently selected nodes and calculate inverse set.
Node[] selected = dtc.getNodeTableSelection();
ArrayList<Node> nodes = new ArrayList<Node>();
nodes.addAll(Arrays.asList(graph.getNodes().toArray()));
for (Node node : selected) {
nodes.remove(node);
}
dtc.setNodeTableSelection(nodes.toArray(new Node[0]));
} else if (dtc.isEdgeTableMode()) {
//Get currently selected edges and calculate inverse set.
Edge[] selected = dtc.getEdgeTableSelection();
ArrayList<Edge> edges = new ArrayList<Edge>();
edges.addAll(Arrays.asList(graph.getEdges().toArray()));
for (Edge edge : selected) {
edges.remove(edge);
}
dtc.setEdgeTableSelection(edges.toArray(new Edge[0]));
}
}