blob: 4c25352fcc53f7dfbd2e3fb36a4e1459ef7c9ab8 [file] [log] [blame]
/*
* Copyright (c) 2008-2013, 2016 Eike Stepper (Loehne, Germany) and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Eike Stepper - initial API and implementation
*/
package org.eclipse.emf.cdo.tests;
import org.eclipse.emf.cdo.common.revision.CDOElementProxy;
import org.eclipse.emf.cdo.common.revision.CDORevisionData;
import org.eclipse.emf.cdo.eresource.CDOResource;
import org.eclipse.emf.cdo.eresource.EresourcePackage;
import org.eclipse.emf.cdo.session.CDOSession;
import org.eclipse.emf.cdo.tests.config.IRepositoryConfig;
import org.eclipse.emf.cdo.tests.model1.Company;
import org.eclipse.emf.cdo.transaction.CDOTransaction;
import org.eclipse.emf.cdo.util.CDOUtil;
import org.eclipse.emf.cdo.view.CDOView;
import org.eclipse.net4j.util.lifecycle.ILifecycle;
import org.eclipse.net4j.util.lifecycle.LifecycleEventAdapter;
import org.eclipse.net4j.util.lifecycle.LifecycleUtil;
import org.eclipse.net4j.util.ref.ReferenceType;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
/**
* @author Eike Stepper
*/
public class ViewTest extends AbstractCDOTest
{
public void testDeactivateWithSession() throws Exception
{
CDOSession session = openSession();
assertEquals(true, LifecycleUtil.isActive(session));
assertEquals(false, session.isClosed());
CDOView view = session.openView();
assertEquals(true, LifecycleUtil.isActive(view));
assertEquals(false, view.isClosed());
session.close();
assertEquals(false, LifecycleUtil.isActive(session));
assertEquals(true, session.isClosed());
assertEquals(false, LifecycleUtil.isActive(view));
assertEquals(true, view.isClosed());
}
public void testHasResource() throws Exception
{
{
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
transaction.createResource(getResourcePath("/test1"));
transaction.commit();
session.close();
}
CDOSession session = openSession();
CDOView view = session.openView();
assertEquals(true, view.hasResource(getResourcePath("/test1")));
assertEquals(false, view.hasResource(getResourcePath("/test2")));
session.close();
}
public void testIsObjectRegisteredWithNull() throws Exception
{
CDOSession session = openSession();
CDOView view = session.openView();
assertEquals(false, view.isObjectRegistered(null));
session.close();
}
public void testGetOrCreateResource() throws Exception
{
String id;
{
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource(getResourcePath("/test1"));
transaction.commit();
id = resource.cdoID().toString();
session.close();
}
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
assertEquals(id, transaction.getOrCreateResource(getResourcePath("/test1")).cdoID().toString());
assertNotSame(id, transaction.getOrCreateResource(getResourcePath("/test2")).cdoID().toString());
session.close();
}
@Requires(IRepositoryConfig.CAPABILITY_CHUNKING)
public void testUniqueResourceContents() throws Exception
{
{
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource(getResourcePath("/test1"));
EList<EObject> contents = resource.getContents();
for (int i = 0; i < 100; i++)
{
Company company = getModel1Factory().createCompany();
company.setName("Company " + i);
contents.add(company);
}
transaction.commit();
session.close();
}
CDOSession session = openSession();
session.options().setCollectionLoadingPolicy(CDOUtil.createCollectionLoadingPolicy(2, 2));
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.getResource(getResourcePath("/test1"));
EList<EObject> contents = resource.getContents();
for (int i = 100; i < 110; i++)
{
Company company = getModel1Factory().createCompany();
company.setName("Company " + i);
contents.add(company);
}
CDORevisionData revision = resource.cdoRevision().data();
EStructuralFeature contentsFeature = EresourcePackage.eINSTANCE.getCDOResource_Contents();
assertEquals(true, revision.get(contentsFeature, 99) instanceof CDOElementProxy);
assertEquals(false, revision.get(contentsFeature, 100) instanceof CDOElementProxy);
session.close();
}
@Requires(IRepositoryConfig.CAPABILITY_CHUNKING)
public void testNonUniqueResourceContents() throws Exception
{
{
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource(getResourcePath("/test1"));
EList<EObject> contents = resource.getContents();
for (int i = 0; i < 100; i++)
{
Company company = getModel1Factory().createCompany();
company.setName("Company " + i);
contents.add(company);
}
transaction.commit();
session.close();
}
CDOSession session = openSession();
session.options().setCollectionLoadingPolicy(CDOUtil.createCollectionLoadingPolicy(2, 2));
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.getResource(getResourcePath("/test1"));
EList<EObject> contents = resource.getContents();
for (int i = 100; i < 110; i++)
{
Company company = getModel1Factory().createCompany();
company.setName("Company " + i);
contents.add(company);
}
CDORevisionData revision = resource.cdoRevision().data();
EStructuralFeature contentsFeature = EresourcePackage.eINSTANCE.getCDOResource_Contents();
assertEquals(false, revision.get(contentsFeature, 0) instanceof CDOElementProxy);
assertEquals(false, revision.get(contentsFeature, 1) instanceof CDOElementProxy);
assertEquals(true, revision.get(contentsFeature, 2) instanceof CDOElementProxy);
assertEquals(true, revision.get(contentsFeature, 99) instanceof CDOElementProxy);
assertEquals(false, revision.get(contentsFeature, 100) instanceof CDOElementProxy);
session.close();
}
public void testExternalResourceSet() throws Exception
{
{
ResourceSet resourceSet = new ResourceSetImpl();
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction(resourceSet);
transaction.createResource(getResourcePath("/test1"));
transaction.commit();
session.close();
}
CDOSession session = openSession();
CDOView view = session.openView();
assertEquals(true, view.hasResource(getResourcePath("/test1")));
assertEquals(false, view.hasResource(getResourcePath("/test2")));
session.close();
}
public void testContextify() throws Exception
{
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource(getResourcePath("/test1"));
transaction.commit();
CDOView view = session.openView();
CDOResource resource2 = view.getObject(resource);
assertEquals(getResourcePath("/test1"), resource2.getPath());
session.close();
}
public void testContextifyDifferentRepository() throws Exception
{
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource(getResourcePath("/test1"));
transaction.commit();
getRepository("repo2");
CDOSession session2 = openSession("repo2");
CDOView view = session2.openView();
try
{
view.getObject(resource);
fail("IllegalArgumentException expected");
}
catch (IllegalArgumentException success)
{
}
finally
{
session.close();
session2.close();
}
}
public void testContextifySameRepository() throws Exception
{
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource(getResourcePath("/test1"));
transaction.commit();
CDOSession session2 = openSession();
CDOView view = session2.openView();
CDOResource object = view.getObject(resource);
assertNotSame(resource, object);
assertEquals(resource.cdoID(), object.cdoID());
session.close();
session2.close();
}
public void testCacheReferences() throws Exception
{
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
transaction.createResource(getResourcePath("/my/test1"));
transaction.commit();
transaction.createResource(getResourcePath("/my/test2"));
transaction.createResource(getResourcePath("/my/test3"));
transaction.createResource(getResourcePath("/my/test4"));
transaction.createResource(getResourcePath("/my/test5"));
boolean done;
done = transaction.options().setCacheReferenceType(ReferenceType.SOFT);
assertEquals(false, done);
done = transaction.options().setCacheReferenceType(null);
assertEquals(false, done);
done = transaction.options().setCacheReferenceType(ReferenceType.STRONG);
assertEquals(true, done);
done = transaction.options().setCacheReferenceType(ReferenceType.SOFT);
assertEquals(true, done);
done = transaction.options().setCacheReferenceType(ReferenceType.WEAK);
assertEquals(true, done);
done = transaction.options().setCacheReferenceType(null);
assertEquals(true, done);
session.close();
}
public void testViewNotifiesDeactivation()
{
CDOSession session = openSession();
CDOView view = session.openView();
final boolean[] deactivated = { false };
view.addListener(new LifecycleEventAdapter()
{
@Override
protected void onDeactivated(ILifecycle lifecycle)
{
deactivated[0] = true;
}
});
view.close();
assertEquals(true, deactivated[0]);
session.close();
}
}