blob: c559415cbe348d9e101a8acea177c7fffab971c4 [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.editionsets;
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 static example.PersonModelExample.T5;
import static temporal.Effectivity.BOT;
import static temporal.Effectivity.EOT;
import java.util.List;
import javax.persistence.Temporal;
import junit.framework.Assert;
import model.Address;
import model.Person;
import model.PersonHobby;
import model.Phone;
import org.junit.Test;
import temporal.EditionSet;
import temporal.EditionSetEntry;
import temporal.TemporalEntityManager;
import temporal.TemporalHelper;
import tests.BaseTestCase;
import example.PersonModelExample;
/**
* Tests verifying the {@link EditionSet} capabilities.
*
* @author dclarke
* @since EclipseLink 2.3.1
*/
public class DeleteEditionSetTests extends BaseTestCase {
private static PersonModelExample example = new PersonModelExample();
private Person getSample() {
return example.fullPerson;
}
@Test
public void verifyEditionSetAtT2() {
TemporalEntityManager em = getEntityManager();
em.setEffectiveTime(T2);
EditionSet es = em.getEditionSet();
Assert.assertNotNull(es);
Assert.assertEquals(T2, es.getEffective());
Assert.assertEquals(4, es.getEntries().size());
Assert.assertTrue(es.getEntries().get(0).getTemporal() instanceof Person);
Person p = (Person) es.getEntries().get(0).getTemporal();
Assert.assertEquals(T2, p.getEffectivity().getStart());
Assert.assertTrue(es.getEntries().get(1).getTemporal() instanceof Address);
Address a = (Address) es.getEntries().get(1).getTemporal();
Assert.assertEquals(T2, a.getEffectivity().getStart());
Assert.assertTrue(es.getEntries().get(2).getTemporal() instanceof Phone);
Phone phone = (Phone) es.getEntries().get(2).getTemporal();
Assert.assertEquals(T2, phone.getEffectivity().getStart());
Assert.assertTrue(es.getEntries().get(3).getTemporal() instanceof PersonHobby);
PersonHobby ph = (PersonHobby) es.getEntries().get(3).getTemporal();
Assert.assertEquals(T2, ph.getEffectivity().getStart());
Assert.assertEquals(PersonModelExample.GOLF, ph.getName());
Assert.assertEquals(PersonModelExample.GOLF, ph.getHobby().getName());
// Assert.assertSame(p, ph.getPerson());
Assert.assertEquals(1, p.getPersonHobbies().size());
}
@Test
public void verifyEditionSetAtT4() {
TemporalEntityManager em = getEntityManager();
em.setEffectiveTime(T4);
EditionSet es = em.getEditionSet();
Assert.assertNotNull(es);
Assert.assertEquals(T4, es.getEffective());
Assert.assertEquals(5, es.getEntries().size());
Assert.assertTrue(es.getEntries().get(0).getTemporal() instanceof Person);
Person p = (Person) es.getEntries().get(0).getTemporal();
Assert.assertEquals(T4, p.getEffectivity().getStart());
Assert.assertTrue(es.getEntries().get(1).getTemporal() instanceof Address);
Address a = (Address) es.getEntries().get(1).getTemporal();
Assert.assertEquals(T4, a.getEffectivity().getStart());
Assert.assertTrue(es.getEntries().get(2).getTemporal() instanceof Phone);
Phone phone = (Phone) es.getEntries().get(2).getTemporal();
Assert.assertEquals(T4, phone.getEffectivity().getStart());
Assert.assertTrue(es.getEntries().get(3).getTemporal() instanceof PersonHobby);
PersonHobby ph = (PersonHobby) es.getEntries().get(3).getTemporal();
Assert.assertEquals(T4, ph.getEffectivity().getStart());
Assert.assertEquals(PersonModelExample.RUN, ph.getName());
Assert.assertEquals(PersonModelExample.RUN, ph.getHobby().getName());
// Assert.assertSame(p, ph.getPerson());
Assert.assertTrue(es.getEntries().get(4).getTemporal() instanceof PersonHobby);
ph = (PersonHobby) es.getEntries().get(4).getTemporal();
Assert.assertEquals(T4, ph.getEffectivity().getStart());
Assert.assertEquals(PersonModelExample.SKI, ph.getName());
Assert.assertEquals(PersonModelExample.SKI, ph.getHobby().getName());
// Assert.assertSame(p, ph.getPerson());
Assert.assertEquals(2, p.getPersonHobbies().size());
}
@Test
public void verifyEditionSets() {
TemporalEntityManager em = getEntityManager();
List<EditionSet> editionSets = em.createQuery("SELECT e FROM EditionSet e ORDER BY e.effective", EditionSet.class).getResultList();
Assert.assertNotNull(editionSets);
Assert.assertEquals("Incorrect number of EditionSets found.", 2, editionSets.size());
EditionSet t1 = editionSets.get(0);
Assert.assertNotNull(t1);
Assert.assertEquals(T2, t1.getEffective());
EditionSet t2 = editionSets.get(1);
Assert.assertNotNull(t2);
Assert.assertEquals(T4, t2.getEffective());
}
/**
* Verify that the addition of a {@link Temporal} value in a 1:M collection
* causes an EditionSetEntry to be created.
*/
@Test
public void addHobbyAtT5WithInitializedEditionSet() {
TemporalEntityManager em = getEntityManager();
em.setEffectiveTime(T5);
EditionSet es = em.getEditionSet();
Assert.assertNotNull(es);
Person person = em.find(Person.class, getSample().getId());
Assert.assertNotNull(person);
Assert.assertTrue(TemporalHelper.isTemporalEntity(person));
Assert.assertEquals(T5, es.getEffective());
PersonHobby runHobby = em.newTemporal(PersonHobby.class);
runHobby.setHobby(example.hobbies.get(RUN));
person.addHobby(runHobby);
Assert.assertEquals(1, es.getEntries().size());
EditionSetEntry entry = es.getEntries().get(0);
Assert.assertTrue(entry.getTemporal() instanceof PersonHobby);
}
/**
* TODO
*/
@Test
public void deleteT4() {
TemporalEntityManager em = getEntityManager();
em.setEffectiveTime(T4);
EditionSet esT4 = em.getEditionSet();
Assert.assertNotNull(esT4);
em.getTransaction().begin();
em.remove(esT4);
em.getTransaction().commit();
esT4 = em.find(EditionSet.class, T4);
Assert.assertNull(esT4);
}
/**
* TODO
*/
@Test
public void deleteT2() {
TemporalEntityManager em = getEntityManager();
em.setEffectiveTime(T2);
EditionSet esT2 = em.getEditionSet();
Assert.assertNotNull(esT2);
em.getTransaction().begin();
em.remove(esT2);
em.getTransaction().commit();
esT2 = em.find(EditionSet.class, T2);
Assert.assertNull(esT2);
}
/**
* Create future edition of Address@T2 and delete it.
*/
@Test
public void deleteFutureEntity() {
TemporalEntityManager em = getEntityManager();
em.setEffectiveTime(T2);
em.getTransaction().begin();
Address addr = em.newEntity(Address.class);
Assert.assertNotNull(addr);
Assert.assertEquals(T2, addr.getEffectivity().getStart());
Assert.assertEquals(EOT, addr.getEffectivity().getEnd());
Assert.assertSame(addr, addr.getContinuity());
Assert.assertTrue(addr.getContinuityId() > 0);
em.getTransaction().commit();
em.close();
em = getEntityManager();
em.setEffectiveTime(T2);
addr = em.find(Address.class, addr.getContinuityId());
Assert.assertNotNull(addr);
Assert.assertEquals(T2, addr.getEffectivity().getStart());
Assert.assertEquals(EOT, addr.getEffectivity().getEnd());
em.getTransaction().begin();
em.remove(addr);
em.getTransaction().commit();
}
/**
* Populate initial sample entity
*/
@Override
public void populate(TemporalEntityManager em) {
System.out.println("\nEditionSetTests.populate:START");
example.populateHobbies(em);
em.persist(getSample());
System.out.println("\nEditionSetTests.populateT2Edition:START");
em.setEffectiveTime(T2);
EditionSet editionSet = em.getEditionSet();
editionSet.setDescription("EditionSetTests::Person@T2");
Person person = em.find(Person.class, getSample().getId());
Assert.assertEquals(BOT, person.getEffectivity().getStart());
Person personEditionT2 = em.newEdition(person);
personEditionT2.setName("Jimmy");
Address aT2 = em.newEdition(personEditionT2.getAddress());
aT2.setCity("Toronto");
aT2.setState("ON");
personEditionT2.setAddress(aT2);
Phone pT2 = em.newEdition(personEditionT2.getPhone("Home"));
personEditionT2.addPhone(pT2);
pT2.setNumber("222-222-2222");
PersonHobby golfHobby = em.newTemporal(PersonHobby.class);
golfHobby.setHobby(example.hobbies.get(GOLF));
personEditionT2.addHobby(golfHobby);
em.flush();
System.out.println("\nEditionSetTests.populateT2Edition::DONE");
System.out.println("\nEditionSetTests.populateT4Edition:START");
em.setEffectiveTime(T4);
editionSet = em.getEditionSet();
editionSet.setDescription("EditionSetTests::Person@T4");
person = em.find(Person.class, getSample().getId());
Assert.assertEquals(T2, person.getEffectivity().getStart());
Person personEditionT4 = em.newEdition(person);
personEditionT4.setName("James");
Address aT4 = em.newEdition(personEditionT4.getAddress());
aT4.setCity("San Francisco");
aT4.setState("CA");
personEditionT4.setAddress(aT4);
Phone pT4 = em.newEdition(personEditionT4.getPhone("Home"));
pT4.setNumber("444-444-4444");
personEditionT4.addPhone(pT4);
personEditionT4.getPersonHobbies().get(GOLF).getEffectivity().setEnd(T4);
PersonHobby runHobby = em.newTemporal(PersonHobby.class);
runHobby.setHobby(example.hobbies.get(RUN));
personEditionT4.addHobby(runHobby);
PersonHobby skiHobby = em.newTemporal(PersonHobby.class);
skiHobby.setHobby(example.hobbies.get(SKI));
personEditionT4.addHobby(skiHobby);
em.flush();
System.out.println("\nEditionSetTests.populateT4Edition:DONE");
System.out.println("\nEditionSetTests.populate::DONE");
}
}