/*
* 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.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IStatus;
import org.teiid.designer.jdbc.JdbcException;
import org.teiid.designer.jdbc.JdbcPlugin;
import org.teiid.designer.jdbc.metadata.JdbcDatabase;
import org.teiid.designer.jdbc.metadata.JdbcNode;
import org.teiid.designer.jdbc.metadata.JdbcTableType;
/**
* JdbcTableTypeImpl
*
* @since 8.0
*/
public class JdbcTableTypeImpl extends JdbcNodeImpl implements JdbcTableType {
static final String SQL_SERVER_DB_METADATA = "SQLServerDatabaseMetaData"; //$NON-NLS-1$
/**
* Construct an instance of JdbcTableTypeImpl.
*
*/
public JdbcTableTypeImpl( final JdbcNode parent, final String typeName ) {
super(TABLE_TYPE,typeName,parent);
}
/* (non-Javadoc)
* @See org.teiid.designer.jdbc.metadata.impl.JdbcNodeImpl#computeChildren()
*/
@Override
protected JdbcNode[] computeChildren() throws JdbcException {
// Create the children ...
final DatabaseMetaData metadata = getJdbcDatabase().getDatabaseMetaData();
final List children = new ArrayList();
final String schemaName = getSchemaName(this);
final String catalogName = getCatalogName(this);
boolean isSqlServer = metadata.getClass().getName().endsWith(SQL_SERVER_DB_METADATA);
// Get the tables for this type ...
ResultSet resultSet = null;
try {
final String[] tableTypes = new String[]{getName()};
resultSet = metadata.getTables(catalogName,schemaName,WILDCARD_PATTERN,tableTypes);
while (resultSet != null && resultSet.next()) {
final String tableName = resultSet.getString(3);
final String remarks = resultSet.getString(5);
final JdbcTableImpl table = new JdbcTableImpl(this,tableName);
table.setRemarks(remarks);
children.add(table);
}
} catch (Throwable t) {
if (!isSqlServer) {
final Object[] params = new Object[] {metadata.getClass().getName(), getJdbcDatabase()};
final String msg = JdbcPlugin.Util.getString("JdbcTableTypeImpl.Unexpected_exception_while_calling_getTables()_and_processing_results", params); //$NON-NLS-1$
JdbcPlugin.Util.log(IStatus.WARNING, t, msg);
}
} finally {
if ( resultSet != null ) {
try {
resultSet.close();
} catch (SQLException e) {
JdbcPlugin.Util.log(e);
}
}
}
// Convert the list to an array and return ...
return (JdbcNode[])children.toArray(new JdbcNode[children.size()]);
}
/* (non-Javadoc)
* @See org.teiid.designer.jdbc.metadata.impl.JdbcNodeImpl#getTypeName()
*/
@Override
public String getTypeName() {
return JdbcPlugin.Util.getString("JdbcTableTypeImpl.TableTypeName"); //$NON-NLS-1$
}
/* (non-Javadoc)
* @See org.teiid.designer.jdbc.metadata.JdbcNode#getFullyQualifiedName()
*/
@Override
public String getFullyQualifiedName() {
return getParent().getFullyQualifiedName();
}
/* (non-Javadoc)
* @See org.teiid.designer.jdbc.metadata.JdbcNode#getPathInSource()
*/
@Override
public IPath getPathInSource() {
return null;
}
/* (non-Javadoc)
* @See org.teiid.designer.jdbc.metadata.JdbcNode#getPathInSource(boolean, boolean)
*/
@Override
public IPath getPathInSource( final boolean includeCatalog, final boolean includeSchema) {
return null;
}
/* (non-Javadoc)
* @See org.teiid.designer.jdbc.metadata.JdbcNode#getParentDatabaseObject(boolean, boolean)
*/
@Override
public JdbcNode getParentDatabaseObject(final boolean includeCatalog, final boolean includeSchema) {
return null;
}
/* (non-Javadoc)
* @See org.teiid.designer.jdbc.metadata.JdbcNode#isDatabaseObject()
*/
@Override
public boolean isDatabaseObject() {
return false;
}
/* (non-Javadoc)
* @See org.teiid.designer.jdbc.metadata.JdbcNode#getJdbcDatabase()
*/
@Override
public JdbcDatabase getJdbcDatabase() {
return getParent().getJdbcDatabase();
}
}