DataAccess.java

/*
 * DataAccess.java
 *
 * © <your company here>, 2003-2005
 * Confidential and proprietary.
 */

package myapp;


import ianywhere.ultralitej.*;
import java.util.*;
import net.rim.device.api.ui.*;
import net.rim.device.api.ui.component.*;
import net.rim.device.api.ui.container.*;

/**
 * 
 */
class DataAccess {
    DataAccess() {    }
    
    public static synchronized DataAccess getDataAccess(boolean reset)
       throws Exception 
    {   
    try{
        if( _da == null ){
            _da = new DataAccess();
            ConfigObjectStore _config = 
               DatabaseManager.createConfigurationObjectStore("HelloDB");
            if(reset)
            {
                _conn = DatabaseManager.createDatabase( _config );
            } 
            else
            {
                try{
                    _conn = DatabaseManager.connect( _config );
                }
                catch( ULjException uex1) {
                    if( uex1.getErrorCode() !=
                        ULjException.SQLE_ULTRALITE_DATABASE_NOT_FOUND ) {
                        System.out.println( "Exception: " + uex1.toString() );
                        Dialog.alert( "Exception: " + uex1.toString() +
                           ". Recreating database..." );
                    }
                    _conn = DatabaseManager.createDatabase( _config );
                }
            }
            _da.createDatabaseSchema();
        }
        return _da;        
    } catch ( ULjException ue)
    {
        System.out.println("Exception in getDataAccess" + ue.toString() );
        return null;
    }
    }
    
    /**
     * 
     * Create the table in the database. 
     * If the table already exists, a harmless exception is thrown
     */
    private void createDatabaseSchema()
    {
        try{
            _conn.schemaCreateBegin();
            ColumnSchema column_schema;
            TableSchema table_schema = _conn.createTable("Names");
            column_schema = table_schema.createColumn( "ID", Domain.UUID );
            column_schema.setDefault( ColumnSchema.COLUMN_DEFAULT_UNIQUE_ID);
            table_schema.createColumn( "Name", Domain.VARCHAR, 254 );
            IndexSchema index_schema = 
               table_schema.createPrimaryIndex("prime_keys");
            index_schema.addColumn("ID", IndexSchema.ASCENDING);           
            _conn.schemaCreateComplete();
        }
        catch( ULjException uex1){
            System.out.println( "ULjException: " + uex1.toString() );
        }
        catch( Exception ex1){
            System.out.println( "Exception: " + ex1.toString() );
        }
    }
    
    public void insertName( String name ){
        try{
            Value nameID = _conn.createUUIDValue();
            String sql = "INSERT INTO Names( ID, Name ) VALUES ( ?, ? )";           
            PreparedStatement ps = _conn.prepareStatement(sql);
            ps.set(1, nameID );
            ps.set(2, name );
            ps.execute();
            _conn.commit();
        }
        catch( ULjException uex ){
            System.out.println( "ULjException: " + uex.toString() );
        }
        catch( Exception ex ){
            System.out.println( "Exception: " + ex.toString() );
        }  
    }      

    public Vector getNameVector(){
        Vector nameVector = new Vector();
        try{
            String sql = "SELECT ID, Name FROM Names";
            PreparedStatement ps = _conn.prepareStatement(sql);
            ResultSet rs = ps.executeQuery();
            while ( rs.next() ){
                String nameID = rs.getString(1);
                String name = rs.getString(2);
                NameRow nr = new NameRow( nameID, name);
                nameVector.addElement(nr);
            }
        }
        catch( ULjException uex ){
            System.out.println( "ULjException: " + uex.toString() );
        }
        catch( Exception ex ){
            System.out.println( "Exception: " + ex.toString() );
        }
        finally{
            return nameVector;
        }
    }
    
    public boolean sync() {
        try {
            if( _syncParms == null ){
                String host = "ultralitej.sybase.com";
                _syncParms = _conn.createSyncParms( "mluser",
                             "HelloBlackBerrySyncModel" );
                _syncParms.setPassword("mlpassword");
                _streamParms = _syncParms.getStreamParms();
                _streamParms.setPort( 80 ); // use your own
                _streamParms.setHost( host ); // use your own
                if(host.equals("ultralitej.sybase.com"))
                {
                    _streamParms.setURLSuffix(
                       "scripts/iaredirect.dll/ml/HelloBlackBerry/");
                }

            }
            System.out.println( "Synchronizing" );
            _conn.synchronize( _syncParms ); 
            return true;
        }
        catch( ULjException uex){
            System.out.println(uex.toString());
            return false;
        }
    }
    
    public boolean complete() {
        try{
            _conn.checkpoint();
            _conn.release();
            _conn = null;
            _da = null;
            _config = null;
            return true;
        }
        catch(Exception e){
            return false;
        }
    }

    private static ConfigObjectStore _config;
    private static Connection _conn;
    private static DataAccess _da;
    private static SyncParms _syncParms;
    private static StreamHTTPParms _streamParms;
}