You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tuscany.apache.org by Brent Daniel <br...@gmail.com> on 2006/07/24 21:43:26 UTC
[PATCH] Improve DAS test coverage
The attached patch has three changes in response to coverage data:
1) Some dead internal code has been removed
2) Test cases have been updated to test some corner cases that weren't
being covered
3) A fix to operation sorting for deletes (this was not being tested
previously.)
Brent
Re: [PATCH] Improve DAS test coverage
Posted by Jim Marino <jm...@myromatours.com>.
I've found it helpful for exactly too and you can get a free open
source license. At times it is too strict (e.g. flagging getter/
setters) but overall it is great for seeing untested portions of code
and is simple to setup.
Jim
On Jul 24, 2006, at 7:26 PM, Brent Daniel wrote:
> Kevin,
>
> The data came from the Clover tool mentioned on the dev list
> recently (www.cenqua.com/clover). I'm using the eclipse plugin. I have
> some minor issues with it (for example, any refactoring will
> immediately flag every line of code as not executed, producing a ton
> of warnings in eclipse.) Overall, it's pretty nice, and is a lot
> lighter weight than some other tools I've used.
>
> Brent
>
>
> On 7/24/06, Kevin Williams <ke...@qwest.net> wrote:
>> Brent,
>> This looks good. What tool provided the coverage data?
>> Thanks,
>> --Kevin
>>
>>
>> Brent Daniel wrote:
>>
>> > The attached patch has three changes in response to coverage data:
>> >
>> > 1) Some dead internal code has been removed
>> > 2) Test cases have been updated to test some corner cases that
>> weren't
>> > being covered
>> > 3) A fix to operation sorting for deletes (this was not being
>> tested
>> > previously.)
>> >
>> > Brent
>> >
>> >--------------------------------------------------------------------
>> ----
>> >
>> >Index: src/test/java/org/apache/tuscany/das/rdb/test/
>> OperationOrderingTests.java
>> >===================================================================
>> >--- src/test/java/org/apache/tuscany/das/rdb/test/
>> OperationOrderingTests.java (revision 425121)
>> >+++ src/test/java/org/apache/tuscany/das/rdb/test/
>> OperationOrderingTests.java (working copy)
>> >@@ -16,6 +16,9 @@
>> > */
>> > package org.apache.tuscany.das.rdb.test;
>> >
>> >+import java.util.ArrayList;
>> >+import java.util.Iterator;
>> >+
>> > import org.apache.tuscany.das.rdb.Command;
>> > import org.apache.tuscany.das.rdb.DAS;
>> > import org.apache.tuscany.das.rdb.test.data.CityData;
>> >@@ -75,4 +78,44 @@
>> > assertEquals(numberOfStates + 1, root.getList
>> ("STATES").size());
>> > }
>> >
>> >+ public void testDeletes() throws Exception {
>> >+ DAS das = DAS.FACTORY.createDAS(getConfig
>> ("cityStates.xml"), getConnection());
>> >+ Command select = das
>> >+ .createCommand(
>> >+ "Select * from
>> STATES inner join CITIES on STATES.ID = CITIES.STATE_ID");
>> >+ DataObject root = select.executeQuery();
>> >+
>> >+
>> >+ DataObject firstState = root.getDataObject("STATES
>> [1]");
>> >+ String stateName = firstState.getString("NAME");
>> >+
>> >+ ArrayList cityNames = new ArrayList();
>> >+ Iterator i = firstState.getList("cities").iterator();
>> >+ while ( i.hasNext()) {
>> >+ DataObject firstCity = (DataObject) i.next();
>> >+ cityNames.add(firstCity.getString("NAME"));
>> >+ firstCity.delete();
>> >+ }
>> >+ firstState.delete();
>> >+
>> >+
>> >+
>> >+
>> >+ das.applyChanges(root);
>> >+
>> >+ root = select.executeQuery();
>> >+
>> >+ Iterator iter = root.getList("STATES").iterator();
>> >+ while ( iter.hasNext()) {
>> >+ DataObject state = (DataObject)iter.next();
>> >+ assertFalse(state.getString("NAME").equals
>> (stateName));
>> >+ }
>> >+
>> >+ iter = root.getList("CITIES").iterator();
>> >+ while ( iter.hasNext()) {
>> >+ DataObject city = (DataObject)iter.next();
>> >+ assertFalse(cityNames.contains
>> (city.getString("NAME")));
>> >+ }
>> >+
>> >+ }
>> > }
>> >Index: src/test/java/org/apache/tuscany/das/rdb/test/
>> ExceptionTests.java
>> >===================================================================
>> >--- src/test/java/org/apache/tuscany/das/rdb/test/
>> ExceptionTests.java (revision 425121)
>> >+++ src/test/java/org/apache/tuscany/das/rdb/test/
>> ExceptionTests.java (working copy)
>> >@@ -16,6 +16,7 @@
>> > */
>> > package org.apache.tuscany.das.rdb.test;
>> >
>> >+import java.io.FileInputStream;
>> > import java.sql.Connection;
>> >
>> > import org.apache.tuscany.das.rdb.Command;
>> >@@ -26,6 +27,7 @@
>> > import org.apache.tuscany.das.rdb.test.data.OrderData;
>> > import org.apache.tuscany.das.rdb.test.data.OrderDetailsData;
>> > import org.apache.tuscany.das.rdb.test.framework.DasTest;
>> >+import org.apache.tuscany.das.rdb.util.ConfigUtil;
>> > import org.apache.tuscany.sdo.util.SDOUtil;
>> >
>> > public class ExceptionTests extends DasTest {
>> >@@ -133,5 +135,6 @@
>> >
>> > }
>> >
>> >+
>> >
>> > }
>> >Index: src/test/java/org/apache/tuscany/das/rdb/test/
>> CrudWithChangeHistory.java
>> >===================================================================
>> >--- src/test/java/org/apache/tuscany/das/rdb/test/
>> CrudWithChangeHistory.java (revision 425121)
>> >+++ src/test/java/org/apache/tuscany/das/rdb/test/
>> CrudWithChangeHistory.java (working copy)
>> >@@ -48,6 +48,41 @@
>> > 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
>> >Index: src/test/java/org/apache/tuscany/das/rdb/test/OCCTests.java
>> >===================================================================
>> >--- src/test/java/org/apache/tuscany/das/rdb/test/
>> OCCTests.java (revision 425121)
>> >+++ src/test/java/org/apache/tuscany/das/rdb/test/
>> OCCTests.java (working copy)
>> >@@ -17,7 +17,10 @@
>> > package org.apache.tuscany.das.rdb.test;
>> >
>> > 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.Config;
>> >+import org.apache.tuscany.das.rdb.config.ConfigFactory;
>> > import org.apache.tuscany.das.rdb.test.data.BookData;
>> > import org.apache.tuscany.das.rdb.test.framework.DasTest;
>> >
>> >@@ -99,4 +102,29 @@
>> > throw ex;
>> > }
>> > }
>> >+
>> >+ public void testProvidedConfig() throws Exception {
>> >+ // Create config programmatically
>> >+ Config config = ConfigFactory.INSTANCE.createConfig
>> ();
>> >+ ConfigHelper helper = new ConfigHelper(config);
>> >+ helper.addPrimaryKey("BOOK.BOOK_ID");
>> >+ DAS das = DAS.FACTORY.createDAS(helper.getConfig
>> (), getConnection());
>> >+
>> >+ // Read a book instance
>> >+ Command select = das
>> >+ .createCommand("SELECT * FROM BOOK
>> WHERE BOOK_ID = 1");
>> >+ DataObject root = select.executeQuery();
>> >+ DataObject book = root.getDataObject("BOOK[1]");
>> >+ // Change a field to mark the instance 'dirty'
>> >+ book.setInt("QUANTITY", 2);
>> >+
>> >+ // Flush the change
>> >+
>> >+ das.applyChanges(root);
>> >+
>> >+ // Verify
>> >+ root = select.executeQuery();
>> >+ book = root.getDataObject("BOOK[1]");
>> >+ assertEquals(2, book.getInt("QUANTITY"));
>> >+ }
>> > }
>> >Index: src/test/java/org/apache/tuscany/das/rdb/test/
>> ConverterTests.java
>> >===================================================================
>> >--- src/test/java/org/apache/tuscany/das/rdb/test/
>> ConverterTests.java (revision 425121)
>> >+++ src/test/java/org/apache/tuscany/das/rdb/test/
>> ConverterTests.java (working copy)
>> >@@ -23,8 +23,11 @@
>> >
>> > import org.apache.tuscany.das.rdb.Command;
>> > import org.apache.tuscany.das.rdb.DAS;
>> >+import org.apache.tuscany.das.rdb.test.customer.Customer;
>> >+import org.apache.tuscany.das.rdb.test.customer.CustomerFactory;
>> > import org.apache.tuscany.das.rdb.test.data.CustomerData;
>> > import org.apache.tuscany.das.rdb.test.framework.DasTest;
>> >+import org.apache.tuscany.sdo.util.SDOUtil;
>> >
>> > import commonj.sdo.DataObject;
>> >
>> >@@ -99,4 +102,59 @@
>> >
>> > }
>> >
>> >+ public void testInvalidConverter1() throws Exception {
>> >+
>> >+ DAS das = DAS.FACTORY.createDAS(getConfig
>> ("InvalidConverter.xml"), getConnection());
>> >+
>> >+ // Build the select command to read a specific
>> customer and related
>> >+ // orders
>> >+ Command select = das
>> >+ .createCommand(
>> >+ "SELECT * FROM
>> CUSTOMER LEFT JOIN ANORDER ON CUSTOMER.ID = ANORDER.CUSTOMER_ID
>> where CUSTOMER.ID = ?");
>> >+
>> >+ // Parameterize the command
>> >+ select.setParameter(1, new Integer(1));
>> >+
>> >+ // Get the graph
>> >+ try {
>> >+ select.executeQuery();
>> >+ } catch (Exception ex) {
>> >+ assertEquals
>> ("java.lang.ClassNotFoundException: not.a.valid.class",
>> ex.getMessage());
>> >+ }
>> >+
>> >+
>> >+ }
>> >+
>> >+ public void testInvalidConverter2() throws Exception {
>> >+
>> >+ SDOUtil.registerStaticTypes(CustomerFactory.class);
>> >+ DAS das = DAS.FACTORY.createDAS(getConfig
>> ("InvalidConverter.xml"), getConnection());
>> >+
>> >+ // Build the select command to read a specific
>> customer and related
>> >+ // orders
>> >+ Command select = das
>> >+ .createCommand(
>> >+ "SELECT * FROM
>> ANORDER");
>> >+
>> >+ // Get the graph
>> >+
>> >+ DataObject root = select.executeQuery();
>> >+ DataObject order = root.getDataObject("AnOrder[1]");
>> >+
>> >+ Customer customer = (Customer)
>> root.createDataObject("Customer");
>> >+ customer.setID(700);
>> >+ customer.setLastName("Daniel");
>> >+ customer.setAddress("an address");
>> >+
>> >+ customer.getOrders().add(order);
>> >+
>> >+ try {
>> >+ das.applyChanges(root);
>> >+ } catch (Exception ex) {
>> >+ assertEquals
>> ("java.lang.ClassNotFoundException: not.a.valid.class",
>> ex.getMessage());
>> >+ }
>> >+
>> >+
>> >+ }
>> >+
>> > }
>> >Index: src/test/java/org/apache/tuscany/das/rdb/test/
>> GeneratedId.java
>> >===================================================================
>> >--- src/test/java/org/apache/tuscany/das/rdb/test/
>> GeneratedId.java (revision 425121)
>> >+++ src/test/java/org/apache/tuscany/das/rdb/test/
>> GeneratedId.java (working copy)
>> >@@ -22,6 +22,8 @@
>> > *
>> > */
>> >
>> >+import java.util.Iterator;
>> >+
>> > import org.apache.tuscany.das.rdb.Command;
>> > import org.apache.tuscany.das.rdb.DAS;
>> > import org.apache.tuscany.das.rdb.test.data.CompanyData;
>> >@@ -100,6 +102,31 @@
>> >
>> > }
>> >
>> >+ // Test insert into row with generated ID and generated insert
>> >+ public void testInsert4() throws Exception {
>> >+
>> >+ DAS das = DAS.FACTORY.createDAS(getConfig
>> ("CompanyConfig.xml"),getConnection());
>> >+ Command select = das.getCommand("all companies");
>> >+ DataObject root = select.executeQuery();
>> >+
>> >+ DataObject company = root.createDataObject("COMPANY");
>> >+ company.setString("NAME", "Phil's Tires");
>> >+ // This shouldn't do anything
>> >+ company.setInt("ID", 999);
>> >+
>> >+ das.applyChanges(root);
>> >+
>> >+ // Verify insert
>> >+ root = select.executeQuery();
>> >+
>> >+ assertEquals(4, root.getList("COMPANY").size());
>> >+ Iterator i = root.getList("COMPANY").iterator();
>> >+ while ( i.hasNext()) {
>> >+ DataObject comp = (DataObject)i.next();
>> >+ assertFalse( comp.getInt("ID") == 999);
>> >+ }
>> >+
>> >+ }
>> > // Test ability to propogate generated values back to owning
>> data objects
>> > public void testPropagateIds() throws Exception {
>> >
>> >Index: src/test/java/org/apache/tuscany/das/rdb/test/
>> CompoundKeyTests.java
>> >===================================================================
>> >--- src/test/java/org/apache/tuscany/das/rdb/test/
>> CompoundKeyTests.java (revision 425121)
>> >+++ src/test/java/org/apache/tuscany/das/rdb/test/
>> CompoundKeyTests.java (working copy)
>> >@@ -92,4 +92,21 @@
>> > assertEquals(2, firstOrder.getList("ORDERDETAILS").size());
>> >
>> > }
>> >+
>> >+ public void testReadAndDelete() throws Exception {
>> >+ DAS das = DAS.FACTORY.createDAS(getConfig
>> ("OrdersOrderDetailsConfig.xml"), getConnection());
>> >+ Command getOrderDetails = das
>> >+ .createCommand("Select * from ORDERDETAILS where
>> ORDERID = ? AND PRODUCTID = ?");
>> >+
>> >+
>> >+ getOrderDetails.setParameter(1, new Integer(1));
>> >+ getOrderDetails.setParameter(2, new Integer(1));
>> >+
>> >+ DataObject root = getOrderDetails.executeQuery();
>> >+
>> >+ DataObject orderDetail = (DataObject) root.get
>> ("ORDERDETAILS[1]");
>> >+ orderDetail.delete();
>> >+ das.applyChanges(root);
>> >+
>> >+ }
>> > }
>> >Index: src/test/resources/BooksConfig.xml
>> >===================================================================
>> >--- src/test/resources/BooksConfig.xml (revision 425121)
>> >+++ src/test/resources/BooksConfig.xml (working copy)
>> >@@ -21,7 +21,7 @@
>> >
>> > <Table tableName="BOOK">
>> > <Column columnName="BOOK_ID" primaryKey="true"/>
>> >- <Column columnName="OCC" collision="true"/>
>> >+ <Column columnName="OCC" collision="true"
>> propertyName="anOccColumn"/>
>> > </Table>
>> >
>> > </Config>
>> >Index: src/test/resources/InvalidConverter.xml
>> >===================================================================
>> >--- /dev/null (revision 0)
>> >+++ src/test/resources/InvalidConverter.xml (revision 0)
>> >@@ -0,0 +1,35 @@
>> >+<?xml version="1.0" encoding="ASCII"?>
>> >+<!--
>> >+ Copyright (c) 2005 The Apache Software Foundation or its
>> licensors, as applicable.
>> >+
>> >+ Licensed 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.
>> >+ -->
>> >+<Config xsi:noNamespaceSchemaLocation="http:///
>> org.apache.tuscany.das.rdb/config.xsd"
>> >+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> >+dataObjectModel="http:///org.apache.tuscany.das.rdb.test/
>> customer.xsd">
>> >+
>> >+ <Table tableName="CUSTOMER" typeName="Customer">
>> >+ <Column columnName="ID" primaryKey="true"
>> converterClassName="not.a.valid.class"/>
>> >+ </Table>
>> >+
>> >+ <Table tableName="ANORDER" typeName="AnOrder">
>> >+ <Column columnName="CUSTOMER_ID"/>
>> >+ <Column columnName="ID" primaryKey="true"/>
>> >+ </Table>
>> >+
>> >+ <Relationship name="orders" primaryKeyTable="CUSTOMER"
>> foreignKeyTable="ANORDER" many="true">
>> >+ <KeyPair primaryKeyColumn="ID"
>> foreignKeyColumn="CUSTOMER_ID"/>
>> >+ </Relationship>
>> >+
>> >+</Config>
>> >+
>> >Index: src/main/java/org/apache/tuscany/das/rdb/impl/
>> ApplyChangesCommandImpl.java
>> >===================================================================
>> >--- src/main/java/org/apache/tuscany/das/rdb/impl/
>> ApplyChangesCommandImpl.java (revision 425121)
>> >+++ src/main/java/org/apache/tuscany/das/rdb/impl/
>> ApplyChangesCommandImpl.java (working copy)
>> >@@ -34,13 +34,6 @@
>> > private static final boolean debug = false;
>> >
>> > private ChangeSummarizer summarizer = new ChangeSummarizer();
>> >-
>> >- public ApplyChangesCommandImpl() {
>> >- }
>> >-
>> >- public ApplyChangesCommandImpl(Config config){
>> >- this.configWrapper = new MappingWrapper(config);
>> >- }
>> >
>> > public ApplyChangesCommandImpl(Config config, Connection
>> connection){
>> > this.configWrapper = new MappingWrapper(config);
>> >@@ -53,18 +46,7 @@
>> > summarizer.setConnection(connection);
>> > }
>> >
>> >- public void addCreateCommand(Type type, Command cmd) {
>> >- summarizer.addCreateCommand(type, cmd);
>> >- }
>> >
>> >- public void addUpdateCommand(Type type, Command cmd) {
>> >- summarizer.addUpdateCommand(type, cmd);
>> >- }
>> >-
>> >- public void addDeleteCommand(Type type, Command cmd) {
>> >- summarizer.addDeleteCommand(type, cmd);
>> >- }
>> >-
>> > public void execute(DataObject root) {
>> > DebugUtil.debugln(getClass(), debug, "Executing
>> ApplyChangesCmd");
>> >
>> >Index: src/main/java/org/apache/tuscany/das/rdb/impl/
>> FactoryRegistry.java
>> >===================================================================
>> >--- src/main/java/org/apache/tuscany/das/rdb/impl/
>> FactoryRegistry.java (revision 425121)
>> >+++ src/main/java/org/apache/tuscany/das/rdb/impl/
>> FactoryRegistry.java (working copy)
>> >@@ -39,7 +39,7 @@
>> > ChangeFactory factory = (ChangeFactory)registry.get
>> (type);
>> > if ( factory == null ) {
>> > DebugUtil.debugln(getClass(), debug,
>> "Creating new ChangeFactory for type " + type.getName());
>> >- factory = new ChangeFactory(type, mapping,
>> connection);
>> >+ factory = new ChangeFactory(mapping,
>> connection);
>> > registry.put(type, factory);
>> > }
>> > return factory;
>> >Index: src/main/java/org/apache/tuscany/das/rdb/impl/
>> ParameterImpl.java
>> >===================================================================
>> >--- src/main/java/org/apache/tuscany/das/rdb/impl/
>> ParameterImpl.java (revision 425121)
>> >+++ src/main/java/org/apache/tuscany/das/rdb/impl/
>> ParameterImpl.java (working copy)
>> >@@ -50,10 +50,6 @@
>> > super();
>> > }
>> >
>> >- public ParameterImpl(String name) {
>> >- this.name = name;
>> >- }
>> >-
>> > public ParameterImpl(int index) {
>> > this.index = index;
>> > }
>> >@@ -113,14 +109,6 @@
>> > return this.converter;
>> > }
>> >
>> >-
>> >- public String toString() {
>> >- StringBuffer buffer = new StringBuffer();
>> >- buffer.append("Index: " + getIndex());
>> >- buffer.append("\nName: " + getName());
>> >- buffer.append("\nValue: " + getValue());
>> >- return buffer.toString();
>> >- }
>> >
>> >
>> > }
>> >Index: src/main/java/org/apache/tuscany/das/rdb/impl/
>> InsertCommandImpl.java
>> >===================================================================
>> >--- src/main/java/org/apache/tuscany/das/rdb/impl/
>> InsertCommandImpl.java (revision 425121)
>> >+++ src/main/java/org/apache/tuscany/das/rdb/impl/
>> InsertCommandImpl.java (working copy)
>> >@@ -35,9 +35,6 @@
>> > addParameters(create.getParameters());
>> > }
>> >
>> >- protected boolean isInsert() {
>> >- return true;
>> >- }
>> >
>> > public int getGeneratedKey() {
>> >
>> >@@ -60,16 +57,5 @@
>> >
>> > }
>> >
>> >- public String toString() {
>> >
>> >- String superString = super.toString();
>> >- StringBuffer buffer = new StringBuffer(superString);
>> >-
>> >- buffer.append("\nGenerating key: " +
>> hasGeneratedKey);
>> >- if (hasGeneratedKey)
>> >- buffer.append("\nGenerated key: " +
>> generatedKey);
>> >-
>> >- return buffer.toString();
>> >- }
>> >-
>> > }
>> >Index: src/main/java/org/apache/tuscany/das/rdb/impl/
>> WriteCommandImpl.java
>> >===================================================================
>> >--- src/main/java/org/apache/tuscany/das/rdb/impl/
>> WriteCommandImpl.java (revision 425121)
>> >+++ src/main/java/org/apache/tuscany/das/rdb/impl/
>> WriteCommandImpl.java (working copy)
>> >@@ -17,8 +17,6 @@
>> > package org.apache.tuscany.das.rdb.impl;
>> >
>> > import java.sql.SQLException;
>> >-import java.util.Collection;
>> >-import java.util.Iterator;
>> > import java.util.StringTokenizer;
>> >
>> > import org.apache.tuscany.das.rdb.config.Config;
>> >@@ -89,13 +87,7 @@
>> > addParameter(p);
>> > }
>> > }
>> >- public void addParameters(Collection updateParameters) {
>> >- Iterator i = updateParameters.iterator();
>> >- while ( i.hasNext()) {
>> >- ParameterImpl p = (ParameterImpl) i.next();
>> >- addParameter(p);
>> >- }
>> >- }
>> >+
>> >
>> >
>> > }
>> >Index: src/main/java/org/apache/tuscany/das/rdb/impl/
>> ChangeFactory.java
>> >===================================================================
>> >--- src/main/java/org/apache/tuscany/das/rdb/impl/
>> ChangeFactory.java (revision 425121)
>> >+++ src/main/java/org/apache/tuscany/das/rdb/impl/
>> ChangeFactory.java (working copy)
>> >@@ -28,11 +28,8 @@
>> > import org.apache.tuscany.das.rdb.util.DebugUtil;
>> >
>> > import commonj.sdo.DataObject;
>> >-import commonj.sdo.Type;
>> >
>> > public class ChangeFactory {
>> >-
>> >- private final Type type;
>> >
>> > private InsertCommandImpl createCommand;
>> >
>> >@@ -46,15 +43,10 @@
>> >
>> > private final ConnectionImpl connection;
>> >
>> >- public ChangeFactory(Type type, MappingWrapper mapping,
>> ConnectionImpl connection) {
>> >- this.type = type;
>> >+ public ChangeFactory(MappingWrapper mapping,
>> ConnectionImpl connection) {
>> > this.mapping = mapping;
>> > this.connection = connection;
>> > }
>> >-
>> >- public Type getType() {
>> >- return this.type;
>> >- }
>> >
>> > public void setCreateCommand(InsertCommandImpl cmd) {
>> > createCommand = cmd;
>> >@@ -138,6 +130,7 @@
>> > deleteCommand = new
>> DeleteCommandImpl(delete);
>> > }
>> > deleteCommand.setConnection(connection);
>> >+ deleteCommand.configWrapper = mapping;
>> > }
>> > return deleteCommand;
>> > }
>> >Index: src/main/java/org/apache/tuscany/das/rdb/impl/
>> QueryString.java
>> >===================================================================
>> >--- src/main/java/org/apache/tuscany/das/rdb/impl/
>> QueryString.java (revision 425121)
>> >+++ src/main/java/org/apache/tuscany/das/rdb/impl/
>> QueryString.java (working copy)
>> >@@ -1,86 +0,0 @@
>> >-/**
>> >- *
>> >- * Copyright 2005 The Apache Software Foundation or its
>> licensors, as applicable.
>> >- *
>> >- * Licensed 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.impl;
>> >-
>> >-import java.util.HashMap;
>> >-import java.util.Iterator;
>> >-import java.util.regex.Matcher;
>> >-import java.util.regex.Pattern;
>> >-
>> >-import org.apache.tuscany.das.rdb.util.DebugUtil;
>> >-
>> >-
>> >-public class QueryString {
>> >-
>> >- private final String unmodifiedQueryString;
>> >- private final String preparedString;
>> >- private HashMap parameters = new HashMap();
>> >- private static final boolean debug = false;
>> >-
>> >- public QueryString(String originalString) {
>> >- this.unmodifiedQueryString = originalString;
>> >- this.preparedString = replaceNamesAndSetIndexes
>> (originalString);
>> >- }
>> >-
>> >- public String getPreparedString() {
>> >- return this.preparedString;
>> >- }
>> >-
>> >- public String getUnmodifiedString() {
>> >- return this.unmodifiedQueryString;
>> >- }
>> >-
>> >- public int getParameterIndex(String name) {
>> >- DebugUtil.debugln(getClass(), debug, "Looking for
>> parameter index for: " + name);
>> >- return ((Integer)parameters.get(name)).intValue();
>> >- }
>> >-
>> >- private String replaceNamesAndSetIndexes(String query) {
>> >- DebugUtil.debugln(getClass(), debug,
>> "Parameterizing query: " + query);
>> >- Pattern p = Pattern.compile(":[\\S&&[^,()]]*");
>> >- Matcher m = p.matcher(query);
>> >-
>> >- int index = 1;
>> >- while (m.find()) {
>> >- parameters.put(m.group().substring(1), new
>> Integer(index));
>> >- query = m.replaceFirst("?");
>> >- m = p.matcher(query);
>> >- index++;
>> >- }
>> >-
>> >- DebugUtil.debugln(getClass(), debug,
>> "Parameterized query: " + query);
>> >- return query;
>> >- }
>> >-
>> >-
>> >- public String toString() {
>> >- StringBuffer buffer = new StringBuffer();
>> >- buffer.append("\nOriginal SQL: ");
>> >- buffer.append(unmodifiedQueryString);
>> >- buffer.append("\nPrepared SQL: ");
>> >- buffer.append(preparedString);
>> >- buffer.append("\nParameters: ");
>> >- Iterator i = parameters.keySet().iterator();
>> >- while ( i.hasNext() ) {
>> >- String key = (String)i.next();
>> >- buffer.append("\n");
>> >- buffer.append(key);
>> >- }
>> >- return buffer.toString();
>> >- }
>> >-
>> >-}
>> >Index: src/main/java/org/apache/tuscany/das/rdb/impl/DeleteList.java
>> >===================================================================
>> >--- src/main/java/org/apache/tuscany/das/rdb/impl/
>> DeleteList.java (revision 425121)
>> >+++ src/main/java/org/apache/tuscany/das/rdb/impl/
>> DeleteList.java (working copy)
>> >@@ -21,6 +21,8 @@
>> > import java.util.HashMap;
>> > import java.util.Iterator;
>> >
>> >+import org.apache.tuscany.das.rdb.util.DebugUtil;
>> >+
>> > /**
>> > * DeleteList will sort delete operations so that child objects
>> are deleted
>> > * before their parents
>> >@@ -40,7 +42,7 @@
>> > }
>> >
>> > public void add(ChangeOperation op) {
>> >- if (( order == null ) || ( op.getTableName() ==
>> null ) ) {
>> >+ if (( order.size() == 0 ) || ( op.getTableName()
>> == null ) ) {
>> > deleteOperations.add(op);
>> > } else {
>> > String name = op.getTableName();
>> >@@ -54,11 +56,12 @@
>> > }
>> >
>> > public Collection getSortedList() {
>> >- if (( order != null ) && ( opsByTableName.keySet
>> ().size() > 0) ) {
>> >+ if (( order.size() > 0 ) &&
>> ( opsByTableName.keySet().size() > 0) ) {
>> > Iterator i = this.order.iterator();
>> > while (i.hasNext()) {
>> > String name = (String) i.next();
>> >- deleteOperations.addAll
>> ((Collection) opsByTableName.get(name));
>> >+ if ( opsByTableName.get(name) !=
>> null)
>> >+ deleteOperations.addAll
>> ((Collection) opsByTableName.get(name));
>> > }
>> > }
>> >
>> >Index: src/main/java/org/apache/tuscany/das/rdb/ConfigHelper.java
>> >===================================================================
>> >--- src/main/java/org/apache/tuscany/das/rdb/ConfigHelper.java
>> (revision 425121)
>> >+++ src/main/java/org/apache/tuscany/das/rdb/ConfigHelper.java
>> (working copy)
>> >@@ -44,9 +44,6 @@
>> > configWrapper = new MappingWrapper(config);
>> > }
>> >
>> >- public Config newInstance() {
>> >- return factory.createConfig();
>> >- }
>> >
>> > public void addPrimaryKey(String columnName) {
>> > configWrapper.addPrimaryKey(columnName);
>> >Index: src/main/java/org/apache/tuscany/das/rdb/config/wrapper/
>> MappingWrapper.java
>> >===================================================================
>> >--- src/main/java/org/apache/tuscany/das/rdb/config/wrapper/
>> MappingWrapper.java (revision 425121)
>> >+++ src/main/java/org/apache/tuscany/das/rdb/config/wrapper/
>> MappingWrapper.java (working copy)
>> >@@ -190,19 +190,6 @@
>> > return propertyName;
>> > }
>> >
>> >- public void addCollisionColumn(String columnName) {
>> >-
>> >- if (config == null)
>> >- config = factory.createConfig();
>> >-
>> >- QualifiedColumn occColumn = new QualifiedColumn
>> (columnName);
>> >- Table t = findOrCreateTable(occColumn.getTableName());
>> >- Column c = findOrCreateColumn(t, occColumn.getColumnName
>> ());
>> >- c.setCollision(true);
>> >-
>> >- config.getTable().add(t);
>> >- }
>> >-
>> > public void addTable(String tableName, String typeName) {
>> > Table table = getTable(tableName);
>> > if (table != null)
>> >Index: src/main/java/org/apache/tuscany/das/rdb/generator/impl/
>> InsertGenerator.java
>> >===================================================================
>> >--- src/main/java/org/apache/tuscany/das/rdb/generator/impl/
>> InsertGenerator.java (revision 425121)
>> >+++ src/main/java/org/apache/tuscany/das/rdb/generator/impl/
>> InsertGenerator.java (working copy)
>> >@@ -111,7 +111,7 @@
>> > } else {
>> > if ( obj.isSet(p) ) {
>> > Relationship relationship
>> = config.getRelationshipByReference(p);
>> >- if ( p.getOpposite().isMany
>> () || (hasState(config, relationship, obj))) {
>> >+ if ((p.getOpposite() !=
>> null && p.getOpposite().isMany()) || (hasState(config,
>> relationship, obj))) {
>> >
>> RelationshipWrapper r = new RelationshipWrapper(
>> >
>> relationship);
>> > Iterator keys =
>> r.getForeignKeys().iterator();
>> >Index: pom.xml
>> >===================================================================
>> >--- pom.xml (revision 425121)
>> >+++ pom.xml (working copy)
>> >@@ -63,8 +63,6 @@
>> > <id>config</id>
>> > <configuration>
>> > <schemaFile>${basedir}/src/main/
>> resources/config.xsd</schemaFile>
>> >- <generateLoader>true</generateLoader>
>> >- <generateSwitch>true</generateSwitch>
>> > <noNotification>true</noNotification>
>> > <noUnsettable>true</noUnsettable>
>> > </configuration>
>> >@@ -76,8 +74,6 @@
>> > <id>company</id>
>> > <configuration>
>> > <schemaFile>${basedir}/src/test/
>> resources/company.xsd</schemaFile>
>> >- <generateLoader>true</generateLoader>
>> >- <generateSwitch>true</generateSwitch>
>> > <noUnsettable>true</noUnsettable>
>> > </configuration>
>> > <goals>
>> >@@ -88,8 +84,6 @@
>> > <id>customer</id>
>> > <configuration>
>> > <schemaFile>${basedir}/src/test/
>> resources/customer.xsd</schemaFile>
>> >- <generateLoader>true</generateLoader>
>> >- <generateSwitch>true</generateSwitch>
>> > <noUnsettable>true</noUnsettable>
>> > </configuration>
>> > <goals>
>> >
>> >
>> >--------------------------------------------------------------------
>> ----
>> >
>> >--------------------------------------------------------------------
>> -
>> >To unsubscribe, e-mail: tuscany-dev-unsubscribe@ws.apache.org
>> >For additional commands, e-mail: tuscany-dev-help@ws.apache.org
>> >
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: tuscany-dev-unsubscribe@ws.apache.org
>> For additional commands, e-mail: tuscany-dev-help@ws.apache.org
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: tuscany-dev-unsubscribe@ws.apache.org
> For additional commands, e-mail: tuscany-dev-help@ws.apache.org
>
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-dev-help@ws.apache.org
Re: [PATCH] Improve DAS test coverage
Posted by Brent Daniel <br...@gmail.com>.
Kevin,
The data came from the Clover tool mentioned on the dev list
recently (www.cenqua.com/clover). I'm using the eclipse plugin. I have
some minor issues with it (for example, any refactoring will
immediately flag every line of code as not executed, producing a ton
of warnings in eclipse.) Overall, it's pretty nice, and is a lot
lighter weight than some other tools I've used.
Brent
On 7/24/06, Kevin Williams <ke...@qwest.net> wrote:
> Brent,
> This looks good. What tool provided the coverage data?
> Thanks,
> --Kevin
>
>
> Brent Daniel wrote:
>
> > The attached patch has three changes in response to coverage data:
> >
> > 1) Some dead internal code has been removed
> > 2) Test cases have been updated to test some corner cases that weren't
> > being covered
> > 3) A fix to operation sorting for deletes (this was not being tested
> > previously.)
> >
> > Brent
> >
> >------------------------------------------------------------------------
> >
> >Index: src/test/java/org/apache/tuscany/das/rdb/test/OperationOrderingTests.java
> >===================================================================
> >--- src/test/java/org/apache/tuscany/das/rdb/test/OperationOrderingTests.java (revision 425121)
> >+++ src/test/java/org/apache/tuscany/das/rdb/test/OperationOrderingTests.java (working copy)
> >@@ -16,6 +16,9 @@
> > */
> > package org.apache.tuscany.das.rdb.test;
> >
> >+import java.util.ArrayList;
> >+import java.util.Iterator;
> >+
> > import org.apache.tuscany.das.rdb.Command;
> > import org.apache.tuscany.das.rdb.DAS;
> > import org.apache.tuscany.das.rdb.test.data.CityData;
> >@@ -75,4 +78,44 @@
> > assertEquals(numberOfStates + 1, root.getList("STATES").size());
> > }
> >
> >+ public void testDeletes() throws Exception {
> >+ DAS das = DAS.FACTORY.createDAS(getConfig("cityStates.xml"), getConnection());
> >+ Command select = das
> >+ .createCommand(
> >+ "Select * from STATES inner join CITIES on STATES.ID = CITIES.STATE_ID");
> >+ DataObject root = select.executeQuery();
> >+
> >+
> >+ DataObject firstState = root.getDataObject("STATES[1]");
> >+ String stateName = firstState.getString("NAME");
> >+
> >+ ArrayList cityNames = new ArrayList();
> >+ Iterator i = firstState.getList("cities").iterator();
> >+ while ( i.hasNext()) {
> >+ DataObject firstCity = (DataObject) i.next();
> >+ cityNames.add(firstCity.getString("NAME"));
> >+ firstCity.delete();
> >+ }
> >+ firstState.delete();
> >+
> >+
> >+
> >+
> >+ das.applyChanges(root);
> >+
> >+ root = select.executeQuery();
> >+
> >+ Iterator iter = root.getList("STATES").iterator();
> >+ while ( iter.hasNext()) {
> >+ DataObject state = (DataObject)iter.next();
> >+ assertFalse(state.getString("NAME").equals(stateName));
> >+ }
> >+
> >+ iter = root.getList("CITIES").iterator();
> >+ while ( iter.hasNext()) {
> >+ DataObject city = (DataObject)iter.next();
> >+ assertFalse(cityNames.contains(city.getString("NAME")));
> >+ }
> >+
> >+ }
> > }
> >Index: src/test/java/org/apache/tuscany/das/rdb/test/ExceptionTests.java
> >===================================================================
> >--- src/test/java/org/apache/tuscany/das/rdb/test/ExceptionTests.java (revision 425121)
> >+++ src/test/java/org/apache/tuscany/das/rdb/test/ExceptionTests.java (working copy)
> >@@ -16,6 +16,7 @@
> > */
> > package org.apache.tuscany.das.rdb.test;
> >
> >+import java.io.FileInputStream;
> > import java.sql.Connection;
> >
> > import org.apache.tuscany.das.rdb.Command;
> >@@ -26,6 +27,7 @@
> > import org.apache.tuscany.das.rdb.test.data.OrderData;
> > import org.apache.tuscany.das.rdb.test.data.OrderDetailsData;
> > import org.apache.tuscany.das.rdb.test.framework.DasTest;
> >+import org.apache.tuscany.das.rdb.util.ConfigUtil;
> > import org.apache.tuscany.sdo.util.SDOUtil;
> >
> > public class ExceptionTests extends DasTest {
> >@@ -133,5 +135,6 @@
> >
> > }
> >
> >+
> >
> > }
> >Index: src/test/java/org/apache/tuscany/das/rdb/test/CrudWithChangeHistory.java
> >===================================================================
> >--- src/test/java/org/apache/tuscany/das/rdb/test/CrudWithChangeHistory.java (revision 425121)
> >+++ src/test/java/org/apache/tuscany/das/rdb/test/CrudWithChangeHistory.java (working copy)
> >@@ -48,6 +48,41 @@
> > 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
> >Index: src/test/java/org/apache/tuscany/das/rdb/test/OCCTests.java
> >===================================================================
> >--- src/test/java/org/apache/tuscany/das/rdb/test/OCCTests.java (revision 425121)
> >+++ src/test/java/org/apache/tuscany/das/rdb/test/OCCTests.java (working copy)
> >@@ -17,7 +17,10 @@
> > package org.apache.tuscany.das.rdb.test;
> >
> > 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.Config;
> >+import org.apache.tuscany.das.rdb.config.ConfigFactory;
> > import org.apache.tuscany.das.rdb.test.data.BookData;
> > import org.apache.tuscany.das.rdb.test.framework.DasTest;
> >
> >@@ -99,4 +102,29 @@
> > throw ex;
> > }
> > }
> >+
> >+ public void testProvidedConfig() throws Exception {
> >+ // Create config programmatically
> >+ Config config = ConfigFactory.INSTANCE.createConfig();
> >+ ConfigHelper helper = new ConfigHelper(config);
> >+ helper.addPrimaryKey("BOOK.BOOK_ID");
> >+ DAS das = DAS.FACTORY.createDAS(helper.getConfig(), getConnection());
> >+
> >+ // Read a book instance
> >+ Command select = das
> >+ .createCommand("SELECT * FROM BOOK WHERE BOOK_ID = 1");
> >+ DataObject root = select.executeQuery();
> >+ DataObject book = root.getDataObject("BOOK[1]");
> >+ // Change a field to mark the instance 'dirty'
> >+ book.setInt("QUANTITY", 2);
> >+
> >+ // Flush the change
> >+
> >+ das.applyChanges(root);
> >+
> >+ // Verify
> >+ root = select.executeQuery();
> >+ book = root.getDataObject("BOOK[1]");
> >+ assertEquals(2, book.getInt("QUANTITY"));
> >+ }
> > }
> >Index: src/test/java/org/apache/tuscany/das/rdb/test/ConverterTests.java
> >===================================================================
> >--- src/test/java/org/apache/tuscany/das/rdb/test/ConverterTests.java (revision 425121)
> >+++ src/test/java/org/apache/tuscany/das/rdb/test/ConverterTests.java (working copy)
> >@@ -23,8 +23,11 @@
> >
> > import org.apache.tuscany.das.rdb.Command;
> > import org.apache.tuscany.das.rdb.DAS;
> >+import org.apache.tuscany.das.rdb.test.customer.Customer;
> >+import org.apache.tuscany.das.rdb.test.customer.CustomerFactory;
> > import org.apache.tuscany.das.rdb.test.data.CustomerData;
> > import org.apache.tuscany.das.rdb.test.framework.DasTest;
> >+import org.apache.tuscany.sdo.util.SDOUtil;
> >
> > import commonj.sdo.DataObject;
> >
> >@@ -99,4 +102,59 @@
> >
> > }
> >
> >+ public void testInvalidConverter1() throws Exception {
> >+
> >+ DAS das = DAS.FACTORY.createDAS(getConfig("InvalidConverter.xml"), getConnection());
> >+
> >+ // Build the select command to read a specific customer and related
> >+ // orders
> >+ Command select = das
> >+ .createCommand(
> >+ "SELECT * FROM CUSTOMER LEFT JOIN ANORDER ON CUSTOMER.ID = ANORDER.CUSTOMER_ID where CUSTOMER.ID = ?");
> >+
> >+ // Parameterize the command
> >+ select.setParameter(1, new Integer(1));
> >+
> >+ // Get the graph
> >+ try {
> >+ select.executeQuery();
> >+ } catch (Exception ex) {
> >+ assertEquals("java.lang.ClassNotFoundException: not.a.valid.class", ex.getMessage());
> >+ }
> >+
> >+
> >+ }
> >+
> >+ public void testInvalidConverter2() throws Exception {
> >+
> >+ SDOUtil.registerStaticTypes(CustomerFactory.class);
> >+ DAS das = DAS.FACTORY.createDAS(getConfig("InvalidConverter.xml"), getConnection());
> >+
> >+ // Build the select command to read a specific customer and related
> >+ // orders
> >+ Command select = das
> >+ .createCommand(
> >+ "SELECT * FROM ANORDER");
> >+
> >+ // Get the graph
> >+
> >+ DataObject root = select.executeQuery();
> >+ DataObject order = root.getDataObject("AnOrder[1]");
> >+
> >+ Customer customer = (Customer) root.createDataObject("Customer");
> >+ customer.setID(700);
> >+ customer.setLastName("Daniel");
> >+ customer.setAddress("an address");
> >+
> >+ customer.getOrders().add(order);
> >+
> >+ try {
> >+ das.applyChanges(root);
> >+ } catch (Exception ex) {
> >+ assertEquals("java.lang.ClassNotFoundException: not.a.valid.class", ex.getMessage());
> >+ }
> >+
> >+
> >+ }
> >+
> > }
> >Index: src/test/java/org/apache/tuscany/das/rdb/test/GeneratedId.java
> >===================================================================
> >--- src/test/java/org/apache/tuscany/das/rdb/test/GeneratedId.java (revision 425121)
> >+++ src/test/java/org/apache/tuscany/das/rdb/test/GeneratedId.java (working copy)
> >@@ -22,6 +22,8 @@
> > *
> > */
> >
> >+import java.util.Iterator;
> >+
> > import org.apache.tuscany.das.rdb.Command;
> > import org.apache.tuscany.das.rdb.DAS;
> > import org.apache.tuscany.das.rdb.test.data.CompanyData;
> >@@ -100,6 +102,31 @@
> >
> > }
> >
> >+ // Test insert into row with generated ID and generated insert
> >+ public void testInsert4() throws Exception {
> >+
> >+ DAS das = DAS.FACTORY.createDAS(getConfig("CompanyConfig.xml"),getConnection());
> >+ Command select = das.getCommand("all companies");
> >+ DataObject root = select.executeQuery();
> >+
> >+ DataObject company = root.createDataObject("COMPANY");
> >+ company.setString("NAME", "Phil's Tires");
> >+ // This shouldn't do anything
> >+ company.setInt("ID", 999);
> >+
> >+ das.applyChanges(root);
> >+
> >+ // Verify insert
> >+ root = select.executeQuery();
> >+
> >+ assertEquals(4, root.getList("COMPANY").size());
> >+ Iterator i = root.getList("COMPANY").iterator();
> >+ while ( i.hasNext()) {
> >+ DataObject comp = (DataObject)i.next();
> >+ assertFalse( comp.getInt("ID") == 999);
> >+ }
> >+
> >+ }
> > // Test ability to propogate generated values back to owning data objects
> > public void testPropagateIds() throws Exception {
> >
> >Index: src/test/java/org/apache/tuscany/das/rdb/test/CompoundKeyTests.java
> >===================================================================
> >--- src/test/java/org/apache/tuscany/das/rdb/test/CompoundKeyTests.java (revision 425121)
> >+++ src/test/java/org/apache/tuscany/das/rdb/test/CompoundKeyTests.java (working copy)
> >@@ -92,4 +92,21 @@
> > assertEquals(2, firstOrder.getList("ORDERDETAILS").size());
> >
> > }
> >+
> >+ public void testReadAndDelete() throws Exception {
> >+ DAS das = DAS.FACTORY.createDAS(getConfig("OrdersOrderDetailsConfig.xml"), getConnection());
> >+ Command getOrderDetails = das
> >+ .createCommand("Select * from ORDERDETAILS where ORDERID = ? AND PRODUCTID = ?");
> >+
> >+
> >+ getOrderDetails.setParameter(1, new Integer(1));
> >+ getOrderDetails.setParameter(2, new Integer(1));
> >+
> >+ DataObject root = getOrderDetails.executeQuery();
> >+
> >+ DataObject orderDetail = (DataObject) root.get("ORDERDETAILS[1]");
> >+ orderDetail.delete();
> >+ das.applyChanges(root);
> >+
> >+ }
> > }
> >Index: src/test/resources/BooksConfig.xml
> >===================================================================
> >--- src/test/resources/BooksConfig.xml (revision 425121)
> >+++ src/test/resources/BooksConfig.xml (working copy)
> >@@ -21,7 +21,7 @@
> >
> > <Table tableName="BOOK">
> > <Column columnName="BOOK_ID" primaryKey="true"/>
> >- <Column columnName="OCC" collision="true"/>
> >+ <Column columnName="OCC" collision="true" propertyName="anOccColumn"/>
> > </Table>
> >
> > </Config>
> >Index: src/test/resources/InvalidConverter.xml
> >===================================================================
> >--- /dev/null (revision 0)
> >+++ src/test/resources/InvalidConverter.xml (revision 0)
> >@@ -0,0 +1,35 @@
> >+<?xml version="1.0" encoding="ASCII"?>
> >+<!--
> >+ Copyright (c) 2005 The Apache Software Foundation or its licensors, as applicable.
> >+
> >+ Licensed 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.
> >+ -->
> >+<Config xsi:noNamespaceSchemaLocation="http:///org.apache.tuscany.das.rdb/config.xsd"
> >+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> >+dataObjectModel="http:///org.apache.tuscany.das.rdb.test/customer.xsd">
> >+
> >+ <Table tableName="CUSTOMER" typeName="Customer">
> >+ <Column columnName="ID" primaryKey="true" converterClassName="not.a.valid.class"/>
> >+ </Table>
> >+
> >+ <Table tableName="ANORDER" typeName="AnOrder">
> >+ <Column columnName="CUSTOMER_ID"/>
> >+ <Column columnName="ID" primaryKey="true"/>
> >+ </Table>
> >+
> >+ <Relationship name="orders" primaryKeyTable="CUSTOMER" foreignKeyTable="ANORDER" many="true">
> >+ <KeyPair primaryKeyColumn="ID" foreignKeyColumn="CUSTOMER_ID"/>
> >+ </Relationship>
> >+
> >+</Config>
> >+
> >Index: src/main/java/org/apache/tuscany/das/rdb/impl/ApplyChangesCommandImpl.java
> >===================================================================
> >--- src/main/java/org/apache/tuscany/das/rdb/impl/ApplyChangesCommandImpl.java (revision 425121)
> >+++ src/main/java/org/apache/tuscany/das/rdb/impl/ApplyChangesCommandImpl.java (working copy)
> >@@ -34,13 +34,6 @@
> > private static final boolean debug = false;
> >
> > private ChangeSummarizer summarizer = new ChangeSummarizer();
> >-
> >- public ApplyChangesCommandImpl() {
> >- }
> >-
> >- public ApplyChangesCommandImpl(Config config){
> >- this.configWrapper = new MappingWrapper(config);
> >- }
> >
> > public ApplyChangesCommandImpl(Config config, Connection connection){
> > this.configWrapper = new MappingWrapper(config);
> >@@ -53,18 +46,7 @@
> > summarizer.setConnection(connection);
> > }
> >
> >- public void addCreateCommand(Type type, Command cmd) {
> >- summarizer.addCreateCommand(type, cmd);
> >- }
> >
> >- public void addUpdateCommand(Type type, Command cmd) {
> >- summarizer.addUpdateCommand(type, cmd);
> >- }
> >-
> >- public void addDeleteCommand(Type type, Command cmd) {
> >- summarizer.addDeleteCommand(type, cmd);
> >- }
> >-
> > public void execute(DataObject root) {
> > DebugUtil.debugln(getClass(), debug, "Executing ApplyChangesCmd");
> >
> >Index: src/main/java/org/apache/tuscany/das/rdb/impl/FactoryRegistry.java
> >===================================================================
> >--- src/main/java/org/apache/tuscany/das/rdb/impl/FactoryRegistry.java (revision 425121)
> >+++ src/main/java/org/apache/tuscany/das/rdb/impl/FactoryRegistry.java (working copy)
> >@@ -39,7 +39,7 @@
> > ChangeFactory factory = (ChangeFactory)registry.get(type);
> > if ( factory == null ) {
> > DebugUtil.debugln(getClass(), debug, "Creating new ChangeFactory for type " + type.getName());
> >- factory = new ChangeFactory(type, mapping, connection);
> >+ factory = new ChangeFactory(mapping, connection);
> > registry.put(type, factory);
> > }
> > return factory;
> >Index: src/main/java/org/apache/tuscany/das/rdb/impl/ParameterImpl.java
> >===================================================================
> >--- src/main/java/org/apache/tuscany/das/rdb/impl/ParameterImpl.java (revision 425121)
> >+++ src/main/java/org/apache/tuscany/das/rdb/impl/ParameterImpl.java (working copy)
> >@@ -50,10 +50,6 @@
> > super();
> > }
> >
> >- public ParameterImpl(String name) {
> >- this.name = name;
> >- }
> >-
> > public ParameterImpl(int index) {
> > this.index = index;
> > }
> >@@ -113,14 +109,6 @@
> > return this.converter;
> > }
> >
> >-
> >- public String toString() {
> >- StringBuffer buffer = new StringBuffer();
> >- buffer.append("Index: " + getIndex());
> >- buffer.append("\nName: " + getName());
> >- buffer.append("\nValue: " + getValue());
> >- return buffer.toString();
> >- }
> >
> >
> > }
> >Index: src/main/java/org/apache/tuscany/das/rdb/impl/InsertCommandImpl.java
> >===================================================================
> >--- src/main/java/org/apache/tuscany/das/rdb/impl/InsertCommandImpl.java (revision 425121)
> >+++ src/main/java/org/apache/tuscany/das/rdb/impl/InsertCommandImpl.java (working copy)
> >@@ -35,9 +35,6 @@
> > addParameters(create.getParameters());
> > }
> >
> >- protected boolean isInsert() {
> >- return true;
> >- }
> >
> > public int getGeneratedKey() {
> >
> >@@ -60,16 +57,5 @@
> >
> > }
> >
> >- public String toString() {
> >
> >- String superString = super.toString();
> >- StringBuffer buffer = new StringBuffer(superString);
> >-
> >- buffer.append("\nGenerating key: " + hasGeneratedKey);
> >- if (hasGeneratedKey)
> >- buffer.append("\nGenerated key: " + generatedKey);
> >-
> >- return buffer.toString();
> >- }
> >-
> > }
> >Index: src/main/java/org/apache/tuscany/das/rdb/impl/WriteCommandImpl.java
> >===================================================================
> >--- src/main/java/org/apache/tuscany/das/rdb/impl/WriteCommandImpl.java (revision 425121)
> >+++ src/main/java/org/apache/tuscany/das/rdb/impl/WriteCommandImpl.java (working copy)
> >@@ -17,8 +17,6 @@
> > package org.apache.tuscany.das.rdb.impl;
> >
> > import java.sql.SQLException;
> >-import java.util.Collection;
> >-import java.util.Iterator;
> > import java.util.StringTokenizer;
> >
> > import org.apache.tuscany.das.rdb.config.Config;
> >@@ -89,13 +87,7 @@
> > addParameter(p);
> > }
> > }
> >- public void addParameters(Collection updateParameters) {
> >- Iterator i = updateParameters.iterator();
> >- while ( i.hasNext()) {
> >- ParameterImpl p = (ParameterImpl) i.next();
> >- addParameter(p);
> >- }
> >- }
> >+
> >
> >
> > }
> >Index: src/main/java/org/apache/tuscany/das/rdb/impl/ChangeFactory.java
> >===================================================================
> >--- src/main/java/org/apache/tuscany/das/rdb/impl/ChangeFactory.java (revision 425121)
> >+++ src/main/java/org/apache/tuscany/das/rdb/impl/ChangeFactory.java (working copy)
> >@@ -28,11 +28,8 @@
> > import org.apache.tuscany.das.rdb.util.DebugUtil;
> >
> > import commonj.sdo.DataObject;
> >-import commonj.sdo.Type;
> >
> > public class ChangeFactory {
> >-
> >- private final Type type;
> >
> > private InsertCommandImpl createCommand;
> >
> >@@ -46,15 +43,10 @@
> >
> > private final ConnectionImpl connection;
> >
> >- public ChangeFactory(Type type, MappingWrapper mapping, ConnectionImpl connection) {
> >- this.type = type;
> >+ public ChangeFactory(MappingWrapper mapping, ConnectionImpl connection) {
> > this.mapping = mapping;
> > this.connection = connection;
> > }
> >-
> >- public Type getType() {
> >- return this.type;
> >- }
> >
> > public void setCreateCommand(InsertCommandImpl cmd) {
> > createCommand = cmd;
> >@@ -138,6 +130,7 @@
> > deleteCommand = new DeleteCommandImpl(delete);
> > }
> > deleteCommand.setConnection(connection);
> >+ deleteCommand.configWrapper = mapping;
> > }
> > return deleteCommand;
> > }
> >Index: src/main/java/org/apache/tuscany/das/rdb/impl/QueryString.java
> >===================================================================
> >--- src/main/java/org/apache/tuscany/das/rdb/impl/QueryString.java (revision 425121)
> >+++ src/main/java/org/apache/tuscany/das/rdb/impl/QueryString.java (working copy)
> >@@ -1,86 +0,0 @@
> >-/**
> >- *
> >- * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
> >- *
> >- * Licensed 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.impl;
> >-
> >-import java.util.HashMap;
> >-import java.util.Iterator;
> >-import java.util.regex.Matcher;
> >-import java.util.regex.Pattern;
> >-
> >-import org.apache.tuscany.das.rdb.util.DebugUtil;
> >-
> >-
> >-public class QueryString {
> >-
> >- private final String unmodifiedQueryString;
> >- private final String preparedString;
> >- private HashMap parameters = new HashMap();
> >- private static final boolean debug = false;
> >-
> >- public QueryString(String originalString) {
> >- this.unmodifiedQueryString = originalString;
> >- this.preparedString = replaceNamesAndSetIndexes(originalString);
> >- }
> >-
> >- public String getPreparedString() {
> >- return this.preparedString;
> >- }
> >-
> >- public String getUnmodifiedString() {
> >- return this.unmodifiedQueryString;
> >- }
> >-
> >- public int getParameterIndex(String name) {
> >- DebugUtil.debugln(getClass(), debug, "Looking for parameter index for: " + name);
> >- return ((Integer)parameters.get(name)).intValue();
> >- }
> >-
> >- private String replaceNamesAndSetIndexes(String query) {
> >- DebugUtil.debugln(getClass(), debug, "Parameterizing query: " + query);
> >- Pattern p = Pattern.compile(":[\\S&&[^,()]]*");
> >- Matcher m = p.matcher(query);
> >-
> >- int index = 1;
> >- while (m.find()) {
> >- parameters.put(m.group().substring(1), new Integer(index));
> >- query = m.replaceFirst("?");
> >- m = p.matcher(query);
> >- index++;
> >- }
> >-
> >- DebugUtil.debugln(getClass(), debug, "Parameterized query: " + query);
> >- return query;
> >- }
> >-
> >-
> >- public String toString() {
> >- StringBuffer buffer = new StringBuffer();
> >- buffer.append("\nOriginal SQL: ");
> >- buffer.append(unmodifiedQueryString);
> >- buffer.append("\nPrepared SQL: ");
> >- buffer.append(preparedString);
> >- buffer.append("\nParameters: ");
> >- Iterator i = parameters.keySet().iterator();
> >- while ( i.hasNext() ) {
> >- String key = (String)i.next();
> >- buffer.append("\n");
> >- buffer.append(key);
> >- }
> >- return buffer.toString();
> >- }
> >-
> >-}
> >Index: src/main/java/org/apache/tuscany/das/rdb/impl/DeleteList.java
> >===================================================================
> >--- src/main/java/org/apache/tuscany/das/rdb/impl/DeleteList.java (revision 425121)
> >+++ src/main/java/org/apache/tuscany/das/rdb/impl/DeleteList.java (working copy)
> >@@ -21,6 +21,8 @@
> > import java.util.HashMap;
> > import java.util.Iterator;
> >
> >+import org.apache.tuscany.das.rdb.util.DebugUtil;
> >+
> > /**
> > * DeleteList will sort delete operations so that child objects are deleted
> > * before their parents
> >@@ -40,7 +42,7 @@
> > }
> >
> > public void add(ChangeOperation op) {
> >- if (( order == null ) || ( op.getTableName() == null ) ) {
> >+ if (( order.size() == 0 ) || ( op.getTableName() == null ) ) {
> > deleteOperations.add(op);
> > } else {
> > String name = op.getTableName();
> >@@ -54,11 +56,12 @@
> > }
> >
> > public Collection getSortedList() {
> >- if (( order != null ) && ( opsByTableName.keySet().size() > 0) ) {
> >+ if (( order.size() > 0 ) && ( opsByTableName.keySet().size() > 0) ) {
> > Iterator i = this.order.iterator();
> > while (i.hasNext()) {
> > String name = (String) i.next();
> >- deleteOperations.addAll((Collection) opsByTableName.get(name));
> >+ if ( opsByTableName.get(name) != null)
> >+ deleteOperations.addAll((Collection) opsByTableName.get(name));
> > }
> > }
> >
> >Index: src/main/java/org/apache/tuscany/das/rdb/ConfigHelper.java
> >===================================================================
> >--- src/main/java/org/apache/tuscany/das/rdb/ConfigHelper.java (revision 425121)
> >+++ src/main/java/org/apache/tuscany/das/rdb/ConfigHelper.java (working copy)
> >@@ -44,9 +44,6 @@
> > configWrapper = new MappingWrapper(config);
> > }
> >
> >- public Config newInstance() {
> >- return factory.createConfig();
> >- }
> >
> > public void addPrimaryKey(String columnName) {
> > configWrapper.addPrimaryKey(columnName);
> >Index: src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java
> >===================================================================
> >--- src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java (revision 425121)
> >+++ src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java (working copy)
> >@@ -190,19 +190,6 @@
> > return propertyName;
> > }
> >
> >- public void addCollisionColumn(String columnName) {
> >-
> >- if (config == null)
> >- config = factory.createConfig();
> >-
> >- QualifiedColumn occColumn = new QualifiedColumn(columnName);
> >- Table t = findOrCreateTable(occColumn.getTableName());
> >- Column c = findOrCreateColumn(t, occColumn.getColumnName());
> >- c.setCollision(true);
> >-
> >- config.getTable().add(t);
> >- }
> >-
> > public void addTable(String tableName, String typeName) {
> > Table table = getTable(tableName);
> > if (table != null)
> >Index: src/main/java/org/apache/tuscany/das/rdb/generator/impl/InsertGenerator.java
> >===================================================================
> >--- src/main/java/org/apache/tuscany/das/rdb/generator/impl/InsertGenerator.java (revision 425121)
> >+++ src/main/java/org/apache/tuscany/das/rdb/generator/impl/InsertGenerator.java (working copy)
> >@@ -111,7 +111,7 @@
> > } else {
> > if ( obj.isSet(p) ) {
> > Relationship relationship = config.getRelationshipByReference(p);
> >- if ( p.getOpposite().isMany() || (hasState(config, relationship, obj))) {
> >+ if ((p.getOpposite() != null && p.getOpposite().isMany()) || (hasState(config, relationship, obj))) {
> > RelationshipWrapper r = new RelationshipWrapper(
> > relationship);
> > Iterator keys = r.getForeignKeys().iterator();
> >Index: pom.xml
> >===================================================================
> >--- pom.xml (revision 425121)
> >+++ pom.xml (working copy)
> >@@ -63,8 +63,6 @@
> > <id>config</id>
> > <configuration>
> > <schemaFile>${basedir}/src/main/resources/config.xsd</schemaFile>
> >- <generateLoader>true</generateLoader>
> >- <generateSwitch>true</generateSwitch>
> > <noNotification>true</noNotification>
> > <noUnsettable>true</noUnsettable>
> > </configuration>
> >@@ -76,8 +74,6 @@
> > <id>company</id>
> > <configuration>
> > <schemaFile>${basedir}/src/test/resources/company.xsd</schemaFile>
> >- <generateLoader>true</generateLoader>
> >- <generateSwitch>true</generateSwitch>
> > <noUnsettable>true</noUnsettable>
> > </configuration>
> > <goals>
> >@@ -88,8 +84,6 @@
> > <id>customer</id>
> > <configuration>
> > <schemaFile>${basedir}/src/test/resources/customer.xsd</schemaFile>
> >- <generateLoader>true</generateLoader>
> >- <generateSwitch>true</generateSwitch>
> > <noUnsettable>true</noUnsettable>
> > </configuration>
> > <goals>
> >
> >
> >------------------------------------------------------------------------
> >
> >---------------------------------------------------------------------
> >To unsubscribe, e-mail: tuscany-dev-unsubscribe@ws.apache.org
> >For additional commands, e-mail: tuscany-dev-help@ws.apache.org
> >
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: tuscany-dev-unsubscribe@ws.apache.org
> For additional commands, e-mail: tuscany-dev-help@ws.apache.org
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-dev-help@ws.apache.org
Re: [PATCH] Improve DAS test coverage
Posted by Kevin Williams <ke...@qwest.net>.
Brent,
This looks good. What tool provided the coverage data?
Thanks,
--Kevin
Brent Daniel wrote:
> The attached patch has three changes in response to coverage data:
>
> 1) Some dead internal code has been removed
> 2) Test cases have been updated to test some corner cases that weren't
> being covered
> 3) A fix to operation sorting for deletes (this was not being tested
> previously.)
>
> Brent
>
>------------------------------------------------------------------------
>
>Index: src/test/java/org/apache/tuscany/das/rdb/test/OperationOrderingTests.java
>===================================================================
>--- src/test/java/org/apache/tuscany/das/rdb/test/OperationOrderingTests.java (revision 425121)
>+++ src/test/java/org/apache/tuscany/das/rdb/test/OperationOrderingTests.java (working copy)
>@@ -16,6 +16,9 @@
> */
> package org.apache.tuscany.das.rdb.test;
>
>+import java.util.ArrayList;
>+import java.util.Iterator;
>+
> import org.apache.tuscany.das.rdb.Command;
> import org.apache.tuscany.das.rdb.DAS;
> import org.apache.tuscany.das.rdb.test.data.CityData;
>@@ -75,4 +78,44 @@
> assertEquals(numberOfStates + 1, root.getList("STATES").size());
> }
>
>+ public void testDeletes() throws Exception {
>+ DAS das = DAS.FACTORY.createDAS(getConfig("cityStates.xml"), getConnection());
>+ Command select = das
>+ .createCommand(
>+ "Select * from STATES inner join CITIES on STATES.ID = CITIES.STATE_ID");
>+ DataObject root = select.executeQuery();
>+
>+
>+ DataObject firstState = root.getDataObject("STATES[1]");
>+ String stateName = firstState.getString("NAME");
>+
>+ ArrayList cityNames = new ArrayList();
>+ Iterator i = firstState.getList("cities").iterator();
>+ while ( i.hasNext()) {
>+ DataObject firstCity = (DataObject) i.next();
>+ cityNames.add(firstCity.getString("NAME"));
>+ firstCity.delete();
>+ }
>+ firstState.delete();
>+
>+
>+
>+
>+ das.applyChanges(root);
>+
>+ root = select.executeQuery();
>+
>+ Iterator iter = root.getList("STATES").iterator();
>+ while ( iter.hasNext()) {
>+ DataObject state = (DataObject)iter.next();
>+ assertFalse(state.getString("NAME").equals(stateName));
>+ }
>+
>+ iter = root.getList("CITIES").iterator();
>+ while ( iter.hasNext()) {
>+ DataObject city = (DataObject)iter.next();
>+ assertFalse(cityNames.contains(city.getString("NAME")));
>+ }
>+
>+ }
> }
>Index: src/test/java/org/apache/tuscany/das/rdb/test/ExceptionTests.java
>===================================================================
>--- src/test/java/org/apache/tuscany/das/rdb/test/ExceptionTests.java (revision 425121)
>+++ src/test/java/org/apache/tuscany/das/rdb/test/ExceptionTests.java (working copy)
>@@ -16,6 +16,7 @@
> */
> package org.apache.tuscany.das.rdb.test;
>
>+import java.io.FileInputStream;
> import java.sql.Connection;
>
> import org.apache.tuscany.das.rdb.Command;
>@@ -26,6 +27,7 @@
> import org.apache.tuscany.das.rdb.test.data.OrderData;
> import org.apache.tuscany.das.rdb.test.data.OrderDetailsData;
> import org.apache.tuscany.das.rdb.test.framework.DasTest;
>+import org.apache.tuscany.das.rdb.util.ConfigUtil;
> import org.apache.tuscany.sdo.util.SDOUtil;
>
> public class ExceptionTests extends DasTest {
>@@ -133,5 +135,6 @@
>
> }
>
>+
>
> }
>Index: src/test/java/org/apache/tuscany/das/rdb/test/CrudWithChangeHistory.java
>===================================================================
>--- src/test/java/org/apache/tuscany/das/rdb/test/CrudWithChangeHistory.java (revision 425121)
>+++ src/test/java/org/apache/tuscany/das/rdb/test/CrudWithChangeHistory.java (working copy)
>@@ -48,6 +48,41 @@
> 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
>Index: src/test/java/org/apache/tuscany/das/rdb/test/OCCTests.java
>===================================================================
>--- src/test/java/org/apache/tuscany/das/rdb/test/OCCTests.java (revision 425121)
>+++ src/test/java/org/apache/tuscany/das/rdb/test/OCCTests.java (working copy)
>@@ -17,7 +17,10 @@
> package org.apache.tuscany.das.rdb.test;
>
> 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.Config;
>+import org.apache.tuscany.das.rdb.config.ConfigFactory;
> import org.apache.tuscany.das.rdb.test.data.BookData;
> import org.apache.tuscany.das.rdb.test.framework.DasTest;
>
>@@ -99,4 +102,29 @@
> throw ex;
> }
> }
>+
>+ public void testProvidedConfig() throws Exception {
>+ // Create config programmatically
>+ Config config = ConfigFactory.INSTANCE.createConfig();
>+ ConfigHelper helper = new ConfigHelper(config);
>+ helper.addPrimaryKey("BOOK.BOOK_ID");
>+ DAS das = DAS.FACTORY.createDAS(helper.getConfig(), getConnection());
>+
>+ // Read a book instance
>+ Command select = das
>+ .createCommand("SELECT * FROM BOOK WHERE BOOK_ID = 1");
>+ DataObject root = select.executeQuery();
>+ DataObject book = root.getDataObject("BOOK[1]");
>+ // Change a field to mark the instance 'dirty'
>+ book.setInt("QUANTITY", 2);
>+
>+ // Flush the change
>+
>+ das.applyChanges(root);
>+
>+ // Verify
>+ root = select.executeQuery();
>+ book = root.getDataObject("BOOK[1]");
>+ assertEquals(2, book.getInt("QUANTITY"));
>+ }
> }
>Index: src/test/java/org/apache/tuscany/das/rdb/test/ConverterTests.java
>===================================================================
>--- src/test/java/org/apache/tuscany/das/rdb/test/ConverterTests.java (revision 425121)
>+++ src/test/java/org/apache/tuscany/das/rdb/test/ConverterTests.java (working copy)
>@@ -23,8 +23,11 @@
>
> import org.apache.tuscany.das.rdb.Command;
> import org.apache.tuscany.das.rdb.DAS;
>+import org.apache.tuscany.das.rdb.test.customer.Customer;
>+import org.apache.tuscany.das.rdb.test.customer.CustomerFactory;
> import org.apache.tuscany.das.rdb.test.data.CustomerData;
> import org.apache.tuscany.das.rdb.test.framework.DasTest;
>+import org.apache.tuscany.sdo.util.SDOUtil;
>
> import commonj.sdo.DataObject;
>
>@@ -99,4 +102,59 @@
>
> }
>
>+ public void testInvalidConverter1() throws Exception {
>+
>+ DAS das = DAS.FACTORY.createDAS(getConfig("InvalidConverter.xml"), getConnection());
>+
>+ // Build the select command to read a specific customer and related
>+ // orders
>+ Command select = das
>+ .createCommand(
>+ "SELECT * FROM CUSTOMER LEFT JOIN ANORDER ON CUSTOMER.ID = ANORDER.CUSTOMER_ID where CUSTOMER.ID = ?");
>+
>+ // Parameterize the command
>+ select.setParameter(1, new Integer(1));
>+
>+ // Get the graph
>+ try {
>+ select.executeQuery();
>+ } catch (Exception ex) {
>+ assertEquals("java.lang.ClassNotFoundException: not.a.valid.class", ex.getMessage());
>+ }
>+
>+
>+ }
>+
>+ public void testInvalidConverter2() throws Exception {
>+
>+ SDOUtil.registerStaticTypes(CustomerFactory.class);
>+ DAS das = DAS.FACTORY.createDAS(getConfig("InvalidConverter.xml"), getConnection());
>+
>+ // Build the select command to read a specific customer and related
>+ // orders
>+ Command select = das
>+ .createCommand(
>+ "SELECT * FROM ANORDER");
>+
>+ // Get the graph
>+
>+ DataObject root = select.executeQuery();
>+ DataObject order = root.getDataObject("AnOrder[1]");
>+
>+ Customer customer = (Customer) root.createDataObject("Customer");
>+ customer.setID(700);
>+ customer.setLastName("Daniel");
>+ customer.setAddress("an address");
>+
>+ customer.getOrders().add(order);
>+
>+ try {
>+ das.applyChanges(root);
>+ } catch (Exception ex) {
>+ assertEquals("java.lang.ClassNotFoundException: not.a.valid.class", ex.getMessage());
>+ }
>+
>+
>+ }
>+
> }
>Index: src/test/java/org/apache/tuscany/das/rdb/test/GeneratedId.java
>===================================================================
>--- src/test/java/org/apache/tuscany/das/rdb/test/GeneratedId.java (revision 425121)
>+++ src/test/java/org/apache/tuscany/das/rdb/test/GeneratedId.java (working copy)
>@@ -22,6 +22,8 @@
> *
> */
>
>+import java.util.Iterator;
>+
> import org.apache.tuscany.das.rdb.Command;
> import org.apache.tuscany.das.rdb.DAS;
> import org.apache.tuscany.das.rdb.test.data.CompanyData;
>@@ -100,6 +102,31 @@
>
> }
>
>+ // Test insert into row with generated ID and generated insert
>+ public void testInsert4() throws Exception {
>+
>+ DAS das = DAS.FACTORY.createDAS(getConfig("CompanyConfig.xml"),getConnection());
>+ Command select = das.getCommand("all companies");
>+ DataObject root = select.executeQuery();
>+
>+ DataObject company = root.createDataObject("COMPANY");
>+ company.setString("NAME", "Phil's Tires");
>+ // This shouldn't do anything
>+ company.setInt("ID", 999);
>+
>+ das.applyChanges(root);
>+
>+ // Verify insert
>+ root = select.executeQuery();
>+
>+ assertEquals(4, root.getList("COMPANY").size());
>+ Iterator i = root.getList("COMPANY").iterator();
>+ while ( i.hasNext()) {
>+ DataObject comp = (DataObject)i.next();
>+ assertFalse( comp.getInt("ID") == 999);
>+ }
>+
>+ }
> // Test ability to propogate generated values back to owning data objects
> public void testPropagateIds() throws Exception {
>
>Index: src/test/java/org/apache/tuscany/das/rdb/test/CompoundKeyTests.java
>===================================================================
>--- src/test/java/org/apache/tuscany/das/rdb/test/CompoundKeyTests.java (revision 425121)
>+++ src/test/java/org/apache/tuscany/das/rdb/test/CompoundKeyTests.java (working copy)
>@@ -92,4 +92,21 @@
> assertEquals(2, firstOrder.getList("ORDERDETAILS").size());
>
> }
>+
>+ public void testReadAndDelete() throws Exception {
>+ DAS das = DAS.FACTORY.createDAS(getConfig("OrdersOrderDetailsConfig.xml"), getConnection());
>+ Command getOrderDetails = das
>+ .createCommand("Select * from ORDERDETAILS where ORDERID = ? AND PRODUCTID = ?");
>+
>+
>+ getOrderDetails.setParameter(1, new Integer(1));
>+ getOrderDetails.setParameter(2, new Integer(1));
>+
>+ DataObject root = getOrderDetails.executeQuery();
>+
>+ DataObject orderDetail = (DataObject) root.get("ORDERDETAILS[1]");
>+ orderDetail.delete();
>+ das.applyChanges(root);
>+
>+ }
> }
>Index: src/test/resources/BooksConfig.xml
>===================================================================
>--- src/test/resources/BooksConfig.xml (revision 425121)
>+++ src/test/resources/BooksConfig.xml (working copy)
>@@ -21,7 +21,7 @@
>
> <Table tableName="BOOK">
> <Column columnName="BOOK_ID" primaryKey="true"/>
>- <Column columnName="OCC" collision="true"/>
>+ <Column columnName="OCC" collision="true" propertyName="anOccColumn"/>
> </Table>
>
> </Config>
>Index: src/test/resources/InvalidConverter.xml
>===================================================================
>--- /dev/null (revision 0)
>+++ src/test/resources/InvalidConverter.xml (revision 0)
>@@ -0,0 +1,35 @@
>+<?xml version="1.0" encoding="ASCII"?>
>+<!--
>+ Copyright (c) 2005 The Apache Software Foundation or its licensors, as applicable.
>+
>+ Licensed 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.
>+ -->
>+<Config xsi:noNamespaceSchemaLocation="http:///org.apache.tuscany.das.rdb/config.xsd"
>+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>+dataObjectModel="http:///org.apache.tuscany.das.rdb.test/customer.xsd">
>+
>+ <Table tableName="CUSTOMER" typeName="Customer">
>+ <Column columnName="ID" primaryKey="true" converterClassName="not.a.valid.class"/>
>+ </Table>
>+
>+ <Table tableName="ANORDER" typeName="AnOrder">
>+ <Column columnName="CUSTOMER_ID"/>
>+ <Column columnName="ID" primaryKey="true"/>
>+ </Table>
>+
>+ <Relationship name="orders" primaryKeyTable="CUSTOMER" foreignKeyTable="ANORDER" many="true">
>+ <KeyPair primaryKeyColumn="ID" foreignKeyColumn="CUSTOMER_ID"/>
>+ </Relationship>
>+
>+</Config>
>+
>Index: src/main/java/org/apache/tuscany/das/rdb/impl/ApplyChangesCommandImpl.java
>===================================================================
>--- src/main/java/org/apache/tuscany/das/rdb/impl/ApplyChangesCommandImpl.java (revision 425121)
>+++ src/main/java/org/apache/tuscany/das/rdb/impl/ApplyChangesCommandImpl.java (working copy)
>@@ -34,13 +34,6 @@
> private static final boolean debug = false;
>
> private ChangeSummarizer summarizer = new ChangeSummarizer();
>-
>- public ApplyChangesCommandImpl() {
>- }
>-
>- public ApplyChangesCommandImpl(Config config){
>- this.configWrapper = new MappingWrapper(config);
>- }
>
> public ApplyChangesCommandImpl(Config config, Connection connection){
> this.configWrapper = new MappingWrapper(config);
>@@ -53,18 +46,7 @@
> summarizer.setConnection(connection);
> }
>
>- public void addCreateCommand(Type type, Command cmd) {
>- summarizer.addCreateCommand(type, cmd);
>- }
>
>- public void addUpdateCommand(Type type, Command cmd) {
>- summarizer.addUpdateCommand(type, cmd);
>- }
>-
>- public void addDeleteCommand(Type type, Command cmd) {
>- summarizer.addDeleteCommand(type, cmd);
>- }
>-
> public void execute(DataObject root) {
> DebugUtil.debugln(getClass(), debug, "Executing ApplyChangesCmd");
>
>Index: src/main/java/org/apache/tuscany/das/rdb/impl/FactoryRegistry.java
>===================================================================
>--- src/main/java/org/apache/tuscany/das/rdb/impl/FactoryRegistry.java (revision 425121)
>+++ src/main/java/org/apache/tuscany/das/rdb/impl/FactoryRegistry.java (working copy)
>@@ -39,7 +39,7 @@
> ChangeFactory factory = (ChangeFactory)registry.get(type);
> if ( factory == null ) {
> DebugUtil.debugln(getClass(), debug, "Creating new ChangeFactory for type " + type.getName());
>- factory = new ChangeFactory(type, mapping, connection);
>+ factory = new ChangeFactory(mapping, connection);
> registry.put(type, factory);
> }
> return factory;
>Index: src/main/java/org/apache/tuscany/das/rdb/impl/ParameterImpl.java
>===================================================================
>--- src/main/java/org/apache/tuscany/das/rdb/impl/ParameterImpl.java (revision 425121)
>+++ src/main/java/org/apache/tuscany/das/rdb/impl/ParameterImpl.java (working copy)
>@@ -50,10 +50,6 @@
> super();
> }
>
>- public ParameterImpl(String name) {
>- this.name = name;
>- }
>-
> public ParameterImpl(int index) {
> this.index = index;
> }
>@@ -113,14 +109,6 @@
> return this.converter;
> }
>
>-
>- public String toString() {
>- StringBuffer buffer = new StringBuffer();
>- buffer.append("Index: " + getIndex());
>- buffer.append("\nName: " + getName());
>- buffer.append("\nValue: " + getValue());
>- return buffer.toString();
>- }
>
>
> }
>Index: src/main/java/org/apache/tuscany/das/rdb/impl/InsertCommandImpl.java
>===================================================================
>--- src/main/java/org/apache/tuscany/das/rdb/impl/InsertCommandImpl.java (revision 425121)
>+++ src/main/java/org/apache/tuscany/das/rdb/impl/InsertCommandImpl.java (working copy)
>@@ -35,9 +35,6 @@
> addParameters(create.getParameters());
> }
>
>- protected boolean isInsert() {
>- return true;
>- }
>
> public int getGeneratedKey() {
>
>@@ -60,16 +57,5 @@
>
> }
>
>- public String toString() {
>
>- String superString = super.toString();
>- StringBuffer buffer = new StringBuffer(superString);
>-
>- buffer.append("\nGenerating key: " + hasGeneratedKey);
>- if (hasGeneratedKey)
>- buffer.append("\nGenerated key: " + generatedKey);
>-
>- return buffer.toString();
>- }
>-
> }
>Index: src/main/java/org/apache/tuscany/das/rdb/impl/WriteCommandImpl.java
>===================================================================
>--- src/main/java/org/apache/tuscany/das/rdb/impl/WriteCommandImpl.java (revision 425121)
>+++ src/main/java/org/apache/tuscany/das/rdb/impl/WriteCommandImpl.java (working copy)
>@@ -17,8 +17,6 @@
> package org.apache.tuscany.das.rdb.impl;
>
> import java.sql.SQLException;
>-import java.util.Collection;
>-import java.util.Iterator;
> import java.util.StringTokenizer;
>
> import org.apache.tuscany.das.rdb.config.Config;
>@@ -89,13 +87,7 @@
> addParameter(p);
> }
> }
>- public void addParameters(Collection updateParameters) {
>- Iterator i = updateParameters.iterator();
>- while ( i.hasNext()) {
>- ParameterImpl p = (ParameterImpl) i.next();
>- addParameter(p);
>- }
>- }
>+
>
>
> }
>Index: src/main/java/org/apache/tuscany/das/rdb/impl/ChangeFactory.java
>===================================================================
>--- src/main/java/org/apache/tuscany/das/rdb/impl/ChangeFactory.java (revision 425121)
>+++ src/main/java/org/apache/tuscany/das/rdb/impl/ChangeFactory.java (working copy)
>@@ -28,11 +28,8 @@
> import org.apache.tuscany.das.rdb.util.DebugUtil;
>
> import commonj.sdo.DataObject;
>-import commonj.sdo.Type;
>
> public class ChangeFactory {
>-
>- private final Type type;
>
> private InsertCommandImpl createCommand;
>
>@@ -46,15 +43,10 @@
>
> private final ConnectionImpl connection;
>
>- public ChangeFactory(Type type, MappingWrapper mapping, ConnectionImpl connection) {
>- this.type = type;
>+ public ChangeFactory(MappingWrapper mapping, ConnectionImpl connection) {
> this.mapping = mapping;
> this.connection = connection;
> }
>-
>- public Type getType() {
>- return this.type;
>- }
>
> public void setCreateCommand(InsertCommandImpl cmd) {
> createCommand = cmd;
>@@ -138,6 +130,7 @@
> deleteCommand = new DeleteCommandImpl(delete);
> }
> deleteCommand.setConnection(connection);
>+ deleteCommand.configWrapper = mapping;
> }
> return deleteCommand;
> }
>Index: src/main/java/org/apache/tuscany/das/rdb/impl/QueryString.java
>===================================================================
>--- src/main/java/org/apache/tuscany/das/rdb/impl/QueryString.java (revision 425121)
>+++ src/main/java/org/apache/tuscany/das/rdb/impl/QueryString.java (working copy)
>@@ -1,86 +0,0 @@
>-/**
>- *
>- * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
>- *
>- * Licensed 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.impl;
>-
>-import java.util.HashMap;
>-import java.util.Iterator;
>-import java.util.regex.Matcher;
>-import java.util.regex.Pattern;
>-
>-import org.apache.tuscany.das.rdb.util.DebugUtil;
>-
>-
>-public class QueryString {
>-
>- private final String unmodifiedQueryString;
>- private final String preparedString;
>- private HashMap parameters = new HashMap();
>- private static final boolean debug = false;
>-
>- public QueryString(String originalString) {
>- this.unmodifiedQueryString = originalString;
>- this.preparedString = replaceNamesAndSetIndexes(originalString);
>- }
>-
>- public String getPreparedString() {
>- return this.preparedString;
>- }
>-
>- public String getUnmodifiedString() {
>- return this.unmodifiedQueryString;
>- }
>-
>- public int getParameterIndex(String name) {
>- DebugUtil.debugln(getClass(), debug, "Looking for parameter index for: " + name);
>- return ((Integer)parameters.get(name)).intValue();
>- }
>-
>- private String replaceNamesAndSetIndexes(String query) {
>- DebugUtil.debugln(getClass(), debug, "Parameterizing query: " + query);
>- Pattern p = Pattern.compile(":[\\S&&[^,()]]*");
>- Matcher m = p.matcher(query);
>-
>- int index = 1;
>- while (m.find()) {
>- parameters.put(m.group().substring(1), new Integer(index));
>- query = m.replaceFirst("?");
>- m = p.matcher(query);
>- index++;
>- }
>-
>- DebugUtil.debugln(getClass(), debug, "Parameterized query: " + query);
>- return query;
>- }
>-
>-
>- public String toString() {
>- StringBuffer buffer = new StringBuffer();
>- buffer.append("\nOriginal SQL: ");
>- buffer.append(unmodifiedQueryString);
>- buffer.append("\nPrepared SQL: ");
>- buffer.append(preparedString);
>- buffer.append("\nParameters: ");
>- Iterator i = parameters.keySet().iterator();
>- while ( i.hasNext() ) {
>- String key = (String)i.next();
>- buffer.append("\n");
>- buffer.append(key);
>- }
>- return buffer.toString();
>- }
>-
>-}
>Index: src/main/java/org/apache/tuscany/das/rdb/impl/DeleteList.java
>===================================================================
>--- src/main/java/org/apache/tuscany/das/rdb/impl/DeleteList.java (revision 425121)
>+++ src/main/java/org/apache/tuscany/das/rdb/impl/DeleteList.java (working copy)
>@@ -21,6 +21,8 @@
> import java.util.HashMap;
> import java.util.Iterator;
>
>+import org.apache.tuscany.das.rdb.util.DebugUtil;
>+
> /**
> * DeleteList will sort delete operations so that child objects are deleted
> * before their parents
>@@ -40,7 +42,7 @@
> }
>
> public void add(ChangeOperation op) {
>- if (( order == null ) || ( op.getTableName() == null ) ) {
>+ if (( order.size() == 0 ) || ( op.getTableName() == null ) ) {
> deleteOperations.add(op);
> } else {
> String name = op.getTableName();
>@@ -54,11 +56,12 @@
> }
>
> public Collection getSortedList() {
>- if (( order != null ) && ( opsByTableName.keySet().size() > 0) ) {
>+ if (( order.size() > 0 ) && ( opsByTableName.keySet().size() > 0) ) {
> Iterator i = this.order.iterator();
> while (i.hasNext()) {
> String name = (String) i.next();
>- deleteOperations.addAll((Collection) opsByTableName.get(name));
>+ if ( opsByTableName.get(name) != null)
>+ deleteOperations.addAll((Collection) opsByTableName.get(name));
> }
> }
>
>Index: src/main/java/org/apache/tuscany/das/rdb/ConfigHelper.java
>===================================================================
>--- src/main/java/org/apache/tuscany/das/rdb/ConfigHelper.java (revision 425121)
>+++ src/main/java/org/apache/tuscany/das/rdb/ConfigHelper.java (working copy)
>@@ -44,9 +44,6 @@
> configWrapper = new MappingWrapper(config);
> }
>
>- public Config newInstance() {
>- return factory.createConfig();
>- }
>
> public void addPrimaryKey(String columnName) {
> configWrapper.addPrimaryKey(columnName);
>Index: src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java
>===================================================================
>--- src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java (revision 425121)
>+++ src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java (working copy)
>@@ -190,19 +190,6 @@
> return propertyName;
> }
>
>- public void addCollisionColumn(String columnName) {
>-
>- if (config == null)
>- config = factory.createConfig();
>-
>- QualifiedColumn occColumn = new QualifiedColumn(columnName);
>- Table t = findOrCreateTable(occColumn.getTableName());
>- Column c = findOrCreateColumn(t, occColumn.getColumnName());
>- c.setCollision(true);
>-
>- config.getTable().add(t);
>- }
>-
> public void addTable(String tableName, String typeName) {
> Table table = getTable(tableName);
> if (table != null)
>Index: src/main/java/org/apache/tuscany/das/rdb/generator/impl/InsertGenerator.java
>===================================================================
>--- src/main/java/org/apache/tuscany/das/rdb/generator/impl/InsertGenerator.java (revision 425121)
>+++ src/main/java/org/apache/tuscany/das/rdb/generator/impl/InsertGenerator.java (working copy)
>@@ -111,7 +111,7 @@
> } else {
> if ( obj.isSet(p) ) {
> Relationship relationship = config.getRelationshipByReference(p);
>- if ( p.getOpposite().isMany() || (hasState(config, relationship, obj))) {
>+ if ((p.getOpposite() != null && p.getOpposite().isMany()) || (hasState(config, relationship, obj))) {
> RelationshipWrapper r = new RelationshipWrapper(
> relationship);
> Iterator keys = r.getForeignKeys().iterator();
>Index: pom.xml
>===================================================================
>--- pom.xml (revision 425121)
>+++ pom.xml (working copy)
>@@ -63,8 +63,6 @@
> <id>config</id>
> <configuration>
> <schemaFile>${basedir}/src/main/resources/config.xsd</schemaFile>
>- <generateLoader>true</generateLoader>
>- <generateSwitch>true</generateSwitch>
> <noNotification>true</noNotification>
> <noUnsettable>true</noUnsettable>
> </configuration>
>@@ -76,8 +74,6 @@
> <id>company</id>
> <configuration>
> <schemaFile>${basedir}/src/test/resources/company.xsd</schemaFile>
>- <generateLoader>true</generateLoader>
>- <generateSwitch>true</generateSwitch>
> <noUnsettable>true</noUnsettable>
> </configuration>
> <goals>
>@@ -88,8 +84,6 @@
> <id>customer</id>
> <configuration>
> <schemaFile>${basedir}/src/test/resources/customer.xsd</schemaFile>
>- <generateLoader>true</generateLoader>
>- <generateSwitch>true</generateSwitch>
> <noUnsettable>true</noUnsettable>
> </configuration>
> <goals>
>
>
>------------------------------------------------------------------------
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: tuscany-dev-unsubscribe@ws.apache.org
>For additional commands, e-mail: tuscany-dev-help@ws.apache.org
>
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-dev-help@ws.apache.org