Author: max.andersen(a)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"
+ };
+ }
+}