001    package com.sptci.rwt;
002    
003    import java.sql.Connection;
004    import java.sql.DatabaseMetaData;
005    import java.sql.SQLException;
006    
007    import java.util.ArrayList;
008    import java.util.Collection;
009    import java.util.logging.Level;
010    
011    import com.sptci.util.CloseJDBCResources;
012    
013    /**
014     * An analyser for analysing sequence type objects in the database.
015     *
016     * <p>&copy; Copyright 2007 <a href='http://sptci.com/' target='_new'>Sans Pareil Technologies, Inc.</a></p>
017     * @author Rakesh Vidyadharan 2007-09-25
018     * @version $Id: SequenceAnalyser.java 4123 2008-05-25 21:49:01Z rakesh $
019     */
020    public class SequenceAnalyser extends Analyser
021    {
022      /**
023       * Create a new instance of the class using the specified connection
024       * manager.
025       *
026       * @param manager The manager for obtaining database connections.
027       */
028      public SequenceAnalyser( final ConnectionManager manager )
029      {
030        super( manager );
031      }
032    
033      /**
034       * Returns a collection of {@link SequenceMetaData} objects that contain
035       * all information pertaining to the sequences in the specified schema.
036       *
037       * @see Analyser#analyse
038       * @see AbstractSequenceAnalyser#analyse
039       * @param parameters Must contain the <code>catalog/schema</code> from
040       *   which sequence metadata are to be retrieved.
041       */
042      @Override
043      public Collection<SequenceMetaData> analyse( final MetaData... parameters )
044        throws SQLException
045      {
046        Connection connection = null;
047        AbstractSequenceAnalyser analyser = new StandardSequenceAnalyser( manager );
048    
049        try
050        {
051          connection = manager.open();
052          final DatabaseMetaData dmd = connection.getMetaData();
053          final String name = dmd.getDatabaseProductName().toLowerCase();
054    
055          if ( name.contains( "oracle" ) )
056          {
057            analyser = new OracleSequenceAnalyser( manager );
058          }
059        }
060        finally
061        {
062          CloseJDBCResources.close( connection );
063        }
064    
065        return analyser.analyse( parameters );
066      }
067    }