/* * JBoss, Home of Professional Open Source. * * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing. * * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors. */ package org.teiid.designer.jdbc.metadata.impl; import java.sql.Connection; import java.sql.DatabaseMetaData; import org.teiid.designer.jdbc.FakeConnection; import org.teiid.designer.jdbc.JdbcException; import org.teiid.designer.jdbc.metadata.Capabilities; import org.teiid.designer.jdbc.metadata.DatabaseInfo; import org.teiid.designer.jdbc.metadata.Includes; import org.teiid.designer.jdbc.metadata.JdbcNode; import org.teiid.designer.jdbc.metadata.impl.DatabaseInfoImpl; import org.teiid.designer.jdbc.metadata.impl.IncludesImpl; import org.teiid.designer.jdbc.metadata.impl.JdbcCatalogImpl; import org.teiid.designer.jdbc.metadata.impl.JdbcDatabaseImpl; import org.teiid.designer.jdbc.metadata.impl.JdbcNodeCache; import org.teiid.designer.jdbc.metadata.impl.JdbcNodeImpl; import org.teiid.designer.jdbc.metadata.impl.JdbcNodeSelections; import org.teiid.designer.jdbc.metadata.impl.JdbcProcedureImpl; import org.teiid.designer.jdbc.metadata.impl.JdbcProcedureTypeImpl; import org.teiid.designer.jdbc.metadata.impl.JdbcSchemaImpl; import org.teiid.designer.jdbc.metadata.impl.JdbcTableImpl; import org.teiid.designer.jdbc.metadata.impl.JdbcTableTypeImpl; import junit.framework.Assert; /** * FakeJdbcDatabase */ public class FakeJdbcDatabase extends JdbcDatabaseImpl { /** * Utility method to construct a simple tree useful for testing * * @param dbNode * @param includeCatalog * @param includeSchema */ public static void initialize( final FakeJdbcDatabase dbNode, final boolean includeCatalog, final boolean includeSchema ) { try { final FakeCapabilities cap = (FakeCapabilities)dbNode.getCapabilities(); cap.setSupportsCatalogs(includeCatalog); cap.setSupportsSchemas(includeSchema); final JdbcNodeCache cache = dbNode.getJdbcNodeCache(); JdbcNodeImpl catOrSchemaOrDbNode = dbNode; if (includeCatalog) { JdbcCatalogImpl catalog = new JdbcCatalogImpl(catOrSchemaOrDbNode, "PartsSupplier"); //$NON-NLS-1$ cache.put(catalog); catOrSchemaOrDbNode.addChild(catalog); catOrSchemaOrDbNode = catalog; catalog.getChildren(); // computes children } if (includeSchema) { JdbcSchemaImpl schema = new JdbcSchemaImpl(catOrSchemaOrDbNode, "PartsSupplier"); //$NON-NLS-1$ cache.put(schema); catOrSchemaOrDbNode.addChild(schema); catOrSchemaOrDbNode = schema; schema.getChildren(); // computes children } if (!includeSchema && !includeCatalog) { // Then have to create these manually (otherwise they are created by the schema & catalog ... // Create the table types node for "Tables" ... final JdbcTableTypeImpl tablesNode = new JdbcTableTypeImpl(catOrSchemaOrDbNode, "Table"); //$NON-NLS-1$ catOrSchemaOrDbNode.addChild(tablesNode); cache.put(tablesNode); // Create the table types node for "Views" ... final JdbcTableTypeImpl viewsNode = new JdbcTableTypeImpl(catOrSchemaOrDbNode, "View"); //$NON-NLS-1$ catOrSchemaOrDbNode.addChild(viewsNode); cache.put(viewsNode); } // Find the tables and views object ... final JdbcTableTypeImpl tablesNode = (JdbcTableTypeImpl)cache.get(catOrSchemaOrDbNode.getPath().append("Table")); //$NON-NLS-1$ final JdbcTableTypeImpl viewsNode = (JdbcTableTypeImpl)cache.get(catOrSchemaOrDbNode.getPath().append("View")); //$NON-NLS-1$ Assert.assertNotNull(tablesNode); Assert.assertNotNull(viewsNode); // Create the procedure types node ... final JdbcProcedureTypeImpl procsNode = new JdbcProcedureTypeImpl(catOrSchemaOrDbNode, "StoredProcedure"); //$NON-NLS-1$ catOrSchemaOrDbNode.addChild(procsNode); cache.put(procsNode); // Create the table objects ... final JdbcNode partsTable = new JdbcTableImpl(tablesNode, "PARTS"); //$NON-NLS-1$ final JdbcNode supplierTable = new JdbcTableImpl(tablesNode, "SUPPLIER"); //$NON-NLS-1$ final JdbcNode supplierPartsTable = new JdbcTableImpl(tablesNode, "SUPPLIER_PARTS"); //$NON-NLS-1$ tablesNode.addChild(partsTable); tablesNode.addChild(supplierTable); tablesNode.addChild(supplierPartsTable); cache.put(partsTable); cache.put(supplierTable); cache.put(supplierPartsTable); // Create the view objects final JdbcNode customerView = new JdbcTableImpl(viewsNode, "CUSTOMERS_VIEW"); //$NON-NLS-1$ final JdbcNode ordersView = new JdbcTableImpl(viewsNode, "ORDERS_VIEW"); //$NON-NLS-1$ viewsNode.addChild(customerView); viewsNode.addChild(ordersView); cache.put(customerView); cache.put(ordersView); // Create the procedure objects final JdbcNode proc1 = new JdbcProcedureImpl(procsNode, "CreateCustomerProcedure"); //$NON-NLS-1$ final JdbcNode proc2 = new JdbcProcedureImpl(procsNode, "ChangeCustomerProcedure"); //$NON-NLS-1$ final JdbcNode proc3 = new JdbcProcedureImpl(procsNode, "DeleteCustomerProcedure"); //$NON-NLS-1$ procsNode.addChild(proc1); procsNode.addChild(proc2); procsNode.addChild(proc3); cache.put(proc1); cache.put(proc2); cache.put(proc3); } catch (JdbcException e) { throw new RuntimeException(e); } } private final static Connection connection = new FakeConnection(); private final FakeCapabilities capabilities = new FakeCapabilities(); private final Includes includes = new IncludesImpl(this); private final DatabaseMetaData metadata = new FakeDatabaseMetaData(); private final DatabaseInfo dbInfo = new DatabaseInfoImpl(); /** * Construct an instance of FakeJdbcDatabase. * * @param name * @param parent */ public FakeJdbcDatabase( String name ) { super(connection, name); } /** * Construct an instance of FakeJdbcDatabase. * * @param name * @param parent */ public FakeJdbcDatabase( String name, JdbcNodeSelections selections ) { super(connection, name, selections); } /** * In general, the * * @param node * @throws JdbcException */ public void addChildNode( final JdbcNode node ) throws JdbcException { super.addChild(node); } /* (non-Javadoc) * @See org.teiid.designer.jdbc.metadata.JdbcDatabase#getConnection() */ @Override public Connection getConnection() { throw new UnsupportedOperationException(); } /* (non-Javadoc) * @See org.teiid.designer.jdbc.metadata.JdbcDatabase#getDatabaseMetaData() */ @Override public DatabaseMetaData getDatabaseMetaData() { return metadata; } /* (non-Javadoc) * @See org.teiid.designer.jdbc.metadata.JdbcDatabase#getCapabilities() */ @Override public Capabilities getCapabilities() { return capabilities; } /* (non-Javadoc) * @See org.teiid.designer.jdbc.metadata.JdbcDatabase#getDatabaseInfo() */ @Override public DatabaseInfo getDatabaseInfo() { return dbInfo; } /* (non-Javadoc) * @See org.teiid.designer.jdbc.metadata.JdbcDatabase#getIncludes() */ @Override public Includes getIncludes() { return includes; } /* (non-Javadoc) * @See org.teiid.designer.jdbc.metadata.impl.JdbcDatabaseImpl#computeChildren() */ @Override protected JdbcNode[] computeChildren() { return null; } /* (non-Javadoc) * @See org.teiid.designer.jdbc.metadata.impl.JdbcDatabaseImpl#toString() */ @Override public String toString() { return getName(); } }