Search in sources :

Example 6 with ODocumentHookAbstract

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"));
    }
}
Also used : OSchema(com.orientechnologies.orient.core.metadata.schema.OSchema) ODocumentHookAbstract(com.orientechnologies.orient.core.hook.ODocumentHookAbstract) ODatabaseDocument(com.orientechnologies.orient.core.db.document.ODatabaseDocument) OClass(com.orientechnologies.orient.core.metadata.schema.OClass) RESULT(com.orientechnologies.orient.core.hook.ORecordHook.RESULT) ODocument(com.orientechnologies.orient.core.record.impl.ODocument) DISTRIBUTED_EXECUTION_MODE(com.orientechnologies.orient.core.hook.ORecordHook.DISTRIBUTED_EXECUTION_MODE) Test(org.junit.Test)

Example 7 with ODocumentHookAbstract

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"));
}
Also used : OSchema(com.orientechnologies.orient.core.metadata.schema.OSchema) ODocumentHookAbstract(com.orientechnologies.orient.core.hook.ODocumentHookAbstract) ODatabaseDocument(com.orientechnologies.orient.core.db.document.ODatabaseDocument) OClass(com.orientechnologies.orient.core.metadata.schema.OClass) RESULT(com.orientechnologies.orient.core.hook.ORecordHook.RESULT) ODocument(com.orientechnologies.orient.core.record.impl.ODocument) DISTRIBUTED_EXECUTION_MODE(com.orientechnologies.orient.core.hook.ORecordHook.DISTRIBUTED_EXECUTION_MODE) Ignore(org.junit.Ignore) Test(org.junit.Test)

Example 8 with ODocumentHookAbstract

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();
}
Also used : OSchema(com.orientechnologies.orient.core.metadata.schema.OSchema) ODocumentHookAbstract(com.orientechnologies.orient.core.hook.ODocumentHookAbstract) ODatabaseDocument(com.orientechnologies.orient.core.db.document.ODatabaseDocument) OClass(com.orientechnologies.orient.core.metadata.schema.OClass) RESULT(com.orientechnologies.orient.core.hook.ORecordHook.RESULT) DISTRIBUTED_EXECUTION_MODE(com.orientechnologies.orient.core.hook.ORecordHook.DISTRIBUTED_EXECUTION_MODE) ODocument(com.orientechnologies.orient.core.record.impl.ODocument) Ignore(org.junit.Ignore) Test(org.junit.Test)

Example 9 with ODocumentHookAbstract

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();
}
Also used : OSchema(com.orientechnologies.orient.core.metadata.schema.OSchema) ODocumentHookAbstract(com.orientechnologies.orient.core.hook.ODocumentHookAbstract) ODatabaseDocument(com.orientechnologies.orient.core.db.document.ODatabaseDocument) OClass(com.orientechnologies.orient.core.metadata.schema.OClass) RESULT(com.orientechnologies.orient.core.hook.ORecordHook.RESULT) DISTRIBUTED_EXECUTION_MODE(com.orientechnologies.orient.core.hook.ORecordHook.DISTRIBUTED_EXECUTION_MODE) ODocument(com.orientechnologies.orient.core.record.impl.ODocument) Ignore(org.junit.Ignore) Test(org.junit.Test)

Example 10 with ODocumentHookAbstract

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();
    }
}
Also used : OValidationException(com.orientechnologies.orient.core.exception.OValidationException) OSchema(com.orientechnologies.orient.core.metadata.schema.OSchema) ODocumentHookAbstract(com.orientechnologies.orient.core.hook.ODocumentHookAbstract) ODatabaseDocument(com.orientechnologies.orient.core.db.document.ODatabaseDocument) OClass(com.orientechnologies.orient.core.metadata.schema.OClass) ODatabaseDocumentTx(com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx) ODocument(com.orientechnologies.orient.core.record.impl.ODocument) Test(org.testng.annotations.Test)

Aggregations

ODatabaseDocument (com.orientechnologies.orient.core.db.document.ODatabaseDocument)10 ODocumentHookAbstract (com.orientechnologies.orient.core.hook.ODocumentHookAbstract)10 OClass (com.orientechnologies.orient.core.metadata.schema.OClass)10 OSchema (com.orientechnologies.orient.core.metadata.schema.OSchema)10 ODocument (com.orientechnologies.orient.core.record.impl.ODocument)10 ODatabaseDocumentTx (com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx)5 DISTRIBUTED_EXECUTION_MODE (com.orientechnologies.orient.core.hook.ORecordHook.DISTRIBUTED_EXECUTION_MODE)5 Test (org.junit.Test)5 Test (org.testng.annotations.Test)5 OValidationException (com.orientechnologies.orient.core.exception.OValidationException)4 RESULT (com.orientechnologies.orient.core.hook.ORecordHook.RESULT)4 Ignore (org.junit.Ignore)3 OSQLSynchQuery (com.orientechnologies.orient.core.sql.query.OSQLSynchQuery)2 List (java.util.List)2