Search in sources :

Example 16 with Wardrobe

use of org.jpox.samples.models.fitness.Wardrobe in project tests by datanucleus.

the class JDOQLContainerTest method testIsEmptyOredWithContains.

/**
 * Test isEmpty() "or"-ed with a contains clause, that is likely to fail
 * due to innner joins defeating the isEmpty() clause
 */
public void testIsEmptyOredWithContains() {
    PersistenceManager pm = pmf.getPersistenceManager();
    Transaction tx = pm.currentTransaction();
    try {
        tx.begin();
        Wardrobe wardrobe1 = new Wardrobe();
        Wardrobe wardrobe2 = new Wardrobe();
        wardrobe2.setModel("2 doors");
        Wardrobe wardrobe3 = new Wardrobe();
        wardrobe3.setModel("3 doors");
        pm.makePersistent(wardrobe1);
        pm.makePersistent(wardrobe2);
        pm.makePersistent(wardrobe3);
        Cloth whiteShirt = new Cloth();
        whiteShirt.setName("white shirt");
        Cloth blackShirt = new Cloth();
        blackShirt.setName("black shirt");
        Cloth skirt = new Cloth();
        skirt.setName("skirt");
        wardrobe3.getClothes().add(whiteShirt);
        wardrobe3.getClothes().add(skirt);
        wardrobe2.getClothes().add(blackShirt);
        tx.commit();
        tx.begin();
        Query q3 = pm.newQuery(Wardrobe.class, "clothes.isEmpty() || (clothes.contains(cloth) && cloth.name==\"white shirt\" )");
        q3.declareVariables("org.jpox.samples.models.fitness.Cloth cloth");
        q3.setOrdering("model ascending");
        Collection c3 = (Collection) q3.execute();
        assertEquals(2, c3.size());
        Object findId1 = JDOHelper.getObjectId(wardrobe1);
        Object findId2 = JDOHelper.getObjectId(wardrobe3);
        Iterator iter = c3.iterator();
        Object foundId1 = JDOHelper.getObjectId(iter.next());
        Object foundId2 = JDOHelper.getObjectId(iter.next());
        boolean ok = !foundId1.equals(foundId2) && (foundId1.equals(findId1) || foundId1.equals(findId2)) && (foundId2.equals(findId1) || foundId2.equals(findId2));
        assertTrue(ok);
        tx.commit();
    } finally {
        if (tx.isActive()) {
            tx.rollback();
        }
        pm.close();
        // Clean out our data
        FitnessHelper.cleanFitnessData(pmf);
    }
}
Also used : Transaction(javax.jdo.Transaction) Query(javax.jdo.Query) PersistenceManager(javax.jdo.PersistenceManager) Cloth(org.jpox.samples.models.fitness.Cloth) Iterator(java.util.Iterator) Collection(java.util.Collection) Wardrobe(org.jpox.samples.models.fitness.Wardrobe)

Example 17 with Wardrobe

use of org.jpox.samples.models.fitness.Wardrobe in project tests by datanucleus.

the class JDOQLContainerTest method testContainsInMapFields.

/**
 * Tests contains() in Map fields
 */
