/**
* Copyright (C) 2001-2004 France Telecom R&D
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package org.objectweb.speedo.runtime.inheritance;
import org.objectweb.speedo.pobjects.inheritance.filterOutOfPK.rdbsequence.Article;
import org.objectweb.speedo.pobjects.inheritance.filterOutOfPK.rdbsequence.Catalogue;
import org.objectweb.speedo.pobjects.inheritance.filterOutOfPK.rdbsequence.Marche;
import org.objectweb.speedo.pobjects.inheritance.filterOutOfPK.rdbsequence.Service;
import org.objectweb.speedo.pobjects.inheritance.filterOutOfPK.rdbsequence.Materiel;
import org.objectweb.speedo.SpeedoTestHelper;
import org.objectweb.util.monolog.api.BasicLevel;
import javax.jdo.PersistenceManager;
import javax.jdo.Extent;
import java.util.Iterator;
import java.util.Collection;
/**
*
* @author S.Chassande-Barrioz
*/
public class TestRdbSequenceFilterOutOfPK extends SpeedoTestHelper {
public TestRdbSequenceFilterOutOfPK(String s) {
super(s);
}
protected String getLoggerName() {
return LOG_NAME + "rt.inheritance.TestRdbSequenceFilterOutOfPK";
}
public void testA() {
final int NB_ARTICLE = 10;
final int CATLAOGUE_SIZE = 2;
final int MARCHE_SIZE = 2;
PersistenceManager pm = pmf.getPersistenceManager();
pm.currentTransaction().begin();
Catalogue cat = null;
int nbCat = 0;
Marche mar= null;
int nbMar = 0;
Article a;
for(int idArt=0; idArt<NB_ARTICLE; idArt++) {
if ((idArt / CATLAOGUE_SIZE) == nbCat) {
cat = new Catalogue();
pm.makePersistent(cat);
nbCat ++;
}
if ((idArt / MARCHE_SIZE) == nbMar) {
mar = new Marche();
pm.makePersistent(mar);
nbMar ++;
}
if ((idArt % 2) == 0) { //even
a = new Service(idArt);
} else { //uneven
a = new Materiel(idArt);
}
pm.makePersistent(a);
a.setCatalogue(cat);
mar.getArticles().add(a);
}
pm.currentTransaction().commit();
a = null;
cat = null;
mar = null;
pm.evictAll();
Extent extent = pm.getExtent(Catalogue.class, true);
Iterator it = extent.iterator();
while(it.hasNext()) {
cat = (Catalogue) it.next();
logger.log(BasicLevel.DEBUG, "Catalogue " + cat.getId());
Collection arts = cat.getArticles();
Iterator articles = arts.iterator();
while(articles.hasNext()) {
a = (Article) articles.next();
logger.log(BasicLevel.DEBUG, "\tArticle " + a.getId());
Collection mars = a.getMarches();
Iterator marches = mars.iterator();
while (marches.hasNext()) {
mar = (Marche) marches.next();
logger.log(BasicLevel.DEBUG, "\t\tMarche " + mar.getId());
Collection m2as = mar.getArticles();
assertTrue("The article '" + a.getId()
+ "' is not in the collection marche(" + mar.getId()
+ ").articles", m2as.contains(a));
}
}
}
extent.closeAll();
a = null;
cat = null;
mar = null;
pm.currentTransaction().begin();
extent = pm.getExtent(Article.class, true);
it = extent.iterator();
while (it.hasNext()) {
a = (Article) it.next();
cat = a.getCatalogue();
if (cat != null) {
pm.deletePersistent(cat);
}
pm.deletePersistentAll(a.getMarches());
pm.deletePersistent(a);
}
pm.currentTransaction().commit();
pm.close();
}
}