Sometimes code is better so here's a junit-Test to see what I mean.

Another problem is that I can not run the unit-test directly from within
eclipse because the DTD can not be resolved appropriately the
LocalEntityResolver.resolveEntity() is never called.

-------------------8<-------------------
SCHWERWIEGEND: Parse Error at line 1 column 23: Document root element
"database", must match DOCTYPE root "null".
org.xml.sax.SAXParseException: Document root element "database", must
match DOCTYPE root "null".
        at
com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown
Source)
        at
com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(Unknown
Source)
-------------------8<-------------------

Tom

Tom Schindl wrote:
> Thomas Dudziak wrote:
> 
>>On 4/20/06, Tom Schindl <[EMAIL PROTECTED]> wrote:
>>
>>
>>
>>>yes I understand. Attached is the patch to the questionable missing
>>>break which is when missining intentional strange and should at least be
>>>documented.
>>
>>
>>Thanks, is fixed in SVN
>>
>>
>>
>>>One more question I don't see any code that deals with the situations
>>>where one changes e.g. the name of column/table, removes a column/table,
>>>... which is referenced in indices, foreign keys, ... .
>>
>>
>>I'm not exactly sure what you mean ?
> 
> 
> Well suppose I'm writing a modelling tool based upon your Model-Classes
> having created 2 tables and foreign key constraint. After that I see
> that I have a typo in the name of the the foreign-key provider table, if
> I now rename the table by setting setName() the ForgeinKey-Reference
> doesn't get informed about this and as result the internal structure is
> broken:
> 
> _foreignTableName != _foreignTable.getName()
> 
> if i would now write dump the the files to db.xml I could not load it
> the next time.
> 
> The same applies when renaming columns ;-) I think all this situations
> can be dealt with easily when adding PropertyChangeSupport to all model
> classes and e.g. the foreignKey-Instance adds itself to the
> PropertyChangeListeners and updates its _foreignTableName-Attribute when
> the table name changes.
> 
> Tom
> 
> 
>>Tom
>>
>>
>>
> 
> 

package org.apache.ddlutils.model;

import java.io.StringReader;

import org.apache.ddlutils.io.DatabaseIO;

import junit.framework.TestCase;

public class ForeignKeyTest extends TestCase {
        
        private Database readModel(String modelAsXml)
    {
                DatabaseIO reader = new DatabaseIO();
                // NOT WORKING FOR ME
                // reader.setValidateXml(false);
                
        return reader.read(new StringReader(modelAsXml));
    }
        
        public void testTableRenaming() {
                Database model = readModel(
                    "<database name='test'>\n" +
                    "  <table name='SomeTable'\n" +
                    "         description='Some table'>\n" +
                    "    <column name='ID'\n" +
                    "            type='VARCHAR'\n" +
                    "            size='16'\n" +
                    "            primaryKey='true'\n" +
                    "            required='true'\n" +
                    "            description='The primary key'/>\n" +
                    "  </table>\n" +
                    "  <table name='AnotherTable'\n" +
                    "         description='And another table'>\n" +
                    "    <column name='Some_ID'\n" +
                    "            type='VARCHAR'\n" +
                    "            size='16'\n" +
                    "            description='The foreign key'/>\n" +
                    "    <foreign-key foreignTable='SomeTable'>\n" +
                    "       <reference local='Some_ID' foreign='ID'/>\n" +
                    "    </foreign-key>\n" +
                    "  </table>\n" +
                    "</database>");
                
                model.getTable(0).setName("SomeNewName");
                model.initialize();
                
                assertEquals("SomeNewName", 
model.getTable(1).getForeignKey(0).getForeignTableName());
        }
}

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to