graphdb/src/main/java/com/orientechnologies/orient/graph/graphml/OGraphMLReader.java
public OGraphMLReader inputGraph(final Graph inputGraph, final InputStream graphMLInputStream, int bufferSize, String vertexIdKey,
      String edgeIdKey, String edgeLabelKey) throws IOException {

    XMLInputFactory inputFactory = XMLInputFactory.newInstance();

    try {
      XMLStreamReader reader = inputFactory.createXMLStreamReader(graphMLInputStream);

      final OrientBaseGraph graph = (OrientBaseGraph) inputGraph;

      if (storeVertexIds)
        graph.setSaveOriginalIds(storeVertexIds);

      Map<String, String> keyIdMap = new HashMap<String, String>();
      Map<String, String> keyTypesMaps = new HashMap<String, String>();
      // <Mapped ID String, ID Object>

      // <Default ID String, Mapped ID String>
      Map<String, ORID> vertexMappedIdMap = new HashMap<String, ORID>();

      // Buffered Vertex Data
      String vertexId = null;
      Map<String, Object> vertexProps = null;
      boolean inVertex = false;

      // Buffered Edge Data
      String edgeId = null;
      String edgeLabel = null;
      String vertexLabel = null;
      Vertex[] edgeEndVertices = null; // [0] = outVertex , [1] = inVertex
      Map<String, Object> edgeProps = null;
      boolean inEdge = false;

      int bufferCounter = 0;

      long importedVertices = 0;
      long importedEdges = 0;

      while (reader.hasNext()) {

        Integer eventType = reader.next();
        if (eventType.equals(XMLEvent.START_ELEMENT)) {
          String elementName = reader.getName().getLocalPart();

          if (elementName.equals(GraphMLTokens.KEY)) {
            String id = reader.getAttributeValue(null, GraphMLTokens.ID);
            String attributeName = reader.getAttributeValue(null, GraphMLTokens.ATTR_NAME);
            String attributeType = reader.getAttributeValue(null, GraphMLTokens.ATTR_TYPE);
            keyIdMap.put(id, attributeName);
            keyTypesMaps.put(id, attributeType);

          } else if (elementName.equals(GraphMLTokens.NODE)) {
            vertexId = reader.getAttributeValue(null, GraphMLTokens.ID);
            vertexLabel = reader.getAttributeValue(null, LABELS);
            if (vertexLabel != null) {
              if (vertexLabel.startsWith(":"))
                // REMOVE : AS PREFIX
                vertexLabel = vertexLabel.substring(1);

              final String[] vertexLabels = vertexLabel.split(":");

              // GET ONLY FIRST LABEL AS CLASS
              vertexLabel = vertexId + ",class:" + vertexLabels[vertexLabelIndex];
            } else
              vertexLabel = vertexId;

            inVertex = true;
            vertexProps = new HashMap<String, Object>();

          } else if (elementName.equals(GraphMLTokens.EDGE)) {
            edgeId = reader.getAttributeValue(null, GraphMLTokens.ID);
            edgeLabel = reader.getAttributeValue(null, GraphMLTokens.LABEL);
            edgeLabel = edgeLabel == null ? GraphMLTokens._DEFAULT : edgeLabel;

            String[] vertexIds = new String[2];
            vertexIds[0] = reader.getAttributeValue(null, GraphMLTokens.SOURCE);
            vertexIds[1] = reader.getAttributeValue(null, GraphMLTokens.TARGET);
            edgeEndVertices = new Vertex[2];

            for (int i = 0; i < 2; i++) { // i=0 => outVertex, i=1 => inVertex
              if (vertexIdKey == null) {
                edgeEndVertices[i] = null;
              } else {
                final Object vId = vertexMappedIdMap.get(vertexIds[i]);
                edgeEndVertices[i] = vId != null ? graph.getVertex(vId) : null;
              }

              if (null == edgeEndVertices[i]) {
                edgeEndVertices[i] = graph.addVertex(vertexLabel);
                if (vertexIdKey != null) {
                  mapId(vertexMappedIdMap, vertexIds[i], (ORID) edgeEndVertices[i].getId());
                }
                bufferCounter++;
                importedVertices++;
                printStatus(reader, importedVertices, importedEdges);
              }
            }

            inEdge = true;
            vertexLabel = null;
            edgeProps = new HashMap<String, Object>();

          } else if (elementName.equals(GraphMLTokens.DATA)) {
            String key = reader.getAttributeValue(null, GraphMLTokens.KEY);
            String attributeName = keyIdMap.get(key);

            if (attributeName == null)
              attributeName = key;

            String value = reader.getElementText();

            if (inVertex) {
              if ((vertexIdKey != null) && (key.equals(vertexIdKey))) {
                // Should occur at most once per Vertex
                vertexId = value;
              } else if (attributeName.equalsIgnoreCase(LABELS)) {
                // IGNORE LABELS
              } else {
                final Object attrValue = typeCastValue(key, value, keyTypesMaps);

                final OGraphMLImportStrategy strategy = vertexPropsStrategy.get(attributeName);
                if (strategy != null) {
                  attributeName = strategy.transformAttribute(attributeName, attrValue);
                }

                if (attributeName != null)
                  vertexProps.put(attributeName, attrValue);
              }
            } else if (inEdge) {
              if ((edgeLabelKey != null) && (key.equals(edgeLabelKey)))
                edgeLabel = value;
              else if ((edgeIdKey != null) && (key.equals(edgeIdKey)))
                edgeId = value;
              else {
                final Object attrValue = typeCastValue(key, value, keyTypesMaps);

                final OGraphMLImportStrategy strategy = edgePropsStrategy.get(attributeName);
                if (strategy != null) {
                  attributeName = strategy.transformAttribute(attributeName, attrValue);
                }

                if (attributeName != null)
                  edgeProps.put(attributeName, attrValue);
              }
            }

          }
        } else if (eventType.equals(XMLEvent.END_ELEMENT)) {
          String elementName = reader.getName().getLocalPart();

          if (elementName.equals(GraphMLTokens.NODE)) {
            ORID currentVertex = null;

            if (vertexIdKey != null)
              currentVertex = vertexMappedIdMap.get(vertexId);

            if (currentVertex == null) {
              final OrientVertex v = graph.addVertex(vertexLabel, vertexProps);
              if (vertexIdKey != null)
                mapId(vertexMappedIdMap, vertexId, v.getIdentity());
              bufferCounter++;

              importedVertices++;
              printStatus(reader, importedVertices, importedEdges);

            } else {
              // UPDATE IT
              final OrientVertex v = graph.getVertex(currentVertex);
              v.setProperties(vertexProps);
            }

            vertexId = null;
            vertexLabel = null;
            vertexProps = null;
            inVertex = false;
          } else if (elementName.equals(GraphMLTokens.EDGE)) {
            Edge currentEdge = ((OrientVertex) edgeEndVertices[0]).addEdge(null, (OrientVertex) edgeEndVertices[1], edgeLabel, null,
                edgeProps);
            bufferCounter++;

            importedEdges++;
            printStatus(reader, importedVertices, importedEdges);

            edgeId = null;
            edgeLabel = null;
            edgeEndVertices = null;
            edgeProps = null;
            inEdge = false;
          }

        }

        if (bufferCounter > bufferSize) {
          graph.commit();
          bufferCounter = 0;
        }
      }

      reader.close();

      graph.commit();

    } catch (Exception xse) {
      throw OException.wrapException(new ODatabaseImportException("Error on importing GraphML"), xse);
    }

    return this;
  }
