// GraphTea Project: http://github.com/graphtheorysoftware/GraphTea // Copyright (C) 2012 Graph Theory Software Foundation: http://GraphTheorySoftware.com // Copyright (C) 2008 Mathematical Science Department of Sharif University of Technology // Distributed under the terms of the GNU General Public License (GPL): http://www.gnu.org/licenses/ package graphtea.plugins.main.select; import graphtea.graph.atributeset.GraphAttrSet; import graphtea.graph.graph.Edge; import graphtea.graph.graph.GraphModel; import graphtea.graph.graph.SubGraph; import graphtea.graph.graph.Vertex; import graphtea.platform.core.BlackBoard; import graphtea.platform.plugin.PluginMethods; import java.util.Arrays; import java.util.Collection; import java.util.HashSet; import java.util.Vector; /** * @author azin azadi */ public class SelectPluginMethods implements PluginMethods { private BlackBoard b; public SelectPluginMethods(BlackBoard b) { this.b = b; } /** * @return returns the selected Vertices ans Edges of the graph */ public SubGraph getSelected() { return b.getData(Select.EVENT_KEY); } public void setSelected(SubGraph sd) { b.setData(Select.EVENT_KEY, sd); } public void setSelected(Collection<Vertex> selectedVertices, Collection<Edge> selectedEdges) { SubGraph sd = new SubGraph(); sd.vertices = new HashSet<>(selectedVertices); sd.edges = new HashSet<>(selectedEdges); b.setData(Select.EVENT_KEY, sd); } public void setSelected(Vertex[] selectedVertices, Edge[] selectedEdges) { SubGraph sd = new SubGraph(); sd.vertices = new HashSet<>(Arrays.asList(selectedVertices)); sd.edges = new HashSet<>(Arrays.asList(selectedEdges)); b.setData(Select.EVENT_KEY, sd); } public HashSet<Vertex> getSelectedVertices() { SubGraph selected = getSelected(); if (selected == null) return new HashSet<>(); return selected.vertices; } public void setSelectedVertices(Collection<Vertex> selectedVertices) { SubGraph sd = new SubGraph(); sd.vertices = new HashSet<>(selectedVertices); b.setData(Select.EVENT_KEY, sd); } public HashSet<Edge> getSelectedEdges() { return getSelected().edges; } public void setSelectedEdges(Collection<Edge> selectedEdges) { SubGraph sd = new SubGraph(); sd.edges = new HashSet<>(selectedEdges); b.setData(Select.EVENT_KEY, sd); } public boolean isSelectionEmpty() { return getSelectedEdges().size() == 0 && getSelectedVertices().size() == 0; } public void clearSelection() { setSelected(new SubGraph()); } //selection modification methods // private void shrinkSelection() { // SubGraph selection = getSelected(); // Vector<Vertex> toSelect = new Vector<Vertex>(); // // for (Vertex v : selection.vertices) { // if (selection.getNeighbors(v).size() > 1) // toSelect.add(v); // } // setSelectedVertices(toSelect); // // } /** * adds any vertex in graph which is adjacent to at list one vertex in selected vertices */ public void expandSelection() { GraphModel g = b.getData(GraphAttrSet.name); HashSet<Vertex> sV = getSelectedVertices(); Vector<Vertex> toSelect = new Vector<>(); for (Vertex v : sV) { for (Vertex nv : g.getNeighbors(v)) toSelect.add(nv); } toSelect.addAll(sV); setSelectedVertices(toSelect); } }