From: <hib...@li...> - 2006-04-07 12:25:59
|
Author: max...@jb... Date: 2006-04-07 08:25:55 -0400 (Fri, 07 Apr 2006) New Revision: 9738 Added: trunk/HibernateExt/tools/src/test/org/hibernate/tool/test/jdbc2cfg/RevEngForeignKeyTests.java trunk/HibernateExt/tools/src/test/org/hibernate/tool/test/jdbc2cfg/foreignkeytest.reveng.xml Log: HBX-615 exclude for <set> and <many-to-one> Added: trunk/HibernateExt/tools/src/test/org/hibernate/tool/test/jdbc2cfg/RevEngForeignKeyTests.java =================================================================== --- trunk/HibernateExt/tools/src/test/org/hibernate/tool/test/jdbc2cfg/RevEngForeignKeyTests.java 2006-04-07 12:24:37 UTC (rev 9737) +++ trunk/HibernateExt/tools/src/test/org/hibernate/tool/test/jdbc2cfg/RevEngForeignKeyTests.java 2006-04-07 12:25:55 UTC (rev 9738) @@ -0,0 +1,141 @@ +/* + * Created on 2004-12-01 + * + */ +package org.hibernate.tool.test.jdbc2cfg; + +import junit.framework.Test; +import junit.framework.TestSuite; + +import org.hibernate.MappingException; +import org.hibernate.cfg.Environment; +import org.hibernate.cfg.JDBCMetaDataConfiguration; +import org.hibernate.cfg.Settings; +import org.hibernate.cfg.SettingsFactory; +import org.hibernate.cfg.reveng.DefaultReverseEngineeringStrategy; +import org.hibernate.cfg.reveng.OverrideRepository; +import org.hibernate.cfg.reveng.ReverseEngineeringStrategy; +import org.hibernate.mapping.PersistentClass; +import org.hibernate.mapping.Property; +import org.hibernate.mapping.SimpleValue; +import org.hibernate.tool.JDBCMetaDataBinderTestCase; + +/** + * @author max + * + */ +public class RevEngForeignKeyTests extends JDBCMetaDataBinderTestCase { + + private static final String OVERRIDETEST_FOREIGNKEY_XML = "org/hibernate/tool/test/jdbc2cfg/foreignkeytest.reveng.xml"; + + public static Test suite() { + return new TestSuite(RevEngForeignKeyTests.class); + } + + private Settings settings; + + public void testDefaultBiDirectional() { + + PersistentClass project = cfg.getClassMapping("Project"); + + assertNotNull(project.getProperty("worksOns")); + assertNotNull(project.getProperty("employee")); + assertEquals(3, project.getPropertyClosureSpan()); + assertEquals("projectId", project.getIdentifierProperty().getName()); + + PersistentClass employee = cfg.getClassMapping("Employee"); + + assertNotNull(employee.getProperty("worksOns")); + assertNotNull(employee.getProperty("employees")); + assertNotNull(employee.getProperty("employee")); + assertNotNull(employee.getProperty("projects")); + assertEquals(5, employee.getPropertyClosureSpan()); + assertEquals("id", employee.getIdentifierProperty().getName()); + + PersistentClass worksOn = cfg.getClassMapping("WorksOn"); + + assertNotNull(worksOn.getProperty("project")); + assertNotNull(worksOn.getProperty("employee")); + assertEquals(4, worksOn.getPropertyClosureSpan()); + assertEquals("id", worksOn.getIdentifierProperty().getName()); + + } + + public void testSetAndManyToOne() { + + OverrideRepository or = buildOverrideRepository(); + + or.addResource(OVERRIDETEST_FOREIGNKEY_XML); + ReverseEngineeringStrategy repository = or.getReverseEngineeringStrategy(new DefaultReverseEngineeringStrategy()); + + JDBCMetaDataConfiguration localCfg = new JDBCMetaDataConfiguration(); + localCfg.setReverseEngineeringStrategy(repository); + localCfg.readFromJDBC(); + + PersistentClass project = localCfg.getClassMapping("Project"); + + assertNotNull(project.getProperty("worksOns")); + assertPropertyNotExists(project, "employee", "should be removed by reveng.xml"); + Property property = project.getProperty("teamLead"); + assertNotNull(property); + assertTrue(property.getValue() instanceof SimpleValue); + assertEquals(3, project.getPropertyClosureSpan()); + assertEquals("projectId", project.getIdentifierProperty().getName()); + + PersistentClass employee = localCfg.getClassMapping("Employee"); + + assertNotNull(employee.getProperty("worksOns")); + assertNotNull("property should be renamed by reveng.xml", employee.getProperty("manager")); + assertPropertyNotExists( employee, "employees", "set should be excluded by reveng.xml" ); + assertNotNull("should be renamed by reveng.xml", employee.getProperty("managedProjects")); + + assertEquals(4, employee.getPropertyClosureSpan()); + assertEquals("id", employee.getIdentifierProperty().getName()); + + PersistentClass worksOn = localCfg.getClassMapping("WorksOn"); + + assertNotNull(worksOn.getProperty("project")); + assertNotNull(worksOn.getProperty("employee")); + assertEquals(4, worksOn.getPropertyClosureSpan()); + assertEquals("id", worksOn.getIdentifierProperty().getName()); + + } + + private void assertPropertyNotExists(PersistentClass employee, String name, String msg) { + try { + employee.getProperty(name); + fail(msg); + } catch(MappingException me) { + // excpected + } + } + + private OverrideRepository buildOverrideRepository() { + if(settings==null) { + settings = new SettingsFactory() { + // trick to get hibernate.properties settings for defaultschema/catalog in here + }.buildSettings(Environment.getProperties()); + } + //return new OverrideRepository(settings.getDefaultCatalogName(),settings.getDefaultSchemaName()); + return new OverrideRepository(); + } + + protected String[] getCreateSQL() { + return new String[] { + "create table PROJECT ( project_id integer not null, name varchar(50), team_lead integer, primary key (project_id) )", + "create table EMPLOYEE ( id integer not null, name varchar(50), manager_id integer, primary key (id), constraint employee_manager foreign key (manager_id) references EMPLOYEE)", + "create table WORKS_ON ( project_id integer not null, employee_id integer not null, start_date date, end_date date, primary key (project_id, employee_id), foreign key (employee_id) references EMPLOYEE, foreign key (project_id) references PROJECT )", + "alter table PROJECT add constraint project_manager foreign key (team_lead) references EMPLOYEE" + }; + } + + protected String[] getDropSQL() { + return new String[] { + "alter table PROJECT drop constraint project_manager", + "drop table WORKS_ON", + "drop table EMPLOYEE", + "drop table PROJECT", + }; + } + +} Added: trunk/HibernateExt/tools/src/test/org/hibernate/tool/test/jdbc2cfg/foreignkeytest.reveng.xml =================================================================== --- trunk/HibernateExt/tools/src/test/org/hibernate/tool/test/jdbc2cfg/foreignkeytest.reveng.xml 2006-04-07 12:24:37 UTC (rev 9737) +++ trunk/HibernateExt/tools/src/test/org/hibernate/tool/test/jdbc2cfg/foreignkeytest.reveng.xml 2006-04-07 12:25:55 UTC (rev 9738) @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE hibernate-reverse-engineering SYSTEM "http://hibernate.sourceforge.net/hibernate-reverse-engineering-3.0.dtd" > +<hibernate-reverse-engineering> + +<!-- This one assumes set and many-to-one is exclude=false --> + <table name="EMPLOYEE"> + <foreign-key constraint-name="EMPLOYEE_MANAGER"> + <many-to-one property="manager"/> + <set exclude="true"/> + </foreign-key> + </table> + + <table name="PROJECT"> + <foreign-key constraint-name="PROJECT_MANAGER"> + <many-to-one exclude="true"/> + <set property="managedProjects"/> + </foreign-key> + </table> + +</hibernate-reverse-engineering> \ No newline at end of file |