public OGraphMLReader inputGraph(final Graph inputGraph, final InputStream graphMLInputStream, int bufferSize, String vertexIdKey,
      String edgeIdKey, String edgeLabelKey) throws IOException {

    XMLInputFactory inputFactory = XMLInputFactory.newInstance();

    try {
      XMLStreamReader reader = inputFactory.createXMLStreamReader(graphMLInputStream);

      final OrientBaseGraph graph = (OrientBaseGraph) inputGraph;

      if (storeVertexIds)
        graph.setSaveOriginalIds(storeVertexIds);

      Map<String, String> keyIdMap = new HashMap<String, String>();
      Map<String, String> keyTypesMaps = new HashMap<String, String>();
      // <Mapped ID String, ID Object>

      // <Default ID String, Mapped ID String>
      Map<String, ORID> vertexMappedIdMap = new HashMap<String, ORID>();

      // Buffered Vertex Data
      String vertexId = null;
      Map<String, Object> vertexProps = null;
      boolean inVertex = false;

      // Buffered Edge Data
      String edgeId = null;
      String edgeLabel = null;
      String vertexLabel = null;
      Vertex[] edgeEndVertices = null; // [0] = outVertex , [1] = inVertex
      Map<String, Object> edgeProps = null;
      boolean inEdge = false;

      int bufferCounter = 0;

      long importedVertices = 0;
      long importedEdges = 0;

      while (reader.hasNext()) {

        Integer eventType = reader.next();
        if (eventType.equals(XMLEvent.START_ELEMENT)) {
          String elementName = reader.getName().getLocalPart();

          if (elementName.equals(GraphMLTokens.KEY)) {
            String id = reader.getAttributeValue(null, GraphMLTokens.ID);
            String attributeName = reader.getAttributeValue(null, GraphMLTokens.ATTR_NAME);
            String attributeType = reader.getAttributeValue(null, GraphMLTokens.ATTR_TYPE);
            keyIdMap.put(id, attributeName);
            keyTypesMaps.put(id, attributeType);

          } else if (elementName.equals(GraphMLTokens.NODE)) {
            vertexId = reader.getAttributeValue(null, GraphMLTokens.ID);
            vertexLabel = reader.getAttributeValue(null, LABELS);
            if (vertexLabel != null) {
              if (vertexLabel.startsWith(":"))
                // REMOVE : AS PREFIX
                vertexLabel = vertexLabel.substring(1);

              final String[] vertexLabels = vertexLabel.split(":");

              // GET ONLY FIRST LABEL AS CLASS
              vertexLabel = vertexId + ",class:" + vertexLabels[vertexLabelIndex];
            } else
              vertexLabel = vertexId;

            inVertex = true;
            vertexProps = new HashMap<String, Object>();

          } else if (elementName.equals(GraphMLTokens.EDGE)) {
            edgeId = reader.getAttributeValue(null, GraphMLTokens.ID);
            edgeLabel = reader.getAttributeValue(null, GraphMLTokens.LABEL);
            edgeLabel = edgeLabel == null ? GraphMLTokens._DEFAULT : edgeLabel;

            String[] vertexIds = new String[2];
            vertexIds[0] = reader.getAttributeValue(null, GraphMLTokens.SOURCE);
            vertexIds[1] = reader.getAttributeValue(null, GraphMLTokens.TARGET);
            edgeEndVertices = new Vertex[2];

            for (int i = 0; i < 2; i++) { // i=0 => outVertex, i=1 => inVertex
              if (vertexIdKey == null) {
                edgeEndVertices[i] = null;
              } else {
                final Object vId = vertexMappedIdMap.get(vertexIds[i]);
                edgeEndVertices[i] = vId != null ? graph.getVertex(vId) : null;
              }

              if (null == edgeEndVertices[i]) {
                edgeEndVertices[i] = graph.addVertex(vertexLabel);
                if (vertexIdKey != null) {
                  mapId(vertexMappedIdMap, vertexIds[i], (ORID) edgeEndVertices[i].getId());
                }
                bufferCounter++;
                importedVertices++;
                printStatus(reader, importedVertices, importedEdges);
              }
            }

            inEdge = true;
            vertexLabel = null;
            edgeProps = new HashMap<String, Object>();

          } else if (elementName.equals(GraphMLTokens.DATA)) {
            String key = reader.getAttributeValue(null, GraphMLTokens.KEY);
            String attributeName = keyIdMap.get(key);

            if (attributeName == null)
              attributeName = key;

            String value = reader.getElementText();

            if (inVertex) {
              if ((vertexIdKey != null) && (key.equals(vertexIdKey))) {
                // Should occur at most once per Vertex
                vertexId = value;
              } else if (attributeName.equalsIgnoreCase(LABELS)) {
                // IGNORE LABELS
              } else {
                final Object attrValue = typeCastValue(key, value, keyTypesMaps);

                final OGraphMLImportStrategy strategy = vertexPropsStrategy.get(attributeName);
                if (strategy != null) {
                  attributeName = strategy.transformAttribute(attributeName, attrValue);
                }

                if (attributeName != null)
                  vertexProps.put(attributeName, attrValue);
              }
            } else if (inEdge) {
              if ((edgeLabelKey != null) && (key.equals(edgeLabelKey)))
                edgeLabel = value;
              else if ((edgeIdKey != null) && (key.equals(edgeIdKey)))
                edgeId = value;
              else {
                final Object attrValue = typeCastValue(key, value, keyTypesMaps);

                final OGraphMLImportStrategy strategy = edgePropsStrategy.get(attributeName);
                if (strategy != null) {
                  attributeName = strategy.transformAttribute(attributeName, attrValue);
                }

                if (attributeName != null)
                  edgeProps.put(attributeName, attrValue);
              }
            }

          }
        } else if (eventType.equals(XMLEvent.END_ELEMENT)) {
          String elementName = reader.getName().getLocalPart();

          if (elementName.equals(GraphMLTokens.NODE)) {
            ORID currentVertex = null;

            if (vertexIdKey != null)
              currentVertex = vertexMappedIdMap.get(vertexId);

            if (currentVertex == null) {
              final OrientVertex v = graph.addVertex(vertexLabel, vertexProps);
              if (vertexIdKey != null)
                mapId(vertexMappedIdMap, vertexId, v.getIdentity());
              bufferCounter++;

              importedVertices++;
              printStatus(reader, importedVertices, importedEdges);

            } else {
              // UPDATE IT
              final OrientVertex v = graph.getVertex(currentVertex);
              v.setProperties(vertexProps);
            }

            vertexId = null;
            vertexLabel = null;
            vertexProps = null;
            inVertex = false;
          } else if (elementName.equals(GraphMLTokens.EDGE)) {
            Edge currentEdge = ((OrientVertex) edgeEndVertices[0]).addEdge(null, (OrientVertex) edgeEndVertices[1], edgeLabel, null,
                edgeProps);
            bufferCounter++;

            importedEdges++;
            printStatus(reader, importedVertices, importedEdges);

            edgeId = null;
            edgeLabel = null;
            edgeEndVertices = null;
            edgeProps = null;
            inEdge = false;
          }

        }

        if (bufferCounter > bufferSize) {
          graph.commit();
          bufferCounter = 0;
        }
      }

      reader.close();

      graph.commit();

    } catch (Exception xse) {
      throw OException.wrapException(new ODatabaseImportException("Error on importing GraphML"), xse);
    }

    return this;
  }
