Package org.hibernate.tool.hbm2x

Source Code of org.hibernate.tool.hbm2x.CachedMetaDataTest$MockedMetaDataDialect

/*
* Created on 2004-12-01
*
*/
package org.hibernate.tool.hbm2x;

import java.util.Iterator;

import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.JDBCMetaDataConfiguration;
import org.hibernate.cfg.JDBCReaderFactory;
import org.hibernate.cfg.Settings;
import org.hibernate.cfg.reveng.DatabaseCollector;
import org.hibernate.cfg.reveng.DefaultDatabaseCollector;
import org.hibernate.cfg.reveng.DefaultReverseEngineeringStrategy;
import org.hibernate.cfg.reveng.JDBCReader;
import org.hibernate.cfg.reveng.ReverseEngineeringRuntimeInfo;
import org.hibernate.cfg.reveng.dialect.CachedMetaDataDialect;
import org.hibernate.cfg.reveng.dialect.MetaDataDialect;
import org.hibernate.engine.jdbc.spi.JdbcServices;
import org.hibernate.mapping.Table;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import org.hibernate.tool.JDBCMetaDataBinderTestCase;



/**
* @author max
*
*/
public class CachedMetaDataTest extends JDBCMetaDataBinderTestCase {

  protected void configure(JDBCMetaDataConfiguration configuration) {
    super.configure( configuration );
  }
 
  public class MockedMetaDataDialect implements MetaDataDialect {

    MetaDataDialect delegate;
    private boolean failOnDelegateAccess;

    public MockedMetaDataDialect(MetaDataDialect realMetaData) {
      delegate = realMetaData;
    }

    public void close() {
      delegate.close();
    }

    public void close(Iterator iterator) {
      delegate.close( iterator );
    }

    public void configure(ReverseEngineeringRuntimeInfo info) {
      delegate.configure(info);     
    }
   
    public Iterator getColumns(String catalog, String schema, String table, String column) {
      if(failOnDelegateAccess) {
        throw new IllegalStateException("delegate not accessible");
      } else {
        return delegate.getColumns( catalog, schema, table, column );
      }
    }

    public Iterator getExportedKeys(String catalog, String schema, String table) {
      if(failOnDelegateAccess) {
        throw new IllegalStateException("delegate not accessible");
      } else {
        return delegate.getExportedKeys( catalog, schema, table );
      }
    }

    public Iterator getIndexInfo(String catalog, String schema, String table) {
      if(failOnDelegateAccess) {
        throw new IllegalStateException("delegate not accessible");
      } else {
        return delegate.getIndexInfo( catalog, schema, table );
      }
    }

    public Iterator getPrimaryKeys(String catalog, String schema, String name) {
      if(failOnDelegateAccess) {
        throw new IllegalStateException("delegate not accessible");
      } else {
        return delegate.getPrimaryKeys( catalog, schema, name );
      }
    }

    public Iterator getTables(String catalog, String schema, String table) {
      if(failOnDelegateAccess) {
        throw new IllegalStateException("delegate not accessible");
      } else {
        return delegate.getTables( catalog, schema, table );
      }
    }

    public boolean needQuote(String name) {
      return delegate.needQuote( name );
    }

    public void setDelegate(Object object) {
      this.delegate = null;     
    }

    public void setFailOnDelegateAccess(boolean b) {
      failOnDelegateAccess = b;     
    }

    public Iterator getSuggestedPrimaryKeyStrategyName(String catalog, String schema, String name) {
      if(failOnDelegateAccess) {
        throw new IllegalStateException("delegate not accessible");
      } else {
        return delegate.getSuggestedPrimaryKeyStrategyName(catalog, schema, name);
      }
    }
   
  }
 
  public void testCachedDialect() {
   
    StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder();
    ServiceRegistry serviceRegistry = builder.build();
    Settings buildSettings = cfg.buildSettings(serviceRegistry);
       
    MetaDataDialect realMetaData = JDBCReaderFactory.newMetaDataDialect( serviceRegistry.getService(JdbcServices.class).getDialect(), cfg.getProperties() );
   
    MockedMetaDataDialect mock = new MockedMetaDataDialect(realMetaData);
    CachedMetaDataDialect dialect = new CachedMetaDataDialect(mock);
   
    JDBCReader reader = JDBCReaderFactory.newJDBCReader( buildSettings, new DefaultReverseEngineeringStrategy(), dialect, serviceRegistry );
   
    DatabaseCollector dc = new DefaultDatabaseCollector(reader.getMetaDataDialect());
    reader.readDatabaseSchema( dc, null, null );

    validate( dc );   
   
    mock.setFailOnDelegateAccess(true);
   
    reader = JDBCReaderFactory.newJDBCReader( buildSettings, new DefaultReverseEngineeringStrategy(), dialect, serviceRegistry );
   
    dc = new DefaultDatabaseCollector(reader.getMetaDataDialect());
    reader.readDatabaseSchema( dc, null, null );

    validate(dc);
   
   
   
   
  }

  private void validate(DatabaseCollector dc) {
    Iterator iterator = dc.iterateTables();
    Table firstChild = (Table) iterator.next();
    assertTrue("CHILD".equals(firstChild.getName()) ||
        "MASTER".equals(firstChild.getName()));
    assertTrue(iterator.hasNext());
   
    iterator = dc.iterateTables();
    assertNotNull(iterator.next());
    assertNotNull(iterator.next());
    assertFalse(iterator.hasNext());
   
   
    assertHasNext("should have recorded one foreignkey to child table", 1, firstChild.getForeignKeyIterator() );
  }

  protected String[] getCreateSQL() {
   
    return new String[] {
        "create table master ( id char not null, name varchar(20), primary key (id) )",
        "create table child  ( childid char not null, masterref char, primary key (childid), foreign key (masterref) references master(id) )",       
    };
  }

  protected String[] getDropSQL() {
   
    return new String[]  {
        "drop table child",
        "drop table master",       
    };
 
 
}
TOP

Related Classes of org.hibernate.tool.hbm2x.CachedMetaDataTest$MockedMetaDataDialect

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.