/**
* Copyright (C) 2001-2004 France Telecom R&D
*/
package org.objectweb.speedo.pobjects.intelli;
import org.objectweb.speedo.SpeedoTestHelper;
import org.objectweb.util.monolog.api.BasicLevel;
import java.util.Collection;
import java.util.Iterator;
import javax.jdo.Extent;
import javax.jdo.PersistenceManager;
import javax.jdo.Query;
/**
*
*
* @author chassase
*/
public class TestIntelli extends SpeedoTestHelper {
public TestIntelli(String name) {
super(name);
}
protected String getLoggerName() {
return LOG_NAME + ".intelli";
}
public void testImbricatedContains() {
logger.log(BasicLevel.DEBUG, "testSequenceIdNavigateToPrimitive");
PersistenceManager pm = pmf.getPersistenceManager();
final int nbAdmin = 5;
final int nbRolePerAdmin = 5;
final int nbScopePerRole = 5;
final Class[] classes = new Class[]{Admin.class, Role.class, Scope.class};
autoClean(pm, classes);
//Fill the database
pm.currentTransaction().begin();
for(int i=0; i<nbAdmin; i++) {
Admin admin = new Admin();
admin.setF1("admin" + i);
for(int j=0; j<nbRolePerAdmin; j++) {
Role role = new Role();
admin.getRoles().add(role);
role.setF1("role" + j);
for(int k=0; k<nbScopePerRole; k++) {
Scope scope = new Scope();
role.getScopes().add(scope);
scope.setF1("scope" + k);
scope.setRole(role);
}
}
pm.makePersistent(admin);
}
pm.currentTransaction().commit();
pm.currentTransaction().begin();
Query q = pm.newQuery(Admin.class);
q.setFilter("((roles.contains(role)) && (role.scopes.contains(scope)) && (scope.f1.matches(\"%2\")) && (scope.f1.matches(p1)))");
q.declareVariables("Role role; Scope scope");
q.declareParameters("String p1");
Collection c = (Collection) q.execute("%2");
assertEquals("Bad result size", nbAdmin * nbRolePerAdmin, c.size());
pm.currentTransaction().commit();
autoClean(pm, classes);
pm.close();
}
public void testMisc() {
logger.log(BasicLevel.DEBUG, "testSequenceIdNavigateToPrimitive");
PersistenceManager pm = pmf.getPersistenceManager();
final int nbSensor = 10;
final int nbRoomPerArea = 10;
final int nbStatePerSensor = 5;
final Class[] classes = new Class[]{Sensor.class, Area.class, State.class, Room.class};
autoClean(pm, classes);
//Fill the database
pm.currentTransaction().begin();
for(int i=0; i<nbSensor; i++) {
Sensor sensor = new Sensor(i);
for(int j=0; j<nbStatePerSensor; j++) {
State state = new State(i*100 + j);
sensor.getStates().add(state);
}
Area area = new Area(i);
sensor.setArea(area);
for(int j=0; j<nbRoomPerArea; j++) {
Room room = new Room(i*100 + j);
area.getRooms().add(room);
}
pm.makePersistent(sensor);
}
pm.currentTransaction().commit();
pm.currentTransaction().begin();
Query q = pm.newQuery(Sensor.class);
q.setFilter("((area.rooms.contains(r)) && (r.roomid == rid) && (states.contains(s)) && (s.stateid == sid))");
q.declareVariables("Room r; StateItf s");
q.declareParameters("int sid, int rid");
Collection c = (Collection) q.execute(new Integer(102), new Integer(103));
pm.currentTransaction().commit();
autoClean(pm, classes);
pm.close();
}
private void autoClean(PersistenceManager pm, Class[] classes) {
pm.currentTransaction().begin();
for(int i=0; i<classes.length; i++) {
Extent extent = pm.getExtent(classes[i], false);
for(Iterator it = extent.iterator(); it.hasNext();) {
pm.deletePersistent(it.next());
}
extent.closeAll();
}
pm.currentTransaction().commit();
}
}