public void testContainsInMapFields() {
    Object idGym = null;
    PersistenceManager pm = pmf.getPersistenceManager();
    Transaction tx = pm.currentTransaction();
    try {
        tx.begin();
        Gym gym = new Gym();
        gym.setLocation("downtown");
        Gym gym2 = new Gym();
        gym2.setLocation("village");
        Wardrobe wardrobe2 = new Wardrobe();
        wardrobe2.setModel("2 doors");
        Wardrobe wardrobe3 = new Wardrobe();
        wardrobe3.setModel("3 doors");
        gym.getWardrobes().put(wardrobe2.getModel(), wardrobe2);
        gym.getWardrobes().put(wardrobe3.getModel(), wardrobe3);
        pm.makePersistent(gym);
        pm.makePersistent(gym2);
        Cloth whiteShirt = new Cloth();
        whiteShirt.setName("white shirt");
        Cloth blackShirt = new Cloth();
        blackShirt.setName("black shirt");
        Cloth skirt = new Cloth();
        skirt.setName("skirt");
        wardrobe3.getClothes().add(whiteShirt);
        wardrobe3.getClothes().add(skirt);
        wardrobe2.getClothes().add(blackShirt);
        tx.commit();
        idGym = JDOHelper.getObjectId(gym);
        tx.begin();
        Query q = pm.newQuery(Gym.class, "this.wardrobes.containsValue(w)");
        q.declareParameters("org.jpox.samples.models.fitness.Wardrobe w");
        Collection c = (Collection) q.execute(wardrobe3);
        assertEquals(1, c.size());
        assertEquals(idGym, JDOHelper.getObjectId(c.iterator().next()));
        assertEquals(2, gym.getWardrobes().size());
        tx.commit();
        tx.begin();
        Query q1 = pm.newQuery(Wardrobe.class, "gym.wardrobes.containsValue(this) && gym.location ==\"downtown\"");
        q1.declareVariables("org.jpox.samples.models.fitness.Gym gym");
        Collection c1 = (Collection) q1.execute();
        assertEquals(2, c1.size());
        assertTrue(c1.contains(wardrobe3));
        assertTrue(c1.contains(wardrobe2));
        tx.commit();
        tx.begin();
        Query q2 = pm.newQuery(Wardrobe.class, "gym.wardrobes.containsValue(this)");
        q2.declareParameters("org.jpox.samples.models.fitness.Gym gym");
        Collection c2 = (Collection) q2.execute(gym);
        assertEquals(2, c2.size());
        assertTrue(c2.contains(wardrobe3));
        assertTrue(c2.contains(wardrobe2));
        tx.commit();
    } finally {
        if (tx.isActive()) {
            tx.rollback();
        }
        pm.close();
        // Clean out our data
        FitnessHelper.cleanFitnessData(pmf);
    }
}
Also used : Transaction(javax.jdo.Transaction) Query(javax.jdo.Query) PersistenceManager(javax.jdo.PersistenceManager) Cloth(org.jpox.samples.models.fitness.Cloth) Collection(java.util.Collection) Gym(org.jpox.samples.models.fitness.Gym) Wardrobe(org.jpox.samples.models.fitness.Wardrobe)

Example 18 with Wardrobe

use of org.jpox.samples.models.fitness.Wardrobe in project tests by datanucleus.

the class JDOQLContainerTest method testMapIsEmpty.

/**
 * Test for the Map.isEmpty() method.
 */
public void testMapIsEmpty() {
    try {
        Gym gym1 = new Gym();
        gym1.setLocation("First floor");
        Wardrobe w1 = new Wardrobe();
        Wardrobe w2 = new Wardrobe();
        w1.setModel("2 door");
        w2.setModel("3 door");
        gym1.getWardrobes().put(w1.getModel(), w1);
        gym1.getWardrobes().put(w2.getModel(), w2);
        Gym gym2 = new Gym();
        gym2.setLocation("Second floor");
        PersistenceManager pm = pmf.getPersistenceManager();
        Transaction tx = pm.currentTransaction();
        try {
            tx.begin();
            pm.makePersistent(gym1);
            pm.makePersistent(gym2);
            tx.commit();
            // Try isEmpty() - should just return "Second floor"
            tx.begin();
            Query q = pm.newQuery(Gym.class);
            q.setFilter("wardrobes.isEmpty()");
            Collection c = (Collection) q.execute();
            assertEquals(1, c.size());
            assertEquals(((Gym) c.iterator().next()).getLocation(), "Second floor");
            tx.commit();
            // Try !isEmpty() - should return "First floor"
            tx.begin();
            q = pm.newQuery(Gym.class);
            q.setFilter("!wardrobes.isEmpty()");
            c = (Collection) q.execute();
            assertEquals(1, c.size());
            assertEquals(((Gym) c.iterator().next()).getLocation(), "First floor");
            tx.commit();
        } catch (Exception e) {
            LOG.error("Exception thrown during test", e);
            fail("Exception thrown while executing query with map.isEmpty()");
        } finally {
            if (tx.isActive()) {
                tx.rollback();
            }
            pm.close();
        }
    } finally {
        // Clean out our data
        FitnessHelper.cleanFitnessData(pmf);
    }
}
Also used : Transaction(javax.jdo.Transaction) Query(javax.jdo.Query) PersistenceManager(javax.jdo.PersistenceManager) Collection(java.util.Collection) Gym(org.jpox.samples.models.fitness.Gym) Wardrobe(org.jpox.samples.models.fitness.Wardrobe) JDOUserException(javax.jdo.JDOUserException)

Example 19 with Wardrobe

use of org.jpox.samples.models.fitness.Wardrobe in project tests by datanucleus.

the class JDOQLContainerTest method testQueryUsesContainsKeyTwiceOnFieldWithNamespace.

