blob: b190bc60e7ebffb66a6d117de0a5d220910f8b43 [file] [log] [blame]
/*******************************************************************************
* 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.GOLF;
import static example.PersonModelExample.RUN;
import static example.PersonModelExample.SKI;
import static example.PersonModelExample.T2;
import static example.PersonModelExample.T4;
import java.sql.Date;
import javax.persistence.EntityManagerFactory;
import junit.framework.Assert;
import model.Address;
import model.Person;
import model.Phone;
import model.entities.PhoneEntity;
import temporal.Effectivity;
import temporal.TemporalEntityManager;
import example.PersonModelExample;
/**
* This test case performs current and edition queries on a simple
* Person-Address-Phones model both illustrating and verifying query operations.
*
* @author dclarke
* @since EclipseLink 2.3.1
*/
public abstract class FullPersonWithEditions extends BaseTestCase {
private static PersonModelExample example = null;
protected Person getSample() {
return example.fullPerson;
}
@SuppressWarnings("deprecation")
@Override
public void populate(EntityManagerFactory emf) {
System.out.println("\nFullPersonWithEditions.populate:START");
example = new PersonModelExample();
TemporalEntityManager em = TemporalEntityManager.getInstance(emf.createEntityManager());
em.getTransaction().begin();
example.populateHobbies(em);
em.persist(example.fullPerson);
em.flush();
System.out.println("\n> Create T2 Edition");
em.setEffectiveTime(T2);
Person fpEdition = em.find(Person.class, example.fullPerson.getId());
Person personEditionT2 = em.newEdition(fpEdition);
personEditionT2.setName("Jimmy");
Address aT2 = em.newEdition(example.fullPerson.getAddress());
aT2.setCity("Toronto");
aT2.setState("ON");
personEditionT2.setDateOfBirth(new Date(75, 1, 5));
personEditionT2.setAddress(aT2);
Phone pT2 = em.newEdition(example.fullPerson.getPhone("Home"));
personEditionT2.addPhone(pT2);
pT2.setNumber("222-222-2222");
Phone pWT2 = em.newEntity(PhoneEntity.class);
pWT2.setType("Work");
pWT2.setNumber("333-333-3333");
personEditionT2.addPhone(pWT2);
em.persist(personEditionT2.addHobby(example.hobbies.get(GOLF), T2));
em.flush();
System.out.println("\n> Create T4 Edition");
em.setEffectiveTime(T4);
fpEdition = em.find(Person.class, example.fullPerson.getId());
Person personEditionT4 = em.newEdition(personEditionT2);
personEditionT4.setName("James");
Address aT4 = em.newEdition(aT2);
aT4.setCity("San Francisco");
aT4.setState("CA");
personEditionT4.setAddress(aT4);
Phone pT4 = em.newEdition(pT2);
pT4.setNumber("444-444-4444");
personEditionT4.addPhone(pT4);
pWT2.getEffectivity().setEnd(T4);
Phone pCT4 = em.newEntity(PhoneEntity.class);
pCT4.setType("Cell");
pCT4.setNumber("555-555-55555");
personEditionT4.addPhone(pCT4);
personEditionT4.getPersonHobbies().get(GOLF).getEffectivity().setEnd(T4);
em.persist(personEditionT4.addHobby(example.hobbies.get(RUN), T4));
em.persist(personEditionT4.addHobby(example.hobbies.get(SKI), T4));
em.flush();
em.getTransaction().commit();
em.close();
verifyPopulate(emf);
System.out.println("\nFullPersonWithEditions.populate::DONE");
}
protected void verifyPopulate(EntityManagerFactory emf) {
TemporalEntityManager em = TemporalEntityManager.getInstance(emf.createEntityManager());
verifyCurrent(em);
em.close();
em = TemporalEntityManager.getInstance(emf.createEntityManager());
verifyT2(em);
em.close();
em = TemporalEntityManager.getInstance(emf.createEntityManager());
verifyT4(em);
em.close();
}
public void verifyCurrent(TemporalEntityManager em) {
em.setEffectiveTime(Effectivity.BOT);
Person person = em.find(Person.class, getSample().getContinuityId());
Assert.assertNotNull(person);
Address address = person.getAddress();
Assert.assertNotNull(address);
Assert.assertEquals(1, person.getPhones().size());
Phone homePhone = person.getPhone("Home");
Assert.assertNotNull(homePhone);
}
public void verifyT2(TemporalEntityManager em) {
em.setEffectiveTime(T2);
Person person = em.find(Person.class, getSample().getContinuityId());
Assert.assertNotNull(person);
Address address = person.getAddress();
Assert.assertNotNull(address);
Assert.assertEquals(2, person.getPhones().size());
Phone homePhone = person.getPhone("Home");
Assert.assertNotNull(homePhone);
Phone workPhone = person.getPhone("Work");
Assert.assertNotNull(workPhone);
}
public void verifyT4(TemporalEntityManager em) {
em.setEffectiveTime(T4);
Person person = em.find(Person.class, getSample().getContinuityId());
Assert.assertNotNull(person);
Address address = person.getAddress();
Assert.assertNotNull(address);
Assert.assertEquals(2, person.getPhones().size());
Phone homePhone = person.getPhone("Home");
Assert.assertNotNull(homePhone);
Phone cellPhone = person.getPhone("Cell");
Assert.assertNotNull(cellPhone);
}
}