Package org.apache.tuscany.das.rdb.test

Source Code of org.apache.tuscany.das.rdb.test.CrudWithChangeHistory

/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License.  You may obtain a copy of the License at
*
*   http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied.  See the License for the
* specific language governing permissions and limitations
* under the License.   
*/
package org.apache.tuscany.das.rdb.test;

/*
* This provdes the simplest examples that make use of the change history. The assumptions are:
*
* Single type Change history utilized Dynamic DataObjects
*
*
*/

import java.util.Iterator;

import org.apache.tuscany.das.rdb.Command;
import org.apache.tuscany.das.rdb.ConfigHelper;
import org.apache.tuscany.das.rdb.DAS;
import org.apache.tuscany.das.rdb.config.Table;
import org.apache.tuscany.das.rdb.test.data.CustomerData;
import org.apache.tuscany.das.rdb.test.data.OrderDetailsData;
import org.apache.tuscany.das.rdb.test.framework.DasTest;

import commonj.sdo.DataObject;

public class CrudWithChangeHistory extends DasTest {

    protected void setUp() throws Exception {
        super.setUp();
        new CustomerData(getAutoConnection()).refresh();
        new OrderDetailsData(getAutoConnection()).refresh();
    }

    protected void tearDown() throws Exception {
        super.tearDown();
    }

    public void testDeleteAndCreate() throws Exception {
        DAS das = DAS.FACTORY.createDAS(getConfig("basicCustomerMappingWithCUD2.xml"), getConnection());
        // Read customer 1
        Command select = das.createCommand("Select * from CUSTOMER");
        DataObject root = select.executeQuery();

        DataObject customer = (DataObject) root.get("CUSTOMER[1]");

        int customerId = customer.getInt("ID");
        // Modify customer
        customer.delete();

        DataObject newCustomer = root.createDataObject("CUSTOMER");
        newCustomer.setInt("ID", 9999);
        newCustomer.setString("LASTNAME", "Jones");

        // Build apply changes command
        das.applyChanges(root);

        // Verify changes
        root = select.executeQuery();
        boolean found = false;
        Iterator i = root.getList("CUSTOMER").iterator();
        while (i.hasNext()) {
            customer = (DataObject) i.next();
            assertFalse(customerId == customer.getInt("ID"));
            if (customer.getInt("ID") == 9999) {
                found = true;
            }
        }

        assertTrue(found);

    }

    /**
     * Read and modify a customer. Provide needed Create/Update/Delete statements programatically
     */
    public void testReadModifyApply() throws Exception {

        // Provide updatecommand programmatically via config
        ConfigHelper helper = new ConfigHelper();
        Table customerTable = helper.addTable("CUSTOMER", "CUSTOMER");
        helper.addUpdateStatement(customerTable, "update CUSTOMER set LASTNAME = ?, ADDRESS = ? "
                + "where ID = ?", "LASTNAME ADDRESS ID");

        DAS das = DAS.FACTORY.createDAS(helper.getConfig(), getConnection());
        // Read customer 1
        Command select = das.createCommand("Select * from CUSTOMER where ID = 1");
        DataObject root = select.executeQuery();
        assertFalse(root.get("CUSTOMER[1]/LASTNAME").equals("Pavick"));

        DataObject customer = (DataObject) root.get("CUSTOMER[1]");

        // Modify customer
        customer.set("LASTNAME", "Pavick");

        // Build apply changes command
        das.applyChanges(root);

        // Verify changes
        root = select.executeQuery();
        assertEquals("Pavick", root.getString("CUSTOMER[1]/LASTNAME"));

    }

    /**
     * Read and modify a customer. Provide needed Create/Update/Delete statements via xml file
     */
    public void testReadModifyApply1() throws Exception {

        DAS das = DAS.FACTORY.createDAS(getConfig("basicCustomerMappingWithCUD.xml"), getConnection());
        // Read customer 1
        Command select = das.createCommand("Select * from CUSTOMER where ID = 1");
        DataObject root = select.executeQuery();
        assertFalse(root.get("CUSTOMER[1]/LASTNAME").equals("Pavick"));

        DataObject customer = (DataObject) root.get("CUSTOMER[1]");

        // Modify customer
        customer.set("LASTNAME", "Pavick");

        // Build apply changes command
        das.applyChanges(root);

        // Verify changes
        root = select.executeQuery();
        assertEquals("Pavick", root.getString("CUSTOMER[1]/LASTNAME"));

    }

