public boolean execute() { GraphModel graphModel = workspace.getLookup().lookup(GraphModel.class); Graph graph = null; if (exportVisible) { graph = graphModel.getGraphVisible(); } else { graph = graphModel.getGraph(); } try { exportData(graph); } catch (Exception e) { throw new RuntimeException(e); } return !cancel; }
private void executeDynamic(DynamicStatistics statistics, DynamicLongTask dynamicLongTask) { GraphController graphController = Lookup.getDefault().lookup(GraphController.class); GraphModel graphModel = graphController.getGraphModel(); double window = statistics.getWindow(); double tick = statistics.getTick(); GraphView currentView = graphModel.getVisibleView(); Interval bounds = statistics.getBounds(); if (bounds == null) { if (currentView.isMainView()) { bounds = graphModel.getTimeBounds(); } else { bounds = currentView.getTimeInterval(); } statistics.setBounds(bounds); } if (dynamicLongTask != null) { // Count int c = (int) ((bounds.getHigh() - window - bounds.getLow()) / tick); dynamicLongTask.start(c); } // Init statistics.execute(graphModel); // Loop for (double low = bounds.getLow(); low <= bounds.getHigh() - window; low += tick) { double high = low + window; Graph graph = graphModel.getGraphVisible(); graph.writeLock(); GraphView view = graphModel.createView(); Subgraph g = graphModel.getGraph(view); TimeIndex<Node> nodeIndex = graphModel.getNodeTimeIndex(currentView); if (Double.isInfinite(nodeIndex.getMinTimestamp()) && Double.isInfinite(nodeIndex.getMaxTimestamp())) { for (Node node : graph.getNodes()) { g.addNode(node); } } else { for (Node node : nodeIndex.get(new Interval(low, high))) { g.addNode(node); } } TimeIndex<Edge> edgeIndex = graphModel.getEdgeTimeIndex(currentView); if (Double.isInfinite(edgeIndex.getMinTimestamp()) && Double.isInfinite(edgeIndex.getMaxTimestamp())) { for (Edge edge : graph.getEdges()) { if (g.contains(edge.getSource()) && g.contains(edge.getTarget())) { g.addEdge(edge); } } } else { for (Edge edge : edgeIndex.get(new Interval(low, high))) { if (g.contains(edge.getSource()) && g.contains(edge.getTarget())) { g.addEdge(edge); } } } graph.writeUnlock(); statistics.loop(g.getView(), new Interval(low, high)); // Cancelled? if (dynamicLongTask != null && dynamicLongTask.isCancelled()) { return; } else if (dynamicLongTask != null) { dynamicLongTask.progress(); } } statistics.end(); model.addReport(statistics); }