/**
 * test query with "field.containsKey(x) && field.containsKey(y)"
 *
 * namespace put related expressions inside parentheses
 */
public void testQueryUsesContainsKeyTwiceOnFieldWithNamespace() {
    try {
        Gym gym1 = new Gym();
        gym1.setName("Cinema");
        gym1.setLocation("First floor");
        Wardrobe w1 = new Wardrobe();
        Wardrobe w2 = new Wardrobe();
        Wardrobe w3 = new Wardrobe();
        Wardrobe w4 = new Wardrobe();
        w1.setModel("2 door");
        w2.setModel("3 door");
        w3.setModel("4 door");
        w4.setModel("5 door");
        gym1.getWardrobes2().put(w1, w1.getModel());
        gym1.getWardrobes2().put(w2, w2.getModel());
        gym1.getWardrobes2().put(w3, w3.getModel());
        gym1.getWardrobes2().put(w4, w4.getModel());
        Gym gym2 = new Gym();
        gym2.setName("Shopping");
        gym2.setLocation("Second floor");
        gym2.getWardrobes2().put(w1, w1.getModel());
        gym2.getWardrobes2().put(w2, w2.getModel());
        Cloth c1 = new Cloth();
        c1.setName("green shirt");
        Cloth c2 = new Cloth();
        c2.setName("red shirt");
        Cloth c3 = new Cloth();
        c3.setName("blue shirt");
        GymEquipment ge1 = new GymEquipment();
        ge1.setName("Weight");
        GymEquipment ge2 = new GymEquipment();
        ge2.setName("Yoga");
        GymEquipment ge3 = new GymEquipment();
        ge3.setName("Pilates");
        GymEquipment ge4 = new GymEquipment();
        ge4.setName("Abdominal");
        gym1.getEquipments2().put(ge1, ge1.getName());
        gym1.getEquipments2().put(ge2, ge2.getName());
        gym2.getEquipments2().put(ge3, ge3.getName());
        gym2.getEquipments2().put(ge4, ge4.getName());
        gym1.getPartners2().put(gym2, gym2.getName());
        PersistenceManager pm = pmf.getPersistenceManager();
        Transaction tx = pm.currentTransaction();
        try {
            tx.begin();
            pm.makePersistent(gym1);
            pm.makePersistent(gym2);
            tx.commit();
            tx.begin();
            Query q = pm.newQuery(Gym.class);
            q.setFilter("(wardrobes2.containsKey(w1) && w1.model == \"4 door\") && (wardrobes2.containsKey(w2) && w2.model == \"3 door\")");
            q.declareVariables("Wardrobe w1; Wardrobe w2");
            Collection c = (Collection) q.execute();
            assertEquals(1, c.size());
            q = pm.newQuery(Gym.class);
            q.setFilter("(wardrobes2.containsKey(w1) && w1.model == \"2 door\") && (wardrobes2.containsKey(w2) && w2.model == \"3 door\")");
            q.declareVariables("Wardrobe w1; Wardrobe w2");
            c = (Collection) q.execute();
            assertEquals(2, c.size());
            q = pm.newQuery(Gym.class);
            q.setFilter("(wardrobes2.containsKey(w1) && w1.model == \"2 door\") || (wardrobes2.containsKey(w2) && w2.model == \"5 door\")");
            q.declareVariables("Wardrobe w1; Wardrobe w2");
            c = (Collection) q.execute();
            assertEquals(2, c.size());
            tx.commit();
        } finally {
            if (tx.isActive()) {
                tx.rollback();
            }
            pm.close();
        }
    } finally {
        // Clean out our data
        FitnessHelper.cleanFitnessData(pmf);
    }
}
Also used : Transaction(javax.jdo.Transaction) Query(javax.jdo.Query) PersistenceManager(javax.jdo.PersistenceManager) Cloth(org.jpox.samples.models.fitness.Cloth) Collection(java.util.Collection) Gym(org.jpox.samples.models.fitness.Gym) Wardrobe(org.jpox.samples.models.fitness.Wardrobe) GymEquipment(org.jpox.samples.models.fitness.GymEquipment)

Example 20 with Wardrobe

use of org.jpox.samples.models.fitness.Wardrobe in project tests by datanucleus.

the class JDOQLContainerTest method testQueryUsesContainsValueOnceOnOneUnboundVariableUsingParameters.

/**
 * test query with "field.containsValue(x)" using a workaround
 */