    /**
     * Same as previous but: Utilizes generated CUD statements Key info provided programatically
     */
    public void testReadModifyApply2() throws Exception {

        DAS das = DAS.FACTORY.createDAS(getConnection());
        // Read customer with particular ID
        Command select = das.createCommand("Select * from CUSTOMER where ID = 1");
        DataObject root = select.executeQuery();
        assertFalse(root.get("CUSTOMER[1]/LASTNAME").equals("Pavick"));

        DataObject customer = root.getDataObject("CUSTOMER[1]");

        // Modify customer
        customer.set("LASTNAME", "Pavick");

        // Build apply changes command
        das.applyChanges(root);

        // Verify the change
        root = select.executeQuery();
        assertEquals("Pavick", root.getDataObject("CUSTOMER[1]").getString("LASTNAME"));

    }

    /**
     * Builds on previous but: 1. Key info provided via XML file
     */
    public void testReadModifyApply3() throws Exception {
        DAS das = DAS.FACTORY.createDAS(getConfig("basicCustomerMapping.xml"), getConnection());
        // Read customer with particular ID
        Command select = das.createCommand("Select * from CUSTOMER where ID = 1");
        DataObject root = select.executeQuery();
        assertFalse(root.get("CUSTOMER[1]/LASTNAME").equals("Pavick"));

        DataObject customer = (DataObject) root.get("CUSTOMER[1]");

        // Modify customer
        customer.set("LASTNAME", "Pavick");

        // Build apply changes command
        das.applyChanges(root);

        // Verify the change
        root = select.executeQuery();
        assertEquals("Pavick", root.getDataObject("CUSTOMER[1]").getString("LASTNAME"));

    }

    /**
     * Builds on previous but: 1. Uses a named command
     */
    public void testReadModifyApply4() throws Exception {
        DAS das = DAS.FACTORY.createDAS(getConfig("CustomerConfig.xml"), getConnection());
        // Read customer with particular ID
        Command select = das.getCommand("getCustomer");
        select.setParameter(1, new Integer(1));
        DataObject root = select.executeQuery();
        assertFalse(root.get("CUSTOMER[1]/LASTNAME").equals("Pavick"));

        DataObject customer = (DataObject) root.get("CUSTOMER[1]");

        // Modify customer
        customer.set("LASTNAME", "Pavick");

        // Build apply changes command
        das.applyChanges(root);

        // Verify the change
        root = select.executeQuery();
        assertEquals("Pavick", root.getDataObject("CUSTOMER[1]").getString("LASTNAME"));

    }
   
    public void testReadModifyApplyMultipleRows() throws Exception {
        DAS das = DAS.FACTORY.createDAS(getConnection());
        // Verify pre-condition
        Command select = das.createCommand("Select * from CUSTOMER");
        DataObject root = select.executeQuery();
        assertFalse(root.get("CUSTOMER[1]/LASTNAME").equals("Pavick"));
        assertFalse(root.get("CUSTOMER[2]/LASTNAME").equals("Silva"));

       
        // Read and modify customer 1
        DataObject customer1 = (DataObject) root.get("CUSTOMER[1]");
        customer1.set("LASTNAME", "Pavick");

        // Read and modify customer 2
        DataObject customer2 = (DataObject) root.get("CUSTOMER[2]");
        customer2.set("LASTNAME", "Silva");
       
        // Build apply changes command
        das.applyChanges(root);

        // Verify changes
        root = select.executeQuery();
        assertEquals("Pavick", root.getString("CUSTOMER[1]/LASTNAME"));
        assertEquals("Silva", root.getString("CUSTOMER[2]/LASTNAME"));
    }   
   
    /**
     * Test ability to handle multiple changes to the graph including Creates/Updates/Deletes Employs generated CUD
     */
    public void testReadModifyDeleteInsertApply() throws Exception {

        DAS das = DAS.FACTORY.createDAS(getConfig("basicCustomerMapping.xml"), getConnection());
        // Read some customers
        Command select = das.createCommand("Select * from CUSTOMER where LASTNAME = 'Williams'");
        DataObject root = select.executeQuery();

        DataObject cust1 = (DataObject) root.getList("CUSTOMER").get(0);
        DataObject cust2 = (DataObject) root.getList("CUSTOMER").get(1);
        DataObject cust3 = (DataObject) root.getList("CUSTOMER").get(2);

        // Modify a customer
        cust1.set("LASTNAME", "Pavick");
        int cust1ID = cust1.getInt("ID");

        // Save IDs before delete
        int cust2ID = cust2.getInt("ID");
        int cust3ID = cust3.getInt("ID");
        // Delete a couple
        cust2.delete();
        cust3.delete();

        // Create a new customer
        DataObject cust4 = root.createDataObject("CUSTOMER");
        cust4.set("ID", new Integer(100));
        cust4.set("ADDRESS", "5528 Wells Fargo Drive");
        cust4.set("LASTNAME", "Gerkin");

        // Build apply changes command
        das.applyChanges(root);

        // Verify deletes
        select = das.createCommand("Select * from CUSTOMER where ID = ?");
        select.setParameter(1, new Integer(cust2ID));
        root = select.executeQuery();
        assertTrue(root.getList("CUSTOMER").isEmpty());
        // reparameterize same command
        select.setParameter(1, new Integer(cust3ID));
        root = select.executeQuery();
        assertTrue(root.getList("CUSTOMER").isEmpty());

        // verify insert
        select.setParameter(1, new Integer(100));
        root = select.executeQuery();
        assertEquals(1, root.getList("CUSTOMER").size());
        assertEquals("5528 Wells Fargo Drive", root.getString("CUSTOMER[1]/ADDRESS"));
        assertEquals("Gerkin", root.getString("CUSTOMER[1]/LASTNAME"));

        // verify update
        select.setParameter(1, new Integer(cust1ID));
        root = select.executeQuery();
        assertEquals("Pavick", root.getString("CUSTOMER[1]/LASTNAME"));

    }

