Author: simonetripodi
Date: Sun Jul 29 08:09:23 2012
New Revision: 1366791

URL: http://svn.apache.org/viewvc?rev=1366791&view=rev
Log:
started restoring the GraphML exporter, but using the 
javax.xml.transform.sax.TransformerHandler rather than the 
javax.xml.stream.XMLStreamWriter, that is not available in java5 (which is 
commons-graph jvm target)

Modified:
    
commons/sandbox/graph/trunk/src/main/java/org/apache/commons/graph/export/GraphMLExporter.java

Modified: 
commons/sandbox/graph/trunk/src/main/java/org/apache/commons/graph/export/GraphMLExporter.java
URL: 
http://svn.apache.org/viewvc/commons/sandbox/graph/trunk/src/main/java/org/apache/commons/graph/export/GraphMLExporter.java?rev=1366791&r1=1366790&r2=1366791&view=diff
==============================================================================
--- 
commons/sandbox/graph/trunk/src/main/java/org/apache/commons/graph/export/GraphMLExporter.java
 (original)
+++ 
commons/sandbox/graph/trunk/src/main/java/org/apache/commons/graph/export/GraphMLExporter.java
 Sun Jul 29 08:09:23 2012
@@ -21,13 +21,21 @@ package org.apache.commons.graph.export;
 
 import java.util.Map;
 
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.sax.SAXTransformerFactory;
+import javax.xml.transform.sax.TransformerHandler;
+import javax.xml.transform.stream.StreamResult;
+
 import org.apache.commons.graph.Graph;
 import org.apache.commons.graph.Mapper;
