/** * Converts an Obvious network to an infovis graph. * @param network network to convert * @return the converted infovis network */ private infovis.Graph convertToIvtkGraph(Network network) { if (network.getEdges().size() != 0 && network.getNodes().size() != 0) { Schema nodeSchema = network.getNodeTable().getSchema().getDataSchema(); Schema edgeSchema = network.getEdgeTable().getSchema().getDataSchema(); Network ivtkNetwork = new IvtkObviousNetwork(nodeSchema, edgeSchema); ObviousLib.fillNetwork(network, ivtkNetwork); NetworkListener listnr = new ObviousLinkNetworkListener(network); NetworkListener listnr2 = new ObviousLinkNetworkListener(ivtkNetwork); ivtkNetwork.addNetworkListener(listnr); network.addNetworkListener(listnr2); return (infovis.Graph) ivtkNetwork.getUnderlyingImpl(infovis.Graph.class); } else { throw new ObviousRuntimeException("Empty graph!"); } }
@Override public boolean isDirected() { return network.getEdgeType(getObviousEdge()).equals( obvious.data.Graph.EdgeType.DIRECTED); }
/** * Constructor. * @param inNetwork obvious network to wrap */ public WrapToPrefGraph(Network inNetwork) { super(new WrapToPrefTable(inNetwork.getNodeTable()), new WrapToPrefTable(inNetwork.getEdgeTable()), true); this.network = inNetwork; if (network.getNodes().size() != 0) { this.nodeSchema = network.getNodes().iterator().next().getSchema(); } if (network.getEdges().size() != 0) { this.edgeSchema = network.getEdges().iterator().next().getSchema(); } m_nodeTuples = new TupleManager(getNodeTable(), this, Table.class); m_edgeTuples = new TupleManager(getEdgeTable(), this, Table.class); }
try { int edgeCount = 0; for (Edge edge : network.getEdges()) { writer.append("\n\t\t"); serializer.writeStartElement(nameSpace, "edge"); serializer.writeAttribute(nameSpace, "id", "edge" + edgeCount); Node source = null, target = null; if (network.getEdgeType(edge).equals(Graph.EdgeType.DIRECTED)) { source = network.getSource(edge); target = network.getTarget(edge); } else { if (network.getIncidentNodes(edge).size() > 2) { throw new ObviousxException("Hyperedge aren't supported" + "by the exporter!"); } else { Iterator<Node> it = network.getIncidentNodes(edge).iterator(); source = it.next(); target = it.next();
/** * Create a node CSV file and an edge CSV file from the obvious network. * @throws ObviousxException when file creation failed */ public void createFile() throws ObviousxException { Table nodeTable = new TableImpl(nodeSchema); Table edgeTable = new TableImpl(edgeSchema); for (Node node : network.getNodes()) { nodeTable.addRow(node); } for (Edge edge : network.getEdges()) { edgeTable.addRow(edge); } CSVExport nodeExport = new CSVExport(nodeName, nodeTable); CSVExport edgeExport = new CSVExport(edgeName, edgeTable); nodeExport.createFile(); edgeExport.createFile(); }
/** * Loads the table with the data of external CSV files. * @return an obvious network * @throws ObviousxException when exception occurs */ public Network loadGraph() throws ObviousxException { CSVTableImport nodeImport = new CSVTableImport(nodeFile, new TableImpl(nodeSchema), separator); CSVTableImport edgeImport = new CSVTableImport(edgeFile, new TableImpl(edgeSchema), separator); Table nodeTable = nodeImport.loadTable(); Table edgeTable = edgeImport.loadTable(); for (int i = 0; i < nodeTable.getRowCount(); i++) { Node node = new NodeImpl(nodeTable, i); network.addNode(node); if (nodeId == null) { idToNode.put(node.getRow(), node); } else { idToNode.put(node.get(nodeId), node); } } for (int i = 0; i < edgeTable.getRowCount(); i++) { Edge edge = new EdgeImpl(edgeTable, i); network.addEdge(edge, idToNode.get(edge.get(sourceCol)), idToNode.get(edge.get(targetCol)), network.getEdgeType(edge)); } return this.network; }
@Override public int getNodeCount() { if (network == null) { return 0; } return network.getNodes().size(); }
@Override public int getDegree() { return network.getEdges().size(); }
/** * Gets the corresponding ivtk graph. * @return corresponding ivtk graph */ public infovis.Graph getIvtkGraph() { if (((Network) getData()).getUnderlyingImpl(infovis.Graph.class) != null) { return (infovis.Graph) ((Network) getData()).getUnderlyingImpl(infovis.Graph.class); } else { return convertToIvtkGraph((Network) this.getData()); } }
Node source = getNode(edge.get(sourceCol)); Node target = getNode(edge.get(targetCol)); network.addEdge(edge, source, target, edgeType.get(edge));
@Override public Table getEdgeTable() { if (network == null) { return new Table(); } return new WrapToPrefTable(network.getEdgeTable()); }
@Override public Table getNodeTable() { if (network == null) { return new Table(); } return new WrapToPrefTable(network.getNodeTable()); }
@Override public Node addNode() { Object[] values = new Object[nodeSchema.getColumnCount()]; for (int i = 0; i < nodeSchema.getColumnCount(); i++) { values[i] = nodeSchema.getColumnDefault(i); } NodeImpl node = new NodeImpl(nodeSchema, values); network.addNode(node); return new WrapToPrefNode(network, node, getNodeCount()); }
@SuppressWarnings("unchecked") @Override public Iterator nodes() { Collection<obvious.data.Node> obvNodes = network.getNodes(); ArrayList<Node> prefNodes = new ArrayList<Node>(); for (obvious.data.Node node : obvNodes) { prefNodes.add(new WrapToPrefNode(network, (TupleImpl) node, node.getRow())); } return prefNodes.iterator(); }
@Override public int getEdgeCount() { return network.getEdges().size(); }
@Override protected prefuse.data.Graph getPrefuseNetwork() { if (((Network) this.getData()).getUnderlyingImpl(prefuse.data.Graph.class) != null) { return (prefuse.data.Graph) ((Network) getData()).getUnderlyingImpl(prefuse.data.Graph.class); } else { return new WrapToPrefGraph((Network) getData()); } }
@Override public int getTargetNode(int edge) { return network.getTarget(getObviousEdge(edge)).getRow(); }