/************************************************************************ * Copyright (c) 2014 IoT-Solutions e.U. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ************************************************************************/ package test.domainmapping; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertEquals; import iot.jcypher.database.DBAccessFactory; import iot.jcypher.database.DBProperties; import iot.jcypher.database.DBType; import iot.jcypher.database.IDBAccess; import iot.jcypher.domain.DomainAccessFactory; import iot.jcypher.domain.DomainInformation; import iot.jcypher.domain.DomainInformation.DomainObjectType; import iot.jcypher.domain.IDomainAccess; import iot.jcypher.domain.SyncInfo; import iot.jcypher.graph.GrNode; import iot.jcypher.graph.GrProperty; import iot.jcypher.graph.GrPropertyContainer; import iot.jcypher.graph.GrRelation; import iot.jcypher.query.JcQuery; import iot.jcypher.query.JcQueryResult; import iot.jcypher.query.api.IClause; import iot.jcypher.query.factories.clause.MATCH; import iot.jcypher.query.factories.clause.RETURN; import iot.jcypher.query.factories.clause.SEPARATE; import iot.jcypher.query.factories.clause.WHERE; import iot.jcypher.query.result.JcError; import iot.jcypher.query.result.JcResultException; import iot.jcypher.query.values.JcNode; import iot.jcypher.query.values.JcRelation; import iot.jcypher.util.Util; import java.util.ArrayList; import java.util.Calendar; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Properties; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import test.AbstractTestSuite; import test.DBAccessSettings; import test.domainmapping.ambiguous.Broker; import test.domainmapping.ambiguous.District; import test.domainmapping.ambiguous.DistrictAddress; import test.domainmapping.ambiguous.IPerson; import test.domainmapping.ambiguous.JPerson; import test.domainmapping.ambiguous.MultiBroker; import test.domainmapping.ambiguous.NPerson; import test.domainmapping.inner.MyClass; import test.domainmapping.inner.MyClass.MyInnerClass.MyInnerInnerClass; import test.domainmapping.inner.MyInterface; import test.domainmapping.inner.MyClass.MyInnerClass; import test.domainmapping.inner.MyClass.MyStaticInnerClass; import test.domainmapping.inner.MyOtherClass; import test.domainmapping.maps.MapContainer; import test.domainmapping.maps.Mark; import test.domainmapping.maps.MultiDimMapsLists; import test.domainmapping.resolutiondepth.LinkedElement; import test.domainmapping.util.CompareUtil; import test.domainmapping.util.CompareUtil_2; import test.domainmapping.util.CompareUtil_3; import test.domainmapping.util.CompareUtil_4; public class DomainMappingTest extends AbstractTestSuite{ private static IDBAccess dbAccess; private static String domainName; @BeforeClass public static void before() { domainName = "TEST-DOMAIN"; dbAccess = DBAccessSettings.createDBAccess(); } @AfterClass public static void after() { if (dbAccess != null) { dbAccess.close(); dbAccess = null; } } @Test public void testClearDomain() { IDomainAccess da = DomainAccessFactory.createDomainAccess(dbAccess, domainName); List<JcError> errors; Person john = new Person(); Address address = new Address(); Contact phone = new Contact(); Contact email = new Contact(); Person james = new Person(); buildInitialDomainObjects_1(john, james, address, phone, email, null, null); List<Object> domainObjects = new ArrayList<Object>(); domainObjects.add(john); domainObjects.add(james); errors = da.store(domainObjects); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } boolean check = dbAccess.isDatabaseEmpty(); assertFalse("Test Domain not empty", check); errors = dbAccess.clearDatabase(); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } check = dbAccess.isDatabaseEmpty(); assertTrue("Test Domain is empty", check); return; } @Test public void testInnerClass() { List<JcError> errors; IDomainAccess da = DomainAccessFactory.createDomainAccess(dbAccess, domainName); IDomainAccess da1; boolean equals; MyClass myClass = new MyClass(); myClass.setName("My Class"); MyInnerClass myInnerClass = myClass.createInnerClass(); myInnerClass.setName("My inner Class"); MyInnerClass myInnerClass_2 = myClass.createInnerClass(); myInnerClass_2.setName("My inner Class 2"); MyInnerInnerClass myInnerInnerClass = myInnerClass.createInnerInnerClass(); myInnerInnerClass.setName("My inner inner Class"); MyInnerInnerClass myInnerInnerClass_2 = myInnerClass_2.createInnerInnerClass(); myInnerInnerClass_2.setName("My inner inner Class 2"); myInnerClass.setMyInnerInnerClass(myInnerInnerClass); MyStaticInnerClass myStaticInnerClass = new MyStaticInnerClass(); myStaticInnerClass.setName("My static inner Class"); MyOtherClass myOtherClass = new MyOtherClass(); myOtherClass.setMyInnerClass(myInnerClass); myOtherClass.setMyInnerInnerClass(myInnerInnerClass_2); myOtherClass.setMyStaticInnerClass(myStaticInnerClass); myClass = new MyClass(); myClass.setName("My Class next"); myInnerClass = myClass.createInnerClass(); myInnerClass.setName("My inner Class next"); myInnerInnerClass = myInnerClass.createInnerInnerClass(); myInnerInnerClass.setName("My inner inner Class next"); myStaticInnerClass = new MyStaticInnerClass(); myStaticInnerClass.setName("My static inner Class next"); myClass.setMyInnerClass(myInnerClass); myInnerClass.setMyInnerInnerClass(myInnerInnerClass); myClass.setMyStaticInnerClass(myStaticInnerClass); // myClass.setMyInterface(new MyInterface() { // // @Override // public int getNumber() { // return 0; // } // }); MyClass myClass_1; MyOtherClass myOtherClass_1; errors = dbAccess.clearDatabase(); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } errors = da.store(myOtherClass); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } errors = da.store(myClass); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } SyncInfo syncInfo_1 = da.getSyncInfo(myOtherClass); SyncInfo syncInfo_2 = da.getSyncInfo(myClass); da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); myOtherClass_1 = da1.loadById(MyOtherClass.class, -1, syncInfo_1.getId()); myClass_1 = da1.loadById(MyClass.class, -1, syncInfo_2.getId()); equals = myOtherClass.getMyInnerClass().getName().equals(myOtherClass_1.getMyInnerClass().getName()) && myOtherClass.getMyInnerClass().getMyInnerInnerClass().getName().equals( myOtherClass_1.getMyInnerClass().getMyInnerInnerClass().getName()) && myOtherClass.getMyInnerInnerClass().getName().equals(myOtherClass_1.getMyInnerInnerClass().getName()) && myOtherClass.getMyStaticInnerClass().getName().equals(myOtherClass_1.getMyStaticInnerClass().getName()); assertTrue(equals); equals = myClass.getName().equals(myClass_1.getName()) && myClass.getMyInnerClass().getName().equals(myClass_1.getMyInnerClass().getName()) && myClass.getMyInnerClass().getMyInnerInnerClass().getName().equals( myClass_1.getMyInnerClass().getMyInnerInnerClass().getName()) && myClass.getMyStaticInnerClass().getName().equals(myClass_1.getMyStaticInnerClass().getName()); assertTrue(equals); return; } @Test public void testUniqueLabels() { List<JcError> errors; IDomainAccess da = DomainAccessFactory.createDomainAccess(dbAccess, domainName); IDomainAccess da1; boolean equals; test.domainmapping.unique_label.Person person, person_1; test.domainmapping.unique_label.other.Person otherPerson, otherPerson_1; person = new test.domainmapping.unique_label.Person(); person.setFirstName("John"); person.setLastName("Smith"); otherPerson = new test.domainmapping.unique_label.other.Person(); otherPerson.setName("John Smith"); List<Object> domainObjects = new ArrayList<Object>(); domainObjects.add(person); domainObjects.add(otherPerson); errors = dbAccess.clearDatabase(); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } errors = da.store(domainObjects); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } SyncInfo syncInfo_1 = da.getSyncInfo(person); SyncInfo syncInfo_2 = da.getSyncInfo(otherPerson); da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); person_1 = da1.loadById(test.domainmapping.unique_label.Person.class, -1, syncInfo_1.getId()); otherPerson_1 = da1.loadById(test.domainmapping.unique_label.other.Person.class, -1, syncInfo_2.getId()); equals = person.getFirstName().equals(person_1.getFirstName()) && person.getLastName().equals(person_1.getLastName()) && otherPerson.getName().equals(otherPerson_1.getName()); assertTrue(equals); return; } @Test public void testRecursiveArrays() { List<JcError> errors; IDomainAccess da = DomainAccessFactory.createDomainAccess(dbAccess, domainName); IDomainAccess da1; MultiDimMapsLists multiDimMapsLists = new MultiDimMapsLists(); MultiDimMapsLists multiDimMapsLists_1; boolean equals; Object[] array = new Object[1]; array[0] = array; multiDimMapsLists.setMultiDimArray(array); errors = dbAccess.clearDatabase(); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } errors = da.store(multiDimMapsLists); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } SyncInfo syncInfo_1 = da.getSyncInfo(multiDimMapsLists); da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); multiDimMapsLists_1 = da1.loadById(MultiDimMapsLists.class, -1, syncInfo_1.getId()); equals = CompareUtil_3.equalsMultiDimMapsLists(multiDimMapsLists, multiDimMapsLists_1); assertTrue(equals); return; } @Test public void testMultiArrays() { List<JcError> errors; IDomainAccess da = DomainAccessFactory.createDomainAccess(dbAccess, domainName); IDomainAccess da1; MultiDimMapsLists multiDimMapsLists = new MultiDimMapsLists(); MultiDimMapsLists multiDimMapsLists_1; boolean equals; Address first = new Address(); DistrictAddress second = new DistrictAddress(); Address third = new Address(); buildMapTestAny2Any(first, second, third); List<Object> multiDimList = new ArrayList<Object>(); Object[] array = new Object[] {first, second, third, multiDimList}; multiDimList.add(first); multiDimList.add(second); multiDimList.add(third); multiDimList.add(array); multiDimMapsLists.setMultiDimList(multiDimList); multiDimMapsLists.setMultiDimArray(array); errors = dbAccess.clearDatabase(); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } errors = da.store(multiDimMapsLists); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } SyncInfo syncInfo_1 = da.getSyncInfo(multiDimMapsLists); da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); multiDimMapsLists_1 = da1.loadById(MultiDimMapsLists.class, -1, syncInfo_1.getId()); equals = CompareUtil_3.equalsMultiDimMapsLists(multiDimMapsLists, multiDimMapsLists_1); assertTrue(equals); return; } @Test public void testArrays() { List<JcError> errors; IDomainAccess da = DomainAccessFactory.createDomainAccess(dbAccess, domainName); IDomainAccess da1; MultiDimMapsLists multiDimMapsLists = new MultiDimMapsLists(); MultiDimMapsLists multiDimMapsLists_1; boolean equals; Address first = new Address(); DistrictAddress second = new DistrictAddress(); Address third = new Address(); buildMapTestAny2Any(first, second, third); Object[] array = new Object[] {first, second, third}; multiDimMapsLists.setMultiDimArray(array); errors = dbAccess.clearDatabase(); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } errors = da.store(multiDimMapsLists); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } SyncInfo syncInfo_1 = da.getSyncInfo(multiDimMapsLists); da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); multiDimMapsLists_1 = da1.loadById(MultiDimMapsLists.class, -1, syncInfo_1.getId()); equals = CompareUtil_3.equalsMultiDimMapsLists(multiDimMapsLists, multiDimMapsLists_1); assertTrue(equals); array[0] = 1; array[1] = 2; array[2] = 3; errors = da.store(multiDimMapsLists); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); multiDimMapsLists_1 = da1.loadById(MultiDimMapsLists.class, -1, syncInfo_1.getId()); equals = CompareUtil_3.equalsMultiDimMapsLists(multiDimMapsLists, multiDimMapsLists_1); assertTrue(equals); array[0] = first; array[1] = second; array[2] = third; errors = da.store(multiDimMapsLists); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); multiDimMapsLists_1 = da1.loadById(MultiDimMapsLists.class, -1, syncInfo_1.getId()); equals = CompareUtil_3.equalsMultiDimMapsLists(multiDimMapsLists, multiDimMapsLists_1); assertTrue(equals); multiDimMapsLists.setMultiDimArray(null); errors = da.store(multiDimMapsLists); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); multiDimMapsLists_1 = da1.loadById(MultiDimMapsLists.class, -1, syncInfo_1.getId()); equals = CompareUtil_3.equalsMultiDimMapsLists(multiDimMapsLists, multiDimMapsLists_1); assertTrue(equals); } @Test public void testLoadByType() { List<JcError> errors; IDomainAccess da = DomainAccessFactory.createDomainAccess(dbAccess, domainName); Broker broker1 = new Broker(); Broker broker2 = new Broker(); MultiBroker multiBroker = new MultiBroker(); List<Object> addresses = buildAmbiguousTestObjects(broker1, broker2, multiBroker); errors = dbAccess.clearDatabase(); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } List<Object> domainObjects = new ArrayList<Object>(); domainObjects.add(broker1); domainObjects.add(broker2); errors = da.store(domainObjects); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } IDomainAccess da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); List<Address> result = da1.loadByType(Address.class, -1, 0, -1); boolean equals = CompareUtil_3.equalsUnorderedList(addresses, result); assertTrue(equals); da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); List<Object> result_1 = da1.loadByType(Object.class, -1, 0, -1); da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); List<Object> result_2 = da1.loadByType(Object.class, -1, 5, 3); List<Object> compare = result_1.subList(5, 8); equals = CompareUtil_3.equalsList(compare, result_2); assertTrue(equals); da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); List<Object> result_3 = da1.loadByType(Object.class, -1, 4, 3); compare = result_1.subList(4, 7); equals = CompareUtil_3.equalsList(compare, result_3); assertTrue(equals); da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); result_1 = da1.loadByType(Object.class, -1, 0, -1); result_2 = da1.loadByType(Object.class, -1, 5, 3); equals = result_2.get(0) == result_1.get(5) && result_2.get(1) == result_1.get(6) && result_2.get(2) == result_1.get(7); assertTrue(equals); result_3 = da1.loadByType(Object.class, -1, 4, 3); equals = result_3.get(0) == result_1.get(4) && result_3.get(1) == result_1.get(5) && result_3.get(2) == result_1.get(6); assertTrue(equals); return; } @Test public void testDomainInformation() { List<JcError> errors; IDomainAccess da = DomainAccessFactory.createDomainAccess(dbAccess, "TEST-1-DOMAIN"); IDomainAccess da1 = DomainAccessFactory.createDomainAccess(dbAccess, "TEST-2-DOMAIN"); Address address = new Address(); address.setCity("Vienna"); address.setStreet("Alserstrasse"); address.setNumber(10); errors = dbAccess.clearDatabase(); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } errors = da.store(address); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } errors = da1.store(address); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } List<String> available = DomainInformation.availableDomains(dbAccess); assertEquals("[TEST-1-DOMAIN, TEST-2-DOMAIN]", available.toString()); return; } @Test public void testDomainInformation_02() { List<JcError> errors; IDomainAccess da = DomainAccessFactory.createDomainAccess(dbAccess, domainName); DomainInformation di; Broker broker1 = new Broker(); Broker broker2 = new Broker(); MultiBroker multiBroker = new MultiBroker(); buildAmbiguousTestObjects(broker1, broker2, multiBroker); errors = dbAccess.clearDatabase(); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } List<Object> domainObjects = new ArrayList<Object>(); domainObjects.add(broker1); domainObjects.add(broker2); errors = da.store(domainObjects); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } di = DomainInformation.forDomain(dbAccess, domainName); List<DomainObjectType> doTypes = di.getDomainObjectTypes(); assertEquals("[DomainObjectType [typeName=test.domainmapping.Address]," + " DomainObjectType [typeName=test.domainmapping.ambiguous.Broker]," + " DomainObjectType [typeName=test.domainmapping.ambiguous.District]," + " DomainObjectType [typeName=test.domainmapping.ambiguous.DistrictAddress]," + " DomainObjectType [typeName=test.domainmapping.ambiguous.JPerson]," + " DomainObjectType [typeName=test.domainmapping.ambiguous.NPerson]]", doTypes.toString()); // once more to check for stored infoNodeId List<DomainObjectType> doTypes_1 = di.getDomainObjectTypes(); assertEquals("[DomainObjectType [typeName=test.domainmapping.Address]," + " DomainObjectType [typeName=test.domainmapping.ambiguous.Broker]," + " DomainObjectType [typeName=test.domainmapping.ambiguous.District]," + " DomainObjectType [typeName=test.domainmapping.ambiguous.DistrictAddress]," + " DomainObjectType [typeName=test.domainmapping.ambiguous.JPerson]," + " DomainObjectType [typeName=test.domainmapping.ambiguous.NPerson]]", doTypes_1.toString()); List<Class<?>> types = di.getRawTypes(doTypes_1); IDomainAccess da1 = di.getDomainAccess(); List<Long> instancesCount = da1.numberOfInstancesOf(types); assertEquals("[7, 2, 2, 1, 1, 1]", instancesCount.toString()); return; } @Test public void testResolutionDepth() { List<JcError> errors; IDomainAccess da = DomainAccessFactory.createDomainAccess(dbAccess, domainName); IDomainAccess da1; boolean equals; LinkedElement last = new LinkedElement("6"); LinkedElement elem = new LinkedElement("0", new LinkedElement("1", new LinkedElement("2", new LinkedElement("3", new LinkedElement("4", new LinkedElement("5", last)))))); LinkedElement elem_1; errors = dbAccess.clearDatabase(); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } errors = da.store(elem); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } SyncInfo syncInfo_1 = da.getSyncInfo(elem); int depth = -1; da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); elem_1 = da1.loadById(LinkedElement.class, depth, syncInfo_1.getId()); equals = CompareUtil_4.equalsLinkedElements(elem, elem_1, depth); assertTrue(equals); int resolvedDepth = CompareUtil_4.getDepth(elem_1); assertEquals("resolution depth", 6, resolvedDepth); depth = 5; da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); elem_1 = da1.loadById(LinkedElement.class, depth, syncInfo_1.getId()); equals = CompareUtil_4.equalsLinkedElements(elem, elem_1, depth); assertTrue(equals); resolvedDepth = CompareUtil_4.getDepth(elem_1); assertEquals("resolution depth", depth, resolvedDepth); depth = 4; da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); elem_1 = da1.loadById(LinkedElement.class, depth, syncInfo_1.getId()); equals = CompareUtil_4.equalsLinkedElements(elem, elem_1, depth); assertTrue(equals); resolvedDepth = CompareUtil_4.getDepth(elem_1); assertEquals("resolution depth", depth, resolvedDepth); depth = 3; da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); elem_1 = da1.loadById(LinkedElement.class, depth, syncInfo_1.getId()); equals = CompareUtil_4.equalsLinkedElements(elem, elem_1, depth); assertTrue(equals); resolvedDepth = CompareUtil_4.getDepth(elem_1); assertEquals("resolution depth", depth, resolvedDepth); depth = 2; da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); elem_1 = da1.loadById(LinkedElement.class, depth, syncInfo_1.getId()); equals = CompareUtil_4.equalsLinkedElements(elem, elem_1, depth); assertTrue(equals); resolvedDepth = CompareUtil_4.getDepth(elem_1); assertEquals("resolution depth", depth, resolvedDepth); depth = 1; da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); elem_1 = da1.loadById(LinkedElement.class, depth, syncInfo_1.getId()); equals = CompareUtil_4.equalsLinkedElements(elem, elem_1, depth); assertTrue(equals); resolvedDepth = CompareUtil_4.getDepth(elem_1); assertEquals("resolution depth", depth, resolvedDepth); depth = 0; da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); elem_1 = da1.loadById(LinkedElement.class, depth, syncInfo_1.getId()); equals = CompareUtil_4.equalsLinkedElements(elem, elem_1, depth); assertTrue(equals); resolvedDepth = CompareUtil_4.getDepth(elem_1); assertEquals("resolution depth", depth, resolvedDepth); // close loop last.setNext(elem); errors = da.store(elem); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } depth = -1; da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); elem_1 = da1.loadById(LinkedElement.class, depth, syncInfo_1.getId()); equals = CompareUtil_4.equalsLinkedElements(elem, elem_1, depth); assertTrue(equals); resolvedDepth = CompareUtil_4.getDepth(elem_1); assertEquals("resolution depth", -1, resolvedDepth); // -1 ... loop List<Object> changed = new ArrayList<Object>(); LinkedElement el = elem; changed.add(el); LinkedElement nel = el.getNext(); while(nel != null) { el.setNext(null); el =nel; if (!changed.contains(el)) changed.add(el); nel = el.getNext(); } errors = da.store(changed); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } List<RelationsToCheck> rtc = new ArrayList<RelationsToCheck>(); rtc.add(new RelationsToCheck("next", 0)); boolean check = checkForNodesAndRelations(null, rtc); assertTrue("Test for relations in graph", check); return; } @Test public void testLists_Maps() { List<JcError> errors; IDomainAccess da = DomainAccessFactory.createDomainAccess(dbAccess, domainName); IDomainAccess da1; MultiDimMapsLists multiDimMapsLists = new MultiDimMapsLists(); MultiDimMapsLists multiDimMapsLists_1; boolean equals; List<Object> multiDimList = new ArrayList<Object>(); List<Object> multiDimList_1 = new ArrayList<Object>(); Map<Object, Object> multiDimMap = new HashMap<Object, Object>(); Map<Object, Object> multiDimMap_1 = new HashMap<Object, Object>(); multiDimList.add(new Mark("list_root")); multiDimMap.put("mark", new Mark("map_root")); multiDimList.add(multiDimMap); multiDimMap.put("list_root", multiDimList); multiDimMapsLists.setMultiDimList(multiDimList); multiDimMapsLists.setMultiDimMap(multiDimMap); errors = dbAccess.clearDatabase(); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } errors = da.store(multiDimMapsLists); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } SyncInfo syncInfo_1 = da.getSyncInfo(multiDimMapsLists); da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); Object obj = da1.loadById(Object.class, -1, syncInfo_1.getId()); assertTrue(obj instanceof MultiDimMapsLists); multiDimMapsLists_1 = (MultiDimMapsLists) obj; equals = CompareUtil_3.equalsMultiDimMapsLists(multiDimMapsLists, multiDimMapsLists_1); assertTrue(equals); multiDimList_1.add(new Mark("list_1")); multiDimMap_1.put("mark", new Mark("map_1")); multiDimList_1.add(multiDimMap_1); multiDimMap_1.put("list_1", multiDimList_1); multiDimList.add(multiDimList_1); multiDimMap.put("map_1", multiDimMap_1); errors = da.store(multiDimMapsLists); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); multiDimMapsLists_1 = da1.loadById(MultiDimMapsLists.class, -1, syncInfo_1.getId()); equals = CompareUtil_3.equalsMultiDimMapsLists(multiDimMapsLists, multiDimMapsLists_1); assertTrue(equals); return; } @Test public void testMultiList() { List<JcError> errors; IDomainAccess da = DomainAccessFactory.createDomainAccess(dbAccess, domainName); IDomainAccess da1; MultiDimMapsLists multiDimMapsLists = new MultiDimMapsLists(); MultiDimMapsLists multiDimMapsLists_1; boolean equals; Address first = new Address(); DistrictAddress second = new DistrictAddress(); Address third = new Address(); Address first_1 = new Address(); DistrictAddress second_1 = new DistrictAddress(); Address third_1 = new Address(); Address first_2 = new Address(); DistrictAddress second_2 = new DistrictAddress(); Address third_2 = new Address(); buildMapTestAny2Any(first, second, third); buildMapTestAny2Any(first_1, second_1, third_1); buildMapTestAny2Any(first_2, second_2, third_2); // init multiDimList List<Object> multiDimList = new ArrayList<Object>(); List<Object> multiDimList_1 = new ArrayList<Object>(); List<Object> multiDimList_2 = new ArrayList<Object>(); List<Object> multiDimList_3 = new ArrayList<Object>(); multiDimList_1.add(first_1); multiDimList_1.add(second_1); multiDimList_1.add(third_1); multiDimList_2.add("first"); multiDimList_2.add("second"); multiDimList_2.add("third"); multiDimList_3.add(100); multiDimList_3.add(200); multiDimList_3.add(300); multiDimList.add(first); multiDimList.add(multiDimList_1); multiDimList.add(multiDimList_2); multiDimList.add(multiDimList_3); // multiDimMapsLists.setMultiDimList(multiDimList_3); multiDimMapsLists.setMultiDimList(multiDimList); errors = dbAccess.clearDatabase(); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } errors = da.store(multiDimMapsLists); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } SyncInfo syncInfo_1 = da.getSyncInfo(multiDimMapsLists); da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); multiDimMapsLists_1 = da1.loadById(MultiDimMapsLists.class, -1, syncInfo_1.getId()); equals = CompareUtil_3.equalsMultiDimMapsLists(multiDimMapsLists, multiDimMapsLists_1); assertTrue(equals); multiDimList_3.clear(); multiDimList_3.add(second_1); errors = da.store(multiDimMapsLists); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); multiDimMapsLists_1 = da1.loadById(MultiDimMapsLists.class, -1, syncInfo_1.getId()); equals = CompareUtil_3.equalsMultiDimMapsLists(multiDimMapsLists, multiDimMapsLists_1); assertTrue(equals); boolean identical = ((List<?>)multiDimMapsLists_1.getMultiDimList().get(1)).get(1) == ((List<?>)multiDimMapsLists_1.getMultiDimList().get(3)).get(0); assertTrue(identical); multiDimList_3.clear(); multiDimList_3.add(multiDimMapsLists.getMultiDimList()); errors = da.store(multiDimMapsLists); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); multiDimMapsLists_1 = da1.loadById(MultiDimMapsLists.class, -1, syncInfo_1.getId()); equals = CompareUtil_3.equalsMultiDimMapsLists(multiDimMapsLists, multiDimMapsLists_1); assertTrue(equals); return; } @Test public void testMultiList_loop() { List<JcError> errors; IDomainAccess da = DomainAccessFactory.createDomainAccess(dbAccess, domainName); IDomainAccess da1; MultiDimMapsLists multiDimMapsLists = new MultiDimMapsLists(); MultiDimMapsLists multiDimMapsLists_1; boolean equals; // init multiDimList List<Object> multiDimList = new ArrayList<Object>(); List<Object> multiDimList_1 = new ArrayList<Object>(); multiDimList_1.add(multiDimList); multiDimList.add(multiDimList_1); multiDimMapsLists.setMultiDimList(multiDimList); errors = dbAccess.clearDatabase(); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } errors = da.store(multiDimMapsLists); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } SyncInfo syncInfo_1 = da.getSyncInfo(multiDimMapsLists); da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); multiDimMapsLists_1 = da1.loadById(MultiDimMapsLists.class, -1, syncInfo_1.getId()); equals = CompareUtil_3.equalsMultiDimMapsLists(multiDimMapsLists, multiDimMapsLists_1); assertTrue(equals); return; } @Test public void testMultiList_loop_02() { List<JcError> errors; IDomainAccess da = DomainAccessFactory.createDomainAccess(dbAccess, domainName); IDomainAccess da1; MultiDimMapsLists multiDimMapsLists = new MultiDimMapsLists(); MultiDimMapsLists multiDimMapsLists_1; boolean equals; // init multiDimList List<Object> multiDimList = new ArrayList<Object>(); List<Object> multiDimList_1 = new ArrayList<Object>(); List<Object> multiDimList_2 = new ArrayList<Object>(); List<Object> multiDimList_3 = new ArrayList<Object>(); multiDimList_3.add(new Mark("three")); multiDimList_3.add(multiDimList_1); multiDimList_3.add(multiDimList_1); multiDimList_3.add(multiDimList); multiDimList_2.add(new Mark("two")); multiDimList_2.add(multiDimList_3); multiDimList_2.add(multiDimList_1); multiDimList_2.add(multiDimList_2); multiDimList_1.add(new Mark("one")); multiDimList_1.add(multiDimList_2); multiDimList.add(new Mark("root")); multiDimList.add(multiDimList_1); multiDimMapsLists.setMultiDimList(multiDimList); errors = dbAccess.clearDatabase(); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } errors = da.store(multiDimMapsLists); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } SyncInfo syncInfo_1 = da.getSyncInfo(multiDimMapsLists); da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); multiDimMapsLists_1 = da1.loadById(MultiDimMapsLists.class, -1, syncInfo_1.getId()); equals = CompareUtil_3.equalsMultiDimMapsLists(multiDimMapsLists, multiDimMapsLists_1); assertTrue(equals); return; } @SuppressWarnings("unchecked") @Test public void testMultiMap() { List<JcError> errors; IDomainAccess da = DomainAccessFactory.createDomainAccess(dbAccess, domainName); IDomainAccess da1; MultiDimMapsLists multiDimMapsLists = new MultiDimMapsLists(); MultiDimMapsLists multiDimMapsLists_1; boolean equals; Address first = new Address(); DistrictAddress second = new DistrictAddress(); Address third = new Address(); Address first_1 = new Address(); DistrictAddress second_1 = new DistrictAddress(); Address third_1 = new Address(); Address first_2 = new Address(); DistrictAddress second_2 = new DistrictAddress(); Address third_2 = new Address(); buildMapTestAny2Any(first, second, third); buildMapTestAny2Any(first_1, second_1, third_1); buildMapTestAny2Any(first_2, second_2, third_2); // init multiDimMap Map<Object, Object> multiDimMap = new HashMap<Object, Object>(); Map<Object, Object> multiDimMap_1 = new HashMap<Object, Object>(); Map<Object, Object> multiDimMap_2 = new HashMap<Object, Object>(); Map<Object, Object> multiDimMap_2_2 = new HashMap<Object, Object>(); multiDimMap_1.put(first_1, second_1); multiDimMap_1.put("third", third_1); multiDimMap_1.put(third_1, "third again"); multiDimMap_1.put("four", 4); multiDimMap_1.put(5, "five"); multiDimMap_2_2.put("simple_key", "simple_value"); multiDimMap_2.put(first_2, second_2); multiDimMap_2.put("third", third_2); multiDimMap_2.put(third_2, "third again"); multiDimMap_2.put("six", 6); multiDimMap_2.put(7, "seven"); multiDimMap_2.put(multiDimMap_2_2, 100); multiDimMap.put(multiDimMap_1, multiDimMap_2); multiDimMap.put("first", multiDimMap_1); multiDimMap.put("second", multiDimMap_1); multiDimMapsLists.setMultiDimMap(multiDimMap); errors = dbAccess.clearDatabase(); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } errors = da.store(multiDimMapsLists); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } SyncInfo syncInfo_1 = da.getSyncInfo(multiDimMapsLists); da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); multiDimMapsLists_1 = da1.loadById(MultiDimMapsLists.class, -1, syncInfo_1.getId()); equals = CompareUtil_3.equalsMultiDimMapsLists(multiDimMapsLists, multiDimMapsLists_1); assertTrue(equals); Map<Object, Object> mDimMap; Map<Object, Object> mDimMap_11 = null; Map<Object, Object> mDimMap_12 = null; Map<Object, Object> mDimMap_13 = null; mDimMap = multiDimMapsLists_1.getMultiDimMap(); Iterator<Entry<Object, Object>> it = mDimMap.entrySet().iterator(); while(it.hasNext()) { Entry<Object, Object> entry = it.next(); if (entry.getKey() instanceof Map<?, ?>) mDimMap_11 = (Map<Object, Object>) entry.getKey(); else if (entry.getKey().equals("first")) mDimMap_12 = (Map<Object, Object>) entry.getValue(); else if (entry.getKey().equals("second")) mDimMap_13 = (Map<Object, Object>) entry.getValue(); } assertTrue(mDimMap_11 != null && mDimMap_11 == mDimMap_12); assertTrue(mDimMap_12 == mDimMap_13); // modify - remove reference to multiDimMap_2 mDimMap.put(mDimMap_11, "was multiDimMap_2"); errors = da1.store(multiDimMapsLists_1); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } da = DomainAccessFactory.createDomainAccess(dbAccess, domainName); multiDimMapsLists = da.loadById(MultiDimMapsLists.class, -1, syncInfo_1.getId()); equals = CompareUtil_3.equalsMultiDimMapsLists(multiDimMapsLists, multiDimMapsLists_1); assertTrue(equals); return; } @Test public void testMultiMap_EmptyAndNull() { List<JcError> errors; IDomainAccess da = DomainAccessFactory.createDomainAccess(dbAccess, domainName); IDomainAccess da1; boolean equals; MultiDimMapsLists multiDimMapsLists = new MultiDimMapsLists(); MultiDimMapsLists multiDimMapsLists_1; Address first = new Address(); DistrictAddress second = new DistrictAddress(); Address third = new Address(); buildMapTestAny2Any(first, second, third); Map<Object, Object> multiDimMap = new HashMap<Object, Object>(); errors = dbAccess.clearDatabase(); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } // null map errors = da.store(multiDimMapsLists); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } SyncInfo syncInfo_1 = da.getSyncInfo(multiDimMapsLists); da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); multiDimMapsLists_1 = da1.loadById(MultiDimMapsLists.class, -1, syncInfo_1.getId()); equals = CompareUtil_3.equalsMultiDimMapsLists(multiDimMapsLists, multiDimMapsLists_1); assertTrue(equals); // empty map multiDimMapsLists.setMultiDimMap(multiDimMap); errors = da.store(multiDimMapsLists); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); multiDimMapsLists_1 = da1.loadById(MultiDimMapsLists.class, -1, syncInfo_1.getId()); equals = CompareUtil_3.equalsMultiDimMapsLists(multiDimMapsLists, multiDimMapsLists_1); assertTrue(equals); multiDimMap.put(first, 100); errors = da.store(multiDimMapsLists); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); multiDimMapsLists_1 = da1.loadById(MultiDimMapsLists.class, -1, syncInfo_1.getId()); equals = CompareUtil_3.equalsMultiDimMapsLists(multiDimMapsLists, multiDimMapsLists_1); assertTrue(equals); multiDimMap.put(first, second); errors = da.store(multiDimMapsLists); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); multiDimMapsLists_1 = da1.loadById(MultiDimMapsLists.class, -1, syncInfo_1.getId()); equals = CompareUtil_3.equalsMultiDimMapsLists(multiDimMapsLists, multiDimMapsLists_1); assertTrue(equals); multiDimMap.put(first, "first"); errors = da.store(multiDimMapsLists); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); multiDimMapsLists_1 = da1.loadById(MultiDimMapsLists.class, -1, syncInfo_1.getId()); equals = CompareUtil_3.equalsMultiDimMapsLists(multiDimMapsLists, multiDimMapsLists_1); assertTrue(equals); return; } @Test public void testMapAny2Any() { List<JcError> errors; IDomainAccess da = DomainAccessFactory.createDomainAccess(dbAccess, domainName); IDomainAccess da1; MapContainer mapContainer = new MapContainer(); MapContainer mapContainer_1; Address first = new Address(); DistrictAddress second = new DistrictAddress(); Address third = new Address(); boolean equals; buildMapTestAny2Any(first, second, third); // init any2Any Map<Object, Object> anyMap = new HashMap<Object, Object>(); anyMap.put(first, second); anyMap.put("third", third); anyMap.put(third, "third again"); anyMap.put("four", 4); anyMap.put(5, "five"); mapContainer.setAny2AnyMap(new HashMap<Object, Object>()); errors = dbAccess.clearDatabase(); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } errors = da.store(mapContainer); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } SyncInfo syncInfo_1 = da.getSyncInfo(mapContainer); da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); mapContainer_1 = da1.loadById(MapContainer.class, -1, syncInfo_1.getId()); equals = CompareUtil_3.equalsMapContainer(mapContainer, mapContainer_1); assertTrue(equals); mapContainer.setAny2AnyMap(anyMap); errors = da.store(mapContainer); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); mapContainer_1 = da1.loadById(MapContainer.class, -1, syncInfo_1.getId()); equals = CompareUtil_3.equalsMapContainer(mapContainer, mapContainer_1); assertTrue(equals); // modify any2Any anyMap.put(first, third); anyMap.put("third", third); anyMap.remove(third); anyMap.put(second, "second"); anyMap.put("four", 44); anyMap.remove(5); // store modification errors = da.store(mapContainer); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); mapContainer_1 = da1.loadById(MapContainer.class, -1, syncInfo_1.getId()); equals = CompareUtil_3.equalsMapContainer(mapContainer, mapContainer_1); assertTrue(equals); // modify any2Any anyMap.remove("third"); anyMap.remove(second); anyMap.remove("four"); // store modification errors = da.store(mapContainer); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); mapContainer_1 = da1.loadById(MapContainer.class, -1, syncInfo_1.getId()); equals = CompareUtil_3.equalsMapContainer(mapContainer, mapContainer_1); assertTrue(equals); // modify any2Any mapContainer.setAny2AnyMap(null); // store modification errors = da.store(mapContainer); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); mapContainer_1 = da1.loadById(MapContainer.class, -1, syncInfo_1.getId()); equals = CompareUtil_3.equalsMapContainer(mapContainer, mapContainer_1); assertTrue(equals); // modify any2Any mapContainer.setAny2AnyMap(new HashMap<Object, Object>()); // store modification errors = da.store(mapContainer); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); mapContainer_1 = da1.loadById(MapContainer.class, -1, syncInfo_1.getId()); equals = CompareUtil_3.equalsMapContainer(mapContainer, mapContainer_1); assertTrue(equals); return; } @Test public void testMapSimple2Simple() { List<JcError> errors; IDomainAccess da = DomainAccessFactory.createDomainAccess(dbAccess, domainName); IDomainAccess da1; MapContainer addressMap = new MapContainer(); MapContainer addressMap1; boolean equals; buildMapTestSimple2Simple(addressMap); errors = dbAccess.clearDatabase(); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } errors = da.store(addressMap); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } SyncInfo syncInfo_1 = da.getSyncInfo(addressMap); da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); addressMap1 = da1.loadById(MapContainer.class, -1, syncInfo_1.getId()); // equals = CompareUtil_2.equalsBroker(addressMap, addressMap1); // assertTrue(equals); // modify simple2Simple addressMap.getString2IntegerMap().put("one", 2); addressMap.getString2IntegerMap().put("two", 3); addressMap.getString2IntegerMap().remove("three"); // store modification errors = da.store(addressMap); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } // modify simple2Simple addressMap.getString2IntegerMap().remove("one"); addressMap.getString2IntegerMap().remove("two"); // store modification errors = da.store(addressMap); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } return; } @Test public void testMap() { List<JcError> errors; IDomainAccess da = DomainAccessFactory.createDomainAccess(dbAccess, domainName); IDomainAccess da1; MapContainer addressMap = new MapContainer(); MapContainer addressMap1; boolean equals; //buildMapTestSimple2Complex(addressMap); //buildMapTestComplex2Simple(addressMap); //buildMapTestComplex2Complex(addressMap); //buildMapTestComplex2Complex_2(addressMap); buildMapTestSimple2Simple(addressMap); errors = dbAccess.clearDatabase(); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } errors = da.store(addressMap); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } SyncInfo syncInfo_1 = da.getSyncInfo(addressMap); // modify simple2Simple addressMap.getString2IntegerMap().put("one", 2); addressMap.getString2IntegerMap().put("two", 3); addressMap.getString2IntegerMap().remove("three"); // store modification errors = da.store(addressMap); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } // modify simple2Simple addressMap.getString2IntegerMap().remove("one"); addressMap.getString2IntegerMap().remove("two"); // store modification errors = da.store(addressMap); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); addressMap1 = da1.loadById(MapContainer.class, -1, syncInfo_1.getId()); // equals = CompareUtil_2.equalsBroker(addressMap, addressMap1); // assertTrue(equals); return; } @Test public void testAmbiguous() { List<JcError> errors; IDomainAccess da = DomainAccessFactory.createDomainAccess(dbAccess, domainName); IDomainAccess da1; Broker broker1 = new Broker(); Broker broker2 = new Broker(); MultiBroker multiBroker = new MultiBroker(); Broker broker21; Broker broker22; boolean equals; buildAmbiguousTestObjects(broker1, broker2, multiBroker); errors = dbAccess.clearDatabase(); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } List<Object> domainObjects = new ArrayList<Object>(); // ((DistrictAddress)((JPerson)broker2.getWorksWith()).getPostalAddress()).setDistrict(null); // ((JPerson)broker2.getWorksWith()).setCompanyAddress(null); // ((JPerson)broker2.getWorksWith()).setContactAddress(null); // ((JPerson)broker2.getWorksWith()).setPostalAddress(null); domainObjects.add(broker1); domainObjects.add(broker2); errors = da.store(domainObjects); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } IPerson person1 = broker1.getWorksWith(); IPerson person2 = broker2.getWorksWith(); SyncInfo syncInfo_1 = da.getSyncInfo(broker1); SyncInfo syncInfo_2 = da.getSyncInfo(broker2); SyncInfo syncInfo_3 = da.getSyncInfo(person1); SyncInfo syncInfo_4 = da.getSyncInfo(person2); IPerson person21; IPerson person22; da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); // person21 = da1.loadById(IPerson.class, syncInfo_3.getId()); // equals = CompareUtil_2.equalsIPerson(person1, person21); // assertTrue(equals); // // person22 = da1.loadById(IPerson.class, syncInfo_4.getId()); // equals = CompareUtil_2.equalsIPerson(person2, person22); // assertTrue(equals); broker21 = da1.loadById(Broker.class, -1, syncInfo_1.getId()); equals = CompareUtil_2.equalsBroker(broker1, broker21); assertTrue(equals); broker22 = da1.loadById(Broker.class, -1, syncInfo_2.getId()); equals = CompareUtil_2.equalsBroker(broker2, broker22); assertTrue(equals); ((DistrictAddress)((JPerson)broker2.getWorksWith()).getPostalAddress()).setDistrict(null); errors = da.store(broker2); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); broker22 = da1.loadById(Broker.class, -1, syncInfo_2.getId()); equals = CompareUtil_2.equalsBroker(broker2, broker22); assertTrue(equals); ((JPerson)broker2.getWorksWith()).setCompanyAddress(null); errors = da.store(broker2); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); broker22 = da1.loadById(Broker.class, -1, syncInfo_2.getId()); equals = CompareUtil_2.equalsBroker(broker2, broker22); assertTrue(equals); ((JPerson)broker2.getWorksWith()).setPostalAddress(null); errors = da.store(broker2); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); broker22 = da1.loadById(Broker.class, -1, syncInfo_2.getId()); equals = CompareUtil_2.equalsBroker(broker2, broker22); assertTrue(equals); ((JPerson)broker2.getWorksWith()).setContactAddress(null); errors = da.store(broker2); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); broker22 = da1.loadById(Broker.class, -1, syncInfo_2.getId()); equals = CompareUtil_2.equalsBroker(broker2, broker22); assertTrue(equals); return; } @Test public void testAmbiguous_02() { List<JcError> errors; IDomainAccess da = DomainAccessFactory.createDomainAccess(dbAccess, domainName); IDomainAccess da1; Broker broker1 = new Broker(); Broker broker2 = new Broker(); MultiBroker multiBroker = new MultiBroker(); MultiBroker multiBroker1; boolean equals; buildAmbiguousTestObjects(broker1, broker2, multiBroker); errors = dbAccess.clearDatabase(); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } errors = da.store(multiBroker); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } SyncInfo syncInfo_1 = da.getSyncInfo(multiBroker); da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); multiBroker1 = da1.loadById(MultiBroker.class, -1, syncInfo_1.getId()); equals = CompareUtil_2.equalsMultiBroker(multiBroker, multiBroker1); assertTrue(equals); return; } @SuppressWarnings({ "unused", "rawtypes", "unchecked" }) @Test public void testUpdateComplex_EmptyList2NotEmptyList() { List<JcError> errors; IDomainAccess da = DomainAccessFactory.createDomainAccess(dbAccess, domainName); IDomainAccess da1; Person john_1; boolean equals; Person john = new Person(); buildInitialDomainObjects_2(john); List addresses = john.getAddresses(); john.setAddresses(new ArrayList()); errors = dbAccess.clearDatabase(); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } // Store empty array without generics errors = da.store(john); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } SyncInfo syncInfo = da.getSyncInfo(john); da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); john_1 = da1.loadById(Person.class, -1, syncInfo.getId()); equals = CompareUtil.equalsPerson(john, john_1); assertTrue(equals); // Store null array john.setAddresses(null); errors = da.store(john); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); john_1 = da1.loadById(Person.class, -1, syncInfo.getId()); equals = CompareUtil.equalsPerson(john, john_1); assertTrue(equals); // Store non-empty array without generics john.setAddresses(addresses); errors = da.store(john); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } // test if property for empty collection has been removed // da = DomainAccessFactory.createDomainAccess(dbAccess, domainName); // errors = da.store(john); // if (errors.size() > 0) { // printErrors(errors); // throw new JcResultException(errors); // } da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); john_1 = da1.loadById(Person.class, -1, syncInfo.getId()); equals = CompareUtil.equalsPerson(john, john_1); assertTrue(equals); Address addr = (Address) john.getAddresses().remove(john.getAddresses().size() - 1); john.getAddresses().add(0, addr); errors = da.store(john); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); john_1 = da1.loadById(Person.class, -1, syncInfo.getId()); equals = CompareUtil.equalsPerson(john, john_1); assertTrue(equals); return; } @SuppressWarnings("unchecked") @Test public void testUpdateSimple_EmptyList2NotEmptyList() { List<JcError> errors; IDomainAccess da = DomainAccessFactory.createDomainAccess(dbAccess, domainName); IDomainAccess da1; Person john = new Person(); Address address = new Address(); Contact phone = new Contact(); Contact email = new Contact(); Person james = new Person(); Company skynet = new Company(); Company globCom = new Company(); buildInitialDomainObjects_1(john, james, address, phone, email, skynet, globCom); errors = dbAccess.clearDatabase(); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } // Store empty array without generics errors = da.store(globCom); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } SyncInfo syncInfo = da.getSyncInfo(globCom); da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); Company globCom_1; globCom_1 = da1.loadById(Company.class, -1, syncInfo.getId()); boolean isEqual = CompareUtil.equalsCompany(globCom, globCom_1); assertTrue("Test for equality of domain objects", isEqual); globCom.getAreaCodes().add(2); globCom.getAreaCodes().add(3); // Store non-empty array without generics errors = da.store(globCom); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); globCom_1 = da1.loadById(Company.class, -1, syncInfo.getId()); isEqual = CompareUtil.equalsCompany(globCom, globCom_1); assertTrue("Test for equality of domain objects", isEqual); // Store non-empty array with generics james.setLuckyNumbers(new ArrayList<Integer>()); errors = da.store(james); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } syncInfo = da.getSyncInfo(james); da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); Person james_1; james_1 = da1.loadById(Person.class, -1, syncInfo.getId()); isEqual = CompareUtil.equalsPerson(james, james_1); assertTrue("Test for equality of domain objects", isEqual); james.getLuckyNumbers().add(24); james.getLuckyNumbers().add(48); errors = da.store(james); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); james_1 = da1.loadById(Person.class, -1, syncInfo.getId()); isEqual = CompareUtil.equalsPerson(james, james_1); assertTrue("Test for equality of domain objects", isEqual); return; } @Test public void testLoadEmptyLists() { List<JcError> errors; IDomainAccess da = DomainAccessFactory.createDomainAccess(dbAccess, domainName); Person john = new Person(); Address address = new Address(); Contact phone = new Contact(); Contact email = new Contact(); Person james = new Person(); Company skynet = new Company(); Company globCom = new Company(); buildInitialDomainObjects_1(john, james, address, phone, email, skynet, globCom); errors = dbAccess.clearDatabase(); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } // Test empty array without generics errors = da.store(globCom); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } SyncInfo syncInfo = da.getSyncInfo(globCom); da = DomainAccessFactory.createDomainAccess(dbAccess, domainName); Company globCom_1; globCom_1 = da.loadById(Company.class, -1, syncInfo.getId()); boolean isEqual = CompareUtil.equalsCompany(globCom, globCom_1); assertTrue("Test for equality of domain objects", isEqual); // Test empty array with generics james.setLuckyNumbers(new ArrayList<Integer>()); errors = da.store(james); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } syncInfo = da.getSyncInfo(james); da = DomainAccessFactory.createDomainAccess(dbAccess, domainName); Person james_1; james_1 = da.loadById(Person.class, -1, syncInfo.getId()); isEqual = CompareUtil.equalsPerson(james, james_1); assertTrue("Test for equality of domain objects", isEqual); return; } @Test public void testStoreDomainObjects() { Person john_1, james_1; Address addr_1; List<JcError> errors; IDomainAccess da = DomainAccessFactory.createDomainAccess(dbAccess, domainName); IDomainAccess da1; Person john = new Person(); Address address = new Address(); Contact phone = new Contact(); Contact email = new Contact(); Person james = new Person(); Company skynet = new Company(); Company globCom = new Company(); buildInitialDomainObjects_1(john, james, address, phone, email, skynet, globCom); List<Object> domainObjects = new ArrayList<Object>(); domainObjects.add(john); domainObjects.add(james); errors = dbAccess.clearDatabase(); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } // check for an empty graph boolean check = dbAccess.isDatabaseEmpty(); assertTrue("Test for empty graph", check); errors = da.store(domainObjects); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } SyncInfo syncInfo = da.getSyncInfo(john); john_1 = da.loadById(Person.class, -1, syncInfo.getId()); boolean isIdentical = john == john_1; assertTrue("Test for identity of domain objects", isIdentical); // add a new class to the domain to check another // initialize DomainInfo scenario da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); errors = da1.store(skynet); if (errors.size() > 0) { printErrors(errors); throw new JcResultException(errors); } check = checkDomainInfoNodeAgainst("[Address=test.domainmapping.Address," + " Collection=iot.jcypher.domain.mapping.surrogate.Collection, Company=test.domainmapping.Company," + " Contact=test.domainmapping.Contact, Person=test.domainmapping.Person]"); assertTrue("Test Domain Info node", check); da1 = DomainAccessFactory.createDomainAccess(dbAccess, domainName); try { john_1 = da1.loadById(Person.class, -1, syncInfo.getId()); } catch (Exception e) { if (e instanceof JcResultException) { errors = ((JcResultException)e).getErrors(); printErrors(errors); return; } throw e; } boolean isEqual = CompareUtil.equalsPerson(john, john_1); assertTrue("Test for equality of domain objects", isEqual); List<NodesToCheck> ntc = new ArrayList<NodesToCheck>(); ntc.add(new NodesToCheck("Person", 2)); ntc.add(new NodesToCheck("Address", 2)); ntc.add(new NodesToCheck("Contact", 1)); ntc.add(new NodesToCheck("Company", 1)); ntc.add(new NodesToCheck("Collection", 2)); List<RelationsToCheck> rtc = new ArrayList<RelationsToCheck>(); rtc.add(new RelationsToCheck("address", 1)); rtc.add(new RelationsToCheck("mainAddress", 1)); rtc.add(new RelationsToCheck("contact", 1)); rtc.add(new RelationsToCheck("luckyNumbers", 1)); rtc.add(new RelationsToCheck("areaCodes", 1)); check = checkForNodesAndRelations(ntc, rtc); assertTrue("Test for nodes and relations in graph", check); return; } private boolean checkDomainInfoNodeAgainst(String expected) { JcNode info = new JcNode("info"); JcQuery query = new JcQuery(); query.setClauses(new IClause[] { MATCH.node(info).label("DomainInfo"), WHERE.valueOf(info.property("name")) .EQUALS(domainName), RETURN.value(info) }); JcQueryResult result = dbAccess.execute(query); List<JcError> errors = Util.collectErrors(result); if (!errors.isEmpty()) { throw new JcResultException(errors); } GrNode rInfo = result.resultOf(info).get(0); GrProperty prop = rInfo.getProperty("label2ClassMap"); Object val = prop.getValue(); String returned = val.toString(); return expected.equals(returned); } private void buildMapTestAny2Any(Address first, DistrictAddress second, Address third) { first.setCity("Munich"); first.setStreet("Main Street"); first.setNumber(9); second.setCity("San Francisco"); second.setStreet("Embarcadero Center"); second.setNumber(1); District district = new District(); district.setName("District thirteen"); second.setDistrict(district); district = new District(); district.setName("Subdistrict four"); second.setSubDistrict(district); third.setCity("New York"); third.setStreet("52nd Street"); third.setNumber(35); } private void buildMapTestSimple2Simple(MapContainer addressMap) { Map<String, Integer> s2i = new HashMap<String, Integer>(); addressMap.setString2IntegerMap(s2i); s2i.put("one", 1); s2i.put("two", 2); s2i.put("three", 3); } private void buildMapTestSimple2Complex(MapContainer addressMap) { Map<String, Address> addresses = new HashMap<String, Address>(); addressMap.setString2AddressMap(addresses); Address address = new Address(); address.setCity("Munich"); address.setStreet("Main Street"); address.setNumber(9); addresses.put("first", address); DistrictAddress dAddress = new DistrictAddress(); dAddress.setCity("San Francisco"); dAddress.setStreet("Embarcadero Center"); dAddress.setNumber(1); District district = new District(); district.setName("District thirteen"); dAddress.setDistrict(district); district = new District(); district.setName("Subdistrict four"); dAddress.setSubDistrict(district); addresses.put("second", dAddress); address = new Address(); address.setCity("New York"); address.setStreet("52nd Street"); address.setNumber(35); addresses.put("third", address); } private void buildMapTestComplex2Simple(MapContainer addressMap) { Map<Address, String> addresses = new HashMap<Address, String>(); addressMap.setAddress2StringMap(addresses); Address address = new Address(); address.setCity("Munich"); address.setStreet("Main Street"); address.setNumber(9); addresses.put(address, "first"); DistrictAddress dAddress = new DistrictAddress(); dAddress.setCity("San Francisco"); dAddress.setStreet("Embarcadero Center"); dAddress.setNumber(1); District district = new District(); district.setName("District thirteen"); dAddress.setDistrict(district); district = new District(); district.setName("Subdistrict four"); dAddress.setSubDistrict(district); addresses.put(dAddress, "second"); address = new Address(); address.setCity("New York"); address.setStreet("52nd Street"); address.setNumber(35); addresses.put(address, "third"); } private void buildMapTestComplex2Complex(MapContainer addressMap) { Map<Address, Address> addresses = new HashMap<Address, Address>(); addressMap.setAddress2AddressMap(addresses); Address first = new Address(); first.setCity("Munich"); first.setStreet("Main Street"); first.setNumber(9); DistrictAddress second = new DistrictAddress(); second.setCity("San Francisco"); second.setStreet("Embarcadero Center"); second.setNumber(1); District district = new District(); district.setName("District thirteen"); second.setDistrict(district); district = new District(); district.setName("Subdistrict four"); second.setSubDistrict(district); Address third = new Address(); third.setCity("New York"); third.setStreet("52nd Street"); third.setNumber(35); addresses.put(first, second); addresses.put(second, third); addresses.put(third, first); } private void buildMapTestComplex2Complex_2(MapContainer addressMap) { Map<Address, Address> addresses = new HashMap<Address, Address>(); addressMap.setAddress2AddressMap(addresses); Address first = new Address(); first.setCity("Munich"); first.setStreet("Main Street"); first.setNumber(9); Address first_1 = new Address(); first_1.setCity("Munich"); first_1.setStreet("Main Street"); first_1.setNumber(9); DistrictAddress second = new DistrictAddress(); second.setCity("San Francisco"); second.setStreet("Embarcadero Center"); second.setNumber(1); District district = new District(); district.setName("District thirteen"); second.setDistrict(district); district = new District(); district.setName("Subdistrict four"); second.setSubDistrict(district); DistrictAddress second_1 = new DistrictAddress(); second_1.setCity("San Francisco"); second_1.setStreet("Embarcadero Center"); second_1.setNumber(1); district = new District(); district.setName("District thirteen"); second_1.setDistrict(district); district = new District(); district.setName("Subdistrict four"); second_1.setSubDistrict(district); Address third = new Address(); third.setCity("New York"); third.setStreet("52nd Street"); third.setNumber(35); Address third_1 = new Address(); third_1.setCity("New York"); third_1.setStreet("52nd Street"); third_1.setNumber(35); addresses.put(first, second_1); addresses.put(second, third_1); addresses.put(third, first_1); } private List<Object> buildAmbiguousTestObjects(Broker broker1, Broker broker2, MultiBroker multiBroker) { List<Object> ret = new ArrayList<Object>(); Address address = new Address(); address.setCity("Munich"); address.setStreet("Main Street"); address.setNumber(9); ret.add(address); NPerson nPerson = new NPerson(); nPerson.setNamePart1("Sam"); nPerson.setNamePart2("Smith"); nPerson.setSocialSecurityNumber("123456"); nPerson.setHomeAddress(address); address = new Address(); address.setCity("Munich"); address.setStreet("Bahnhofplatz"); address.setNumber(2); nPerson.setWorkAddress(address); ret.add(address); address = new Address(); address.setCity("San Francisco"); address.setStreet("Kearny Street"); address.setNumber(28); ret.add(address); JPerson jPerson = new JPerson(); jPerson.setNamePart1("Global Company"); jPerson.setNamePart2("incorporated"); jPerson.setCompanyNumber(42); jPerson.setCompanyAddress(address); address = new Address(); address.setCity("San Francisco"); address.setStreet("Market Street"); address.setNumber(29); jPerson.setContactAddress(address); ret.add(address); DistrictAddress dAddress = new DistrictAddress(); dAddress.setCity("San Francisco"); dAddress.setStreet("Embarcadero Center"); dAddress.setNumber(1); District district = new District(); district.setName("District thirteen"); dAddress.setDistrict(district); district = new District(); district.setName("Subdistrict four"); dAddress.setSubDistrict(district); jPerson.setPostalAddress(dAddress); ret.add(dAddress); broker1.setWorksWith(nPerson); address = new Address(); address.setCity("New York"); address.setStreet("52nd Street"); address.setNumber(35); broker1.setAddress(address); ret.add(address); broker2.setWorksWith(jPerson); address = new Address(); address.setCity("Brussels"); address.setStreet("Main Road"); address.setNumber(168); broker2.setAddress(address); ret.add(address); List<IPerson> persons = new ArrayList<IPerson>(); persons.add(jPerson); persons.add(nPerson); multiBroker.setCanBroker(persons); multiBroker.setName("Jack Broker"); address = new Address(); address.setCity("Vienna"); address.setStreet("Am Graben"); address.setNumber(5); multiBroker.setAddress(address); // ret.add(address); return ret; } @SuppressWarnings({ "rawtypes", "unchecked" }) private void buildInitialDomainObjects_1(Person john, Person james, Address address, Contact phone, Contact email, Company skynet, Company globCom) { john.setFirstName("John"); john.setLastName("Reeves"); Calendar cal = Calendar.getInstance(); cal.set(1964, 8, 2, 0, 0, 0); clearMillis(cal); john.setBirthDate(cal.getTime()); List<Integer> luckyNumbers = new ArrayList<Integer>(); luckyNumbers.add(3); luckyNumbers.add(9); luckyNumbers.add(12); luckyNumbers.add(15); luckyNumbers.add(23); john.setLuckyNumbers(luckyNumbers); address.setCity("Vienna"); address.setStreet("Main Street"); address.setNumber(9); john.setMainAddress(address); phone.setType(ContactType.TELEPHONE); phone.setNummer("12345"); john.setContact(phone); email.setType(ContactType.EMAIL); email.setNummer("dj@nowhere.org"); james.setFirstName("James"); james.setLastName("Fishburne"); cal = Calendar.getInstance(); cal.set(1961, 6, 30, 0, 0, 0); clearMillis(cal); james.setBirthDate(cal.getTime()); if (skynet != null) { skynet.setName("Sky-Net"); Address addr = new Address(); addr.setCity("Global City"); addr.setStreet("Graphstreet"); addr.setNumber(42); skynet.setAddress(addr); List areaCodes = new ArrayList(); areaCodes.add(42); areaCodes.add(43); areaCodes.add(44); skynet.setAreaCodes(areaCodes); } if (globCom != null) { globCom.setName("Glob-Com"); Address addr = new Address(); addr.setCity("Global City"); addr.setStreet("Mainstreet"); addr.setNumber(1); globCom.setAddress(addr); globCom.setAreaCodes(new ArrayList()); } } @SuppressWarnings({ "unchecked", "rawtypes" }) private void buildInitialDomainObjects_2(Person john) { john.setFirstName("John"); john.setLastName("Reeves"); Calendar cal = Calendar.getInstance(); cal.set(1964, 8, 2, 0, 0, 0); clearMillis(cal); john.setBirthDate(cal.getTime()); john.setAddresses(new ArrayList()); Address address = new Address(); address.setCity("Munich"); address.setStreet("Main Street"); address.setNumber(9); john.getAddresses().add(address); address = new Address(); address.setCity("San Francisco"); address.setStreet("Kearny Street"); address.setNumber(28); john.getAddresses().add(address); address = new Address(); address.setCity("Paris"); address.setStreet("boulevard de clichy"); address.setNumber(108); john.getAddresses().add(address); } /** * @param nodesToCheck * @param relationsToCheck * @return true for success */ private boolean checkForNodesAndRelations(List<NodesToCheck> nodesToCheck, List<RelationsToCheck> relationsToCheck) { boolean ret = true; boolean checkForNodes = nodesToCheck != null && nodesToCheck.size() > 0; boolean checkForRelations = relationsToCheck != null && relationsToCheck.size() > 0; if (checkForNodes || checkForRelations) { List<IClause> clauses = new ArrayList<IClause>(); if (checkForNodes) { int idx = -1; for (NodesToCheck ntc : nodesToCheck) { idx++; JcNode n = new JcNode("n_".concat(String.valueOf(idx))); if (idx > 0) clauses.add(SEPARATE.nextClause()); if (ntc.label != null) clauses.add(MATCH.node(n).label(ntc.label)); else clauses.add(MATCH.node(n)); } } if (checkForRelations) { int idx = -1; for (RelationsToCheck rtc : relationsToCheck) { idx++; JcRelation r = new JcRelation("r_".concat(String.valueOf(idx))); if (clauses.size() > 0) clauses.add(SEPARATE.nextClause()); if (rtc.type != null) clauses.add(MATCH.node().relation(r).type(rtc.type).node()); else clauses.add(MATCH.node().relation(r).node()); } } clauses.add(RETURN.ALL()); JcQuery query = new JcQuery(); query.setClauses(clauses.toArray(new IClause[clauses.size()])); // Util.printQuery(query, "CHECK", Format.PRETTY_1); JcQueryResult result = dbAccess.execute(query); if (result.hasErrors()) { List<JcError> errors = Util.collectErrors(result); throw new JcResultException(errors); } // Util.printResult(result, "CHECK", Format.PRETTY_1); // perform check if (checkForNodes) { int idx = -1; for (NodesToCheck ntc : nodesToCheck) { idx++; JcNode n = new JcNode("n_".concat(String.valueOf(idx))); List<GrNode> nodes = result.resultOf(n); nodes = removeMultiple(nodes); ret = nodes.size() == ntc.count; if (!ret) break; } } if (checkForRelations && ret) { int idx = -1; for (RelationsToCheck rtc : relationsToCheck) { idx++; JcRelation r = new JcRelation("r_".concat(String.valueOf(idx))); List<GrRelation> relations = result.resultOf(r); relations = removeMultiple(relations); ret = relations.size() == rtc.count; if (!ret) break; } } } else { // check for an empty graph ret = dbAccess.isDatabaseEmpty(); } return ret; } private <T extends GrPropertyContainer> List<T> removeMultiple(List<T> source) { List<T> ret = new ArrayList<T>(); for (T elem : source) { if (!containsElement(ret, elem)) ret.add(elem); } return ret; } private <T extends GrPropertyContainer> boolean containsElement(List<T> elems, T elem) { for (T pc : elems) { if (pc.getId() == elem.getId()) return true; } return false; } private void clearMillis(Calendar cal) { long millis = cal.getTimeInMillis(); long nMillis = millis / 1000; nMillis = nMillis * 1000; nMillis = nMillis - 1000; cal.setTimeInMillis(nMillis); } /************************************/ private static class NodesToCheck { private String label; private int count; private NodesToCheck(String label, int count) { super(); this.label = label; this.count = count; } } /************************************/ private static class RelationsToCheck { private String type; private int count; private RelationsToCheck(String type, int count) { super(); this.type = type; this.count = count; } } }