blob: 17380948c60c0c1692c3fd5225ebcf01d048f59c [file] [log] [blame]
/*
* Copyright (c) 2010-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
*/
package org.eclipse.emf.cdo.examples.hibernate.client;
import org.eclipse.emf.cdo.eresource.CDOResource;
import org.eclipse.emf.cdo.examples.company.Category;
import org.eclipse.emf.cdo.examples.company.CompanyFactory;
import org.eclipse.emf.cdo.session.CDOSession;
import org.eclipse.emf.cdo.transaction.CDOTransaction;
/**
* This test shows that a custom ID Generator is used. You can find the annotation for the id generator in the ecore
* model, at EPackage level and in the Category.name EAttribute.
* <p/>
* The ID generator is implemented in the org.eclipse.emf.cdo.examples.hibernate.server (see the
* CDOExampleUUIDHexGenerator class).
* <p/>
* The custom id generator ensures that if an object has already an id that it is being re-used.
* <p/>
* Note this testcase will work with the hibernate mapping created using the latest version of the ecore file. When
* using the generated hbm file then it does not work (as the generated hbm file does not necessarily contain the
* required generator definitions).
*
* @author Martin Taal
*/
public class CustomIDGeneratorTest extends BaseTest
{
/**
* Create 2 categories, after persisting they should both have an id. One has a pre-set id, the other one a generated
* id (as it was not pre-set).
*/
public void testSetId() throws Exception
{
Category category1;
Category category2;
final String uuid = "MyUUID"; //$NON-NLS-1$
{
final CDOSession session = openSession();
final CDOTransaction transaction = session.openTransaction();
// get/create a resource
CDOResource resource = transaction.getOrCreateResource("/res1"); //$NON-NLS-1$
// clear any previous data
resource.getContents().clear();
category1 = CompanyFactory.eINSTANCE.createCategory();
category1.setName(uuid);
category2 = CompanyFactory.eINSTANCE.createCategory();
resource.getContents().add(category1);
resource.getContents().add(category2);
transaction.commit();
session.close();
}
// read back and test that the uuid is the same for one
// and generated for the other
{
final CDOSession session = openSession();
final CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.getResource("/res1"); //$NON-NLS-1$
final Category category1_read = (Category)resource.getContents().get(0);
final Category category2_read = (Category)resource.getContents().get(1);
// test that we really have different objects
assertNotSame(category1, category1_read);
assertNotSame(category2, category2_read);
// but that the uuid for one is equal but not the same object
assertEquals(uuid, category1_read.getName());
assertNotSame(uuid, category1_read.getName());
// and the other uuid has been set
assertNotNull(category2_read.getName());
assertEquals(false, uuid.equals(category2_read.getName()));
transaction.commit();
session.close();
}
}
}