blob: 79f0a6aaf0fc07b7e0cf608402e21b520b1a3cf4 [file] [log] [blame]
/*
* Copyright (c) 2008-2012, 2014 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.eresource.CDOResource;
import org.eclipse.emf.cdo.session.CDOSession;
import org.eclipse.emf.cdo.tests.model4.ContainedElementNoOpposite;
import org.eclipse.emf.cdo.tests.model4.GenRefMultiContained;
import org.eclipse.emf.cdo.tests.model4.GenRefMultiNonContained;
import org.eclipse.emf.cdo.tests.model4.GenRefSingleContained;
import org.eclipse.emf.cdo.tests.model4.GenRefSingleNonContained;
import org.eclipse.emf.cdo.tests.model4.ImplContainedElementNPL;
import org.eclipse.emf.cdo.tests.model4.ImplMultiRefContainedElement;
import org.eclipse.emf.cdo.tests.model4.ImplMultiRefContainer;
import org.eclipse.emf.cdo.tests.model4.ImplMultiRefContainerNPL;
import org.eclipse.emf.cdo.tests.model4.ImplMultiRefNonContainedElement;
import org.eclipse.emf.cdo.tests.model4.ImplMultiRefNonContainer;
import org.eclipse.emf.cdo.tests.model4.ImplMultiRefNonContainerNPL;
import org.eclipse.emf.cdo.tests.model4.ImplSingleRefContainedElement;
import org.eclipse.emf.cdo.tests.model4.ImplSingleRefContainer;
import org.eclipse.emf.cdo.tests.model4.ImplSingleRefContainerNPL;
import org.eclipse.emf.cdo.tests.model4.ImplSingleRefNonContainedElement;
import org.eclipse.emf.cdo.tests.model4.ImplSingleRefNonContainer;
import org.eclipse.emf.cdo.tests.model4.ImplSingleRefNonContainerNPL;
import org.eclipse.emf.cdo.tests.model4.MultiContainedElement;
import org.eclipse.emf.cdo.tests.model4.MultiNonContainedElement;
import org.eclipse.emf.cdo.tests.model4.RefMultiContained;
import org.eclipse.emf.cdo.tests.model4.RefMultiContainedNPL;
import org.eclipse.emf.cdo.tests.model4.RefMultiNonContained;
import org.eclipse.emf.cdo.tests.model4.RefMultiNonContainedNPL;
import org.eclipse.emf.cdo.tests.model4.RefSingleContained;
import org.eclipse.emf.cdo.tests.model4.RefSingleContainedNPL;
import org.eclipse.emf.cdo.tests.model4.RefSingleNonContained;
import org.eclipse.emf.cdo.tests.model4.RefSingleNonContainedNPL;
import org.eclipse.emf.cdo.tests.model4.SingleContainedElement;
import org.eclipse.emf.cdo.tests.model4.SingleNonContainedElement;
import org.eclipse.emf.cdo.tests.model4.model4Factory;
import org.eclipse.emf.cdo.tests.model4interfaces.IContainedElementNoParentLink;
import org.eclipse.emf.cdo.tests.model4interfaces.IMultiRefContainedElement;
import org.eclipse.emf.cdo.tests.model4interfaces.IMultiRefNonContainedElement;
import org.eclipse.emf.cdo.tests.model4interfaces.INamedElement;
import org.eclipse.emf.cdo.tests.model4interfaces.ISingleRefContainedElement;
import org.eclipse.emf.cdo.tests.model4interfaces.ISingleRefNonContainedElement;
import org.eclipse.emf.cdo.transaction.CDOTransaction;
import org.eclipse.emf.cdo.util.CDOUtil;
import org.eclipse.emf.cdo.util.CommitException;
import org.eclipse.net4j.util.WrappedException;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EObject;
import java.util.ArrayList;
import java.util.List;
/**
* @author Eike Stepper
*/
public class ComplexTest extends AbstractCDOTest
{
private static long uniqueCounter = System.currentTimeMillis();
private model4Factory factory;
private CDOResource resource1;
private CDOResource resource2;
private CDOTransaction transaction;
private CDOSession session;
@Override
protected void doSetUp() throws Exception
{
super.doSetUp();
String path1 = getResourcePath("/resources/folder1/res" + uniqueCounter);
String path2 = getResourcePath("/resources/folder2/res" + uniqueCounter);
++uniqueCounter;
init(path1, path2);
commit();
}
@Override
protected void doTearDown() throws Exception
{
factory = null;
session = null;
transaction = null;
resource1 = null;
resource2 = null;
super.doTearDown();
}
private void purgeCaches()
{
// according to Eike's comment at Bug 249681, client caches are
// ignored, if a new session is opened.
// server caches are wiped by the clearCache call.
String path1 = resource1.getPath();
String path2 = resource2.getPath();
transaction.close();
session.close();
clearCache(getRepository().getRevisionManager());
init(path1, path2);
}
private void init(String path1, String path2)
{
factory = getModel4Factory();
session = openSession();
session.getPackageRegistry().putEPackage(getModel4InterfacesPackage());
session.getPackageRegistry().putEPackage(getModel4Package());
transaction = session.openTransaction();
resource1 = transaction.getOrCreateResource(path1);
resource2 = transaction.getOrCreateResource(path2);
}
private void commit()
{
try
{
transaction.commit();
}
catch (CommitException ex)
{
throw WrappedException.wrap(ex);
}
}
public void testPlainSingleNonContainedBidirectional()
{
RefSingleNonContained container = factory.createRefSingleNonContained();
SingleNonContainedElement element0 = factory.createSingleNonContainedElement();
element0.setName("PlainSingleNonContainedBidirectional-Element-0");
resource1.getContents().add(container);
resource1.getContents().add(element0);
container.setElement(element0);
commit();
purgeCaches();
assertEquals(2, resource1.getContents().size());
container = (RefSingleNonContained)resource1.getContents().get(0);
element0 = (SingleNonContainedElement)resource1.getContents().get(1);
assertEquals(element0, container.getElement());
assertEquals(container, element0.getParent());
assertEquals("PlainSingleNonContainedBidirectional-Element-0", element0.getName());
assertEquals(resource1, container.eResource());
assertEquals(resource1, element0.eResource());
assertContent(resource1, container);
assertContent(resource1, element0);
}
public void testPlainSingleContainedBidirectional()
{
RefSingleContained container = factory.createRefSingleContained();
SingleContainedElement element0 = factory.createSingleContainedElement();
element0.setName("PlainSingleContainedBidirectional-Element-0");
resource1.getContents().add(container);
container.setElement(element0);
commit();
purgeCaches();
assertEquals(1, resource1.getContents().size());
container = (RefSingleContained)CDOUtil.getEObject(resource1.getContents().get(0));
element0 = container.getElement();
assertEquals(container, element0.getParent());
assertEquals("PlainSingleContainedBidirectional-Element-0", element0.getName());
assertEquals(resource1, container.eResource());
assertEquals(resource1, element0.eResource());
assertContent(resource1, container);
assertContent(container, element0);
}
public void testPlainMultiNonContainedBidirectional()
{
RefMultiNonContained container = factory.createRefMultiNonContained();
MultiNonContainedElement element0 = factory.createMultiNonContainedElement();
element0.setName("PlainMultiNonContainedBidirectional-Element-0");
resource1.getContents().add(container);
resource1.getContents().add(element0);
MultiNonContainedElement element1 = factory.createMultiNonContainedElement();
element1.setName("PlainMultiNonContainedBidirectional-Element-1");
resource1.getContents().add(element1);
container.getElements().add(element0);
container.getElements().add(element1);
commit();
purgeCaches();
assertEquals(3, resource1.getContents().size());
container = (RefMultiNonContained)CDOUtil.getEObject(resource1.getContents().get(0));
element0 = (MultiNonContainedElement)resource1.getContents().get(1);
element1 = (MultiNonContainedElement)resource1.getContents().get(2);
assertEquals(element0, container.getElements().get(0));
assertEquals(element1, container.getElements().get(1));
assertEquals(container, element0.getParent());
assertEquals(container, element1.getParent());
assertEquals("PlainMultiNonContainedBidirectional-Element-0", element0.getName());
assertEquals("PlainMultiNonContainedBidirectional-Element-1", element1.getName());
assertEquals(resource1, container.eResource());
assertEquals(resource1, element0.eResource());
assertEquals(resource1, element1.eResource());
assertContent(resource1, container);
assertContent(resource1, element0);
assertContent(resource1, element1);
}
public void testPlainMultiContainedBidirectional()
{
RefMultiContained container = factory.createRefMultiContained();
MultiContainedElement element0 = factory.createMultiContainedElement();
element0.setName("PlainMultiContainedBidirectional-Element-0");
resource1.getContents().add(container);
MultiContainedElement element1 = factory.createMultiContainedElement();
element1.setName("PlainMultiContainedBidirectional-Element-1");
container.getElements().add(element0);
container.getElements().add(element1);
commit();
purgeCaches();
assertEquals(1, resource1.getContents().size());
container = (RefMultiContained)resource1.getContents().get(0);
assertEquals(2, container.getElements().size());
element0 = container.getElements().get(0);
element1 = container.getElements().get(1);
assertEquals(container, element0.getParent());
assertEquals(container, element1.getParent());
assertEquals("PlainMultiContainedBidirectional-Element-0", element0.getName());
assertEquals("PlainMultiContainedBidirectional-Element-1", element1.getName());
assertEquals(resource1, container.eResource());
assertEquals(resource1, element0.eResource());
assertEquals(resource1, element1.eResource());
assertContent(resource1, container);
assertContent(container, element0);
assertContent(container, element1);
}
public void testPlainSingleNonContainedUnidirectional()
{
RefSingleNonContainedNPL container = factory.createRefSingleNonContainedNPL();
ContainedElementNoOpposite element0 = factory.createContainedElementNoOpposite();
element0.setName("PlainSingleNonContainedUnidirectional-Element-0");
resource1.getContents().add(container);
resource1.getContents().add(element0);
container.setElement(element0);
commit();
purgeCaches();
assertEquals(2, resource1.getContents().size());
container = (RefSingleNonContainedNPL)resource1.getContents().get(0);
element0 = (ContainedElementNoOpposite)resource1.getContents().get(1);
assertEquals(element0, container.getElement());
assertEquals("PlainSingleNonContainedUnidirectional-Element-0", element0.getName());
assertEquals(resource1, container.eResource());
assertEquals(resource1, element0.eResource());
assertContent(resource1, container);
assertContent(resource1, element0);
}
public void testPlainSingleContainedUnidirectional()
{
RefSingleContainedNPL container = factory.createRefSingleContainedNPL();
ContainedElementNoOpposite element0 = factory.createContainedElementNoOpposite();
element0.setName("PlainSingleContainedUnidirectional-Element-0");
resource1.getContents().add(container);
container.setElement(element0);
commit();
purgeCaches();
assertEquals(1, resource1.getContents().size());
container = (RefSingleContainedNPL)resource1.getContents().get(0);
element0 = container.getElement();
assertEquals("PlainSingleContainedUnidirectional-Element-0", element0.getName());
assertEquals(resource1, container.eResource());
assertEquals(resource1, element0.eResource());
assertContent(resource1, container);
assertContent(container, element0);
}
public void testPlainMultiNonContainedUnidirectional()
{
RefMultiNonContainedNPL container = factory.createRefMultiNonContainedNPL();
ContainedElementNoOpposite element0 = factory.createContainedElementNoOpposite();
element0.setName("PlainMultiNonContainedUnidirectional-Element-0");
resource1.getContents().add(container);
resource1.getContents().add(element0);
ContainedElementNoOpposite element1 = factory.createContainedElementNoOpposite();
element1.setName("PlainMultiNonContainedUnidirectional-Element-1");
resource1.getContents().add(element1);
container.getElements().add(element0);
container.getElements().add(element1);
commit();
purgeCaches();
assertEquals(3, resource1.getContents().size());
container = (RefMultiNonContainedNPL)resource1.getContents().get(0);
element0 = (ContainedElementNoOpposite)resource1.getContents().get(1);
element1 = (ContainedElementNoOpposite)resource1.getContents().get(2);
assertEquals(element0, container.getElements().get(0));
assertEquals(element1, container.getElements().get(1));
assertEquals("PlainMultiNonContainedUnidirectional-Element-0", element0.getName());
assertEquals("PlainMultiNonContainedUnidirectional-Element-1", element1.getName());
assertEquals(resource1, container.eResource());
assertEquals(resource1, element0.eResource());
assertEquals(resource1, element1.eResource());
assertContent(resource1, container);
assertContent(resource1, element0);
assertContent(resource1, element1);
}
public void testPlainMultiContainedUnidirectional()
{
RefMultiContainedNPL container = factory.createRefMultiContainedNPL();
ContainedElementNoOpposite element0 = factory.createContainedElementNoOpposite();
element0.setName("PlainMultiContainedUnidirectional-Element-0");
resource1.getContents().add(container);
ContainedElementNoOpposite element1 = factory.createContainedElementNoOpposite();
element1.setName("PlainMultiContainedUnidirectional-Element-1");
container.getElements().add(element0);
container.getElements().add(element1);
commit();
purgeCaches();
assertEquals(1, resource1.getContents().size());
container = (RefMultiContainedNPL)resource1.getContents().get(0);
assertEquals(2, container.getElements().size());
element0 = container.getElements().get(0);
element1 = container.getElements().get(1);
assertEquals("PlainMultiContainedUnidirectional-Element-0", element0.getName());
assertEquals("PlainMultiContainedUnidirectional-Element-1", element1.getName());
assertEquals(resource1, container.eResource());
assertEquals(resource1, element0.eResource());
assertEquals(resource1, element1.eResource());
assertContent(resource1, container);
assertContent(container, element0);
assertContent(container, element1);
}
public void testGenRefSingleNonContainedUnidirectional()
{
GenRefSingleNonContained container = factory.createGenRefSingleNonContained();
ImplContainedElementNPL element0 = factory.createImplContainedElementNPL();
element0.setName("GenRefSingleNonContainedUnidirectional-Element-0");
resource1.getContents().add(container);
resource1.getContents().add(element0);
container.setElement(element0);
commit();
purgeCaches();
assertEquals(2, resource1.getContents().size());
container = (GenRefSingleNonContained)resource1.getContents().get(0);
element0 = (ImplContainedElementNPL)resource1.getContents().get(1);
assertEquals(element0, container.getElement());
assertEquals("GenRefSingleNonContainedUnidirectional-Element-0", element0.getName());
assertEquals(resource1, container.eResource());
assertEquals(resource1, element0.eResource());
assertContent(resource1, container);
assertContent(resource1, element0);
}
public void testGenRefSingleContainedUnidirectional()
{
GenRefSingleContained container = factory.createGenRefSingleContained();
ImplContainedElementNPL element0 = factory.createImplContainedElementNPL();
element0.setName("GenRefSingleContainedUnidirectional-Element-0");
resource1.getContents().add(container);
container.setElement(element0);
resource1.getContents().add(element0);
commit();
purgeCaches();
assertEquals(2, resource1.getContents().size());
container = (GenRefSingleContained)resource1.getContents().get(0);
element0 = (ImplContainedElementNPL)container.getElement();
// assertEquals("GenRefSingleContainedUnidirectional-Element-0", element0.getName());
assertEquals(resource1, container.eResource());
// assertEquals(resource1, element0.eResource());
assertContent(resource1, container);
// assertContent(container, element0);
}
public void testGenRefMultiNonContainedUnidirectional()
{
GenRefMultiNonContained container = factory.createGenRefMultiNonContained();
ImplContainedElementNPL element0 = factory.createImplContainedElementNPL();
element0.setName("GenRefMultiNonContainedUnidirectional-Element-0");
resource1.getContents().add(container);
resource1.getContents().add(element0);
ImplContainedElementNPL element1 = factory.createImplContainedElementNPL();
element1.setName("GenRefMultiNonContainedUnidirectional-Element-1");
resource1.getContents().add(element1);
container.getElements().add(element0);
container.getElements().add(element1);
commit();
purgeCaches();
assertEquals(3, resource1.getContents().size());
container = (GenRefMultiNonContained)resource1.getContents().get(0);
element0 = (ImplContainedElementNPL)resource1.getContents().get(1);
element1 = (ImplContainedElementNPL)resource1.getContents().get(2);
assertEquals(element0, container.getElements().get(0));
assertEquals(element1, container.getElements().get(1));
assertEquals("GenRefMultiNonContainedUnidirectional-Element-0", element0.getName());
assertEquals("GenRefMultiNonContainedUnidirectional-Element-1", element1.getName());
assertEquals(resource1, container.eResource());
assertEquals(resource1, element0.eResource());
assertEquals(resource1, element1.eResource());
assertContent(resource1, container);
assertContent(resource1, element0);
assertContent(resource1, element1);
}
public void testGenRefMultiContainedUnidirectional()
{
GenRefMultiContained container = factory.createGenRefMultiContained();
ImplContainedElementNPL element0 = factory.createImplContainedElementNPL();
element0.setName("GenRefMultiContainedUnidirectional-Element-0");
resource1.getContents().add(container);
ImplContainedElementNPL element1 = factory.createImplContainedElementNPL();
element1.setName("GenRefMultiContainedUnidirectional-Element-1");
container.getElements().add(element0);
container.getElements().add(element1);
commit();
purgeCaches();
assertEquals(1, resource1.getContents().size());
container = (GenRefMultiContained)resource1.getContents().get(0);
assertEquals(2, container.getElements().size());
element0 = (ImplContainedElementNPL)container.getElements().get(0);
element1 = (ImplContainedElementNPL)container.getElements().get(1);
assertEquals("GenRefMultiContainedUnidirectional-Element-0", element0.getName());
assertEquals("GenRefMultiContainedUnidirectional-Element-1", element1.getName());
assertEquals(resource1, container.eResource());
assertEquals(resource1, element0.eResource());
assertEquals(resource1, element1.eResource());
assertContent(resource1, container);
assertContent(container, element0);
assertContent(container, element1);
}
public void testIfcimplSingleNonContainedBidirectional()
{
ImplSingleRefNonContainer container = factory.createImplSingleRefNonContainer();
ImplSingleRefNonContainedElement element0 = factory.createImplSingleRefNonContainedElement();
element0.setName("IfcimplSingleNonContainedBidirectional-Element-0");
resource1.getContents().add(container);
resource1.getContents().add(element0);
container.setElement(element0);
commit();
purgeCaches();
assertEquals(2, resource1.getContents().size());
container = (ImplSingleRefNonContainer)CDOUtil.getEObject(resource1.getContents().get(0));
ISingleRefNonContainedElement element0_ = (ISingleRefNonContainedElement)resource1.getContents().get(1);
assertEquals(element0_, container.getElement());
assertEquals(container, element0_.getParent());
assertEquals("IfcimplSingleNonContainedBidirectional-Element-0",
((ImplSingleRefNonContainedElement)element0_).getName());
assertEquals(resource1, container.eResource());
assertEquals(resource1, element0_.eResource());
assertContent(resource1, container);
assertContent(resource1, element0_);
}
public void testIfcimplSingleContainedBidirectional()
{
ImplSingleRefContainer container = factory.createImplSingleRefContainer();
ImplSingleRefContainedElement element0 = factory.createImplSingleRefContainedElement();
element0.setName("IfcimplSingleContainedBidirectional-Element-0");
resource1.getContents().add(container);
container.setElement(element0);
commit();
purgeCaches();
assertEquals(1, resource1.getContents().size());
container = (ImplSingleRefContainer)CDOUtil.getEObject(resource1.getContents().get(0));
ISingleRefContainedElement element0_ = container.getElement();
assertEquals(container, element0_.getParent());
assertEquals("IfcimplSingleContainedBidirectional-Element-0", ((ImplSingleRefContainedElement)element0_).getName());
assertEquals(resource1, container.eResource());
assertEquals(resource1, element0_.eResource());
assertContent(resource1, container);
assertContent(container, element0_);
}
public void testIfcimplMultiNonContainedBidirectional()
{
ImplMultiRefNonContainer container = factory.createImplMultiRefNonContainer();
ImplMultiRefNonContainedElement element0 = factory.createImplMultiRefNonContainedElement();
element0.setName("IfcimplMultiNonContainedBidirectional-Element-0");
resource1.getContents().add(container);
resource1.getContents().add(element0);
ImplMultiRefNonContainedElement element1 = factory.createImplMultiRefNonContainedElement();
element1.setName("IfcimplMultiNonContainedBidirectional-Element-1");
resource1.getContents().add(element1);
container.getElements().add(element0);
container.getElements().add(element1);
commit();
purgeCaches();
assertEquals(3, resource1.getContents().size());
container = (ImplMultiRefNonContainer)resource1.getContents().get(0);
IMultiRefNonContainedElement element0_ = (IMultiRefNonContainedElement)resource1.getContents().get(1);
IMultiRefNonContainedElement element1_ = (IMultiRefNonContainedElement)resource1.getContents().get(2);
assertEquals(element0_, container.getElements().get(0));
assertEquals(element1_, container.getElements().get(1));
assertEquals(container, element0_.getParent());
assertEquals(container, element1_.getParent());
assertEquals("IfcimplMultiNonContainedBidirectional-Element-0",
((ImplMultiRefNonContainedElement)element0_).getName());
assertEquals("IfcimplMultiNonContainedBidirectional-Element-1",
((ImplMultiRefNonContainedElement)element1_).getName());
assertEquals(resource1, container.eResource());
assertEquals(resource1, element0_.eResource());
assertEquals(resource1, element1_.eResource());
assertContent(resource1, container);
assertContent(resource1, element0_);
assertContent(resource1, element1_);
}
public void testIfcimplMultiContainedBidirectional()
{
ImplMultiRefContainer container = factory.createImplMultiRefContainer();
ImplMultiRefContainedElement element0 = factory.createImplMultiRefContainedElement();
element0.setName("IfcimplMultiContainedBidirectional-Element-0");
resource1.getContents().add(container);
ImplMultiRefContainedElement element1 = factory.createImplMultiRefContainedElement();
element1.setName("IfcimplMultiContainedBidirectional-Element-1");
container.getElements().add(element0);
container.getElements().add(element1);
commit();
purgeCaches();
assertEquals(1, resource1.getContents().size());
container = (ImplMultiRefContainer)resource1.getContents().get(0);
assertEquals(2, container.getElements().size());
IMultiRefContainedElement element0_ = container.getElements().get(0);
IMultiRefContainedElement element1_ = container.getElements().get(1);
assertEquals(container, element0_.getParent());
assertEquals(container, element1_.getParent());
assertEquals("IfcimplMultiContainedBidirectional-Element-0", ((ImplMultiRefContainedElement)element0_).getName());
assertEquals("IfcimplMultiContainedBidirectional-Element-1", ((ImplMultiRefContainedElement)element1_).getName());
assertEquals(resource1, container.eResource());
assertEquals(resource1, element0_.eResource());
assertEquals(resource1, element1_.eResource());
assertContent(resource1, container);
assertContent(container, element0_);
assertContent(container, element1_);
}
public void testIfcimplSingleNonContainedUnidirectional()
{
ImplSingleRefNonContainerNPL container = factory.createImplSingleRefNonContainerNPL();
ImplContainedElementNPL element0 = factory.createImplContainedElementNPL();
element0.setName("IfcimplSingleNonContainedUnidirectional-Element-0");
resource1.getContents().add(container);
resource1.getContents().add(element0);
container.setElement(element0);
commit();
purgeCaches();
assertEquals(2, resource1.getContents().size());
container = (ImplSingleRefNonContainerNPL)resource1.getContents().get(0);
IContainedElementNoParentLink element0_ = (IContainedElementNoParentLink)resource1.getContents().get(1);
assertEquals(element0_, container.getElement());
assertEquals("IfcimplSingleNonContainedUnidirectional-Element-0", ((INamedElement)element0_).getName());
assertEquals(resource1, container.eResource());
assertEquals(resource1, element0_.eResource());
assertContent(resource1, container);
assertContent(resource1, element0_);
}
public void testIfcimplSingleContainedUnidirectional()
{
ImplSingleRefContainerNPL container = factory.createImplSingleRefContainerNPL();
ImplContainedElementNPL element0 = factory.createImplContainedElementNPL();
element0.setName("IfcimplSingleContainedUnidirectional-Element-0");
resource1.getContents().add(container);
container.setElement(element0);
commit();
purgeCaches();
assertEquals(1, resource1.getContents().size());
container = (ImplSingleRefContainerNPL)resource1.getContents().get(0);
IContainedElementNoParentLink element0_ = container.getElement();
assertEquals("IfcimplSingleContainedUnidirectional-Element-0", ((INamedElement)element0_).getName());
assertEquals(resource1, container.eResource());
assertEquals(resource1, element0_.eResource());
assertContent(resource1, container);
assertContent(container, element0_);
}
public void testIfcimplMultiNonContainedUnidirectional()
{
ImplMultiRefNonContainerNPL container = factory.createImplMultiRefNonContainerNPL();
ImplContainedElementNPL element0 = factory.createImplContainedElementNPL();
element0.setName("IfcimplMultiNonContainedUnidirectional-Element-0");
resource1.getContents().add(container);
resource1.getContents().add(element0);
ImplContainedElementNPL element1 = factory.createImplContainedElementNPL();
element1.setName("IfcimplMultiNonContainedUnidirectional-Element-1");
resource1.getContents().add(element1);
container.getElements().add(element0);
container.getElements().add(element1);
commit();
purgeCaches();
assertEquals(3, resource1.getContents().size());
container = (ImplMultiRefNonContainerNPL)resource1.getContents().get(0);
IContainedElementNoParentLink element0_ = (IContainedElementNoParentLink)resource1.getContents().get(1);
IContainedElementNoParentLink element1_ = (IContainedElementNoParentLink)resource1.getContents().get(2);
assertEquals(element0_, container.getElements().get(0));
assertEquals(element1_, container.getElements().get(1));
assertEquals("IfcimplMultiNonContainedUnidirectional-Element-0", ((INamedElement)element0_).getName());
assertEquals("IfcimplMultiNonContainedUnidirectional-Element-1", ((INamedElement)element1_).getName());
assertEquals(resource1, container.eResource());
assertEquals(resource1, element0_.eResource());
assertEquals(resource1, element1_.eResource());
assertContent(resource1, container);
assertContent(resource1, element0_);
assertContent(resource1, element1_);
}
public void testIfcimplMultiContainedUnidirectional()
{
ImplMultiRefContainerNPL container = factory.createImplMultiRefContainerNPL();
ImplContainedElementNPL element0 = factory.createImplContainedElementNPL();
element0.setName("IfcimplMultiContainedUnidirectional-Element-0");
resource1.getContents().add(container);
ImplContainedElementNPL element1 = factory.createImplContainedElementNPL();
element1.setName("IfcimplMultiContainedUnidirectional-Element-1");
container.getElements().add(element0);
container.getElements().add(element1);
commit();
purgeCaches();
assertEquals(1, resource1.getContents().size());
container = (ImplMultiRefContainerNPL)resource1.getContents().get(0);
assertEquals(2, container.getElements().size());
IContainedElementNoParentLink element0_ = container.getElements().get(0);
IContainedElementNoParentLink element1_ = container.getElements().get(1);
assertEquals("IfcimplMultiContainedUnidirectional-Element-0", ((INamedElement)element0_).getName());
assertEquals("IfcimplMultiContainedUnidirectional-Element-1", ((INamedElement)element1_).getName());
assertEquals(resource1, container.eResource());
assertEquals(resource1, element0_.eResource());
assertEquals(resource1, element1_.eResource());
assertContent(resource1, container);
assertContent(container, element0_);
assertContent(container, element1_);
}
public void testCrossResourcePlainSingleNonContainedBidirectional()
{
RefSingleNonContained container = factory.createRefSingleNonContained();
SingleNonContainedElement element0 = factory.createSingleNonContainedElement();
element0.setName("CrossResourcePlainSingleNonContainedBidirectional-Element-0");
resource1.getContents().add(container);
resource2.getContents().add(element0);
container.setElement(element0);
commit();
purgeCaches();
assertEquals(1, resource1.getContents().size());
assertEquals(1, resource2.getContents().size());
container = (RefSingleNonContained)CDOUtil.getEObject(resource1.getContents().get(0));
element0 = (SingleNonContainedElement)resource2.getContents().get(0);
assertEquals(element0, container.getElement());
assertEquals(container, element0.getParent());
assertEquals("CrossResourcePlainSingleNonContainedBidirectional-Element-0", element0.getName());
assertEquals(resource1, container.eResource());
assertEquals(resource2, element0.eResource());
assertContent(resource1, container);
assertContent(resource2, element0);
}
public void testCrossResourcePlainMultiNonContainedBidirectional()
{
RefMultiNonContained container = factory.createRefMultiNonContained();
MultiNonContainedElement element0 = factory.createMultiNonContainedElement();
element0.setName("CrossResourcePlainMultiNonContainedBidirectional-Element-0");
resource1.getContents().add(container);
resource2.getContents().add(element0);
MultiNonContainedElement element1 = factory.createMultiNonContainedElement();
element1.setName("CrossResourcePlainMultiNonContainedBidirectional-Element-1");
resource2.getContents().add(element1);
container.getElements().add(element0);
container.getElements().add(element1);
commit();
purgeCaches();
assertEquals(1, resource1.getContents().size());
assertEquals(2, resource2.getContents().size());
container = (RefMultiNonContained)resource1.getContents().get(0);
element0 = (MultiNonContainedElement)resource2.getContents().get(0);
element1 = (MultiNonContainedElement)resource2.getContents().get(1);
assertEquals(element0, container.getElements().get(0));
assertEquals(element1, container.getElements().get(1));
assertEquals(container, element0.getParent());
assertEquals(container, element1.getParent());
assertEquals("CrossResourcePlainMultiNonContainedBidirectional-Element-0", element0.getName());
assertEquals("CrossResourcePlainMultiNonContainedBidirectional-Element-1", element1.getName());
assertEquals(resource1, container.eResource());
assertEquals(resource2, element0.eResource());
assertEquals(resource2, element1.eResource());
assertContent(resource1, container);
assertContent(resource2, element0);
assertContent(resource2, element1);
}
public void testCrossResourcePlainSingleNonContainedUnidirectional()
{
RefSingleNonContainedNPL container = factory.createRefSingleNonContainedNPL();
ContainedElementNoOpposite element0 = factory.createContainedElementNoOpposite();
element0.setName("CrossResourcePlainSingleNonContainedUnidirectional-Element-0");
resource1.getContents().add(container);
resource2.getContents().add(element0);
container.setElement(element0);
commit();
purgeCaches();
assertEquals(1, resource1.getContents().size());
assertEquals(1, resource2.getContents().size());
container = (RefSingleNonContainedNPL)resource1.getContents().get(0);
element0 = (ContainedElementNoOpposite)resource2.getContents().get(0);
assertEquals(element0, container.getElement());
assertEquals("CrossResourcePlainSingleNonContainedUnidirectional-Element-0", element0.getName());
assertEquals(resource1, container.eResource());
assertEquals(resource2, element0.eResource());
assertContent(resource1, container);
assertContent(resource2, element0);
}
public void testCrossResourcePlainMultiNonContainedUnidirectional()
{
RefMultiNonContainedNPL container = factory.createRefMultiNonContainedNPL();
ContainedElementNoOpposite element0 = factory.createContainedElementNoOpposite();
element0.setName("CrossResourcePlainMultiNonContainedUnidirectional-Element-0");
resource1.getContents().add(container);
resource2.getContents().add(element0);
ContainedElementNoOpposite element1 = factory.createContainedElementNoOpposite();
element1.setName("CrossResourcePlainMultiNonContainedUnidirectional-Element-1");
resource2.getContents().add(element1);
container.getElements().add(element0);
container.getElements().add(element1);
commit();
purgeCaches();
assertEquals(1, resource1.getContents().size());
assertEquals(2, resource2.getContents().size());
container = (RefMultiNonContainedNPL)resource1.getContents().get(0);
element0 = (ContainedElementNoOpposite)resource2.getContents().get(0);
element1 = (ContainedElementNoOpposite)resource2.getContents().get(1);
assertEquals(element0, container.getElements().get(0));
assertEquals(element1, container.getElements().get(1));
assertEquals("CrossResourcePlainMultiNonContainedUnidirectional-Element-0", element0.getName());
assertEquals("CrossResourcePlainMultiNonContainedUnidirectional-Element-1", element1.getName());
assertEquals(resource1, container.eResource());
assertEquals(resource2, element0.eResource());
assertEquals(resource2, element1.eResource());
assertContent(resource1, container);
assertContent(resource2, element0);
assertContent(resource2, element1);
}
public void testCrossResourceGenRefSingleNonContainedUnidirectional()
{
GenRefSingleNonContained container = factory.createGenRefSingleNonContained();
ImplContainedElementNPL element0 = factory.createImplContainedElementNPL();
element0.setName("CrossResourceGenRefSingleNonContainedUnidirectional-Element-0");
resource1.getContents().add(container);
resource2.getContents().add(element0);
container.setElement(element0);
commit();
purgeCaches();
assertEquals(1, resource1.getContents().size());
assertEquals(1, resource2.getContents().size());
container = (GenRefSingleNonContained)resource1.getContents().get(0);
element0 = (ImplContainedElementNPL)resource2.getContents().get(0);
assertEquals(element0, container.getElement());
assertEquals("CrossResourceGenRefSingleNonContainedUnidirectional-Element-0", element0.getName());
assertEquals(resource1, container.eResource());
assertEquals(resource2, element0.eResource());
assertContent(resource1, container);
assertContent(resource2, element0);
}
public void testCrossResourceGenRefMultiNonContainedUnidirectional()
{
GenRefMultiNonContained container = factory.createGenRefMultiNonContained();
ImplContainedElementNPL element0 = factory.createImplContainedElementNPL();
element0.setName("CrossResourceGenRefMultiNonContainedUnidirectional-Element-0");
resource1.getContents().add(container);
resource2.getContents().add(element0);
ImplContainedElementNPL element1 = factory.createImplContainedElementNPL();
element1.setName("CrossResourceGenRefMultiNonContainedUnidirectional-Element-1");
resource2.getContents().add(element1);
container.getElements().add(element0);
container.getElements().add(element1);
commit();
purgeCaches();
assertEquals(1, resource1.getContents().size());
assertEquals(2, resource2.getContents().size());
container = (GenRefMultiNonContained)resource1.getContents().get(0);
element0 = (ImplContainedElementNPL)resource2.getContents().get(0);
element1 = (ImplContainedElementNPL)resource2.getContents().get(1);
assertEquals(element0, container.getElements().get(0));
assertEquals(element1, container.getElements().get(1));
assertEquals("CrossResourceGenRefMultiNonContainedUnidirectional-Element-0", element0.getName());
assertEquals("CrossResourceGenRefMultiNonContainedUnidirectional-Element-1", element1.getName());
assertEquals(resource1, container.eResource());
assertEquals(resource2, element0.eResource());
assertEquals(resource2, element1.eResource());
assertContent(resource1, container);
assertContent(resource2, element0);
assertContent(resource2, element1);
}
public void testCrossResourceIfcimplSingleNonContainedBidirectional()
{
ImplSingleRefNonContainer container = factory.createImplSingleRefNonContainer();
ImplSingleRefNonContainedElement element0 = factory.createImplSingleRefNonContainedElement();
element0.setName("CrossResourceIfcimplSingleNonContainedBidirectional-Element-0");
resource1.getContents().add(container);
resource2.getContents().add(element0);
container.setElement(element0);
commit();
purgeCaches();
assertEquals(1, resource1.getContents().size());
assertEquals(1, resource2.getContents().size());
container = (ImplSingleRefNonContainer)CDOUtil.getEObject(resource1.getContents().get(0));
ISingleRefNonContainedElement element0_ = (ISingleRefNonContainedElement)resource2.getContents().get(0);
assertEquals(element0_, container.getElement());
assertEquals(container, element0_.getParent());
assertEquals("CrossResourceIfcimplSingleNonContainedBidirectional-Element-0",
((ImplSingleRefNonContainedElement)element0_).getName());
assertEquals(resource1, container.eResource());
assertEquals(resource2, element0_.eResource());
assertContent(resource1, container);
assertContent(resource2, element0_);
}
public void testCrossResourceIfcimplMultiNonContainedBidirectional()
{
ImplMultiRefNonContainer container = factory.createImplMultiRefNonContainer();
ImplMultiRefNonContainedElement element0 = factory.createImplMultiRefNonContainedElement();
element0.setName("CrossResourceIfcimplMultiNonContainedBidirectional-Element-0");
resource1.getContents().add(container);
resource2.getContents().add(element0);
ImplMultiRefNonContainedElement element1 = factory.createImplMultiRefNonContainedElement();
element1.setName("CrossResourceIfcimplMultiNonContainedBidirectional-Element-1");
resource2.getContents().add(element1);
container.getElements().add(element0);
container.getElements().add(element1);
commit();
purgeCaches();
assertEquals(1, resource1.getContents().size());
assertEquals(2, resource2.getContents().size());
container = (ImplMultiRefNonContainer)resource1.getContents().get(0);
IMultiRefNonContainedElement element0_ = (IMultiRefNonContainedElement)resource2.getContents().get(0);
IMultiRefNonContainedElement element1_ = (IMultiRefNonContainedElement)resource2.getContents().get(1);
assertEquals(element0_, container.getElements().get(0));
assertEquals(element1_, container.getElements().get(1));
assertEquals(container, element0_.getParent());
assertEquals(container, element1_.getParent());
assertEquals("CrossResourceIfcimplMultiNonContainedBidirectional-Element-0",
((ImplMultiRefNonContainedElement)element0_).getName());
assertEquals("CrossResourceIfcimplMultiNonContainedBidirectional-Element-1",
((ImplMultiRefNonContainedElement)element1_).getName());
assertEquals(resource1, container.eResource());
assertEquals(resource2, element0_.eResource());
assertEquals(resource2, element1_.eResource());
assertContent(resource1, container);
assertContent(resource2, element0_);
assertContent(resource2, element1_);
}
public void testCrossResourceIfcimplSingleNonContainedUnidirectional()
{
ImplSingleRefNonContainerNPL container = factory.createImplSingleRefNonContainerNPL();
ImplContainedElementNPL element0 = factory.createImplContainedElementNPL();
element0.setName("CrossResourceIfcimplSingleNonContainedUnidirectional-Element-0");
resource1.getContents().add(container);
resource2.getContents().add(element0);
container.setElement(element0);
commit();
purgeCaches();
assertEquals(1, resource1.getContents().size());
assertEquals(1, resource1.getContents().size());
container = (ImplSingleRefNonContainerNPL)resource1.getContents().get(0);
IContainedElementNoParentLink element0_ = (IContainedElementNoParentLink)resource2.getContents().get(0);
assertEquals(element0_, container.getElement());
assertEquals("CrossResourceIfcimplSingleNonContainedUnidirectional-Element-0", ((INamedElement)element0_).getName());
assertEquals(resource1, container.eResource());
assertEquals(resource2, element0_.eResource());
assertContent(resource1, container);
assertContent(resource2, element0_);
}
public void testCrossResourceIfcimplMultiNonContainedUnidirectional()
{
ImplMultiRefNonContainerNPL container = factory.createImplMultiRefNonContainerNPL();
ImplContainedElementNPL element0 = factory.createImplContainedElementNPL();
element0.setName("CrossResourceIfcimplMultiNonContainedUnidirectional-Element-0");
resource1.getContents().add(container);
resource2.getContents().add(element0);
ImplContainedElementNPL element1 = factory.createImplContainedElementNPL();
element1.setName("CrossResourceIfcimplMultiNonContainedUnidirectional-Element-1");
resource2.getContents().add(element1);
container.getElements().add(element0);
container.getElements().add(element1);
commit();
purgeCaches();
assertEquals(1, resource1.getContents().size());
assertEquals(2, resource2.getContents().size());
container = (ImplMultiRefNonContainerNPL)resource1.getContents().get(0);
IContainedElementNoParentLink element0_ = (IContainedElementNoParentLink)resource2.getContents().get(0);
IContainedElementNoParentLink element1_ = (IContainedElementNoParentLink)resource2.getContents().get(1);
assertEquals(element0_, container.getElements().get(0));
assertEquals(element1_, container.getElements().get(1));
assertEquals("CrossResourceIfcimplMultiNonContainedUnidirectional-Element-0", ((INamedElement)element0_).getName());
assertEquals("CrossResourceIfcimplMultiNonContainedUnidirectional-Element-1", ((INamedElement)element1_).getName());
assertEquals(resource1, container.eResource());
assertEquals(resource2, element0_.eResource());
assertEquals(resource2, element1_.eResource());
assertContent(resource1, container);
assertContent(resource2, element0_);
assertContent(resource2, element1_);
}
public void testMultipleTransactions3() throws CommitException
{
CDOTransaction transaction1 = session.openTransaction();
String resource1path = getResourcePath("/resources/3/res" + uniqueCounter);
CDOResource resource1 = transaction1.createResource(resource1path);
transaction1.commit();
CDOTransaction transaction2 = session.openTransaction();
String resource2path = getResourcePath("/resources/4/res" + uniqueCounter++);
CDOResource resource2 = transaction2.createResource(resource2path);
transaction2.commit();
MultiContainedElement element0 = factory.createMultiContainedElement();
element0.setName("MultipleTransactions-Element-0");
MultiContainedElement element1 = factory.createMultiContainedElement();
element1.setName("MultipleTransactions-Element-0");
MultiContainedElement element2 = factory.createMultiContainedElement();
element2.setName("MultipleTransactions-Element-0");
MultiContainedElement element3 = factory.createMultiContainedElement();
element3.setName("MultipleTransactions-Element-0");
resource1.getContents().add(element0);
resource1.getContents().add(element1);
resource1.getContents().add(element2);
resource1.getContents().add(element3);
transaction1.commit();
RefMultiContained container = factory.createRefMultiContained();
resource2.getContents().add(container);
transaction2.commit();
CDOTransaction transaction3 = session.openTransaction();
EList<EObject> elements = transaction3.getResource(resource1path).getContents();
EList<EObject> containers = transaction3.getResource(resource2path).getContents();
List<EObject> elementToRemove = new ArrayList<EObject>();
for (EObject o : elements)
{
elementToRemove.add(o);
}
RefMultiContained container_work = (RefMultiContained)containers.get(0);
for (EObject o : elementToRemove)
{
MultiContainedElement element_work = (MultiContainedElement)o;
container_work.getElements().add(element_work);
transaction3.commit();
}
}
public void testMultipleTransactions2() throws CommitException
{
CDOTransaction transaction1 = session.openTransaction();
String resource1path = getResourcePath("/resources/3/res" + uniqueCounter);
CDOResource resource1 = transaction1.createResource(resource1path);
transaction1.commit();
CDOTransaction transaction2 = session.openTransaction();
String resource2path = getResourcePath("/resources/4/res" + uniqueCounter++);
CDOResource resource2 = transaction2.createResource(resource2path);
transaction2.commit();
MultiContainedElement element0 = factory.createMultiContainedElement();
element0.setName("MultipleTransactions-Element-0");
MultiContainedElement element1 = factory.createMultiContainedElement();
element1.setName("MultipleTransactions-Element-0");
MultiContainedElement element2 = factory.createMultiContainedElement();
element2.setName("MultipleTransactions-Element-0");
MultiContainedElement element3 = factory.createMultiContainedElement();
element3.setName("MultipleTransactions-Element-0");
resource1.getContents().add(element0);
resource1.getContents().add(element1);
resource1.getContents().add(element2);
resource1.getContents().add(element3);
transaction1.commit();
RefMultiContained container = factory.createRefMultiContained();
resource2.getContents().add(container);
transaction2.commit();
CDOResource resource1FromTx2 = transaction2.getResource(resource1path);
EList<EObject> elements = resource1FromTx2.getContents();
List<EObject> elementToRemove = new ArrayList<EObject>();
for (EObject o : elements)
{
elementToRemove.add(o);
}
for (EObject o : elementToRemove)
{
MultiContainedElement element_work = (MultiContainedElement)o;
assertEquals(resource1FromTx2, CDOUtil.getCDOObject(element_work).cdoDirectResource());
assertEquals(resource1FromTx2, element_work.eResource());
container.getElements().add(element_work);
assertEquals(null, CDOUtil.getCDOObject(element_work).cdoDirectResource());
assertEquals(resource2, element_work.eResource());
transaction2.commit();
}
}
public void testMigrateContainmentSingle()
{
SingleContainedElement element = factory.createSingleContainedElement();
element.setName("MigrateContainmentSingle-Element-0");
RefSingleContained container1 = factory.createRefSingleContained();
container1.setElement(element);
resource1.getContents().add(container1);
RefSingleContained container2 = factory.createRefSingleContained();
resource2.getContents().add(container2);
commit();
container2.setElement(element);
commit();
assertEquals(container2, element.getParent());
assertEquals(container2, element.eContainer());
assertEquals(null, CDOUtil.getCDOObject(element).cdoDirectResource());
assertEquals(null, container1.getElement());
assertEquals(resource1, CDOUtil.getCDOObject(container1).cdoDirectResource());
assertEquals(element, container2.getElement());
assertEquals(resource2, CDOUtil.getCDOObject(container2).cdoDirectResource());
}
public void testMigrateContainmentMulti()
{
MultiContainedElement elementA = factory.createMultiContainedElement();
elementA.setName("MigrateContainmentMulti-Element-A");
MultiContainedElement elementB = factory.createMultiContainedElement();
elementB.setName("MigrateContainmentMulti-Element-B");
RefMultiContained container1 = factory.createRefMultiContained();
container1.getElements().add(elementA);
container1.getElements().add(elementB);
resource1.getContents().add(container1);
RefMultiContained container2 = factory.createRefMultiContained();
resource2.getContents().add(container2);
commit();
container2.getElements().add(container1.getElements().get(0));
commit();
assertEquals(container2, elementA.getParent());
assertEquals(container2, elementA.eContainer());
assertEquals(null, CDOUtil.getCDOObject(elementA).cdoDirectResource());
assertEquals(resource2, elementA.eResource());
assertEquals(container1, elementB.getParent());
assertEquals(container1, elementB.eContainer());
assertEquals(null, CDOUtil.getCDOObject(elementB).cdoDirectResource());
assertEquals(resource1, elementB.eResource());
assertEquals(resource1, CDOUtil.getCDOObject(container1).cdoDirectResource());
assertEquals(1, container1.getElements().size());
assertEquals(elementB, container1.getElements().get(0));
assertEquals(resource2, CDOUtil.getCDOObject(container2).cdoDirectResource());
assertEquals(1, container2.getElements().size());
assertEquals(elementA, container2.getElements().get(0));
}
}