/* * 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; import java.io.IOException; import java.sql.Connection; import java.sql.SQLException; import java.util.List; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.datatools.connectivity.IConnectionProfile; /** * JdbcManager * * @since 8.0 */ public interface JdbcManager { /** * Return the logical name assigned to this manager. * @return the name of the manager. */ public String getName(); /** * Return whether there are unsaved changes in the {@link #getJdbcDrivers() drivers} or * {@link #getJdbcSources() sources}. * @return true if there are changes and {@link #saveChanges(IProgressMonitor)} should be called * to persist the changes, or false if there are no changes. */ public boolean hasChanges(); /** * Save any changes that have been made. * @param monitor */ public void saveChanges( IProgressMonitor monitor ) throws IOException; /** * Reload the saved {@link #getJdbcDrivers() drivers} and * {@link #getJdbcSources() sources}, losing any changes that have been made so far. All existing * references will be invalid and will no longer reference the persistent objects. * @param monitor * @throws JdbcException if there is an error reloading the {@link #getJdbcDrivers() drivers} and * {@link #getJdbcSources() sources} */ public void reload( IProgressMonitor monitor ) throws JdbcException; /** * Return the factory that can be used to create new objects for this manager. The created * {@link JdbcDriver} objects must be added to {@link #getJdbcDrivers() this manager}. * @return the factory; never null */ public JdbcFactory getFactory(); /** * Return the {@link JdbcDriver} instances that are known to and managed by this manager. * This list is directly modifiable. * @return the list of {@link JdbcDriver} instances; never null */ public List getJdbcDrivers(); /** * Return the {@link JdbcSource} instances that are known to and managed by this manager. * Note that the manager does <i>not</i> know about {@link JdbcSource} objects that are stored within * {@link org.teiid.designer.core.workspace.ModelResource ModelResources}. * This list is directly modifiable. * @return the list of {@link JdbcSource} instances; never null */ public List getJdbcSources(); /** * Find the {@link JdbcDriver} instances that have the supplied name. * @param JdbcDriver the name of the driver * @return all {@link JdbcDriver} instances that have a {@link JdbcDriver#getName() name} that matches * the supplied name. */ public JdbcDriver[] findDrivers( final String driverName ); /** * Find the {@link JdbcSource} instances that have the supplied name. * @param sourceName the name of the source * @return all {@link JdbcSource} instances that have a {@link JdbcSource#getName() name} that matches * the supplied name. */ public JdbcSource[] findSources( final String sourceName ); /** * Return whether the supplied driver is considered valid. * <p> * A {@link JdbcSource} is considered valid if all of the following conditions are true: * <ul> * <li>There is a {@link JdbcSource#getName() name} that is not zero-length.</li> * <li>There is a valid {@link JdbcSource#getDriverClass() driver class} specified (this does not * check the classpath)</li> * </ul> * </p> * @param jdbcSource the JdbcSource * @return a status describing if valid (e.g., {@link IStatus#isOK()} returns true) or the reason * why invalid. */ public IStatus isValid( JdbcSource jdbcSource ); /** * Return whether the supplied driver is considered valid. * <p> * A {@link JdbcDriver} is considered valid if all of the following conditions are true: * <ul> * <li>There is a {@link JdbcDriver#getName() name} that is not zero-length.</li> * <li>There is at least one {@link JdbcDriver#getAvailableDriverClassNames() driver class}.</li> * <li>There is a {@link JdbcDriver#getPreferredDriverClassNames() preferred driver class}.</li> * <li>There {@link JdbcDriver#getPreferredDriverClassNames() preferred driver class} is one of the * {@link JdbcDriver#getAvailableDriverClassNames() available driver classes}</li> * </ul> * </p> * <p> * Additionally, a warning is included if any of the following are true: * <ul> * <li>There are no {@link JdbcDriver#getJarFileUris() JAR file URIs}.</li> * </ul> * </p> * @param driver the driver * @return a status describing if valid (e.g., {@link IStatus#isOK()} returns true) or the reason * why invalid. */ public IStatus isValid( JdbcDriver driver ); /** * Create a connection to the data source described by the supplied {@link JdbcSource}. * @param jdbcSource the object that describes the data source; may not be null * {@link #findBestDriver(JdbcSource) best available driver} is found and used * @param password optional password that would be used to create a connection; null only if no password * should be supplied * @param monitor the monitor that is used to cancel the operation; may be null * @return a connection to the data source described by <code>jdbcSource</code> * @throws SQLException if there is an error * @throws JdbcException if the source is not valid * @throws InterruptedException if the monitor cancelled the operation */ public Connection createConnection( JdbcSource jdbcSource, String password, IProgressMonitor monitor ) throws JdbcException, SQLException; /** * Create a connection to the data source described by the supplied {@link JdbcSource}. * @param jdbcSource the object that describes the data source; may not be null * {@link #findBestDriver(JdbcSource) best available driver} is found and used * @param password optional password that would be used to create a connection; null only if no password * should be supplied * @return a connection to the data source described by <code>jdbcSource</code> * @throws SQLException if there is an error * @throws JdbcException if the source is not valid * @throws InterruptedException if the monitor cancelled the operation */ public Connection createConnection(JdbcSource src, String password) throws JdbcException, SQLException; public JdbcSource getJdbcSource(IConnectionProfile profile); /** * Find a connection profile with given name. * * @param profileName * @return a conneciton profile */ public IConnectionProfile getConnectionProfile(String profileName); }