package org.jboss.tools.hibernate.runtime.v_3_6.internal;
import java.io.File;
import java.io.FileWriter;
import java.lang.reflect.Field;
import java.util.List;
import org.hibernate.cfg.reveng.DefaultReverseEngineeringStrategy;
import org.hibernate.cfg.reveng.DelegatingReverseEngineeringStrategy;
import org.hibernate.cfg.reveng.OverrideRepository;
import org.hibernate.cfg.reveng.ReverseEngineeringStrategy;
import org.hibernate.cfg.reveng.TableFilter;
import org.hibernate.mapping.Table;
import org.jboss.tools.hibernate.runtime.common.AbstractOverrideRepositoryFacade;
import org.jboss.tools.hibernate.runtime.common.IFacade;
import org.jboss.tools.hibernate.runtime.common.IFacadeFactory;
import org.jboss.tools.hibernate.runtime.spi.IOverrideRepository;
import org.jboss.tools.hibernate.runtime.spi.IReverseEngineeringStrategy;
import org.jboss.tools.hibernate.runtime.spi.ITableFilter;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
public class OverrideRepositoryFacadeTest {
private static final IFacadeFactory FACADE_FACTORY = new FacadeFactoryImpl();
private static final String HIBERNATE_REVERSE_ENGINEERING_XML =
"<?xml version='1.0' encoding='UTF-8'?> "+
"<!DOCTYPE hibernate-reverse-engineering PUBLIC "+
" '-//Hibernate/Hibernate Reverse Engineering DTD 3.0//EN' "+
" 'http://hibernate.sourceforge.net/hibernate-reverse-engineering-3.0.dtd'>"+
"<hibernate-reverse-engineering> "+
" <table name='FOO'/> "+
"</hibernate-reverse-engineering> ";
private IOverrideRepository overrideRepositoryFacade = null;
private OverrideRepository overrideRepository;
@Before
public void setUp() {
overrideRepository = new OverrideRepository();
overrideRepositoryFacade = new AbstractOverrideRepositoryFacade(
FACADE_FACTORY,
overrideRepository) {};
}
@Test
public void testAddFile() throws Exception {
File file = File.createTempFile("addFile", "tst");
file.deleteOnExit();
FileWriter fileWriter = new FileWriter(file);
fileWriter.write(HIBERNATE_REVERSE_ENGINEERING_XML);
fileWriter.close();
overrideRepositoryFacade.addFile(file);
Field tablesField = overrideRepository.getClass().getDeclaredField("tables");
tablesField.setAccessible(true);
Object object = tablesField.get(overrideRepository);
List<?> tables = (List<?>)object;
Table table = (Table)tables.get(0);
Assert.assertNotNull(table);
Assert.assertEquals("FOO", table.getName());
}
@Test
public void testGetReverseEngineeringStrategy() throws Exception {
ReverseEngineeringStrategy res = new DefaultReverseEngineeringStrategy();
IReverseEngineeringStrategy resFacade = FACADE_FACTORY.createReverseEngineeringStrategy(res);
IReverseEngineeringStrategy result = overrideRepositoryFacade.getReverseEngineeringStrategy(resFacade);
DelegatingReverseEngineeringStrategy resultTarget =
(DelegatingReverseEngineeringStrategy)((IFacade)result).getTarget();
Field delegateField = DelegatingReverseEngineeringStrategy.class.getDeclaredField("delegate");
delegateField.setAccessible(true);
Assert.assertSame(res, delegateField.get(resultTarget));
}
@Test
public void testAddTableFilter() throws Exception {
TableFilter tableFilter = new TableFilter();
ITableFilter tableFilterFacade = FACADE_FACTORY.createTableFilter(tableFilter);
Field tableFiltersField = OverrideRepository.class.getDeclaredField("tableFilters");
tableFiltersField.setAccessible(true);
List<?> tableFilters = (List<?>)tableFiltersField.get(overrideRepository);
Assert.assertTrue(tableFilters.isEmpty());
overrideRepositoryFacade.addTableFilter(tableFilterFacade);
tableFilters = (List<?>)tableFiltersField.get(overrideRepository);
Assert.assertSame(tableFilter, tableFilters.get(0));
}
}