package org.jboss.tools.hibernate.runtime.v_3_5.internal; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.util.Collections; import org.hibernate.Criteria; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.hibernate.cfg.DefaultNamingStrategy; import org.hibernate.cfg.Mappings; import org.hibernate.cfg.NamingStrategy; import org.hibernate.cfg.reveng.DatabaseCollector; import org.hibernate.cfg.reveng.DefaultReverseEngineeringStrategy; import org.hibernate.cfg.reveng.JDBCReader; import org.hibernate.cfg.reveng.OverrideRepository; import org.hibernate.cfg.reveng.ReverseEngineeringSettings; import org.hibernate.cfg.reveng.ReverseEngineeringStrategy; import org.hibernate.cfg.reveng.TableFilter; import org.hibernate.dialect.Dialect; import org.hibernate.engine.SessionFactoryImplementor; import org.hibernate.engine.query.HQLQueryPlan; import org.hibernate.hql.QueryTranslator; import org.hibernate.impl.SessionFactoryImpl; import org.hibernate.mapping.Column; import org.hibernate.mapping.ForeignKey; import org.hibernate.mapping.Join; import org.hibernate.mapping.PersistentClass; import org.hibernate.mapping.PrimaryKey; import org.hibernate.mapping.Property; import org.hibernate.mapping.RootClass; import org.hibernate.mapping.SimpleValue; import org.hibernate.mapping.Table; import org.hibernate.mapping.Value; import org.hibernate.metadata.ClassMetadata; import org.hibernate.metadata.CollectionMetadata; import org.hibernate.tool.hbm2ddl.SchemaExport; import org.hibernate.tool.hbm2x.ArtifactCollector; import org.hibernate.tool.hbm2x.Cfg2HbmTool; import org.hibernate.tool.hbm2x.Exporter; import org.hibernate.tool.hbm2x.GenericExporter; import org.hibernate.tool.hbm2x.Hbm2DDLExporter; import org.hibernate.tool.hbm2x.HibernateMappingExporter; import org.hibernate.tool.hbm2x.QueryExporter; import org.hibernate.tool.hbm2x.pojo.POJOClass; import org.hibernate.tool.ide.completion.HQLCodeAssist; import org.hibernate.tool.ide.completion.HQLCompletionProposal; import org.hibernate.tuple.entity.EntityMetamodel; import org.hibernate.type.Type; import org.jboss.tools.hibernate.runtime.common.AbstractPropertyFacade; import org.jboss.tools.hibernate.runtime.common.IFacade; import org.jboss.tools.hibernate.runtime.spi.IArtifactCollector; import org.jboss.tools.hibernate.runtime.spi.ICfg2HbmTool; import org.jboss.tools.hibernate.runtime.spi.IClassMetadata; import org.jboss.tools.hibernate.runtime.spi.ICollectionMetadata; import org.jboss.tools.hibernate.runtime.spi.IColumn; import org.jboss.tools.hibernate.runtime.spi.IConfiguration; import org.jboss.tools.hibernate.runtime.spi.ICriteria; import org.jboss.tools.hibernate.runtime.spi.IDatabaseCollector; import org.jboss.tools.hibernate.runtime.spi.IDialect; import org.jboss.tools.hibernate.runtime.spi.IEntityMetamodel; import org.jboss.tools.hibernate.runtime.spi.IExporter; import org.jboss.tools.hibernate.runtime.spi.IForeignKey; import org.jboss.tools.hibernate.runtime.spi.IGenericExporter; import org.jboss.tools.hibernate.runtime.spi.IHQLCodeAssist; import org.jboss.tools.hibernate.runtime.spi.IHQLCompletionProposal; import org.jboss.tools.hibernate.runtime.spi.IHQLQueryPlan; import org.jboss.tools.hibernate.runtime.spi.IHbm2DDLExporter; import org.jboss.tools.hibernate.runtime.spi.IHibernateMappingExporter; import org.jboss.tools.hibernate.runtime.spi.IJDBCReader; import org.jboss.tools.hibernate.runtime.spi.IJoin; import org.jboss.tools.hibernate.runtime.spi.IMappings; import org.jboss.tools.hibernate.runtime.spi.INamingStrategy; import org.jboss.tools.hibernate.runtime.spi.IOverrideRepository; import org.jboss.tools.hibernate.runtime.spi.IPOJOClass; import org.jboss.tools.hibernate.runtime.spi.IPersistentClass; import org.jboss.tools.hibernate.runtime.spi.IPrimaryKey; import org.jboss.tools.hibernate.runtime.spi.IProperty; import org.jboss.tools.hibernate.runtime.spi.IQuery; import org.jboss.tools.hibernate.runtime.spi.IQueryExporter; import org.jboss.tools.hibernate.runtime.spi.IQueryTranslator; import org.jboss.tools.hibernate.runtime.spi.IReverseEngineeringSettings; import org.jboss.tools.hibernate.runtime.spi.IReverseEngineeringStrategy; import org.jboss.tools.hibernate.runtime.spi.ISchemaExport; import org.jboss.tools.hibernate.runtime.spi.ISession; import org.jboss.tools.hibernate.runtime.spi.ISessionFactory; import org.jboss.tools.hibernate.runtime.spi.ITable; import org.jboss.tools.hibernate.runtime.spi.ITableFilter; import org.jboss.tools.hibernate.runtime.spi.IType; import org.jboss.tools.hibernate.runtime.spi.ITypeFactory; import org.jboss.tools.hibernate.runtime.spi.IValue; import org.junit.Assert; import org.junit.Before; import org.junit.Test; public class FacadeFactoryTest { private FacadeFactoryImpl facadeFactory; @Before public void setUp() throws Exception { facadeFactory = new FacadeFactoryImpl(); } @Test public void testGetClassLoader() { Assert.assertSame(getClass().getClassLoader(), facadeFactory.getClassLoader()); } @Test public void testCreateArtifactCollector() { ArtifactCollector artifactCollector = new ArtifactCollector(); IArtifactCollector facade = facadeFactory.createArtifactCollector(artifactCollector); Assert.assertSame(artifactCollector, ((IFacade)facade).getTarget()); } @Test public void testCreateCfg2HbmTool() { Cfg2HbmTool cfg2HbmTool = new Cfg2HbmTool(); ICfg2HbmTool facade = facadeFactory.createCfg2HbmTool(cfg2HbmTool); Assert.assertSame(cfg2HbmTool, ((IFacade)facade).getTarget()); } @Test public void testCreateNamingStrategy() { NamingStrategy namingStrategy = new DefaultNamingStrategy(); INamingStrategy facade = facadeFactory.createNamingStrategy(namingStrategy); Assert.assertSame(namingStrategy, ((IFacade)facade).getTarget()); } @Test public void testCreateDialect() { Dialect dialect = new Dialect() {}; IDialect facade = facadeFactory.createDialect(dialect); Assert.assertSame(dialect, ((IFacade)facade).getTarget()); } @Test public void testCreateReverseEngineeringSettings() { ReverseEngineeringSettings res = new ReverseEngineeringSettings(null); IReverseEngineeringSettings facade = facadeFactory.createReverseEngineeringSettings(res); Assert.assertSame(res, ((IFacade)facade).getTarget()); } @Test public void testCreateReverseEngineeringStrategy() { ReverseEngineeringStrategy res = (ReverseEngineeringStrategy)Proxy.newProxyInstance( facadeFactory.getClassLoader(), new Class[] { ReverseEngineeringStrategy.class }, new TestInvocationHandler()); IReverseEngineeringStrategy facade = facadeFactory.createReverseEngineeringStrategy(res); Assert.assertSame(res, ((IFacade)facade).getTarget()); } @Test public void testCreateOverrideRepository() { OverrideRepository overrideRepository = new OverrideRepository(); IOverrideRepository facade = facadeFactory.createOverrideRepository(overrideRepository); Assert.assertSame(overrideRepository, ((IFacade)facade).getTarget()); } @Test public void testCreateSchemaExport() { Configuration configuration = new Configuration(); configuration.setProperty("hibernate.dialect", "org.hibernate.dialect.H2Dialect"); SchemaExport schemaExport = new SchemaExport(configuration); ISchemaExport facade = facadeFactory.createSchemaExport(schemaExport); Assert.assertSame(schemaExport, ((IFacade)facade).getTarget()); } @Test public void testCreateGenericExporter() { GenericExporter genericExporter = new GenericExporter(); IGenericExporter facade = facadeFactory.createGenericExporter(genericExporter); Assert.assertSame(genericExporter, ((IFacade)facade).getTarget()); } @Test public void testCreateHbm2DDLExporter() { Hbm2DDLExporter hbm2ddlExporter = new Hbm2DDLExporter(); IHbm2DDLExporter facade = facadeFactory.createHbm2DDLExporter(hbm2ddlExporter); Assert.assertSame(hbm2ddlExporter, ((IFacade)facade).getTarget()); } @Test public void testCreateQueryExporter() { QueryExporter queryExporter = new QueryExporter(); IQueryExporter facade = facadeFactory.createQueryExporter(queryExporter); Assert.assertSame(queryExporter, ((IFacade)facade).getTarget()); } @Test public void testCreateTableFilter() { TableFilter tableFilter = new TableFilter(); ITableFilter facade = facadeFactory.createTableFilter(tableFilter); Assert.assertSame(tableFilter, ((IFacade)facade).getTarget()); } @Test public void testCreateExporter() { Exporter exporter = (Exporter)Proxy.newProxyInstance( facadeFactory.getClassLoader(), new Class[] { Exporter.class }, new TestInvocationHandler()); IExporter facade = facadeFactory.createExporter(exporter); Assert.assertSame(exporter, ((IFacade)facade).getTarget()); } @Test public void testCreateMappings() { Mappings mappings = (Mappings)Proxy.newProxyInstance( facadeFactory.getClassLoader(), new Class[] { Mappings.class }, new TestInvocationHandler()); IMappings facade = facadeFactory.createMappings(mappings); Assert.assertSame(mappings, ((IFacade)facade).getTarget()); } @Test public void testCreateClassMetadata() { ClassMetadata classMetadata = (ClassMetadata)Proxy.newProxyInstance( facadeFactory.getClassLoader(), new Class[] { ClassMetadata.class }, new TestInvocationHandler()); IClassMetadata facade = facadeFactory.createClassMetadata(classMetadata); Assert.assertSame(classMetadata, ((IFacade)facade).getTarget()); } @Test public void testCreateCollectionMetadata() { CollectionMetadata collectionMetadata = (CollectionMetadata)Proxy.newProxyInstance( facadeFactory.getClassLoader(), new Class[] { CollectionMetadata.class }, new TestInvocationHandler()); ICollectionMetadata facade = facadeFactory.createCollectionMetadata(collectionMetadata); Assert.assertSame(collectionMetadata, ((IFacade)facade).getTarget()); } @Test public void testCreateColumn() { Column column = new Column(); IColumn facade = facadeFactory.createColumn(column); Assert.assertSame(column, ((IFacade)facade).getTarget()); } @Test public void testCreateConfiguration() { Configuration configuration = new Configuration(); IConfiguration facade = facadeFactory.createConfiguration(configuration); Assert.assertSame(configuration, ((IFacade)facade).getTarget()); } @Test public void testCreateCriteria() { Criteria criteria = (Criteria)Proxy.newProxyInstance( facadeFactory.getClassLoader(), new Class[] { Criteria.class }, new TestInvocationHandler()); ICriteria facade = facadeFactory.createCriteria(criteria); Assert.assertSame(criteria, ((IFacade)facade).getTarget()); } @Test public void testCreateDatabaseCollector() { DatabaseCollector databaseCollector = (DatabaseCollector)Proxy.newProxyInstance( facadeFactory.getClassLoader(), new Class[] { DatabaseCollector.class }, new TestInvocationHandler()); IDatabaseCollector facade = facadeFactory.createDatabaseCollector(databaseCollector); Assert.assertSame(databaseCollector, ((IFacade)facade).getTarget()); } @Test public void testCreateEntityMetamodel() { Configuration configuration = new Configuration(); configuration.setProperty("hibernate.dialect", "org.hibernate.dialect.H2Dialect"); SessionFactoryImplementor sfi = new SessionFactoryImpl(configuration, null, configuration.buildSettings(), null, null); RootClass rc = new RootClass(); SimpleValue sv = new SimpleValue(); sv.setNullValue("null"); sv.setTypeName(Integer.class.getName()); rc.setIdentifier(sv); EntityMetamodel entityMetamodel = new EntityMetamodel(rc, sfi); IEntityMetamodel facade = facadeFactory.createEntityMetamodel(entityMetamodel); Assert.assertSame(entityMetamodel, ((IFacade)facade).getTarget()); } @Test public void testCreateEnvironment() { Assert.assertNotNull(facadeFactory.createEnvironment()); } @Test public void testCreateForeignKey() { ForeignKey foreignKey = new ForeignKey(); IForeignKey facade = facadeFactory.createForeignKey(foreignKey); Assert.assertSame(foreignKey, ((IFacade)facade).getTarget()); } @Test public void testCreateHibernateMappingExporter() { HibernateMappingExporter hibernateMappingExporter = new HibernateMappingExporter(); IHibernateMappingExporter facade = facadeFactory.createHibernateMappingExporter(hibernateMappingExporter); Assert.assertSame(hibernateMappingExporter, ((IFacade)facade).getTarget()); } @Test public void testCreateHQLCodeAssist() { HQLCodeAssist hqlCodeAssist = new HQLCodeAssist(null); IHQLCodeAssist facade = facadeFactory.createHQLCodeAssist(hqlCodeAssist); Assert.assertSame(hqlCodeAssist, ((IFacade)facade).getTarget()); } @Test public void testCreateHQLCompletionProposal() { HQLCompletionProposal hqlCompletionProposal = new HQLCompletionProposal(0, 0); IHQLCompletionProposal facade = facadeFactory.createHQLCompletionProposal(hqlCompletionProposal); Assert.assertSame(hqlCompletionProposal, ((IFacade)facade).getTarget()); } @Test public void testCreateHQLQueryPlan() { Configuration configuration = new Configuration(); configuration.setProperty("hibernate.dialect", "org.hibernate.dialect.H2Dialect"); Mappings mappings = configuration.createMappings(); Table t = new Table("FOO"); Column c = new Column("foo"); t.addColumn(c); PrimaryKey key = new PrimaryKey(); key.addColumn(c); t.setPrimaryKey(key); SimpleValue sv = new SimpleValue(); sv.setNullValue("null"); sv.setTypeName(Integer.class.getName()); sv.setTable(t); sv.addColumn(c); RootClass rc = new RootClass(); rc.setEntityName("foo"); rc.setIdentifier(sv); rc.setTable(t); mappings.addClass(rc); SessionFactoryImplementor sfi = new SessionFactoryImpl(configuration, null, configuration.buildSettings(), null, null); HQLQueryPlan hqlQueryPlan = new HQLQueryPlan("from foo", false, Collections.emptyMap(), sfi); IHQLQueryPlan facade = facadeFactory.createHQLQueryPlan(hqlQueryPlan); Assert.assertSame(hqlQueryPlan, ((IFacade)facade).getTarget()); } @Test public void testCreateJDBCReader() { JDBCReader jdbcReader = new JDBCReader(null, null, null, null, null, new DefaultReverseEngineeringStrategy()); IJDBCReader facade = facadeFactory.createJDBCReader(jdbcReader); Assert.assertSame(jdbcReader, ((IFacade)facade).getTarget()); } @Test public void testCreateJoin() { Join join = new Join(); IJoin facade = facadeFactory.createJoin(join); Assert.assertSame(join, ((IFacade)facade).getTarget()); } @Test public void testCreatePersistentClass() { PersistentClass persistentClass = new RootClass(); IPersistentClass facade = facadeFactory.createPersistentClass(persistentClass); Assert.assertSame(persistentClass, ((IFacade)facade).getTarget()); } @Test public void testCreatePOJOClass() { POJOClass pojoClass = (POJOClass)Proxy.newProxyInstance( facadeFactory.getClassLoader(), new Class[] { POJOClass.class }, new TestInvocationHandler()); IPOJOClass facade = facadeFactory.createPOJOClass(pojoClass); Assert.assertSame(pojoClass, ((IFacade)facade).getTarget()); } @Test public void testCreatePrimaryKey() { PrimaryKey primaryKey = new PrimaryKey(); IPrimaryKey facade = facadeFactory.createPrimaryKey(primaryKey); Assert.assertSame(primaryKey, ((IFacade)facade).getTarget()); } @Test public void testCreateProperty() { Property property = new Property(); IProperty facade = facadeFactory.createProperty(property); Assert.assertSame(property, ((IFacade)facade).getTarget()); } @Test public void testCreateQuery() { Query query = (Query)Proxy.newProxyInstance( facadeFactory.getClassLoader(), new Class[] { Query.class }, new TestInvocationHandler()); IQuery facade = facadeFactory.createQuery(query); Assert.assertSame(query, ((IFacade)facade).getTarget()); } @Test public void testCreateQueryTranslator() { QueryTranslator queryTranslator = (QueryTranslator)Proxy.newProxyInstance( facadeFactory.getClassLoader(), new Class[] { QueryTranslator.class }, new TestInvocationHandler()); IQueryTranslator facade = facadeFactory.createQueryTranslator(queryTranslator); Assert.assertSame(queryTranslator, ((IFacade)facade).getTarget()); } @Test public void testCreateSessionFactory() { SessionFactory sessionFactory = (SessionFactory)Proxy.newProxyInstance( facadeFactory.getClassLoader(), new Class[] { SessionFactory.class }, new TestInvocationHandler()); ISessionFactory facade = facadeFactory.createSessionFactory(sessionFactory); Assert.assertSame(sessionFactory, ((IFacade)facade).getTarget()); } @Test public void testCreateSession() { Session session = (Session)Proxy.newProxyInstance( facadeFactory.getClassLoader(), new Class[] { Session.class }, new TestInvocationHandler()); ISession facade = facadeFactory.createSession(session); Assert.assertSame(session, ((IFacade)facade).getTarget()); } @Test public void testCreateSpecialRootClass() { Property property = new Property(); property.setValue(new SimpleValue()); IProperty propertyFacade = new AbstractPropertyFacade(facadeFactory, property) {}; IPersistentClass specialRootClass = facadeFactory.createSpecialRootClass(propertyFacade); Assert.assertSame(property, ((IFacade)specialRootClass.getProperty()).getTarget()); } @Test public void testCreateTable() { Table table = new Table(); ITable facade = facadeFactory.createTable(table); Assert.assertSame(table, ((IFacade)facade).getTarget()); } @Test public void testCreateTypeFactory() { ITypeFactory facade = facadeFactory.createTypeFactory(); Assert.assertSame(TypeFactoryFacadeImpl.class, facade.getClass()); Assert.assertNull(((IFacade)facade).getTarget()); } @Test public void testCreateType() { Type type = (Type)Proxy.newProxyInstance( facadeFactory.getClassLoader(), new Class[] { Type.class }, new TestInvocationHandler()); IType facade = facadeFactory.createType(type); Assert.assertSame(type, ((IFacade)facade).getTarget()); } @Test public void testCreateValue() { Value value = (Value)Proxy.newProxyInstance( facadeFactory.getClassLoader(), new Class[] { Value.class }, new TestInvocationHandler()); IValue facade = facadeFactory.createValue(value); Assert.assertSame(value, ((IFacade)facade).getTarget()); } private class TestInvocationHandler implements InvocationHandler { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { return null; } } }