use of com.orientechnologies.orient.core.hook.ODocumentHookAbstract in project wicket-orientdb by OrienteerBAP.
the class TestInAppOrientDBCompatibility method testCreationInHook.
@Test
public void testCreationInHook() {
ODatabaseDocument db = wicket.getTester().getDatabase();
OSchema schema = db.getMetadata().getSchema();
final OClass classA = schema.createClass("TestCreationInHookMain");
final OClass classB = schema.createClass("TestCreationInHookReflect");
classA.createProperty("name", OType.STRING);
classA.createProperty("mirror", OType.LINK).setLinkedClass(classB);
classB.createProperty("name", OType.STRING);
db.registerHook(new ODocumentHookAbstract(db) {
{
setIncludeClasses(classA.getName());
}
@Override
public RESULT onRecordBeforeCreate(ODocument iDocument) {
ODocument mirror = new ODocument(classB);
mirror.field("name", (Object) iDocument.field("name"));
iDocument.field("mirror", mirror);
return RESULT.RECORD_CHANGED;
}
@Override
public DISTRIBUTED_EXECUTION_MODE getDistributedExecutionMode() {
return DISTRIBUTED_EXECUTION_MODE.SOURCE_NODE;
}
});
for (int i = 0; i < 10; i++) {
String name = "name-" + RANDOM.nextLong();
ODocument doc = new ODocument(classA);
doc.field("name", name);
doc.save();
}
db.commit();
db.close();
db = wicket.getTester().getDatabase();
for (ODocument doc : db.browseClass(classA.getName())) {
String name = doc.field("name");
assertNotNull(name);
ODocument mirror = doc.field("mirror");
assertNotNull(mirror);
assertEquals(name, mirror.field("name"));
}
}
use of com.orientechnologies.orient.core.hook.ODocumentHookAbstract in project wicket-orientdb by OrienteerBAP.
the class TestInAppOrientDBCompatibility method testValidationAndHooksOrder.
@Test
@Ignore
public void testValidationAndHooksOrder() {
ODatabaseDocument db = wicket.getTester().getDatabase();
OSchema schema = db.getMetadata().getSchema();
OClass classA = schema.createClass(TEST_VALIDATION_AND_HOOKS_CLASS);
classA.createProperty("property1", OType.STRING).setNotNull(true);
classA.createProperty("property2", OType.STRING).setReadonly(true);
classA.createProperty("property3", OType.STRING).setMandatory(true);
db.registerHook(new ODocumentHookAbstract(db) {
@Override
public RESULT onRecordBeforeCreate(ODocument doc) {
doc.field("property1", "value1-create");
doc.field("property2", "value2-create");
doc.field("property3", "value3-create");
return RESULT.RECORD_CHANGED;
}
@Override
public RESULT onRecordBeforeUpdate(ODocument doc) {
doc.undo("property2");
if (doc.field("property3") == null)
doc.field("property3", "value3-update");
return RESULT.RECORD_CHANGED;
}
@Override
public DISTRIBUTED_EXECUTION_MODE getDistributedExecutionMode() {
return DISTRIBUTED_EXECUTION_MODE.SOURCE_NODE;
}
});
ODocument doc = new ODocument(classA);
// doc.field("property3", "value3-create"); //Magic line #1
doc.save();
assertEquals("value1-create", doc.field("property1"));
assertEquals("value2-create", doc.field("property2"));
assertEquals("value3-create", doc.field("property3"));
doc.field("property1", "value1-update");
doc.field("property2", "value2-update");
doc.removeField("property3");
// doc.undo("property2"); //Magic line #2
// doc.field("property3", "value3-update"); //Magic line #3
doc.save();
assertEquals("value1-update", doc.field("property1"));
assertEquals("value2-create", doc.field("property2"));
assertEquals("value3-update", doc.field("property3"));
}
use of com.orientechnologies.orient.core.hook.ODocumentHookAbstract in project wicket-orientdb by OrienteerBAP.
the class TestInAppOrientDBCompatibility method testUpdatesInHooks.
@Test
@Ignore
public void testUpdatesInHooks() {
final String className = "TestUpdatesInHook";
ODatabaseDocument db = wicket.getTester().getDatabase();
db.registerHook(new ODocumentHookAbstract(db) {
{
setIncludeClasses(className);
}
@Override
public DISTRIBUTED_EXECUTION_MODE getDistributedExecutionMode() {
return DISTRIBUTED_EXECUTION_MODE.SOURCE_NODE;
}
@Override
public RESULT onRecordBeforeCreate(ODocument iDocument) {
return onRecordBeforeUpdate(iDocument);
}
@Override
public RESULT onRecordBeforeUpdate(ODocument iDocument) {
iDocument.undo("b");
return RESULT.RECORD_CHANGED;
}
@Override
public void onRecordAfterCreate(ODocument iDocument) {
onRecordAfterUpdate(iDocument);
}
@Override
public void onRecordAfterUpdate(ODocument iDocument) {
onRecordAfterRead(iDocument);
}
@Override
public void onRecordAfterRead(ODocument iDocument) {
if (!iDocument.containsField("b"))
iDocument.field("b", (Object) iDocument.field("a"));
}
});
OSchema schema = db.getMetadata().getSchema();
OClass classA = schema.createClass(className);
classA.createProperty("a", OType.STRING);
classA.createProperty("b", OType.STRING);
db.commit();
ODocument doc = new ODocument(classA);
/*doc.field("a", "test1");
doc.save();
doc.reload();
assertEquals(doc.field("a"), doc.field("b"));
doc.field("a", "test2");
doc.save();
doc.reload();
assertEquals(doc.field("a"), doc.field("b"));*/
db.begin();
doc.field("a", "test3");
doc.save();
doc.reload();
// doc = db.reload(doc, null, true);
assertEquals((Object) doc.field("a"), (Object) doc.field("b"));
doc.field("a", "test4");
doc.save();
doc.reload();
// doc = db.reload(doc, null, true);
assertEquals((Object) doc.field("a"), (Object) doc.field("b"));
db.commit();
}
use of com.orientechnologies.orient.core.hook.ODocumentHookAbstract in project wicket-orientdb by OrienteerBAP.
the class TestInAppOrientDBCompatibility method testDocumentTrackingComplex.
@Test
@Ignore
public void testDocumentTrackingComplex() {
final String className = "TestDocumentTrackingComplex";
ODatabaseDocument db = wicket.getTester().getDatabase();
OSchema schema = db.getMetadata().getSchema();
final OClass classA = schema.createClass(className);
classA.createProperty("a", OType.STRING);
classA.createProperty("b", OType.STRING);
db.registerHook(new ODocumentHookAbstract(db) {
{
setIncludeClasses(className);
}
@Override
public DISTRIBUTED_EXECUTION_MODE getDistributedExecutionMode() {
return DISTRIBUTED_EXECUTION_MODE.SOURCE_NODE;
}
@Override
public void onRecordAfterCreate(ODocument iDocument) {
System.out.println("onRecordAfterCreate");
iDocument.field("a", "onRecordAfterCreate");
}
@Override
public void onRecordAfterUpdate(ODocument iDocument) {
System.out.println("onRecordAfterUpdate");
iDocument.field("a", "onRecordAfterUpdate");
}
@Override
public RESULT onRecordBeforeUpdate(ODocument iDocument) {
System.out.println("onRecordAfterUpdate before undo: " + iDocument.field("a"));
iDocument.undo("a");
System.out.println("onRecordAfterUpdate after undo: " + iDocument.field("a"));
return RESULT.RECORD_CHANGED;
}
@Override
public void onRecordAfterRead(ODocument iDocument) {
assertEquals("original", iDocument.field("a"));
}
});
db.commit();
ODocument doc = new ODocument(classA);
doc.field("a", "original");
doc.save();
doc.field("b", "other change");
doc.save();
doc.reload();
doc.field("a", "updated");
doc.save();
doc.field("b", "other change");
doc.save();
doc.reload();
doc.delete();
}
use of com.orientechnologies.orient.core.hook.ODocumentHookAbstract in project orientdb by orientechnologies.
the class HookChangeValidationTest method testHookUpdateChange.
@Test
public void testHookUpdateChange() {
ODatabaseDocument db = new ODatabaseDocumentTx("memory:" + HookChangeValidationTest.class.getName());
db.create();
try {
OSchema schema = db.getMetadata().getSchema();
OClass classA = schema.createClass("TestClass");
classA.createProperty("property1", OType.STRING).setNotNull(true);
classA.createProperty("property2", OType.STRING).setReadonly(true);
classA.createProperty("property3", OType.STRING).setMandatory(true);
db.registerHook(new ODocumentHookAbstract() {
@Override
public RESULT onRecordBeforeCreate(ODocument doc) {
return RESULT.RECORD_NOT_CHANGED;
}
@Override
public RESULT onRecordBeforeUpdate(ODocument doc) {
doc.removeField("property1");
doc.removeField("property2");
doc.removeField("property3");
return RESULT.RECORD_CHANGED;
}
@Override
public DISTRIBUTED_EXECUTION_MODE getDistributedExecutionMode() {
return DISTRIBUTED_EXECUTION_MODE.SOURCE_NODE;
}
});
ODocument doc = new ODocument(classA);
doc.field("property1", "value1-create");
doc.field("property2", "value2-create");
doc.field("property3", "value3-create");
doc.save();
assertEquals("value1-create", doc.field("property1"));
assertEquals("value2-create", doc.field("property2"));
assertEquals("value3-create", doc.field("property3"));
doc.field("property1", "value1-update");
doc.field("property2", "value2-update");
try {
doc.save();
Assert.fail("The document save should fail for validation exception");
} catch (OValidationException ex) {
}
} finally {
db.drop();
}
}
Aggregations