/** * Converts an Obvious tree to an infovis tree. * @param tree tree to convert * @return the converted infovis tree */ private infovis.Tree convertToIvtkTree(Tree<Node, Edge> tree) { if (tree.getEdges().size() != 0 && tree.getNodes().size() != 0) { Schema nodeSchema = tree.getNodes().iterator().next().getSchema() .getDataSchema(); Schema edgeSchema = tree.getEdges().iterator().next().getSchema() .getDataSchema(); Tree<Node, Edge> ivtkTree = new IvtkObviousTree(nodeSchema, edgeSchema); ObviousLib.fillTree(tree, ivtkTree); return (infovis.Tree) ivtkTree.getUnderlyingImpl(infovis.Tree.class); } else { throw new ObviousRuntimeException("Empty tree!"); } }
/** * Internal method. * @param tree a Jung tree * @param node an Obvious node */ private void populateNetwork(Tree<Node, Edge> tree, Node node) { if (this.getSuccessors(node) != null || this.getSuccessors(node).size() > 0) { for (Node otherNode : this.getSuccessors(node)) { tree.addNode(otherNode); tree.addEdge(getConnectingEdge(node, otherNode), node, otherNode, EdgeType.DIRECTED); populateNetwork(tree, otherNode); } } }
@Override public Collection<Tree<Node, Edge>> getTrees() { Collection<Tree<Node, Edge>> trees = new ArrayList<Tree<Node, Edge>>(); Collection<Node> rootNodes = new ArrayList<Node>(); for (Node node : getNodes()) { if (getPredecessors(node) == null || getPredecessors(node).size() == 0) { rootNodes.add(node); } } for (Node node : rootNodes) { Tree<Node, Edge> tree = new IvtkObviousTree(nodeSchema, edgeSchema); tree.addNode(node); populateNetwork(tree, node); trees.add(tree); } return trees; }
/** * Gets the corresponding ivtk tree. * @return corresponding ivtk tree */ @SuppressWarnings("unchecked") protected infovis.Tree getIvtkTree() { if (((Tree<Node, Edge>) getData()).getUnderlyingImpl(infovis.Tree.class) != null) { return (infovis.Tree) ((Tree) getData()).getUnderlyingImpl(infovis.Tree.class); } else { return convertToIvtkTree((Tree) this.getData()); } }
/** * Internal method. * @param tree a Jung tree * @param node an Obvious node */ private void populateNetwork(Tree<Node, Edge> tree, Node node) { if (this.getSuccessors(node) != null || this.getSuccessors(node).size() > 0) { for (Node otherNode : this.getSuccessors(node)) { tree.addNode(otherNode); tree.addEdge(getConnectingEdge(node, otherNode), node, otherNode, EdgeType.DIRECTED); populateNetwork(tree, otherNode); } } }
@Override public Collection<Tree<Node, Edge>> getTrees() { Collection<Tree<Node, Edge>> trees = new ArrayList<Tree<Node, Edge>>(); Collection<Node> rootNodes = new ArrayList<Node>(); for (Node node : getNodes()) { if (getPredecessors(node) == null || getPredecessors(node).size() == 0) { rootNodes.add(node); } } for (Node node : rootNodes) { Tree<Node, Edge> tree = new PrefuseObviousTree(nodeSchema, edgeSchema, nodeId, source, target); tree.addNode(node); populateNetwork(tree, node); trees.add(tree); } return trees; }