| /******************************************************************************* |
| * Copyright (c) 2011-2012 Oracle. All rights reserved. This program and the |
| * accompanying materials are made available under the terms of the Eclipse |
| * Public License v1.0 and Eclipse Distribution License v. 1.0 which accompanies |
| * this distribution. The Eclipse Public License is available at |
| * http://www.eclipse.org/legal/epl-v10.html and the Eclipse Distribution |
| * License is available at http://www.eclipse.org/org/documents/edl-v10.php. |
| * |
| * Contributors: dclarke - Bug 361016: Future Versions Examples |
| ******************************************************************************/ |
| package tests; |
| |
| import static example.PersonModelExample.T2; |
| import static example.PersonModelExample.T4; |
| |
| import java.lang.reflect.Proxy; |
| |
| import junit.framework.Assert; |
| import model.Address; |
| import model.Person; |
| import model.Phone; |
| import model.entities.AddressEntity; |
| import model.entities.PersonEntity; |
| import model.entities.PhoneEntity; |
| |
| import org.junit.Test; |
| |
| import temporal.EditionWrapperHelper; |
| import temporal.TemporalEdition; |
| import temporal.TemporalEntity; |
| import temporal.TemporalEntityManager; |
| import example.PersonModelExample; |
| |
| /** |
| * Tests that verify the update of editions |
| * |
| * @author dclarke |
| * @since EclipseLink 2.3.1 |
| */ |
| public class ProxyWrapperUpdateTests extends BaseTestCase { |
| |
| private static PersonModelExample example = new PersonModelExample(); |
| |
| @Test |
| public void createWrapperForCurrent() { |
| TemporalEntityManager em = getEntityManager(); |
| em.setEffectiveTime(null); |
| |
| try { |
| EditionWrapperHelper.wrap(em, new PersonEntity()); |
| } catch (IllegalArgumentException e) { |
| return; |
| } |
| Assert.fail("IllegalArgumentException not thrown"); |
| } |
| |
| @Test |
| public void createWrapperForPersonEditionWithoutEffectiveTS() { |
| TemporalEntityManager em = getEntityManager(); |
| |
| try { |
| em.getTransaction().begin(); |
| Person tempPerson = em.newEntity(Person.class); |
| em.persist(tempPerson); |
| em.flush(); |
| |
| EditionWrapperHelper.wrap(em, tempPerson); |
| |
| } catch (IllegalArgumentException e) { |
| return; |
| } |
| |
| Assert.fail("IllegalArgumentException expected"); |
| } |
| |
| @Test |
| public void createWrapperForPersonEdition() { |
| TemporalEntityManager em = getEntityManager(); |
| em.setEffectiveTime(T4); |
| |
| em.getTransaction().begin(); |
| Person tempPerson = em.newEntity(Person.class); |
| em.persist(tempPerson); |
| em.flush(); |
| |
| TemporalEntity<Person> wrapper = EditionWrapperHelper.wrap(em, tempPerson); |
| |
| Assert.assertNotNull(wrapper); |
| Assert.assertTrue(wrapper instanceof Person); |
| Assert.assertTrue(wrapper instanceof TemporalEdition); |
| } |
| |
| @Test |
| public void createWrapperForAddressEdition() { |
| TemporalEntityManager em = getEntityManager(); |
| em.setEffectiveTime(T4); |
| |
| em.getTransaction().begin(); |
| TemporalEntity<Address> wrapper = EditionWrapperHelper.wrap(em, em.newEntity(AddressEntity.class)); |
| |
| Assert.assertNotNull(wrapper); |
| Assert.assertTrue(wrapper instanceof Address); |
| Assert.assertTrue(wrapper instanceof TemporalEdition); |
| |
| em.getTransaction().rollback(); |
| } |
| |
| @Test |
| public void createWrapperForPhoneEdition() { |
| TemporalEntityManager em = getEntityManager(); |
| em.setEffectiveTime(T4); |
| |
| em.getTransaction().begin(); |
| TemporalEntity<Phone> wrapper = EditionWrapperHelper.wrap(em, em.newEntity(PhoneEntity.class)); |
| |
| Assert.assertNotNull(wrapper); |
| Assert.assertTrue(wrapper instanceof Phone); |
| Assert.assertTrue(wrapper instanceof TemporalEdition); |
| em.getTransaction().rollback(); |
| } |
| |
| @SuppressWarnings("unchecked") |
| @Test |
| public void create2editionsUsingWrappers() { |
| TemporalEntityManager em = getEntityManager(); |
| em.setEffectiveTime(T2); |
| |
| Person editionAtT2 = em.find(Person.class, example.fullPerson.getId()); |
| |
| em.getTransaction().begin(); |
| Person wrappedPerson = (Person) EditionWrapperHelper.wrap(em, editionAtT2); |
| |
| Assert.assertTrue(Proxy.isProxyClass(wrappedPerson.getClass())); |
| Assert.assertTrue(Proxy.isProxyClass(wrappedPerson.getAddress().getClass())); |
| Assert.assertFalse(((TemporalEdition<Person>) wrappedPerson).hasChanges()); |
| |
| wrappedPerson.setName(editionAtT2.getName() + "@T2"); |
| |
| Assert.assertTrue(((TemporalEdition<Person>) wrappedPerson).hasChanges()); |
| |
| em.getTransaction().commit(); |
| em.close(); |
| |
| em = getEntityManager(); |
| em.setEffectiveTime(T4); |
| |
| Person editionAtT4 = em.find(Person.class, example.fullPerson.getId()); |
| |
| em.getTransaction().begin(); |
| wrappedPerson = (Person) EditionWrapperHelper.wrap(em, editionAtT4); |
| |
| Assert.assertFalse(((TemporalEdition<Person>) wrappedPerson).hasChanges()); |
| |
| wrappedPerson.setName(editionAtT4.getName() + "@T4"); |
| |
| Assert.assertTrue(((TemporalEdition<Person>) wrappedPerson).hasChanges()); |
| |
| em.getTransaction().commit(); |
| } |
| |
| @Override |
| public void populate(TemporalEntityManager em) { |
| em.persist(example.fullPerson); |
| } |
| } |