Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2012-01-14 10:27:01 +0000
committerEike Stepper2012-01-14 10:27:01 +0000
commit0266166cb9ff9535c150250073ea1e57b42d2693 (patch)
treec006a3bc0ba1f6e1d8a2bc032eedc346f71eab0d /plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/WorkspaceTest.java
parent7416443692cdda72d1f704ea4fc5ececcc669df7 (diff)
downloadcdo-0266166cb9ff9535c150250073ea1e57b42d2693.tar.gz
cdo-0266166cb9ff9535c150250073ea1e57b42d2693.tar.xz
cdo-0266166cb9ff9535c150250073ea1e57b42d2693.zip
Adjusted copyrights to 2012
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/WorkspaceTest.java')
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/WorkspaceTest.java2928
1 files changed, 1464 insertions, 1464 deletions
diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/WorkspaceTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/WorkspaceTest.java
index 93ea064393..ec1eb79920 100644
--- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/WorkspaceTest.java
+++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/WorkspaceTest.java
@@ -1,1464 +1,1464 @@
-/*
- * Copyright (c) 2004 - 2011 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:
- * Eike Stepper - initial API and implementation
- */
-package org.eclipse.emf.cdo.tests;
-
-import org.eclipse.emf.cdo.common.branch.CDOBranch;
-import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
-import org.eclipse.emf.cdo.common.commit.CDOChangeSetData;
-import org.eclipse.emf.cdo.common.commit.CDOCommitInfo;
-import org.eclipse.emf.cdo.common.id.CDOID;
-import org.eclipse.emf.cdo.common.revision.CDOAllRevisionsProvider;
-import org.eclipse.emf.cdo.common.revision.CDORevision;
-import org.eclipse.emf.cdo.common.revision.CDORevisionUtil;
-import org.eclipse.emf.cdo.eresource.CDOResource;
-import org.eclipse.emf.cdo.server.IRepository;
-import org.eclipse.emf.cdo.server.IStore;
-import org.eclipse.emf.cdo.session.CDOSession;
-import org.eclipse.emf.cdo.session.CDOSessionConfiguration;
-import org.eclipse.emf.cdo.session.CDOSessionConfigurationFactory;
-import org.eclipse.emf.cdo.spi.server.InternalRepository;
-import org.eclipse.emf.cdo.spi.workspace.InternalCDOWorkspace;
-import org.eclipse.emf.cdo.tests.config.IRepositoryConfig;
-import org.eclipse.emf.cdo.tests.config.impl.ConfigTest.Requires;
-import org.eclipse.emf.cdo.tests.model1.Customer;
-import org.eclipse.emf.cdo.tests.model1.OrderDetail;
-import org.eclipse.emf.cdo.tests.model1.Product1;
-import org.eclipse.emf.cdo.tests.model1.SalesOrder;
-import org.eclipse.emf.cdo.tests.model1.VAT;
-import org.eclipse.emf.cdo.tests.util.TestSessionConfiguration;
-import org.eclipse.emf.cdo.transaction.CDOMerger.ConflictException;
-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.emf.cdo.workspace.CDOWorkspace;
-import org.eclipse.emf.cdo.workspace.CDOWorkspaceBase;
-import org.eclipse.emf.cdo.workspace.CDOWorkspaceConfiguration;
-import org.eclipse.emf.cdo.workspace.CDOWorkspaceUtil;
-
-import org.eclipse.net4j.jvm.JVMUtil;
-import org.eclipse.net4j.util.io.IOUtil;
-import org.eclipse.net4j.util.lifecycle.LifecycleUtil;
-
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.spi.cdo.DefaultCDOMerger;
-import org.eclipse.emf.spi.cdo.DefaultCDOMerger.Conflict;
-
-import java.io.File;
-import java.io.PrintStream;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-/**
- * @author Eike Stepper
- */
-@Requires(IRepositoryConfig.CAPABILITY_AUDITING)
-public class WorkspaceTest extends AbstractCDOTest
-{
- private static final String RESOURCE = "/test1";
-
- private static final int PRODUCTS = 5;
-
- private static final int CUSTOMERS = 2;
-
- private static final int SALES_ORDERS_PER_CUSTOMER = 1;
-
- private static final int SALES_ORDERS = CUSTOMERS * SALES_ORDERS_PER_CUSTOMER;
-
- private static final int ORDER_DETAILS = SALES_ORDERS * PRODUCTS;
-
- private List<CDOWorkspace> workspaces = new ArrayList<CDOWorkspace>();
-
- private CDOTransaction transaction;
-
- private List<Product1> products;
-
- private List<Customer> customers;
-
- private List<SalesOrder> salesOrders;
-
- private List<OrderDetail> orderDetails;
-
- private int totalObjects;
-
- private IStore localStore;
-
- @Override
- protected void doSetUp() throws Exception
- {
- super.doSetUp();
- skipStoreWithoutHandleRevisions();
-
- CDOSession session = openSession();
- transaction = session.openTransaction();
-
- products = new ArrayList<Product1>();
- customers = new ArrayList<Customer>();
- orderDetails = new ArrayList<OrderDetail>();
- salesOrders = new ArrayList<SalesOrder>();
-
- createTestSet(transaction);
- assertEquals(PRODUCTS, products.size());
- assertEquals(CUSTOMERS, customers.size());
- assertEquals(SALES_ORDERS, salesOrders.size());
- assertEquals(ORDER_DETAILS, orderDetails.size());
-
- JVMUtil.prepareContainer(getClientContainer());
- localStore = createLocalStore();
- CDOUtil.setLegacyModeDefault(true);
- }
-
- @Override
- protected void doTearDown() throws Exception
- {
- disableConsole();
- CDOUtil.setLegacyModeDefault(false);
- for (CDOWorkspace workspace : workspaces)
- {
- IOUtil.closeSilent(workspace);
- }
-
- workspaces.clear();
- super.doTearDown();
- }
-
- @Override
- public synchronized Map<String, Object> getTestProperties()
- {
- Map<String, Object> map = super.getTestProperties();
- map.put(IRepository.Props.ENSURE_REFERENTIAL_INTEGRITY, "false");
- return map;
- }
-
- @CleanRepositoriesBefore
- public void testCheckout() throws Exception
- {
- checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
- assertEquals(2 + totalObjects, dumpLocalStore(null)); // Root resource + test folder + totalObjects
- }
-
- public void testReadObjects() throws Exception
- {
- InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
-
- CDOView view = workspace.openView();
- CDOResource resource = view.getResource(getResourcePath(RESOURCE));
- assertEquals(totalObjects, dumpObjects(null, resource));
- }
-
- public void testModifyObjects() throws Exception
- {
- InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
-
- CDOTransaction transaction = workspace.openTransaction();
- CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
- for (EObject object : resource.getContents())
- {
- if (object instanceof Product1)
- {
- Product1 product = (Product1)object;
- product.setName("MODIFIED_" + product.getName());
- }
- }
-
- assertEquals(true, transaction.isDirty());
- assertEquals(PRODUCTS, transaction.getDirtyObjects().size());
-
- transaction.commit();
- assertEquals(false, transaction.isDirty());
- assertEquals(0, transaction.getDirtyObjects().size());
-
- clearCache(transaction.getSession().getRevisionManager());
-
- CDOView view = workspace.openView();
- resource = view.getResource(getResourcePath(RESOURCE));
- assertEquals(totalObjects, dumpObjects(null, resource));
- for (EObject object : resource.getContents())
- {
- if (object instanceof Product1)
- {
- Product1 product = (Product1)object;
- assertEquals(true, product.getName().startsWith("MODIFIED_"));
- }
- }
- }
-
- @Requires(IRepositoryConfig.CAPABILITY_UUIDS)
- public void testAddObjects() throws Exception
- {
- InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
-
- CDOTransaction transaction = workspace.openTransaction();
- CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
- for (int i = 0; i < PRODUCTS; i++)
- {
- resource.getContents().add(createProduct(i));
- }
-
- assertEquals(true, transaction.isDirty());
- assertEquals(1, transaction.getDirtyObjects().size());
- assertEquals(PRODUCTS, transaction.getNewObjects().size());
-
- transaction.commit();
- assertEquals(false, transaction.isDirty());
- assertEquals(0, transaction.getDirtyObjects().size());
- assertEquals(0, transaction.getNewObjects().size());
-
- clearCache(transaction.getSession().getRevisionManager());
-
- CDOView view = workspace.openView();
- resource = view.getResource(getResourcePath(RESOURCE));
- assertEquals(totalObjects + PRODUCTS, dumpObjects("--> ", resource));
- }
-
- public void testDetachObjects() throws Exception
- {
- InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
-
- CDOTransaction transaction = workspace.openTransaction();
- CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
- for (EObject object : resource.getContents())
- {
- if (object instanceof SalesOrder)
- {
- ((SalesOrder)object).getOrderDetails().clear();
- }
-
- if (object instanceof Product1)
- {
- ((Product1)object).getOrderDetails().clear();
- }
- }
-
- assertEquals(true, transaction.isDirty());
- assertEquals(SALES_ORDERS + PRODUCTS, transaction.getDirtyObjects().size());
- assertEquals(ORDER_DETAILS, transaction.getDetachedObjects().size());
-
- transaction.commit();
- assertEquals(false, transaction.isDirty());
- assertEquals(0, transaction.getDirtyObjects().size());
- assertEquals(0, transaction.getDetachedObjects().size());
-
- clearCache(transaction.getSession().getRevisionManager());
-
- CDOView view = workspace.openView();
- resource = view.getResource(getResourcePath(RESOURCE));
- assertEquals(totalObjects - ORDER_DETAILS, dumpObjects(null, resource));
- for (EObject object : resource.getContents())
- {
- if (object instanceof SalesOrder)
- {
- if (!((SalesOrder)object).getOrderDetails().isEmpty())
- {
- fail("All order details should be detached");
- }
- }
- }
- }
-
- public void testModifyObjects2() throws Exception
- {
- InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
-
- CDOTransaction transaction = workspace.openTransaction();
- CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
- for (EObject object : resource.getContents())
- {
- if (object instanceof Product1)
- {
- Product1 product = (Product1)object;
- product.setName("MODIFIED_" + product.getName());
- }
- }
-
- assertEquals(true, transaction.isDirty());
- assertEquals(PRODUCTS, transaction.getDirtyObjects().size());
-
- transaction.commit();
- assertEquals(false, transaction.isDirty());
- assertEquals(0, transaction.getDirtyObjects().size());
-
- for (EObject object : resource.getContents())
- {
- if (object instanceof Product1)
- {
- Product1 product = (Product1)object;
- product.setName("MODIFIED2_" + product.getName());
- }
- }
-
- assertEquals(true, transaction.isDirty());
- assertEquals(PRODUCTS, transaction.getDirtyObjects().size());
-
- transaction.commit();
- assertEquals(false, transaction.isDirty());
- assertEquals(0, transaction.getDirtyObjects().size());
-
- clearCache(transaction.getSession().getRevisionManager());
-
- CDOView view = workspace.openView();
- resource = view.getResource(getResourcePath(RESOURCE));
- assertEquals(totalObjects, dumpObjects(null, resource));
- for (EObject object : resource.getContents())
- {
- if (object instanceof Product1)
- {
- Product1 product = (Product1)object;
- assertEquals(true, product.getName().startsWith("MODIFIED2_"));
- }
- }
- }
-
- @Requires(IRepositoryConfig.CAPABILITY_UUIDS)
- public void testAddObjects2() throws Exception
- {
- InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
-
- CDOTransaction transaction = workspace.openTransaction();
- CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
- for (int i = 0; i < PRODUCTS; i++)
- {
- resource.getContents().add(createProduct(i));
- }
-
- assertEquals(true, transaction.isDirty());
- assertEquals(1, transaction.getDirtyObjects().size());
- assertEquals(PRODUCTS, transaction.getNewObjects().size());
-
- transaction.commit();
- assertEquals(false, transaction.isDirty());
- assertEquals(0, transaction.getDirtyObjects().size());
- assertEquals(0, transaction.getNewObjects().size());
-
- for (int i = 0; i < PRODUCTS; i++)
- {
- resource.getContents().add(createProduct(i));
- }
-
- assertEquals(true, transaction.isDirty());
- assertEquals(1, transaction.getDirtyObjects().size());
- assertEquals(PRODUCTS, transaction.getNewObjects().size());
-
- transaction.commit();
- assertEquals(false, transaction.isDirty());
- assertEquals(0, transaction.getDirtyObjects().size());
- assertEquals(0, transaction.getNewObjects().size());
-
- clearCache(transaction.getSession().getRevisionManager());
-
- CDOView view = workspace.openView();
- resource = view.getResource(getResourcePath(RESOURCE));
- assertEquals(totalObjects + 2 * PRODUCTS, dumpObjects("--> ", resource));
- }
-
- public void testDetachObjects2() throws Exception
- {
- InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
-
- CDOTransaction transaction = workspace.openTransaction();
- CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
- for (EObject object : resource.getContents())
- {
- if (object instanceof SalesOrder)
- {
- ((SalesOrder)object).getOrderDetails().clear();
- }
-
- if (object instanceof Product1)
- {
- ((Product1)object).getOrderDetails().clear();
- }
- }
-
- assertEquals(true, transaction.isDirty());
- assertEquals(SALES_ORDERS + PRODUCTS, transaction.getDirtyObjects().size());
- assertEquals(ORDER_DETAILS, transaction.getDetachedObjects().size());
-
- transaction.commit();
- assertEquals(false, transaction.isDirty());
- assertEquals(0, transaction.getDirtyObjects().size());
- assertEquals(0, transaction.getDetachedObjects().size());
-
- for (Iterator<EObject> it = resource.getContents().iterator(); it.hasNext();)
- {
- EObject object = it.next();
- if (object instanceof SalesOrder)
- {
- it.remove();
- }
-
- if (object instanceof Customer)
- {
- ((Customer)object).getSalesOrders().clear();
- }
- }
-
- assertEquals(true, transaction.isDirty());
- assertEquals(1 + CUSTOMERS, transaction.getDirtyObjects().size());
- assertEquals(SALES_ORDERS, transaction.getDetachedObjects().size());
-
- transaction.commit();
- assertEquals(false, transaction.isDirty());
- assertEquals(0, transaction.getDirtyObjects().size());
- assertEquals(0, transaction.getDetachedObjects().size());
-
- clearCache(transaction.getSession().getRevisionManager());
-
- CDOView view = workspace.openView();
- resource = view.getResource(getResourcePath(RESOURCE));
- assertEquals(totalObjects - ORDER_DETAILS - SALES_ORDERS, dumpObjects(null, resource));
- for (EObject object : resource.getContents())
- {
- if (object instanceof SalesOrder)
- {
- if (!((SalesOrder)object).getOrderDetails().isEmpty())
- {
- fail("All order details should be detached");
- }
- }
-
- if (object instanceof Customer)
- {
- if (!((Customer)object).getSalesOrders().isEmpty())
- {
- fail("All sales orders should be detached");
- }
- }
- }
- }
-
- public void testLocalChangesAfterModify() throws Exception
- {
- InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
-
- CDOTransaction transaction = workspace.openTransaction();
- CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
- for (EObject object : resource.getContents())
- {
- if (object instanceof Product1)
- {
- Product1 product = (Product1)object;
- product.setName("MODIFIED_" + product.getName());
- }
- }
-
- transaction.commit();
-
- CDOChangeSetData changes = workspace.getLocalChanges();
- assertEquals(0, changes.getNewObjects().size());
- assertEquals(PRODUCTS, changes.getChangedObjects().size());
- assertEquals(0, changes.getDetachedObjects().size());
- }
-
- @Requires(IRepositoryConfig.CAPABILITY_UUIDS)
- public void testLocalChangesAfterAdd() throws Exception
- {
- InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
-
- CDOTransaction transaction = workspace.openTransaction();
- CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
- for (int i = 0; i < PRODUCTS; i++)
- {
- resource.getContents().add(createProduct(i));
- }
-
- transaction.commit();
-
- CDOChangeSetData changes = workspace.getLocalChanges();
- assertEquals(PRODUCTS, changes.getNewObjects().size());
- assertEquals(1, changes.getChangedObjects().size());
- assertEquals(0, changes.getDetachedObjects().size());
- }
-
- public void testLocalChangesAfterDetach() throws Exception
- {
- InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
-
- CDOTransaction transaction = workspace.openTransaction();
- CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
- for (EObject object : resource.getContents())
- {
- if (object instanceof SalesOrder)
- {
- ((SalesOrder)object).getOrderDetails().clear();
- }
-
- if (object instanceof Product1)
- {
- ((Product1)object).getOrderDetails().clear();
- }
- }
-
- transaction.commit();
-
- CDOChangeSetData changes = workspace.getLocalChanges();
- assertEquals(0, changes.getNewObjects().size());
- assertEquals(SALES_ORDERS + PRODUCTS, changes.getChangedObjects().size());
- assertEquals(ORDER_DETAILS, changes.getDetachedObjects().size());
- }
-
- public void testLocalChangesAfterModify2() throws Exception
- {
- InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
-
- CDOTransaction transaction = workspace.openTransaction();
- CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
- for (EObject object : resource.getContents())
- {
- if (object instanceof Product1)
- {
- Product1 product = (Product1)object;
- product.setName("MODIFIED_" + product.getName());
- }
- }
-
- transaction.commit();
-
- for (EObject object : resource.getContents())
- {
- if (object instanceof Product1)
- {
- Product1 product = (Product1)object;
- product.setName("MODIFIED2_" + product.getName());
- }
- }
-
- transaction.commit();
-
- CDOChangeSetData changes = workspace.getLocalChanges();
- assertEquals(0, changes.getNewObjects().size());
- assertEquals(PRODUCTS, changes.getChangedObjects().size());
- assertEquals(0, changes.getDetachedObjects().size());
- }
-
- @Requires(IRepositoryConfig.CAPABILITY_UUIDS)
- public void testLocalChangesAfterAdd2() throws Exception
- {
- InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
-
- CDOTransaction transaction = workspace.openTransaction();
- CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
- for (int i = 0; i < PRODUCTS; i++)
- {
- resource.getContents().add(createProduct(i));
- }
-
- transaction.commit();
-
- for (int i = 0; i < PRODUCTS; i++)
- {
- resource.getContents().add(createProduct(i));
- }
-
- transaction.commit();
-
- CDOChangeSetData changes = workspace.getLocalChanges();
- assertEquals(2 * PRODUCTS, changes.getNewObjects().size());
- assertEquals(1, changes.getChangedObjects().size());
- assertEquals(0, changes.getDetachedObjects().size());
- }
-
- public void testLocalChangesAfterDetach2() throws Exception
- {
- InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
-
- CDOTransaction transaction = workspace.openTransaction();
- CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
- for (EObject object : resource.getContents())
- {
- if (object instanceof SalesOrder)
- {
- ((SalesOrder)object).getOrderDetails().clear();
- }
-
- if (object instanceof Product1)
- {
- ((Product1)object).getOrderDetails().clear();
- }
- }
-
- transaction.commit();
-
- for (Iterator<EObject> it = resource.getContents().iterator(); it.hasNext();)
- {
- EObject object = it.next();
- if (object instanceof SalesOrder)
- {
- it.remove();
- }
-
- if (object instanceof Customer)
- {
- ((Customer)object).getSalesOrders().clear();
- }
- }
-
- transaction.commit();
-
- CDOChangeSetData changes = workspace.getLocalChanges();
- assertEquals(0, changes.getNewObjects().size());
- assertEquals(1 + CUSTOMERS + PRODUCTS, changes.getChangedObjects().size());
- assertEquals(ORDER_DETAILS + SALES_ORDERS, changes.getDetachedObjects().size());
- }
-
- public void testCheckinAfterModify() throws Exception
- {
- InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
-
- CDOTransaction transaction = workspace.openTransaction();
- CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
- for (EObject object : resource.getContents())
- {
- if (object instanceof Product1)
- {
- Product1 product = (Product1)object;
- product.setName("MODIFIED_" + product.getName());
- }
- }
-
- transaction.commit();
-
- CDOCommitInfo info = workspace.checkin();
- assertEquals(0, info.getNewObjects().size());
- assertEquals(PRODUCTS, info.getChangedObjects().size());
- assertEquals(0, info.getDetachedObjects().size());
-
- CDOWorkspaceBase base = workspace.getBase();
- assertEquals(0, base.getIDs().size());
- assertEquals(info.getBranch().getPathName(), workspace.getBranchPath());
- assertEquals(info.getTimeStamp(), workspace.getTimeStamp());
- }
-
- @Requires(IRepositoryConfig.CAPABILITY_UUIDS)
- public void testCheckinAfterAdd() throws Exception
- {
- InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
- IOUtil.ERR().println("Checkout done");
-
- CDOTransaction transaction = workspace.openTransaction();
- CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
- for (int i = 0; i < PRODUCTS; i++)
- {
- resource.getContents().add(createProduct(i));
- }
-
- transaction.commit();
-
- CDOCommitInfo info = workspace.checkin();
- assertEquals(PRODUCTS, info.getNewObjects().size());
- assertEquals(1, info.getChangedObjects().size());
- assertEquals(0, info.getDetachedObjects().size());
-
- CDOWorkspaceBase base = workspace.getBase();
- assertEquals(0, base.getIDs().size());
- assertEquals(info.getBranch().getPathName(), workspace.getBranchPath());
- assertEquals(info.getTimeStamp(), workspace.getTimeStamp());
- }
-
- public void testCheckinAfterDetach() throws Exception
- {
- InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
-
- CDOTransaction transaction = workspace.openTransaction();
- CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
- for (EObject object : resource.getContents())
- {
- if (object instanceof SalesOrder)
- {
- ((SalesOrder)object).getOrderDetails().clear();
- }
-
- if (object instanceof Product1)
- {
- ((Product1)object).getOrderDetails().clear();
- }
- }
-
- transaction.commit();
-
- CDOCommitInfo info = workspace.checkin();
- assertEquals(0, info.getNewObjects().size());
- assertEquals(SALES_ORDERS + PRODUCTS, info.getChangedObjects().size());
- assertEquals(ORDER_DETAILS, info.getDetachedObjects().size());
-
- CDOWorkspaceBase base = workspace.getBase();
- assertEquals(0, base.getIDs().size());
- assertEquals(info.getBranch().getPathName(), workspace.getBranchPath());
- assertEquals(info.getTimeStamp(), workspace.getTimeStamp());
- }
-
- public void testCheckinAfterModify2() throws Exception
- {
- InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
-
- CDOTransaction transaction = workspace.openTransaction();
- CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
- for (EObject object : resource.getContents())
- {
- if (object instanceof Product1)
- {
- Product1 product = (Product1)object;
- product.setName("MODIFIED_" + product.getName());
- }
- }
-
- transaction.commit();
-
- for (EObject object : resource.getContents())
- {
- if (object instanceof Product1)
- {
- Product1 product = (Product1)object;
- product.setName("MODIFIED2_" + product.getName());
- }
- }
-
- transaction.commit();
-
- CDOCommitInfo info = workspace.checkin();
- assertEquals(0, info.getNewObjects().size());
- assertEquals(PRODUCTS, info.getChangedObjects().size());
- assertEquals(0, info.getDetachedObjects().size());
-
- CDOWorkspaceBase base = workspace.getBase();
- assertEquals(0, base.getIDs().size());
- assertEquals(info.getBranch().getPathName(), workspace.getBranchPath());
- assertEquals(info.getTimeStamp(), workspace.getTimeStamp());
- }
-
- @Requires(IRepositoryConfig.CAPABILITY_UUIDS)
- public void testCheckinAfterAdd2() throws Exception
- {
- InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
-
- CDOTransaction transaction = workspace.openTransaction();
- CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
- for (int i = 0; i < PRODUCTS; i++)
- {
- resource.getContents().add(createProduct(i));
- }
-
- transaction.commit();
-
- for (int i = 0; i < PRODUCTS; i++)
- {
- resource.getContents().add(createProduct(i));
- }
-
- transaction.commit();
-
- CDOCommitInfo info = workspace.checkin();
- assertEquals(2 * PRODUCTS, info.getNewObjects().size());
- assertEquals(1, info.getChangedObjects().size());
- assertEquals(0, info.getDetachedObjects().size());
-
- CDOWorkspaceBase base = workspace.getBase();
- assertEquals(0, base.getIDs().size());
- assertEquals(info.getBranch().getPathName(), workspace.getBranchPath());
- assertEquals(info.getTimeStamp(), workspace.getTimeStamp());
- }
-
- public void testCheckinAfterDetach2() throws Exception
- {
- InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
-
- CDOTransaction transaction = workspace.openTransaction();
- CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
- for (EObject object : resource.getContents())
- {
- if (object instanceof SalesOrder)
- {
- ((SalesOrder)object).getOrderDetails().clear();
- }
-
- if (object instanceof Product1)
- {
- ((Product1)object).getOrderDetails().clear();
- }
- }
-
- transaction.commit();
-
- for (Iterator<EObject> it = resource.getContents().iterator(); it.hasNext();)
- {
- EObject object = it.next();
- if (object instanceof SalesOrder)
- {
- it.remove();
- }
-
- if (object instanceof Customer)
- {
- ((Customer)object).getSalesOrders().clear();
- }
- }
-
- transaction.commit();
-
- CDOCommitInfo info = workspace.checkin();
- assertEquals(0, info.getNewObjects().size());
- assertEquals(1 + CUSTOMERS + PRODUCTS, info.getChangedObjects().size());
- assertEquals(ORDER_DETAILS + SALES_ORDERS, info.getDetachedObjects().size());
-
- CDOWorkspaceBase base = workspace.getBase();
- assertEquals(0, base.getIDs().size());
- assertEquals(info.getBranch().getPathName(), workspace.getBranchPath());
- assertEquals(info.getTimeStamp(), workspace.getTimeStamp());
- }
-
- public void testCheckin2AfterModify() throws Exception
- {
- InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
-
- CDOTransaction transaction = workspace.openTransaction();
- CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
- for (EObject object : resource.getContents())
- {
- if (object instanceof Product1)
- {
- Product1 product = (Product1)object;
- product.setName("MODIFIED_" + product.getName());
- }
- }
-
- transaction.commit();
-
- CDOCommitInfo info = workspace.checkin();
- assertEquals(0, info.getNewObjects().size());
- assertEquals(PRODUCTS, info.getChangedObjects().size());
- assertEquals(0, info.getDetachedObjects().size());
-
- CDOWorkspaceBase base = workspace.getBase();
- assertEquals(0, base.getIDs().size());
- assertEquals(info.getBranch().getPathName(), workspace.getBranchPath());
- assertEquals(info.getTimeStamp(), workspace.getTimeStamp());
-
- transaction = workspace.openTransaction();
- resource = transaction.getResource(getResourcePath(RESOURCE));
- for (EObject object : resource.getContents())
- {
- if (object instanceof Product1)
- {
- Product1 product = (Product1)object;
- product.setName("MODIFIED2_" + product.getName());
- }
- }
-
- transaction.commit();
-
- info = workspace.checkin();
- assertEquals(0, info.getNewObjects().size());
- assertEquals(PRODUCTS, info.getChangedObjects().size());
- assertEquals(0, info.getDetachedObjects().size());
-
- base = workspace.getBase();
- assertEquals(0, base.getIDs().size());
- assertEquals(info.getBranch().getPathName(), workspace.getBranchPath());
- assertEquals(info.getTimeStamp(), workspace.getTimeStamp());
- }
-
- @Requires(IRepositoryConfig.CAPABILITY_UUIDS)
- public void testCheckin2AfterAdd() throws Exception
- {
- InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
-
- CDOTransaction transaction = workspace.openTransaction();
- CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
- for (int i = 0; i < PRODUCTS; i++)
- {
- resource.getContents().add(createProduct(i));
- }
-
- transaction.commit();
-
- CDOCommitInfo info = workspace.checkin();
- assertEquals(PRODUCTS, info.getNewObjects().size());
- assertEquals(1, info.getChangedObjects().size());
- assertEquals(0, info.getDetachedObjects().size());
-
- CDOWorkspaceBase base = workspace.getBase();
- assertEquals(0, base.getIDs().size());
- assertEquals(info.getBranch().getPathName(), workspace.getBranchPath());
- assertEquals(info.getTimeStamp(), workspace.getTimeStamp());
-
- transaction = workspace.openTransaction();
- resource = transaction.getResource(getResourcePath(RESOURCE));
- for (int i = 0; i < PRODUCTS; i++)
- {
- resource.getContents().add(createProduct(i));
- }
-
- transaction.commit();
-
- info = workspace.checkin();
- assertEquals(PRODUCTS, info.getNewObjects().size());
- assertEquals(1, info.getChangedObjects().size());
- assertEquals(0, info.getDetachedObjects().size());
-
- base = workspace.getBase();
- assertEquals(0, base.getIDs().size());
- assertEquals(info.getBranch().getPathName(), workspace.getBranchPath());
- assertEquals(info.getTimeStamp(), workspace.getTimeStamp());
- }
-
- public void testCheckin2AfterDetach() throws Exception
- {
- InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
-
- CDOTransaction transaction = workspace.openTransaction();
- CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
- for (EObject object : resource.getContents())
- {
- if (object instanceof SalesOrder)
- {
- ((SalesOrder)object).getOrderDetails().clear();
- }
-
- if (object instanceof Product1)
- {
- ((Product1)object).getOrderDetails().clear();
- }
- }
-
- transaction.commit();
-
- CDOCommitInfo info = workspace.checkin();
- assertEquals(0, info.getNewObjects().size());
- assertEquals(SALES_ORDERS + PRODUCTS, info.getChangedObjects().size());
- assertEquals(ORDER_DETAILS, info.getDetachedObjects().size());
-
- CDOWorkspaceBase base = workspace.getBase();
- assertEquals(0, base.getIDs().size());
- assertEquals(info.getBranch().getPathName(), workspace.getBranchPath());
- assertEquals(info.getTimeStamp(), workspace.getTimeStamp());
-
- transaction = workspace.openTransaction();
- resource = transaction.getResource(getResourcePath(RESOURCE));
- for (Iterator<EObject> it = resource.getContents().iterator(); it.hasNext();)
- {
- EObject object = it.next();
- if (object instanceof SalesOrder)
- {
- it.remove();
- }
-
- if (object instanceof Customer)
- {
- ((Customer)object).getSalesOrders().clear();
- }
- }
-
- transaction.commit();
-
- info = workspace.checkin();
- assertEquals(0, info.getNewObjects().size());
- assertEquals(1 + CUSTOMERS, info.getChangedObjects().size());
- assertEquals(SALES_ORDERS, info.getDetachedObjects().size());
-
- base = workspace.getBase();
- assertEquals(0, base.getIDs().size());
- assertEquals(info.getBranch().getPathName(), workspace.getBranchPath());
- assertEquals(info.getTimeStamp(), workspace.getTimeStamp());
- }
-
- public void testUpdateAfterMasterModify() throws Exception
- {
- InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
- assertNotSame(CDOBranchPoint.UNSPECIFIED_DATE, workspace.getTimeStamp());
-
- CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
- for (EObject object : resource.getContents())
- {
- if (object instanceof Product1)
- {
- Product1 product = (Product1)object;
- product.setName("MODIFIED_" + product.getName());
- }
- }
-
- transaction.commit();
-
- CDOTransaction local = workspace.update(null);
- assertEquals(true, local.isDirty());
- assertEquals(0, local.getNewObjects().size());
- assertEquals(PRODUCTS, local.getDirtyObjects().size());
- assertEquals(0, local.getDetachedObjects().size());
-
- local.commit();
- assertEquals(false, local.isDirty());
- assertEquals(0, local.getNewObjects().size());
- assertEquals(0, local.getDirtyObjects().size());
- assertEquals(0, local.getDetachedObjects().size());
- assertEquals(0, workspace.getBase().getIDs().size());
-
- CDOView view = workspace.openView();
- resource = view.getResource(getResourcePath(RESOURCE));
- assertEquals(totalObjects, dumpObjects(null, resource));
- }
-
- @Requires(IRepositoryConfig.CAPABILITY_UUIDS)
- public void testUpdateAfterMasterAdd() throws Exception
- {
- InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
- assertNotSame(CDOBranchPoint.UNSPECIFIED_DATE, workspace.getTimeStamp());
-
- CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
- resource.getContents().add(createProduct(9999));
- transaction.commit();
-
- CDOTransaction local = workspace.update(null);
- assertEquals(true, local.isDirty());
- assertEquals(1, local.getNewObjects().size());
- assertEquals(1, local.getDirtyObjects().size());
- assertEquals(0, local.getDetachedObjects().size());
-
- local.commit();
- assertEquals(false, local.isDirty());
- assertEquals(0, local.getNewObjects().size());
- assertEquals(0, local.getDirtyObjects().size());
- assertEquals(0, local.getDetachedObjects().size());
- assertEquals(0, workspace.getBase().getIDs().size());
-
- CDOView view = workspace.openView();
- resource = view.getResource(getResourcePath(RESOURCE));
- assertEquals(totalObjects + 1, dumpObjects(null, resource));
- }
-
- @Requires(IRepositoryConfig.CAPABILITY_UUIDS)
- public void testUpdateTwiceAfterMasterAdd() throws Exception
- {
- InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
- assertNotSame(CDOBranchPoint.UNSPECIFIED_DATE, workspace.getTimeStamp());
-
- CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
- resource.getContents().add(createProduct(9999));
- transaction.commit();
-
- CDOTransaction local = workspace.update(null);
- assertEquals(true, local.isDirty());
- assertEquals(1, local.getNewObjects().size());
- assertEquals(1, local.getDirtyObjects().size());
- assertEquals(0, local.getDetachedObjects().size());
-
- local.commit();
- assertEquals(false, local.isDirty());
- assertEquals(0, local.getNewObjects().size());
- assertEquals(0, local.getDirtyObjects().size());
- assertEquals(0, local.getDetachedObjects().size());
- assertEquals(0, workspace.getBase().getIDs().size());
- local.close();
-
- local = workspace.update(null);
- assertEquals(false, local.isDirty());
- assertEquals(0, local.getNewObjects().size());
- assertEquals(0, local.getDirtyObjects().size());
- assertEquals(0, local.getDetachedObjects().size());
- assertEquals(0, workspace.getBase().getIDs().size());
-
- local.commit();
- assertEquals(false, local.isDirty());
- assertEquals(0, local.getNewObjects().size());
- assertEquals(0, local.getDirtyObjects().size());
- assertEquals(0, local.getDetachedObjects().size());
- assertEquals(0, workspace.getBase().getIDs().size());
-
- CDOView view = workspace.openView();
- resource = view.getResource(getResourcePath(RESOURCE));
- assertEquals(totalObjects + 1, dumpObjects(null, resource));
- }
-
- public void testUpdateAfterMasterDetach() throws Exception
- {
- InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
- assertNotSame(CDOBranchPoint.UNSPECIFIED_DATE, workspace.getTimeStamp());
-
- CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
- for (EObject object : resource.getContents())
- {
- if (object instanceof SalesOrder)
- {
- ((SalesOrder)object).getOrderDetails().clear();
- }
-
- if (object instanceof Product1)
- {
- ((Product1)object).getOrderDetails().clear();
- }
- }
-
- transaction.commit();
-
- CDOTransaction local = workspace.update(null);
- assertEquals(true, local.isDirty());
- assertEquals(SALES_ORDERS + PRODUCTS, local.getDirtyObjects().size());
- assertEquals(ORDER_DETAILS, local.getDetachedObjects().size());
-
- local.commit();
- assertEquals(false, local.isDirty());
- assertEquals(0, local.getNewObjects().size());
- assertEquals(0, local.getDirtyObjects().size());
- assertEquals(0, local.getDetachedObjects().size());
- assertEquals(0, workspace.getBase().getIDs().size());
-
- CDOView view = workspace.openView();
- resource = view.getResource(getResourcePath(RESOURCE));
- assertEquals(totalObjects - ORDER_DETAILS, dumpObjects(null, resource));
- }
-
- public void testUpdateAfterMasterAndLocalModify() throws Exception
- {
- // Checkout local
- InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
- assertNotSame(CDOBranchPoint.UNSPECIFIED_DATE, workspace.getTimeStamp());
-
- // Modify master
- assertEquals(1, modifyProduct(transaction, 1, "MODIFIED_"));
- transaction.commit();
-
- // Modify local
- CDOTransaction local = workspace.openTransaction();
- assertEquals(1, modifyProduct(local, 2, "MODIFIED_"));
- local.commit();
- local.close();
-
- // Update local
- local = workspace.update(new DefaultCDOMerger.PerFeature.ManyValued());
- assertEquals(true, local.isDirty());
- assertEquals(0, local.getNewObjects().size());
- assertEquals(1, local.getDirtyObjects().size());
- assertEquals(0, local.getDetachedObjects().size());
-
- // Commit local
- local.commit();
- assertEquals(false, local.isDirty());
- assertEquals(0, local.getNewObjects().size());
- assertEquals(0, local.getDirtyObjects().size());
- assertEquals(0, local.getDetachedObjects().size());
- assertEquals(1, workspace.getBase().getIDs().size());
-
- // Verify local
- CDOView view = workspace.openView();
- assertEquals(2, countModifiedProduct(view));
- }
-
- @Requires(IRepositoryConfig.CAPABILITY_UUIDS)
- public void testUpdateAfterMasterAndLocalAdd() throws Exception
- {
- InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
- assertNotSame(CDOBranchPoint.UNSPECIFIED_DATE, workspace.getTimeStamp());
-
- CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
- resource.getContents().add(createProduct(9999));
- transaction.commit();
-
- CDOTransaction local = workspace.openTransaction();
- resource = local.getResource(getResourcePath(RESOURCE));
- for (int i = 0; i < PRODUCTS; i++)
- {
- resource.getContents().add(createProduct(i));
- }
-
- local.commit();
- local.close();
-
- local = workspace.update(new DefaultCDOMerger.PerFeature.ManyValued());
- assertEquals(true, local.isDirty());
- assertEquals(1, local.getNewObjects().size());
- assertEquals(1, local.getDirtyObjects().size());
- assertEquals(0, local.getDetachedObjects().size());
-
- local.commit();
- assertEquals(false, local.isDirty());
- assertEquals(0, local.getNewObjects().size());
- assertEquals(0, local.getDirtyObjects().size());
- assertEquals(0, local.getDetachedObjects().size());
- assertEquals(6, workspace.getBase().getIDs().size());
-
- CDOView view = workspace.openView();
- resource = view.getResource(getResourcePath(RESOURCE));
- assertEquals(totalObjects + 1 + PRODUCTS, dumpObjects(null, resource));
- }
-
- public void testNoConflictMasterAndLocalModify() throws Exception
- {
- InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
- assertNotSame(CDOBranchPoint.UNSPECIFIED_DATE, workspace.getTimeStamp());
-
- assertEquals(1, modifyProduct(transaction, 1, "MODIFIED_"));
- transaction.commit();
-
- CDOTransaction local = workspace.openTransaction();
- assertEquals(1, modifyProduct(local, 1, "MODIFIED_"));
- local.commit();
- local.close();
-
- DefaultCDOMerger.PerFeature.ManyValued merger = new DefaultCDOMerger.PerFeature.ManyValued();
- local = workspace.update(merger);
- assertEquals(0, merger.getConflicts().size());
- assertEquals(false, local.isDirty());
- assertEquals(0, local.getNewObjects().size());
- assertEquals(0, local.getDirtyObjects().size());
- assertEquals(0, local.getDetachedObjects().size());
-
- CDOView view = workspace.openView();
- assertEquals(1, countModifiedProduct(view));
- }
-
- public void testConflictMasterAndLocalModify() throws Exception
- {
- CDOID id = CDOUtil.getCDOObject(products.get(1)).cdoID();
-
- InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
- assertNotSame(CDOBranchPoint.UNSPECIFIED_DATE, workspace.getTimeStamp());
-
- assertEquals(1, modifyProduct(transaction, 1, "MODIFIED_1_"));
- transaction.commit();
-
- CDOTransaction local = workspace.openTransaction();
- assertEquals(1, modifyProduct(local, 1, "MODIFIED_2_"));
- local.commit();
- local.close();
-
- DefaultCDOMerger.PerFeature.ManyValued merger = new DefaultCDOMerger.PerFeature.ManyValued();
-
- try
- {
- local = workspace.update(merger);
- fail("ConflictException expected");
- }
- catch (ConflictException expected)
- {
- // SUCCESS
- }
-
- Map<CDOID, Conflict> conflicts = merger.getConflicts();
- assertEquals(1, conflicts.size());
- assertEquals(id, conflicts.values().iterator().next().getID());
- assertInactive(local);
-
- CDOView view = workspace.openView();
- assertEquals(1, countModifiedProduct(view));
- }
-
- protected IStore createLocalStore()
- {
- return getRepositoryConfig().createStore(CDOWorkspaceConfiguration.DEFAULT_LOCAL_REPOSITORY_NAME);
- }
-
- protected InternalCDOWorkspace checkout(String branchPath, long timeStamp)
- {
- disableConsole();
- CDOSessionConfigurationFactory remote = new RemoteSessionConfigurationFactory();
-
- File folder = createTempFolder("cdo-");
- CDOWorkspaceBase base = CDOWorkspaceUtil.createFolderWorkspaceBase(folder);
- IOUtil.ERR().println("CDOWorkspaceBaseline: " + folder.getAbsolutePath());
-
- CDOWorkspaceConfiguration config = CDOWorkspaceUtil.createWorkspaceConfiguration();
- config.setStore(localStore);
- config.setBase(base);
- config.setRemote(remote);
- config.setBranchPath(branchPath);
- config.setTimeStamp(timeStamp);
- config.setIDGenerationLocation(getRepository().getIDGenerationLocation());
-
- InternalCDOWorkspace workspace = (InternalCDOWorkspace)config.checkout();
- workspaces.add(workspace);
-
- InternalRepository localRepository = workspace.getLocalRepository();
- registerRepository(localRepository);
- LifecycleUtil.activate(localRepository);
-
- return workspace;
- }
-
- private int dumpLocalStore(PrintStream out)
- {
- if (localStore instanceof CDOAllRevisionsProvider)
- {
- CDOAllRevisionsProvider provider = (CDOAllRevisionsProvider)localStore;
- Map<CDOBranch, List<CDORevision>> allRevisions = provider.getAllRevisions();
- int size = allRevisions.values().iterator().next().size();
-
- if (out != null)
- {
- CDORevisionUtil.dumpAllRevisions(allRevisions, out);
- }
-
- return size;
- }
-
- return 0;
- }
-
- private int dumpObjects(String prefix, EObject object)
- {
- if (prefix != null)
- {
- IOUtil.OUT().println(prefix + object);
- }
-
- int sum = 1;
- for (EObject content : object.eContents())
- {
- sum += dumpObjects(prefix != null ? prefix + " " : null, content);
- }
-
- return sum;
- }
-
- private CDOResource createTestSet(CDOTransaction transaction) throws CommitException
- {
- disableConsole();
- CDOResource resource = transaction.createResource(getResourcePath(RESOURCE));
- fillResource(resource);
-
- totalObjects = 1;
- for (Iterator<EObject> it = resource.eAllContents(); it.hasNext();)
- {
- it.next();
- ++totalObjects;
- }
-
- transaction.commit();
- enableConsole();
- return resource;
- }
-
- private void fillResource(CDOResource resource)
- {
- for (int i = 0; i < PRODUCTS; i++)
- {
- Product1 product = createProduct(i);
- products.add(product);
- resource.getContents().add(product);
- }
-
- int id = 100;
- for (int i = 0; i < CUSTOMERS; i++)
- {
- Customer customer = createCustomer(i);
- customers.add(customer);
- resource.getContents().add(customer);
-
- for (int k = 0; k < SALES_ORDERS_PER_CUSTOMER; k++)
- {
- SalesOrder salesOrder = createSalesOrder(id++, customer);
- salesOrders.add(salesOrder);
- resource.getContents().add(salesOrder);
-
- for (Product1 product : products)
- {
- OrderDetail orderDetail = createOrderDetail(product, 55.123f);
- orderDetails.add(orderDetail);
- salesOrder.getOrderDetails().add(orderDetail);
- }
- }
- }
- }
-
- private Product1 createProduct(int index)
- {
- Product1 product = getModel1Factory().createProduct1();
- product.setName(getProductName(index));
- product.setVat(VAT.VAT15);
- return product;
- }
-
- private Customer createCustomer(int i)
- {
- Customer customer = getModel1Factory().createCustomer();
- customer.setCity("City " + i);
- customer.setName("" + i);
- customer.setStreet("Street " + i);
- return customer;
- }
-
- private SalesOrder createSalesOrder(int id, Customer customer)
- {
- SalesOrder salesOrder = getModel1Factory().createSalesOrder();
- salesOrder.setId(id);
- salesOrder.setCustomer(customer);
- return salesOrder;
- }
-
- private OrderDetail createOrderDetail(Product1 product, float price)
- {
- OrderDetail orderDetail = getModel1Factory().createOrderDetail();
- orderDetail.setPrice(price);
- orderDetail.setProduct(product);
- return orderDetail;
- }
-
- private String getProductName(int index)
- {
- return "Product No" + index;
- }
-
- private int modifyProduct(CDOTransaction transaction, int i, String prefix)
- {
- int count = 0;
- for (EObject object : transaction.getResource(getResourcePath(RESOURCE)).getContents())
- {
- if (object instanceof Product1)
- {
- Product1 product = (Product1)object;
- String name = product.getName();
- if (getProductName(i).equals(name))
- {
- product.setName(prefix + name);
- ++count;
- }
- }
- }
-
- return count;
- }
-
- private int countModifiedProduct(CDOView view)
- {
- int count = 0;
- for (EObject object : view.getResource(getResourcePath(RESOURCE)).getContents())
- {
- if (object instanceof Product1)
- {
- Product1 product = (Product1)object;
- String name = product.getName();
- if (name.startsWith("MODIFIED"))
- {
- IOUtil.ERR().println(name);
- ++count;
- }
- }
- }
-
- return count;
- }
-
- /**
- * @author Eike Stepper
- */
- private final class RemoteSessionConfigurationFactory implements CDOSessionConfigurationFactory
- {
- public CDOSessionConfiguration createSessionConfiguration()
- {
- return new TestSessionConfiguration()
- {
- public CDOSession openSession()
- {
- return WorkspaceTest.this.openSession();
- }
- };
- }
- }
-}
+/*
+ * 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:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests;
+
+import org.eclipse.emf.cdo.common.branch.CDOBranch;
+import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
+import org.eclipse.emf.cdo.common.commit.CDOChangeSetData;
+import org.eclipse.emf.cdo.common.commit.CDOCommitInfo;
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.revision.CDOAllRevisionsProvider;
+import org.eclipse.emf.cdo.common.revision.CDORevision;
+import org.eclipse.emf.cdo.common.revision.CDORevisionUtil;
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.server.IRepository;
+import org.eclipse.emf.cdo.server.IStore;
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.session.CDOSessionConfiguration;
+import org.eclipse.emf.cdo.session.CDOSessionConfigurationFactory;
+import org.eclipse.emf.cdo.spi.server.InternalRepository;
+import org.eclipse.emf.cdo.spi.workspace.InternalCDOWorkspace;
+import org.eclipse.emf.cdo.tests.config.IRepositoryConfig;
+import org.eclipse.emf.cdo.tests.config.impl.ConfigTest.Requires;
+import org.eclipse.emf.cdo.tests.model1.Customer;
+import org.eclipse.emf.cdo.tests.model1.OrderDetail;
+import org.eclipse.emf.cdo.tests.model1.Product1;
+import org.eclipse.emf.cdo.tests.model1.SalesOrder;
+import org.eclipse.emf.cdo.tests.model1.VAT;
+import org.eclipse.emf.cdo.tests.util.TestSessionConfiguration;
+import org.eclipse.emf.cdo.transaction.CDOMerger.ConflictException;
+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.emf.cdo.workspace.CDOWorkspace;
+import org.eclipse.emf.cdo.workspace.CDOWorkspaceBase;
+import org.eclipse.emf.cdo.workspace.CDOWorkspaceConfiguration;
+import org.eclipse.emf.cdo.workspace.CDOWorkspaceUtil;
+
+import org.eclipse.net4j.jvm.JVMUtil;
+import org.eclipse.net4j.util.io.IOUtil;
+import org.eclipse.net4j.util.lifecycle.LifecycleUtil;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.spi.cdo.DefaultCDOMerger;
+import org.eclipse.emf.spi.cdo.DefaultCDOMerger.Conflict;
+
+import java.io.File;
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author Eike Stepper
+ */
+@Requires(IRepositoryConfig.CAPABILITY_AUDITING)
+public class WorkspaceTest extends AbstractCDOTest
+{
+ private static final String RESOURCE = "/test1";
+
+ private static final int PRODUCTS = 5;
+
+ private static final int CUSTOMERS = 2;
+
+ private static final int SALES_ORDERS_PER_CUSTOMER = 1;
+
+ private static final int SALES_ORDERS = CUSTOMERS * SALES_ORDERS_PER_CUSTOMER;
+
+ private static final int ORDER_DETAILS = SALES_ORDERS * PRODUCTS;
+
+ private List<CDOWorkspace> workspaces = new ArrayList<CDOWorkspace>();
+
+ private CDOTransaction transaction;
+
+ private List<Product1> products;
+
+ private List<Customer> customers;
+
+ private List<SalesOrder> salesOrders;
+
+ private List<OrderDetail> orderDetails;
+
+ private int totalObjects;
+
+ private IStore localStore;
+
+ @Override
+ protected void doSetUp() throws Exception
+ {
+ super.doSetUp();
+ skipStoreWithoutHandleRevisions();
+
+ CDOSession session = openSession();
+ transaction = session.openTransaction();
+
+ products = new ArrayList<Product1>();
+ customers = new ArrayList<Customer>();
+ orderDetails = new ArrayList<OrderDetail>();
+ salesOrders = new ArrayList<SalesOrder>();
+
+ createTestSet(transaction);
+ assertEquals(PRODUCTS, products.size());
+ assertEquals(CUSTOMERS, customers.size());
+ assertEquals(SALES_ORDERS, salesOrders.size());
+ assertEquals(ORDER_DETAILS, orderDetails.size());
+
+ JVMUtil.prepareContainer(getClientContainer());
+ localStore = createLocalStore();
+ CDOUtil.setLegacyModeDefault(true);
+ }
+
+ @Override
+ protected void doTearDown() throws Exception
+ {
+ disableConsole();
+ CDOUtil.setLegacyModeDefault(false);
+ for (CDOWorkspace workspace : workspaces)
+ {
+ IOUtil.closeSilent(workspace);
+ }
+
+ workspaces.clear();
+ super.doTearDown();
+ }
+
+ @Override
+ public synchronized Map<String, Object> getTestProperties()
+ {
+ Map<String, Object> map = super.getTestProperties();
+ map.put(IRepository.Props.ENSURE_REFERENTIAL_INTEGRITY, "false");
+ return map;
+ }
+
+ @CleanRepositoriesBefore
+ public void testCheckout() throws Exception
+ {
+ checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
+ assertEquals(2 + totalObjects, dumpLocalStore(null)); // Root resource + test folder + totalObjects
+ }
+
+ public void testReadObjects() throws Exception
+ {
+ InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
+
+ CDOView view = workspace.openView();
+ CDOResource resource = view.getResource(getResourcePath(RESOURCE));
+ assertEquals(totalObjects, dumpObjects(null, resource));
+ }
+
+ public void testModifyObjects() throws Exception
+ {
+ InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
+
+ CDOTransaction transaction = workspace.openTransaction();
+ CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
+ for (EObject object : resource.getContents())
+ {
+ if (object instanceof Product1)
+ {
+ Product1 product = (Product1)object;
+ product.setName("MODIFIED_" + product.getName());
+ }
+ }
+
+ assertEquals(true, transaction.isDirty());
+ assertEquals(PRODUCTS, transaction.getDirtyObjects().size());
+
+ transaction.commit();
+ assertEquals(false, transaction.isDirty());
+ assertEquals(0, transaction.getDirtyObjects().size());
+
+ clearCache(transaction.getSession().getRevisionManager());
+
+ CDOView view = workspace.openView();
+ resource = view.getResource(getResourcePath(RESOURCE));
+ assertEquals(totalObjects, dumpObjects(null, resource));
+ for (EObject object : resource.getContents())
+ {
+ if (object instanceof Product1)
+ {
+ Product1 product = (Product1)object;
+ assertEquals(true, product.getName().startsWith("MODIFIED_"));
+ }
+ }
+ }
+
+ @Requires(IRepositoryConfig.CAPABILITY_UUIDS)
+ public void testAddObjects() throws Exception
+ {
+ InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
+
+ CDOTransaction transaction = workspace.openTransaction();
+ CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
+ for (int i = 0; i < PRODUCTS; i++)
+ {
+ resource.getContents().add(createProduct(i));
+ }
+
+ assertEquals(true, transaction.isDirty());
+ assertEquals(1, transaction.getDirtyObjects().size());
+ assertEquals(PRODUCTS, transaction.getNewObjects().size());
+
+ transaction.commit();
+ assertEquals(false, transaction.isDirty());
+ assertEquals(0, transaction.getDirtyObjects().size());
+ assertEquals(0, transaction.getNewObjects().size());
+
+ clearCache(transaction.getSession().getRevisionManager());
+
+ CDOView view = workspace.openView();
+ resource = view.getResource(getResourcePath(RESOURCE));
+ assertEquals(totalObjects + PRODUCTS, dumpObjects("--> ", resource));
+ }
+
+ public void testDetachObjects() throws Exception
+ {
+ InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
+
+ CDOTransaction transaction = workspace.openTransaction();
+ CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
+ for (EObject object : resource.getContents())
+ {
+ if (object instanceof SalesOrder)
+ {
+ ((SalesOrder)object).getOrderDetails().clear();
+ }
+
+ if (object instanceof Product1)
+ {
+ ((Product1)object).getOrderDetails().clear();
+ }
+ }
+
+ assertEquals(true, transaction.isDirty());
+ assertEquals(SALES_ORDERS + PRODUCTS, transaction.getDirtyObjects().size());
+ assertEquals(ORDER_DETAILS, transaction.getDetachedObjects().size());
+
+ transaction.commit();
+ assertEquals(false, transaction.isDirty());
+ assertEquals(0, transaction.getDirtyObjects().size());
+ assertEquals(0, transaction.getDetachedObjects().size());
+
+ clearCache(transaction.getSession().getRevisionManager());
+
+ CDOView view = workspace.openView();
+ resource = view.getResource(getResourcePath(RESOURCE));
+ assertEquals(totalObjects - ORDER_DETAILS, dumpObjects(null, resource));
+ for (EObject object : resource.getContents())
+ {
+ if (object instanceof SalesOrder)
+ {
+ if (!((SalesOrder)object).getOrderDetails().isEmpty())
+ {
+ fail("All order details should be detached");
+ }
+ }
+ }
+ }
+
+ public void testModifyObjects2() throws Exception
+ {
+ InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
+
+ CDOTransaction transaction = workspace.openTransaction();
+ CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
+ for (EObject object : resource.getContents())
+ {
+ if (object instanceof Product1)
+ {
+ Product1 product = (Product1)object;
+ product.setName("MODIFIED_" + product.getName());
+ }
+ }
+
+ assertEquals(true, transaction.isDirty());
+ assertEquals(PRODUCTS, transaction.getDirtyObjects().size());
+
+ transaction.commit();
+ assertEquals(false, transaction.isDirty());
+ assertEquals(0, transaction.getDirtyObjects().size());
+
+ for (EObject object : resource.getContents())
+ {
+ if (object instanceof Product1)
+ {
+ Product1 product = (Product1)object;
+ product.setName("MODIFIED2_" + product.getName());
+ }
+ }
+
+ assertEquals(true, transaction.isDirty());
+ assertEquals(PRODUCTS, transaction.getDirtyObjects().size());
+
+ transaction.commit();
+ assertEquals(false, transaction.isDirty());
+ assertEquals(0, transaction.getDirtyObjects().size());
+
+ clearCache(transaction.getSession().getRevisionManager());
+
+ CDOView view = workspace.openView();
+ resource = view.getResource(getResourcePath(RESOURCE));
+ assertEquals(totalObjects, dumpObjects(null, resource));
+ for (EObject object : resource.getContents())
+ {
+ if (object instanceof Product1)
+ {
+ Product1 product = (Product1)object;
+ assertEquals(true, product.getName().startsWith("MODIFIED2_"));
+ }
+ }
+ }
+
+ @Requires(IRepositoryConfig.CAPABILITY_UUIDS)
+ public void testAddObjects2() throws Exception
+ {
+ InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
+
+ CDOTransaction transaction = workspace.openTransaction();
+ CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
+ for (int i = 0; i < PRODUCTS; i++)
+ {
+ resource.getContents().add(createProduct(i));
+ }
+
+ assertEquals(true, transaction.isDirty());
+ assertEquals(1, transaction.getDirtyObjects().size());
+ assertEquals(PRODUCTS, transaction.getNewObjects().size());
+
+ transaction.commit();
+ assertEquals(false, transaction.isDirty());
+ assertEquals(0, transaction.getDirtyObjects().size());
+ assertEquals(0, transaction.getNewObjects().size());
+
+ for (int i = 0; i < PRODUCTS; i++)
+ {
+ resource.getContents().add(createProduct(i));
+ }
+
+ assertEquals(true, transaction.isDirty());
+ assertEquals(1, transaction.getDirtyObjects().size());
+ assertEquals(PRODUCTS, transaction.getNewObjects().size());
+
+ transaction.commit();
+ assertEquals(false, transaction.isDirty());
+ assertEquals(0, transaction.getDirtyObjects().size());
+ assertEquals(0, transaction.getNewObjects().size());
+
+ clearCache(transaction.getSession().getRevisionManager());
+
+ CDOView view = workspace.openView();
+ resource = view.getResource(getResourcePath(RESOURCE));
+ assertEquals(totalObjects + 2 * PRODUCTS, dumpObjects("--> ", resource));
+ }
+
+ public void testDetachObjects2() throws Exception
+ {
+ InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
+
+ CDOTransaction transaction = workspace.openTransaction();
+ CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
+ for (EObject object : resource.getContents())
+ {
+ if (object instanceof SalesOrder)
+ {
+ ((SalesOrder)object).getOrderDetails().clear();
+ }
+
+ if (object instanceof Product1)
+ {
+ ((Product1)object).getOrderDetails().clear();
+ }
+ }
+
+ assertEquals(true, transaction.isDirty());
+ assertEquals(SALES_ORDERS + PRODUCTS, transaction.getDirtyObjects().size());
+ assertEquals(ORDER_DETAILS, transaction.getDetachedObjects().size());
+
+ transaction.commit();
+ assertEquals(false, transaction.isDirty());
+ assertEquals(0, transaction.getDirtyObjects().size());
+ assertEquals(0, transaction.getDetachedObjects().size());
+
+ for (Iterator<EObject> it = resource.getContents().iterator(); it.hasNext();)
+ {
+ EObject object = it.next();
+ if (object instanceof SalesOrder)
+ {
+ it.remove();
+ }
+
+ if (object instanceof Customer)
+ {
+ ((Customer)object).getSalesOrders().clear();
+ }
+ }
+
+ assertEquals(true, transaction.isDirty());
+ assertEquals(1 + CUSTOMERS, transaction.getDirtyObjects().size());
+ assertEquals(SALES_ORDERS, transaction.getDetachedObjects().size());
+
+ transaction.commit();
+ assertEquals(false, transaction.isDirty());
+ assertEquals(0, transaction.getDirtyObjects().size());
+ assertEquals(0, transaction.getDetachedObjects().size());
+
+ clearCache(transaction.getSession().getRevisionManager());
+
+ CDOView view = workspace.openView();
+ resource = view.getResource(getResourcePath(RESOURCE));
+ assertEquals(totalObjects - ORDER_DETAILS - SALES_ORDERS, dumpObjects(null, resource));
+ for (EObject object : resource.getContents())
+ {
+ if (object instanceof SalesOrder)
+ {
+ if (!((SalesOrder)object).getOrderDetails().isEmpty())
+ {
+ fail("All order details should be detached");
+ }
+ }
+
+ if (object instanceof Customer)
+ {
+ if (!((Customer)object).getSalesOrders().isEmpty())
+ {
+ fail("All sales orders should be detached");
+ }
+ }
+ }
+ }
+
+ public void testLocalChangesAfterModify() throws Exception
+ {
+ InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
+
+ CDOTransaction transaction = workspace.openTransaction();
+ CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
+ for (EObject object : resource.getContents())
+ {
+ if (object instanceof Product1)
+ {
+ Product1 product = (Product1)object;
+ product.setName("MODIFIED_" + product.getName());
+ }
+ }
+
+ transaction.commit();
+
+ CDOChangeSetData changes = workspace.getLocalChanges();
+ assertEquals(0, changes.getNewObjects().size());
+ assertEquals(PRODUCTS, changes.getChangedObjects().size());
+ assertEquals(0, changes.getDetachedObjects().size());
+ }
+
+ @Requires(IRepositoryConfig.CAPABILITY_UUIDS)
+ public void testLocalChangesAfterAdd() throws Exception
+ {
+ InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
+
+ CDOTransaction transaction = workspace.openTransaction();
+ CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
+ for (int i = 0; i < PRODUCTS; i++)
+ {
+ resource.getContents().add(createProduct(i));
+ }
+
+ transaction.commit();
+
+ CDOChangeSetData changes = workspace.getLocalChanges();
+ assertEquals(PRODUCTS, changes.getNewObjects().size());
+ assertEquals(1, changes.getChangedObjects().size());
+ assertEquals(0, changes.getDetachedObjects().size());
+ }
+
+ public void testLocalChangesAfterDetach() throws Exception
+ {
+ InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
+
+ CDOTransaction transaction = workspace.openTransaction();
+ CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
+ for (EObject object : resource.getContents())
+ {
+ if (object instanceof SalesOrder)
+ {
+ ((SalesOrder)object).getOrderDetails().clear();
+ }
+
+ if (object instanceof Product1)
+ {
+ ((Product1)object).getOrderDetails().clear();
+ }
+ }
+
+ transaction.commit();
+
+ CDOChangeSetData changes = workspace.getLocalChanges();
+ assertEquals(0, changes.getNewObjects().size());
+ assertEquals(SALES_ORDERS + PRODUCTS, changes.getChangedObjects().size());
+ assertEquals(ORDER_DETAILS, changes.getDetachedObjects().size());
+ }
+
+ public void testLocalChangesAfterModify2() throws Exception
+ {
+ InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
+
+ CDOTransaction transaction = workspace.openTransaction();
+ CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
+ for (EObject object : resource.getContents())
+ {
+ if (object instanceof Product1)
+ {
+ Product1 product = (Product1)object;
+ product.setName("MODIFIED_" + product.getName());
+ }
+ }
+
+ transaction.commit();
+
+ for (EObject object : resource.getContents())
+ {
+ if (object instanceof Product1)
+ {
+ Product1 product = (Product1)object;
+ product.setName("MODIFIED2_" + product.getName());
+ }
+ }
+
+ transaction.commit();
+
+ CDOChangeSetData changes = workspace.getLocalChanges();
+ assertEquals(0, changes.getNewObjects().size());
+ assertEquals(PRODUCTS, changes.getChangedObjects().size());
+ assertEquals(0, changes.getDetachedObjects().size());
+ }
+
+ @Requires(IRepositoryConfig.CAPABILITY_UUIDS)
+ public void testLocalChangesAfterAdd2() throws Exception
+ {
+ InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
+
+ CDOTransaction transaction = workspace.openTransaction();
+ CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
+ for (int i = 0; i < PRODUCTS; i++)
+ {
+ resource.getContents().add(createProduct(i));
+ }
+
+ transaction.commit();
+
+ for (int i = 0; i < PRODUCTS; i++)
+ {
+ resource.getContents().add(createProduct(i));
+ }
+
+ transaction.commit();
+
+ CDOChangeSetData changes = workspace.getLocalChanges();
+ assertEquals(2 * PRODUCTS, changes.getNewObjects().size());
+ assertEquals(1, changes.getChangedObjects().size());
+ assertEquals(0, changes.getDetachedObjects().size());
+ }
+
+ public void testLocalChangesAfterDetach2() throws Exception
+ {
+ InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
+
+ CDOTransaction transaction = workspace.openTransaction();
+ CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
+ for (EObject object : resource.getContents())
+ {
+ if (object instanceof SalesOrder)
+ {
+ ((SalesOrder)object).getOrderDetails().clear();
+ }
+
+ if (object instanceof Product1)
+ {
+ ((Product1)object).getOrderDetails().clear();
+ }
+ }
+
+ transaction.commit();
+
+ for (Iterator<EObject> it = resource.getContents().iterator(); it.hasNext();)
+ {
+ EObject object = it.next();
+ if (object instanceof SalesOrder)
+ {
+ it.remove();
+ }
+
+ if (object instanceof Customer)
+ {
+ ((Customer)object).getSalesOrders().clear();
+ }
+ }
+
+ transaction.commit();
+
+ CDOChangeSetData changes = workspace.getLocalChanges();
+ assertEquals(0, changes.getNewObjects().size());
+ assertEquals(1 + CUSTOMERS + PRODUCTS, changes.getChangedObjects().size());
+ assertEquals(ORDER_DETAILS + SALES_ORDERS, changes.getDetachedObjects().size());
+ }
+
+ public void testCheckinAfterModify() throws Exception
+ {
+ InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
+
+ CDOTransaction transaction = workspace.openTransaction();
+ CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
+ for (EObject object : resource.getContents())
+ {
+ if (object instanceof Product1)
+ {
+ Product1 product = (Product1)object;
+ product.setName("MODIFIED_" + product.getName());
+ }
+ }
+
+ transaction.commit();
+
+ CDOCommitInfo info = workspace.checkin();
+ assertEquals(0, info.getNewObjects().size());
+ assertEquals(PRODUCTS, info.getChangedObjects().size());
+ assertEquals(0, info.getDetachedObjects().size());
+
+ CDOWorkspaceBase base = workspace.getBase();
+ assertEquals(0, base.getIDs().size());
+ assertEquals(info.getBranch().getPathName(), workspace.getBranchPath());
+ assertEquals(info.getTimeStamp(), workspace.getTimeStamp());
+ }
+
+ @Requires(IRepositoryConfig.CAPABILITY_UUIDS)
+ public void testCheckinAfterAdd() throws Exception
+ {
+ InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
+ IOUtil.ERR().println("Checkout done");
+
+ CDOTransaction transaction = workspace.openTransaction();
+ CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
+ for (int i = 0; i < PRODUCTS; i++)
+ {
+ resource.getContents().add(createProduct(i));
+ }
+
+ transaction.commit();
+
+ CDOCommitInfo info = workspace.checkin();
+ assertEquals(PRODUCTS, info.getNewObjects().size());
+ assertEquals(1, info.getChangedObjects().size());
+ assertEquals(0, info.getDetachedObjects().size());
+
+ CDOWorkspaceBase base = workspace.getBase();
+ assertEquals(0, base.getIDs().size());
+ assertEquals(info.getBranch().getPathName(), workspace.getBranchPath());
+ assertEquals(info.getTimeStamp(), workspace.getTimeStamp());
+ }
+
+ public void testCheckinAfterDetach() throws Exception
+ {
+ InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
+
+ CDOTransaction transaction = workspace.openTransaction();
+ CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
+ for (EObject object : resource.getContents())
+ {
+ if (object instanceof SalesOrder)
+ {
+ ((SalesOrder)object).getOrderDetails().clear();
+ }
+
+ if (object instanceof Product1)
+ {
+ ((Product1)object).getOrderDetails().clear();
+ }
+ }
+
+ transaction.commit();
+
+ CDOCommitInfo info = workspace.checkin();
+ assertEquals(0, info.getNewObjects().size());
+ assertEquals(SALES_ORDERS + PRODUCTS, info.getChangedObjects().size());
+ assertEquals(ORDER_DETAILS, info.getDetachedObjects().size());
+
+ CDOWorkspaceBase base = workspace.getBase();
+ assertEquals(0, base.getIDs().size());
+ assertEquals(info.getBranch().getPathName(), workspace.getBranchPath());
+ assertEquals(info.getTimeStamp(), workspace.getTimeStamp());
+ }
+
+ public void testCheckinAfterModify2() throws Exception
+ {
+ InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
+
+ CDOTransaction transaction = workspace.openTransaction();
+ CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
+ for (EObject object : resource.getContents())
+ {
+ if (object instanceof Product1)
+ {
+ Product1 product = (Product1)object;
+ product.setName("MODIFIED_" + product.getName());
+ }
+ }
+
+ transaction.commit();
+
+ for (EObject object : resource.getContents())
+ {
+ if (object instanceof Product1)
+ {
+ Product1 product = (Product1)object;
+ product.setName("MODIFIED2_" + product.getName());
+ }
+ }
+
+ transaction.commit();
+
+ CDOCommitInfo info = workspace.checkin();
+ assertEquals(0, info.getNewObjects().size());
+ assertEquals(PRODUCTS, info.getChangedObjects().size());
+ assertEquals(0, info.getDetachedObjects().size());
+
+ CDOWorkspaceBase base = workspace.getBase();
+ assertEquals(0, base.getIDs().size());
+ assertEquals(info.getBranch().getPathName(), workspace.getBranchPath());
+ assertEquals(info.getTimeStamp(), workspace.getTimeStamp());
+ }
+
+ @Requires(IRepositoryConfig.CAPABILITY_UUIDS)
+ public void testCheckinAfterAdd2() throws Exception
+ {
+ InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
+
+ CDOTransaction transaction = workspace.openTransaction();
+ CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
+ for (int i = 0; i < PRODUCTS; i++)
+ {
+ resource.getContents().add(createProduct(i));
+ }
+
+ transaction.commit();
+
+ for (int i = 0; i < PRODUCTS; i++)
+ {
+ resource.getContents().add(createProduct(i));
+ }
+
+ transaction.commit();
+
+ CDOCommitInfo info = workspace.checkin();
+ assertEquals(2 * PRODUCTS, info.getNewObjects().size());
+ assertEquals(1, info.getChangedObjects().size());
+ assertEquals(0, info.getDetachedObjects().size());
+
+ CDOWorkspaceBase base = workspace.getBase();
+ assertEquals(0, base.getIDs().size());
+ assertEquals(info.getBranch().getPathName(), workspace.getBranchPath());
+ assertEquals(info.getTimeStamp(), workspace.getTimeStamp());
+ }
+
+ public void testCheckinAfterDetach2() throws Exception
+ {
+ InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
+
+ CDOTransaction transaction = workspace.openTransaction();
+ CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
+ for (EObject object : resource.getContents())
+ {
+ if (object instanceof SalesOrder)
+ {
+ ((SalesOrder)object).getOrderDetails().clear();
+ }
+
+ if (object instanceof Product1)
+ {
+ ((Product1)object).getOrderDetails().clear();
+ }
+ }
+
+ transaction.commit();
+
+ for (Iterator<EObject> it = resource.getContents().iterator(); it.hasNext();)
+ {
+ EObject object = it.next();
+ if (object instanceof SalesOrder)
+ {
+ it.remove();
+ }
+
+ if (object instanceof Customer)
+ {
+ ((Customer)object).getSalesOrders().clear();
+ }
+ }
+
+ transaction.commit();
+
+ CDOCommitInfo info = workspace.checkin();
+ assertEquals(0, info.getNewObjects().size());
+ assertEquals(1 + CUSTOMERS + PRODUCTS, info.getChangedObjects().size());
+ assertEquals(ORDER_DETAILS + SALES_ORDERS, info.getDetachedObjects().size());
+
+ CDOWorkspaceBase base = workspace.getBase();
+ assertEquals(0, base.getIDs().size());
+ assertEquals(info.getBranch().getPathName(), workspace.getBranchPath());
+ assertEquals(info.getTimeStamp(), workspace.getTimeStamp());
+ }
+
+ public void testCheckin2AfterModify() throws Exception
+ {
+ InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
+
+ CDOTransaction transaction = workspace.openTransaction();
+ CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
+ for (EObject object : resource.getContents())
+ {
+ if (object instanceof Product1)
+ {
+ Product1 product = (Product1)object;
+ product.setName("MODIFIED_" + product.getName());
+ }
+ }
+
+ transaction.commit();
+
+ CDOCommitInfo info = workspace.checkin();
+ assertEquals(0, info.getNewObjects().size());
+ assertEquals(PRODUCTS, info.getChangedObjects().size());
+ assertEquals(0, info.getDetachedObjects().size());
+
+ CDOWorkspaceBase base = workspace.getBase();
+ assertEquals(0, base.getIDs().size());
+ assertEquals(info.getBranch().getPathName(), workspace.getBranchPath());
+ assertEquals(info.getTimeStamp(), workspace.getTimeStamp());
+
+ transaction = workspace.openTransaction();
+ resource = transaction.getResource(getResourcePath(RESOURCE));
+ for (EObject object : resource.getContents())
+ {
+ if (object instanceof Product1)
+ {
+ Product1 product = (Product1)object;
+ product.setName("MODIFIED2_" + product.getName());
+ }
+ }
+
+ transaction.commit();
+
+ info = workspace.checkin();
+ assertEquals(0, info.getNewObjects().size());
+ assertEquals(PRODUCTS, info.getChangedObjects().size());
+ assertEquals(0, info.getDetachedObjects().size());
+
+ base = workspace.getBase();
+ assertEquals(0, base.getIDs().size());
+ assertEquals(info.getBranch().getPathName(), workspace.getBranchPath());
+ assertEquals(info.getTimeStamp(), workspace.getTimeStamp());
+ }
+
+ @Requires(IRepositoryConfig.CAPABILITY_UUIDS)
+ public void testCheckin2AfterAdd() throws Exception
+ {
+ InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
+
+ CDOTransaction transaction = workspace.openTransaction();
+ CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
+ for (int i = 0; i < PRODUCTS; i++)
+ {
+ resource.getContents().add(createProduct(i));
+ }
+
+ transaction.commit();
+
+ CDOCommitInfo info = workspace.checkin();
+ assertEquals(PRODUCTS, info.getNewObjects().size());
+ assertEquals(1, info.getChangedObjects().size());
+ assertEquals(0, info.getDetachedObjects().size());
+
+ CDOWorkspaceBase base = workspace.getBase();
+ assertEquals(0, base.getIDs().size());
+ assertEquals(info.getBranch().getPathName(), workspace.getBranchPath());
+ assertEquals(info.getTimeStamp(), workspace.getTimeStamp());
+
+ transaction = workspace.openTransaction();
+ resource = transaction.getResource(getResourcePath(RESOURCE));
+ for (int i = 0; i < PRODUCTS; i++)
+ {
+ resource.getContents().add(createProduct(i));
+ }
+
+ transaction.commit();
+
+ info = workspace.checkin();
+ assertEquals(PRODUCTS, info.getNewObjects().size());
+ assertEquals(1, info.getChangedObjects().size());
+ assertEquals(0, info.getDetachedObjects().size());
+
+ base = workspace.getBase();
+ assertEquals(0, base.getIDs().size());
+ assertEquals(info.getBranch().getPathName(), workspace.getBranchPath());
+ assertEquals(info.getTimeStamp(), workspace.getTimeStamp());
+ }
+
+ public void testCheckin2AfterDetach() throws Exception
+ {
+ InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
+
+ CDOTransaction transaction = workspace.openTransaction();
+ CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
+ for (EObject object : resource.getContents())
+ {
+ if (object instanceof SalesOrder)
+ {
+ ((SalesOrder)object).getOrderDetails().clear();
+ }
+
+ if (object instanceof Product1)
+ {
+ ((Product1)object).getOrderDetails().clear();
+ }
+ }
+
+ transaction.commit();
+
+ CDOCommitInfo info = workspace.checkin();
+ assertEquals(0, info.getNewObjects().size());
+ assertEquals(SALES_ORDERS + PRODUCTS, info.getChangedObjects().size());
+ assertEquals(ORDER_DETAILS, info.getDetachedObjects().size());
+
+ CDOWorkspaceBase base = workspace.getBase();
+ assertEquals(0, base.getIDs().size());
+ assertEquals(info.getBranch().getPathName(), workspace.getBranchPath());
+ assertEquals(info.getTimeStamp(), workspace.getTimeStamp());
+
+ transaction = workspace.openTransaction();
+ resource = transaction.getResource(getResourcePath(RESOURCE));
+ for (Iterator<EObject> it = resource.getContents().iterator(); it.hasNext();)
+ {
+ EObject object = it.next();
+ if (object instanceof SalesOrder)
+ {
+ it.remove();
+ }
+
+ if (object instanceof Customer)
+ {
+ ((Customer)object).getSalesOrders().clear();
+ }
+ }
+
+ transaction.commit();
+
+ info = workspace.checkin();
+ assertEquals(0, info.getNewObjects().size());
+ assertEquals(1 + CUSTOMERS, info.getChangedObjects().size());
+ assertEquals(SALES_ORDERS, info.getDetachedObjects().size());
+
+ base = workspace.getBase();
+ assertEquals(0, base.getIDs().size());
+ assertEquals(info.getBranch().getPathName(), workspace.getBranchPath());
+ assertEquals(info.getTimeStamp(), workspace.getTimeStamp());
+ }
+
+ public void testUpdateAfterMasterModify() throws Exception
+ {
+ InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
+ assertNotSame(CDOBranchPoint.UNSPECIFIED_DATE, workspace.getTimeStamp());
+
+ CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
+ for (EObject object : resource.getContents())
+ {
+ if (object instanceof Product1)
+ {
+ Product1 product = (Product1)object;
+ product.setName("MODIFIED_" + product.getName());
+ }
+ }
+
+ transaction.commit();
+
+ CDOTransaction local = workspace.update(null);
+ assertEquals(true, local.isDirty());
+ assertEquals(0, local.getNewObjects().size());
+ assertEquals(PRODUCTS, local.getDirtyObjects().size());
+ assertEquals(0, local.getDetachedObjects().size());
+
+ local.commit();
+ assertEquals(false, local.isDirty());
+ assertEquals(0, local.getNewObjects().size());
+ assertEquals(0, local.getDirtyObjects().size());
+ assertEquals(0, local.getDetachedObjects().size());
+ assertEquals(0, workspace.getBase().getIDs().size());
+
+ CDOView view = workspace.openView();
+ resource = view.getResource(getResourcePath(RESOURCE));
+ assertEquals(totalObjects, dumpObjects(null, resource));
+ }
+
+ @Requires(IRepositoryConfig.CAPABILITY_UUIDS)
+ public void testUpdateAfterMasterAdd() throws Exception
+ {
+ InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
+ assertNotSame(CDOBranchPoint.UNSPECIFIED_DATE, workspace.getTimeStamp());
+
+ CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
+ resource.getContents().add(createProduct(9999));
+ transaction.commit();
+
+ CDOTransaction local = workspace.update(null);
+ assertEquals(true, local.isDirty());
+ assertEquals(1, local.getNewObjects().size());
+ assertEquals(1, local.getDirtyObjects().size());
+ assertEquals(0, local.getDetachedObjects().size());
+
+ local.commit();
+ assertEquals(false, local.isDirty());
+ assertEquals(0, local.getNewObjects().size());
+ assertEquals(0, local.getDirtyObjects().size());
+ assertEquals(0, local.getDetachedObjects().size());
+ assertEquals(0, workspace.getBase().getIDs().size());
+
+ CDOView view = workspace.openView();
+ resource = view.getResource(getResourcePath(RESOURCE));
+ assertEquals(totalObjects + 1, dumpObjects(null, resource));
+ }
+
+ @Requires(IRepositoryConfig.CAPABILITY_UUIDS)
+ public void testUpdateTwiceAfterMasterAdd() throws Exception
+ {
+ InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
+ assertNotSame(CDOBranchPoint.UNSPECIFIED_DATE, workspace.getTimeStamp());
+
+ CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
+ resource.getContents().add(createProduct(9999));
+ transaction.commit();
+
+ CDOTransaction local = workspace.update(null);
+ assertEquals(true, local.isDirty());
+ assertEquals(1, local.getNewObjects().size());
+ assertEquals(1, local.getDirtyObjects().size());
+ assertEquals(0, local.getDetachedObjects().size());
+
+ local.commit();
+ assertEquals(false, local.isDirty());
+ assertEquals(0, local.getNewObjects().size());
+ assertEquals(0, local.getDirtyObjects().size());
+ assertEquals(0, local.getDetachedObjects().size());
+ assertEquals(0, workspace.getBase().getIDs().size());
+ local.close();
+
+ local = workspace.update(null);
+ assertEquals(false, local.isDirty());
+ assertEquals(0, local.getNewObjects().size());
+ assertEquals(0, local.getDirtyObjects().size());
+ assertEquals(0, local.getDetachedObjects().size());
+ assertEquals(0, workspace.getBase().getIDs().size());
+
+ local.commit();
+ assertEquals(false, local.isDirty());
+ assertEquals(0, local.getNewObjects().size());
+ assertEquals(0, local.getDirtyObjects().size());
+ assertEquals(0, local.getDetachedObjects().size());
+ assertEquals(0, workspace.getBase().getIDs().size());
+
+ CDOView view = workspace.openView();
+ resource = view.getResource(getResourcePath(RESOURCE));
+ assertEquals(totalObjects + 1, dumpObjects(null, resource));
+ }
+
+ public void testUpdateAfterMasterDetach() throws Exception
+ {
+ InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
+ assertNotSame(CDOBranchPoint.UNSPECIFIED_DATE, workspace.getTimeStamp());
+
+ CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
+ for (EObject object : resource.getContents())
+ {
+ if (object instanceof SalesOrder)
+ {
+ ((SalesOrder)object).getOrderDetails().clear();
+ }
+
+ if (object instanceof Product1)
+ {
+ ((Product1)object).getOrderDetails().clear();
+ }
+ }
+
+ transaction.commit();
+
+ CDOTransaction local = workspace.update(null);
+ assertEquals(true, local.isDirty());
+ assertEquals(SALES_ORDERS + PRODUCTS, local.getDirtyObjects().size());
+ assertEquals(ORDER_DETAILS, local.getDetachedObjects().size());
+
+ local.commit();
+ assertEquals(false, local.isDirty());
+ assertEquals(0, local.getNewObjects().size());
+ assertEquals(0, local.getDirtyObjects().size());
+ assertEquals(0, local.getDetachedObjects().size());
+ assertEquals(0, workspace.getBase().getIDs().size());
+
+ CDOView view = workspace.openView();
+ resource = view.getResource(getResourcePath(RESOURCE));
+ assertEquals(totalObjects - ORDER_DETAILS, dumpObjects(null, resource));
+ }
+
+ public void testUpdateAfterMasterAndLocalModify() throws Exception
+ {
+ // Checkout local
+ InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
+ assertNotSame(CDOBranchPoint.UNSPECIFIED_DATE, workspace.getTimeStamp());
+
+ // Modify master
+ assertEquals(1, modifyProduct(transaction, 1, "MODIFIED_"));
+ transaction.commit();
+
+ // Modify local
+ CDOTransaction local = workspace.openTransaction();
+ assertEquals(1, modifyProduct(local, 2, "MODIFIED_"));
+ local.commit();
+ local.close();
+
+ // Update local
+ local = workspace.update(new DefaultCDOMerger.PerFeature.ManyValued());
+ assertEquals(true, local.isDirty());
+ assertEquals(0, local.getNewObjects().size());
+ assertEquals(1, local.getDirtyObjects().size());
+ assertEquals(0, local.getDetachedObjects().size());
+
+ // Commit local
+ local.commit();
+ assertEquals(false, local.isDirty());
+ assertEquals(0, local.getNewObjects().size());
+ assertEquals(0, local.getDirtyObjects().size());
+ assertEquals(0, local.getDetachedObjects().size());
+ assertEquals(1, workspace.getBase().getIDs().size());
+
+ // Verify local
+ CDOView view = workspace.openView();
+ assertEquals(2, countModifiedProduct(view));
+ }
+
+ @Requires(IRepositoryConfig.CAPABILITY_UUIDS)
+ public void testUpdateAfterMasterAndLocalAdd() throws Exception
+ {
+ InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
+ assertNotSame(CDOBranchPoint.UNSPECIFIED_DATE, workspace.getTimeStamp());
+
+ CDOResource resource = transaction.getResource(getResourcePath(RESOURCE));
+ resource.getContents().add(createProduct(9999));
+ transaction.commit();
+
+ CDOTransaction local = workspace.openTransaction();
+ resource = local.getResource(getResourcePath(RESOURCE));
+ for (int i = 0; i < PRODUCTS; i++)
+ {
+ resource.getContents().add(createProduct(i));
+ }
+
+ local.commit();
+ local.close();
+
+ local = workspace.update(new DefaultCDOMerger.PerFeature.ManyValued());
+ assertEquals(true, local.isDirty());
+ assertEquals(1, local.getNewObjects().size());
+ assertEquals(1, local.getDirtyObjects().size());
+ assertEquals(0, local.getDetachedObjects().size());
+
+ local.commit();
+ assertEquals(false, local.isDirty());
+ assertEquals(0, local.getNewObjects().size());
+ assertEquals(0, local.getDirtyObjects().size());
+ assertEquals(0, local.getDetachedObjects().size());
+ assertEquals(6, workspace.getBase().getIDs().size());
+
+ CDOView view = workspace.openView();
+ resource = view.getResource(getResourcePath(RESOURCE));
+ assertEquals(totalObjects + 1 + PRODUCTS, dumpObjects(null, resource));
+ }
+
+ public void testNoConflictMasterAndLocalModify() throws Exception
+ {
+ InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
+ assertNotSame(CDOBranchPoint.UNSPECIFIED_DATE, workspace.getTimeStamp());
+
+ assertEquals(1, modifyProduct(transaction, 1, "MODIFIED_"));
+ transaction.commit();
+
+ CDOTransaction local = workspace.openTransaction();
+ assertEquals(1, modifyProduct(local, 1, "MODIFIED_"));
+ local.commit();
+ local.close();
+
+ DefaultCDOMerger.PerFeature.ManyValued merger = new DefaultCDOMerger.PerFeature.ManyValued();
+ local = workspace.update(merger);
+ assertEquals(0, merger.getConflicts().size());
+ assertEquals(false, local.isDirty());
+ assertEquals(0, local.getNewObjects().size());
+ assertEquals(0, local.getDirtyObjects().size());
+ assertEquals(0, local.getDetachedObjects().size());
+
+ CDOView view = workspace.openView();
+ assertEquals(1, countModifiedProduct(view));
+ }
+
+ public void testConflictMasterAndLocalModify() throws Exception
+ {
+ CDOID id = CDOUtil.getCDOObject(products.get(1)).cdoID();
+
+ InternalCDOWorkspace workspace = checkout("MAIN", CDOBranchPoint.UNSPECIFIED_DATE);
+ assertNotSame(CDOBranchPoint.UNSPECIFIED_DATE, workspace.getTimeStamp());
+
+ assertEquals(1, modifyProduct(transaction, 1, "MODIFIED_1_"));
+ transaction.commit();
+
+ CDOTransaction local = workspace.openTransaction();
+ assertEquals(1, modifyProduct(local, 1, "MODIFIED_2_"));
+ local.commit();
+ local.close();
+
+ DefaultCDOMerger.PerFeature.ManyValued merger = new DefaultCDOMerger.PerFeature.ManyValued();
+
+ try
+ {
+ local = workspace.update(merger);
+ fail("ConflictException expected");
+ }
+ catch (ConflictException expected)
+ {
+ // SUCCESS
+ }
+
+ Map<CDOID, Conflict> conflicts = merger.getConflicts();
+ assertEquals(1, conflicts.size());
+ assertEquals(id, conflicts.values().iterator().next().getID());
+ assertInactive(local);
+
+ CDOView view = workspace.openView();
+ assertEquals(1, countModifiedProduct(view));
+ }
+
+ protected IStore createLocalStore()
+ {
+ return getRepositoryConfig().createStore(CDOWorkspaceConfiguration.DEFAULT_LOCAL_REPOSITORY_NAME);
+ }
+
+ protected InternalCDOWorkspace checkout(String branchPath, long timeStamp)
+ {
+ disableConsole();
+ CDOSessionConfigurationFactory remote = new RemoteSessionConfigurationFactory();
+
+ File folder = createTempFolder("cdo-");
+ CDOWorkspaceBase base = CDOWorkspaceUtil.createFolderWorkspaceBase(folder);
+ IOUtil.ERR().println("CDOWorkspaceBaseline: " + folder.getAbsolutePath());
+
+ CDOWorkspaceConfiguration config = CDOWorkspaceUtil.createWorkspaceConfiguration();
+ config.setStore(localStore);
+ config.setBase(base);
+ config.setRemote(remote);
+ config.setBranchPath(branchPath);
+ config.setTimeStamp(timeStamp);
+ config.setIDGenerationLocation(getRepository().getIDGenerationLocation());
+
+ InternalCDOWorkspace workspace = (InternalCDOWorkspace)config.checkout();
+ workspaces.add(workspace);
+
+ InternalRepository localRepository = workspace.getLocalRepository();
+ registerRepository(localRepository);
+ LifecycleUtil.activate(localRepository);
+
+ return workspace;
+ }
+
+ private int dumpLocalStore(PrintStream out)
+ {
+ if (localStore instanceof CDOAllRevisionsProvider)
+ {
+ CDOAllRevisionsProvider provider = (CDOAllRevisionsProvider)localStore;
+ Map<CDOBranch, List<CDORevision>> allRevisions = provider.getAllRevisions();
+ int size = allRevisions.values().iterator().next().size();
+
+ if (out != null)
+ {
+ CDORevisionUtil.dumpAllRevisions(allRevisions, out);
+ }
+
+ return size;
+ }
+
+ return 0;
+ }
+
+ private int dumpObjects(String prefix, EObject object)
+ {
+ if (prefix != null)
+ {
+ IOUtil.OUT().println(prefix + object);
+ }
+
+ int sum = 1;
+ for (EObject content : object.eContents())
+ {
+ sum += dumpObjects(prefix != null ? prefix + " " : null, content);
+ }
+
+ return sum;
+ }
+
+ private CDOResource createTestSet(CDOTransaction transaction) throws CommitException
+ {
+ disableConsole();
+ CDOResource resource = transaction.createResource(getResourcePath(RESOURCE));
+ fillResource(resource);
+
+ totalObjects = 1;
+ for (Iterator<EObject> it = resource.eAllContents(); it.hasNext();)
+ {
+ it.next();
+ ++totalObjects;
+ }
+
+ transaction.commit();
+ enableConsole();
+ return resource;
+ }
+
+ private void fillResource(CDOResource resource)
+ {
+ for (int i = 0; i < PRODUCTS; i++)
+ {
+ Product1 product = createProduct(i);
+ products.add(product);
+ resource.getContents().add(product);
+ }
+
+ int id = 100;
+ for (int i = 0; i < CUSTOMERS; i++)
+ {
+ Customer customer = createCustomer(i);
+ customers.add(customer);
+ resource.getContents().add(customer);
+
+ for (int k = 0; k < SALES_ORDERS_PER_CUSTOMER; k++)
+ {
+ SalesOrder salesOrder = createSalesOrder(id++, customer);
+ salesOrders.add(salesOrder);
+ resource.getContents().add(salesOrder);
+
+ for (Product1 product : products)
+ {
+ OrderDetail orderDetail = createOrderDetail(product, 55.123f);
+ orderDetails.add(orderDetail);
+ salesOrder.getOrderDetails().add(orderDetail);
+ }
+ }
+ }
+ }
+
+ private Product1 createProduct(int index)
+ {
+ Product1 product = getModel1Factory().createProduct1();
+ product.setName(getProductName(index));
+ product.setVat(VAT.VAT15);
+ return product;
+ }
+
+ private Customer createCustomer(int i)
+ {
+ Customer customer = getModel1Factory().createCustomer();
+ customer.setCity("City " + i);
+ customer.setName("" + i);
+ customer.setStreet("Street " + i);
+ return customer;
+ }
+
+ private SalesOrder createSalesOrder(int id, Customer customer)
+ {
+ SalesOrder salesOrder = getModel1Factory().createSalesOrder();
+ salesOrder.setId(id);
+ salesOrder.setCustomer(customer);
+ return salesOrder;
+ }
+
+ private OrderDetail createOrderDetail(Product1 product, float price)
+ {
+ OrderDetail orderDetail = getModel1Factory().createOrderDetail();
+ orderDetail.setPrice(price);
+ orderDetail.setProduct(product);
+ return orderDetail;
+ }
+
+ private String getProductName(int index)
+ {
+ return "Product No" + index;
+ }
+
+ private int modifyProduct(CDOTransaction transaction, int i, String prefix)
+ {
+ int count = 0;
+ for (EObject object : transaction.getResource(getResourcePath(RESOURCE)).getContents())
+ {
+ if (object instanceof Product1)
+ {
+ Product1 product = (Product1)object;
+ String name = product.getName();
+ if (getProductName(i).equals(name))
+ {
+ product.setName(prefix + name);
+ ++count;
+ }
+ }
+ }
+
+ return count;
+ }
+
+ private int countModifiedProduct(CDOView view)
+ {
+ int count = 0;
+ for (EObject object : view.getResource(getResourcePath(RESOURCE)).getContents())
+ {
+ if (object instanceof Product1)
+ {
+ Product1 product = (Product1)object;
+ String name = product.getName();
+ if (name.startsWith("MODIFIED"))
+ {
+ IOUtil.ERR().println(name);
+ ++count;
+ }
+ }
+ }
+
+ return count;
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ private final class RemoteSessionConfigurationFactory implements CDOSessionConfigurationFactory
+ {
+ public CDOSessionConfiguration createSessionConfiguration()
+ {
+ return new TestSessionConfiguration()
+ {
+ public CDOSession openSession()
+ {
+ return WorkspaceTest.this.openSession();
+ }
+ };
+ }
+ }
+}

Back to the top