package uk.ac.rhul.cs.cl1.ui.cytoscape3; import java.util.Collection; import java.util.HashSet; import java.util.List; import org.cytoscape.model.CyEdge; import org.cytoscape.model.CyEdge.Type; import org.cytoscape.model.CyIdentifiable; import org.cytoscape.model.CyNetwork; import org.cytoscape.model.CyNode; import org.cytoscape.model.CyRow; import org.cytoscape.model.CyTable; import org.cytoscape.model.CyTableUtil; /** * Static-only class for CyNetwork-related utility functions. * * @author ntamas */ public class CyNetworkUtil { // -------------------------------------------------------------------- // Properties // -------------------------------------------------------------------- // -------------------------------------------------------------------- // Query methods // -------------------------------------------------------------------- /** * Returns the set of edges connecting a given set of nodes. */ public static Collection<CyEdge> getConnectingEdges(CyNetwork network, Collection<? extends CyNode> nodes) { HashSet<CyNode> nodeSet = new HashSet<CyNode>(nodes); HashSet<CyEdge> resultSet = new HashSet<CyEdge>(); for (CyNode node: nodes) { for (CyEdge edge: network.getAdjacentEdgeIterable(node, Type.ANY)) { if (nodeSet.contains(edge.getSource()) && nodeSet.contains(edge.getTarget())) { resultSet.add(edge); } } } return resultSet; } /** * Returns the selected edges from the given network. */ public static List<CyEdge> getSelectedEdges(CyNetwork network) { return CyTableUtil.getEdgesInState(network, CyNetwork.SELECTED, true); } /** * Returns the selected nodes from the given network. */ public static List<CyNode> getSelectedNodes(CyNetwork network) { return CyTableUtil.getNodesInState(network, CyNetwork.SELECTED, true); } // -------------------------------------------------------------------- // Manipulation methods // -------------------------------------------------------------------- /** * Sets the "selected" state of the given nodes or edges to the given value. */ public static void setSelectedState(CyNetwork network, Collection<? extends CyIdentifiable> nodesOrEdges, boolean value) { for (CyIdentifiable foo: nodesOrEdges) { network.getRow(foo).set(CyNetwork.SELECTED, value); } } /** * Unselects all edges in the given CyNetwork. */ public static void unselectAllEdges(CyNetwork network) { CyTable edgeTable = network.getDefaultEdgeTable(); for (CyRow row: edgeTable.getMatchingRows(CyNetwork.SELECTED, true)) { row.set(CyNetwork.SELECTED, false); } } /** * Unselects all nodes in the given CyNetwork. */ public static void unselectAllNodes(CyNetwork network) { CyTable nodeTable = network.getDefaultNodeTable(); for (CyRow row: nodeTable.getMatchingRows(CyNetwork.SELECTED, true)) { row.set(CyNetwork.SELECTED, false); } } // -------------------------------------------------------------------- // Private methods // -------------------------------------------------------------------- }