public void testQueryUsesContainsValueOnceOnOneUnboundVariableUsingParameters() {
    Gym gym1 = new Gym();
    gym1.setName("Cinema");
    gym1.setLocation("First floor");
    Wardrobe w1 = new Wardrobe();
    Wardrobe w2 = new Wardrobe();
    Wardrobe w3 = new Wardrobe();
    Wardrobe w4 = new Wardrobe();
    w1.setModel("2 door");
    w2.setModel("3 door");
    w3.setModel("4 door");
    w4.setModel("5 door");
    gym1.getWardrobes().put(w1.getModel(), w1);
    gym1.getWardrobes().put(w2.getModel(), w2);
    gym1.getWardrobes().put(w3.getModel(), w3);
    gym1.getWardrobes().put(w4.getModel(), w4);
    Gym gym2 = new Gym();
    gym2.setName("Shopping");
    gym2.setLocation("Second floor");
    gym2.getWardrobes().put(w1.getModel(), w1);
    gym2.getWardrobes().put(w2.getModel(), w2);
    Cloth c1 = new Cloth();
    c1.setName("green shirt");
    Cloth c2 = new Cloth();
    c2.setName("red shirt");
    Cloth c3 = new Cloth();
    c3.setName("blue shirt");
    GymEquipment ge1 = new GymEquipment();
    ge1.setName("Weight");
    GymEquipment ge2 = new GymEquipment();
    ge2.setName("Yoga");
    GymEquipment ge3 = new GymEquipment();
    ge3.setName("Pilates");
    GymEquipment ge4 = new GymEquipment();
    ge4.setName("Abdominal");
    gym1.getEquipments().put(ge1.getName(), ge1);
    gym1.getEquipments().put(ge2.getName(), ge2);
    gym2.getEquipments().put(ge3.getName(), ge3);
    gym2.getEquipments().put(ge4.getName(), ge4);
    gym1.getPartners().put(gym2.getName(), gym2);
    PersistenceManager pm = pmf.getPersistenceManager();
    Transaction tx = pm.currentTransaction();
    try {
        tx.begin();
        pm.makePersistent(gym1);
        pm.makePersistent(gym2);
        tx.commit();
        tx.begin();
        Query q = pm.newQuery(GymEquipment.class);
        q.setFilter("name == 'Pilates'");
        q.setUnique(true);
        GymEquipment ge = (GymEquipment) q.execute();
        q = pm.newQuery(Gym.class);
        q.setFilter("name == 'Shopping'");
        q.setUnique(true);
        Gym g = (Gym) q.execute();
        // MAKE sure field is loaded, becase the query will use it
        g.getEquipments();
        q = pm.newQuery(Gym.class);
        q.setFilter("equipments.containsValue(ge) && g.equipments.containsValue(ge)");
        q.declareParameters("GymEquipment ge, Gym g");
        Collection c = (Collection) q.execute(ge, g);
        assertEquals(1, c.size());
        tx.commit();
    } finally {
        if (tx.isActive()) {
            tx.rollback();
        }
        pm.close();
        // Clean out our data
        FitnessHelper.cleanFitnessData(pmf);
    }
}
Also used : Transaction(javax.jdo.Transaction) Query(javax.jdo.Query) PersistenceManager(javax.jdo.PersistenceManager) Cloth(org.jpox.samples.models.fitness.Cloth) Collection(java.util.Collection) Gym(org.jpox.samples.models.fitness.Gym) Wardrobe(org.jpox.samples.models.fitness.Wardrobe) GymEquipment(org.jpox.samples.models.fitness.GymEquipment)

Aggregations

PersistenceManager (javax.jdo.PersistenceManager)42 Transaction (javax.jdo.Transaction)42 Wardrobe (org.jpox.samples.models.fitness.Wardrobe)42 Query (javax.jdo.Query)40 Gym (org.jpox.samples.models.fitness.Gym)39 Cloth (org.jpox.samples.models.fitness.Cloth)36 Collection (java.util.Collection)32 GymEquipment (org.jpox.samples.models.fitness.GymEquipment)25 JDOUserException (javax.jdo.JDOUserException)14 List (java.util.List)8 HashMap (java.util.HashMap)3 Map (java.util.Map)3 Iterator (java.util.Iterator)1 JDODetachedFieldAccessException (javax.jdo.JDODetachedFieldAccessException)1 JDOObjectNotFoundException (javax.jdo.JDOObjectNotFoundException)1 JDOPersistenceManager (org.datanucleus.api.jdo.JDOPersistenceManager)1