Search in sources :

Example 1 with Currency

use of org.jpox.samples.models.currency.Currency in project tests by datanucleus.

the class RelationshipTest method test1toNBidir_1to1Unidir.

/**
 * Test case for 1-N bidir relationships + 1-1 unidir relationships
 */
public void test1toNBidir_1to1Unidir() throws Exception {
    // This test currently relies on identity fields
    if (!storeMgr.supportsValueGenerationStrategy("identity")) {
        // Lets just say it passed :-)
        return;
    }
    try {
        // prepare data
        PersistenceManager pm = pmf.getPersistenceManager();
        Transaction tx = pm.currentTransaction();
        Object idEUR = null;
        Object idUSD = null;
        Object idCHF = null;
        try {
            tx.begin();
            List cs = new ArrayList();
            Currency chf = new Currency("CHF");
            Currency eur = new Currency("EUR");
            Currency usd = new Currency("USD");
            cs.add(chf);
            cs.add(eur);
            cs.add(usd);
            List c = new ArrayList();
            c.add(new Rate(usd, eur, 0.9));
            c.add(new Rate(usd, chf, 1.3));
            usd.setRates(c);
            c = new ArrayList();
            c.add(new Rate(eur, chf, 1.5));
            c.add(new Rate(eur, usd, 1.1));
            eur.setRates(c);
            c = new ArrayList();
            c.add(new Rate(chf, eur, 0.7));
            c.add(new Rate(chf, usd, 0.8));
            chf.setRates(c);
            pm.makePersistentAll(cs);
            tx.commit();
            idEUR = pm.getObjectId(eur);
            idUSD = pm.getObjectId(usd);
            idCHF = pm.getObjectId(chf);
        } catch (Exception e) {
            LOG.error("Exception in test", e);
            fail("Exception thrown while creating 1-N bi-directional relationships + 1-1 unidirecional relationships data : " + e.getMessage());
        } finally {
            if (tx.isActive()) {
                tx.rollback();
            }
            pm.close();
        }
        pm = pmf.getPersistenceManager();
        tx = pm.currentTransaction();
        try {
            tx.begin();
            Currency chf = (Currency) pm.getObjectById(idCHF, true);
            Currency eur = (Currency) pm.getObjectById(idEUR, true);
            Currency usd = (Currency) pm.getObjectById(idUSD, true);
            assertEquals("CHF", "CHF", chf.getCurrencyCode());
            assertEquals("CHF", 2, chf.getRates().size());
            assertEquals("CHF", "EUR", ((Rate) chf.getRates().get(0)).getTarget().getCurrencyCode());
            assertEquals("CHF", 0.7, ((Rate) chf.getRates().get(0)).getRate(), 0);
            assertEquals("CHF", "USD", ((Rate) chf.getRates().get(1)).getTarget().getCurrencyCode());
            assertEquals("CHF", 0.8, ((Rate) chf.getRates().get(1)).getRate(), 0);
            assertEquals("EUR", "EUR", eur.getCurrencyCode());
            assertEquals("EUR", 2, eur.getRates().size());
            assertEquals("EUR", "CHF", ((Rate) eur.getRates().get(0)).getTarget().getCurrencyCode());
            assertEquals("EUR", 1.5, ((Rate) eur.getRates().get(0)).getRate(), 0);
            assertEquals("EUR", "USD", ((Rate) eur.getRates().get(1)).getTarget().getCurrencyCode());
            assertEquals("EUR", 1.1, ((Rate) eur.getRates().get(1)).getRate(), 0);
            assertEquals("USD", "USD", usd.getCurrencyCode());
            assertEquals("USD", 2, usd.getRates().size());
            assertEquals("USD", "EUR", ((Rate) usd.getRates().get(0)).getTarget().getCurrencyCode());
            assertEquals("USD", 0.9, ((Rate) usd.getRates().get(0)).getRate(), 0);
            assertEquals("USD", "CHF", ((Rate) usd.getRates().get(1)).getTarget().getCurrencyCode());
            assertEquals("USD", 1.3, ((Rate) usd.getRates().get(1)).getRate(), 0);
            tx.commit();
        } catch (Exception e) {
            LOG.error("Exception in test", e);
            fail("Exception thrown while creating 1-N bi-directional relationships + 1-1 unidirecional relationships data : " + e.getMessage());
        } finally {
            if (tx.isActive()) {
                tx.rollback();
            }
            pm.close();
        }
    } finally {
        // Clean out any created data
        PersistenceManager pm = pmf.getPersistenceManager();
        Transaction tx = pm.currentTransaction();
        try {
            tx.begin();
            Extent ex = pm.getExtent(Rate.class);
            Iterator iter = ex.iterator();
            while (iter.hasNext()) {
                Rate rate = (Rate) iter.next();
                if (rate.getSource() != null) {
                    Currency source = rate.getSource();
                    rate.setSource(null);
                    source.setRates(null);
                }
                if (rate.getTarget() != null) {
                    rate.setTarget(null);
                }
            }
            tx.commit();
        } finally {
            if (tx.isActive()) {
                tx.rollback();
            }
            pm.close();
        }
        clean(Rate.class);
        clean(Currency.class);
    }
}
Also used : Transaction(javax.jdo.Transaction) PersistenceManager(javax.jdo.PersistenceManager) Extent(javax.jdo.Extent) Rate(org.jpox.samples.models.currency.Rate) Currency(org.jpox.samples.models.currency.Currency) ArrayList(java.util.ArrayList) Iterator(java.util.Iterator) List(java.util.List) ArrayList(java.util.ArrayList) JDOObjectNotFoundException(javax.jdo.JDOObjectNotFoundException)

Aggregations

ArrayList (java.util.ArrayList)1 Iterator (java.util.Iterator)1 List (java.util.List)1 Extent (javax.jdo.Extent)1 JDOObjectNotFoundException (javax.jdo.JDOObjectNotFoundException)1 PersistenceManager (javax.jdo.PersistenceManager)1 Transaction (javax.jdo.Transaction)1 Currency (org.jpox.samples.models.currency.Currency)1 Rate (org.jpox.samples.models.currency.Rate)1