public OGraphMLReader inputGraph ( final Graph inputGraph , final InputStream graphMLInputStream , int bufferSize , String vertexIdKey , String edgeIdKey , String edgeLabelKey ) throws IOException { XMLInputFactory inputFactory = XMLInputFactory . newInstance ( ) ; try { XMLStreamReader reader = inputFactory . createXMLStreamReader ( graphMLInputStream ) ; final OrientBaseGraph graph = ( OrientBaseGraph ) inputGraph ; if ( storeVertexIds ) graph . setSaveOriginalIds ( storeVertexIds ) ; Map < String , String > keyIdMap = new HashMap < String , String > ( ) ; Map < String , String > keyTypesMaps = new HashMap < String , String > ( ) ; // <Mapped ID String, ID Object> // <Default ID String, Mapped ID String> Map < String , ORID > vertexMappedIdMap = new HashMap < String , ORID > ( ) ; // Buffered Vertex Data String vertexId = null ; Map < String , Object > vertexProps = null ; boolean inVertex = false ; // Buffered Edge Data String edgeId = null ; String edgeLabel = null ; String vertexLabel = null ; Vertex [ ] edgeEndVertices = null ; // [0] = outVertex , [1] = inVertex Map < String , Object > edgeProps = null ; boolean inEdge = false ; int bufferCounter = 0 ; long importedVertices = 0 ; long importedEdges = 0 ; while ( reader . hasNext ( ) ) { Integer eventType = reader . next ( ) ; if ( eventType . equals ( XMLEvent . START_ELEMENT ) ) { String elementName = reader . getName ( ) . getLocalPart ( ) ; if ( elementName . equals ( GraphMLTokens . KEY ) ) { String id = reader . getAttributeValue ( null , GraphMLTokens . ID ) ; String attributeName = reader . getAttributeValue ( null , GraphMLTokens . ATTR_NAME ) ; String attributeType = reader . getAttributeValue ( null , GraphMLTokens . ATTR_TYPE ) ; keyIdMap . put ( id , attributeName ) ; keyTypesMaps . put ( id , attributeType ) ; } else if ( elementName . equals ( GraphMLTokens . NODE ) ) { vertexId = reader . getAttributeValue ( null , GraphMLTokens . ID ) ; vertexLabel = reader . getAttributeValue ( null , LABELS ) ; if ( vertexLabel != null ) { if ( vertexLabel . startsWith ( ":" ) ) // REMOVE : AS PREFIX vertexLabel = vertexLabel . substring ( 1 ) ; final String [ ] vertexLabels = vertexLabel . split ( ":" ) ; // GET ONLY FIRST LABEL AS CLASS vertexLabel = vertexId + ",class:" + vertexLabels [ vertexLabelIndex ] ; } else vertexLabel = vertexId ; inVertex = true ; vertexProps = new HashMap < String , Object > ( ) ; } else if ( elementName . equals ( GraphMLTokens . EDGE ) ) { edgeId = reader . getAttributeValue ( null , GraphMLTokens . ID ) ; edgeLabel = reader . getAttributeValue ( null , GraphMLTokens . LABEL ) ; edgeLabel = edgeLabel == null ? GraphMLTokens . _DEFAULT : edgeLabel ; String [ ] vertexIds = new String [ 2 ] ; vertexIds [ 0 ] = reader . getAttributeValue ( null , GraphMLTokens . SOURCE ) ; vertexIds [ 1 ] = reader . getAttributeValue ( null , GraphMLTokens . TARGET ) ; edgeEndVertices = new Vertex [ 2 ] ; for ( int i = 0 ; i < 2 ; i ++ ) { // i=0 => outVertex, i=1 => inVertex if ( vertexIdKey == null ) { edgeEndVertices [ i ] = null ; } else { final Object vId = vertexMappedIdMap . get ( vertexIds [ i ] ) ; edgeEndVertices [ i ] = vId != null ? graph . getVertex ( vId ) : null ; } if ( null == edgeEndVertices [ i ] ) { edgeEndVertices [ i ] = graph . addVertex ( vertexLabel ) ; if ( vertexIdKey != null ) { mapId ( vertexMappedIdMap , vertexIds [ i ] , ( ORID ) edgeEndVertices [ i ] . getId ( ) ) ; } bufferCounter ++ ; importedVertices ++ ; printStatus ( reader , importedVertices , importedEdges ) ; } } inEdge = true ; vertexLabel = null ; edgeProps = new HashMap < String , Object > ( ) ; } else if ( elementName . equals ( GraphMLTokens . DATA ) ) { String key = reader . getAttributeValue ( null , GraphMLTokens . KEY ) ; String attributeName = keyIdMap . get ( key ) ; if ( attributeName == null ) attributeName = key ; String value = reader . getElementText ( ) ; if ( inVertex ) { if ( ( vertexIdKey != null ) && ( key . equals ( vertexIdKey ) ) ) { // Should occur at most once per Vertex vertexId = value ; } else if ( attributeName . equalsIgnoreCase ( LABELS ) ) { // IGNORE LABELS } else { final Object attrValue = typeCastValue ( key , value , keyTypesMaps ) ; final OGraphMLImportStrategy strategy = vertexPropsStrategy . get ( attributeName ) ; if ( strategy != null ) { attributeName = strategy . transformAttribute ( attributeName , attrValue ) ; } if ( attributeName != null ) vertexProps . put ( attributeName , attrValue ) ; } } else if ( inEdge ) { if ( ( edgeLabelKey != null ) && ( key . equals ( edgeLabelKey ) ) ) edgeLabel = value ; else if ( ( edgeIdKey != null ) && ( key . equals ( edgeIdKey ) ) ) edgeId = value ; else { final Object attrValue = typeCastValue ( key , value , keyTypesMaps ) ; final OGraphMLImportStrategy strategy = edgePropsStrategy . get ( attributeName ) ; if ( strategy != null ) { attributeName = strategy . transformAttribute ( attributeName , attrValue ) ; } if ( attributeName != null ) edgeProps . put ( attributeName , attrValue ) ; } } } } else if ( eventType . equals ( XMLEvent . END_ELEMENT ) ) { String elementName = reader . getName ( ) . getLocalPart ( ) ; if ( elementName . equals ( GraphMLTokens . NODE ) ) { ORID currentVertex = null ; if ( vertexIdKey != null ) currentVertex = vertexMappedIdMap . get ( vertexId ) ; if ( currentVertex == null ) { final OrientVertex v = graph . addVertex ( vertexLabel , vertexProps ) ; if ( vertexIdKey != null ) mapId ( vertexMappedIdMap , vertexId , v . getIdentity ( ) ) ; bufferCounter ++ ; importedVertices ++ ; printStatus ( reader , importedVertices , importedEdges ) ; } else { // UPDATE IT final OrientVertex v = graph . getVertex ( currentVertex ) ; v . setProperties ( vertexProps ) ; } vertexId = null ; vertexLabel = null ; vertexProps = null ; inVertex = false ; } else if ( elementName . equals ( GraphMLTokens . EDGE ) ) { Edge currentEdge = ( ( OrientVertex ) edgeEndVertices [ 0 ] ) . addEdge ( null , ( OrientVertex ) edgeEndVertices [ 1 ] , edgeLabel , null , edgeProps ) ; bufferCounter ++ ; importedEdges ++ ; printStatus ( reader , importedVertices , importedEdges ) ; edgeId = null ; edgeLabel = null ; edgeEndVertices = null ; edgeProps = null ; inEdge = false ; } } if ( bufferCounter > bufferSize ) { graph . commit ( ) ; bufferCounter = 0 ; } } reader . close ( ) ; graph . commit ( ) ; } catch ( Exception xse ) { throw OException . wrapException ( new ODatabaseImportException ( "Error on importing GraphML" ) , xse ) ; } return this ; }
Input the GraphML stream data into the graph. More control over how data is streamed is provided by this method.

@param inputGraph
the graph to populate with the GraphML data
@param graphMLInputStream
an InputStream of GraphML data
@param bufferSize
the amount of elements to hold in memory before committing a transactions (only valid for TransactionalGraphs)
@param vertexIdKey
if the id of a vertex is a &lt;data/&gt; property, fetch it from the data property.
@param edgeIdKey
if the id of an edge is a &lt;data/&gt; property, fetch it from the data property.
@param edgeLabelKey
if the label of an edge is a &lt;data/&gt; property, fetch it from the data property.
@throws IOException
thrown when the GraphML data is not correctly formatted
Input the GraphML stream data into the graph . More control over how data is streamed is provided by this method .