Search in sources :

Example 1 with PersonHolder

use of org.jpox.samples.models.company.PersonHolder in project tests by datanucleus.

the class JDOQLResultTest method testNewObjectInResult.

/**
 * Test case to use the JDO 2.0 setResultClass().
 */
public void testNewObjectInResult() {
    try {
        PersistenceManager pm = pmf.getPersistenceManager();
        Transaction tx = pm.currentTransaction();
        try {
            tx.begin();
            Person p1 = new Person(101, "Fred", "Flintstone", "fred.flintstone@jpox.com");
            p1.setAge(34);
            Person p2 = new Person(102, "Barney", "Rubble", "barney.rubble@jpox.com");
            p2.setAge(37);
            pm.makePersistent(p1);
            pm.makePersistent(p2);
            tx.commit();
        } finally {
            if (tx.isActive()) {
                tx.rollback();
            }
        }
        // Query using PersonHolder result output
        try {
            tx.begin();
            // check with default constructor
            Query q = pm.newQuery(pm.getExtent(Person.class, false));
            q.setFilter("age > 35");
            q.setResult("new org.jpox.samples.models.company.PersonHolder()");
            List results = (List) q.execute();
            assertEquals(1, results.size());
            Iterator resultsIter = results.iterator();
            if (resultsIter.hasNext()) {
                Object obj = resultsIter.next();
                assertTrue("ResultClass of query is incorrect. Should have been " + PersonHolder.class.getName() + " but is " + obj.getClass().getName(), PersonHolder.class == obj.getClass());
                PersonHolder holder = (PersonHolder) obj;
                assertNull(holder.getPerson1());
            }
            q.closeAll();
            // check with simple argument
            q = pm.newQuery(pm.getExtent(Person.class, false));
            q.setFilter("age > 35");
            q.setResult("new org.jpox.samples.models.company.PersonHolder(this)");
            results = (List) q.execute();
            assertEquals(1, results.size());
            resultsIter = results.iterator();
            if (resultsIter.hasNext()) {
                Object obj = resultsIter.next();
                assertTrue("ResultClass of query is incorrect. Should have been " + PersonHolder.class.getName() + " but is " + obj.getClass().getName(), PersonHolder.class == obj.getClass());
                PersonHolder holder = (PersonHolder) obj;
                assertNotNull(holder.getPerson1());
                assertNull(holder.getPerson2());
            }
            q.closeAll();
            // check multiple args and with a literal null
            q = pm.newQuery(pm.getExtent(Person.class, false));
            q.setFilter("age > 35");
            q.setResult("new org.jpox.samples.models.company.PersonHolder(this,null,this.firstName)");
            results = (List) q.execute();
            assertEquals(1, results.size());
            resultsIter = results.iterator();
            if (resultsIter.hasNext()) {
                Object obj = resultsIter.next();
                assertTrue("ResultClass of query is incorrect. Should have been " + PersonHolder.class.getName() + " but is " + obj.getClass().getName(), PersonHolder.class == obj.getClass());
                PersonHolder holder = (PersonHolder) obj;
                assertNotNull(holder.getPerson1());
                assertNull(holder.getPerson2());
                assertEquals("Barney", holder.getFirstName().trim());
            }
            q.closeAll();
            // add more literals
            q = pm.newQuery(pm.getExtent(Person.class, false));
            q.setFilter("age > 35");
            q.setResult("new org.jpox.samples.models.company.PersonHolder(this,null,this.firstName,'string',1)");
            results = (List) q.execute();
            assertEquals(1, results.size());
            resultsIter = results.iterator();
            if (resultsIter.hasNext()) {
                Object obj = resultsIter.next();
                assertTrue("ResultClass of query is incorrect. Should have been " + PersonHolder.class.getName() + " but is " + obj.getClass().getName(), PersonHolder.class == obj.getClass());
                PersonHolder holder = (PersonHolder) obj;
                assertNotNull(holder.getPerson1());
                assertNull(holder.getPerson2());
                assertEquals("Barney", holder.getFirstName().trim());
                assertEquals("string", holder.getLiteralString());
                assertEquals(1, holder.getLiteralInt());
            }
            q.closeAll();
            // make sure if objects after literal, they work
            q = pm.newQuery(pm.getExtent(Person.class, false));
            q.setFilter("age > 35");
            q.setResult("new org.jpox.samples.models.company.PersonHolder(this,null,this.firstName,'string',1,this)");
            results = (List) q.execute();
            assertEquals(1, results.size());
            resultsIter = results.iterator();
            if (resultsIter.hasNext()) {
                Object obj = resultsIter.next();
                assertTrue("ResultClass of query is incorrect. Should have been " + PersonHolder.class.getName() + " but is " + obj.getClass().getName(), PersonHolder.class == obj.getClass());
                PersonHolder holder = (PersonHolder) obj;
                assertNotNull(holder.getPerson1());
                assertNull(holder.getPerson2());
                assertEquals("Barney", holder.getFirstName().trim());
                assertEquals("string", holder.getLiteralString());
                assertEquals(1, holder.getLiteralInt());
            }
            q.closeAll();
            // test new Object(new Object())
            q = pm.newQuery(pm.getExtent(Person.class, false));
            q.setFilter("age > 35");
            q.setResult("new org.jpox.samples.models.company.PersonHolder(new org.jpox.samples.models.company.PersonHolder(new org.jpox.samples.models.company.PersonHolder(this),this),this)");
            results = (List) q.execute();
            assertEquals(1, results.size());
            resultsIter = results.iterator();
            if (resultsIter.hasNext()) {
                Object obj = resultsIter.next();
                assertTrue("ResultClass of query is incorrect. Should have been " + PersonHolder.class.getName() + " but is " + obj.getClass().getName(), PersonHolder.class == obj.getClass());
                PersonHolder holder = (PersonHolder) obj;
                assertNotNull(holder.getPerson1());
                assertNotNull(holder.getPerson2());
            }
            q.closeAll();
            // test new Object(new Object())
            q = pm.newQuery(pm.getExtent(Person.class, false));
            q.setFilter("age > 35");
            q.setResult("this, 0, new org.jpox.samples.models.company.PersonHolder(new org.jpox.samples.models.company.PersonHolder(new org.jpox.samples.models.company.PersonHolder(this),this),this), 1, null");
            results = (List) q.execute();
            assertEquals(1, results.size());
            resultsIter = results.iterator();
            if (resultsIter.hasNext()) {
                Object[] obj = (Object[]) resultsIter.next();
                assertTrue("ResultClass of query is incorrect. Should have been " + PersonHolder.class.getName() + " but is " + obj[2].getClass().getName(), PersonHolder.class == obj[2].getClass());
                PersonHolder holder = (PersonHolder) obj[2];
                assertNotNull(holder.getPerson1());
                assertNotNull(holder.getPerson2());
                assertNotNull(obj[0]);
                assertEquals(obj[0], holder.getPerson1());
                assertEquals(0, ((Long) obj[1]).intValue());
                assertNotNull(obj[3]);
                assertEquals(1, ((Long) obj[3]).intValue());
                assertNull(obj[4]);
            }
            q.closeAll();
            tx.commit();
        } catch (JDOException ex) {
            LOG.error("Exception in query", ex);
            fail(ex.getMessage());
        } catch (Exception e) {
            LOG.error("Exception caught", e);
            fail(e.getMessage());
        } finally {
            if (tx.isActive()) {
                tx.rollback();
            }
            pm.close();
        }
    } finally {
        // Clean out our data
        clean(Person.class);
    }
}
Also used : Transaction(javax.jdo.Transaction) Query(javax.jdo.Query) PersistenceManager(javax.jdo.PersistenceManager) ListIterator(java.util.ListIterator) Iterator(java.util.Iterator) ArrayList(java.util.ArrayList) List(java.util.List) Person(org.jpox.samples.models.company.Person) PersonHolder(org.jpox.samples.models.company.PersonHolder) JDOException(javax.jdo.JDOException) JDOUserException(javax.jdo.JDOUserException) JDOException(javax.jdo.JDOException)

Aggregations

ArrayList (java.util.ArrayList)1 Iterator (java.util.Iterator)1 List (java.util.List)1 ListIterator (java.util.ListIterator)1 JDOException (javax.jdo.JDOException)1 JDOUserException (javax.jdo.JDOUserException)1 PersistenceManager (javax.jdo.PersistenceManager)1 Query (javax.jdo.Query)1 Transaction (javax.jdo.Transaction)1 Person (org.jpox.samples.models.company.Person)1 PersonHolder (org.jpox.samples.models.company.PersonHolder)1