/**
* Copyright (C) 2001-2006 France Telecom R&D
*/
package org.objectweb.speedo.runtime.inheritance;
import org.objectweb.speedo.SpeedoTestHelper;
import org.objectweb.speedo.pobjects.inheritance.filtered.jdo2.hid.A;
import org.objectweb.speedo.pobjects.inheritance.filtered.jdo2.hid.C;
import org.objectweb.speedo.pobjects.inheritance.filtered.jdo2.hid.D;
import org.objectweb.speedo.pobjects.inheritance.filtered.jdo2.hid.E;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import javax.jdo.PersistenceManager;
import javax.jdo.Query;
public class TestFilteredHID extends SpeedoTestHelper {
public TestFilteredHID(String n) {
super(n);
}
protected String getLoggerName() {
return LOG_NAME + "rt.inheritance.TestFilteredHID";
}
public void test1() {
E e1 = new E();
e1.setMyA(new A("a1"));
e1.setMyC(new C("c1"));
e1.setMyD(new D("d1"));
E e2 = new E();
e2.setMyA(new D("d2"));
e2.setMyC(new D("d3"));
e2.setMyD(new D("d4"));
PersistenceManager pm = pmf.getPersistenceManager();
pm.currentTransaction().begin();
pm.makePersistent(e1);
Object oide1 = pm.getObjectId(e1);
pm.makePersistent(e2);
Object oide2 = pm.getObjectId(e2);
e1 = null;
e2 = null;
pm.currentTransaction().commit();
pm.evictAll();
pm.currentTransaction().begin();
e1 = (E) pm.getObjectById(E.class, oide1);
assertEquals("bad e1.myA.aid", e1.getMyA().getAid(), "a1");
assertEquals("bad e1.myC.aid", e1.getMyC().getAid(), "c1");
assertEquals("bad e1.myD.aid", e1.getMyD().getAid(), "d1");
e1 = null;
e2 = (E) pm.getObjectById(E.class, oide2);
assertEquals("bad e2.myA.aid", e2.getMyA().getAid(), "d2");
assertEquals("bad e2.myC.aid", e2.getMyC().getAid(), "d3");
assertEquals("bad e2.myD.aid", e2.getMyD().getAid(), "d4");
e2 = null;
pm.currentTransaction().commit();
pm.evictAll();
pm.currentTransaction().begin();
Query q = pm.newQuery(A.class);
Collection c = (Collection) q.execute();
List expected = Arrays.asList(
new String[] {"a1", "c1", "d1", "d2", "d3", "d4"});
ArrayList found = new ArrayList();
for (Iterator it = c.iterator(); it.hasNext();) {
A a = (A) it.next();
found.add(a.getAid());
}
q.closeAll();
assertSameCollection("Bad result of query on all A instances", expected, found);
pm.currentTransaction().commit();
pm.currentTransaction().begin();
q = pm.newQuery(A.class);
c = new ArrayList((Collection) q.execute());
q.closeAll();
q = pm.newQuery(E.class);
c.addAll((Collection) q.execute());
q.closeAll();
pm.deletePersistentAll(c);
pm.currentTransaction().commit();
pm.close();
}
}