Search in sources :

Example 1 with OrientBaseGraph

use of com.tinkerpop.blueprints.impls.orient.OrientBaseGraph in project guice-persist-orient by xvik.

the class RecordConverter method tryGraphConversion.

@SuppressWarnings("unchecked")
private <T> T tryGraphConversion(final ODocument doc, final Class<T> targetType) {
    T res = null;
    final boolean requireVertex = Vertex.class.isAssignableFrom(targetType);
    if (requireVertex || Edge.class.isAssignableFrom(targetType)) {
        final OrientBaseGraph db = injector.getInstance(OrientBaseGraph.class);
        // explicitly check object compatibility to avoid wrong conversions (allowed by orient)
        if (requireVertex && doc.getSchemaClass().isSubClassOf("V")) {
            res = (T) db.getVertex(doc);
        } else if (doc.getSchemaClass().isSubClassOf("E")) {
            res = (T) db.getEdge(doc);
        }
    }
    return res;
}
Also used : OrientBaseGraph(com.tinkerpop.blueprints.impls.orient.OrientBaseGraph) Edge(com.tinkerpop.blueprints.Edge)

Example 2 with OrientBaseGraph

use of com.tinkerpop.blueprints.impls.orient.OrientBaseGraph in project guice-persist-orient by xvik.

the class GraphPool method get.

@Override
public OrientBaseGraph get() {
    if (transaction.get() == null) {
        final ODatabaseDocumentTx documentDb = documentPool.get();
        final OrientBaseGraph graph = transactionManager.getActiveTransactionType() == OTransaction.TXTYPE.NOTX ? new OrientGraphNoTx(documentDb) : new OrientGraph(documentDb);
        transaction.set(graph);
    }
    final OrientBaseGraph db = transaction.get();
    db.getRawGraph().activateOnCurrentThread();
    return db;
}
Also used : OrientGraph(com.tinkerpop.blueprints.impls.orient.OrientGraph) ODatabaseDocumentTx(com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx) OrientGraphNoTx(com.tinkerpop.blueprints.impls.orient.OrientGraphNoTx) OrientBaseGraph(com.tinkerpop.blueprints.impls.orient.OrientBaseGraph)

Example 3 with OrientBaseGraph

use of com.tinkerpop.blueprints.impls.orient.OrientBaseGraph in project guice-persist-orient by xvik.

the class OrientGraphNoTxProvider method get.

@Override
public OrientGraphNoTx get() {
    final OrientBaseGraph graph = provider.get();
    Preconditions.checkState(graph instanceof OrientGraphNoTx, "You must use OrientGraph within transaction or disable transaction " + "(or use OrientBaseGraph as universal solution for all cases)");
    return (OrientGraphNoTx) graph;
}
Also used : OrientGraphNoTx(com.tinkerpop.blueprints.impls.orient.OrientGraphNoTx) OrientBaseGraph(com.tinkerpop.blueprints.impls.orient.OrientBaseGraph)

Example 4 with OrientBaseGraph

use of com.tinkerpop.blueprints.impls.orient.OrientBaseGraph in project guice-persist-orient by xvik.

the class OrientGraphProvider method get.

@Override
public OrientGraph get() {
    final OrientBaseGraph graph = provider.get();
    Preconditions.checkState(graph instanceof OrientGraph, "Transaction started in NOTX mode. You must use OrientGraphNoTx or enable transaction " + "(or use OrientBaseGraph as universal solution for all cases)");
    return (OrientGraph) graph;
}
Also used : OrientGraph(com.tinkerpop.blueprints.impls.orient.OrientGraph) OrientBaseGraph(com.tinkerpop.blueprints.impls.orient.OrientBaseGraph)

Example 5 with OrientBaseGraph

use of com.tinkerpop.blueprints.impls.orient.OrientBaseGraph in project orientdb by orientechnologies.

the class OGraphMLReader method inputGraph.

/**
 * 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
 */
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;
        // [0] = outVertex , [1] = inVertex
        Vertex[] edgeEndVertices = null;
        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;
}
Also used : Vertex(com.tinkerpop.blueprints.Vertex) OrientVertex(com.tinkerpop.blueprints.impls.orient.OrientVertex) XMLStreamReader(javax.xml.stream.XMLStreamReader) HashMap(java.util.HashMap) ODatabaseImportException(com.orientechnologies.orient.core.db.tool.ODatabaseImportException) OrientVertex(com.tinkerpop.blueprints.impls.orient.OrientVertex) OrientBaseGraph(com.tinkerpop.blueprints.impls.orient.OrientBaseGraph) ODatabaseImportException(com.orientechnologies.orient.core.db.tool.ODatabaseImportException) OException(com.orientechnologies.common.exception.OException) IOException(java.io.IOException) ORID(com.orientechnologies.orient.core.id.ORID) Edge(com.tinkerpop.blueprints.Edge) XMLInputFactory(javax.xml.stream.XMLInputFactory)

Aggregations

OrientBaseGraph (com.tinkerpop.blueprints.impls.orient.OrientBaseGraph)75 OrientVertex (com.tinkerpop.blueprints.impls.orient.OrientVertex)40 OrientGraph (com.tinkerpop.blueprints.impls.orient.OrientGraph)21 OrientGraphNoTx (com.tinkerpop.blueprints.impls.orient.OrientGraphNoTx)15 Vertex (com.tinkerpop.blueprints.Vertex)13 OCommandSQL (com.orientechnologies.orient.core.sql.OCommandSQL)11 ODocument (com.orientechnologies.orient.core.record.impl.ODocument)8 Edge (com.tinkerpop.blueprints.Edge)8 OrientGraphFactory (com.tinkerpop.blueprints.impls.orient.OrientGraphFactory)8 Test (org.junit.Test)8 ODatabaseDocument (com.orientechnologies.orient.core.db.document.ODatabaseDocument)6 ODatabaseDocumentTx (com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx)6 OGraphRepair (com.tinkerpop.blueprints.impls.orient.OGraphRepair)5 ArrayList (java.util.ArrayList)5 ONeedRetryException (com.orientechnologies.common.concur.ONeedRetryException)4 OIdentifiable (com.orientechnologies.orient.core.db.record.OIdentifiable)4 OConcurrentModificationException (com.orientechnologies.orient.core.exception.OConcurrentModificationException)4 OSQLSynchQuery (com.orientechnologies.orient.core.sql.query.OSQLSynchQuery)4 ORecordDuplicatedException (com.orientechnologies.orient.core.storage.ORecordDuplicatedException)4 OrientEdge (com.tinkerpop.blueprints.impls.orient.OrientEdge)4