Index: D:/workspaces/RedHat/hibernate-ganymede/hibernateext_tools/src/test/org/hibernate/tool/hbm2x/hbm2hbmxml/Cfg2HbmToolTest.java
===================================================================
--- D:/workspaces/RedHat/hibernate-ganymede/hibernateext_tools/src/test/org/hibernate/tool/hbm2x/hbm2hbmxml/Cfg2HbmToolTest.java (revision 0)
+++ D:/workspaces/RedHat/hibernate-ganymede/hibernateext_tools/src/test/org/hibernate/tool/hbm2x/hbm2hbmxml/Cfg2HbmToolTest.java (revision 0)
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2007-2008 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributor:
+ * Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.hibernate.tool.hbm2x.hbm2hbmxml;
+
+import org.hibernate.mapping.JoinedSubclass;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.mapping.RootClass;
+import org.hibernate.mapping.SingleTableSubclass;
+import org.hibernate.mapping.Subclass;
+import org.hibernate.mapping.UnionSubclass;
+import org.hibernate.tool.hbm2x.Cfg2HbmTool;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * @author Dmitry Geraskov
+ *
+ */
+public class Cfg2HbmToolTest extends TestCase {
+
+ public void testNeedsTable(){
+ Cfg2HbmTool c2h = new Cfg2HbmTool();
+ PersistentClass pc = new RootClass();
+ assertTrue(c2h.needsTable(pc));
+ assertTrue(c2h.needsTable(new JoinedSubclass(pc)));
+ assertTrue(c2h.needsTable(new UnionSubclass(pc)));
+ assertFalse(c2h.needsTable(new Subclass(pc)));
+ assertFalse(c2h.needsTable(new SingleTableSubclass(pc)));
+ }
+
+ public static Test suite() {
+ return new TestSuite(Cfg2HbmToolTest.class);
+ }
+
+}
Property changes on: D:\workspaces\RedHat\hibernate-ganymede\hibernateext_tools\src\test\org\hibernate\tool\hbm2x\hbm2hbmxml\Cfg2HbmToolTest.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Name: svn:keywords
+ Author Id Revision Date
Name: svn:eol-style
+ native
Index: D:/workspaces/RedHat/hibernate-ganymede/hibernateext_tools/src/test/org/hibernate/tool/hbm2x/hbm2hbmxml/Order.hbm.xml
===================================================================
--- D:/workspaces/RedHat/hibernate-ganymede/hibernateext_tools/src/test/org/hibernate/tool/hbm2x/hbm2hbmxml/Order.hbm.xml (revision 0)
+++ D:/workspaces/RedHat/hibernate-ganymede/hibernateext_tools/src/test/org/hibernate/tool/hbm2x/hbm2hbmxml/Order.hbm.xml (revision 0)
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ STATUS
+ ORDERS
+
+ org.hibernate.tool.hbm2x.hbm2hbmxml.Order$Status
+
+
+
+
Property changes on: D:\workspaces\RedHat\hibernate-ganymede\hibernateext_tools\src\test\org\hibernate\tool\hbm2x\hbm2hbmxml\Order.hbm.xml
___________________________________________________________________
Name: svn:mime-type
+ text/xml
Name: svn:eol-style
+ native
Index: D:/workspaces/RedHat/hibernate-ganymede/hibernateext_tools/src/test/org/hibernate/tool/hbm2x/hbm2hbmxml/Aliens.hbm.xml
===================================================================
--- D:/workspaces/RedHat/hibernate-ganymede/hibernateext_tools/src/test/org/hibernate/tool/hbm2x/hbm2hbmxml/Aliens.hbm.xml (revision 16054)
+++ D:/workspaces/RedHat/hibernate-ganymede/hibernateext_tools/src/test/org/hibernate/tool/hbm2x/hbm2hbmxml/Aliens.hbm.xml (working copy)
@@ -18,6 +18,9 @@
+
+
+
Index: D:/workspaces/RedHat/hibernate-ganymede/hibernateext_tools/src/test/org/hibernate/tool/hbm2x/hbm2hbmxml/AbstractTest.java
===================================================================
--- D:/workspaces/RedHat/hibernate-ganymede/hibernateext_tools/src/test/org/hibernate/tool/hbm2x/hbm2hbmxml/AbstractTest.java (revision 0)
+++ D:/workspaces/RedHat/hibernate-ganymede/hibernateext_tools/src/test/org/hibernate/tool/hbm2x/hbm2hbmxml/AbstractTest.java (revision 0)
@@ -0,0 +1,105 @@
+/*******************************************************************************
+ * Copyright (c) 2007-2009 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributor:
+ * Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.hibernate.tool.hbm2x.hbm2hbmxml;
+
+import java.io.File;
+import java.util.Iterator;
+import java.util.List;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.DocumentHelper;
+import org.dom4j.Element;
+import org.dom4j.XPath;
+import org.dom4j.io.SAXReader;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.mapping.Backref;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.tool.NonReflectiveTestCase;
+import org.hibernate.tool.hbm2x.Exporter;
+import org.hibernate.tool.hbm2x.HibernateMappingExporter;
+
+/**
+ * @author Dmitry Geraskov
+ *
+ */
+public class AbstractTest extends NonReflectiveTestCase {
+
+ private String mappingFile = "Car.hbm.xml";
+
+ private Exporter hbmexporter;
+
+ /**
+ * @param name
+ */
+ public AbstractTest(String name) {
+ super(name, "cfg2hbmoutput");
+ }
+
+ protected String[] getMappings() {
+ return new String[] {
+ mappingFile
+ };
+ }
+
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ hbmexporter = new HibernateMappingExporter(getCfg(), getOutputDir() );
+ hbmexporter.start();
+ }
+
+ public void testAllFilesExistence() {
+ assertFileAndExists(new File(getOutputDir().getAbsolutePath(), getBaseForMappings() + "Car.hbm.xml") );
+ assertFileAndExists(new File(getOutputDir().getAbsolutePath(), getBaseForMappings() + "CarPart.hbm.xml") );
+ }
+
+ public void testAbstractPresent() {
+ File outputXml = new File(getOutputDir().getAbsolutePath() + "/org/hibernate/tool/hbm2x/hbm2hbmxml/CarPart.hbm.xml");
+ assertFileAndExists(outputXml);
+
+ SAXReader xmlReader = this.getSAXReader();
+
+ Document document;
+ try {
+ document = xmlReader.read(outputXml);
+ XPath xpath = DocumentHelper.createXPath("//hibernate-mapping/class");
+ List list = xpath.selectNodes(document);
+ assertEquals("Expected to get one class element", 1, list.size());
+ Element node = (Element) list.get(0);
+ assertNotNull("Abstract attrinute was not exported.", node.attribute( "abstract" ));
+ assertEquals(node.attribute( "abstract" ).getText(),"true");
+ } catch (DocumentException e) {
+ fail("Can't parse file " + outputXml.getAbsolutePath());
+ }
+ }
+
+ public void testReadable() {
+ Configuration cfg = new Configuration();
+
+ cfg.addFile(new File(getOutputDir(), getBaseForMappings() + "Car.hbm.xml"));
+ cfg.addFile(new File(getOutputDir(), getBaseForMappings() + "CarPart.hbm.xml"));
+
+ cfg.buildMappings();
+ }
+
+ protected String getBaseForMappings() {
+ return "org/hibernate/tool/hbm2x/hbm2hbmxml/";
+ }
+
+ public static Test suite() {
+ return new TestSuite(AbstractTest.class);
+ }
+
+}
Property changes on: D:\workspaces\RedHat\hibernate-ganymede\hibernateext_tools\src\test\org\hibernate\tool\hbm2x\hbm2hbmxml\AbstractTest.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Name: svn:keywords
+ Author Id Revision Date
Name: svn:eol-style
+ native
Index: D:/workspaces/RedHat/hibernate-ganymede/hibernateext_tools/src/test/org/hibernate/tool/hbm2x/hbm2hbmxml/Cfg2HbmAllTests.java
===================================================================
--- D:/workspaces/RedHat/hibernate-ganymede/hibernateext_tools/src/test/org/hibernate/tool/hbm2x/hbm2hbmxml/Cfg2HbmAllTests.java (revision 16054)
+++ D:/workspaces/RedHat/hibernate-ganymede/hibernateext_tools/src/test/org/hibernate/tool/hbm2x/hbm2hbmxml/Cfg2HbmAllTests.java (working copy)
@@ -19,6 +19,9 @@
suite.addTest(InheritanceTest.suite());
suite.addTest(SetElementTest.suite());
suite.addTest(BackrefTest.suite());
+ suite.addTest(Cfg2HbmToolTest.suite());
+ suite.addTest(AbstractTest.suite());
+ suite.addTest(TypeParamsTest.suite());
//$JUnit-END$
return suite;
}
Index: D:/workspaces/RedHat/hibernate-ganymede/hibernateext_tools/src/test/org/hibernate/tool/hbm2x/hbm2hbmxml/TypeParamsTest.java
===================================================================
--- D:/workspaces/RedHat/hibernate-ganymede/hibernateext_tools/src/test/org/hibernate/tool/hbm2x/hbm2hbmxml/TypeParamsTest.java (revision 0)
+++ D:/workspaces/RedHat/hibernate-ganymede/hibernateext_tools/src/test/org/hibernate/tool/hbm2x/hbm2hbmxml/TypeParamsTest.java (revision 0)
@@ -0,0 +1,187 @@
+/*******************************************************************************
+ * Copyright (c) 2007-2009 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributor:
+ * Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.hibernate.tool.hbm2x.hbm2hbmxml;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.Map.Entry;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.DocumentHelper;
+import org.dom4j.Element;
+import org.dom4j.XPath;
+import org.dom4j.io.SAXReader;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.tool.NonReflectiveTestCase;
+import org.hibernate.tool.hbm2x.Exporter;
+import org.hibernate.tool.hbm2x.HibernateMappingExporter;
+
+/**
+ * @author Dmitry Geraskov
+ *
+ */
+public class TypeParamsTest extends NonReflectiveTestCase {
+
+ private String mappingFile = "Order.hbm.xml";
+
+ private Exporter hbmexporter;
+
+ /**
+ * @param name
+ */
+ public TypeParamsTest(String name) {
+ super(name, "cfg2hbmoutput");
+ }
+
+
+ protected String[] getMappings() {
+ return new String[] {
+ mappingFile
+ };
+ }
+
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ hbmexporter = new HibernateMappingExporter(getCfg(), getOutputDir() );
+ hbmexporter.start();
+ }
+
+ public void testAllFilesExistence() {
+ assertFileAndExists(new File(getOutputDir().getAbsolutePath(), getBaseForMappings() + mappingFile) );
+ }
+
+ public void testReadable() {
+ Configuration cfg = new Configuration();
+ cfg.addFile(new File(getOutputDir(), getBaseForMappings() + "Order.hbm.xml"));
+ cfg.buildMappings();
+ }
+
+ public void testTypeParamsElements() throws DocumentException {
+ File outputXml = new File(getOutputDir(), getBaseForMappings() + mappingFile);
+ assertFileAndExists(outputXml);
+
+ SAXReader xmlReader = getSAXReader();
+
+ Document document = xmlReader.read(outputXml);
+
+ XPath xpath = DocumentHelper.createXPath("//hibernate-mapping/class/property");
+ List list = xpath.selectNodes(document);
+ assertEquals("Expected to get one property element", 1, list.size());
+ Element node = (Element) list.get(0);
+ assertEquals(node.attribute( "name" ).getText(),"status");
+
+ list = node.elements("type");
+ assertEquals("Expected to get one type element", 1, list.size());
+
+ list = ((Element) list.get(0)).elements("param");
+ assertEquals("Expected to get 5 params elements", list.size(), 5);
+
+ Map params = new HashMap();
+ for (int i = 0; i < list.size(); i++) {
+ Element param = (Element) list.get(i);
+ params.put(param.attribute( "name" ).getText(), param.getText());
+ }
+
+ Set> set = params.entrySet();
+ assertEquals("Expected to get 5 different params elements", set.size(), 5);
+
+ assertTrue("Can't find 'catalog' param",
+ set.contains(new TestEntry("catalog", "")));
+
+ assertTrue("Can't find 'column' param",
+ set.contains(new TestEntry("column", "STATUS")));
+
+ assertTrue("Can't find 'table' param",
+ set.contains(new TestEntry("table", "ORDERS")));
+
+ assertTrue("Can't find 'schema' param",
+ set.contains(new TestEntry("schema", "")));
+
+ assertTrue("Can't find 'enumClass' param",
+ set.contains(new TestEntry("enumClass", "org.hibernate.tool.hbm2x.hbm2hbmxml.Order$Status")));
+
+ }
+
+ protected String getBaseForMappings() {
+ return "org/hibernate/tool/hbm2x/hbm2hbmxml/";
+ }
+
+ public static Test suite() {
+ return new TestSuite(TypeParamsTest.class);
+ }
+
+}
+
+class TestEntry implements Entry{
+
+ private Object key;
+
+ private Object value;
+
+ public TestEntry(Object key, Object value){
+ this.key = key;
+ this.value = value;
+ }
+
+ public Object getKey() {
+ return key;
+ }
+
+ public Object getValue() {
+ return value;
+ }
+
+ public Object setValue(Object value) {
+ return this.value = value;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((key == null) ? 0 : key.hashCode());
+ result = prime * result + ((value == null) ? 0 : value.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (!(obj instanceof Entry)){
+ return false;
+ }
+
+ Entry other = (Entry) obj;
+ if (key == null) {
+ if (other.getKey() != null)
+ return false;
+ } else if (!key.equals(other.getKey()))
+ return false;
+ if (value == null) {
+ if (other.getValue() != null)
+ return false;
+ } else if (!value.equals(other.getValue()))
+ return false;
+ return true;
+ }
+
+
+
+}
Property changes on: D:\workspaces\RedHat\hibernate-ganymede\hibernateext_tools\src\test\org\hibernate\tool\hbm2x\hbm2hbmxml\TypeParamsTest.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Name: svn:keywords
+ Author Id Revision Date
Name: svn:eol-style
+ native
Index: D:/workspaces/RedHat/hibernate-ganymede/hibernateext_tools/src/test/org/hibernate/tool/hbm2x/hbm2hbmxml/InheritanceTest.java
===================================================================
--- D:/workspaces/RedHat/hibernate-ganymede/hibernateext_tools/src/test/org/hibernate/tool/hbm2x/hbm2hbmxml/InheritanceTest.java (revision 16054)
+++ D:/workspaces/RedHat/hibernate-ganymede/hibernateext_tools/src/test/org/hibernate/tool/hbm2x/hbm2hbmxml/InheritanceTest.java (working copy)
@@ -16,6 +16,7 @@
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
+import org.dom4j.Element;
import org.dom4j.XPath;
import org.dom4j.io.SAXReader;
import org.hibernate.cfg.Configuration;
@@ -82,9 +83,24 @@
} catch (DocumentException e) {
fail("Can't parse file " + outputXml.getAbsolutePath());
}
- }
+ }
+
+ public void testDiscriminator() throws DocumentException {
+ File outputXml = new File(getOutputDir().getAbsolutePath() + "/org/hibernate/tool/hbm2x/hbm2hbmxml/Animal.hbm.xml");
+ assertFileAndExists(outputXml);
+ SAXReader xmlReader = this.getSAXReader();
+ Document document = xmlReader.read(outputXml);
+ XPath xpath = DocumentHelper.createXPath("//hibernate-mapping/class/discriminator");
+ List list = xpath.selectNodes(document);
+ assertEquals("Expected to get one discriminator element", 1, list.size());
+
+ Element node = (Element) list.get(0);
+ assertEquals(node.attribute( "type" ).getText(), "string");
+
+ }
+
protected String getBaseForMappings() {
return "org/hibernate/tool/hbm2x/hbm2hbmxml/";
}
Index: D:/workspaces/RedHat/hibernate-ganymede/hibernateext_tools/src/test/org/hibernate/tool/hbm2x/hbm2hbmxml/Car.hbm.xml
===================================================================
--- D:/workspaces/RedHat/hibernate-ganymede/hibernateext_tools/src/test/org/hibernate/tool/hbm2x/hbm2hbmxml/Car.hbm.xml (revision 16054)
+++ D:/workspaces/RedHat/hibernate-ganymede/hibernateext_tools/src/test/org/hibernate/tool/hbm2x/hbm2hbmxml/Car.hbm.xml (working copy)
@@ -16,7 +16,7 @@
-
+
Index: D:/workspaces/RedHat/hibernate-ganymede/hibernateext_tools/src/test/org/hibernate/tool/hbm2x/hbm2hbmxml/CarPart.java
===================================================================
--- D:/workspaces/RedHat/hibernate-ganymede/hibernateext_tools/src/test/org/hibernate/tool/hbm2x/hbm2hbmxml/CarPart.java (revision 16054)
+++ D:/workspaces/RedHat/hibernate-ganymede/hibernateext_tools/src/test/org/hibernate/tool/hbm2x/hbm2hbmxml/CarPart.java (working copy)
@@ -3,7 +3,7 @@
/**
* @author Paco Hern�ndez
*/
-public class CarPart implements java.io.Serializable {
+public abstract class CarPart implements java.io.Serializable {
private long id;
private String partName;
Index: D:/workspaces/RedHat/hibernate-ganymede/hibernateext_tools/src/java/org/hibernate/tool/hbm2x/Cfg2HbmTool.java
===================================================================
--- D:/workspaces/RedHat/hibernate-ganymede/hibernateext_tools/src/java/org/hibernate/tool/hbm2x/Cfg2HbmTool.java (revision 16054)
+++ D:/workspaces/RedHat/hibernate-ganymede/hibernateext_tools/src/java/org/hibernate/tool/hbm2x/Cfg2HbmTool.java (working copy)
@@ -17,12 +17,10 @@
import org.hibernate.engine.query.sql.NativeSQLQueryReturn;
import org.hibernate.engine.query.sql.NativeSQLQueryRootReturn;
import org.hibernate.mapping.Any;
-import org.hibernate.mapping.Backref;
import org.hibernate.mapping.Collection;
import org.hibernate.mapping.Column;
import org.hibernate.mapping.Component;
import org.hibernate.mapping.Formula;
-import org.hibernate.mapping.IndexBackref;
import org.hibernate.mapping.JoinedSubclass;
import org.hibernate.mapping.ManyToOne;
import org.hibernate.mapping.OneToMany;
@@ -312,7 +310,7 @@
}
public String getFetchMode(Property property) {
FetchMode fetchMode = property.getValue().getFetchMode();
- return fetchMode.toString().toLowerCase();
+ return (fetchMode== null) ? null : fetchMode.toString().toLowerCase();
}
@@ -381,17 +379,21 @@
public boolean isImportData(Configuration cfg) {
return !(cfg.getImports().isEmpty());
}
-
+
public boolean needsDiscriminator(PersistentClass clazz) {
+ return clazz instanceof RootClass
+ && (clazz.getDiscriminator() != null);
+ }
+ public boolean needsDiscriminatorValue(PersistentClass clazz) {
return clazz instanceof Subclass
&& !(clazz instanceof UnionSubclass) && !(clazz instanceof JoinedSubclass);
}
public boolean needsTable(PersistentClass clazz) {
- return !(clazz instanceof org.hibernate.mapping.Subclass
- && clazz instanceof org.hibernate.mapping.SingleTableSubclass);
+ return !((clazz instanceof SingleTableSubclass) ||
+ ((clazz != null) && (clazz.getClass() == Subclass.class)));
}
public boolean isSubclass(PersistentClass clazz) {
Index: D:/workspaces/RedHat/hibernate-ganymede/hibernateext_tools/src/templates/hbm/property.hbm.ftl
===================================================================
--- D:/workspaces/RedHat/hibernate-ganymede/hibernateext_tools/src/templates/hbm/property.hbm.ftl (revision 16054)
+++ D:/workspaces/RedHat/hibernate-ganymede/hibernateext_tools/src/templates/hbm/property.hbm.ftl (working copy)
@@ -1,6 +1,5 @@
update="false"
#if>
@@ -28,5 +27,12 @@
<#foreach column in property.columnIterator>
<#include "column.hbm.ftl">
#foreach>
+
+ <#if c2h.isSimpleValue(property) && property.value.typeParameters?exists>
+ <#foreach entry in property.value.typeParameters.entrySet()>
+ ${entry.value}
+ #foreach>
+ #if>
+
Index: D:/workspaces/RedHat/hibernate-ganymede/hibernateext_tools/src/templates/hbm/persistentclass.hbm.ftl
===================================================================
--- D:/workspaces/RedHat/hibernate-ganymede/hibernateext_tools/src/templates/hbm/persistentclass.hbm.ftl (revision 16184)
+++ D:/workspaces/RedHat/hibernate-ganymede/hibernateext_tools/src/templates/hbm/persistentclass.hbm.ftl (working copy)
@@ -27,7 +27,7 @@
<#if clazz.hasSelectBeforeUpdate()>
select-before-update="true"
#if>
-<#if c2h.needsDiscriminator(clazz)>
+<#if c2h.needsDiscriminatorValue(clazz)>
discriminator-value="${clazz.discriminatorValue}"
#if>
<#if clazz.isExplicitPolymorphism()>
@@ -38,7 +38,7 @@
<#elseif !clazz.isLazy()>
lazy="false"
#if>
-<#if clazz.abstract?exists && clazz.abstract>
+<#if clazz.isAbstract()?exists && clazz.isAbstract()>
abstract="true"
#if>
<#if c2h.isClassLevelOptimisticLockMode(clazz)>
@@ -102,6 +102,15 @@
#if>
+<#if c2h.needsDiscriminator(clazz)>
+
+ <#foreach column in clazz.discriminator.columnIterator>
+ <#include "column.hbm.ftl">
+ #foreach>
+
+#if>
+
+
<#-- version has to be done explicitly since Annotation's does not list version first -->
<#if pojo.hasVersionProperty()>
<#assign property=clazz.getVersion()/>