+import org.xml.sax.helpers.AttributesImpl;
 
 final class GraphMLExporter<V, E>
     extends AbstractExporter<V, E, GraphMLExporter<V, E>>
 {
 
+    private static final SAXTransformerFactory SAX_TRANSFORMER_FACTORY = 
(SAXTransformerFactory) TransformerFactory.newInstance();
+
     private static final String GRAPHML = "graphml";
 
     private static final String XMLNS = "xmlns";
@@ -76,6 +84,10 @@ final class GraphMLExporter<V, E>
 
     private static final String WEIGHT = "weight";
 
+    private static final String CDATA_TYPE = "CDATA";
+
+    private TransformerHandler transformerHandler;
+
     GraphMLExporter( Graph<V, E> graph, String name )
     {
         super( graph, name );
@@ -85,93 +97,120 @@ final class GraphMLExporter<V, E>
     protected void startSerialization()
         throws Exception
     {
-        // TODO Auto-generated method stub
-
+        transformerHandler = SAX_TRANSFORMER_FACTORY.newTransformerHandler();
+        transformerHandler.setResult( new StreamResult( getWriter() ) );
+        transformerHandler.startDocument();
     }
 
     @Override
     protected void endSerialization()
         throws Exception
     {
-        // TODO Auto-generated method stub
-
+        transformerHandler.endDocument();
+        getWriter().flush();
+        getWriter().close();
     }
 
     @Override
     protected void startGraph( String name )
         throws Exception
     {
-        // TODO Auto-generated method stub
+        transformerHandler.startElement( GRAPHML_XMLNS, GRAPHML, GRAPHML, new 
AttributesImpl() );
 
+        AttributesImpl atts = new AttributesImpl();
+        atts.addAttribute( GRAPHML_XMLNS, ID, ID, CDATA_TYPE, name );
+        atts.addAttribute( GRAPHML_XMLNS, EDGEDEFAULT, EDGEDEFAULT, 
CDATA_TYPE, DIRECTED );
+        transformerHandler.startElement( GRAPHML_XMLNS, GRAPH, GRAPH, atts );
     }
 
     @Override
     protected void endGraph()
         throws Exception
     {
-        // TODO Auto-generated method stub
-
+        transformerHandler.endElement( GRAPHML_XMLNS, GRAPH, GRAPH ); // graph
+        transformerHandler.endElement( GRAPHML_XMLNS, GRAPHML, GRAPHML ); // 
graphml
     }
 
     @Override
     protected void comment( String text )
         throws Exception
     {
-        // TODO Auto-generated method stub
-
+        transformerHandler.comment( text.toCharArray(), 0, text.length() );
     }
 
     @Override
     protected void enlistVerticesProperty( String name, Class<?> type )
         throws Exception
     {
-        // TODO Auto-generated method stub
-
+        enlistProperty( name, type, NODE );
     }
 
     @Override
     protected void enlistEdgesProperty( String name, Class<?> type )
         throws Exception
     {
-        // TODO Auto-generated method stub
+        enlistProperty( name, type, EDGE );
+    }
 
+    private void enlistProperty( String name, Class<?> type, String element )
+        throws Exception
+    {
+        AttributesImpl atts = new AttributesImpl();
+        atts.addAttribute( GRAPHML_XMLNS, ID, ID, CDATA_TYPE, name );
+        atts.addAttribute( GRAPHML_XMLNS, FOR, FOR, CDATA_TYPE, element );
+        atts.addAttribute( GRAPHML_XMLNS, ATTR_NAME, ATTR_NAME, CDATA_TYPE, 
name );
+        atts.addAttribute( GRAPHML_XMLNS, ATTR_TYPE, ATTR_TYPE, CDATA_TYPE, 
getStringType( type ) );
+        transformerHandler.startElement( GRAPHML_XMLNS, KEY, KEY, atts );
+        transformerHandler.endElement( GRAPHML_XMLNS, KEY, KEY );
     }
 
     @Override
     protected void vertex( V vertex, Map<String, Object> properties )
         throws Exception
     {
-        // TODO Auto-generated method stub
+        AttributesImpl atts = new AttributesImpl();
+        atts.addAttribute( GRAPHML_XMLNS, ID, ID, CDATA_TYPE, String.valueOf( 
vertex.hashCode() ) );
+        transformerHandler.startElement( GRAPHML_XMLNS, NODE, NODE, atts );
+
+        // TODO print properties
 
+        transformerHandler.endElement( GRAPHML_XMLNS, NODE, NODE );
     }
 
     @Override
     protected void edge( E edge, V head, V tail, Map<String, Object> 
properties )
         throws Exception
     {
-        // TODO Auto-generated method stub
+        AttributesImpl atts = new AttributesImpl();
+        atts.addAttribute( GRAPHML_XMLNS, ID, ID, CDATA_TYPE, String.valueOf( 
edge.hashCode() ) );
+        atts.addAttribute( GRAPHML_XMLNS, SOURCE, SOURCE, CDATA_TYPE, 
String.valueOf( getGraph().getVertices( edge ).getHead().hashCode() ) );
+        atts.addAttribute( GRAPHML_XMLNS, TARGET, TARGET, CDATA_TYPE, 
String.valueOf( getGraph().getVertices( edge ).getTail().hashCode() ) );
+        transformerHandler.startElement( GRAPHML_XMLNS, EDGE, EDGE, atts );
+
+        // TODO print properties
 
+        transformerHandler.endElement( GRAPHML_XMLNS, NODE, NODE );
     }
 
-    private static <O> String getStringType( O object )
+    private static <T> String getStringType( Class<T> type )
     {
-        if ( object instanceof Integer )
+        if ( Integer.class == type )
         {
             return INT;
         }
-        else if ( object instanceof Long )
+        else if ( Long.class == type )
         {
             return LONG;
         }
-        else if ( object instanceof Float )
+        else if ( Float.class == type )
         {
             return FLOAT;
         }
-        else if ( object instanceof Double )
+        else if ( Double.class == type )
         {
             return DOUBLE;
         }
-        else if ( object instanceof Boolean )
+        else if ( Boolean.class == type )
         {
             return BOOLEAN;
         }
@@ -180,25 +219,25 @@ final class GraphMLExporter<V, E>
 
     public <N extends Number> GraphMLExporter<V, E> withEdgeWeights( Mapper<E, 
N> edgeWeights )
     {
-        // TODO Auto-generated method stub
+        super.addEdgeProperty( WEIGHT, edgeWeights );
         return this;
     }
 
     public <N extends Number> GraphMLExporter<V, E> withVertexWeights( 
Mapper<V, N> vertexWeights )
     {
-        // TODO Auto-generated method stub
+        super.addVertexProperty( WEIGHT, vertexWeights );
         return this;
     }
 
     public GraphMLExporter<V, E> withEdgeLabels( Mapper<E, String> edgeLabels )
     {
-        // TODO Auto-generated method stub
+        super.addEdgeProperty( LABEL, edgeLabels );
         return this;
     }
 
     public GraphMLExporter<V, E> withVertexLabels( Mapper<V, String> 
vertexLabels )
     {
-        // TODO Auto-generated method stub
+        super.addVertexProperty( LABEL, vertexLabels );
         return this;
     }
 


Reply via email to