All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.umlg.tests.changenotification.TestChangeNotification Maven / Gradle / Ivy

The newest version!
package org.umlg.tests.changenotification;

import org.junit.Assert;
import org.junit.Test;
import org.umlg.concretetest.God;
import org.umlg.runtime.adaptor.UMLG;
import org.umlg.runtime.notification.NotificationListener;
import org.umlg.runtime.test.BaseLocalDbTest;

import java.util.ArrayList;
import java.util.List;

/**
 * Date: 2014/08/31
 * Time: 2:47 PM
 */
public class TestChangeNotification extends BaseLocalDbTest {

    @Test
    public void testChangeNotification() throws InterruptedException {
        List addValues = new ArrayList<>();
        List removeValues = new ArrayList<>();
        List deleteValues = new ArrayList<>();
        UMLG.get().registerListener(
                God.GodRuntimePropertyEnum.name,
                (commitType, umlGnode, propertyType, changeType, value) -> {
                    if (commitType == NotificationListener.COMMIT_TYPE.AFTER_COMMIT) {
                        switch (changeType) {
                            case ADD:
                                addValues.add((String) value);
                                break;
                            case REMOVE:
                                removeValues.add((String) value);
                                break;
                        }
                        UMLG.get().commit();
                    }
                }
        );
        God god = new God();
        god.setName("halo");
        UMLG.get().commit();
        Thread.sleep(2000);
        Assert.assertEquals(2, addValues.size());
        Assert.assertEquals(1, removeValues.size());
        Assert.assertEquals(0, deleteValues.size());

//        Assert.assertEquals("whatajol", addValues.get(0));
//        Assert.assertEquals("halo", addValues.get(1));
//        Assert.assertEquals("whatajol", removeValues.get(0));
    }

//    @Test
//    public void testChangeListenerOnAssociationEnd() {
//        List addValues = new ArrayList<>();
//        List removeValues = new ArrayList<>();
//        List deleteValues = new ArrayList<>();
//        UMLG.get().registerListener(
//                God.GodRuntimePropertyEnum.angel,
//                (commitType, umlgNode, propertyType, changeType, value) -> {
//                    if (commitType == NotificationListener.COMMIT_TYPE.AFTER_COMMIT) {
//                        switch (changeType) {
//                            case ADD:
//                                addValues.add((Angel) value);
//                                break;
//                            case REMOVE:
//                                removeValues.add((Angel) value);
//                                break;
//                        }
//                    }
//                }
//        );
//        God god = new God();
//        god.setName("god");
//        Angel angel = new Angel(god);
//        angel.setName("asdasd");
//        UMLG.get().commit();
//        Assert.assertEquals(1, addValues.size());
//        Assert.assertEquals(0, removeValues.size());
//        Assert.assertEquals(0, deleteValues.size());
//        Assert.assertEquals(angel, addValues.get(0));
//    }
//
//    @Test
//    public void testChangeListenerOnAssociationEndForDelete() throws IOException {
//        List addValues = new ArrayList<>();
//        List removeValues = new ArrayList<>();
//        List deleteValues = new ArrayList<>();
//        UMLG.get().registerListener(
//                God.GodRuntimePropertyEnum.angel,
//                (commitType, unkgNode, propertyEnum, changeType, value) -> {
//                    if (commitType == NotificationListener.COMMIT_TYPE.AFTER_COMMIT) {
//                        switch (changeType) {
//                            case ADD:
//                                addValues.add((Angel) value);
//                                break;
//                            case REMOVE:
//                                removeValues.add((Angel) value);
//                                break;
//                            case DELETE:
//                                deleteValues.add((String) value);
//                                break;
//                        }
//                    }
//                }
//        );
//        God god = new God();
//        god.setName("god");
//        Angel angel = new Angel(god);
//        angel.setName("asdasd");
//        UMLG.get().commit();
//        Assert.assertEquals(1, addValues.size());
//        Assert.assertEquals(0, removeValues.size());
//        Assert.assertEquals(0, deleteValues.size());
//        Long idToTest = angel.getId();
//        angel.delete();
//        addValues.clear();
//        removeValues.clear();
//        UMLG.get().commit();
//
//        Assert.assertEquals(0, addValues.size());
//        Assert.assertEquals(0, removeValues.size());
//        Assert.assertEquals(1, deleteValues.size());
//        Assert.assertEquals(String.valueOf(idToTest), ObjectMapperFactory.INSTANCE.getObjectMapper().readValue(deleteValues.get(0), Map.class).get("id"));
//    }
//
//    @Test
//    public void testManyToManyChange() {
//        List addValues = new ArrayList<>();
//        List removeValues = new ArrayList<>();
//        List deleteValues = new ArrayList<>();
//        UMLG.get().registerListener(
//                A.ARuntimePropertyEnum.b,
//                (commitType, umlgNode, propertyEnum, changeType, value) -> {
//                    if (commitType == NotificationListener.COMMIT_TYPE.AFTER_COMMIT) {
//                        switch (changeType) {
//                            case ADD:
//                                addValues.add((B) value);
//                                break;
//                            case REMOVE:
//                                removeValues.add((B) value);
//                                break;
//                            case DELETE:
//                                deleteValues.add((String) value);
//                                break;
//                        }
//                    }
//                }
//        );
//
//        A a1 = new A();
//        A a2 = new A();
//        A a3 = new A();
//        B b1 = new B();
//        B b2 = new B();
//        B b3 = new B();
//        a1.addToB(b1);
//        a1.addToB(b2);
//        a2.addToB(b1);
//        a2.addToB(b2);
//        a3.addToB(b1);
//        a3.addToB(b2);
//        UMLG.get().commit();
//
//        addValues.clear();
//        removeValues.clear();
//        deleteValues.clear();
//
//        //add some
//        a1.addToB(b3);
//        a2.addToB(b3);
//        UMLG.get().commit();
//        Assert.assertEquals(2, addValues.size());
//
//        //remove some
//        addValues.clear();
//        removeValues.clear();
//        deleteValues.clear();
//        a1.removeFromB(b3);
//        a2.removeFromB(b3);
//        UMLG.get().commit();
//        Assert.assertEquals(0, addValues.size());
//        Assert.assertEquals(2, removeValues.size());
//
//        addValues.clear();
//        removeValues.clear();
//        deleteValues.clear();
//        b1.delete();
//        UMLG.get().commit();
//        Assert.assertEquals(0, addValues.size());
//        Assert.assertEquals(0, removeValues.size());
//        //this is 3 as it is called for each a that has an association to b1
//        Assert.assertEquals(3, deleteValues.size());
//    }
}