use of org.gephi.graph.api.Edge in project gephi by gephi.
the class ConnectedComponentsNGTest method testSpecial2UndirectedGraphConnectedComponents.
@Test
public void testSpecial2UndirectedGraphConnectedComponents() {
GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel();
UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph();
Node node1 = graphModel.factory().newNode("0");
Node node2 = graphModel.factory().newNode("1");
Node node3 = graphModel.factory().newNode("2");
Node node4 = graphModel.factory().newNode("3");
Node node5 = graphModel.factory().newNode("4");
Node node6 = graphModel.factory().newNode("5");
Node node7 = graphModel.factory().newNode("6");
Node node8 = graphModel.factory().newNode("7");
Node node9 = graphModel.factory().newNode("8");
undirectedGraph.addNode(node1);
undirectedGraph.addNode(node2);
undirectedGraph.addNode(node3);
undirectedGraph.addNode(node4);
undirectedGraph.addNode(node5);
undirectedGraph.addNode(node6);
undirectedGraph.addNode(node7);
undirectedGraph.addNode(node8);
undirectedGraph.addNode(node9);
Edge edge12 = graphModel.factory().newEdge(node1, node2, false);
Edge edge23 = graphModel.factory().newEdge(node2, node3, false);
Edge edge45 = graphModel.factory().newEdge(node4, node5, false);
Edge edge56 = graphModel.factory().newEdge(node5, node6, false);
Edge edge64 = graphModel.factory().newEdge(node6, node4, false);
Edge edge75 = graphModel.factory().newEdge(node7, node5, false);
undirectedGraph.addEdge(edge12);
undirectedGraph.addEdge(edge23);
undirectedGraph.addEdge(edge45);
undirectedGraph.addEdge(edge56);
undirectedGraph.addEdge(edge64);
undirectedGraph.addEdge(edge75);
UndirectedGraph graph = graphModel.getUndirectedGraph();
ConnectedComponents c = new ConnectedComponents();
HashMap<Node, Integer> indices = c.createIndicesMap(graph);
LinkedList<LinkedList<Node>> components = c.computeWeaklyConnectedComponents(graph, indices);
int componentNumber3 = c.getComponentNumber(components, node3);
int componentNumber4 = c.getComponentNumber(components, node4);
int componentNumber7 = c.getComponentNumber(components, node7);
int componentNumber8 = c.getComponentNumber(components, node8);
assertEquals(components.size(), 4);
assertEquals(componentNumber4, componentNumber7);
assertNotEquals(componentNumber3, componentNumber8);
}
use of org.gephi.graph.api.Edge in project gephi by gephi.
the class GraphDistanceNGTest method testConnectedComponentsUndirectedGraphHarmonicCloseness.
@Test
public void testConnectedComponentsUndirectedGraphHarmonicCloseness() {
// expected that values are computed separatly for every connected component
GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel();
UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph();
Node node1 = graphModel.factory().newNode("0");
Node node2 = graphModel.factory().newNode("1");
Node node3 = graphModel.factory().newNode("2");
Node node4 = graphModel.factory().newNode("3");
Node node5 = graphModel.factory().newNode("4");
undirectedGraph.addNode(node1);
undirectedGraph.addNode(node2);
undirectedGraph.addNode(node3);
undirectedGraph.addNode(node4);
undirectedGraph.addNode(node5);
Edge edge12 = graphModel.factory().newEdge(node1, node2, false);
Edge edge23 = graphModel.factory().newEdge(node2, node3, false);
Edge edge45 = graphModel.factory().newEdge(node4, node5, false);
undirectedGraph.addEdge(edge12);
undirectedGraph.addEdge(edge23);
undirectedGraph.addEdge(edge45);
GraphDistance d = new GraphDistance();
d.initializeStartValues();
UndirectedGraph hierarchicalUndirectedGraph = graphModel.getUndirectedGraph();
HashMap<Node, Integer> indicies = d.createIndiciesMap(hierarchicalUndirectedGraph);
HashMap<String, double[]> metricsMap = (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false);
double[] harmonic = metricsMap.get(GraphDistance.HARMONIC_CLOSENESS);
int index1 = indicies.get(node1);
int index4 = indicies.get(node4);
assertEquals(harmonic[index1], (1.0 + 1.0 / 2.0) / 2.0, TOLERANCE);
assertEquals(harmonic[index4], 1.0, TOLERANCE);
}
use of org.gephi.graph.api.Edge in project gephi-plugins-bootcamp by gephi.
the class RemoveSelfLoopsAction method actionPerformed.
@Override
public void actionPerformed(ActionEvent e) {
// Get the current graph model
GraphController gc = Lookup.getDefault().lookup(GraphController.class);
GraphModel graphModel = gc.getGraphModel();
if (graphModel != null) {
// Remove self loops
int removed = 0;
Graph graph = graphModel.getGraph();
graph.writeLock();
for (Edge edge : graph.getEdges().toArray()) {
if (edge.isSelfLoop()) {
graph.removeEdge(edge);
removed++;
}
}
graph.writeUnlock();
// Notification message
NotifyDescriptor d = new NotifyDescriptor.Message(removed + " self-loop have been removed", NotifyDescriptor.INFORMATION_MESSAGE);
DialogDisplayer.getDefault().notify(d);
} else {
// Error message
NotifyDescriptor d = new NotifyDescriptor.Message("No active workspace", NotifyDescriptor.ERROR_MESSAGE);
DialogDisplayer.getDefault().notify(d);
}
}
use of org.gephi.graph.api.Edge in project gephi-plugins-bootcamp by gephi.
the class AddNodesTool method getListeners.
@Override
public ToolEventListener[] getListeners() {
return new ToolEventListener[] { new MouseClickEventListener() {
@Override
public void mouseClick(int[] positionViewport, float[] position3d) {
// Get current graph
GraphController gc = Lookup.getDefault().lookup(GraphController.class);
Graph graph = gc.getGraphModel().getGraph();
GraphFactory factory = gc.getGraphModel().factory();
// Add node
Node node = factory.newNode();
node.setX(position3d[0]);
node.setY(position3d[1]);
node.setSize(10f);
graph.addNode(node);
}
}, new NodeClickEventListener() {
@Override
public void clickNodes(Node[] nodes) {
// Get mouse position
float[] position3d = VizController.getInstance().getGraphIO().getMousePosition3d();
// Get current graph
GraphController gc = Lookup.getDefault().lookup(GraphController.class);
Graph graph = gc.getGraphModel().getGraph();
GraphFactory factory = gc.getGraphModel().factory();
// Add node
Node node = factory.newNode();
node.setX(position3d[0]);
node.setY(position3d[1]);
node.setSize(10f);
graph.addNode(node);
// Add edges with the clicked nodes
for (Node n : nodes) {
Edge edge = factory.newEdge(node, n);
graph.addEdge(edge);
}
}
} };
}
use of org.gephi.graph.api.Edge in project gephi-plugins-bootcamp by gephi.
the class SQLiteDatabaseExporter method execute.
@Override
public boolean execute() {
Connection connection = null;
try {
if (path.getParentFile().exists()) {
// Create connection
SQLiteDriver sQLiteDriver = Lookup.getDefault().lookup(SQLiteDriver.class);
String connectionUrl = SQLUtils.getUrl(sQLiteDriver, path.getAbsolutePath(), 0, "");
connection = sQLiteDriver.getConnection(connectionUrl, "", "");
// Create statement and create nodes and egdes table
Statement statement = connection.createStatement();
// set timeout to 30 sec.
statement.setQueryTimeout(30);
statement.executeUpdate("drop table if exists nodes");
statement.executeUpdate("drop table if exists edges");
statement.executeUpdate("create table nodes (id string, label string)");
statement.executeUpdate("create table edges (source string, target string, weight real)");
// Get the current graph in the defined workspace
GraphController graphController = Lookup.getDefault().lookup(GraphController.class);
GraphModel graphModel = graphController.getGraphModel(workspace);
Graph graph = graphModel.getGraphVisible();
// Count the number of tasks (nodes + edges) and start the progress
int tasks = graph.getNodeCount() + graph.getEdgeCount();
Progress.start(progress, tasks);
// Export nodes. Progress is incremented at each step.
for (Node n : graph.getNodes().toArray()) {
String id = n.getId().toString();
String label = n.getLabel();
statement.executeUpdate("insert into nodes values('" + id + "', '" + label + "')");
if (cancel) {
return false;
}
Progress.progress(progress);
}
// Export edges. Progress is incremented at each step.
for (Edge e : graph.getEdges().toArray()) {
String sourceId = e.getSource().getId().toString();
String targetId = e.getTarget().getId().toString();
String weight = String.valueOf(e.getWeight());
statement.executeUpdate("insert into edges values('" + sourceId + "', '" + targetId + "', '" + weight + "')");
if (cancel) {
return false;
}
Progress.progress(progress);
}
// Finish progress
Progress.finish(progress);
return true;
} else {
throw new FileNotFoundException(path.getAbsolutePath() + " does not exist");
}
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
try {
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
// connection close failed.
System.err.println(e);
}
}
}
Aggregations