Changeset 2413

Show
Ignore:
Timestamp:
08/18/08 14:02:26 (3 months ago)
Author:
mwlinnem
Message:

Now parses graphs with no nodes or edges correctly. The resulting files will not work with all other converters yet though.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/plugins/converter/edu.iu.nwb.converter.prefusegraphml/src/edu/iu/nwb/converter/prefusegraphml/writer/GraphMLWriter.java

    r2190 r2413  
    7373    public void writeGraph(Graph graph, OutputStream os) throws DataIOException 
    7474    { 
     75        boolean graphHasNodes = graph.nodes().hasNext(); 
     76        boolean graphHasEdges = graph.edges().hasNext(); 
     77         
     78 
    7579        // first, check the schemas to ensure GraphML compatibility 
    76         Schema ns = ((Node) graph.nodes().next()).getSchema();//graph.getNodeTable().getSchema(); 
    77         Schema es = ((Edge) graph.edges().next()).getSchema();//graph.getEdgeTable().getSchema(); 
    78         checkGraphMLSchema(ns); 
    79         checkGraphMLSchema(es); 
     80        Schema ns = null; 
     81        Schema es = null; 
     82         
     83        if (graphHasNodes) { 
     84                ns = ((Node) graph.nodes().next()).getSchema();//graph.getNodeTable().getSchema(); 
     85                checkGraphMLSchema(ns); 
     86        } 
     87         
     88        if (graphHasEdges) { 
     89                es = ((Edge) graph.edges().next()).getSchema();//graph.getEdgeTable().getSchema(); 
     90                checkGraphMLSchema(es); 
     91        } 
     92 
    8093         
    8194        XMLWriter xml = new XMLWriter(new PrintWriter(os)); 
     
    8699         
    87100        // print the graph schema 
    88         printSchema(xml, Tokens.NODE, ns, null); 
    89         printSchema(xml, Tokens.EDGE, es, new String[] { 
    90             graph.getEdgeSourceField(), graph.getEdgeTargetField() 
    91         }); 
     101       
     102        if (graphHasNodes) { 
     103                printSchema(xml, Tokens.NODE, ns, null); 
     104        } 
     105         
     106        if (graphHasEdges) { 
     107                printSchema(xml, Tokens.EDGE, es, new String[] { 
     108                                graph.getEdgeSourceField(), graph.getEdgeTargetField() 
     109                }); 
     110        } 
    92111        xml.println(); 
    93112         
     
    97116         
    98117        // print the nodes 
    99         xml.comment("nodes"); 
    100         Iterator nodes = graph.nodes(); 
    101         while ( nodes.hasNext() ) { 
    102             Node n = (Node)nodes.next(); 
    103              
    104             if ( ns.getColumnCount() > 0 ) { 
    105                 xml.start(Tokens.NODE, Tokens.ID, "n" + String.valueOf(n.getRow())); 
    106                 for ( int i=0; i<ns.getColumnCount(); ++i ) { 
    107                     String field = ns.getColumnName(i); 
    108                     if(n.get(field) != null) { 
    109                         xml.contentTag(Tokens.DATA, Tokens.KEY, field.toLowerCase(), n.get(field).toString()); 
    110                     } 
    111                 } 
     118        if (graphHasNodes) { 
     119                xml.comment("nodes"); 
     120                Iterator nodes = graph.nodes(); 
     121                while ( nodes.hasNext() ) { 
     122                        Node n = (Node)nodes.next(); 
     123             
     124                        if ( ns.getColumnCount() > 0 ) { 
     125                                xml.start(Tokens.NODE, Tokens.ID, "n" + String.valueOf(n.getRow())); 
     126                                for ( int i=0; i<ns.getColumnCount(); ++i ) { 
     127                                        String field = ns.getColumnName(i); 
     128                                        if(n.get(field) != null) { 
     129                                                xml.contentTag(Tokens.DATA, Tokens.KEY, field.toLowerCase(), n.get(field).toString()); 
     130                                        } 
     131                        } 
    112132                xml.end(); 
    113             } else { 
     133                       } else { 
    114134                xml.tag(Tokens.NODE, Tokens.ID, "n" + String.valueOf(n.getRow())); 
    115            
    116        
    117          
     135               
     136               
     137        } 
    118138        // add a blank line 
    119139        xml.println(); 
    120140         
    121141        // print the edges 
    122         String[] attr = new String[]{Tokens.ID, Tokens.SOURCE, Tokens.TARGET}; 
    123         String[] vals = new String[3]; 
    124          
    125         xml.comment("edges"); 
    126         Iterator edges = graph.edges(); 
    127         while ( edges.hasNext() ) { 
    128             Edge e = (Edge)edges.next(); 
    129             vals[0] = "e" + String.valueOf(e.getRow()); 
    130             vals[1] = "n" + String.valueOf(e.getSourceNode().getRow()); 
    131             vals[2] = "n" + String.valueOf(e.getTargetNode().getRow()); 
    132              
    133             if ( es.getColumnCount() > 2 ) { 
    134                 xml.start(Tokens.EDGE, attr, vals, 3); 
    135                 for ( int i=0; i<es.getColumnCount(); ++i ) { 
    136                     String field = es.getColumnName(i); 
    137                     if ( field.equals(graph.getEdgeSourceField()) || 
    138                          field.equals(graph.getEdgeTargetField()) ) 
    139                         continue; 
     142        if (graphHasEdges) { 
     143                String[] attr = new String[]{Tokens.ID, Tokens.SOURCE, Tokens.TARGET}; 
     144                String[] vals = new String[3]; 
     145         
     146                xml.comment("edges"); 
     147                Iterator edges = graph.edges(); 
     148                while ( edges.hasNext() ) { 
     149                        Edge e = (Edge)edges.next(); 
     150                        vals[0] = "e" + String.valueOf(e.getRow()); 
     151                        vals[1] = "n" + String.valueOf(e.getSourceNode().getRow()); 
     152                        vals[2] = "n" + String.valueOf(e.getTargetNode().getRow()); 
     153             
     154                        if ( es.getColumnCount() > 2 ) { 
     155                                xml.start(Tokens.EDGE, attr, vals, 3); 
     156                                for ( int i=0; i<es.getColumnCount(); ++i ) { 
     157                                        String field = es.getColumnName(i); 
     158                                        if ( field.equals(graph.getEdgeSourceField()) || 
     159                                                        field.equals(graph.getEdgeTargetField()) ) 
     160                                                continue; 
    140161                     
    141                     xml.contentTag(Tokens.DATA, Tokens.KEY, field.toLowerCase(),  
     162                                       xml.contentTag(Tokens.DATA, Tokens.KEY, field.toLowerCase(),  
    142163                                   e.get(field).toString()); 
    143                
     164                               
    144165                xml.end(); 
    145             } else { 
     166                       } else { 
    146167                xml.tag(Tokens.EDGE, attr, vals, 3); 
    147             } 
     168                        } 
     169                } 
    148170        } 
    149171        xml.end();