Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/XRefTest.java')
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/XRefTest.java1204
1 files changed, 602 insertions, 602 deletions
diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/XRefTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/XRefTest.java
index ef76041418..4c7a9a4631 100644
--- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/XRefTest.java
+++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/XRefTest.java
@@ -1,602 +1,602 @@
-/*
- * 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
- * Stefan Winkler - additional tests
- */
-package org.eclipse.emf.cdo.tests;
-
-import org.eclipse.emf.cdo.CDOObject;
-import org.eclipse.emf.cdo.CDOObjectReference;
-import org.eclipse.emf.cdo.common.model.EMFUtil;
-import org.eclipse.emf.cdo.eresource.CDOResource;
-import org.eclipse.emf.cdo.session.CDOSession;
-import org.eclipse.emf.cdo.tests.model1.PurchaseOrder;
-import org.eclipse.emf.cdo.tests.model1.Supplier;
-import org.eclipse.emf.cdo.transaction.CDOTransaction;
-import org.eclipse.emf.cdo.util.CDOUtil;
-import org.eclipse.emf.cdo.view.CDOView;
-
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.emf.ecore.EAttribute;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.EReference;
-import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.emf.ecore.EcoreFactory;
-import org.eclipse.emf.ecore.EcorePackage;
-import org.eclipse.emf.ecore.util.EcoreUtil;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * 300149: Support remote cross referencing with a convenient API on the client and SPI on the server for the stores to
- * implement https://bugs.eclipse.org/bugs/show_bug.cgi?id=300149
- *
- * @author Eike Stepper
- * @since 4.0
- */
-public class XRefTest extends AbstractCDOTest
-{
- @Override
- protected void doSetUp() throws Exception
- {
- super.doSetUp();
- skipStoreWithoutQueryXRefs();
- }
-
- public void testCrossReferenceMultivalueEReferenceQuery() throws Exception
- {
- PurchaseOrder purchaseOrder1 = getModel1Factory().createPurchaseOrder();
- PurchaseOrder purchaseOrder2 = getModel1Factory().createPurchaseOrder();
- PurchaseOrder purchaseOrder3 = getModel1Factory().createPurchaseOrder();
- PurchaseOrder purchaseOrder4 = getModel1Factory().createPurchaseOrder();
-
- Supplier supplier = getModel1Factory().createSupplier();
- supplier.getPurchaseOrders().add(purchaseOrder1);
- supplier.getPurchaseOrders().add(purchaseOrder2);
- supplier.getPurchaseOrders().add(purchaseOrder3);
- supplier.getPurchaseOrders().add(purchaseOrder4);
-
- CDOSession session1 = openSession();
- CDOTransaction transaction = session1.openTransaction();
-
- CDOResource resource = transaction.createResource(getResourcePath("/test1"));
- resource.getContents().add(supplier);
- resource.getContents().add(purchaseOrder1);
- resource.getContents().add(purchaseOrder2);
- resource.getContents().add(purchaseOrder3);
- resource.getContents().add(purchaseOrder4);
-
- transaction.commit();
-
- /******************/
-
- CDOSession session2 = openSession();
- CDOView view = session2.openView();
-
- List<CDOObjectReference> results = view.queryXRefs(Collections.singleton(CDOUtil.getCDOObject(supplier)));
- assertEquals(4, results.size());
-
- for (CDOObjectReference result : results)
- {
- CDOObject sourceObject = result.getSourceObject();
- assertInstanceOf(PurchaseOrder.class, CDOUtil.getEObject(sourceObject));
- }
- }
-
- public void testLocallyDetachedObject() throws Exception
- {
- PurchaseOrder purchaseOrder1 = getModel1Factory().createPurchaseOrder();
- PurchaseOrder purchaseOrder2 = getModel1Factory().createPurchaseOrder();
- PurchaseOrder purchaseOrder3 = getModel1Factory().createPurchaseOrder();
- PurchaseOrder purchaseOrder4 = getModel1Factory().createPurchaseOrder();
-
- Supplier supplier = getModel1Factory().createSupplier();
- supplier.getPurchaseOrders().add(purchaseOrder1);
- supplier.getPurchaseOrders().add(purchaseOrder2);
- supplier.getPurchaseOrders().add(purchaseOrder3);
- supplier.getPurchaseOrders().add(purchaseOrder4);
-
- CDOSession session1 = openSession();
- CDOTransaction transaction1 = session1.openTransaction();
-
- CDOResource resource = transaction1.createResource(getResourcePath("/test1"));
- resource.getContents().add(supplier);
- resource.getContents().add(purchaseOrder1);
- resource.getContents().add(purchaseOrder2);
- resource.getContents().add(purchaseOrder3);
- resource.getContents().add(purchaseOrder4);
-
- transaction1.commit();
-
- /******************/
-
- CDOSession session2 = openSession();
- CDOTransaction transaction2 = session2.openTransaction();
- supplier = (Supplier)transaction2.getResource(getResourcePath("/test1")).getContents().remove(0);
-
- List<CDOObjectReference> results = transaction2.queryXRefs(Collections.singleton(CDOUtil.getCDOObject(supplier)));
- assertEquals(4, results.size());
-
- for (CDOObjectReference result : results)
- {
- CDOObject sourceObject = result.getSourceObject();
- assertInstanceOf(PurchaseOrder.class, CDOUtil.getEObject(sourceObject));
- }
- }
-
- @SuppressWarnings("unchecked")
- public void testXRefsToMany() throws Exception
- {
- // create model
- EPackage pkg = EMFUtil.createEPackage("xreftest", "xreftest",
- "http://cdo.emf.eclipse.org/TestModels/XRefTestToMany.ecore");
- EClass cls1 = EMFUtil.createEClass(pkg, "referencer", false, false);
- EAttribute id1 = EMFUtil.createEAttribute(cls1, "id", EcorePackage.eINSTANCE.getEInt());
-
- EClass cls2 = EMFUtil.createEClass(pkg, "referencee", false, false);
- EAttribute id2 = EMFUtil.createEAttribute(cls2, "id", EcorePackage.eINSTANCE.getEInt());
-
- EReference ref = EMFUtil.createEReference(cls1, "ref", cls2, false, true);
-
- if (!isConfig(LEGACY))
- {
- CDOUtil.prepareDynamicEPackage(pkg);
- }
-
- // create instances
- EObject obj2_1 = EcoreUtil.create(cls2);
- obj2_1.eSet(id2, 11);
- EObject obj2_2 = EcoreUtil.create(cls2);
- obj2_2.eSet(id2, 12);
- EObject obj2_3 = EcoreUtil.create(cls2);
- obj2_3.eSet(id2, 13);
- EObject obj2_4 = EcoreUtil.create(cls2);
- obj2_4.eSet(id2, 14);
-
- EObject obj1_1 = EcoreUtil.create(cls1);
- obj1_1.eSet(id1, 1);
- EObject obj1_2 = EcoreUtil.create(cls1);
- obj1_2.eSet(id1, 2);
- EObject obj1_3 = EcoreUtil.create(cls1);
- obj1_3.eSet(id1, 3);
- EObject obj1_4 = EcoreUtil.create(cls1);
- obj1_4.eSet(id1, 4);
-
- // configure references
- ((EList<EObject>)obj1_1.eGet(ref)).add(obj2_2);
- ((EList<EObject>)obj1_1.eGet(ref)).add(obj2_3);
-
- ((EList<EObject>)obj1_2.eGet(ref)).add(obj2_2);
-
- ((EList<EObject>)obj1_3.eGet(ref)).add(obj2_1);
- ((EList<EObject>)obj1_3.eGet(ref)).add(obj2_2);
-
- // store objects
- CDOSession session1 = openSession();
- CDOTransaction transaction = session1.openTransaction();
- CDOResource resource = transaction.createResource(getResourcePath("/test1"));
- resource.getContents().addAll(Arrays.asList(obj1_1, obj1_2, obj1_3, obj1_4, obj2_1, obj2_2, obj2_3, obj2_4));
- transaction.commit();
- transaction.close();
- session1.close();
-
- // check XRefs
- CDOSession session2 = openSession();
- CDOView view = session2.openView();
-
- List<CDOObjectReference> results = view.queryXRefs(Collections.singleton(CDOUtil.getCDOObject(obj2_1)));
- assertEquals(1, results.size());
-
- {
- CDOObjectReference result = results.get(0);
- assertEquals(0, result.getSourceIndex());
- // XXX fails!
- // assertEquals(ref, result.getSourceReference());
- CDOObject sourceObject = results.get(0).getSourceObject();
- assertEquals(3, sourceObject.eGet(sourceObject.eClass().getEStructuralFeature("id")));
- }
-
- results = view.queryXRefs(Collections.singleton(CDOUtil.getCDOObject(obj2_3)));
- assertEquals(1, results.size());
- {
- CDOObjectReference result = results.get(0);
- assertEquals(1, result.getSourceIndex());
- assertEquals(ref.getName(), result.getSourceFeature().getName());
- CDOObject sourceObject = results.get(0).getSourceObject();
- assertEquals(1, sourceObject.eGet(sourceObject.eClass().getEStructuralFeature("id")));
- }
-
- results = view.queryXRefs(Collections.singleton(CDOUtil.getCDOObject(obj2_2)));
- assertEquals(3, results.size());
-
- boolean found1 = false;
- boolean found2 = false;
- boolean found3 = false;
-
- for (CDOObjectReference result : results)
- {
- assertEquals(ref.getName(), results.get(0).getSourceFeature().getName());
-
- CDOObject sourceObject = result.getSourceObject();
- Integer id = (Integer)sourceObject.eGet(sourceObject.eClass().getEStructuralFeature("id"));
- switch (id.intValue())
- {
- case 1:
- assertEquals(0, result.getSourceIndex());
- found1 = true;
- break;
- case 2:
- assertEquals(0, result.getSourceIndex());
- found2 = true;
- break;
- case 3:
- assertEquals(1, result.getSourceIndex());
- found3 = true;
- break;
- default:
- // must not happen!
- assertEquals(true, false);
- }
- }
-
- assertEquals(true, found1 && found2 && found3);
-
- view.close();
- session2.close();
- }
-
- @CleanRepositoriesBefore
- public void testXRefsToOne() throws Exception
- {
- // create model
- EPackage pkg = EMFUtil.createEPackage("xreftest", "xreftest",
- "http://cdo.emf.eclipse.org/TestModels/XRefTestToOne.ecore");
- EClass cls1 = EMFUtil.createEClass(pkg, "referencer", false, false);
- EAttribute id1 = EMFUtil.createEAttribute(cls1, "id", EcorePackage.eINSTANCE.getEInt());
-
- EClass cls2 = EMFUtil.createEClass(pkg, "referencee", false, false);
- EAttribute id2 = EMFUtil.createEAttribute(cls2, "id", EcorePackage.eINSTANCE.getEInt());
-
- EReference ref = EMFUtil.createEReference(cls1, "ref", cls2, false, false);
-
- if (!isConfig(LEGACY))
- {
- CDOUtil.prepareDynamicEPackage(pkg);
- }
-
- // create instances
- EObject obj2_1 = EcoreUtil.create(cls2);
- obj2_1.eSet(id2, 11);
- EObject obj2_2 = EcoreUtil.create(cls2);
- obj2_2.eSet(id2, 12);
- EObject obj2_3 = EcoreUtil.create(cls2);
- obj2_3.eSet(id2, 13);
- EObject obj2_4 = EcoreUtil.create(cls2);
- obj2_4.eSet(id2, 14);
-
- EObject obj1_1 = EcoreUtil.create(cls1);
- obj1_1.eSet(id1, 1);
- EObject obj1_2 = EcoreUtil.create(cls1);
- obj1_2.eSet(id1, 2);
- EObject obj1_3 = EcoreUtil.create(cls1);
- obj1_3.eSet(id1, 3);
- EObject obj1_4 = EcoreUtil.create(cls1);
- obj1_4.eSet(id1, 4);
-
- // configure references
- obj1_1.eSet(ref, obj2_2);
- obj1_2.eSet(ref, obj2_2);
- obj1_3.eSet(ref, obj2_3);
-
- // store objects
- CDOSession session1 = openSession();
- CDOTransaction transaction = session1.openTransaction();
- CDOResource resource = transaction.createResource(getResourcePath("/test1"));
- resource.getContents().addAll(Arrays.asList(obj1_1, obj1_2, obj1_3, obj1_4, obj2_1, obj2_2, obj2_3, obj2_4));
- transaction.commit();
- transaction.close();
- session1.close();
-
- // check XRefs
- CDOSession session2 = openSession();
- CDOView view = session2.openView();
-
- List<CDOObjectReference> results = view.queryXRefs(Collections.singleton(CDOUtil.getCDOObject(obj2_1)));
- assertEquals(true, results.isEmpty());
-
- results = view.queryXRefs(Collections.singleton(CDOUtil.getCDOObject(obj2_3)));
-
- assertEquals(1, results.size());
- {
- CDOObjectReference result = results.get(0);
- assertEquals(0, result.getSourceIndex());
-
- assertEquals(ref.getName(), result.getSourceFeature().getName());
- CDOObject sourceObject = results.get(0).getSourceObject();
- assertEquals(3, sourceObject.eGet(sourceObject.eClass().getEStructuralFeature("id")));
- }
-
- results = view.queryXRefs(Collections.singleton(CDOUtil.getCDOObject(obj2_2)));
- assertEquals(2, results.size());
-
- boolean found1 = false;
- boolean found2 = false;
-
- for (CDOObjectReference result : results)
- {
- assertEquals(ref.getName(), results.get(0).getSourceFeature().getName());
-
- CDOObject sourceObject = result.getSourceObject();
- Integer id = (Integer)sourceObject.eGet(sourceObject.eClass().getEStructuralFeature("id"));
- assertEquals(true, id == 1 || id == 2);
- assertEquals(0, result.getSourceIndex());
-
- if (id == 1)
- {
- found1 = true;
- }
- else if (id == 2)
- {
- found2 = true;
- }
- }
-
- assertEquals(true, found1 && found2);
-
- view.close();
- session2.close();
- }
-
- @SuppressWarnings({ "unchecked", "unused" })
- public void testSpecificReferences0() throws Exception
- {
- EClass a = EcoreFactory.eINSTANCE.createEClass();
- a.setName("A");
-
- EClass b = EcoreFactory.eINSTANCE.createEClass();
- b.setName("B");
-
- EReference aa1 = addReference(a, a, true);
- EReference aa2 = addReference(a, a, true);
- EReference aa3 = addReference(a, a, false);
- EReference aa4 = addReference(a, a, false);
- EReference ab5 = addReference(a, b, true);
- EReference ab6 = addReference(a, b, true);
- EReference ab7 = addReference(a, b, false);
- EReference ab8 = addReference(a, b, false);
-
- EReference ba1 = addReference(b, a, true);
- EReference ba2 = addReference(b, a, true);
- EReference ba3 = addReference(b, a, false);
- EReference ba4 = addReference(b, a, false);
- EReference bb5 = addReference(b, b, true);
- EReference bb6 = addReference(b, b, true);
- EReference bb7 = addReference(b, b, false);
- EReference bb8 = addReference(b, b, false);
-
- EPackage xref = EcoreFactory.eINSTANCE.createEPackage();
- xref.setName("xref");
- xref.setNsPrefix("xref");
- xref.setNsURI("http://xref");
- xref.getEClassifiers().add(a);
- xref.getEClassifiers().add(b);
-
- CDOSession session = openSession();
- session.getPackageRegistry().putEPackage(xref);
-
- CDOTransaction transaction = session.openTransaction();
- CDOResource resource = transaction.createResource(getResourcePath("/test1"));
-
- EObject a1 = addObject(resource, a);
- EObject a2 = addObject(resource, a);
- EObject a3 = addObject(resource, a);
- EObject a4 = addObject(resource, a);
-
- EObject b1 = addObject(resource, b);
- EObject b2 = addObject(resource, b);
- EObject b3 = addObject(resource, b);
- EObject b4 = addObject(resource, b);
-
- ((EList<EObject>)a1.eGet(ab5)).add(b1);
- ((EList<EObject>)a1.eGet(ab5)).add(b2);
- ((EList<EObject>)a1.eGet(ab5)).add(b3);
- ((EList<EObject>)a1.eGet(ab5)).add(b4);
-
- ((EList<EObject>)a1.eGet(ab6)).add(b1);
- ((EList<EObject>)a1.eGet(ab6)).add(b2);
- ((EList<EObject>)a1.eGet(ab6)).add(b3);
- ((EList<EObject>)a1.eGet(ab6)).add(b4);
-
- transaction.commit();
-
- /******************/
-
- List<CDOObjectReference> results = transaction.queryXRefs(CDOUtil.getCDOObject(b1));
- assertEquals(2, results.size());
-
- assertEquals(0, results.get(0).getSourceIndex());
- assertEquals(ab5, results.get(0).getSourceFeature());
- assertEquals(a1, results.get(0).getSourceObject());
- assertEquals(b1, results.get(0).getTargetObject());
-
- assertEquals(0, results.get(1).getSourceIndex());
- assertEquals(ab6, results.get(1).getSourceFeature());
- assertEquals(a1, results.get(1).getSourceObject());
- assertEquals(b1, results.get(1).getTargetObject());
- }
-
- @SuppressWarnings({ "unchecked", "unused" })
- public void testSpecificReferences1() throws Exception
- {
- EClass a = EcoreFactory.eINSTANCE.createEClass();
- a.setName("A");
-
- EClass b = EcoreFactory.eINSTANCE.createEClass();
- b.setName("B");
-
- EReference aa1 = addReference(a, a, true);
- EReference aa2 = addReference(a, a, true);
- EReference aa3 = addReference(a, a, false);
- EReference aa4 = addReference(a, a, false);
- EReference ab5 = addReference(a, b, true);
- EReference ab6 = addReference(a, b, true);
- EReference ab7 = addReference(a, b, false);
- EReference ab8 = addReference(a, b, false);
-
- EReference ba1 = addReference(b, a, true);
- EReference ba2 = addReference(b, a, true);
- EReference ba3 = addReference(b, a, false);
- EReference ba4 = addReference(b, a, false);
- EReference bb5 = addReference(b, b, true);
- EReference bb6 = addReference(b, b, true);
- EReference bb7 = addReference(b, b, false);
- EReference bb8 = addReference(b, b, false);
-
- EPackage xref = EcoreFactory.eINSTANCE.createEPackage();
- xref.setName("xref");
- xref.setNsPrefix("xref");
- xref.setNsURI("http://xref");
- xref.getEClassifiers().add(a);
- xref.getEClassifiers().add(b);
-
- CDOSession session = openSession();
- session.getPackageRegistry().putEPackage(xref);
-
- CDOTransaction transaction = session.openTransaction();
- CDOResource resource = transaction.createResource(getResourcePath("/test1"));
-
- EObject a1 = addObject(resource, a);
- EObject a2 = addObject(resource, a);
- EObject a3 = addObject(resource, a);
- EObject a4 = addObject(resource, a);
-
- EObject b1 = addObject(resource, b);
- EObject b2 = addObject(resource, b);
- EObject b3 = addObject(resource, b);
- EObject b4 = addObject(resource, b);
-
- ((EList<EObject>)a1.eGet(ab5)).add(b1);
- ((EList<EObject>)a1.eGet(ab5)).add(b2);
- ((EList<EObject>)a1.eGet(ab5)).add(b3);
- ((EList<EObject>)a1.eGet(ab5)).add(b4);
-
- ((EList<EObject>)a1.eGet(ab6)).add(b1);
- ((EList<EObject>)a1.eGet(ab6)).add(b2);
- ((EList<EObject>)a1.eGet(ab6)).add(b3);
- ((EList<EObject>)a1.eGet(ab6)).add(b4);
-
- transaction.commit();
-
- /******************/
-
- List<CDOObjectReference> results = transaction.queryXRefs(CDOUtil.getCDOObject(b1), ab5);
- assertEquals(1, results.size());
-
- assertEquals(0, results.get(0).getSourceIndex());
- assertEquals(ab5, results.get(0).getSourceFeature());
- assertEquals(a1, results.get(0).getSourceObject());
- assertEquals(b1, results.get(0).getTargetObject());
- }
-
- @SuppressWarnings({ "unchecked", "unused" })
- public void testSpecificReferences2() throws Exception
- {
- EClass a = EcoreFactory.eINSTANCE.createEClass();
- a.setName("A");
-
- EClass b = EcoreFactory.eINSTANCE.createEClass();
- b.setName("B");
-
- EReference aa1 = addReference(a, a, true);
- EReference aa2 = addReference(a, a, true);
- EReference aa3 = addReference(a, a, false);
- EReference aa4 = addReference(a, a, false);
- EReference ab5 = addReference(a, b, true);
- EReference ab6 = addReference(a, b, true);
- EReference ab7 = addReference(a, b, false);
- EReference ab8 = addReference(a, b, false);
-
- EReference ba1 = addReference(b, a, true);
- EReference ba2 = addReference(b, a, true);
- EReference ba3 = addReference(b, a, false);
- EReference ba4 = addReference(b, a, false);
- EReference bb5 = addReference(b, b, true);
- EReference bb6 = addReference(b, b, true);
- EReference bb7 = addReference(b, b, false);
- EReference bb8 = addReference(b, b, false);
-
- EPackage xref = EcoreFactory.eINSTANCE.createEPackage();
- xref.setName("xref");
- xref.setNsPrefix("xref");
- xref.setNsURI("http://xref");
- xref.getEClassifiers().add(a);
- xref.getEClassifiers().add(b);
-
- CDOSession session = openSession();
- session.getPackageRegistry().putEPackage(xref);
-
- CDOTransaction transaction = session.openTransaction();
- CDOResource resource = transaction.createResource(getResourcePath("/test1"));
-
- EObject a1 = addObject(resource, a);
- EObject a2 = addObject(resource, a);
- EObject a3 = addObject(resource, a);
- EObject a4 = addObject(resource, a);
-
- EObject b1 = addObject(resource, b);
- EObject b2 = addObject(resource, b);
- EObject b3 = addObject(resource, b);
- EObject b4 = addObject(resource, b);
-
- ((EList<EObject>)a1.eGet(ab5)).add(b1);
- ((EList<EObject>)a1.eGet(ab5)).add(b2);
- ((EList<EObject>)a1.eGet(ab5)).add(b3);
- ((EList<EObject>)a1.eGet(ab5)).add(b4);
-
- ((EList<EObject>)a1.eGet(ab6)).add(b1);
- ((EList<EObject>)a1.eGet(ab6)).add(b2);
- ((EList<EObject>)a1.eGet(ab6)).add(b3);
- ((EList<EObject>)a1.eGet(ab6)).add(b4);
-
- transaction.commit();
-
- /******************/
-
- List<CDOObjectReference> results = transaction.queryXRefs(CDOUtil.getCDOObject(b1), ab6);
- assertEquals(1, results.size());
-
- assertEquals(0, results.get(0).getSourceIndex());
- assertEquals(ab6, results.get(0).getSourceFeature());
- assertEquals(a1, results.get(0).getSourceObject());
- assertEquals(b1, results.get(0).getTargetObject());
- }
-
- private EObject addObject(CDOResource resource, EClass eClass)
- {
- EObject b8 = EcoreUtil.create(eClass);
- resource.getContents().add(b8);
- return b8;
- }
-
- private EReference addReference(EClass source, EClass target, boolean many)
- {
- EReference reference = EcoreFactory.eINSTANCE.createEReference();
- EList<EStructuralFeature> features = source.getEStructuralFeatures();
- features.add(reference);
-
- reference.setName(target.getName().toLowerCase() + features.size());
- reference.setEType(target);
- reference.setUpperBound(many ? -1 : 1);
- return reference;
- }
-}
+/*
+ * 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
+ * Stefan Winkler - additional tests
+ */
+package org.eclipse.emf.cdo.tests;
+
+import org.eclipse.emf.cdo.CDOObject;
+import org.eclipse.emf.cdo.CDOObjectReference;
+import org.eclipse.emf.cdo.common.model.EMFUtil;
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.tests.model1.PurchaseOrder;
+import org.eclipse.emf.cdo.tests.model1.Supplier;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+import org.eclipse.emf.cdo.util.CDOUtil;
+import org.eclipse.emf.cdo.view.CDOView;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.EcoreFactory;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * 300149: Support remote cross referencing with a convenient API on the client and SPI on the server for the stores to
+ * implement https://bugs.eclipse.org/bugs/show_bug.cgi?id=300149
+ *
+ * @author Eike Stepper
+ * @since 4.0
+ */
+public class XRefTest extends AbstractCDOTest
+{
+ @Override
+ protected void doSetUp() throws Exception
+ {
+ super.doSetUp();
+ skipStoreWithoutQueryXRefs();
+ }
+
+ public void testCrossReferenceMultivalueEReferenceQuery() throws Exception
+ {
+ PurchaseOrder purchaseOrder1 = getModel1Factory().createPurchaseOrder();
+ PurchaseOrder purchaseOrder2 = getModel1Factory().createPurchaseOrder();
+ PurchaseOrder purchaseOrder3 = getModel1Factory().createPurchaseOrder();
+ PurchaseOrder purchaseOrder4 = getModel1Factory().createPurchaseOrder();
+
+ Supplier supplier = getModel1Factory().createSupplier();
+ supplier.getPurchaseOrders().add(purchaseOrder1);
+ supplier.getPurchaseOrders().add(purchaseOrder2);
+ supplier.getPurchaseOrders().add(purchaseOrder3);
+ supplier.getPurchaseOrders().add(purchaseOrder4);
+
+ CDOSession session1 = openSession();
+ CDOTransaction transaction = session1.openTransaction();
+
+ CDOResource resource = transaction.createResource(getResourcePath("/test1"));
+ resource.getContents().add(supplier);
+ resource.getContents().add(purchaseOrder1);
+ resource.getContents().add(purchaseOrder2);
+ resource.getContents().add(purchaseOrder3);
+ resource.getContents().add(purchaseOrder4);
+
+ transaction.commit();
+
+ /******************/
+
+ CDOSession session2 = openSession();
+ CDOView view = session2.openView();
+
+ List<CDOObjectReference> results = view.queryXRefs(Collections.singleton(CDOUtil.getCDOObject(supplier)));
+ assertEquals(4, results.size());
+
+ for (CDOObjectReference result : results)
+ {
+ CDOObject sourceObject = result.getSourceObject();
+ assertInstanceOf(PurchaseOrder.class, CDOUtil.getEObject(sourceObject));
+ }
+ }
+
+ public void testLocallyDetachedObject() throws Exception
+ {
+ PurchaseOrder purchaseOrder1 = getModel1Factory().createPurchaseOrder();
+ PurchaseOrder purchaseOrder2 = getModel1Factory().createPurchaseOrder();
+ PurchaseOrder purchaseOrder3 = getModel1Factory().createPurchaseOrder();
+ PurchaseOrder purchaseOrder4 = getModel1Factory().createPurchaseOrder();
+
+ Supplier supplier = getModel1Factory().createSupplier();
+ supplier.getPurchaseOrders().add(purchaseOrder1);
+ supplier.getPurchaseOrders().add(purchaseOrder2);
+ supplier.getPurchaseOrders().add(purchaseOrder3);
+ supplier.getPurchaseOrders().add(purchaseOrder4);
+
+ CDOSession session1 = openSession();
+ CDOTransaction transaction1 = session1.openTransaction();
+
+ CDOResource resource = transaction1.createResource(getResourcePath("/test1"));
+ resource.getContents().add(supplier);
+ resource.getContents().add(purchaseOrder1);
+ resource.getContents().add(purchaseOrder2);
+ resource.getContents().add(purchaseOrder3);
+ resource.getContents().add(purchaseOrder4);
+
+ transaction1.commit();
+
+ /******************/
+
+ CDOSession session2 = openSession();
+ CDOTransaction transaction2 = session2.openTransaction();
+ supplier = (Supplier)transaction2.getResource(getResourcePath("/test1")).getContents().remove(0);
+
+ List<CDOObjectReference> results = transaction2.queryXRefs(Collections.singleton(CDOUtil.getCDOObject(supplier)));
+ assertEquals(4, results.size());
+
+ for (CDOObjectReference result : results)
+ {
+ CDOObject sourceObject = result.getSourceObject();
+ assertInstanceOf(PurchaseOrder.class, CDOUtil.getEObject(sourceObject));
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testXRefsToMany() throws Exception
+ {
+ // create model
+ EPackage pkg = EMFUtil.createEPackage("xreftest", "xreftest",
+ "http://cdo.emf.eclipse.org/TestModels/XRefTestToMany.ecore");
+ EClass cls1 = EMFUtil.createEClass(pkg, "referencer", false, false);
+ EAttribute id1 = EMFUtil.createEAttribute(cls1, "id", EcorePackage.eINSTANCE.getEInt());
+
+ EClass cls2 = EMFUtil.createEClass(pkg, "referencee", false, false);
+ EAttribute id2 = EMFUtil.createEAttribute(cls2, "id", EcorePackage.eINSTANCE.getEInt());
+
+ EReference ref = EMFUtil.createEReference(cls1, "ref", cls2, false, true);
+
+ if (!isConfig(LEGACY))
+ {
+ CDOUtil.prepareDynamicEPackage(pkg);
+ }
+
+ // create instances
+ EObject obj2_1 = EcoreUtil.create(cls2);
+ obj2_1.eSet(id2, 11);
+ EObject obj2_2 = EcoreUtil.create(cls2);
+ obj2_2.eSet(id2, 12);
+ EObject obj2_3 = EcoreUtil.create(cls2);
+ obj2_3.eSet(id2, 13);
+ EObject obj2_4 = EcoreUtil.create(cls2);
+ obj2_4.eSet(id2, 14);
+
+ EObject obj1_1 = EcoreUtil.create(cls1);
+ obj1_1.eSet(id1, 1);
+ EObject obj1_2 = EcoreUtil.create(cls1);
+ obj1_2.eSet(id1, 2);
+ EObject obj1_3 = EcoreUtil.create(cls1);
+ obj1_3.eSet(id1, 3);
+ EObject obj1_4 = EcoreUtil.create(cls1);
+ obj1_4.eSet(id1, 4);
+
+ // configure references
+ ((EList<EObject>)obj1_1.eGet(ref)).add(obj2_2);
+ ((EList<EObject>)obj1_1.eGet(ref)).add(obj2_3);
+
+ ((EList<EObject>)obj1_2.eGet(ref)).add(obj2_2);
+
+ ((EList<EObject>)obj1_3.eGet(ref)).add(obj2_1);
+ ((EList<EObject>)obj1_3.eGet(ref)).add(obj2_2);
+
+ // store objects
+ CDOSession session1 = openSession();
+ CDOTransaction transaction = session1.openTransaction();
+ CDOResource resource = transaction.createResource(getResourcePath("/test1"));
+ resource.getContents().addAll(Arrays.asList(obj1_1, obj1_2, obj1_3, obj1_4, obj2_1, obj2_2, obj2_3, obj2_4));
+ transaction.commit();
+ transaction.close();
+ session1.close();
+
+ // check XRefs
+ CDOSession session2 = openSession();
+ CDOView view = session2.openView();
+
+ List<CDOObjectReference> results = view.queryXRefs(Collections.singleton(CDOUtil.getCDOObject(obj2_1)));
+ assertEquals(1, results.size());
+
+ {
+ CDOObjectReference result = results.get(0);
+ assertEquals(0, result.getSourceIndex());
+ // XXX fails!
+ // assertEquals(ref, result.getSourceReference());
+ CDOObject sourceObject = results.get(0).getSourceObject();
+ assertEquals(3, sourceObject.eGet(sourceObject.eClass().getEStructuralFeature("id")));
+ }
+
+ results = view.queryXRefs(Collections.singleton(CDOUtil.getCDOObject(obj2_3)));
+ assertEquals(1, results.size());
+ {
+ CDOObjectReference result = results.get(0);
+ assertEquals(1, result.getSourceIndex());
+ assertEquals(ref.getName(), result.getSourceFeature().getName());
+ CDOObject sourceObject = results.get(0).getSourceObject();
+ assertEquals(1, sourceObject.eGet(sourceObject.eClass().getEStructuralFeature("id")));
+ }
+
+ results = view.queryXRefs(Collections.singleton(CDOUtil.getCDOObject(obj2_2)));
+ assertEquals(3, results.size());
+
+ boolean found1 = false;
+ boolean found2 = false;
+ boolean found3 = false;
+
+ for (CDOObjectReference result : results)
+ {
+ assertEquals(ref.getName(), results.get(0).getSourceFeature().getName());
+
+ CDOObject sourceObject = result.getSourceObject();
+ Integer id = (Integer)sourceObject.eGet(sourceObject.eClass().getEStructuralFeature("id"));
+ switch (id.intValue())
+ {
+ case 1:
+ assertEquals(0, result.getSourceIndex());
+ found1 = true;
+ break;
+ case 2:
+ assertEquals(0, result.getSourceIndex());
+ found2 = true;
+ break;
+ case 3:
+ assertEquals(1, result.getSourceIndex());
+ found3 = true;
+ break;
+ default:
+ // must not happen!
+ assertEquals(true, false);
+ }
+ }
+
+ assertEquals(true, found1 && found2 && found3);
+
+ view.close();
+ session2.close();
+ }
+
+ @CleanRepositoriesBefore
+ public void testXRefsToOne() throws Exception
+ {
+ // create model
+ EPackage pkg = EMFUtil.createEPackage("xreftest", "xreftest",
+ "http://cdo.emf.eclipse.org/TestModels/XRefTestToOne.ecore");
+ EClass cls1 = EMFUtil.createEClass(pkg, "referencer", false, false);
+ EAttribute id1 = EMFUtil.createEAttribute(cls1, "id", EcorePackage.eINSTANCE.getEInt());
+
+ EClass cls2 = EMFUtil.createEClass(pkg, "referencee", false, false);
+ EAttribute id2 = EMFUtil.createEAttribute(cls2, "id", EcorePackage.eINSTANCE.getEInt());
+
+ EReference ref = EMFUtil.createEReference(cls1, "ref", cls2, false, false);
+
+ if (!isConfig(LEGACY))
+ {
+ CDOUtil.prepareDynamicEPackage(pkg);
+ }
+
+ // create instances
+ EObject obj2_1 = EcoreUtil.create(cls2);
+ obj2_1.eSet(id2, 11);
+ EObject obj2_2 = EcoreUtil.create(cls2);
+ obj2_2.eSet(id2, 12);
+ EObject obj2_3 = EcoreUtil.create(cls2);
+ obj2_3.eSet(id2, 13);
+ EObject obj2_4 = EcoreUtil.create(cls2);
+ obj2_4.eSet(id2, 14);
+
+ EObject obj1_1 = EcoreUtil.create(cls1);
+ obj1_1.eSet(id1, 1);
+ EObject obj1_2 = EcoreUtil.create(cls1);
+ obj1_2.eSet(id1, 2);
+ EObject obj1_3 = EcoreUtil.create(cls1);
+ obj1_3.eSet(id1, 3);
+ EObject obj1_4 = EcoreUtil.create(cls1);
+ obj1_4.eSet(id1, 4);
+
+ // configure references
+ obj1_1.eSet(ref, obj2_2);
+ obj1_2.eSet(ref, obj2_2);
+ obj1_3.eSet(ref, obj2_3);
+
+ // store objects
+ CDOSession session1 = openSession();
+ CDOTransaction transaction = session1.openTransaction();
+ CDOResource resource = transaction.createResource(getResourcePath("/test1"));
+ resource.getContents().addAll(Arrays.asList(obj1_1, obj1_2, obj1_3, obj1_4, obj2_1, obj2_2, obj2_3, obj2_4));
+ transaction.commit();
+ transaction.close();
+ session1.close();
+
+ // check XRefs
+ CDOSession session2 = openSession();
+ CDOView view = session2.openView();
+
+ List<CDOObjectReference> results = view.queryXRefs(Collections.singleton(CDOUtil.getCDOObject(obj2_1)));
+ assertEquals(true, results.isEmpty());
+
+ results = view.queryXRefs(Collections.singleton(CDOUtil.getCDOObject(obj2_3)));
+
+ assertEquals(1, results.size());
+ {
+ CDOObjectReference result = results.get(0);
+ assertEquals(0, result.getSourceIndex());
+
+ assertEquals(ref.getName(), result.getSourceFeature().getName());
+ CDOObject sourceObject = results.get(0).getSourceObject();
+ assertEquals(3, sourceObject.eGet(sourceObject.eClass().getEStructuralFeature("id")));
+ }
+
+ results = view.queryXRefs(Collections.singleton(CDOUtil.getCDOObject(obj2_2)));
+ assertEquals(2, results.size());
+
+ boolean found1 = false;
+ boolean found2 = false;
+
+ for (CDOObjectReference result : results)
+ {
+ assertEquals(ref.getName(), results.get(0).getSourceFeature().getName());
+
+ CDOObject sourceObject = result.getSourceObject();
+ Integer id = (Integer)sourceObject.eGet(sourceObject.eClass().getEStructuralFeature("id"));
+ assertEquals(true, id == 1 || id == 2);
+ assertEquals(0, result.getSourceIndex());
+
+ if (id == 1)
+ {
+ found1 = true;
+ }
+ else if (id == 2)
+ {
+ found2 = true;
+ }
+ }
+
+ assertEquals(true, found1 && found2);
+
+ view.close();
+ session2.close();
+ }
+
+ @SuppressWarnings({ "unchecked", "unused" })
+ public void testSpecificReferences0() throws Exception
+ {
+ EClass a = EcoreFactory.eINSTANCE.createEClass();
+ a.setName("A");
+
+ EClass b = EcoreFactory.eINSTANCE.createEClass();
+ b.setName("B");
+
+ EReference aa1 = addReference(a, a, true);
+ EReference aa2 = addReference(a, a, true);
+ EReference aa3 = addReference(a, a, false);
+ EReference aa4 = addReference(a, a, false);
+ EReference ab5 = addReference(a, b, true);
+ EReference ab6 = addReference(a, b, true);
+ EReference ab7 = addReference(a, b, false);
+ EReference ab8 = addReference(a, b, false);
+
+ EReference ba1 = addReference(b, a, true);
+ EReference ba2 = addReference(b, a, true);
+ EReference ba3 = addReference(b, a, false);
+ EReference ba4 = addReference(b, a, false);
+ EReference bb5 = addReference(b, b, true);
+ EReference bb6 = addReference(b, b, true);
+ EReference bb7 = addReference(b, b, false);
+ EReference bb8 = addReference(b, b, false);
+
+ EPackage xref = EcoreFactory.eINSTANCE.createEPackage();
+ xref.setName("xref");
+ xref.setNsPrefix("xref");
+ xref.setNsURI("http://xref");
+ xref.getEClassifiers().add(a);
+ xref.getEClassifiers().add(b);
+
+ CDOSession session = openSession();
+ session.getPackageRegistry().putEPackage(xref);
+
+ CDOTransaction transaction = session.openTransaction();
+ CDOResource resource = transaction.createResource(getResourcePath("/test1"));
+
+ EObject a1 = addObject(resource, a);
+ EObject a2 = addObject(resource, a);
+ EObject a3 = addObject(resource, a);
+ EObject a4 = addObject(resource, a);
+
+ EObject b1 = addObject(resource, b);
+ EObject b2 = addObject(resource, b);
+ EObject b3 = addObject(resource, b);
+ EObject b4 = addObject(resource, b);
+
+ ((EList<EObject>)a1.eGet(ab5)).add(b1);
+ ((EList<EObject>)a1.eGet(ab5)).add(b2);
+ ((EList<EObject>)a1.eGet(ab5)).add(b3);
+ ((EList<EObject>)a1.eGet(ab5)).add(b4);
+
+ ((EList<EObject>)a1.eGet(ab6)).add(b1);
+ ((EList<EObject>)a1.eGet(ab6)).add(b2);
+ ((EList<EObject>)a1.eGet(ab6)).add(b3);
+ ((EList<EObject>)a1.eGet(ab6)).add(b4);
+
+ transaction.commit();
+
+ /******************/
+
+ List<CDOObjectReference> results = transaction.queryXRefs(CDOUtil.getCDOObject(b1));
+ assertEquals(2, results.size());
+
+ assertEquals(0, results.get(0).getSourceIndex());
+ assertEquals(ab5, results.get(0).getSourceFeature());
+ assertEquals(a1, results.get(0).getSourceObject());
+ assertEquals(b1, results.get(0).getTargetObject());
+
+ assertEquals(0, results.get(1).getSourceIndex());
+ assertEquals(ab6, results.get(1).getSourceFeature());
+ assertEquals(a1, results.get(1).getSourceObject());
+ assertEquals(b1, results.get(1).getTargetObject());
+ }
+
+ @SuppressWarnings({ "unchecked", "unused" })
+ public void testSpecificReferences1() throws Exception
+ {
+ EClass a = EcoreFactory.eINSTANCE.createEClass();
+ a.setName("A");
+
+ EClass b = EcoreFactory.eINSTANCE.createEClass();
+ b.setName("B");
+
+ EReference aa1 = addReference(a, a, true);
+ EReference aa2 = addReference(a, a, true);
+ EReference aa3 = addReference(a, a, false);
+ EReference aa4 = addReference(a, a, false);
+ EReference ab5 = addReference(a, b, true);
+ EReference ab6 = addReference(a, b, true);
+ EReference ab7 = addReference(a, b, false);
+ EReference ab8 = addReference(a, b, false);
+
+ EReference ba1 = addReference(b, a, true);
+ EReference ba2 = addReference(b, a, true);
+ EReference ba3 = addReference(b, a, false);
+ EReference ba4 = addReference(b, a, false);
+ EReference bb5 = addReference(b, b, true);
+ EReference bb6 = addReference(b, b, true);
+ EReference bb7 = addReference(b, b, false);
+ EReference bb8 = addReference(b, b, false);
+
+ EPackage xref = EcoreFactory.eINSTANCE.createEPackage();
+ xref.setName("xref");
+ xref.setNsPrefix("xref");
+ xref.setNsURI("http://xref");
+ xref.getEClassifiers().add(a);
+ xref.getEClassifiers().add(b);
+
+ CDOSession session = openSession();
+ session.getPackageRegistry().putEPackage(xref);
+
+ CDOTransaction transaction = session.openTransaction();
+ CDOResource resource = transaction.createResource(getResourcePath("/test1"));
+
+ EObject a1 = addObject(resource, a);
+ EObject a2 = addObject(resource, a);
+ EObject a3 = addObject(resource, a);
+ EObject a4 = addObject(resource, a);
+
+ EObject b1 = addObject(resource, b);
+ EObject b2 = addObject(resource, b);
+ EObject b3 = addObject(resource, b);
+ EObject b4 = addObject(resource, b);
+
+ ((EList<EObject>)a1.eGet(ab5)).add(b1);
+ ((EList<EObject>)a1.eGet(ab5)).add(b2);
+ ((EList<EObject>)a1.eGet(ab5)).add(b3);
+ ((EList<EObject>)a1.eGet(ab5)).add(b4);
+
+ ((EList<EObject>)a1.eGet(ab6)).add(b1);
+ ((EList<EObject>)a1.eGet(ab6)).add(b2);
+ ((EList<EObject>)a1.eGet(ab6)).add(b3);
+ ((EList<EObject>)a1.eGet(ab6)).add(b4);
+
+ transaction.commit();
+
+ /******************/
+
+ List<CDOObjectReference> results = transaction.queryXRefs(CDOUtil.getCDOObject(b1), ab5);
+ assertEquals(1, results.size());
+
+ assertEquals(0, results.get(0).getSourceIndex());
+ assertEquals(ab5, results.get(0).getSourceFeature());
+ assertEquals(a1, results.get(0).getSourceObject());
+ assertEquals(b1, results.get(0).getTargetObject());
+ }
+
+ @SuppressWarnings({ "unchecked", "unused" })
+ public void testSpecificReferences2() throws Exception
+ {
+ EClass a = EcoreFactory.eINSTANCE.createEClass();
+ a.setName("A");
+
+ EClass b = EcoreFactory.eINSTANCE.createEClass();
+ b.setName("B");
+
+ EReference aa1 = addReference(a, a, true);
+ EReference aa2 = addReference(a, a, true);
+ EReference aa3 = addReference(a, a, false);
+ EReference aa4 = addReference(a, a, false);
+ EReference ab5 = addReference(a, b, true);
+ EReference ab6 = addReference(a, b, true);
+ EReference ab7 = addReference(a, b, false);
+ EReference ab8 = addReference(a, b, false);
+
+ EReference ba1 = addReference(b, a, true);
+ EReference ba2 = addReference(b, a, true);
+ EReference ba3 = addReference(b, a, false);
+ EReference ba4 = addReference(b, a, false);
+ EReference bb5 = addReference(b, b, true);
+ EReference bb6 = addReference(b, b, true);
+ EReference bb7 = addReference(b, b, false);
+ EReference bb8 = addReference(b, b, false);
+
+ EPackage xref = EcoreFactory.eINSTANCE.createEPackage();
+ xref.setName("xref");
+ xref.setNsPrefix("xref");
+ xref.setNsURI("http://xref");
+ xref.getEClassifiers().add(a);
+ xref.getEClassifiers().add(b);
+
+ CDOSession session = openSession();
+ session.getPackageRegistry().putEPackage(xref);
+
+ CDOTransaction transaction = session.openTransaction();
+ CDOResource resource = transaction.createResource(getResourcePath("/test1"));
+
+ EObject a1 = addObject(resource, a);
+ EObject a2 = addObject(resource, a);
+ EObject a3 = addObject(resource, a);
+ EObject a4 = addObject(resource, a);
+
+ EObject b1 = addObject(resource, b);
+ EObject b2 = addObject(resource, b);
+ EObject b3 = addObject(resource, b);
+ EObject b4 = addObject(resource, b);
+
+ ((EList<EObject>)a1.eGet(ab5)).add(b1);
+ ((EList<EObject>)a1.eGet(ab5)).add(b2);
+ ((EList<EObject>)a1.eGet(ab5)).add(b3);
+ ((EList<EObject>)a1.eGet(ab5)).add(b4);
+
+ ((EList<EObject>)a1.eGet(ab6)).add(b1);
+ ((EList<EObject>)a1.eGet(ab6)).add(b2);
+ ((EList<EObject>)a1.eGet(ab6)).add(b3);
+ ((EList<EObject>)a1.eGet(ab6)).add(b4);
+
+ transaction.commit();
+
+ /******************/
+
+ List<CDOObjectReference> results = transaction.queryXRefs(CDOUtil.getCDOObject(b1), ab6);
+ assertEquals(1, results.size());
+
+ assertEquals(0, results.get(0).getSourceIndex());
+ assertEquals(ab6, results.get(0).getSourceFeature());
+ assertEquals(a1, results.get(0).getSourceObject());
+ assertEquals(b1, results.get(0).getTargetObject());
+ }
+
+ private EObject addObject(CDOResource resource, EClass eClass)
+ {
+ EObject b8 = EcoreUtil.create(eClass);
+ resource.getContents().add(b8);
+ return b8;
+ }
+
+ private EReference addReference(EClass source, EClass target, boolean many)
+ {
+ EReference reference = EcoreFactory.eINSTANCE.createEReference();
+ EList<EStructuralFeature> features = source.getEStructuralFeatures();
+ features.add(reference);
+
+ reference.setName(target.getName().toLowerCase() + features.size());
+ reference.setEType(target);
+ reference.setUpperBound(many ? -1 : 1);
+ return reference;
+ }
+}

Back to the top