[hibernate-commits] Hibernate SVN: r10965 - in branches/Branch_3_2/HibernateExt/tools/src: java/org/hibernate/tool/hbm2x java/org/hibernate/tool/hbm2x/pojo templates/pojo test/org/hibernate/tool test/org/hibernate/tool/hbm2x

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Sat Dec 9 07:00:59 EST 2006


Author: max.andersen at jboss.com
Date: 2006-12-09 07:00:48 -0500 (Sat, 09 Dec 2006)
New Revision: 10965

Added:
   branches/Branch_3_2/HibernateExt/tools/src/test/org/hibernate/tool/hbm2x/JdbcHbm2JavaEjb3Test.java
Modified:
   branches/Branch_3_2/HibernateExt/tools/src/java/org/hibernate/tool/hbm2x/Cfg2HbmTool.java
   branches/Branch_3_2/HibernateExt/tools/src/java/org/hibernate/tool/hbm2x/pojo/AnnotationBuilder.java
   branches/Branch_3_2/HibernateExt/tools/src/java/org/hibernate/tool/hbm2x/pojo/EntityPOJOClass.java
   branches/Branch_3_2/HibernateExt/tools/src/java/org/hibernate/tool/hbm2x/pojo/POJOClass.java
   branches/Branch_3_2/HibernateExt/tools/src/templates/pojo/Ejb3TypeDeclaration.ftl
   branches/Branch_3_2/HibernateExt/tools/src/test/org/hibernate/tool/BaseTestCase.java
   branches/Branch_3_2/HibernateExt/tools/src/test/org/hibernate/tool/hbm2x/Author.hbm.xml
   branches/Branch_3_2/HibernateExt/tools/src/test/org/hibernate/tool/hbm2x/Hbm2JavaEjb3Test.java
Log:
fixed multi uniqueconstraint issue

Modified: branches/Branch_3_2/HibernateExt/tools/src/java/org/hibernate/tool/hbm2x/Cfg2HbmTool.java
===================================================================
--- branches/Branch_3_2/HibernateExt/tools/src/java/org/hibernate/tool/hbm2x/Cfg2HbmTool.java	2006-12-08 16:06:49 UTC (rev 10964)
+++ branches/Branch_3_2/HibernateExt/tools/src/java/org/hibernate/tool/hbm2x/Cfg2HbmTool.java	2006-12-09 12:00:48 UTC (rev 10965)
@@ -183,6 +183,20 @@
 	public boolean isManyToOne(Property property) {
         return (property.getValue()!=null) && (property.getValue() instanceof ManyToOne);
     }
+	
+	public boolean isTemporalValue(Property property) {
+		if(property.getValue() instanceof SimpleValue) {
+			String typeName = ((SimpleValue)property.getValue()).getTypeName();
+			if("date".equals(typeName) || "java.sql.Date".equals(typeName)) {
+				return true;
+			} else if ("timestamp".equals(typeName) || "java.sql.Timestamp".equals(typeName)) {
+				return true;
+			} else if ("time".equals(typeName) || "java.sql.Time".equals(typeName)) {
+				return true;
+			} 
+		} 
+		return false;		
+	}
     
     public boolean isNamedQueries(Configuration cfg) {
 		Map nqry = cfg.getNamedQueries();

Modified: branches/Branch_3_2/HibernateExt/tools/src/java/org/hibernate/tool/hbm2x/pojo/AnnotationBuilder.java
===================================================================
--- branches/Branch_3_2/HibernateExt/tools/src/java/org/hibernate/tool/hbm2x/pojo/AnnotationBuilder.java	2006-12-08 16:06:49 UTC (rev 10964)
+++ branches/Branch_3_2/HibernateExt/tools/src/java/org/hibernate/tool/hbm2x/pojo/AnnotationBuilder.java	2006-12-09 12:00:48 UTC (rev 10965)
@@ -65,19 +65,16 @@
 					if(addedBefore) {
 						b.append(", ");
 					}
-					b.append(element.getKey()).append("=");
+					String key = (String) element.getKey();
+					b.append(key).append("=");
 					if(s.length>1) {
 						b.append( "{" );
 					}
-					for (int i = 0; i < s.length; i++) {
-						b.append(s[i]);
-						if(i<s.length-1) {
-							b.append(", ");
-						}
-					}
+					attributeToString( b, s );
 					if(s.length>1) {
 						b.append( "}" );
 					}
+					
 					addedBefore=true;
 				}
 			}
