package org.hibernate.tool.hbm2x;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
import org.hibernate.cfg.JDBCMetaDataConfiguration;
import org.hibernate.cfg.reveng.DefaultReverseEngineeringStrategy;
import org.hibernate.cfg.reveng.OverrideRepository;
import org.hibernate.cfg.reveng.ReverseEngineeringSettings;
import org.hibernate.tool.JDBCMetaDataBinderTestCase;
import org.hibernate.tool.test.TestHelper;
import org.junit.Assert;
/**
* @author koen@hibernate.org
*/
public class GenerateFromJDBCWithJavaKeywordTest extends JDBCMetaDataBinderTestCase {
private static String REVENG_XML =
"<!DOCTYPE hibernate-reverse-engineering \n"+
" SYSTEM \n"+
" 'http://hibernate.sourceforge.net/hibernate-reverse-engineering-3.0.dtd'>\n"+
"<hibernate-reverse-engineering> \n"+
" <table name='my_return_history'> \n"+
" <foreign-key \n"+
" constraint-name='FK_MY_RETURN_HISTORY_RETURN_ID' \n"+
" foreign-table='my_return'> \n"+
" <column-ref local-column='my_return_ref' foreign-column='return_id'/> \n"+
" <many-to-one property=\"return\"/> \n"+
" </foreign-key> \n"+
" </table> \n"+
"</hibernate-reverse-engineering> ";
public GenerateFromJDBCWithJavaKeywordTest() {
super("genfromjdbcjavakeyword");
}
protected String[] getCreateSQL() {
return new String[] {
"create table my_return ( "+
" return_id varchar(20) not null, "+
" constraint pk_my_return primary key (return_id) )",
"create table my_return_history ( "+
" id varchar(20) not null, "+
" my_return_ref varchar(20), "+
" constraint pk_my_return_history primary key (id),"+
" constraint fk_my_return_history_return_id foreign key (my_return_ref) references my_return(return_id) )"
};
}
protected String[] getDropSQL() {
return new String[] {
"drop table my_return_history",
"drop table my_return",
};
}
protected void configure(JDBCMetaDataConfiguration cfg2configure) {
DefaultReverseEngineeringStrategy configurableNamingStrategy = new DefaultReverseEngineeringStrategy();
configurableNamingStrategy.setSettings(new ReverseEngineeringSettings(configurableNamingStrategy).setDefaultPackageName("org.reveng").setCreateCollectionForForeignKey(false));
cfg2configure.setReverseEngineeringStrategy(configurableNamingStrategy);
OverrideRepository overrideRepository = new OverrideRepository();
InputStream inputStream = new ByteArrayInputStream(REVENG_XML.getBytes());
overrideRepository.addInputStream(inputStream);
cfg2configure.setReverseEngineeringStrategy(overrideRepository.getReverseEngineeringStrategy(configurableNamingStrategy));
}
public void testGenerateJava() throws Exception {
POJOExporter exporter = new POJOExporter(cfg,getOutputDir());
exporter.start();
File myReturn = new File(getOutputDir(), "org/reveng/MyReturn.java");
Assert.assertTrue(myReturn.exists());
File myReturnHistory = new File(getOutputDir(), "org/reveng/MyReturnHistory.java");
Assert.assertTrue(myReturnHistory.exists());
TestHelper.compile(getOutputDir(), getOutputDir());
URLClassLoader loader = new URLClassLoader(new URL[] { getOutputDir().toURI().toURL() } );
Class<?> returnClass = loader.loadClass("org.reveng.MyReturn");
Assert.assertNotNull(returnClass);
Class<?> returnHistoryClass = loader.loadClass("org.reveng.MyReturnHistory");
Assert.assertNotNull(returnHistoryClass);
Field returnField = returnHistoryClass.getDeclaredField("return_");
Assert.assertNotNull(returnField);
Method returnSetter = returnHistoryClass.getMethod("setReturn", new Class[] { returnClass });
Assert.assertNotNull(returnSetter);
loader.close();
}
}