[hibernate-commits] Hibernate SVN: r10255 - in trunk/HibernateExt/tools/src: java/org/hibernate/cfg java/org/hibernate/cfg/reveng java/org/hibernate/tool/ant java/org/hibernate/tool/hbm2x java/org/hibernate/tool/hbm2x/visitor templates/dao test/org/hibernate/tool/test/jdbc2cfg

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Mon Aug 14 10:26:26 EDT 2006


Author: max.andersen at jboss.com
Date: 2006-08-14 10:26:14 -0400 (Mon, 14 Aug 2006)
New Revision: 10255

Modified:
   trunk/HibernateExt/tools/src/java/org/hibernate/cfg/JDBCBinder.java
   trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/DefaultReverseEngineeringStrategy.java
   trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/ReverseEngineeringSettings.java
   trunk/HibernateExt/tools/src/java/org/hibernate/tool/ant/JDBCConfigurationTask.java
   trunk/HibernateExt/tools/src/java/org/hibernate/tool/hbm2x/Cfg2JavaTool.java
   trunk/HibernateExt/tools/src/java/org/hibernate/tool/hbm2x/visitor/DefaultValueVisitor.java
   trunk/HibernateExt/tools/src/templates/dao/daohome.ftl
   trunk/HibernateExt/tools/src/test/org/hibernate/tool/test/jdbc2cfg/ManyToManyTest.java
Log:
detect many-to-many and optimstic lock setting exposed on ant task.

mix fixes/cleanup

Modified: trunk/HibernateExt/tools/src/java/org/hibernate/cfg/JDBCBinder.java
===================================================================
--- trunk/HibernateExt/tools/src/java/org/hibernate/cfg/JDBCBinder.java	2006-08-14 10:20:21 UTC (rev 10254)
+++ trunk/HibernateExt/tools/src/java/org/hibernate/cfg/JDBCBinder.java	2006-08-14 14:26:14 UTC (rev 10255)
@@ -258,7 +258,7 @@
 			}
         	
         	if(keys.size()>1) {
-        		throw new JDBCBinderException("more than one other foreign key to choose from!"); // todo: hande better ?
+        		throw new JDBCBinderException("more than one other foreign key to choose from!"); // todo: handle better ?
         	}
         	
         	ForeignKey fk = (ForeignKey) keys.get( 0 );

