Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/PushTransactionTest.java')
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/PushTransactionTest.java1308
1 files changed, 654 insertions, 654 deletions
diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/PushTransactionTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/PushTransactionTest.java
index 57c6fb29a1..a24d049e9b 100644
--- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/PushTransactionTest.java
+++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/PushTransactionTest.java
@@ -1,654 +1,654 @@
-/*
- * 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:
- * Gonzague Reydet - initial API and implementation
- */
-package org.eclipse.emf.cdo.tests;
-
-import org.eclipse.emf.cdo.common.revision.delta.CDORevisionDelta;
-import org.eclipse.emf.cdo.eresource.CDOResource;
-import org.eclipse.emf.cdo.session.CDOSession;
-import org.eclipse.emf.cdo.tests.model1.Category;
-import org.eclipse.emf.cdo.tests.model1.Company;
-import org.eclipse.emf.cdo.tests.model1.OrderDetail;
-import org.eclipse.emf.cdo.tests.model1.PurchaseOrder;
-import org.eclipse.emf.cdo.tests.model1.Supplier;
-import org.eclipse.emf.cdo.transaction.CDOPushTransaction;
-import org.eclipse.emf.cdo.transaction.CDOTransaction;
-import org.eclipse.emf.cdo.util.CommitException;
-import org.eclipse.emf.cdo.util.ObjectNotFoundException;
-import org.eclipse.emf.cdo.view.CDOView;
-
-import org.eclipse.net4j.util.WrappedException;
-import org.eclipse.net4j.util.om.OMPlatform;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Date;
-
-/**
- * @author Gonzague Reydet
- */
-public class PushTransactionTest extends AbstractCDOTest
-{
- private String resourcePath = "res1";
-
- private String supplierName = "supplier0";
-
- private File file;
-
- @Override
- protected void doSetUp() throws Exception
- {
- OMPlatform.INSTANCE.setDebugging(false);
- super.doSetUp();
- populateRepository();
- }
-
- @Override
- protected void doTearDown() throws Exception
- {
- if (file != null)
- {
- file.delete();
- }
-
- super.doTearDown();
- }
-
- public void testUpdateExistingObject() throws Exception
- {
- String newName = "supplier" + System.currentTimeMillis();
-
- {
- msg("Open session & local transaction");
- CDOSession session = openSession();
- CDOTransaction transaction = session.openTransaction();
- CDOPushTransaction pushTransaction = openPushTransaction(transaction);
- file = pushTransaction.getFile();
- CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath));
- msg("Make a diff in existing element");
- Supplier supplier = (Supplier)resource.getContents().get(0);
- supplier.setName(newName);
- msg("Commit");
- pushTransaction.commit();
- session.close();
- }
-
- {
- msg("Reload previous local session");
- CDOSession session = openSession();
- CDOTransaction transaction = session.openTransaction();
- CDOPushTransaction pushTransaction = openPushTransaction(transaction, file);
- assertEquals(true, transaction.isDirty());
- assertEquals(1, transaction.getRevisionDeltas().size());
- push(transaction, pushTransaction);
- session.close();
- }
-
- CDOSession session = openSession();
- CDOView view = session.openView();
- CDOResource resource = view.getResource(getResourcePath(resourcePath));
- assertEquals(2, resource.getContents().size());
- Supplier supplier = (Supplier)resource.getContents().get(0);
- assertNotNull(supplier);
- assertEquals(newName, supplier.getName());
- }
-
- public void testDeleteExistingObject() throws Exception
- {
- {
- msg("Open session & local transaction");
- CDOSession session = openSession();
- CDOTransaction transaction = session.openTransaction();
- CDOPushTransaction pushTransaction = openPushTransaction(transaction);
- file = pushTransaction.getFile();
- CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath));
- msg("Remove an existing element");
- Supplier supplier = (Supplier)resource.getContents().get(0);
- resource.getContents().remove(supplier);
- msg("Commit");
- pushTransaction.commit();
- session.close();
- }
-
- {
- msg("Reload previous local session");
- CDOSession session = openSession();
- CDOTransaction transaction = session.openTransaction();
- CDOPushTransaction pushTransaction = openPushTransaction(transaction, file);
- assertEquals(true, transaction.isDirty());
- assertEquals(1, transaction.getRevisionDeltas().size());
- push(transaction, pushTransaction);
- session.close();
- }
-
- CDOSession session = openSession();
- CDOView view = session.openView();
- CDOResource resource = view.getResource(getResourcePath(resourcePath));
- assertEquals(1, resource.getContents().size());
- }
-
- public void testAddNewObjectInResource() throws Exception
- {
- {
- msg("Open session & local transaction");
- CDOSession session = openSession();
- CDOTransaction transaction = session.openTransaction();
- CDOPushTransaction pushTransaction = openPushTransaction(transaction);
- file = pushTransaction.getFile();
- CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath));
- msg("Create a new element");
- Supplier supplier = getModel1Factory().createSupplier();
- supplier.setName("supplier" + System.currentTimeMillis());
- resource.getContents().add(supplier);
- msg("Commit");
- pushTransaction.commit();
- session.close();
- }
-
- {
- msg("Reload previous local session");
- CDOSession session = openSession();
- CDOTransaction transaction = session.openTransaction();
- CDOPushTransaction pushTransaction = openPushTransaction(transaction, file);
- assertEquals(true, transaction.isDirty());
- assertEquals(1, transaction.getRevisionDeltas().size());
- CDORevisionDelta delta = transaction.getRevisionDeltas().values().iterator().next();
- assertNotNull(delta);
- push(transaction, pushTransaction);
- session.close();
- }
-
- CDOSession session = openSession();
- CDOView view = session.openView();
- CDOResource resource = view.getResource(getResourcePath(resourcePath));
- assertEquals(3, resource.getContents().size());
- }
-
- public void testAddNewObjectInObject() throws Exception
- {
- {
- msg("Open session & local transaction");
- CDOSession session = openSession();
- CDOTransaction transaction = session.openTransaction();
- CDOPushTransaction pushTransaction = openPushTransaction(transaction);
- file = pushTransaction.getFile();
- CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath));
- msg("Create a new element");
- Category category = getModel1Factory().createCategory();
- Company company = (Company)resource.getContents().get(1);
- company.getCategories().add(category);
- msg("Commit");
- pushTransaction.commit();
- session.close();
- }
-
- {
- msg("Reload previous local session");
- CDOSession session = openSession();
- CDOTransaction transaction = session.openTransaction();
- CDOPushTransaction pushTransaction = openPushTransaction(transaction, file);
- assertEquals(true, transaction.isDirty());
- assertEquals(1, transaction.getRevisionDeltas().size());
- CDORevisionDelta delta = transaction.getRevisionDeltas().values().iterator().next();
- assertNotNull(delta);
- push(transaction, pushTransaction);
- session.close();
- }
-
- CDOSession session = openSession();
- CDOView view = session.openView();
- CDOResource resource = view.getResource(getResourcePath(resourcePath));
- assertEquals(2, resource.getContents().size());
- }
-
- public void testAddNewObjectInObjectBetweenReloadAndPush() throws Exception
- {
- {
- msg("Open session & local transaction");
- CDOSession session = openSession();
- CDOTransaction transaction = session.openTransaction();
- CDOPushTransaction pushTransaction = openPushTransaction(transaction);
- file = pushTransaction.getFile();
- CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath));
- msg("Create a new element");
- Category category = getModel1Factory().createCategory();
- Company company = (Company)resource.getContents().get(1);
- company.getCategories().add(category);
- msg("Commit");
- pushTransaction.commit();
- session.close();
- }
-
- {
- msg("Reload previous local session");
- CDOSession session = openSession();
- CDOTransaction transaction = session.openTransaction();
- CDOPushTransaction pushTransaction = openPushTransaction(transaction, file);
- assertEquals(true, transaction.isDirty());
- assertEquals(1, transaction.getRevisionDeltas().size());
- CDORevisionDelta delta = transaction.getRevisionDeltas().values().iterator().next();
- assertNotNull(delta);
-
- msg("Create a new element");
- Category category = getModel1Factory().createCategory();
- CDOResource resource = transaction.getResource(getResourcePath(resourcePath));
- resource.getContents().add(category);
- msg("Commit");
- pushTransaction.commit();
-
- push(transaction, pushTransaction);
- session.close();
- }
-
- CDOSession session = openSession();
- CDOView view = session.openView();
- CDOResource resource = view.getResource(getResourcePath(resourcePath));
- assertEquals(3, resource.getContents().size());
- }
-
- public void testAddNewObjectInObjectTwiceBetweenReloadAndPush() throws Exception
- {
- {
- msg("Open session & local transaction");
- CDOSession session = openSession();
- CDOTransaction transaction = session.openTransaction();
- CDOPushTransaction pushTransaction = openPushTransaction(transaction);
- file = pushTransaction.getFile();
- CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath));
- msg("Create a new element");
- Category category = getModel1Factory().createCategory();
- Company company = (Company)resource.getContents().get(1);
- company.getCategories().add(category);
- msg("Commit");
- pushTransaction.commit();
- session.close();
- }
-
- {
- msg("Reload previous local session");
- CDOSession session = openSession();
- CDOTransaction transaction = session.openTransaction();
- CDOPushTransaction pushTransaction = openPushTransaction(transaction, file);
- assertEquals(true, transaction.isDirty());
- assertEquals(1, transaction.getRevisionDeltas().size());
- CDORevisionDelta delta = transaction.getRevisionDeltas().values().iterator().next();
- assertNotNull(delta);
-
- msg("Create a new element");
- Category category = getModel1Factory().createCategory();
- CDOResource resource = transaction.getResource(getResourcePath(resourcePath));
- resource.getContents().add(category);
- msg("Commit");
- pushTransaction.commit();
-
- msg("Create a new element");
- category = getModel1Factory().createCategory();
- resource.getContents().add(category);
- msg("Commit");
- pushTransaction.commit();
-
- push(transaction, pushTransaction);
- session.close();
- }
-
- CDOSession session = openSession();
- CDOView view = session.openView();
- CDOResource resource = view.getResource(getResourcePath(resourcePath));
- assertEquals(4, resource.getContents().size());
- }
-
- @CleanRepositoriesBefore
- public void testAddNewResource() throws Exception
- {
- String resourcePath2 = "res2";
-
- {
- msg("Open session & local transaction");
- CDOSession session = openSession();
- CDOTransaction transaction = session.openTransaction();
- CDOPushTransaction pushTransaction = openPushTransaction(transaction);
- file = pushTransaction.getFile();
- CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath));
- msg("Create a new resource");
- CDOResource resource2 = transaction.createResource(resourcePath2);
- resource.getContents().add(resource2);
- msg("Commit");
- pushTransaction.commit();
- session.close();
- }
-
- {
- msg("Reload previous local session");
- CDOSession session = openSession();
- CDOTransaction transaction = session.openTransaction();
- CDOPushTransaction pushTransaction = openPushTransaction(transaction, file);
- assertEquals(true, transaction.isDirty());
- CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath));
- CDOResource resource2 = (CDOResource)resource.getContents().get(2);
- assertNotNull(resource2);
- push(transaction, pushTransaction);
- session.close();
- }
-
- CDOSession session = openSession();
- CDOView view = session.openView();
- assertEquals(1, view.getRootResource().getContents().size());
- CDOResource resource = view.getResource(getResourcePath(resourcePath));
- CDOResource resource2 = (CDOResource)resource.getContents().get(2);
- assertNotNull(resource2);
- }
-
- public void testAddNewHierarchy() throws Exception
- {
- final String currentSupplierName = "supplier" + System.currentTimeMillis();
- final Date orderDate = new Date();
- final Float orderDetailPrice = 10.5F;
-
- {
- msg("Open session & local transaction");
- CDOSession session = openSession();
- CDOTransaction transaction = session.openTransaction();
- CDOPushTransaction pushTransaction = openPushTransaction(transaction);
- file = pushTransaction.getFile();
- CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath));
- msg("Create a new element");
- Supplier supplier = getModel1Factory().createSupplier();
- supplier.setName(currentSupplierName);
- resource.getContents().add(supplier);
- msg("Create a new child");
- PurchaseOrder order = getModel1Factory().createPurchaseOrder();
- order.setDate(orderDate);
- supplier.getPurchaseOrders().add(order);
- resource.getContents().add(order);
- OrderDetail detail = getModel1Factory().createOrderDetail();
- detail.setPrice(orderDetailPrice);
- order.getOrderDetails().add(detail);
- msg("Commit");
- pushTransaction.commit();
- session.close();
- }
-
- {
- msg("Reload previous local session");
- CDOSession session = openSession();
- CDOTransaction transaction = session.openTransaction();
- CDOPushTransaction pushTransaction = openPushTransaction(transaction, file);
- assertEquals(true, transaction.isDirty());
- assertEquals(1, transaction.getRevisionDeltas().size());
- CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath));
- assertEquals(4, resource.getContents().size());
- push(transaction, pushTransaction);
- session.close();
- }
-
- CDOSession session = openSession();
- CDOView view = session.openView();
- CDOResource resource = view.getResource(getResourcePath(resourcePath));
- assertEquals(4, resource.getContents().size());
- Supplier supplier = (Supplier)resource.getContents().get(2);
- assertEquals(currentSupplierName, supplier.getName());
- assertEquals(1, supplier.getPurchaseOrders().size());
- PurchaseOrder order = supplier.getPurchaseOrders().get(0);
- assertNotNull(order);
- assertEquals(orderDate, order.getDate());
- assertEquals(1, order.getOrderDetails().size());
- OrderDetail detail = order.getOrderDetails().get(0);
- assertNotNull(detail);
- assertEquals(orderDetailPrice, detail.getPrice());
- }
-
- @CleanRepositoriesBefore
- public void testMoveObject() throws Exception
- {
- {
- msg("Open session & local transaction");
- CDOSession session = openSession();
- CDOTransaction transaction = session.openTransaction();
- CDOPushTransaction pushTransaction = openPushTransaction(transaction);
- file = pushTransaction.getFile();
- CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath));
- msg("Create a new elements");
- Supplier supplier2 = getModel1Factory().createSupplier();
- supplier2.setName("supplier" + System.currentTimeMillis());
- resource.getContents().add(supplier2);
- msg("Move first supplier");
- Supplier supplier1 = (Supplier)resource.getContents().get(0);
- resource.getContents().move(1, supplier1);
- assertEquals(supplierName, ((Supplier)resource.getContents().get(1)).getName());
- msg("Commit");
- pushTransaction.commit();
- session.close();
- }
-
- {
- msg("Reload previous local session");
- CDOSession session = openSession();
- CDOTransaction transaction = session.openTransaction();
- CDOPushTransaction pushTransaction = openPushTransaction(transaction, file);
- assertEquals(true, transaction.isDirty());
- CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath));
- assertEquals(supplierName, ((Supplier)resource.getContents().get(1)).getName());
- push(transaction, pushTransaction);
- session.close();
- }
-
- CDOSession session = openSession();
- CDOView view = session.openView();
- assertEquals(1, view.getRootResource().getContents().size());
- CDOResource resource = view.getResource(getResourcePath(resourcePath));
- assertEquals(supplierName, ((Supplier)resource.getContents().get(1)).getName());
- }
-
- public void testClearObjects() throws Exception
- {
- {
- msg("Open session & local transaction");
- CDOSession session = openSession();
- CDOTransaction transaction = session.openTransaction();
- CDOPushTransaction pushTransaction = openPushTransaction(transaction);
- file = pushTransaction.getFile();
- CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath));
- msg("Create a new elements");
- Supplier supplier2 = getModel1Factory().createSupplier();
- supplier2.setName("supplier" + System.currentTimeMillis());
- resource.getContents().add(supplier2);
- msg("Clear contents");
- resource.getContents().clear();
- msg("Commit");
- pushTransaction.commit();
- session.close();
- }
-
- {
- msg("Reload previous local session");
- CDOSession session = openSession();
- CDOTransaction transaction = session.openTransaction();
- CDOPushTransaction pushTransaction = openPushTransaction(transaction, file);
- assertEquals(true, transaction.isDirty());
- CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath));
- assertEquals(0, resource.getContents().size());
- push(transaction, pushTransaction);
- session.close();
- }
-
- CDOSession session = openSession();
- CDOView view = session.openView();
- CDOResource resource = view.getResource(getResourcePath(resourcePath));
- assertEquals(0, resource.getContents().size());
- }
-
- public void testUnsetValue() throws Exception
- {
- {
- msg("Open session & local transaction");
- CDOSession session = openSession();
- CDOTransaction transaction = session.openTransaction();
- CDOPushTransaction pushTransaction = openPushTransaction(transaction);
- file = pushTransaction.getFile();
- CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath));
- Supplier supplier = (Supplier)resource.getContents().get(0);
- supplier.setName(null);
- msg("Commit");
- pushTransaction.commit();
- session.close();
- }
-
- {
- msg("Reload previous local session");
- CDOSession session = openSession();
- CDOTransaction transaction = session.openTransaction();
- CDOPushTransaction pushTransaction = openPushTransaction(transaction, file);
- assertEquals(true, transaction.isDirty());
- CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath));
- Supplier supplier = (Supplier)resource.getContents().get(0);
- assertNull(supplier.getName());
- push(transaction, pushTransaction);
- session.close();
- }
-
- CDOSession session = openSession();
- CDOView view = session.openView();
- CDOResource resource = view.getResource(getResourcePath(resourcePath));
- Supplier supplier = (Supplier)resource.getContents().get(0);
- assertNull(supplier.getName());
- }
-
- public void testConflictWithRemovedObject() throws Exception
- {
- {
- msg("Open session & local transaction");
- CDOSession session = openSession();
- CDOTransaction transaction = session.openTransaction();
- CDOPushTransaction pushTransaction = openPushTransaction(transaction);
- file = pushTransaction.getFile();
- CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath));
- msg("Make a diff in existing element");
- Supplier supplier = (Supplier)resource.getContents().get(0);
- supplier.setName(null);
- msg("Commit");
- pushTransaction.commit();
- session.close();
- }
-
- {
- msg("Open transaction & commit changes to repo");
- CDOSession session = openSession();
- CDOTransaction transaction = session.openTransaction();
- CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath));
- resource.getContents().remove(0);
- transaction.commit();
- session.close();
- }
-
- msg("Reload previous local session");
- CDOSession session = openSession();
- CDOTransaction transaction = session.openTransaction();
-
- try
- {
- openPushTransaction(transaction, file);
- fail("ObjectNotFoundException expected");
- }
- catch (ObjectNotFoundException expected)
- {
- // SUCCESS
- }
- }
-
- public void testConflictWithModifiedObject() throws Exception
- {
- {
- msg("Open session & local transaction");
- CDOSession session = openSession();
- CDOTransaction transaction = session.openTransaction();
- CDOPushTransaction pushTransaction = openPushTransaction(transaction);
- file = pushTransaction.getFile();
- CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath));
- msg("Make a diff in existing element");
- Supplier supplier = (Supplier)resource.getContents().get(0);
- supplier.setName("" + System.currentTimeMillis());
- msg("Commit");
- pushTransaction.commit();
- session.close();
- }
-
- {
- msg("Open transaction & commit changes to repo");
- CDOSession session = openSession();
- CDOTransaction transaction = session.openTransaction();
- CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath));
- Supplier supplier = (Supplier)resource.getContents().get(0);
- supplier.setName("" + System.currentTimeMillis());
- transaction.commit();
- session.close();
- }
-
- msg("Reload previous local session");
- CDOSession session = openSession();
- CDOTransaction transaction = session.openTransaction();
- CDOPushTransaction pushTransaction = openPushTransaction(transaction, file);
- assertEquals(true, transaction.hasConflict());
-
- try
- {
- pushTransaction.push();
- fail("CommitException expected");
- }
- catch (CommitException expected)
- {
- // SUCCESS
- }
- }
-
- protected CDOPushTransaction openPushTransaction(CDOTransaction transaction) throws IOException
- {
- return new CDOPushTransaction(transaction);
- }
-
- protected CDOPushTransaction openPushTransaction(CDOTransaction transaction, File file) throws IOException
- {
- return new CDOPushTransaction(transaction, file);
- }
-
- protected void push(CDOTransaction transaction, CDOPushTransaction pushTransaction) throws CommitException
- {
- msg("Publish previous modifications");
- pushTransaction.push();
- assertEquals(false, transaction.isDirty());
- }
-
- private void populateRepository()
- {
- msg("Populate the repository the classic way");
- msg("Create resource");
- CDOSession session = openSession();
- CDOTransaction transaction = session.openTransaction();
- CDOResource resource = transaction.createResource(getResourcePath(resourcePath));
-
- msg("Populate resource");
- Supplier supplier0 = getModel1Factory().createSupplier();
- supplier0.setName(supplierName);
- resource.getContents().add(supplier0);
- Company company0 = getModel1Factory().createCompany();
- resource.getContents().add(company0);
-
- try
- {
- msg("Commit");
- transaction.commit();
- }
- catch (CommitException ex)
- {
- throw WrappedException.wrap(ex);
- }
-
- session.close();
- }
-}
+/*
+ * 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:
+ * Gonzague Reydet - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests;
+
+import org.eclipse.emf.cdo.common.revision.delta.CDORevisionDelta;
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.tests.model1.Category;
+import org.eclipse.emf.cdo.tests.model1.Company;
+import org.eclipse.emf.cdo.tests.model1.OrderDetail;
+import org.eclipse.emf.cdo.tests.model1.PurchaseOrder;
+import org.eclipse.emf.cdo.tests.model1.Supplier;
+import org.eclipse.emf.cdo.transaction.CDOPushTransaction;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+import org.eclipse.emf.cdo.util.CommitException;
+import org.eclipse.emf.cdo.util.ObjectNotFoundException;
+import org.eclipse.emf.cdo.view.CDOView;
+
+import org.eclipse.net4j.util.WrappedException;
+import org.eclipse.net4j.util.om.OMPlatform;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Date;
+
+/**
+ * @author Gonzague Reydet
+ */
+public class PushTransactionTest extends AbstractCDOTest
+{
+ private String resourcePath = "res1";
+
+ private String supplierName = "supplier0";
+
+ private File file;
+
+ @Override
+ protected void doSetUp() throws Exception
+ {
+ OMPlatform.INSTANCE.setDebugging(false);
+ super.doSetUp();
+ populateRepository();
+ }
+
+ @Override
+ protected void doTearDown() throws Exception
+ {
+ if (file != null)
+ {
+ file.delete();
+ }
+
+ super.doTearDown();
+ }
+
+ public void testUpdateExistingObject() throws Exception
+ {
+ String newName = "supplier" + System.currentTimeMillis();
+
+ {
+ msg("Open session & local transaction");
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOPushTransaction pushTransaction = openPushTransaction(transaction);
+ file = pushTransaction.getFile();
+ CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath));
+ msg("Make a diff in existing element");
+ Supplier supplier = (Supplier)resource.getContents().get(0);
+ supplier.setName(newName);
+ msg("Commit");
+ pushTransaction.commit();
+ session.close();
+ }
+
+ {
+ msg("Reload previous local session");
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOPushTransaction pushTransaction = openPushTransaction(transaction, file);
+ assertEquals(true, transaction.isDirty());
+ assertEquals(1, transaction.getRevisionDeltas().size());
+ push(transaction, pushTransaction);
+ session.close();
+ }
+
+ CDOSession session = openSession();
+ CDOView view = session.openView();
+ CDOResource resource = view.getResource(getResourcePath(resourcePath));
+ assertEquals(2, resource.getContents().size());
+ Supplier supplier = (Supplier)resource.getContents().get(0);
+ assertNotNull(supplier);
+ assertEquals(newName, supplier.getName());
+ }
+
+ public void testDeleteExistingObject() throws Exception
+ {
+ {
+ msg("Open session & local transaction");
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOPushTransaction pushTransaction = openPushTransaction(transaction);
+ file = pushTransaction.getFile();
+ CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath));
+ msg("Remove an existing element");
+ Supplier supplier = (Supplier)resource.getContents().get(0);
+ resource.getContents().remove(supplier);
+ msg("Commit");
+ pushTransaction.commit();
+ session.close();
+ }
+
+ {
+ msg("Reload previous local session");
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOPushTransaction pushTransaction = openPushTransaction(transaction, file);
+ assertEquals(true, transaction.isDirty());
+ assertEquals(1, transaction.getRevisionDeltas().size());
+ push(transaction, pushTransaction);
+ session.close();
+ }
+
+ CDOSession session = openSession();
+ CDOView view = session.openView();
+ CDOResource resource = view.getResource(getResourcePath(resourcePath));
+ assertEquals(1, resource.getContents().size());
+ }
+
+ public void testAddNewObjectInResource() throws Exception
+ {
+ {
+ msg("Open session & local transaction");
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOPushTransaction pushTransaction = openPushTransaction(transaction);
+ file = pushTransaction.getFile();
+ CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath));
+ msg("Create a new element");
+ Supplier supplier = getModel1Factory().createSupplier();
+ supplier.setName("supplier" + System.currentTimeMillis());
+ resource.getContents().add(supplier);
+ msg("Commit");
+ pushTransaction.commit();
+ session.close();
+ }
+
+ {
+ msg("Reload previous local session");
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOPushTransaction pushTransaction = openPushTransaction(transaction, file);
+ assertEquals(true, transaction.isDirty());
+ assertEquals(1, transaction.getRevisionDeltas().size());
+ CDORevisionDelta delta = transaction.getRevisionDeltas().values().iterator().next();
+ assertNotNull(delta);
+ push(transaction, pushTransaction);
+ session.close();
+ }
+
+ CDOSession session = openSession();
+ CDOView view = session.openView();
+ CDOResource resource = view.getResource(getResourcePath(resourcePath));
+ assertEquals(3, resource.getContents().size());
+ }
+
+ public void testAddNewObjectInObject() throws Exception
+ {
+ {
+ msg("Open session & local transaction");
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOPushTransaction pushTransaction = openPushTransaction(transaction);
+ file = pushTransaction.getFile();
+ CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath));
+ msg("Create a new element");
+ Category category = getModel1Factory().createCategory();
+ Company company = (Company)resource.getContents().get(1);
+ company.getCategories().add(category);
+ msg("Commit");
+ pushTransaction.commit();
+ session.close();
+ }
+
+ {
+ msg("Reload previous local session");
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOPushTransaction pushTransaction = openPushTransaction(transaction, file);
+ assertEquals(true, transaction.isDirty());
+ assertEquals(1, transaction.getRevisionDeltas().size());
+ CDORevisionDelta delta = transaction.getRevisionDeltas().values().iterator().next();
+ assertNotNull(delta);
+ push(transaction, pushTransaction);
+ session.close();
+ }
+
+ CDOSession session = openSession();
+ CDOView view = session.openView();
+ CDOResource resource = view.getResource(getResourcePath(resourcePath));
+ assertEquals(2, resource.getContents().size());
+ }
+
+ public void testAddNewObjectInObjectBetweenReloadAndPush() throws Exception
+ {
+ {
+ msg("Open session & local transaction");
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOPushTransaction pushTransaction = openPushTransaction(transaction);
+ file = pushTransaction.getFile();
+ CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath));
+ msg("Create a new element");
+ Category category = getModel1Factory().createCategory();
+ Company company = (Company)resource.getContents().get(1);
+ company.getCategories().add(category);
+ msg("Commit");
+ pushTransaction.commit();
+ session.close();
+ }
+
+ {
+ msg("Reload previous local session");
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOPushTransaction pushTransaction = openPushTransaction(transaction, file);
+ assertEquals(true, transaction.isDirty());
+ assertEquals(1, transaction.getRevisionDeltas().size());
+ CDORevisionDelta delta = transaction.getRevisionDeltas().values().iterator().next();
+ assertNotNull(delta);
+
+ msg("Create a new element");
+ Category category = getModel1Factory().createCategory();
+ CDOResource resource = transaction.getResource(getResourcePath(resourcePath));
+ resource.getContents().add(category);
+ msg("Commit");
+ pushTransaction.commit();
+
+ push(transaction, pushTransaction);
+ session.close();
+ }
+
+ CDOSession session = openSession();
+ CDOView view = session.openView();
+ CDOResource resource = view.getResource(getResourcePath(resourcePath));
+ assertEquals(3, resource.getContents().size());
+ }
+
+ public void testAddNewObjectInObjectTwiceBetweenReloadAndPush() throws Exception
+ {
+ {
+ msg("Open session & local transaction");
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOPushTransaction pushTransaction = openPushTransaction(transaction);
+ file = pushTransaction.getFile();
+ CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath));
+ msg("Create a new element");
+ Category category = getModel1Factory().createCategory();
+ Company company = (Company)resource.getContents().get(1);
+ company.getCategories().add(category);
+ msg("Commit");
+ pushTransaction.commit();
+ session.close();
+ }
+
+ {
+ msg("Reload previous local session");
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOPushTransaction pushTransaction = openPushTransaction(transaction, file);
+ assertEquals(true, transaction.isDirty());
+ assertEquals(1, transaction.getRevisionDeltas().size());
+ CDORevisionDelta delta = transaction.getRevisionDeltas().values().iterator().next();
+ assertNotNull(delta);
+
+ msg("Create a new element");
+ Category category = getModel1Factory().createCategory();
+ CDOResource resource = transaction.getResource(getResourcePath(resourcePath));
+ resource.getContents().add(category);
+ msg("Commit");
+ pushTransaction.commit();
+
+ msg("Create a new element");
+ category = getModel1Factory().createCategory();
+ resource.getContents().add(category);
+ msg("Commit");
+ pushTransaction.commit();
+
+ push(transaction, pushTransaction);
+ session.close();
+ }
+
+ CDOSession session = openSession();
+ CDOView view = session.openView();
+ CDOResource resource = view.getResource(getResourcePath(resourcePath));
+ assertEquals(4, resource.getContents().size());
+ }
+
+ @CleanRepositoriesBefore
+ public void testAddNewResource() throws Exception
+ {
+ String resourcePath2 = "res2";
+
+ {
+ msg("Open session & local transaction");
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOPushTransaction pushTransaction = openPushTransaction(transaction);
+ file = pushTransaction.getFile();
+ CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath));
+ msg("Create a new resource");
+ CDOResource resource2 = transaction.createResource(resourcePath2);
+ resource.getContents().add(resource2);
+ msg("Commit");
+ pushTransaction.commit();
+ session.close();
+ }
+
+ {
+ msg("Reload previous local session");
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOPushTransaction pushTransaction = openPushTransaction(transaction, file);
+ assertEquals(true, transaction.isDirty());
+ CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath));
+ CDOResource resource2 = (CDOResource)resource.getContents().get(2);
+ assertNotNull(resource2);
+ push(transaction, pushTransaction);
+ session.close();
+ }
+
+ CDOSession session = openSession();
+ CDOView view = session.openView();
+ assertEquals(1, view.getRootResource().getContents().size());
+ CDOResource resource = view.getResource(getResourcePath(resourcePath));
+ CDOResource resource2 = (CDOResource)resource.getContents().get(2);
+ assertNotNull(resource2);
+ }
+
+ public void testAddNewHierarchy() throws Exception
+ {
+ final String currentSupplierName = "supplier" + System.currentTimeMillis();
+ final Date orderDate = new Date();
+ final Float orderDetailPrice = 10.5F;
+
+ {
+ msg("Open session & local transaction");
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOPushTransaction pushTransaction = openPushTransaction(transaction);
+ file = pushTransaction.getFile();
+ CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath));
+ msg("Create a new element");
+ Supplier supplier = getModel1Factory().createSupplier();
+ supplier.setName(currentSupplierName);
+ resource.getContents().add(supplier);
+ msg("Create a new child");
+ PurchaseOrder order = getModel1Factory().createPurchaseOrder();
+ order.setDate(orderDate);
+ supplier.getPurchaseOrders().add(order);
+ resource.getContents().add(order);
+ OrderDetail detail = getModel1Factory().createOrderDetail();
+ detail.setPrice(orderDetailPrice);
+ order.getOrderDetails().add(detail);
+ msg("Commit");
+ pushTransaction.commit();
+ session.close();
+ }
+
+ {
+ msg("Reload previous local session");
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOPushTransaction pushTransaction = openPushTransaction(transaction, file);
+ assertEquals(true, transaction.isDirty());
+ assertEquals(1, transaction.getRevisionDeltas().size());
+ CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath));
+ assertEquals(4, resource.getContents().size());
+ push(transaction, pushTransaction);
+ session.close();
+ }
+
+ CDOSession session = openSession();
+ CDOView view = session.openView();
+ CDOResource resource = view.getResource(getResourcePath(resourcePath));
+ assertEquals(4, resource.getContents().size());
+ Supplier supplier = (Supplier)resource.getContents().get(2);
+ assertEquals(currentSupplierName, supplier.getName());
+ assertEquals(1, supplier.getPurchaseOrders().size());
+ PurchaseOrder order = supplier.getPurchaseOrders().get(0);
+ assertNotNull(order);
+ assertEquals(orderDate, order.getDate());
+ assertEquals(1, order.getOrderDetails().size());
+ OrderDetail detail = order.getOrderDetails().get(0);
+ assertNotNull(detail);
+ assertEquals(orderDetailPrice, detail.getPrice());
+ }
+
+ @CleanRepositoriesBefore
+ public void testMoveObject() throws Exception
+ {
+ {
+ msg("Open session & local transaction");
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOPushTransaction pushTransaction = openPushTransaction(transaction);
+ file = pushTransaction.getFile();
+ CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath));
+ msg("Create a new elements");
+ Supplier supplier2 = getModel1Factory().createSupplier();
+ supplier2.setName("supplier" + System.currentTimeMillis());
+ resource.getContents().add(supplier2);
+ msg("Move first supplier");
+ Supplier supplier1 = (Supplier)resource.getContents().get(0);
+ resource.getContents().move(1, supplier1);
+ assertEquals(supplierName, ((Supplier)resource.getContents().get(1)).getName());
+ msg("Commit");
+ pushTransaction.commit();
+ session.close();
+ }
+
+ {
+ msg("Reload previous local session");
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOPushTransaction pushTransaction = openPushTransaction(transaction, file);
+ assertEquals(true, transaction.isDirty());
+ CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath));
+ assertEquals(supplierName, ((Supplier)resource.getContents().get(1)).getName());
+ push(transaction, pushTransaction);
+ session.close();
+ }
+
+ CDOSession session = openSession();
+ CDOView view = session.openView();
+ assertEquals(1, view.getRootResource().getContents().size());
+ CDOResource resource = view.getResource(getResourcePath(resourcePath));
+ assertEquals(supplierName, ((Supplier)resource.getContents().get(1)).getName());
+ }
+
+ public void testClearObjects() throws Exception
+ {
+ {
+ msg("Open session & local transaction");
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOPushTransaction pushTransaction = openPushTransaction(transaction);
+ file = pushTransaction.getFile();
+ CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath));
+ msg("Create a new elements");
+ Supplier supplier2 = getModel1Factory().createSupplier();
+ supplier2.setName("supplier" + System.currentTimeMillis());
+ resource.getContents().add(supplier2);
+ msg("Clear contents");
+ resource.getContents().clear();
+ msg("Commit");
+ pushTransaction.commit();
+ session.close();
+ }
+
+ {
+ msg("Reload previous local session");
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOPushTransaction pushTransaction = openPushTransaction(transaction, file);
+ assertEquals(true, transaction.isDirty());
+ CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath));
+ assertEquals(0, resource.getContents().size());
+ push(transaction, pushTransaction);
+ session.close();
+ }
+
+ CDOSession session = openSession();
+ CDOView view = session.openView();
+ CDOResource resource = view.getResource(getResourcePath(resourcePath));
+ assertEquals(0, resource.getContents().size());
+ }
+
+ public void testUnsetValue() throws Exception
+ {
+ {
+ msg("Open session & local transaction");
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOPushTransaction pushTransaction = openPushTransaction(transaction);
+ file = pushTransaction.getFile();
+ CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath));
+ Supplier supplier = (Supplier)resource.getContents().get(0);
+ supplier.setName(null);
+ msg("Commit");
+ pushTransaction.commit();
+ session.close();
+ }
+
+ {
+ msg("Reload previous local session");
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOPushTransaction pushTransaction = openPushTransaction(transaction, file);
+ assertEquals(true, transaction.isDirty());
+ CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath));
+ Supplier supplier = (Supplier)resource.getContents().get(0);
+ assertNull(supplier.getName());
+ push(transaction, pushTransaction);
+ session.close();
+ }
+
+ CDOSession session = openSession();
+ CDOView view = session.openView();
+ CDOResource resource = view.getResource(getResourcePath(resourcePath));
+ Supplier supplier = (Supplier)resource.getContents().get(0);
+ assertNull(supplier.getName());
+ }
+
+ public void testConflictWithRemovedObject() throws Exception
+ {
+ {
+ msg("Open session & local transaction");
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOPushTransaction pushTransaction = openPushTransaction(transaction);
+ file = pushTransaction.getFile();
+ CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath));
+ msg("Make a diff in existing element");
+ Supplier supplier = (Supplier)resource.getContents().get(0);
+ supplier.setName(null);
+ msg("Commit");
+ pushTransaction.commit();
+ session.close();
+ }
+
+ {
+ msg("Open transaction & commit changes to repo");
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath));
+ resource.getContents().remove(0);
+ transaction.commit();
+ session.close();
+ }
+
+ msg("Reload previous local session");
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+
+ try
+ {
+ openPushTransaction(transaction, file);
+ fail("ObjectNotFoundException expected");
+ }
+ catch (ObjectNotFoundException expected)
+ {
+ // SUCCESS
+ }
+ }
+
+ public void testConflictWithModifiedObject() throws Exception
+ {
+ {
+ msg("Open session & local transaction");
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOPushTransaction pushTransaction = openPushTransaction(transaction);
+ file = pushTransaction.getFile();
+ CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath));
+ msg("Make a diff in existing element");
+ Supplier supplier = (Supplier)resource.getContents().get(0);
+ supplier.setName("" + System.currentTimeMillis());
+ msg("Commit");
+ pushTransaction.commit();
+ session.close();
+ }
+
+ {
+ msg("Open transaction & commit changes to repo");
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath));
+ Supplier supplier = (Supplier)resource.getContents().get(0);
+ supplier.setName("" + System.currentTimeMillis());
+ transaction.commit();
+ session.close();
+ }
+
+ msg("Reload previous local session");
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOPushTransaction pushTransaction = openPushTransaction(transaction, file);
+ assertEquals(true, transaction.hasConflict());
+
+ try
+ {
+ pushTransaction.push();
+ fail("CommitException expected");
+ }
+ catch (CommitException expected)
+ {
+ // SUCCESS
+ }
+ }
+
+ protected CDOPushTransaction openPushTransaction(CDOTransaction transaction) throws IOException
+ {
+ return new CDOPushTransaction(transaction);
+ }
+
+ protected CDOPushTransaction openPushTransaction(CDOTransaction transaction, File file) throws IOException
+ {
+ return new CDOPushTransaction(transaction, file);
+ }
+
+ protected void push(CDOTransaction transaction, CDOPushTransaction pushTransaction) throws CommitException
+ {
+ msg("Publish previous modifications");
+ pushTransaction.push();
+ assertEquals(false, transaction.isDirty());
+ }
+
+ private void populateRepository()
+ {
+ msg("Populate the repository the classic way");
+ msg("Create resource");
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOResource resource = transaction.createResource(getResourcePath(resourcePath));
+
+ msg("Populate resource");
+ Supplier supplier0 = getModel1Factory().createSupplier();
+ supplier0.setName(supplierName);
+ resource.getContents().add(supplier0);
+ Company company0 = getModel1Factory().createCompany();
+ resource.getContents().add(company0);
+
+ try
+ {
+ msg("Commit");
+ transaction.commit();
+ }
+ catch (CommitException ex)
+ {
+ throw WrappedException.wrap(ex);
+ }
+
+ session.close();
+ }
+}

Back to the top