Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2012-07-19 08:22:04 +0000
committerEike Stepper2012-07-19 08:22:04 +0000
commit1460904fd3c193ffaf809913b2983a400fce9d94 (patch)
tree72f3a17b75fedba3ae1060df1d32c9c7889be954 /plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/RevisionDeltaTest.java
parent5f360965ae87478e0681899bf310a210cafc2c44 (diff)
downloadcdo-1460904fd3c193ffaf809913b2983a400fce9d94.tar.gz
cdo-1460904fd3c193ffaf809913b2983a400fce9d94.tar.xz
cdo-1460904fd3c193ffaf809913b2983a400fce9d94.zip
Fix line endings in master (dos2unix)
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/RevisionDeltaTest.java')
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/RevisionDeltaTest.java1508
1 files changed, 754 insertions, 754 deletions
diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/RevisionDeltaTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/RevisionDeltaTest.java
index 9185c0dc17..0fb046cbda 100644
--- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/RevisionDeltaTest.java
+++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/RevisionDeltaTest.java
@@ -1,754 +1,754 @@
-/*
- * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Simon McDuff - initial API and implementation
- * Eike Stepper - maintenance
- */
-package org.eclipse.emf.cdo.tests;
-
-import org.eclipse.emf.cdo.common.id.CDOID;
-import org.eclipse.emf.cdo.common.revision.CDORevision;
-import org.eclipse.emf.cdo.common.revision.CDORevisionUtil;
-import org.eclipse.emf.cdo.common.revision.delta.CDOAddFeatureDelta;
-import org.eclipse.emf.cdo.common.revision.delta.CDOClearFeatureDelta;
-import org.eclipse.emf.cdo.common.revision.delta.CDOListFeatureDelta;
-import org.eclipse.emf.cdo.common.revision.delta.CDORevisionDelta;
-import org.eclipse.emf.cdo.common.revision.delta.CDOSetFeatureDelta;
-import org.eclipse.emf.cdo.eresource.CDOResource;
-import org.eclipse.emf.cdo.internal.common.revision.delta.CDOListFeatureDeltaImpl;
-import org.eclipse.emf.cdo.internal.server.mem.MEMStore;
-import org.eclipse.emf.cdo.server.IStore;
-import org.eclipse.emf.cdo.session.CDOSession;
-import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
-import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionManager;
-import org.eclipse.emf.cdo.tests.model1.Category;
-import org.eclipse.emf.cdo.tests.model1.Company;
-import org.eclipse.emf.cdo.tests.model1.Customer;
-import org.eclipse.emf.cdo.tests.model1.SalesOrder;
-import org.eclipse.emf.cdo.tests.model3.NodeD;
-import org.eclipse.emf.cdo.transaction.CDOTransaction;
-import org.eclipse.emf.cdo.util.CDOUtil;
-import org.eclipse.emf.cdo.util.CommitException;
-import org.eclipse.emf.cdo.view.CDOView;
-
-import org.eclipse.net4j.util.WrappedException;
-import org.eclipse.net4j.util.io.IOUtil;
-
-import org.eclipse.emf.common.util.BasicEList;
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.emf.spi.cdo.InternalCDOTransaction;
-
-/**
- * See bug 201266
- *
- * @author Simon McDuff
- */
-public class RevisionDeltaTest extends AbstractCDOTest
-{
- public RevisionDeltaTest()
- {
- }
-
- public void testBasicRevisionDelta() throws Exception
- {
- CDOSession session = openSession();
- CDOTransaction transaction = session.openTransaction();
- CDOResource resource1 = transaction.createResource(getResourcePath("/test1"));
-
- Company company1 = getModel1Factory().createCompany();
- Category category1 = getModel1Factory().createCategory();
-
- resource1.getContents().add(company1);
- company1.getCategories().add(category1);
-
- company1.setName("TEST");
- InternalCDORevision rev1 = getCopyCDORevision(company1);
-
- // Test simple attributes
- company1.setName("TEST3");
- InternalCDORevision rev2 = getCopyCDORevision(company1);
-
- CDORevisionDelta revisionDelta = rev2.compare(rev1);
- assertEquals(1, revisionDelta.getFeatureDeltas().size());
- CDOSetFeatureDelta setDelta = (CDOSetFeatureDelta)revisionDelta.getFeatureDeltas().get(0);
- assertEquals("TEST3", setDelta.getValue());
-
- // Test List clear
- company1.getCategories().clear();
- InternalCDORevision rev3 = getCopyCDORevision(company1);
-
- CDORevisionDelta revisionDelta3 = rev3.compare(rev2);
- assertEquals(1, revisionDelta3.getFeatureDeltas().size());
- CDOListFeatureDeltaImpl delta3List = (CDOListFeatureDeltaImpl)revisionDelta3.getFeatureDeltas().get(0);
-
- assertEquals(1, delta3List.getListChanges().size());
- assertEquals(true, delta3List.getListChanges().get(0) instanceof CDOClearFeatureDelta);
-
- // Test List Add
- for (int i = 0; i < 5; i++)
- {
- Category category = getModel1Factory().createCategory();
- company1.getCategories().add(category);
- }
-
- InternalCDORevision rev4 = getCopyCDORevision(company1);
-
- CDORevisionDelta revisionDelta4 = rev4.compare(rev3);
- assertEquals(1, revisionDelta4.getFeatureDeltas().size());
- CDOListFeatureDeltaImpl delta4List = (CDOListFeatureDeltaImpl)revisionDelta4.getFeatureDeltas().get(0);
-
- assertEquals(5, delta4List.getListChanges().size());
- assertEquals(true, delta4List.getListChanges().get(0) instanceof CDOAddFeatureDelta);
- transaction.rollback();
- transaction.close();
- session.close();
- }
-
- /**
- * Sending deltas doesn't adjust CDOIDs
- * <p>
- * See bug 214374
- */
- public void testBugzilla214374() throws Exception
- {
- CDOSession session = openSession();
- CDOTransaction transaction = session.openTransaction();
- CDOResource resource = transaction.createResource(getResourcePath("/test1"));
-
- SalesOrder salesOrder = getModel1Factory().createSalesOrder();
- resource.getContents().add(salesOrder);
- transaction.commit();
-
- Customer customer = getModel1Factory().createCustomer();
- salesOrder.setCustomer(customer);
-
- resource.getContents().add(customer);
- transaction.commit();
- transaction.close();
-
- CDOTransaction transaction2 = session.openTransaction();
- SalesOrder salesOrder2 = (SalesOrder)CDOUtil.getEObject(transaction2.getObject(CDOUtil.getCDOObject(salesOrder)
- .cdoID(), true));
- CDORevision salesRevision = CDOUtil.getCDOObject(salesOrder2).cdoRevision();
- EStructuralFeature customerFeature = getModel1Package().getSalesOrder_Customer();
-
- Object value = salesRevision.data().get(customerFeature, 0);
- assertEquals(true, value instanceof CDOID);
- transaction2.close();
- session.close();
- }
-
- /**
- * CDOView.getRevision() does not work for transactions/dirty objects (INVALID)
- * <p>
- * See bug 214431
- */
- public void testBugzilla214431() throws Exception
- {
- CDOSession session = openSession();
- CDOTransaction transaction = session.openTransaction();
- CDOResource resource = transaction.createResource(getResourcePath("/test1"));
-
- SalesOrder salesOrder = getModel1Factory().createSalesOrder();
- resource.getContents().add(salesOrder);
- transaction.commit();
-
- salesOrder.setId(4711);
- assertNotSame(CDOUtil.getCDOObject(salesOrder).cdoRevision(),
- ((InternalCDOTransaction)transaction).getRevision(CDOUtil.getCDOObject(salesOrder).cdoID(), true));
- assertEquals(CDOUtil.getCDOObject(salesOrder).cdoRevision(),
- transaction.getDirtyObjects().get(CDOUtil.getCDOObject(salesOrder).cdoID()).cdoRevision());
- transaction.close();
- session.close();
- }
-
- /**
- * CDOView.getRevision() does not work for transactions/dirty objects (INVALID)
- * <p>
- * See bug 214374
- */
- public void testBugzilla214374_HandleClear() throws Exception
- {
- CDOSession session = openSession();
- CDOTransaction transaction = session.openTransaction();
- CDOResource resource = transaction.createResource(getResourcePath("/test1"));
-
- Customer customer = getModel1Factory().createCustomer();
- resource.getContents().add(customer);
-
- SalesOrder salesOrder = getModel1Factory().createSalesOrder();
- resource.getContents().add(salesOrder);
- customer.getSalesOrders().add(salesOrder);
- customer.getSalesOrders().add(salesOrder);
- transaction.commit();
-
- salesOrder = getModel1Factory().createSalesOrder();
- customer = getModel1Factory().createCustomer();
- resource.getContents().add(salesOrder);
- resource.getContents().add(customer);
- salesOrder.setCustomer(customer);
- transaction.commit();
- transaction.close();
- session.close();
- }
-
- /**
- * java.lang.IllegalStateException with MEMStore
- * <p>
- * See bug 243282
- */
- public void testBugzilla243282_Exception() throws Exception
- {
- CDOSession session = openSession();
- CDOTransaction transaction = session.openTransaction();
- CDOResource resource = transaction.createResource(getResourcePath("/test1"));
-
- Customer customer = getModel1Factory().createCustomer();
- resource.getContents().add(customer);
-
- transaction.commit();
-
- InternalCDORevisionManager revisionManager = getRepository().getRevisionManager();
- CDORevision revision = CDOUtil.getCDOObject(customer).cdoRevision();
- revisionManager.getCache().removeRevision(revision.getID(), revision);
-
- SalesOrder salesOrder = getModel1Factory().createSalesOrder();
- resource.getContents().add(salesOrder);
- customer.getSalesOrders().add(salesOrder);
-
- IStore store = getRepository().getStore();
- if (store instanceof MEMStore)
- {
- MEMStore memStore = (MEMStore)store;
- CDORevisionUtil.dumpAllRevisions(memStore.getAllRevisions(), IOUtil.OUT());
- }
-
- transaction.commit();
- transaction.close();
- session.close();
- }
-
- @SuppressWarnings("unused")
- public void testDetachWithXRef() throws Exception
- {
- CDOSession session = openSession();
- CDOTransaction transaction = session.openTransaction();
- CDOResource resource = transaction.createResource(getResourcePath("/test1"));
-
- NodeD a = getModel3Factory().createNodeD();
- NodeD b = getModel3Factory().createNodeD();
- NodeD c = getModel3Factory().createNodeD();
-
- a.getChildren().add(b);
- c.getOtherNodes().add(b);
-
- resource.getContents().add(a);
- resource.getContents().add(c);
-
- if (true)
- {
- transaction.commit();
- transaction.close();
- transaction = session.openTransaction();
- resource = transaction.getResource(getResourcePath("/test1"));
- }
-
- // Start test logic
-
- a = (NodeD)resource.getContents().get(0);
- b = a.getChildren().get(0);
- c = (NodeD)resource.getContents().get(1);
-
- a.getChildren().remove(0);
- Object[] cB = c.getOtherNodes().toArray();
-
- CDORevisionDelta aDelta = transaction.getRevisionDeltas().get(CDOUtil.getCDOObject(a).cdoID());
- CDORevisionDelta cDelta = transaction.getRevisionDeltas().get(CDOUtil.getCDOObject(c).cdoID());
-
- session.close();
- }
-
- @SuppressWarnings("unused")
- public void testDetachWithXRef_Remove() throws Exception
- {
- CDOSession session = openSession();
- CDOTransaction transaction = session.openTransaction();
- CDOResource resource = transaction.createResource(getResourcePath("/test1"));
-
- NodeD a = getModel3Factory().createNodeD();
- NodeD b = getModel3Factory().createNodeD();
- NodeD c = getModel3Factory().createNodeD();
-
- a.getChildren().add(b);
- c.getOtherNodes().add(b);
-
- resource.getContents().add(a);
- resource.getContents().add(c);
-
- if (true)
- {
- transaction.commit();
- transaction.close();
- transaction = session.openTransaction();
- resource = transaction.getResource(getResourcePath("/test1"));
- }
-
- // Start test logic
-
- a = (NodeD)resource.getContents().get(0);
- b = a.getChildren().get(0);
- c = (NodeD)resource.getContents().get(1);
-
- a.getChildren().remove(0);
- c.getOtherNodes().remove(0);
-
- Object[] cB = c.getOtherNodes().toArray();
-
- CDORevisionDelta aDelta = transaction.getRevisionDeltas().get(CDOUtil.getCDOObject(a).cdoID());
- CDORevisionDelta cDelta = transaction.getRevisionDeltas().get(CDOUtil.getCDOObject(c).cdoID());
-
- CDOListFeatureDelta list = (CDOListFeatureDelta)cDelta.getFeatureDelta(getModel3Package().getNodeD_OtherNodes());
- assertEquals(1, list.getListChanges().size());
-
- session.close();
- }
-
- public void testListRemoveMiddle()
- {
- testStoreDelta(new ListManipulator()
- {
- public void doManipulations(EList<?> list)
- {
- list.remove(5);
- }
- });
- }
-
- public void testListRemoveLast()
- {
- testStoreDelta(new ListManipulator()
- {
- public void doManipulations(EList<?> list)
- {
- list.remove(list.size() - 1);
- }
- });
- }
-
- public void testListRemoveFirst()
- {
- testStoreDelta(new ListManipulator()
- {
- public void doManipulations(EList<?> list)
- {
- list.remove(0);
- }
- });
- }
-
- public void testListSimpleMove()
- {
- testStoreDelta(new ListManipulator()
- {
- public void doManipulations(EList<?> list)
- {
- list.move(2, 7);
- }
- });
- }
-
- public void testListMoveToLast()
- {
- testStoreDelta(new ListManipulator()
- {
- public void doManipulations(EList<?> list)
- {
- list.move(2, list.size() - 1);
- }
- });
- }
-
- public void testListMoveToFirst()
- {
- testStoreDelta(new ListManipulator()
- {
- public void doManipulations(EList<?> list)
- {
- list.move(2, 0);
- }
- });
- }
-
- public void testListTwoIndependentMoves()
- {
- testStoreDelta(new ListManipulator()
- {
- public void doManipulations(EList<?> list)
- {
- list.move(1, 3);
- list.move(7, 4);
- }
- });
- }
-
- public void testListTwoIntersectingMoves()
- {
- testStoreDelta(new ListManipulator()
- {
- public void doManipulations(EList<?> list)
- {
- list.move(1, 7);
- list.move(3, 4);
- }
- });
- }
-
- public void testListInsertFirst()
- {
- testStoreDelta(new ListManipulator()
- {
- @SuppressWarnings("unchecked")
- public void doManipulations(EList<?> list)
- {
- EList<Company> l = (EList<Company>)list;
- Company company = getModel1Factory().createCompany();
- company.setName("NewEntry");
- l.add(0, company);
- }
- });
- }
-
- public void testListInsertMiddle()
- {
- testStoreDelta(new ListManipulator()
- {
- @SuppressWarnings("unchecked")
- public void doManipulations(EList<?> list)
- {
- EList<Company> l = (EList<Company>)list;
- Company company = getModel1Factory().createCompany();
- company.setName("NewEntry");
- l.add(5, company);
- }
- });
- }
-
- public void testListInsertLast()
- {
- testStoreDelta(new ListManipulator()
- {
- @SuppressWarnings("unchecked")
- public void doManipulations(EList<?> list)
- {
- EList<Company> l = (EList<Company>)list;
- Company company = getModel1Factory().createCompany();
- company.setName("NewEntry");
- l.add(company);
- }
- });
- }
-
- public void testListMultipleOpsWithClear()
- {
- testStoreDelta(new ListManipulator()
- {
- @SuppressWarnings("unchecked")
- public void doManipulations(EList<?> list)
- {
- EList<Company> l = (EList<Company>)list;
-
- l.remove(4);
- l.remove(7);
-
- Company company = getModel1Factory().createCompany();
- company.setName("NewEntry 1");
- l.add(5, company);
-
- l.move(1, 2);
- l.move(7, 0);
-
- l.clear();
-
- company = getModel1Factory().createCompany();
- company.setName("NewEntry 2");
- l.add(company);
-
- company = getModel1Factory().createCompany();
- company.setName("NewEntry 3");
- l.add(company);
-
- company = getModel1Factory().createCompany();
- company.setName("NewEntry 4");
- l.add(0, company);
-
- l.move(1, 2);
- }
- });
- }
-
- public void testListMultipleOps()
- {
- testStoreDelta(new ListManipulator()
- {
- @SuppressWarnings("unchecked")
- public void doManipulations(EList<?> list)
- {
- EList<Company> l = (EList<Company>)list;
-
- l.remove(7);
-
- Company company = getModel1Factory().createCompany();
- company.setName("NewEntry 1");
- l.add(5, company);
-
- l.move(1, 2);
-
- company = getModel1Factory().createCompany();
- company.setName("NewEntry 2");
- l.add(company);
-
- l.move(7, 0);
-
- company = getModel1Factory().createCompany();
- company.setName("NewEntry 3");
- l.add(company);
-
- l.remove(4);
-
- company = getModel1Factory().createCompany();
- company.setName("NewEntry 4");
- l.add(0, company);
-
- l.move(1, 2);
- }
- });
- }
-
- public void testMultipleInserts()
- {
- testStoreDelta(new ListManipulator()
- {
- @SuppressWarnings("unchecked")
- public void doManipulations(EList<?> list)
- {
- EList<Company> l = (EList<Company>)list;
- Company company = getModel1Factory().createCompany();
- company.setName("NewEntry 1");
- l.add(7, company);
- company = getModel1Factory().createCompany();
- company.setName("NewEntry 2");
- l.add(12, company);
- }
- });
- }
-
- public void testInsertAndRemove()
- {
- testStoreDelta(new ListManipulator()
- {
- @SuppressWarnings("unchecked")
- public void doManipulations(EList<?> list)
- {
- EList<Company> l = (EList<Company>)list;
- Company company = getModel1Factory().createCompany();
- company.setName("NewEntry 1");
- l.add(7, company);
- l.remove(12);
- }
- });
- }
-
- public void testInsertAndMove()
- {
- testStoreDelta(new ListManipulator()
- {
- @SuppressWarnings("unchecked")
- public void doManipulations(EList<?> list)
- {
- EList<Company> l = (EList<Company>)list;
- Company company = getModel1Factory().createCompany();
- company.setName("NewEntry 1");
- l.add(7, company);
- l.move(12, 7);
- }
- });
- }
-
- public void testMoveAndDelete()
- {
- testStoreDelta(new ListManipulator()
- {
- @SuppressWarnings("unchecked")
- public void doManipulations(EList<?> list)
- {
- EList<Company> l = (EList<Company>)list;
- l.move(12, 7);
- l.remove(12);
- }
- });
- }
-
- public void testInsertAndMoveAndRemove()
- {
- testStoreDelta(new ListManipulator()
- {
- @SuppressWarnings("unchecked")
- public void doManipulations(EList<?> list)
- {
- EList<Company> l = (EList<Company>)list;
- Company company = getModel1Factory().createCompany();
- company.setName("NewEntry 1");
- l.add(7, company);
- l.move(12, 7);
- l.remove(12);
- }
- });
- }
-
- public void testInsertAndSet()
- {
- testStoreDelta(new ListManipulator()
- {
- @SuppressWarnings("unchecked")
- public void doManipulations(EList<?> list)
- {
- EList<Company> l = (EList<Company>)list;
- Company company = getModel1Factory().createCompany();
- company.setName("NewEntry 1");
- l.add(7, company);
- Company company2 = getModel1Factory().createCompany();
- company2.setName("NewEntry 2");
- l.set(7, company2);
- l.add(19, company); // <- needed because the set operation makes the company a dangling reference
- }
- });
- }
-
- public void testSetAndRemove()
- {
- testStoreDelta(new ListManipulator()
- {
- @SuppressWarnings("unchecked")
- public void doManipulations(EList<?> list)
- {
- EList<Company> l = (EList<Company>)list;
- Company company = getModel1Factory().createCompany();
- company.setName("NewEntry 1");
- Company oldCompany = l.get(7);
- l.set(7, company);
- l.add(19, oldCompany);
- l.remove(7); // <- needed because the set operation makes the company a dangling reference
- }
- });
- }
-
- public void testMultipleRemoves()
- {
- testStoreDelta(new ListManipulator()
- {
- @SuppressWarnings("unchecked")
- public void doManipulations(EList<?> list)
- {
- EList<Company> l = (EList<Company>)list;
- l.remove(7);
- l.remove(12);
- }
- });
- }
-
- private InternalCDORevision getCopyCDORevision(Object object)
- {
- return (InternalCDORevision)CDOUtil.getCDOObject((EObject)object).cdoRevision().copy();
- }
-
- protected void testStoreDelta(ListManipulator manipulator)
- {
- BasicEList<Company> reference = new BasicEList<Company>();
-
- {
- CDOSession session = openSession();
- CDOTransaction transaction = session.openTransaction();
- CDOResource resource = transaction.createResource(getResourcePath("/test1"));
-
- for (int i = 0; i < 20; i++)
- {
- String name = "company " + i;
- Company company = getModel1Factory().createCompany();
- company.setName(name);
- resource.getContents().add(company);
-
- company = getModel1Factory().createCompany();
- company.setName(name);
- reference.add(company);
- }
-
- try
- {
- transaction.commit();
- }
- catch (CommitException ex)
- {
- throw WrappedException.wrap(ex);
- }
-
- transaction.close();
- session.close();
- }
-
- clearCache(getRepository().getRevisionManager());
-
- {
- CDOSession session = openSession();
- CDOTransaction transaction = session.openTransaction();
- CDOResource resource = transaction.getResource(getResourcePath("/test1"));
-
- manipulator.doManipulations(resource.getContents());
- manipulator.doManipulations(reference);
-
- try
- {
- transaction.commit();
- }
- catch (CommitException ex)
- {
- throw WrappedException.wrap(ex);
- }
-
- transaction.close();
- session.close();
- }
-
- clearCache(getRepository().getRevisionManager());
-
- {
- CDOSession session = openSession();
- CDOView view = session.openView();
- CDOResource resource = view.getResource(getResourcePath("/test1"));
-
- assertEquals(reference.size(), resource.getContents().size());
-
- for (int i = 0; i < reference.size(); i++)
- {
- assertEquals(reference.get(i).getName(), ((Company)resource.getContents().get(i)).getName());
- }
-
- view.close();
- session.close();
- }
- }
-
- /**
- * @author Simon McDuff
- */
- protected static interface ListManipulator
- {
- public void doManipulations(EList<?> list);
- }
-}
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Simon McDuff - initial API and implementation
+ * Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.tests;
+
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.revision.CDORevision;
+import org.eclipse.emf.cdo.common.revision.CDORevisionUtil;
+import org.eclipse.emf.cdo.common.revision.delta.CDOAddFeatureDelta;
+import org.eclipse.emf.cdo.common.revision.delta.CDOClearFeatureDelta;
+import org.eclipse.emf.cdo.common.revision.delta.CDOListFeatureDelta;
+import org.eclipse.emf.cdo.common.revision.delta.CDORevisionDelta;
+import org.eclipse.emf.cdo.common.revision.delta.CDOSetFeatureDelta;
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.internal.common.revision.delta.CDOListFeatureDeltaImpl;
+import org.eclipse.emf.cdo.internal.server.mem.MEMStore;
+import org.eclipse.emf.cdo.server.IStore;
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionManager;
+import org.eclipse.emf.cdo.tests.model1.Category;
+import org.eclipse.emf.cdo.tests.model1.Company;
+import org.eclipse.emf.cdo.tests.model1.Customer;
+import org.eclipse.emf.cdo.tests.model1.SalesOrder;
+import org.eclipse.emf.cdo.tests.model3.NodeD;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+import org.eclipse.emf.cdo.util.CDOUtil;
+import org.eclipse.emf.cdo.util.CommitException;
+import org.eclipse.emf.cdo.view.CDOView;
+
+import org.eclipse.net4j.util.WrappedException;
+import org.eclipse.net4j.util.io.IOUtil;
+
+import org.eclipse.emf.common.util.BasicEList;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.spi.cdo.InternalCDOTransaction;
+
+/**
+ * See bug 201266
+ *
+ * @author Simon McDuff
+ */
+public class RevisionDeltaTest extends AbstractCDOTest
+{
+ public RevisionDeltaTest()
+ {
+ }
+
+ public void testBasicRevisionDelta() throws Exception
+ {
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOResource resource1 = transaction.createResource(getResourcePath("/test1"));
+
+ Company company1 = getModel1Factory().createCompany();
+ Category category1 = getModel1Factory().createCategory();
+
+ resource1.getContents().add(company1);
+ company1.getCategories().add(category1);
+
+ company1.setName("TEST");
+ InternalCDORevision rev1 = getCopyCDORevision(company1);
+
+ // Test simple attributes
+ company1.setName("TEST3");
+ InternalCDORevision rev2 = getCopyCDORevision(company1);
+
+ CDORevisionDelta revisionDelta = rev2.compare(rev1);
+ assertEquals(1, revisionDelta.getFeatureDeltas().size());
+ CDOSetFeatureDelta setDelta = (CDOSetFeatureDelta)revisionDelta.getFeatureDeltas().get(0);
+ assertEquals("TEST3", setDelta.getValue());
+
+ // Test List clear
+ company1.getCategories().clear();
+ InternalCDORevision rev3 = getCopyCDORevision(company1);
+
+ CDORevisionDelta revisionDelta3 = rev3.compare(rev2);
+ assertEquals(1, revisionDelta3.getFeatureDeltas().size());
+ CDOListFeatureDeltaImpl delta3List = (CDOListFeatureDeltaImpl)revisionDelta3.getFeatureDeltas().get(0);
+
+ assertEquals(1, delta3List.getListChanges().size());
+ assertEquals(true, delta3List.getListChanges().get(0) instanceof CDOClearFeatureDelta);
+
+ // Test List Add
+ for (int i = 0; i < 5; i++)
+ {
+ Category category = getModel1Factory().createCategory();
+ company1.getCategories().add(category);
+ }
+
+ InternalCDORevision rev4 = getCopyCDORevision(company1);
+
+ CDORevisionDelta revisionDelta4 = rev4.compare(rev3);
+ assertEquals(1, revisionDelta4.getFeatureDeltas().size());
+ CDOListFeatureDeltaImpl delta4List = (CDOListFeatureDeltaImpl)revisionDelta4.getFeatureDeltas().get(0);
+
+ assertEquals(5, delta4List.getListChanges().size());
+ assertEquals(true, delta4List.getListChanges().get(0) instanceof CDOAddFeatureDelta);
+ transaction.rollback();
+ transaction.close();
+ session.close();
+ }
+
+ /**
+ * Sending deltas doesn't adjust CDOIDs
+ * <p>
+ * See bug 214374
+ */
+ public void testBugzilla214374() throws Exception
+ {
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOResource resource = transaction.createResource(getResourcePath("/test1"));
+
+ SalesOrder salesOrder = getModel1Factory().createSalesOrder();
+ resource.getContents().add(salesOrder);
+ transaction.commit();
+
+ Customer customer = getModel1Factory().createCustomer();
+ salesOrder.setCustomer(customer);
+
+ resource.getContents().add(customer);
+ transaction.commit();
+ transaction.close();
+
+ CDOTransaction transaction2 = session.openTransaction();
+ SalesOrder salesOrder2 = (SalesOrder)CDOUtil.getEObject(transaction2.getObject(CDOUtil.getCDOObject(salesOrder)
+ .cdoID(), true));
+ CDORevision salesRevision = CDOUtil.getCDOObject(salesOrder2).cdoRevision();
+ EStructuralFeature customerFeature = getModel1Package().getSalesOrder_Customer();
+
+ Object value = salesRevision.data().get(customerFeature, 0);
+ assertEquals(true, value instanceof CDOID);
+ transaction2.close();
+ session.close();
+ }
+
+ /**
+ * CDOView.getRevision() does not work for transactions/dirty objects (INVALID)
+ * <p>
+ * See bug 214431
+ */
+ public void testBugzilla214431() throws Exception
+ {
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOResource resource = transaction.createResource(getResourcePath("/test1"));
+
+ SalesOrder salesOrder = getModel1Factory().createSalesOrder();
+ resource.getContents().add(salesOrder);
+ transaction.commit();
+
+ salesOrder.setId(4711);
+ assertNotSame(CDOUtil.getCDOObject(salesOrder).cdoRevision(),
+ ((InternalCDOTransaction)transaction).getRevision(CDOUtil.getCDOObject(salesOrder).cdoID(), true));
+ assertEquals(CDOUtil.getCDOObject(salesOrder).cdoRevision(),
+ transaction.getDirtyObjects().get(CDOUtil.getCDOObject(salesOrder).cdoID()).cdoRevision());
+ transaction.close();
+ session.close();
+ }
+
+ /**
+ * CDOView.getRevision() does not work for transactions/dirty objects (INVALID)
+ * <p>
+ * See bug 214374
+ */
+ public void testBugzilla214374_HandleClear() throws Exception
+ {
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOResource resource = transaction.createResource(getResourcePath("/test1"));
+
+ Customer customer = getModel1Factory().createCustomer();
+ resource.getContents().add(customer);
+
+ SalesOrder salesOrder = getModel1Factory().createSalesOrder();
+ resource.getContents().add(salesOrder);
+ customer.getSalesOrders().add(salesOrder);
+ customer.getSalesOrders().add(salesOrder);
+ transaction.commit();
+
+ salesOrder = getModel1Factory().createSalesOrder();
+ customer = getModel1Factory().createCustomer();
+ resource.getContents().add(salesOrder);
+ resource.getContents().add(customer);
+ salesOrder.setCustomer(customer);
+ transaction.commit();
+ transaction.close();
+ session.close();
+ }
+
+ /**
+ * java.lang.IllegalStateException with MEMStore
+ * <p>
+ * See bug 243282
+ */
+ public void testBugzilla243282_Exception() throws Exception
+ {
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOResource resource = transaction.createResource(getResourcePath("/test1"));
+
+ Customer customer = getModel1Factory().createCustomer();
+ resource.getContents().add(customer);
+
+ transaction.commit();
+
+ InternalCDORevisionManager revisionManager = getRepository().getRevisionManager();
+ CDORevision revision = CDOUtil.getCDOObject(customer).cdoRevision();
+ revisionManager.getCache().removeRevision(revision.getID(), revision);
+
+ SalesOrder salesOrder = getModel1Factory().createSalesOrder();
+ resource.getContents().add(salesOrder);
+ customer.getSalesOrders().add(salesOrder);
+
+ IStore store = getRepository().getStore();
+ if (store instanceof MEMStore)
+ {
+ MEMStore memStore = (MEMStore)store;
+ CDORevisionUtil.dumpAllRevisions(memStore.getAllRevisions(), IOUtil.OUT());
+ }
+
+ transaction.commit();
+ transaction.close();
+ session.close();
+ }
+
+ @SuppressWarnings("unused")
+ public void testDetachWithXRef() throws Exception
+ {
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOResource resource = transaction.createResource(getResourcePath("/test1"));
+
+ NodeD a = getModel3Factory().createNodeD();
+ NodeD b = getModel3Factory().createNodeD();
+ NodeD c = getModel3Factory().createNodeD();
+
+ a.getChildren().add(b);
+ c.getOtherNodes().add(b);
+
+ resource.getContents().add(a);
+ resource.getContents().add(c);
+
+ if (true)
+ {
+ transaction.commit();
+ transaction.close();
+ transaction = session.openTransaction();
+ resource = transaction.getResource(getResourcePath("/test1"));
+ }
+
+ // Start test logic
+
+ a = (NodeD)resource.getContents().get(0);
+ b = a.getChildren().get(0);
+ c = (NodeD)resource.getContents().get(1);
+
+ a.getChildren().remove(0);
+ Object[] cB = c.getOtherNodes().toArray();
+
+ CDORevisionDelta aDelta = transaction.getRevisionDeltas().get(CDOUtil.getCDOObject(a).cdoID());
+ CDORevisionDelta cDelta = transaction.getRevisionDeltas().get(CDOUtil.getCDOObject(c).cdoID());
+
+ session.close();
+ }
+
+ @SuppressWarnings("unused")
+ public void testDetachWithXRef_Remove() throws Exception
+ {
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOResource resource = transaction.createResource(getResourcePath("/test1"));
+
+ NodeD a = getModel3Factory().createNodeD();
+ NodeD b = getModel3Factory().createNodeD();
+ NodeD c = getModel3Factory().createNodeD();
+
+ a.getChildren().add(b);
+ c.getOtherNodes().add(b);
+
+ resource.getContents().add(a);
+ resource.getContents().add(c);
+
+ if (true)
+ {
+ transaction.commit();
+ transaction.close();
+ transaction = session.openTransaction();
+ resource = transaction.getResource(getResourcePath("/test1"));
+ }
+
+ // Start test logic
+
+ a = (NodeD)resource.getContents().get(0);
+ b = a.getChildren().get(0);
+ c = (NodeD)resource.getContents().get(1);
+
+ a.getChildren().remove(0);
+ c.getOtherNodes().remove(0);
+
+ Object[] cB = c.getOtherNodes().toArray();
+
+ CDORevisionDelta aDelta = transaction.getRevisionDeltas().get(CDOUtil.getCDOObject(a).cdoID());
+ CDORevisionDelta cDelta = transaction.getRevisionDeltas().get(CDOUtil.getCDOObject(c).cdoID());
+
+ CDOListFeatureDelta list = (CDOListFeatureDelta)cDelta.getFeatureDelta(getModel3Package().getNodeD_OtherNodes());
+ assertEquals(1, list.getListChanges().size());
+
+ session.close();
+ }
+
+ public void testListRemoveMiddle()
+ {
+ testStoreDelta(new ListManipulator()
+ {
+ public void doManipulations(EList<?> list)
+ {
+ list.remove(5);
+ }
+ });
+ }
+
+ public void testListRemoveLast()
+ {
+ testStoreDelta(new ListManipulator()
+ {
+ public void doManipulations(EList<?> list)
+ {
+ list.remove(list.size() - 1);
+ }
+ });
+ }
+
+ public void testListRemoveFirst()
+ {
+ testStoreDelta(new ListManipulator()
+ {
+ public void doManipulations(EList<?> list)
+ {
+ list.remove(0);
+ }
+ });
+ }
+
+ public void testListSimpleMove()
+ {
+ testStoreDelta(new ListManipulator()
+ {
+ public void doManipulations(EList<?> list)
+ {
+ list.move(2, 7);
+ }
+ });
+ }
+
+ public void testListMoveToLast()
+ {
+ testStoreDelta(new ListManipulator()
+ {
+ public void doManipulations(EList<?> list)
+ {
+ list.move(2, list.size() - 1);
+ }
+ });
+ }
+
+ public void testListMoveToFirst()
+ {
+ testStoreDelta(new ListManipulator()
+ {
+ public void doManipulations(EList<?> list)
+ {
+ list.move(2, 0);
+ }
+ });
+ }
+
+ public void testListTwoIndependentMoves()
+ {
+ testStoreDelta(new ListManipulator()
+ {
+ public void doManipulations(EList<?> list)
+ {
+ list.move(1, 3);
+ list.move(7, 4);
+ }
+ });
+ }
+
+ public void testListTwoIntersectingMoves()
+ {
+ testStoreDelta(new ListManipulator()
+ {
+ public void doManipulations(EList<?> list)
+ {
+ list.move(1, 7);
+ list.move(3, 4);
+ }
+ });
+ }
+
+ public void testListInsertFirst()
+ {
+ testStoreDelta(new ListManipulator()
+ {
+ @SuppressWarnings("unchecked")
+ public void doManipulations(EList<?> list)
+ {
+ EList<Company> l = (EList<Company>)list;
+ Company company = getModel1Factory().createCompany();
+ company.setName("NewEntry");
+ l.add(0, company);
+ }
+ });
+ }
+
+ public void testListInsertMiddle()
+ {
+ testStoreDelta(new ListManipulator()
+ {
+ @SuppressWarnings("unchecked")
+ public void doManipulations(EList<?> list)
+ {
+ EList<Company> l = (EList<Company>)list;
+ Company company = getModel1Factory().createCompany();
+ company.setName("NewEntry");
+ l.add(5, company);
+ }
+ });
+ }
+
+ public void testListInsertLast()
+ {
+ testStoreDelta(new ListManipulator()
+ {
+ @SuppressWarnings("unchecked")
+ public void doManipulations(EList<?> list)
+ {
+ EList<Company> l = (EList<Company>)list;
+ Company company = getModel1Factory().createCompany();
+ company.setName("NewEntry");
+ l.add(company);
+ }
+ });
+ }
+
+ public void testListMultipleOpsWithClear()
+ {
+ testStoreDelta(new ListManipulator()
+ {
+ @SuppressWarnings("unchecked")
+ public void doManipulations(EList<?> list)
+ {
+ EList<Company> l = (EList<Company>)list;
+
+ l.remove(4);
+ l.remove(7);
+
+ Company company = getModel1Factory().createCompany();
+ company.setName("NewEntry 1");
+ l.add(5, company);
+
+ l.move(1, 2);
+ l.move(7, 0);
+
+ l.clear();
+
+ company = getModel1Factory().createCompany();
+ company.setName("NewEntry 2");
+ l.add(company);
+
+ company = getModel1Factory().createCompany();
+ company.setName("NewEntry 3");
+ l.add(company);
+
+ company = getModel1Factory().createCompany();
+ company.setName("NewEntry 4");
+ l.add(0, company);
+
+ l.move(1, 2);
+ }
+ });
+ }
+
+ public void testListMultipleOps()
+ {
+ testStoreDelta(new ListManipulator()
+ {
+ @SuppressWarnings("unchecked")
+ public void doManipulations(EList<?> list)
+ {
+ EList<Company> l = (EList<Company>)list;
+
+ l.remove(7);
+
+ Company company = getModel1Factory().createCompany();
+ company.setName("NewEntry 1");
+ l.add(5, company);
+
+ l.move(1, 2);
+
+ company = getModel1Factory().createCompany();
+ company.setName("NewEntry 2");
+ l.add(company);
+
+ l.move(7, 0);
+
+ company = getModel1Factory().createCompany();
+ company.setName("NewEntry 3");
+ l.add(company);
+
+ l.remove(4);
+
+ company = getModel1Factory().createCompany();
+ company.setName("NewEntry 4");
+ l.add(0, company);
+
+ l.move(1, 2);
+ }
+ });
+ }
+
+ public void testMultipleInserts()
+ {
+ testStoreDelta(new ListManipulator()
+ {
+ @SuppressWarnings("unchecked")
+ public void doManipulations(EList<?> list)
+ {
+ EList<Company> l = (EList<Company>)list;
+ Company company = getModel1Factory().createCompany();
+ company.setName("NewEntry 1");
+ l.add(7, company);
+ company = getModel1Factory().createCompany();
+ company.setName("NewEntry 2");
+ l.add(12, company);
+ }
+ });
+ }
+
+ public void testInsertAndRemove()
+ {
+ testStoreDelta(new ListManipulator()
+ {
+ @SuppressWarnings("unchecked")
+ public void doManipulations(EList<?> list)
+ {
+ EList<Company> l = (EList<Company>)list;
+ Company company = getModel1Factory().createCompany();
+ company.setName("NewEntry 1");
+ l.add(7, company);
+ l.remove(12);
+ }
+ });
+ }
+
+ public void testInsertAndMove()
+ {
+ testStoreDelta(new ListManipulator()
+ {
+ @SuppressWarnings("unchecked")
+ public void doManipulations(EList<?> list)
+ {
+ EList<Company> l = (EList<Company>)list;
+ Company company = getModel1Factory().createCompany();
+ company.setName("NewEntry 1");
+ l.add(7, company);
+ l.move(12, 7);
+ }
+ });
+ }
+
+ public void testMoveAndDelete()
+ {
+ testStoreDelta(new ListManipulator()
+ {
+ @SuppressWarnings("unchecked")
+ public void doManipulations(EList<?> list)
+ {
+ EList<Company> l = (EList<Company>)list;
+ l.move(12, 7);
+ l.remove(12);
+ }
+ });
+ }
+
+ public void testInsertAndMoveAndRemove()
+ {
+ testStoreDelta(new ListManipulator()
+ {
+ @SuppressWarnings("unchecked")
+ public void doManipulations(EList<?> list)
+ {
+ EList<Company> l = (EList<Company>)list;
+ Company company = getModel1Factory().createCompany();
+ company.setName("NewEntry 1");
+ l.add(7, company);
+ l.move(12, 7);
+ l.remove(12);
+ }
+ });
+ }
+
+ public void testInsertAndSet()
+ {
+ testStoreDelta(new ListManipulator()
+ {
+ @SuppressWarnings("unchecked")
+ public void doManipulations(EList<?> list)
+ {
+ EList<Company> l = (EList<Company>)list;
+ Company company = getModel1Factory().createCompany();
+ company.setName("NewEntry 1");
+ l.add(7, company);
+ Company company2 = getModel1Factory().createCompany();
+ company2.setName("NewEntry 2");
+ l.set(7, company2);
+ l.add(19, company); // <- needed because the set operation makes the company a dangling reference
+ }
+ });
+ }
+
+ public void testSetAndRemove()
+ {
+ testStoreDelta(new ListManipulator()
+ {
+ @SuppressWarnings("unchecked")
+ public void doManipulations(EList<?> list)
+ {
+ EList<Company> l = (EList<Company>)list;
+ Company company = getModel1Factory().createCompany();
+ company.setName("NewEntry 1");
+ Company oldCompany = l.get(7);
+ l.set(7, company);
+ l.add(19, oldCompany);
+ l.remove(7); // <- needed because the set operation makes the company a dangling reference
+ }
+ });
+ }
+
+ public void testMultipleRemoves()
+ {
+ testStoreDelta(new ListManipulator()
+ {
+ @SuppressWarnings("unchecked")
+ public void doManipulations(EList<?> list)
+ {
+ EList<Company> l = (EList<Company>)list;
+ l.remove(7);
+ l.remove(12);
+ }
+ });
+ }
+
+ private InternalCDORevision getCopyCDORevision(Object object)
+ {
+ return (InternalCDORevision)CDOUtil.getCDOObject((EObject)object).cdoRevision().copy();
+ }
+
+ protected void testStoreDelta(ListManipulator manipulator)
+ {
+ BasicEList<Company> reference = new BasicEList<Company>();
+
+ {
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOResource resource = transaction.createResource(getResourcePath("/test1"));
+
+ for (int i = 0; i < 20; i++)
+ {
+ String name = "company " + i;
+ Company company = getModel1Factory().createCompany();
+ company.setName(name);
+ resource.getContents().add(company);
+
+ company = getModel1Factory().createCompany();
+ company.setName(name);
+ reference.add(company);
+ }
+
+ try
+ {
+ transaction.commit();
+ }
+ catch (CommitException ex)
+ {
+ throw WrappedException.wrap(ex);
+ }
+
+ transaction.close();
+ session.close();
+ }
+
+ clearCache(getRepository().getRevisionManager());
+
+ {
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOResource resource = transaction.getResource(getResourcePath("/test1"));
+
+ manipulator.doManipulations(resource.getContents());
+ manipulator.doManipulations(reference);
+
+ try
+ {
+ transaction.commit();
+ }
+ catch (CommitException ex)
+ {
+ throw WrappedException.wrap(ex);
+ }
+
+ transaction.close();
+ session.close();
+ }
+
+ clearCache(getRepository().getRevisionManager());
+
+ {
+ CDOSession session = openSession();
+ CDOView view = session.openView();
+ CDOResource resource = view.getResource(getResourcePath("/test1"));
+
+ assertEquals(reference.size(), resource.getContents().size());
+
+ for (int i = 0; i < reference.size(); i++)
+ {
+ assertEquals(reference.get(i).getName(), ((Company)resource.getContents().get(i)).getName());
+ }
+
+ view.close();
+ session.close();
+ }
+ }
+
+ /**
+ * @author Simon McDuff
+ */
+ protected static interface ListManipulator
+ {
+ public void doManipulations(EList<?> list);
+ }
+}

Back to the top