@@ -86,6 +83,15 @@
 		return b.toString();
 	}
 
+	private void attributeToString(StringBuffer buffer, String[] values) {				
+		for (int i = 0; i < values.length; i++) {
+			buffer.append(values[i]);
+			if(i<values.length-1) {
+				buffer.append(", ");
+			}
+		}		
+	}
+
 	public void addQuotedAttributes(String name, Iterator iterator) {
 		List values = new ArrayList();
 		while ( iterator.hasNext() ) {
@@ -119,6 +125,17 @@
 		return getResult();
 	}
 
+	public String getAttributeAsString(String name) {
+		StringBuffer buffer = new StringBuffer();
+		String[] object = (String[]) attributes.get( name );
+		if(object==null) {
+			return null;
+		} else {
+			attributeToString( buffer, object );
+			return buffer.toString();
+		}
+	}
+
 	
 }
 

Modified: branches/Branch_3_2/HibernateExt/tools/src/java/org/hibernate/tool/hbm2x/pojo/EntityPOJOClass.java
===================================================================
--- branches/Branch_3_2/HibernateExt/tools/src/java/org/hibernate/tool/hbm2x/pojo/EntityPOJOClass.java	2006-12-08 16:06:49 UTC (rev 10964)
+++ branches/Branch_3_2/HibernateExt/tools/src/java/org/hibernate/tool/hbm2x/pojo/EntityPOJOClass.java	2006-12-09 12:00:48 UTC (rev 10965)
@@ -157,10 +157,6 @@
 		return clazz.getIdentifierProperty();
 	}
 
-	public boolean needsAnnTableUniqueConstraints() {
-		return ( !( clazz instanceof Subclass ) && clazz.getTable().getUniqueKeyIterator().hasNext() );
-	}
-
 	public String generateAnnTableUniqueConstraint() {
 		if ( ! ( clazz instanceof Subclass ) ) {
 			Table table = clazz.getTable();
@@ -169,10 +165,9 @@
 		return "";
 	}
 
-	private String generateAnnTableUniqueConstraint(Table table) {
-		StringBuffer constraints = new StringBuffer();
+	protected String generateAnnTableUniqueConstraint(Table table) {
 		Iterator uniqueKeys = table.getUniqueKeyIterator();
-			
+		List cons = new ArrayList();
 		while ( uniqueKeys.hasNext() ) {
 			UniqueKey key = (UniqueKey) uniqueKeys.next();
 			if (table.hasPrimaryKey() && table.getPrimaryKey().getColumns().equals(key.getColumns())) {
@@ -184,9 +179,13 @@
 					return ((Column)object).getName();
 				}
 			});
-			constraints.append(constraint.getResult());
+			cons.add( constraint.getResult() );
 		}
-		return constraints.toString();
+		
+		AnnotationBuilder builder = AnnotationBuilder.createAnnotation( "dummyAnnotation" );
+		builder.addAttributes( "dummyAttribute", cons.iterator() );
+		String attributeAsString = builder.getAttributeAsString( "dummyAttribute" );
+		return attributeAsString==null?"":attributeAsString;
 	}
 
 		
@@ -522,7 +521,7 @@
 					}
 					String uniqueConstraint = generateAnnTableUniqueConstraint(table);
 					if ( uniqueConstraint.length() > 0 ) {
-						annotation.append(", uniqueConstraints={").append(uniqueConstraint).append("}");
+						annotation.append(", uniqueConstraints={").append(uniqueConstraint).append("} ");
 					}
 					annotation.append( ", joinColumns = { ");
 					buildArrayOfJoinColumnAnnotation(
@@ -791,11 +790,11 @@
 		return clazz.getVersion();
 	}
 	