Modified: trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/DefaultReverseEngineeringStrategy.java
===================================================================
--- trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/DefaultReverseEngineeringStrategy.java	2006-08-14 10:20:21 UTC (rev 10254)
+++ trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/DefaultReverseEngineeringStrategy.java	2006-08-14 14:26:14 UTC (rev 10255)
@@ -160,7 +160,7 @@
 	}
 
 	public boolean useColumnForOptimisticLock(TableIdentifier identifier, String column) {
-		if(settings.hasAutoOptimisticLockDetection()) {
+		if(settings.getDetectOptimsticLock()) {
 			return AUTO_OPTIMISTICLOCK_COLUMNS.contains(column.toLowerCase())?true:false;
 		} else {
 			return false;
@@ -200,16 +200,19 @@
 	}
 
 	public boolean isManyToManyTable(Table table) {
-		if(settings.getAutoManyToManyDetection()) {
+		if(settings.getDetectManyToMany()) {
 			Iterator foreignKeyIterator = table.getForeignKeyIterator();
 			List foreignKeys = new ArrayList();
 			while ( foreignKeyIterator.hasNext() ) {
 				ForeignKey fkey = (ForeignKey) foreignKeyIterator.next();
 				foreignKeys.add( fkey );
 				if(foreignKeys.size()>2) {
-					return false; // early exit if we have more than one fk.
+					return false; // early exit if we have more than two fk.
 				}
 			}
+/*			if(foreignKeys.size()!=2) {
+				return false;
+			}*/
 			
 			Set columns = new HashSet();
 			Iterator columnIterator = table.getColumnIterator();

Modified: trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/ReverseEngineeringSettings.java
===================================================================
--- trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/ReverseEngineeringSettings.java	2006-08-14 10:20:21 UTC (rev 10254)
+++ trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/ReverseEngineeringSettings.java	2006-08-14 14:26:14 UTC (rev 10255)
@@ -6,10 +6,10 @@
 	//final ReverseEngineeringStrategy rootStrategy;
 	
 	private String defaultPackageName = "";
-	private boolean autoOptimisticLockDetection = true;
+	private boolean detectOptimisticLock = true;
 	private boolean createCollectionForForeignKey = true;
 	private boolean createManyToOneForForeignKey = true;
-	private boolean autoManyToManyDetection;
+	private boolean detectManyToMany = true;
 	
 	//public ReverseEngineeringSettings(ReverseEngineeringStrategy rootStrategy) {
 	//	this.rootStrategy = rootStrategy;
@@ -30,13 +30,14 @@
 	}
 	
 	/** If true, reverse engineering strategy will try and autodetect columns for optimistc locking, e.g. VERSION and TIMESTAMP */
-	public boolean hasAutoOptimisticLockDetection() {
-		return autoOptimisticLockDetection ;
+	public boolean getDetectOptimsticLock() {
+		return detectOptimisticLock ;
 	}
 	
-	public void setAutoOptimisticLockDetection(
+	public ReverseEngineeringSettings setDetectOptimisticLock(
 			boolean optimisticLockSupportEnabled) {
-		this.autoOptimisticLockDetection = optimisticLockSupportEnabled;
+		this.detectOptimisticLock = optimisticLockSupportEnabled;
+		return this;
 	}
 
 	/** if true, a collection will be mapped for each foreignkey */
@@ -62,13 +63,13 @@
 		return this;
 	}
 
-	public ReverseEngineeringSettings setAutoManyToManyDetection(boolean b) {
-		this.autoManyToManyDetection = b;
+	public ReverseEngineeringSettings setDetectManyToMany(boolean b) {
+		this.detectManyToMany = b;
 		return this;
 	}
 	
-	public boolean getAutoManyToManyDetection() {
-		return autoManyToManyDetection;
+	public boolean getDetectManyToMany() {
+		return detectManyToMany;
 	}
 	
 	/** return the top/root strategy. Allows a lower strategy to ask another question. Dangerous to do since recursive loops can easily occur! */

Modified: trunk/HibernateExt/tools/src/java/org/hibernate/tool/ant/JDBCConfigurationTask.java
===================================================================
--- trunk/HibernateExt/tools/src/java/org/hibernate/tool/ant/JDBCConfigurationTask.java	2006-08-14 10:20:21 UTC (rev 10254)
+++ trunk/HibernateExt/tools/src/java/org/hibernate/tool/ant/JDBCConfigurationTask.java	2006-08-14 14:26:14 UTC (rev 10255)
@@ -31,6 +31,10 @@
     private String reverseEngineeringStrategyClass;
     private String packageName;
 	private Path revengFiles;
+
+	private boolean detectManyToMany;
+
+	private boolean detectOptimisticLock;
     
 	public JDBCConfigurationTask() {
 		setDescription("JDBC Configuration (for reverse engineering)");
@@ -49,7 +53,10 @@
         jmdc.setPreferBasicCompositeIds(preferBasicCompositeIds);
 
 		DefaultReverseEngineeringStrategy defaultStrategy = new DefaultReverseEngineeringStrategy();
-		ReverseEngineeringSettings qqsettings = new ReverseEngineeringSettings().setDefaultPackageName(packageName);
+		ReverseEngineeringSettings qqsettings = 
+				new ReverseEngineeringSettings().setDefaultPackageName(packageName)
+				.setDetectManyToMany( detectManyToMany )
+				.setDetectOptimisticLock( detectOptimisticLock );
 		
         if(packageName!=null) {
             defaultStrategy.setSettings(qqsettings);
@@ -93,6 +100,14 @@
 		preferBasicCompositeIds = b;
 	}
 	
+	public void setDetectManyToMany(boolean b) {
+		detectManyToMany = b;
+	}
+	
+	public void setDetectOptimisticLock(boolean b) {
+		detectOptimisticLock = b;
+	}
+	
     private ReverseEngineeringStrategy loadreverseEngineeringStrategy(final String className, ReverseEngineeringStrategy delegate) 
     throws BuildException {
         try {

Modified: trunk/HibernateExt/tools/src/java/org/hibernate/tool/hbm2x/Cfg2JavaTool.java
===================================================================
--- trunk/HibernateExt/tools/src/java/org/hibernate/tool/hbm2x/Cfg2JavaTool.java	2006-08-14 10:20:21 UTC (rev 10254)
+++ trunk/HibernateExt/tools/src/java/org/hibernate/tool/hbm2x/Cfg2JavaTool.java	2006-08-14 14:26:14 UTC (rev 10255)
@@ -35,6 +35,7 @@
 import org.hibernate.tool.hbm2x.pojo.ImportContext;
 import org.hibernate.tool.hbm2x.pojo.NoopImportContext;
 import org.hibernate.tool.hbm2x.pojo.POJOClass;
+import org.hibernate.tool.hbm2x.visitor.JavaTypeFromValueVisitor;
 import org.hibernate.type.CompositeCustomType;
 import org.hibernate.type.CustomType;
 import org.hibernate.type.PrimitiveType;
@@ -206,7 +207,7 @@
 
 	private static Set NONPRIMITIVETYPES = null;
 
-	boolean isNonPrimitiveTypeName(String typeName) {
+	static public boolean isNonPrimitiveTypeName(String typeName) {
 		if ( NONPRIMITIVETYPES == null ) {
 			NONPRIMITIVETYPES = new HashSet();
 			Field[] fields = Hibernate.class.getFields();
@@ -297,6 +298,7 @@
 	}
 
 	private String getJavaTypeName(Value value, boolean preferRawTypeNames) {
+		if(true) return (String) value.accept( new JavaTypeFromValueVisitor() );
 		if ( value instanceof Component) {
 			// composite-element breaks without it.
 			return ((Component)value).getComponentClassName();

Modified: trunk/HibernateExt/tools/src/java/org/hibernate/tool/hbm2x/visitor/DefaultValueVisitor.java
===================================================================
--- trunk/HibernateExt/tools/src/java/org/hibernate/tool/hbm2x/visitor/DefaultValueVisitor.java	2006-08-14 10:20:21 UTC (rev 10254)
+++ trunk/HibernateExt/tools/src/java/org/hibernate/tool/hbm2x/visitor/DefaultValueVisitor.java	2006-08-14 14:26:14 UTC (rev 10255)
@@ -35,7 +35,7 @@
 		this.throwException = throwException;
 	}
 
-	Object handle(Object o) {
+	protected Object handle(Object o) {
 		if (throwException) { 
 			throw new UnsupportedOperationException("accept on " + o); 
 		} 

Modified: trunk/HibernateExt/tools/src/templates/dao/daohome.ftl
===================================================================
--- trunk/HibernateExt/tools/src/templates/dao/daohome.ftl	2006-08-14 10:20:21 UTC (rev 10254)
+++ trunk/HibernateExt/tools/src/templates/dao/daohome.ftl	2006-08-14 14:26:14 UTC (rev 10255)
@@ -54,6 +54,7 @@
         }
     }
     
+<#if clazz.identifierProperty?has_content>    
     public ${declarationName} findById( ${pojo.getJavaTypeName(clazz.identifierProperty, jdk5)} id) {
         log.debug("getting ${declarationName} instance with id: " + id);
         try {
@@ -66,6 +67,7 @@
             throw re;
         }
     }
+</#if>
 <#else>    
     private final ${pojo.importType("org.hibernate.SessionFactory")} sessionFactory = getSessionFactory();
     
@@ -141,6 +143,7 @@
         }
     }
     
+<#if clazz.identifierProperty?has_content>
     public ${declarationName} findById( ${c2j.getJavaTypeName(clazz.identifierProperty, jdk5)} id) {
         log.debug("getting ${declarationName} instance with id: " + id);
         try {
@@ -159,6 +162,7 @@
             throw re;
         }
     }
+</#if>
     
 <#if clazz.hasNaturalId()>
     public ${declarationName} findByNaturalId(${c2j.asNaturalIdParameterList(clazz)}) {

Modified: trunk/HibernateExt/tools/src/test/org/hibernate/tool/test/jdbc2cfg/ManyToManyTest.java
===================================================================
--- trunk/HibernateExt/tools/src/test/org/hibernate/tool/test/jdbc2cfg/ManyToManyTest.java	2006-08-14 10:20:21 UTC (rev 10254)
+++ trunk/HibernateExt/tools/src/test/org/hibernate/tool/test/jdbc2cfg/ManyToManyTest.java	2006-08-14 14:26:14 UTC (rev 10255)
@@ -42,7 +42,7 @@
 		localCfg = new JDBCMetaDataConfiguration();
         
         DefaultReverseEngineeringStrategy c = new DefaultReverseEngineeringStrategy();
-        c.setSettings(new ReverseEngineeringSettings().setAutoManyToManyDetection(true));        
+        c.setSettings(new ReverseEngineeringSettings().setDetectManyToMany(false));        
         localCfg.setReverseEngineeringStrategy(c);
         localCfg.readFromJDBC();
 	}
@@ -52,16 +52,16 @@
 		super.tearDown();
 	}
 	
-	public void testDefaultBiDirectional() {
+	public void testNoManyToManyBiDirectional() {
 		
-		PersistentClass project = cfg.getClassMapping("Project");
+		PersistentClass project = localCfg.getClassMapping("Project");
 		
 		assertNotNull(project.getProperty("worksOns"));
 		//assertNotNull(project.getProperty("employee"));
 		assertEquals(3, project.getPropertyClosureSpan());		
 		assertEquals("projectId", project.getIdentifierProperty().getName());
 		
-		PersistentClass employee = cfg.getClassMapping("Employee");
+		PersistentClass employee = localCfg.getClassMapping("Employee");
 		
 		assertNotNull(employee.getProperty("worksOns"));
 		assertNotNull(employee.getProperty("employees"));
@@ -70,7 +70,7 @@
 		assertEquals(6, employee.getPropertyClosureSpan());
 		assertEquals("id", employee.getIdentifierProperty().getName());
 		
-		PersistentClass worksOn = cfg.getClassMapping("WorksOn");
+		PersistentClass worksOn = localCfg.getClassMapping("WorksOn");
 		
 		assertNotNull(worksOn.getProperty("project"));
 		assertNotNull(worksOn.getProperty("employee"));
@@ -80,14 +80,14 @@
 	
 	public void testAutoCreation() {
 	    
-        assertNull("No middle class should be generated.", localCfg.getClassMapping( "WorksOn" ));
+        assertNull("No middle class should be generated.", cfg.getClassMapping( "WorksOn" ));
         
-        assertNotNull("Should create worksontext since one of the foreign keys is not part of pk", localCfg.getClassMapping( "WorksOnContext" ));
+        assertNotNull("Should create worksontext since one of the foreign keys is not part of pk", cfg.getClassMapping( "WorksOnContext" ));
         
-        PersistentClass projectClass = localCfg.getClassMapping("Project");
+        PersistentClass projectClass = cfg.getClassMapping("Project");
 		assertNotNull( projectClass );
 
-		PersistentClass employeeClass = localCfg.getClassMapping("Employee");
+		PersistentClass employeeClass = cfg.getClassMapping("Employee");
 		assertNotNull( employeeClass );
 				
 		assertPropertyNotExist( projectClass, "worksOns" );
@@ -106,9 +106,9 @@
 	
 	public void testGenerateAndReadable() {
 		
-		localCfg.buildMappings();
+		cfg.buildMappings();
 		
-		HibernateMappingExporter hme = new HibernateMappingExporter(localCfg, getOutputDir());
+		HibernateMappingExporter hme = new HibernateMappingExporter(cfg, getOutputDir());
 		hme.start();		
 		
 		assertFileAndExists( new File(getOutputDir(), "Employee.hbm.xml") );




More information about the hibernate-commits mailing list