Skip to main content

This CGIT instance is deprecated, and repositories have been moved to Gitlab or Github. See the repository descriptions for specific locations.

summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2009-07-20 14:26:40 +0000
committerEike Stepper2009-07-20 14:26:40 +0000
commit1275e73c2fe29f39eaf4a84393441a0a76e655a5 (patch)
tree98fe31db85c8da1c21939140e72130c71d0671df
parentd920ffeb564f597c7a452eb0b5893f1d8fbc33c4 (diff)
downloadcdo-1275e73c2fe29f39eaf4a84393441a0a76e655a5.tar.gz
cdo-1275e73c2fe29f39eaf4a84393441a0a76e655a5.tar.xz
cdo-1275e73c2fe29f39eaf4a84393441a0a76e655a5.zip
[283945] Prevent EObjects from being passed to a repository
https://bugs.eclipse.org/bugs/show_bug.cgi?id=283945
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/CrossReferenceTest.java130
1 files changed, 129 insertions, 1 deletions
diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/CrossReferenceTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/CrossReferenceTest.java
index 45bc0cc330..b01b956438 100644
--- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/CrossReferenceTest.java
+++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/CrossReferenceTest.java
@@ -4,12 +4,15 @@
* 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.CDOObject;
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.revision.CDORevisionData;
import org.eclipse.emf.cdo.eresource.CDOResource;
import org.eclipse.emf.cdo.session.CDOSession;
import org.eclipse.emf.cdo.tests.model1.Company;
@@ -18,8 +21,13 @@ import org.eclipse.emf.cdo.tests.model1.SalesOrder;
import org.eclipse.emf.cdo.transaction.CDOTransaction;
import org.eclipse.emf.cdo.view.CDOView;
+import org.eclipse.net4j.util.transaction.TransactionException;
+
import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.impl.ResourceImpl;
/**
* @author Eike Stepper
@@ -258,4 +266,124 @@ public class CrossReferenceTest extends AbstractCDOTest
SalesOrder salesOrder2B = customerB.getSalesOrders().get(1);
assertClean(salesOrder2B, viewB);
}
+
+ public void testDetachXRef() throws Exception
+ {
+ Customer customer = getModel1Factory().createCustomer();
+ customer.setName("customer");
+
+ SalesOrder salesOrder = getModel1Factory().createSalesOrder();
+ salesOrder.setId(4711);
+ salesOrder.setCustomer(customer);
+
+ Company company = getModel1Factory().createCompany();
+ company.getCustomers().add(customer);
+ company.getSalesOrders().add(salesOrder);
+
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOResource resource = transaction.createResource("/my/company/resource");
+ resource.getContents().add(company);
+ transaction.commit();
+
+ company.getCustomers().remove(customer);
+
+ try
+ {
+ transaction.commit();
+ fail("TransactionException expected");
+ }
+ catch (TransactionException expected)
+ {
+ }
+ }
+
+ public void testDetachXRefReattach() throws Exception
+ {
+ Customer customer = getModel1Factory().createCustomer();
+ customer.setName("customer");
+
+ SalesOrder salesOrder = getModel1Factory().createSalesOrder();
+ salesOrder.setId(4711);
+ salesOrder.setCustomer(customer);
+
+ Company company = getModel1Factory().createCompany();
+ company.getCustomers().add(customer);
+ company.getSalesOrders().add(salesOrder);
+
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOResource resource = transaction.createResource("/my/company/resource");
+ resource.getContents().add(company);
+ transaction.commit();
+
+ company.getCustomers().remove(customer);
+ company.getCustomers().add(customer);
+
+ transaction.commit();
+ }
+
+ public void testDetachXRefExternal() throws Exception
+ {
+ Customer customer = getModel1Factory().createCustomer();
+ customer.setName("customer");
+
+ SalesOrder salesOrder = getModel1Factory().createSalesOrder();
+ salesOrder.setId(4711);
+ salesOrder.setCustomer(customer);
+
+ Company company = getModel1Factory().createCompany();
+ company.getCustomers().add(customer);
+ company.getSalesOrders().add(salesOrder);
+
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOResource resource = transaction.createResource("/my/company/resource");
+ resource.getContents().add(company);
+ transaction.commit();
+
+ Resource externalResource = new ResourceImpl(URI.createFileURI("/x/y/z"));
+ transaction.getResourceSet().getResources().add(externalResource);
+ externalResource.getContents().add(customer);
+
+ transaction.commit();
+ CDORevisionData data = ((CDOObject)salesOrder).cdoRevision().data();
+ CDOID id = (CDOID)data.get(getModel1Package().getSalesOrder_Customer(), 0);
+ assertTrue(id.isExternal());
+ }
+
+ public void _testDetachXRefExternalReattach() throws Exception
+ {
+ Customer customer = getModel1Factory().createCustomer();
+ customer.setName("customer");
+
+ SalesOrder salesOrder = getModel1Factory().createSalesOrder();
+ salesOrder.setId(4711);
+ salesOrder.setCustomer(customer);
+
+ Company company = getModel1Factory().createCompany();
+ company.getCustomers().add(customer);
+ company.getSalesOrders().add(salesOrder);
+
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOResource resource = transaction.createResource("/my/company/resource");
+ resource.getContents().add(company);
+ transaction.commit();
+
+ Resource externalResource = new ResourceImpl(URI.createFileURI("/x/y/z"));
+ transaction.getResourceSet().getResources().add(externalResource);
+ externalResource.getContents().add(customer);
+
+ transaction.commit();
+ CDORevisionData data = ((CDOObject)salesOrder).cdoRevision().data();
+ CDOID id = (CDOID)data.get(getModel1Package().getSalesOrder_Customer(), 0);
+ assertTrue(id.isExternal());
+
+ company.getCustomers().add(customer);
+ transaction.commit();
+ data = ((CDOObject)salesOrder).cdoRevision().data();
+ id = (CDOID)data.get(getModel1Package().getSalesOrder_Customer(), 0);
+ assertFalse(id.isExternal());
+ }
}

Back to the top