Author: max...@jb... Date: 2006-03-10 18:34:42 -0500 (Fri, 10 Mar 2006) New Revision: 9598 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/DelegatingReverseEngineeringStrategy.java trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/JDBCReader.java trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/OverrideBinder.java trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/OverrideRepository.java trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/ReverseEngineeringStrategy.java trunk/HibernateExt/tools/src/java/org/hibernate/hibernate-reverse-engineering-3.0.dtd trunk/HibernateExt/tools/src/java/org/hibernate/tool/ant/ConfigurationTask.java trunk/HibernateExt/tools/src/java/org/hibernate/tool/ant/Hbm2CfgXmlExporterTask.java trunk/HibernateExt/tools/src/java/org/hibernate/tool/ant/Hbm2JavaExporterTask.java trunk/HibernateExt/tools/src/java/org/hibernate/tool/hbm2x/HibernateConfigurationExporter.java trunk/HibernateExt/tools/src/java/org/hibernate/tool/hbm2x/POJOExporter.java trunk/HibernateExt/tools/src/java/org/hibernate/tool/hbm2x/seam/SeamExporter.java trunk/HibernateExt/tools/src/templates/dao/daohome.ftl trunk/HibernateExt/tools/src/test/org/hibernate/tool/ant/SeamAntTest.java trunk/HibernateExt/tools/src/test/org/hibernate/tool/hbm2x/GenerateFromJDBCTest.java trunk/HibernateExt/tools/src/test/org/hibernate/tool/hbm2x/Hbm2DaoTest.java trunk/HibernateExt/tools/src/test/org/hibernate/tool/hbm2x/Hbm2EJBDaoTest.java trunk/HibernateExt/tools/src/test/org/hibernate/tool/hbm2x/Hbm2HibernateDAOTest.java trunk/HibernateExt/tools/src/test/org/hibernate/tool/hbm2x/Hbm2JavaEjb3Test.java trunk/HibernateExt/tools/src/test/org/hibernate/tool/hbm2x/Hbm2JavaTest.java trunk/HibernateExt/tools/src/test/org/hibernate/tool/test/jdbc2cfg/OverrideBinderTest.java trunk/HibernateExt/tools/src/test/org/hibernate/tool/test/jdbc2cfg/overridetest.reveng.xml trunk/HibernateExt/tools/src/test/org/hibernate/tool/test/jdbc2cfg/schemaselection.reveng.xml trunk/HibernateExt/tools/src/test5.0/org/hibernate/tool/hbm2x/Hbm2JavaEjb3ForJDK50Test.java trunk/HibernateExt/tools/src/testsupport/NoopReverseEngineeringStrategy.java Log: HBX-615 misc reveng changes addition. Customization of: + primarykey property name + many-to-one/set property name + key-column instead of just column in primarykey Alignment with extendability made in eclipse ui by marshall Modified: trunk/HibernateExt/tools/src/java/org/hibernate/cfg/JDBCBinder.java =================================================================== --- trunk/HibernateExt/tools/src/java/org/hibernate/cfg/JDBCBinder.java 2006-03-10 23:20:53 UTC (rev 9597) +++ trunk/HibernateExt/tools/src/java/org/hibernate/cfg/JDBCBinder.java 2006-03-10 23:34:42 UTC (rev 9598) @@ -47,7 +47,6 @@ import org.hibernate.type.TypeFactory; import org.hibernate.util.JoinedIterator; import org.hibernate.util.StringHelper; -import org.jgroups.util.GetNetworkInterfaces1_4; /** @@ -308,7 +307,10 @@ final TableIdentifier tableIdentifier = TableIdentifier.create(table); if (keyColumns.size()>1) { id = handleCompositeKey(rc, processed, keyColumns, mapping); - idPropertyname = "id"; + idPropertyname = revengStrategy.tableToIdentifierPropertyName(tableIdentifier); + if(idPropertyname==null) { + idPropertyname = "id"; + } } else { Column pkc = (Column) keyColumns.get(0); @@ -316,7 +318,11 @@ id = bindColumnToSimpleValue(table, pkc, mapping); - idPropertyname = revengStrategy.columnToPropertyName(tableIdentifier, pkc.getName() ); + idPropertyname = revengStrategy.tableToIdentifierPropertyName(tableIdentifier); + if(idPropertyname==null) { + idPropertyname = revengStrategy.columnToPropertyName(tableIdentifier, pkc.getName() ); + } + processed.add(pkc); } id.setIdentifierGeneratorStrategy(revengStrategy.getTableIdentifierStrategyName(tableIdentifier)); @@ -535,8 +541,13 @@ private SimpleValue handleCompositeKey(RootClass rc, Set processedColumns, List keyColumns, Mapping mapping) { Component pkc = new Component(rc); pkc.setMetaAttributes(Collections.EMPTY_MAP); - pkc.setEmbedded(false); - pkc.setComponentClassName(revengStrategy.classNameToCompositeIdName(rc.getClassName())); + pkc.setEmbedded(false); + + String compositeIdName = revengStrategy.tableToCompositeIdName(TableIdentifier.create(rc.getTable())); + if(compositeIdName==null) { + compositeIdName = revengStrategy.classNameToCompositeIdName(rc.getClassName()); + } + pkc.setComponentClassName(compositeIdName); Table table = rc.getTable(); List list = null; if (cfg.preferBasicCompositeIds() ) { Modified: trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/DefaultReverseEngineeringStrategy.java =================================================================== --- trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/DefaultReverseEngineeringStrategy.java 2006-03-10 23:20:53 UTC (rev 9597) +++ trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/DefaultReverseEngineeringStrategy.java 2006-03-10 23:34:42 UTC (rev 9598) @@ -171,8 +171,16 @@ return AUTO_OPTIMISTICLOCK_COLUMNS.contains(column.toLowerCase())?Boolean.TRUE:Boolean.FALSE; } - public List getSchemaSelectors() { + public List getSchemaSelections() { return null; } + + public String tableToIdentifierPropertyName(TableIdentifier tableIdentifier) { + return null; + } + + public String tableToCompositeIdName(TableIdentifier identifier) { + return null; + } } Modified: trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/DelegatingReverseEngineeringStrategy.java =================================================================== --- trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/DelegatingReverseEngineeringStrategy.java 2006-03-10 23:20:53 UTC (rev 9597) +++ trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/DelegatingReverseEngineeringStrategy.java 2006-03-10 23:34:42 UTC (rev 9598) @@ -78,7 +78,15 @@ return delegate==null?null:delegate.useColumnForOptimisticLock(identifier, column); } - public List getSchemaSelectors() { - return delegate==null?null:delegate.getSchemaSelectors(); + public List getSchemaSelections() { + return delegate==null?null:delegate.getSchemaSelections(); + } + + public String tableToIdentifierPropertyName(TableIdentifier tableIdentifier) { + return delegate==null?null:delegate.tableToIdentifierPropertyName(tableIdentifier); + } + + public String tableToCompositeIdName(TableIdentifier identifier) { + return delegate==null?null:delegate.tableToCompositeIdName(identifier); } } Modified: trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/JDBCReader.java =================================================================== --- trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/JDBCReader.java 2006-03-10 23:20:53 UTC (rev 9597) +++ trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/JDBCReader.java 2006-03-10 23:34:42 UTC (rev 9598) @@ -63,7 +63,7 @@ Set hasIndices = new HashSet(); - List schemaSelectors = revengStrategy.getSchemaSelectors(); + List schemaSelectors = revengStrategy.getSchemaSelections(); if(schemaSelectors==null) { processTables(dbs, new SchemaSelection(catalog, schema), hasIndices, progress); } else { @@ -267,7 +267,7 @@ addToMultiMap(oneToManyCandidates, className, key); } - + // map<className, foreignkey> return oneToManyCandidates; } Modified: trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/OverrideBinder.java =================================================================== --- trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/OverrideBinder.java 2006-03-10 23:20:53 UTC (rev 9597) +++ trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/OverrideBinder.java 2006-03-10 23:34:42 UTC (rev 9598) @@ -72,8 +72,8 @@ String wantedClassName = element.attributeValue("class"); - Element identifier = element.element("primary-key"); - bindIdentifiers(identifier, table, repository); + Element primaryKey = element.element("primary-key"); + bindPrimaryKey(primaryKey, table, repository); List columns = element.elements("column"); bindColumns(columns, table, repository); @@ -88,9 +88,12 @@ } - private static void bindIdentifiers(Element identifier, Table table, OverrideRepository repository) { + private static void bindPrimaryKey(Element identifier, Table table, OverrideRepository repository) { if(identifier==null) return; + String propertyName = identifier.attributeValue("property"); + String compositeIdName = identifier.attributeValue("composite-id-class"); + Element element = identifier.element("generator"); if(element!=null) { String identifierClass = element.attributeValue("class"); @@ -105,9 +108,9 @@ repository.addTableIdentifierStrategy(table, identifierClass, params); } - List boundColumnNames = bindColumns(identifier.elements("column"), table, repository); + List boundColumnNames = bindColumns(identifier.elements("key-column"), table, repository); - repository.addPrimaryKeyNamesForTable(table, boundColumnNames); + repository.addPrimaryKeyNamesForTable(table, boundColumnNames, propertyName, compositeIdName); } @@ -116,7 +119,9 @@ while( iterator.hasNext() ) { Element element = (Element) iterator.next(); - + + String constraintName = element.attributeValue("constraint-name"); + String foreignTableName = element.attributeValue("foreign-table"); if(foreignTableName!=null) { Table foreignTable = new Table(); @@ -139,12 +144,26 @@ localColumns.add(localColumn); foreignColumns.add(foreignColumn); } + + ForeignKey key = table.createForeignKey(constraintName, localColumns, foreignTableName, foreignColumns); + key.setReferencedTable(foreignTable); // only possible if foreignColumns is explicitly specified (workaround on aligncolumns) + } + + if(StringHelper.isNotEmpty(constraintName)) { + String manyToOneProperty = null; + Element manyToOne = element.element("many-to-one"); + if(manyToOne!=null) { + manyToOneProperty = manyToOne.attributeValue("property"); + } - ForeignKey key = table.createForeignKey(null, localColumns, foreignTableName, foreignColumns); - key.setReferencedTable(foreignTable); // only possible if foreignColumns is explicitly specified (workaround on aligncolumns) + String collectionProperty = null; + Element collection = element.element("set"); + if(collection!=null) { + collectionProperty = collection.attributeValue("property"); + } + repository.addForeignKeyInfo(constraintName, manyToOneProperty, collectionProperty); } - } } @@ -236,7 +255,7 @@ while (iterator.hasNext() ) { Element element = (Element) iterator.next(); SQLTypeMapping mapping = new SQLTypeMapping(JDBCToHibernateTypeHelper.getJDBCType(element.attributeValue("jdbc-type") ) ); - mapping.setHibernateType(element.attributeValue("hibernate-type") ); + mapping.setHibernateType( getHibernateType( element ) ); mapping.setLength(getInteger(element.attributeValue("length"), SQLTypeMapping.UNKNOWN_LENGTH) ); mapping.setPrecision(getInteger(element.attributeValue("precision"), SQLTypeMapping.UNKNOWN_PRECISION) ); mapping.setScale(getInteger(element.attributeValue("scale"), SQLTypeMapping.UNKNOWN_SCALE) ); @@ -247,10 +266,30 @@ boolean nullable = notNull.equals( "false" ); mapping.setNullable( Boolean.valueOf(nullable) ); } + + if(StringHelper.isEmpty(mapping.getHibernateType())) { + throw new MappingException("No hibernate-type specified for " + element.attributeValue("jdbc-type") + " at " + element.getUniquePath()); + } repository.addTypeMapping(mapping); } } + + private static String getHibernateType(Element element) { + String attributeValue = element.attributeValue("hibernate-type"); + + if(StringHelper.isEmpty(attributeValue)) { + Element child = element.element("hibernate-type"); + if(child==null) { + return null; + } else { + return child.attributeValue("name"); + } + + } + + return attributeValue; + } private static int getInteger(String string, int defaultValue) { if(string==null) { Modified: trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/OverrideRepository.java =================================================================== --- trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/OverrideRepository.java 2006-03-10 23:20:53 UTC (rev 9597) +++ trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/OverrideRepository.java 2006-03-10 23:34:42 UTC (rev 9598) @@ -55,14 +55,18 @@ final private Map tableToClassName; final private List schemaSelections; + + final private Map propertyNameForPrimaryKey; + + final private Map compositeIdNameForTable; + + final private Map foreignKeyToEntityName; + + final private Map foreignKeyToCollectionName; //private String defaultCatalog; //private String defaultSchema; - - - - public OverrideRepository() { //this.defaultCatalog = null; //this.defaultSchema = null; @@ -77,9 +81,13 @@ identifierStrategyForTable = new HashMap(); identifierPropertiesForTable = new HashMap(); primaryKeyColumnsForTable = new HashMap(); + propertyNameForPrimaryKey = new HashMap(); tableToClassName = new HashMap(); excludedColumns = new HashSet(); schemaSelections = new ArrayList(); + compositeIdNameForTable = new HashMap(); + foreignKeyToEntityName = new HashMap(); + foreignKeyToCollectionName = new HashMap(); } public OverrideRepository addFile(File xmlFile) { @@ -258,9 +266,17 @@ return excludedColumns.contains(TABLECOLUMN_KEY_FACTORY.newInstance(identifier, columnName)); } - public List getSchemaSelectors() { + public String tableToCompositeIdName(TableIdentifier identifier) { + String result = (String) compositeIdNameForTable.get(identifier); + if(result==null) { + return super.tableToCompositeIdName(identifier); + } else { + return result; + } + } + public List getSchemaSelections() { if(schemaSelections.isEmpty()) { - return super.getSchemaSelectors(); + return super.getSchemaSelections(); } else { return schemaSelections; } @@ -328,6 +344,15 @@ } } + public String tableToIdentifierPropertyName(TableIdentifier tableIdentifier) { + String result = (String) propertyNameForPrimaryKey.get(tableIdentifier); + if(result==null) { + return super.tableToIdentifierPropertyName(tableIdentifier); + } else { + return result; + } + } + public String getTableIdentifierStrategyName(TableIdentifier tableIdentifier) { String result = (String) identifierStrategyForTable.get(tableIdentifier); if(result==null) { @@ -354,6 +379,24 @@ return result; } } + + public String foreignKeyToEntityName(String keyname, TableIdentifier fromTable, List fromColumnNames, TableIdentifier referencedTable, List referencedColumnNames, boolean uniqueReference) { + String property = (String) foreignKeyToEntityName.get(keyname); + if(property==null) { + return super.foreignKeyToEntityName(keyname, fromTable, fromColumnNames, referencedTable, referencedColumnNames, uniqueReference); + } else { + return property; + } + } + + public String foreignKeyToCollectionName(String keyname, TableIdentifier fromTable, List fromColumns, TableIdentifier referencedTable, List referencedColumns, boolean uniqueReference) { + String property = (String) foreignKeyToCollectionName.get(keyname); + if(property==null) { + return super.foreignKeyToCollectionName(keyname, fromTable, fromColumns, referencedTable, referencedColumns, uniqueReference); + } else { + return property; + } + } }; } @@ -415,11 +458,17 @@ } } - public void addPrimaryKeyNamesForTable(Table table, List boundColumnNames) { + public void addPrimaryKeyNamesForTable(Table table, List boundColumnNames, String propertyName, String compositeIdName) { + TableIdentifier tableIdentifier = TableIdentifier.create(table); if(boundColumnNames!=null && !boundColumnNames.isEmpty()) { - primaryKeyColumnsForTable.put(TableIdentifier.create(table), boundColumnNames); + primaryKeyColumnsForTable.put(tableIdentifier, boundColumnNames); } - + if(StringHelper.isNotEmpty(propertyName)) { + propertyNameForPrimaryKey.put(tableIdentifier, propertyName); + } + if(StringHelper.isNotEmpty(compositeIdName)) { + compositeIdNameForTable.put(tableIdentifier, compositeIdName); + } } /*public String getCatalog(String string) { @@ -434,6 +483,15 @@ schemaSelections.add(schemaSelection); } + public void addForeignKeyInfo(String constraintName, String manyToOneProperty, String collectionProperty) { + if(StringHelper.isNotEmpty(manyToOneProperty)) { + foreignKeyToEntityName.put(constraintName, manyToOneProperty); + } + if(StringHelper.isNotEmpty(collectionProperty)) { + foreignKeyToCollectionName.put(constraintName, collectionProperty); + } + } + } Modified: trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/ReverseEngineeringStrategy.java =================================================================== --- trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/ReverseEngineeringStrategy.java 2006-03-10 23:20:53 UTC (rev 9597) +++ trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/ReverseEngineeringStrategy.java 2006-03-10 23:34:42 UTC (rev 9598) @@ -68,6 +68,10 @@ public Properties getTableIdentifierProperties(TableIdentifier identifier); + /** + * If a table does not have any primarykey columns reported, this method is called. + * @return list of strings for each column name that is part of the primary key + **/ public List getPrimaryKeyColumnNames(TableIdentifier identifier); /** @@ -103,7 +107,11 @@ * * @return null */ - public List getSchemaSelectors(); + public List getSchemaSelections(); + public String tableToIdentifierPropertyName(TableIdentifier tableIdentifier); + + public String tableToCompositeIdName(TableIdentifier identifier); + } Modified: trunk/HibernateExt/tools/src/java/org/hibernate/hibernate-reverse-engineering-3.0.dtd =================================================================== --- trunk/HibernateExt/tools/src/java/org/hibernate/hibernate-reverse-engineering-3.0.dtd 2006-03-10 23:20:53 UTC (rev 9597) +++ trunk/HibernateExt/tools/src/java/org/hibernate/hibernate-reverse-engineering-3.0.dtd 2006-03-10 23:34:42 UTC (rev 9598) @@ -22,15 +22,18 @@ <!ELEMENT type-mapping ( sql-type+ ) > <!-- Defines a sql-type mapping. Will match on any combination of jdbc-type, length, precision and/or scale - first match will win. --> -<!ELEMENT sql-type EMPTY > +<!ELEMENT sql-type (hibernate-type?) > <!ATTLIST sql-type name CDATA #IMPLIED > <!ATTLIST sql-type jdbc-type CDATA #IMPLIED > <!ATTLIST sql-type length CDATA #IMPLIED > <!ATTLIST sql-type precision CDATA #IMPLIED > <!ATTLIST sql-type scale CDATA #IMPLIED > <!ATTLIST sql-type not-null (true|false) #IMPLIED > -<!ATTLIST sql-type hibernate-type CDATA #REQUIRED > +<!ATTLIST sql-type hibernate-type CDATA #IMPLIED > +<!ELEMENT hibernate-type EMPTY> +<!ATTLIST hibernate-type name CDATA #REQUIRED > + <!-- Used to target the selection from the database schema. Each schema-selection can be viewed as a "call" to DatabaseMetaData.getTables(). --> <!ELEMENT schema-selection EMPTY> @@ -70,14 +73,18 @@ <!ATTLIST key-column property CDATA #IMPLIED > <!ELEMENT primary-key (generator?, key-column*) > +<!-- Property name to use for this primary key --> +<!ATTLIST primary-key property CDATA #IMPLIED > +<!-- Class to use if primary-key is a composite --> +<!ATTLIST primary-key composite-id-class CDATA #IMPLIED > <!ELEMENT generator (param*)> <!ATTLIST generator class CDATA #REQUIRED> <!ELEMENT param (#PCDATA)> <!ATTLIST param name CDATA #REQUIRED> -<!ELEMENT foreign-key (column-ref+) > -<!ATTLIST foreign-key name CDATA #IMPLIED > +<!ELEMENT foreign-key (column-ref+,many-to-one?,(set|bag)?) > +<!ATTLIST foreign-key constraint-name CDATA #IMPLIED > <!ATTLIST foreign-key foreign-catalog CDATA #IMPLIED > <!ATTLIST foreign-key foreign-schema CDATA #IMPLIED > <!ATTLIST foreign-key foreign-table CDATA #REQUIRED > @@ -88,6 +95,15 @@ <!ATTLIST column-ref local-column CDATA #REQUIRED > <!ATTLIST column-ref foreign-column CDATA #IMPLIED > +<!ELEMENT many-to-one EMPTY > +<!ATTLIST many-to-one property CDATA #REQUIRED> + +<!ELEMENT set EMPTY > +<!ATTLIST set property CDATA #REQUIRED> + +<!ELEMENT bag EMPTY > +<!ATTLIST bag property CDATA #REQUIRED> + <!-- a table-filter allows to explicitly exclude or include tables or complete catalog/schemas into the reverse engineering --> <!ELEMENT table-filter EMPTY > <!ATTLIST table-filter match-catalog CDATA ".*" > Modified: trunk/HibernateExt/tools/src/java/org/hibernate/tool/ant/ConfigurationTask.java =================================================================== --- trunk/HibernateExt/tools/src/java/org/hibernate/tool/ant/ConfigurationTask.java 2006-03-10 23:20:53 UTC (rev 9597) +++ trunk/HibernateExt/tools/src/java/org/hibernate/tool/ant/ConfigurationTask.java 2006-03-10 23:34:42 UTC (rev 9598) @@ -98,7 +98,7 @@ Object object = resolver.newInstance(); configuration.setNamingStrategy((NamingStrategy) object); - getProject().log("Using " + entityResolver + " as naming strategy"); + getProject().log("Using " + namingStrategy + " as naming strategy"); } catch (Exception e) { throw new BuildException("Could not create or find " + namingStrategy + " class to use for naming strategy"); Modified: trunk/HibernateExt/tools/src/java/org/hibernate/tool/ant/Hbm2CfgXmlExporterTask.java =================================================================== --- trunk/HibernateExt/tools/src/java/org/hibernate/tool/ant/Hbm2CfgXmlExporterTask.java 2006-03-10 23:20:53 UTC (rev 9597) +++ trunk/HibernateExt/tools/src/java/org/hibernate/tool/ant/Hbm2CfgXmlExporterTask.java 2006-03-10 23:34:42 UTC (rev 9598) @@ -29,7 +29,7 @@ protected Exporter configureExporter(Exporter exporter) { HibernateConfigurationExporter hce = (HibernateConfigurationExporter)super.configureExporter( exporter ); - hce.setEjb3(ejb3); + hce.getProperties().setProperty("ejb3", ""+ejb3); return hce; } } Modified: trunk/HibernateExt/tools/src/java/org/hibernate/tool/ant/Hbm2JavaExporterTask.java =================================================================== --- trunk/HibernateExt/tools/src/java/org/hibernate/tool/ant/Hbm2JavaExporterTask.java 2006-03-10 23:20:53 UTC (rev 9597) +++ trunk/HibernateExt/tools/src/java/org/hibernate/tool/ant/Hbm2JavaExporterTask.java 2006-03-10 23:34:42 UTC (rev 9598) @@ -32,8 +32,8 @@ protected Exporter configureExporter(Exporter exp) { POJOExporter exporter = (POJOExporter) exp; super.configureExporter( exp ); - exporter.setEjb3( ejb3 ); - exporter.setJdk5( jdk5 ); + exporter.getProperties().setProperty("ejb3", ""+ejb3); + exporter.getProperties().setProperty("jdk5", ""+jdk5); return exporter; } Modified: trunk/HibernateExt/tools/src/java/org/hibernate/tool/hbm2x/HibernateConfigurationExporter.java =================================================================== --- trunk/HibernateExt/tools/src/java/org/hibernate/tool/hbm2x/HibernateConfigurationExporter.java 2006-03-10 23:20:53 UTC (rev 9597) +++ trunk/HibernateExt/tools/src/java/org/hibernate/tool/hbm2x/HibernateConfigurationExporter.java 2006-03-10 23:34:42 UTC (rev 9598) @@ -28,7 +28,6 @@ private Writer output; private Properties customProperties = new Properties(); - private boolean ejb3; public HibernateConfigurationExporter(Configuration configuration, File outputdir) { super(configuration, outputdir); @@ -77,12 +76,14 @@ " \"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd\">\r\n" + "<hibernate-configuration>"); + boolean ejb3 = Boolean.valueOf((String)getProperties().get("ejb3")).booleanValue(); + Map props = new TreeMap(); if(getConfiguration()!=null) { props.putAll(getConfiguration().getProperties() ); } if(customProperties!=null) { - props.putAll(customProperties); + props.putAll(customProperties); } String sfname = (String) props.get(Environment.SESSION_FACTORY_NAME); @@ -155,8 +156,4 @@ public String getName() { return "cfg2cfgxml"; } - - public void setEjb3(boolean b) { - this.ejb3 = b; - } } Modified: trunk/HibernateExt/tools/src/java/org/hibernate/tool/hbm2x/POJOExporter.java =================================================================== --- trunk/HibernateExt/tools/src/java/org/hibernate/tool/hbm2x/POJOExporter.java 2006-03-10 23:20:53 UTC (rev 9597) +++ trunk/HibernateExt/tools/src/java/org/hibernate/tool/hbm2x/POJOExporter.java 2006-03-10 23:34:42 UTC (rev 9598) @@ -6,8 +6,6 @@ import java.io.File; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.hibernate.cfg.Configuration; /** @@ -16,9 +14,6 @@ public class POJOExporter extends GenericExporter { private static final String POJO_JAVACLASS_VM = "Pojo"; - - private boolean ejb3; - private boolean jdk5; public POJOExporter(Configuration cfg, File outputdir) { super(cfg, outputdir); @@ -34,31 +29,19 @@ public POJOExporter() { init(); } - - protected void setupContext() { - getProperties().put("ejb3", "" + useEjb3()); - getProperties().put("jdk5", "" + useJdk5()); - super.setupContext(); - } - - public boolean useEjb3() { - return ejb3; - } - - public void setEjb3(boolean ejb3) { - this.ejb3 = ejb3; - } - - public boolean useJdk5() { - return jdk5; - } - - public void setJdk5(boolean jdk5) { - this.jdk5 = jdk5; - } - + public String getName() { return "hbm2java"; } - + + protected void setupContext() { + //TODO: this safe guard should be in the root templates instead for each variable they depend on. + if(!getProperties().containsKey("ejb3")) { + getProperties().put("ejb3", "false"); + } + if(!getProperties().containsKey("jdk5")) { + getProperties().put("jdk5", "false"); + } + super.setupContext(); + } } Modified: trunk/HibernateExt/tools/src/java/org/hibernate/tool/hbm2x/seam/SeamExporter.java =================================================================== --- trunk/HibernateExt/tools/src/java/org/hibernate/tool/hbm2x/seam/SeamExporter.java 2006-03-10 23:20:53 UTC (rev 9597) +++ trunk/HibernateExt/tools/src/java/org/hibernate/tool/hbm2x/seam/SeamExporter.java 2006-03-10 23:34:42 UTC (rev 9598) @@ -70,8 +70,8 @@ exporter.setProperties((Properties) getProperties().clone()); exporter.setTemplatePath(getTemplatePaths()); exporter.setArtifactCollector(getArtifactCollector()); - exporter.setEjb3(true); - exporter.setJdk5(true); + exporter.getProperties().setProperty("ejb3", "true"); + exporter.getProperties().setProperty("jdk5", "true"); exporter.setFilePattern("src/{package-name}/{class-name}.java"); exporter.start(); Modified: trunk/HibernateExt/tools/src/templates/dao/daohome.ftl =================================================================== --- trunk/HibernateExt/tools/src/templates/dao/daohome.ftl 2006-03-10 23:20:53 UTC (rev 9597) +++ trunk/HibernateExt/tools/src/templates/dao/daohome.ftl 2006-03-10 23:34:42 UTC (rev 9598) @@ -168,8 +168,8 @@ .createCriteria("${clazz.entityName}") <#if jdk5> .add( ${pojo.staticImport("org.hibernate.criterion.Restrictions", "naturalId")}() -<#else> - .add( ${pojo.importType("org.hibernate.criterion.Restrictions", "naturalId")}() +<#else> + .add( ${pojo.importType("org.hibernate.criterion.Restrictions")}.naturalId() </#if> <#foreach property in pojo.getAllPropertiesIterator()> <#if property.isNaturalIdentifier()> Modified: trunk/HibernateExt/tools/src/test/org/hibernate/tool/ant/SeamAntTest.java =================================================================== --- trunk/HibernateExt/tools/src/test/org/hibernate/tool/ant/SeamAntTest.java 2006-03-10 23:20:53 UTC (rev 9597) +++ trunk/HibernateExt/tools/src/test/org/hibernate/tool/ant/SeamAntTest.java 2006-03-10 23:34:42 UTC (rev 9598) @@ -5,6 +5,7 @@ package org.hibernate.tool.ant; import java.io.File; +import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -15,6 +16,9 @@ import org.dom4j.DocumentException; import org.dom4j.io.SAXReader; import org.hibernate.tool.test.TestHelper; +import org.xml.sax.EntityResolver; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; /** * A temporary test class for controlling the seam template generation Modified: trunk/HibernateExt/tools/src/test/org/hibernate/tool/hbm2x/GenerateFromJDBCTest.java =================================================================== --- trunk/HibernateExt/tools/src/test/org/hibernate/tool/hbm2x/GenerateFromJDBCTest.java 2006-03-10 23:20:53 UTC (rev 9597) +++ trunk/HibernateExt/tools/src/test/org/hibernate/tool/hbm2x/GenerateFromJDBCTest.java 2006-03-10 23:34:42 UTC (rev 9598) @@ -62,7 +62,7 @@ exporter.start(); exporter = new POJOExporter(cfg,getOutputDir()); - exporter.setEjb3(true); + exporter.getProperties().setProperty("ejb3", "true"); exporter.start(); TestHelper.deleteDir(getOutputDir()); @@ -121,7 +121,7 @@ HibernateConfigurationExporter exporter = new HibernateConfigurationExporter(cfg,getOutputDir()); - exporter.setEjb3(true); + exporter.getProperties().setProperty("ejb3", "true"); exporter.start(); Modified: trunk/HibernateExt/tools/src/test/org/hibernate/tool/hbm2x/Hbm2DaoTest.java =================================================================== --- trunk/HibernateExt/tools/src/test/org/hibernate/tool/hbm2x/Hbm2DaoTest.java 2006-03-10 23:20:53 UTC (rev 9597) +++ trunk/HibernateExt/tools/src/test/org/hibernate/tool/hbm2x/Hbm2DaoTest.java 2006-03-10 23:34:42 UTC (rev 9598) @@ -26,8 +26,8 @@ POJOExporter javaExporter = new POJOExporter(getCfg(), getOutputDir() ); POJOExporter exporter = new DAOExporter(getCfg(), getOutputDir() ); - exporter.setEjb3(false); - exporter.setJdk5(true); + exporter.getProperties().setProperty("ejb3", "false"); + exporter.getProperties().setProperty("jdk5", "true"); exporter.start(); javaExporter.start(); } Modified: trunk/HibernateExt/tools/src/test/org/hibernate/tool/hbm2x/Hbm2EJBDaoTest.java =================================================================== --- trunk/HibernateExt/tools/src/test/org/hibernate/tool/hbm2x/Hbm2EJBDaoTest.java 2006-03-10 23:20:53 UTC (rev 9597) +++ trunk/HibernateExt/tools/src/test/org/hibernate/tool/hbm2x/Hbm2EJBDaoTest.java 2006-03-10 23:34:42 UTC (rev 9598) @@ -26,8 +26,8 @@ POJOExporter javaExporter = new POJOExporter(getCfg(), getOutputDir() ); POJOExporter exporter = new DAOExporter(getCfg(), getOutputDir() ); - exporter.setEjb3(true); - exporter.setJdk5(true); + exporter.getProperties().setProperty("ejb3", "true"); + exporter.getProperties().setProperty("jdk5", "true"); exporter.start(); javaExporter.start(); } Modified: trunk/HibernateExt/tools/src/test/org/hibernate/tool/hbm2x/Hbm2HibernateDAOTest.java =================================================================== --- trunk/HibernateExt/tools/src/test/org/hibernate/tool/hbm2x/Hbm2HibernateDAOTest.java 2006-03-10 23:20:53 UTC (rev 9597) +++ trunk/HibernateExt/tools/src/test/org/hibernate/tool/hbm2x/Hbm2HibernateDAOTest.java 2006-03-10 23:34:42 UTC (rev 9598) @@ -26,8 +26,8 @@ POJOExporter javaExporter = new POJOExporter(getCfg(), getOutputDir() ); POJOExporter exporter = new DAOExporter(getCfg(), getOutputDir() ); - exporter.setEjb3(false); - exporter.setJdk5(true); + exporter.getProperties().setProperty("ejb3", "false"); + exporter.getProperties().setProperty("jdk5", "true"); exporter.start(); javaExporter.start(); } Modified: trunk/HibernateExt/tools/src/test/org/hibernate/tool/hbm2x/Hbm2JavaEjb3Test.java =================================================================== --- trunk/HibernateExt/tools/src/test/org/hibernate/tool/hbm2x/Hbm2JavaEjb3Test.java 2006-03-10 23:20:53 UTC (rev 9597) +++ trunk/HibernateExt/tools/src/test/org/hibernate/tool/hbm2x/Hbm2JavaEjb3Test.java 2006-03-10 23:34:42 UTC (rev 9598) @@ -29,8 +29,8 @@ POJOExporter exporter = new POJOExporter(getCfg(), getOutputDir() ); exporter.setTemplatePath(new String[0]); - exporter.setEjb3(true); - exporter.setJdk5(true); + exporter.getProperties().setProperty("ejb3", "true"); + exporter.getProperties().setProperty("jdk5", "true"); exporter.start(); } Modified: trunk/HibernateExt/tools/src/test/org/hibernate/tool/hbm2x/Hbm2JavaTest.java =================================================================== --- trunk/HibernateExt/tools/src/test/org/hibernate/tool/hbm2x/Hbm2JavaTest.java 2006-03-10 23:20:53 UTC (rev 9597) +++ trunk/HibernateExt/tools/src/test/org/hibernate/tool/hbm2x/Hbm2JavaTest.java 2006-03-10 23:34:42 UTC (rev 9598) @@ -415,7 +415,7 @@ POJOExporter exporter = new POJOExporter( getCfg(), file ); artifactCollector = new ArtifactCollector(); exporter.setArtifactCollector(artifactCollector); - exporter.setJdk5(true); + exporter.getProperties().setProperty("jdk5", "true"); exporter.start(); File cfile = new File( getOutputDir(), "genericscompilable" ); Modified: trunk/HibernateExt/tools/src/test/org/hibernate/tool/test/jdbc2cfg/OverrideBinderTest.java =================================================================== --- trunk/HibernateExt/tools/src/test/org/hibernate/tool/test/jdbc2cfg/OverrideBinderTest.java 2006-03-10 23:20:53 UTC (rev 9597) +++ trunk/HibernateExt/tools/src/test/org/hibernate/tool/test/jdbc2cfg/OverrideBinderTest.java 2006-03-10 23:34:42 UTC (rev 9598) @@ -24,6 +24,7 @@ import org.hibernate.cfg.reveng.TableFilter; import org.hibernate.cfg.reveng.TableIdentifier; import org.hibernate.mapping.Column; +import org.hibernate.mapping.Component; import org.hibernate.mapping.ForeignKey; import org.hibernate.mapping.PersistentClass; import org.hibernate.mapping.Property; @@ -90,7 +91,7 @@ or.addResource(SCHEMA_REVENG_XML); ReverseEngineeringStrategy repository = or.getReverseEngineeringStrategy(new DefaultReverseEngineeringStrategy()); - List schemaSelectors = repository.getSchemaSelectors(); + List schemaSelectors = repository.getSchemaSelections(); assertNotNull(schemaSelectors); assertEquals(4,schemaSelectors.size()); @@ -169,22 +170,43 @@ assertNull(repository.getTableIdentifierStrategyName(new TableIdentifier("blah"))); assertNull(repository.getTableIdentifierProperties(new TableIdentifier("blah"))); - assertEquals("sequence",repository.getTableIdentifierStrategyName(new TableIdentifier(null, null, "ORDERS"))); - Map props = repository.getTableIdentifierProperties(new TableIdentifier(null, null, "ORDERS")); + TableIdentifier ordersTable = new TableIdentifier(null,null, "ORDERS"); + assertEquals("sequence",repository.getTableIdentifierStrategyName(ordersTable)); + Map props = repository.getTableIdentifierProperties(ordersTable); assertEquals("seq_table", props.get("table")); + assertEquals("customOrderId", repository.tableToIdentifierPropertyName(ordersTable)); + assertEquals(null, repository.tableToIdentifierPropertyName(new TableIdentifier("blah"))); + + assertEquals("CustomOID", repository.tableToCompositeIdName(ordersTable)); + assertEquals(null, repository.tableToCompositeIdName(new TableIdentifier("blah"))); + + List primaryKeyColumnNames = repository.getPrimaryKeyColumnNames(new TableIdentifier("blah")); + assertNull(primaryKeyColumnNames); + + primaryKeyColumnNames = repository.getPrimaryKeyColumnNames(ordersTable); + assertNotNull(primaryKeyColumnNames); + assertEquals(2, primaryKeyColumnNames.size()); + assertEquals("ORDERID", primaryKeyColumnNames.get(0)); + assertEquals("CUSTID", primaryKeyColumnNames.get(1)); + assertFalse(repository.excludeColumn(ordersTable, "CUSTID")); + // applied PersistentClass classMapping = cfg.getClassMapping("Orders"); - SimpleValue sv = (SimpleValue) classMapping.getIdentifier(); + Component sv = (Component) classMapping.getIdentifier(); + assertEquals("CustomOID", sv.getComponentClassName()); assertEquals("sequence", sv.getIdentifierGeneratorStrategy()); // will fail if default schema is not set since then there is no match in the override binder assertNotNull(sv.getIdentifierGeneratorProperties()); assertEquals("seq_table", sv.getIdentifierGeneratorProperties().getProperty("table")); - assertEquals(1,classMapping.getIdentifierProperty().getColumnSpan()); + assertEquals(2,classMapping.getIdentifierProperty().getColumnSpan()); + Property identifierProperty = classMapping.getIdentifierProperty(); + assertEquals("customOrderId", identifierProperty.getName()); } + public void testReadExcludeTables() { OverrideRepository or = buildOverrideRepository(); @@ -347,13 +369,14 @@ ForeignKey fk = (ForeignKey) foreignKeyIterator.next(); assertEquals(fk.getReferencedTable().getName(), identifier("Parent") ); assertEquals(2, fk.getReferencedColumns().size()); + assertEquals("child_to_parent", fk.getName()); PersistentClass classMapping = cfg.getClassMapping("Children"); - Property property = classMapping.getProperty("parent"); + Property property = classMapping.getProperty("propertyParent"); assertEquals(2,property.getColumnSpan()); classMapping = cfg.getClassMapping("Parent"); - property = classMapping.getProperty("childrens"); + property = classMapping.getProperty("propertyChildren"); } @@ -405,7 +428,7 @@ "create table misc_types ( id numeric(10,0) not null, name varchar(20), shortname varchar(5), flag varchar(1), primary key (id) )", "create table inthemiddle ( miscid numeric(10,0), defunctid numeric(10,0), foreign key (miscid) references misc_types, foreign key (defunctid) references defunct_table )", "create table customer ( custid varchar(10), name varchar(20) )", - "create table orders ( orderid varchar(10), name varchar(20), custid varchar(10), completed numeric(1) not null, verified numeric(1), primary key (orderid) )", + "create table orders ( orderid varchar(10), name varchar(20), custid varchar(10), completed numeric(1) not null, verified numeric(1) )", "create table parent ( id varchar(10), name varchar(20))", "create table children ( id varchar(10), parentid varchar(10), name varchar(20) )", "create table excolumns (id varchar(12), name varchar(20), excolumn numeric(10,0) )" Modified: trunk/HibernateExt/tools/src/test/org/hibernate/tool/test/jdbc2cfg/overridetest.reveng.xml =================================================================== --- trunk/HibernateExt/tools/src/test/org/hibernate/tool/test/jdbc2cfg/overridetest.reveng.xml 2006-03-10 23:20:53 UTC (rev 9597) +++ trunk/HibernateExt/tools/src/test/org/hibernate/tool/test/jdbc2cfg/overridetest.reveng.xml 2006-03-10 23:34:42 UTC (rev 9598) @@ -6,8 +6,9 @@ <type-mapping> <sql-type jdbc-type="VARCHAR" length='20' hibernate-type="SomeUserType" /> - <sql-type jdbc-type="VARCHAR" length='1' - hibernate-type="yes_no" /> + <sql-type jdbc-type="VARCHAR" length='1'> + <hibernate-type name="yes_no"/> + </sql-type> <sql-type jdbc-type="NUMERIC" precision='10' scale='2' hibernate-type="string" /> </type-mapping> @@ -44,11 +45,12 @@ alter table Customer add constraint 'max' foreign key (addressid, x) references address (dfdf) --> <table name="ORDERS"> - <primary-key> + <primary-key property="customOrderId" composite-id-class="CustomOID"> <generator class="sequence"> <param name="table">seq_table</param> </generator> <!-- <column name="CUSTID" foreign-table="CUSTOMER" foreign-column="CUSTID" /> --> + <key-column name="ORDERID"/> <key-column name="CUSTID"/> </primary-key> <column name="NAME" property="orderName" type="string" /> @@ -59,14 +61,16 @@ </table> - <table name="CHILDREN"> - <foreign-key foreign-table="PARENT"> + <table name="CHILDREN"> + <foreign-key constraint-name="child_to_parent" foreign-table="PARENT"> <column-ref local-column="parentid" foreign-column="id" /> - <column-ref local-column="extraparentid" - foreign-column="extraid" /> + <column-ref local-column="extraparentid" foreign-column="extraid" /> + <many-to-one property="propertyParent"/> + <set property="propertyChildren"/> </foreign-key> - </table> + </table> + <table name="EXCOLUMNS"> <column name="EXCOLUMN" exclude="true"/> </table> Modified: trunk/HibernateExt/tools/src/test/org/hibernate/tool/test/jdbc2cfg/schemaselection.reveng.xml =================================================================== --- trunk/HibernateExt/tools/src/test/org/hibernate/tool/test/jdbc2cfg/schemaselection.reveng.xml 2006-03-10 23:20:53 UTC (rev 9597) +++ trunk/HibernateExt/tools/src/test/org/hibernate/tool/test/jdbc2cfg/schemaselection.reveng.xml 2006-03-10 23:34:42 UTC (rev 9598) @@ -14,7 +14,5 @@ <!-- .* is valid, will be translated into % --> <schema-selection match-catalog="PUBLIC.*" match-schema="OVRTEST" match-table=".*"/> - - </hibernate-reverse-engineering> \ No newline at end of file Modified: trunk/HibernateExt/tools/src/test5.0/org/hibernate/tool/hbm2x/Hbm2JavaEjb3ForJDK50Test.java =================================================================== --- trunk/HibernateExt/tools/src/test5.0/org/hibernate/tool/hbm2x/Hbm2JavaEjb3ForJDK50Test.java 2006-03-10 23:20:53 UTC (rev 9597) +++ trunk/HibernateExt/tools/src/test5.0/org/hibernate/tool/hbm2x/Hbm2JavaEjb3ForJDK50Test.java 2006-03-10 23:34:42 UTC (rev 9598) @@ -31,8 +31,8 @@ POJOExporter exporter = new POJOExporter( getCfg(), getOutputDir() ); exporter.setTemplatePath( new String[0] ); - exporter.setEjb3( true ); - exporter.setJdk5( true ); + exporter.getProperties().setProperty("ejb3", "true"); + exporter.getProperties().setProperty("jdk5", "true"); exporter.start(); } Modified: trunk/HibernateExt/tools/src/testsupport/NoopReverseEngineeringStrategy.java =================================================================== --- trunk/HibernateExt/tools/src/testsupport/NoopReverseEngineeringStrategy.java 2006-03-10 23:20:53 UTC (rev 9597) +++ trunk/HibernateExt/tools/src/testsupport/NoopReverseEngineeringStrategy.java 2006-03-10 23:34:42 UTC (rev 9598) @@ -100,8 +100,18 @@ return false; } - public List getSchemaSelectors() { + public List getSchemaSelections() { // TODO Auto-generated method stub return null; } + + public String tableToIdentifierPropertyName(TableIdentifier tableIdentifier) { + // TODO Auto-generated method stub + return null; + } + + public String tableToCompositeIdName(TableIdentifier identifier) { + // TODO Auto-generated method stub + return null; + } } |