/*
* 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.JdbcProcedureType;
/**
* JdbcProcedureTypeImpl
*
* @since 8.0
*/
public class JdbcProcedureTypeImpl extends JdbcNodeImpl implements JdbcProcedureType {
static final String SQL_SERVER_DB_METADATA = "SQLServerDatabaseMetaData"; //$NON-NLS-1$
static final String ORACLE_DB_METADATA = "OracleDatabaseMetaData"; //$NON-NLS-1$
/**
* Construct an instance of JdbcProcedureTypeImpl.
*
*/
public JdbcProcedureTypeImpl( final JdbcNode parent, final String procTerm ) {
super(PROCEDURE_TYPE,procTerm,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);
boolean isOracle = metadata.getClass().getName().endsWith(ORACLE_DB_METADATA);
// Get the procedures ...
ResultSet resultSet = null;
try {
resultSet = metadata.getProcedures(catalogName,schemaName,WILDCARD_PATTERN);
while( resultSet.next() ) {
final String str1 = resultSet.getString(1);
final String str2 = resultSet.getString(2);
final String procName = resultSet.getString(3);
final String str4 = resultSet.getString(4);
final String str5 = resultSet.getString(5);
final String str6 = resultSet.getString(6);
final String remarks = resultSet.getString(7);
final short procType = resultSet.getShort(8);
final JdbcProcedureImpl proc = new JdbcProcedureImpl(this,procName);
proc.setProperties(new String[]{str1, str2, procName, str4, str5, str6, remarks});
proc.setIsOracle(isOracle);
proc.setRemarks(remarks);
proc.setProcedureType(procType);
children.add(proc);
}
} catch (Throwable t) {
if (!isSqlServer) {
final Object[] params = new Object[]{metadata.getClass().getName(),getJdbcDatabase()};
final String msg = JdbcPlugin.Util.getString("JdbcProcedureTypeImpl.Unexpected_exception_while_calling_getProcedures()_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("JdbcProcedureTypeImpl.ProcedureTypeName"); //$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();
}
}