package com.tinkerpop.blueprints.impls.orient;
import com.orientechnologies.orient.core.hook.ORecordHook;
import com.orientechnologies.orient.core.record.ORecord;
import com.orientechnologies.orient.core.record.impl.ODocument;
import com.tinkerpop.blueprints.Vertex;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
/**
* Created by tglman on 04/01/16.
*/
public class OrientGraphHookCall {
private static int vertexCreatedCnt;
private static int vertexUpdatedCnt;
private static int edgeCreatedCnt;
private static int edgeUpdatedCnt;
@Test
public void testHook() {
OrientBaseGraph graph = new OrientGraph("memory:" + OrientGraphHookCall.class.getSimpleName());
graph.getRawGraph().registerHook(new ORecordHook() {
@Override
public void onUnregister() {
}
@Override
public RESULT onTrigger(TYPE iType, ORecord iRecord) {
switch (iType) {
case AFTER_CREATE: {
if (((ODocument) iRecord).getSchemaClass().isSubClassOf(OrientEdgeType.CLASS_NAME)) {
edgeCreatedCnt++;
} else {
vertexCreatedCnt++;
}
break;
}
case AFTER_UPDATE: {
if (((ODocument) iRecord).getSchemaClass().isSubClassOf(OrientEdgeType.CLASS_NAME)) {
edgeUpdatedCnt++;
} else {
vertexUpdatedCnt++;
}
break;
}
default: {
}
}
return null;
}
@Override
public DISTRIBUTED_EXECUTION_MODE getDistributedExecutionMode() {
return null;
}
});
try {
Vertex v1 = graph.addVertex("v", (String) null);
graph.commit();
assertEquals(1, vertexCreatedCnt);
assertEquals(0, vertexUpdatedCnt);
assertEquals(0, edgeCreatedCnt);
assertEquals(0, edgeUpdatedCnt);
v1.setProperty("p1a", "v1a");
graph.commit();
assertEquals(1, vertexCreatedCnt);
assertEquals(1, vertexUpdatedCnt);
assertEquals(0, edgeCreatedCnt);
assertEquals(0, edgeUpdatedCnt);
Vertex v2 = graph.addVertex("v", (String) null);
graph.commit();
assertEquals(2, vertexCreatedCnt);
assertEquals(1, vertexUpdatedCnt);
assertEquals(0, edgeCreatedCnt);
assertEquals(0, edgeUpdatedCnt);
v2.setProperty("p2a", "v2a");
graph.commit();
assertEquals(2, vertexCreatedCnt);
assertEquals(2, vertexUpdatedCnt);
assertEquals(0, edgeCreatedCnt);
assertEquals(0, edgeUpdatedCnt);
v1.addEdge("e", v2);
graph.commit();
assertEquals(2, vertexCreatedCnt);
assertEquals(4, vertexUpdatedCnt);
assertEquals(1, edgeCreatedCnt);
assertEquals(0, edgeUpdatedCnt);
} finally {
graph.shutdown();
}
}
}