J2ME Java

/**** Chapter 5 Sample code for RMS Package****/
import java.io.*;
import javax.microedition.midlet.*;
import javax.microedition.rms.*;
public class BirthdayDB extends MIDlet {
    static final String RSNAME = "birthdayDB";
  private RecordStore rs = null;
    public BirthdayDB() {
      try {
      openBirthdayDB(RSNAME);
      populateSampleRecords();
      //BEGIN: Test for basic funcitionality of a record store
      displayRecordStoreinfo();
      searchAndDisplayRecords(null, null); //Simple enumeration withouit any criteria
      deleteBirthday(2);
      updateBirthday(3, "Lisa", "03/07/99");
      searchAndDisplayRecords(null, null); //Simple enumeration withouit any criteria
      //END: Test for basic funcitionality of a record store
      //BEGIN: Test for record listener
      rs.addRecordListener((RecordListener) new BirthdayDBListener());
      addBirthday("Maya","09/08/96");
      deleteBirthday(3);
      updateBirthday(4, "NewLisa", "03/08/99");
      rs.removeRecordListener((RecordListener) new BirthdayDBListener());
      //END: Test for record listener
      //BEGIN: Complex test for record enumeration with record filter and record comparator
      NameFilter nameFilter = new NameFilter("John");
      NameComparator nameComparator = new NameComparator();
      searchAndDisplayRecords(nameFilter,nameComparator);
      //END: Complex test for record enumeration with record filter and record comparator
      closeBirthdayDB();
        }
        catch( Exception e ){
            System.out.print("Error in BirthdayDB.BirthdayDB-> ");
      System.out.println("Exception : " + e.getMessage());
        }
        notifyDestroyed();
    }
  /****
  This function will create/open database.
  ****/
  private void openBirthdayDB(String name) {
        // Just to avoid using wrong DB,
    // First clear out the old record store
        try {
            RecordStore.deleteRecordStore( name );
        }
        catch( Exception e ){
            // ignore any errors...
        }
    // attempt to create a new RecordStore database
    try {
          rs = RecordStore.openRecordStore( name, true );
        }
        catch( Exception e ){
      System.out.print("Error in BirthdayDB.openBirthdayDB -> ");
      System.out.println("Exception : " + e.getMessage());
        }
  }
  /****
  This function closes the DB if it is open.
  ****/
  private void closeBirthdayDB() {
    if (rs != null) {
      try {
          rs.closeRecordStore();
      } catch (Exception e) {
        System.out.print("Error in BirthdayDB.closeBirthdayDB -> ");
        System.out.println("Exception : " + e.getMessage());
      }
    }
  }
  /****
  This function will search for the records using criteria defined in
  Filter class and it will display records in the order specfied in
  Comparator class
  ****/
  public void searchAndDisplayRecords(NameFilter f, NameComparator c){
    try {
        RecordEnumeration rEnum = rs.enumerateRecords( f, c , false);
        System.out.println("Total Records in Enumeration: " + rEnum.numRecords());
        while (rEnum.hasNextElement()){
          byte [] bRec = rEnum.nextRecord();
          //unpack a multi-column record
          ByteArrayInputStream bais = new ByteArrayInputStream(bRec);
          DataInputStream dis = new DataInputStream(bais);
          String name = dis.readUTF();
          String bDay = dis.readUTF();
          System.out.println("Name: " + name + " BirthDay: "+ bDay);
        }
      }
      catch (Exception e) {
        System.out.print("Error in BirthdayDB.searchAndDisplayRecords -> ");
        System.out.println("Exception : " + e.getMessage());
      }
      return;
  }
  /****
  This function creates a byte stream for record and adds a record to database
  ****/
  public void addBirthday(String name, String bDay) {
    try{
      ByteArrayOutputStream baos = new ByteArrayOutputStream();
      DataOutputStream dos = new DataOutputStream(baos);
      dos.writeUTF(name);
      dos.writeUTF(bDay);
      byte [] bRec = baos.toByteArray();
      rs.addRecord(bRec,0,bRec.length);
      dos.close();
      baos.close();
    }
    catch (Exception e) {
      System.out.print("Error in BirthdayDB.addBirthdayDB -> ");
      System.out.println("Exception : " + e.getMessage());
    }
    return;
  }
  /****
  This function deleted a record with given recordId
  ****/
  public void deleteBirthday(int recordId) {
    try{
      rs.deleteRecord(recordId);
    }
    catch (Exception e) {
      System.out.print("Error in BirthdayDB.deleteBirthday -> ");
      System.out.println("Exception : " + e.getMessage());
    }
    return;
  }
  /****
  This function updates the record with new name and birthday at given recordId
  ****/
  public void updateBirthday(int recordId, String newName, String newBDay) {
    try{
      // convert new data into byte stream
      ByteArrayOutputStream baos = new ByteArrayOutputStream();
      DataOutputStream dos = new DataOutputStream(baos);
      dos.writeUTF(newName);
      dos.writeUTF(newBDay);
      byte [] bRec = baos.toByteArray();
      rs.setRecord(recordId, bRec,0,bRec.length);
      dos.close();
      baos.close();
    }
    catch (Exception e) {
      System.out.print("Error in BirthdayDB.updateBirthday -> ");
      System.out.println("Exception : " + e.getMessage());
    }
    return;
  }
  /****
  This function populates seed records
  ****/
  public void populateSampleRecords() {
    addBirthday("John", "01/04/1969");
    addBirthday("Joe", "05/05/1976");
    addBirthday("Keran", "09/12/1976");
    addBirthday("Marry", "04/22/1979");
    addBirthday("Paul", "06/26/1972");
    addBirthday("Robert", "08/30/1971");
    addBirthday("John", "01/04/1970");
  }
  /****
  This function displays information of a record store
  ****/
  public void displayRecordStoreinfo() {
    try {
      System.out.println("Name of the record store is " + rs.getName());
      System.out.println("Number of records in this record store are " + rs.getNumRecords());
      System.out.println("Size of record store is " + rs.getSize());
      System.out.println("Available size for the record store " + rs.getSizeAvailable());
      System.out.println("Version number of the record store is " + rs.getVersion());
      System.out.println("Last Modified Date is " + rs.getLastModified());
    }
    catch (Exception e) {
      System.out.print("Error in BirthdayDB.displayRecordStoreinfo -> ");
      System.out.println("Exception : " + e.getMessage());
    }
  }
  /****
  MIDlet lifecycle functions
  ****/
    public void destroyApp( boolean unconditional ) {
    if (rs != null)
      closeBirthdayDB();
    }
    public void startApp() {
    }
    public void pauseApp() {
    }
}
class NameFilter implements RecordFilter {
String name;
public NameFilter(String filterOnThisName) {
  name = filterOnThisName;
}
public boolean matches(byte [] candidateRecord) {
  try{
    ByteArrayInputStream bais = new ByteArrayInputStream(candidateRecord);
    DataInputStream dis = new DataInputStream(bais);
    String nameFromRec = dis.readUTF();
    dis.close();
    bais.close();
    if (name.compareTo(nameFromRec) == 0 )
      return true;
    }
  catch (Exception e) {
    System.out.print("Error in NameFilter.matches -> ");
    System.out.println("Exception : " + e.getMessage());
  }
  return false;
}
}
class NameComparator implements RecordComparator {
public int compare(byte [] rec1, byte [] rec2) {
  try{
    // read first record and extract name
    ByteArrayInputStream bais1 = new ByteArrayInputStream(rec1);
    DataInputStream dis1 = new DataInputStream(bais1);
    String name1 = dis1.readUTF();
    dis1.close();
    bais1.close();
    // read second record and extract name
    ByteArrayInputStream bais2 = new ByteArrayInputStream(rec2);
    DataInputStream dis2 = new DataInputStream(bais2);
    String name2 = dis2.readUTF();
    dis2.close();
    bais2.close();
    if (name1.compareTo(name2) < 0 )
      return PRECEDES;
    if (name1.compareTo(name2) > 0 )
      return FOLLOWS;
  }
  catch (Exception e) {
    System.out.print("Error in NameComparator.compare -> ");
    System.out.println("Exception : " + e.getMessage());
  }
  return EQUIVALENT;
}
}
class BirthdayDBListener implements RecordListener {
public void recordAdded(RecordStore rs, int recordId) {
  System.out.println("Record Added in record store " );
}
public void recordDeleted(RecordStore rs, int recordId) {
  System.out.println("Record Deleted from record store ");
}
public void recordChanged(RecordStore rs, int recordId) {
  System.out.println("Record Changed in record store ");
}
}