/*
* 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.datatools.connectivity.sql;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.MessageFormat;
import java.util.List;
import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
import org.eclipse.datatools.connectivity.sqm.loader.IConnectionFilterProvider;
import org.eclipse.datatools.connectivity.sqm.loader.JDBCBaseLoader;
import org.eclipse.datatools.connectivity.sqm.loader.Messages;
import org.eclipse.datatools.modelbase.sql.schema.Schema;
import org.teiid.datatools.models.teiidsqlmodel.Document;
/**
* @since 8.0
*/
public class TeiidDocumentLoader extends JDBCBaseLoader {
private static final String DOCUMENT_NAME = "TABLE_NAME"; //$NON-NLS-1$
public TeiidDocumentLoader(ICatalogObject catalogObject) {
super(catalogObject, null);
}
public TeiidDocumentLoader(ICatalogObject catalogObject,
IConnectionFilterProvider connectionFilterProvider) {
super(catalogObject, connectionFilterProvider);
}
@SuppressWarnings({ "unchecked" })
public void loadDocuments(List container, List existingDocuments) throws SQLException {
ResultSet rs = null;
PreparedStatement stmt = null;
try {
rs = createResultSet();
String docName = null;
while (rs.next()) {
docName = rs.getString(DOCUMENT_NAME).trim();
Document doc = (Document) getAndRemoveSQLObject(
existingDocuments, docName);
if (doc == null) {
doc = processRow(rs);
if (doc != null) {
container.add(doc);
}
} else {
container.add(doc);
if (doc instanceof ICatalogObject) {
((ICatalogObject) doc).refresh();
}
}
}
} finally {
close(rs);
close(stmt);
}
}
public void clearDocuments(List documents) {
documents.clear();
}
protected ResultSet createResultSet()
throws SQLException {
try {
Schema schema = getSchema();
return getCatalogObject().getConnection().getMetaData().getTables(
schema.getCatalog().getName(), schema.getName(),
getJDBCFilterPattern(), null);
}
catch (RuntimeException e) {
SQLException error = new SQLException(MessageFormat.format(
Messages.Error_Unsupported_DatabaseMetaData_Method,
new Object[] { "java.sql.DatabaseMetaData.getTables()"})); //$NON-NLS-1$
error.initCause(e);
throw error;
}
}
protected Document processRow(ResultSet rs) throws SQLException {
Document document = createDocument();
initialize(document, rs);
return document;
}
protected void initialize(Document document, ResultSet rs)
throws SQLException {
String triggerName = rs.getString(DOCUMENT_NAME).trim();
document.setName(triggerName);
}
protected Document createDocument() {
return new TeiidDocument();
}
public static void close(Statement stmt) {
try {
if (stmt != null) {
stmt.close();
}
} catch (SQLException e) {
// ignored
}
}
public static void close(ResultSet rs) {
try {
if (rs != null) {
rs.close();
}
} catch (SQLException e) {
// ignored
}
}
/**
* Utility method.
*
* @return returns the catalog object being operated upon as a Schema (i.e.
* (Schema) getCatalogObject()).
*/
protected Schema getSchema() {
return (Schema) getCatalogObject();
}
}