    public void testReadModifyApplyWithAssumedID() throws Exception {

        DAS das = DAS.FACTORY.createDAS(getConnection());
        // Read customer with particular ID
        Command select = das.createCommand("Select * from CUSTOMER");
        DataObject root = select.executeQuery();

        DataObject customer = root.getDataObject("CUSTOMER[1]");

        // Modify customer
        customer.set("LASTNAME", "Pavick");

        DataObject customerForDelete = getCustomerByLastName(root, "Daniel");
        customerForDelete.delete();

        DataObject newCustomer = root.createDataObject("CUSTOMER");
        newCustomer.set("LASTNAME", "NewCustomer");
        newCustomer.setInt("ID", 9000);

        // Build apply changes command
        das.applyChanges(root);

        // Verify the change
        root = select.executeQuery();
        assertEquals("Pavick", getCustomerByLastName(root, "Pavick").getString("LASTNAME"));
        assertEquals("NewCustomer", getCustomerByLastName(root, "NewCustomer").getString("LASTNAME"));
        assertNull(getCustomerByLastName(root, "Daniel"));

    }

    public void testReadModifyApplyWithAssumedIDFailure() throws Exception {
        DAS das = DAS.FACTORY.createDAS(getConnection());
        Command select = das.createCommand("Select * from ORDERDETAILS");

        DataObject root = select.executeQuery();

        DataObject od = root.getDataObject("ORDERDETAILS[1]");

        // Modify customer
        od.setInt("PRODUCTID", 72);

        // Flush changes -- This should fail because Order Details does not have
        // a column that
        // we can assume to be an ID
        try {
            das.applyChanges(root);
        } catch (RuntimeException ex) {
            assertTrue(ex.getMessage().indexOf("changed in the DataGraph but is not present in the Config") >= 0);
        }

    }

    public void testReadModifyApplyWithAssumedIDFailure2() throws Exception {
        DAS das = DAS.FACTORY.createDAS(getConnection());
        Command select = das.createCommand("Select * from ORDERDETAILS");
        DataObject root = select.executeQuery();

        DataObject od = root.getDataObject("ORDERDETAILS[1]");
        od.delete();

        // Flush changes -- This should fail because Order Details does not have
        // a column that
        // we can assume to be an ID
        try {
            das.applyChanges(root);
        } catch (RuntimeException ex) {
            assertTrue(ex.getMessage().indexOf("changed in the DataGraph but is not present in the Config") >= 0);
        }

    }

    public void testReadModifyApplyWithAssumedIDFailure3() throws Exception {
        DAS das = DAS.FACTORY.createDAS(getConnection());
        Command select = das.createCommand("Select * from ORDERDETAILS");
        DataObject root = select.executeQuery();

        DataObject od = root.createDataObject("ORDERDETAILS");

        // Modify customer
        od.setInt("PRODUCTID", 72);
        od.setInt("ORDERID", 500);

        // Flush changes -- This should fail because Order Details does not have
        // a column that
        // we can assume to be an ID
        try {
            das.applyChanges(root);
        } catch (RuntimeException ex) {
            assertTrue(ex.getMessage().indexOf("changed in the DataGraph but is not present in the Config") >= 0);
        }

    }

    private DataObject getCustomerByLastName(DataObject root, String name) {
        Iterator i = root.getList("CUSTOMER").iterator();
        while (i.hasNext()) {
            DataObject obj = (DataObject) i.next();
            if (name.equals(obj.getString("LASTNAME"))) {
                return obj;
            }
        }
        return null;
    }
}
TOP

Related Classes of org.apache.tuscany.das.rdb.test.CrudWithChangeHistory

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.