blob: e08903a806e9534e73b1ec59b9ce9f2f8f2070fb [file] [log] [blame]
/*
* Copyright (c) 2007-2015 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.CDOState;
import org.eclipse.emf.cdo.common.CDOCommonRepository.IDGenerationLocation;
import org.eclipse.emf.cdo.common.commit.CDOCommitInfo;
import org.eclipse.emf.cdo.eresource.CDOResource;
import org.eclipse.emf.cdo.session.CDOSession;
import org.eclipse.emf.cdo.tests.config.impl.RepositoryConfig;
import org.eclipse.emf.cdo.tests.model1.Category;
import org.eclipse.emf.cdo.tests.model1.OrderAddress;
import org.eclipse.emf.cdo.tests.model1.OrderDetail;
import org.eclipse.emf.cdo.tests.model1.Product1;
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.CDOURIUtil;
import org.eclipse.emf.cdo.util.CDOUtil;
import org.eclipse.emf.cdo.view.CDOView;
import org.eclipse.emf.internal.cdo.session.SessionUtil;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EcoreFactory;
import org.eclipse.emf.ecore.InternalEObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.xmi.impl.XMLResourceImpl;
import java.util.Date;
/**
* @author Eike Stepper
*/
public class InitialTest extends AbstractCDOTest
{
public void testTransientObject() throws Exception
{
final Date date = new Date();
Supplier supplier = getModel1Factory().createSupplier();
assertTransient(supplier);
supplier.setName("Stepper");
assertTransient(supplier);
assertEquals("Stepper", supplier.getName());
assertTransient(supplier);
PurchaseOrder purchaseOrder = getModel1Factory().createPurchaseOrder();
assertTransient(purchaseOrder);
purchaseOrder.setDate(date);
assertTransient(purchaseOrder);
assertEquals(date, purchaseOrder.getDate());
assertTransient(purchaseOrder);
purchaseOrder.setSupplier(supplier);
assertTransient(supplier);
assertTransient(purchaseOrder);
assertEquals(supplier, purchaseOrder.getSupplier());
assertTransient(supplier);
assertTransient(purchaseOrder);
}
public void testTransientResource() throws Exception
{
final URI uri = URI.createURI("cdo://repo1/test1");
ResourceSet resourceSet = new ResourceSetImpl();
SessionUtil.prepareResourceSet(resourceSet);
CDOResource resource = (CDOResource)resourceSet.createResource(uri);
assertTransient(resource);
Supplier supplier = getModel1Factory().createSupplier();
assertTransient(supplier);
assertEquals(null, supplier.eContainer());
EList<EObject> contents = resource.getContents();
assertNotNull(contents);
assertEquals(true, contents.isEmpty());
assertEquals(0, contents.size());
assertTransient(resource);
contents.add(supplier);
assertTransient(resource);
assertTransient(supplier);
assertContent(resource, supplier);
assertEquals(true, resourceSet.getResources().contains(resource));
resource.delete(null);
assertEquals(false, resourceSet.getResources().contains(resource));
assertTransient(supplier);
}
public void testOpenSession() throws Exception
{
CDOSession session = openSession();
assertNotNull(session);
assertEquals(false, session.isClosed());
assertEquals(RepositoryConfig.REPOSITORY_NAME, session.getRepositoryInfo().getName());
assertEquals(RepositoryConfig.REPOSITORY_NAME, session.getRepositoryInfo().getUUID());
}
public void testStartTransaction() throws Exception
{
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
assertNotNull(transaction);
assertEquals(session, transaction.getSession());
}
public void testCreateResource() throws Exception
{
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource(getResourcePath("/test1"));
assertNew(resource, transaction);
URI uri = URI.createURI("cdo://" + session.getRepositoryInfo().getUUID() + getResourcePath("/test1"));
assertEquals(uri, resource.getURI());
ResourceSet expected = transaction.getResourceSet();
ResourceSet actual = resource.getResourceSet();
assertEquals(expected, actual);
}
public void testAttachObject() throws Exception
{
Supplier supplier = getModel1Factory().createSupplier();
supplier.setName("Stepper");
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource(getResourcePath("/test1"));
EList<EObject> contents = resource.getContents();
contents.add(supplier);
assertNew(supplier, transaction);
assertEquals(transaction, CDOUtil.getCDOObject(supplier).cdoView());
assertEquals(resource, CDOUtil.getCDOObject(supplier).cdoDirectResource());
assertEquals(0, CDOUtil.getCDOObject(supplier).cdoRevision().getVersion());
assertEquals(resource, supplier.eResource());
assertEquals(null, supplier.eContainer());
}
public void testCommitNew() throws Exception
{
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource(getResourcePath("/test1"));
Supplier supplier = getModel1Factory().createSupplier();
supplier.setName("Stepper");
resource.getContents().add(supplier);
assertEquals("Stepper",
CDOUtil.getCDOObject(supplier).cdoRevision().data().get(getModel1Package().getAddress_Name(), 0));
CDOCommitInfo commit = transaction.commit();
assertEquals(CDOState.CLEAN, resource.cdoState());
assertEquals(CDOState.CLEAN, CDOUtil.getCDOObject(supplier).cdoState());
assertEquals(1, CDOUtil.getCDOObject(supplier).cdoRevision().getVersion());
assertCreatedTime(resource, commit.getTimeStamp());
assertCreatedTime(supplier, commit.getTimeStamp());
}
public void testReadResourceClean() throws Exception
{
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource(getResourcePath("/test1"));
Supplier supplier = getModel1Factory().createSupplier();
supplier.setName("Stepper");
resource.getContents().add(supplier);
long commitTime = transaction.commit().getTimeStamp();
EList<EObject> contents = resource.getContents();
Supplier s = (Supplier)contents.get(0);
assertEquals(1, CDOUtil.getCDOObject(s).cdoRevision().getVersion());
assertEquals(supplier, s);
assertCreatedTime(s, commitTime);
}
public void testReadObjectClean() throws Exception
{
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource(getResourcePath("/test1"));
Supplier supplier = getModel1Factory().createSupplier();
supplier.setName("Stepper");
resource.getContents().add(supplier);
transaction.commit();
Supplier s = (Supplier)resource.getContents().get(0);
assertEquals(1, CDOUtil.getCDOObject(s).cdoRevision().getVersion());
assertEquals("Stepper", s.getName());
}
public void testWriteClean() throws Exception
{
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource(getResourcePath("/test1"));
Supplier supplier = getModel1Factory().createSupplier();
supplier.setName("Stepper");
resource.getContents().add(supplier);
transaction.commit();
Supplier s = (Supplier)resource.getContents().get(0);
s.setName("Eike");
assertEquals("Eike", s.getName());
assertEquals(CDOState.DIRTY, CDOUtil.getCDOObject(supplier).cdoState());
assertEquals(CDOState.CLEAN, resource.cdoState());
}
public void testCommitDirty() throws Exception
{
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource(getResourcePath("/test1"));
Supplier supplier = getModel1Factory().createSupplier();
supplier.setName("Stepper");
resource.getContents().add(supplier);
CDOCommitInfo commit = transaction.commit();
long commitTime1 = commit.getTimeStamp();
assertCreatedTime(supplier, commitTime1);
supplier.setName("Eike");
long commitTime2 = transaction.commit().getTimeStamp();
assertEquals(true, commitTime1 < commitTime2);
assertEquals(CDOState.CLEAN, resource.cdoState());
assertEquals(CDOState.CLEAN, CDOUtil.getCDOObject(supplier).cdoState());
assertCreatedTime(supplier, commitTime2);
}
public void testGetResource() throws Exception
{
CDOSession session = openSession();
{
disableConsole();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource(getResourcePath("/test1"));
Supplier supplier = getModel1Factory().createSupplier();
supplier.setName("Stepper");
resource.getContents().add(supplier);
transaction.commit();
enableConsole();
}
{
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.getResource(getResourcePath("/test1"), true);
assertNotNull(resource);
assertEquals(URI.createURI("cdo://" + session.getRepositoryInfo().getUUID() + getResourcePath("/test1")),
resource.getURI());
assertEquals(transaction.getResourceSet(), resource.getResourceSet());
assertEquals(1, transaction.getResourceSet().getResources().size());
assertEquals(transaction, resource.cdoView());
assertEquals(CDOState.PROXY, resource.cdoState());
assertEquals(null, resource.cdoRevision());
assertEquals(1, resource.getContents().size()); // This loads the resource
assertEquals(CDOState.CLEAN, resource.cdoState());
assertNotNull(resource.cdoRevision());
}
{
CDOTransaction transaction = session.openTransaction();
CDOResource resource = (CDOResource)transaction.getResourceSet()
.getResource(CDOURIUtil.createResourceURI(transaction, getResourcePath("/test1")), true);
assertNotNull(resource);
assertEquals(URI.createURI("cdo://" + session.getRepositoryInfo().getUUID() + getResourcePath("/test1")),
resource.getURI());
assertEquals(transaction.getResourceSet(), resource.getResourceSet());
assertEquals(1, transaction.getResourceSet().getResources().size());
assertEquals(transaction, resource.cdoView());
assertEquals(CDOState.PROXY, resource.cdoState());
assertEquals(null, resource.cdoRevision());
assertEquals(1, resource.getContents().size()); // This loads the resource
assertEquals(CDOState.CLEAN, resource.cdoState());
assertNotNull(resource.cdoRevision());
}
}
public void testGetContents() throws Exception
{
CDOSession session = openSession();
{
disableConsole();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource(getResourcePath("/test1"));
Supplier supplier = getModel1Factory().createSupplier();
supplier.setName("Stepper");
resource.getContents().add(supplier);
transaction.commit();
enableConsole();
}
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.getResource(getResourcePath("/test1"));
EList<EObject> contents = resource.getContents();
assertNotNull(contents);
Supplier supplier = (Supplier)contents.get(0);
assertEquals("Stepper", supplier.getName());
}
public void testReadObjectProxy() throws Exception
{
CDOSession session = openSession();
{
disableConsole();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource(getResourcePath("/test1"));
Supplier supplier = getModel1Factory().createSupplier();
supplier.setName("Stepper");
resource.getContents().add(supplier);
transaction.commit();
enableConsole();
}
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.getResource(getResourcePath("/test1"));
EList<EObject> contents = resource.getContents();
Supplier s = (Supplier)contents.get(0);
assertNotNull(s);
assertEquals("Stepper", s.getName());
}
public void testReadTransientValue() throws Exception
{
CDOSession session = openSession();
{
disableConsole();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource(getResourcePath("/test1"));
Product1 product = getModel1Factory().createProduct1();
product.setDescription("DESCRIPTION");
product.setName("McDuff");
resource.getContents().add(product);
assertEquals("DESCRIPTION", product.getDescription());
transaction.commit();
enableConsole();
}
CDOView view = session.openView();
CDOResource resource = view.getResource(getResourcePath("/test1"));
EList<EObject> contents = resource.getContents();
Product1 s = (Product1)contents.get(0);
assertNotNull(s);
assertEquals("McDuff", s.getName());
assertNull(s.getDescription());
s.setDescription("HELLO");
assertEquals("HELLO", s.getDescription());
}
public void testLoadResource() throws Exception
{
{
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource(getResourcePath("/test1"));
Supplier supplier = getModel1Factory().createSupplier();
supplier.setName("Stepper");
resource.getContents().add(supplier);
transaction.commit();
}
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.getResource(getResourcePath("/test1"));
assertNotNull(resource);
URI uri = URI.createURI("cdo://" + session.getRepositoryInfo().getUUID() + getResourcePath("/test1"));
URI resourceURI = resource.getURI();
assertEquals(uri, resourceURI);
assertEquals(transaction.getResourceSet(), resource.getResourceSet());
assertEquals(transaction, resource.cdoView());
assertEquals(CDOState.PROXY, resource.cdoState());
assertEquals(null, resource.cdoRevision());
assertEquals(1, resource.getContents().size()); // This loads the resource
assertEquals(CDOState.CLEAN, resource.cdoState());
assertNotNull(resource.cdoRevision());
}
public void testLoadObject() throws Exception
{
{
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource(getResourcePath("/test1"));
Supplier supplier = getModel1Factory().createSupplier();
supplier.setName("Stepper");
resource.getContents().add(supplier);
transaction.commit();
}
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.getResource(getResourcePath("/test1"));
EList<EObject> contents = resource.getContents();
Supplier s = (Supplier)contents.get(0);
assertNotNull(s);
assertEquals("Stepper", s.getName());
}
/**
* bug 226317
*/
public void testMultipleInheritence() throws Exception
{
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource(getResourcePath("/test1"));
OrderAddress orderAddress = getModel1Factory().createOrderAddress();
resource.getContents().add(orderAddress);
assertEquals(getModel1Package().getAddress_City().getFeatureID(),
getModel1Package().getOrderDetail_Price().getFeatureID());
orderAddress.setCity("ALLO");
orderAddress.setPrice(2.8f);
orderAddress.setTestAttribute(true);
assertEquals(2.8f, orderAddress.getPrice());
assertEquals("ALLO", orderAddress.getCity());
OrderDetail orderDetail = getModel1Factory().createOrderDetail();
resource.getContents().add(orderDetail);
orderDetail.setPrice(3f);
transaction.commit();
orderAddress.setCity("ALLO");
transaction.commit();
session.close();
session = openSession();
transaction = session.openTransaction();
orderAddress = (OrderAddress)CDOUtil
.getEObject(transaction.getObject(CDOUtil.getCDOObject(orderAddress).cdoID(), true));
assertEquals(2.8f, orderAddress.getPrice());
assertEquals("ALLO", orderAddress.getCity());
orderAddress.setPrice(2.8f);
transaction.commit();
session.close();
session = openSession();
transaction = session.openTransaction();
orderAddress = (OrderAddress)CDOUtil
.getEObject(transaction.getObject(CDOUtil.getCDOObject(orderAddress).cdoID(), true));
assertEquals(2.8f, orderAddress.getPrice());
assertEquals("ALLO", orderAddress.getCity());
orderAddress.setPrice(2.8f);
}
public void testNullReference() throws Exception
{
{
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource(getResourcePath("/test1"));
OrderDetail orderDetail = getModel1Factory().createOrderDetail();
orderDetail.setPrice(4.75f);
resource.getContents().add(orderDetail);
transaction.commit();
session.close();
}
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.getResource(getResourcePath("/test1"));
EList<EObject> contents = resource.getContents();
OrderDetail orderDetail = (OrderDetail)contents.get(0);
assertNotNull(orderDetail);
assertEquals(4.75f, orderDetail.getPrice());
assertEquals(null, orderDetail.getProduct());
}
public void testDirectResourceEMF() throws Exception
{
Resource resource1 = new XMLResourceImpl();
EPackage p = createUniquePackage();
EClass c = EcoreFactory.eINSTANCE.createEClass();
resource1.getContents().add(p);
p.getEClassifiers().add(c);
assertEquals(null, ((InternalEObject)c).eDirectResource());
assertEquals(resource1, ((InternalEObject)p).eDirectResource());
}
public void testDirectResource() throws Exception
{
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource1 = transaction.getOrCreateResource(getResourcePath("/test1"));
// Resource resource1 = new XMIResourceImpl();
Category cat1 = getModel1Factory().createCategory();
assertTransient(cat1);
Category cat2 = getModel1Factory().createCategory();
assertTransient(cat2);
// resource1.getContents().add(cat2);
resource1.getContents().add(cat1);
cat1.getCategories().add(cat2);
assertEquals(null, CDOUtil.getCDOObject(cat2).cdoDirectResource());
assertEquals(resource1, CDOUtil.getCDOObject(cat1).cdoDirectResource());
assertEquals(null, ((InternalEObject)cat2).eDirectResource());
assertEquals(resource1, ((InternalEObject)cat1).eDirectResource());
transaction.close();
session.close();
}
public void testResourceAccessor() throws Exception
{
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource(getResourcePath("/test1"));
Supplier supplier = getModel1Factory().createSupplier();
supplier.setName("Stepper");
resource.getContents().add(supplier);
URI supplierTempURI = EcoreUtil.getURI(supplier);
// Retrieving supplier from URI before commit
EObject supplier1 = transaction.getResourceSet().getEObject(supplierTempURI, true);
assertEquals(supplier, CDOUtil.getEObject(supplier1));
transaction.commit();
URI supplierURI = EcoreUtil.getURI(supplier);
// Retrieving supplier from URI after commit
EObject supplierFromURI = transaction.getResourceSet().getEObject(supplierURI, true);
assertEquals(supplier, CDOUtil.getEObject(supplierFromURI));
EObject supplierAfterCommit2 = transaction.getResourceSet().getEObject(supplierTempURI, true);
if (session.getRepositoryInfo().getIDGenerationLocation() == IDGenerationLocation.STORE)
{
assertEquals(null, supplierAfterCommit2);
}
else
{
assertEquals(supplier, supplierAfterCommit2);
}
}
}