-	public abstract class IteratorTransformer implements Iterator {
+	static public abstract class IteratorTransformer implements Iterator {
 
 		private Iterator delegate;
 
-		IteratorTransformer(Iterator delegate) {
+		public IteratorTransformer(Iterator delegate) {
 			this.delegate = delegate;
 		}
 		

Modified: branches/Branch_3_2/HibernateExt/tools/src/java/org/hibernate/tool/hbm2x/pojo/POJOClass.java
===================================================================
--- branches/Branch_3_2/HibernateExt/tools/src/java/org/hibernate/tool/hbm2x/pojo/POJOClass.java	2006-12-08 16:06:49 UTC (rev 10964)
+++ branches/Branch_3_2/HibernateExt/tools/src/java/org/hibernate/tool/hbm2x/pojo/POJOClass.java	2006-12-09 12:00:48 UTC (rev 10965)
@@ -65,7 +65,6 @@
 	
 	public boolean hasIdentifierProperty();
 	
-	public boolean needsAnnTableUniqueConstraints();	
 	public String generateAnnColumnAnnotation(Property property);
 	public String generateAnnIdGenerator();
 	public String generateAnnTableUniqueConstraint();

Modified: branches/Branch_3_2/HibernateExt/tools/src/templates/pojo/Ejb3TypeDeclaration.ftl
===================================================================
--- branches/Branch_3_2/HibernateExt/tools/src/templates/pojo/Ejb3TypeDeclaration.ftl	2006-12-08 16:06:49 UTC (rev 10964)
+++ branches/Branch_3_2/HibernateExt/tools/src/templates/pojo/Ejb3TypeDeclaration.ftl	2006-12-09 12:00:48 UTC (rev 10965)
@@ -9,8 +9,9 @@
 </#if><#if clazz.table.catalog?exists>
     ,catalog="${clazz.table.catalog}"
 </#if>
-<#if pojo.needsAnnTableUniqueConstraints()>
-    , uniqueConstraints = { ${pojo.generateAnnTableUniqueConstraint()} }
+<#assign uniqueConstraint=pojo.generateAnnTableUniqueConstraint()>
+<#if uniqueConstraint?has_content>
+    , uniqueConstraints = { ${uniqueConstraint} }
 </#if>)
 </#if>
 </#if>
\ No newline at end of file

Modified: branches/Branch_3_2/HibernateExt/tools/src/test/org/hibernate/tool/BaseTestCase.java
===================================================================
--- branches/Branch_3_2/HibernateExt/tools/src/test/org/hibernate/tool/BaseTestCase.java	2006-12-08 16:06:49 UTC (rev 10964)
+++ branches/Branch_3_2/HibernateExt/tools/src/test/org/hibernate/tool/BaseTestCase.java	2006-12-09 12:00:48 UTC (rev 10965)
@@ -23,12 +23,12 @@
 	private File outputdir;
 	
 	public BaseTestCase(String name) {
-		super(name);
+		super(name);		
 		this.outputdir = new File("toolstestoutput", getClass().getName());
 	}
 	
 	public BaseTestCase(String name, String out) {
-		super(name);
+		super(name);		
 		this.outputdir = new File("toolstestoutput", out);
 	}
 

Modified: branches/Branch_3_2/HibernateExt/tools/src/test/org/hibernate/tool/hbm2x/Author.hbm.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/tools/src/test/org/hibernate/tool/hbm2x/Author.hbm.xml	2006-12-08 16:06:49 UTC (rev 10964)
+++ branches/Branch_3_2/HibernateExt/tools/src/test/org/hibernate/tool/hbm2x/Author.hbm.xml	2006-12-09 12:00:48 UTC (rev 10965)
@@ -22,8 +22,8 @@
     	</id>
 		
 		<natural-id>
-    		<property name="name" type="string" not-null="true" length="100"/>
-    		<property name="address" type="string" not-null="true" length="200"/>
+    		<property name="name" type="string" not-null="true" length="100" unique="true"/>
+    		<property name="address" type="string" not-null="true" length="200" unique="true"/>
 		</natural-id>
 		
     	<set name="articles"

Modified: branches/Branch_3_2/HibernateExt/tools/src/test/org/hibernate/tool/hbm2x/Hbm2JavaEjb3Test.java
===================================================================
--- branches/Branch_3_2/HibernateExt/tools/src/test/org/hibernate/tool/hbm2x/Hbm2JavaEjb3Test.java	2006-12-08 16:06:49 UTC (rev 10964)
+++ branches/Branch_3_2/HibernateExt/tools/src/test/org/hibernate/tool/hbm2x/Hbm2JavaEjb3Test.java	2006-12-09 12:00:48 UTC (rev 10965)
@@ -8,12 +8,14 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import org.hibernate.mapping.Column;
 import org.hibernate.mapping.PersistentClass;
 import org.hibernate.mapping.Property;
 import org.hibernate.tool.NonReflectiveTestCase;
 import org.hibernate.tool.hbm2x.pojo.AnnotationBuilder;
 import org.hibernate.tool.hbm2x.pojo.EntityPOJOClass;
 import org.hibernate.tool.hbm2x.pojo.POJOClass;
+import org.hibernate.tool.hbm2x.pojo.EntityPOJOClass.IteratorTransformer;
 import org.hibernate.tool.test.TestHelper;
 
 /**
@@ -199,6 +201,23 @@
 		
 		assertEquals("@abc(it={\"42\", \"xxx\"})", builder.getResult());		
 	
+		List columns = new ArrayList();
+		columns.add("first");
+		columns.add("second");
+		
+		AnnotationBuilder constraint = AnnotationBuilder.createAnnotation( "UniqueConstraint" );
+		constraint.addQuotedAttributes( "columnNames", new IteratorTransformer(columns.iterator()) {
+			public Object transform(Object object) {					
+				return object.toString();
+			}
+		});
+		constraint.addAttribute( "single", "value" );
+		
+		String attribute = constraint.getAttributeAsString("columnNames");
+		assertEquals("\"first\", \"second\"", attribute);
+		
+		assertEquals("value", constraint.getAttributeAsString( "single" ));
+		
 	}
 	
 	protected void tearDown() throws Exception {

Added: branches/Branch_3_2/HibernateExt/tools/src/test/org/hibernate/tool/hbm2x/JdbcHbm2JavaEjb3Test.java
===================================================================
--- branches/Branch_3_2/HibernateExt/tools/src/test/org/hibernate/tool/hbm2x/JdbcHbm2JavaEjb3Test.java	2006-12-08 16:06:49 UTC (rev 10964)
+++ branches/Branch_3_2/HibernateExt/tools/src/test/org/hibernate/tool/hbm2x/JdbcHbm2JavaEjb3Test.java	2006-12-09 12:00:48 UTC (rev 10965)
@@ -0,0 +1,81 @@
+/*
+ * Created on 2004-12-01
+ *
+ */
+package org.hibernate.tool.hbm2x;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.hibernate.tool.JDBCMetaDataBinderTestCase;
+import org.hibernate.tool.test.TestHelper;
+
+/**
+ * @author max
+ *
+ *
+ */
+public class JdbcHbm2JavaEjb3Test extends JDBCMetaDataBinderTestCase {
+
+
+	protected void setUp() throws Exception {
+		super.setUp();
+
+		POJOExporter exporter = new POJOExporter(getConfiguration(), getOutputDir() );
+		exporter.setTemplatePath(new String[0]);
+		exporter.getProperties().setProperty("ejb3", "true");
+		exporter.getProperties().setProperty("jdk5", "true");
+
+		exporter.start();
+	}
+
+	public void testFileExistence() {
+		assertFileAndExists( new File(getOutputDir().getAbsolutePath() + "/Master.java") );
+	}
+
+	public void testUniqueConstraints() {
+		assertEquals(null, findFirstString( "uniqueConstraints", new File(getOutputDir(),"Master.java") ));
+		assertNotNull(findFirstString( "uniqueConstraints", new File(getOutputDir(),"UniqueMaster.java") ));
+	}
+	public void testCompile() {
+
+		File file = new File("ejb3compilable");
+		file.mkdir();
+
+		ArrayList list = new ArrayList();
+		List jars = new ArrayList();
+		jars.add("ejb3-persistence.jar");
+		jars.add("hibernate-annotations.jar");
+		TestHelper.compile(getOutputDir(), file, TestHelper.visitAllFiles(getOutputDir(), list), "1.5", TestHelper.buildClasspath(jars));
+
+		TestHelper.deleteDir(file);
+	}
+	
+	
+	protected void tearDown() throws Exception {
+		
+		//super.tearDown();
+	}
+	
+	
+	protected String getBaseForMappings() {
+		return "org/hibernate/tool/hbm2x/";
+	}
+
+	protected String[] getCreateSQL() {
+		
+		return new String[] {
+				"create table master ( id char not null, name varchar(20), othername varchar(20), primary key (id) )",							
+				"create table uniquemaster ( id char not null, name varchar(20), othername varchar(20), primary key (id), constraint o1 unique (name), constraint o2 unique (othername) )",
+		};
+	}
+
+	protected String[] getDropSQL() {
+		
+		return new String[]  {
+				"drop table master",			
+				"drop table uniquemaster"
+		};
+	}
+}




More information about the hibernate-commits mailing list