Mega Code Archive

 
Categories / Java / J2ME
 

Persistence

/*  * RMSGameScores.java   * Copyright (c) 2000 Sun Microsystems, Inc. All Rights Reserved.  *  * Author: Srikanth Raju  *  * This software is the confidential and proprietary information of Sun  * Microsystems, Inc. ("Confidential Information").  You shall not  * disclose such Confidential Information and shall use it only in  * accordance with the terms of the license agreement you entered into  * with Sun.  *  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE  * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE  * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR  * PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES  * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING  * THIS SOFTWARE OR ITS DERIVATIVES.  */ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.EOFException; import java.io.IOException; import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException; import javax.microedition.rms.RecordComparator; import javax.microedition.rms.RecordEnumeration; import javax.microedition.rms.RecordFilter; import javax.microedition.rms.RecordStore; import javax.microedition.rms.RecordStoreException; /**  * A class used for storing and showing game scores.  */ public class RMSGameScores extends MIDlet implements RecordFilter,     RecordComparator {   /*    * The RecordStore used for storing the game scores.    */   private RecordStore recordStore = null;   /*    * The player name to use when filtering.    */   public static String playerNameFilter = null;   /**    * The constuctor opens the underlying record store, creating it if    * necessary.    */   public RMSGameScores() {     // Create a new record store for this example     try {       recordStore = RecordStore.openRecordStore("scores", true);     } catch (RecordStoreException rse) {       System.out.println("Record Store Exception in the ctor." + rse);       rse.printStackTrace();     }   }   /**    * startApp()    */   public void startApp() throws MIDletStateChangeException {     RMSGameScores rmsgs = new RMSGameScores();     rmsgs.addScore(100, "Alice");     rmsgs.addScore(120, "Bill");     rmsgs.addScore(80, "Candice");     rmsgs.addScore(40, "Dean");     rmsgs.addScore(200, "Ethel");     rmsgs.addScore(110, "Farnsworth");     rmsgs.addScore(220, "Alice");     RMSGameScores.playerNameFilter = "Alice";     System.out         .println("Print all scores followed by Scores for Farnsworth");     rmsgs.printScores();   }   /*    * Part of the RecordFilter interface.    */   public boolean matches(byte[] candidate) throws IllegalArgumentException {     // If no filter set, nothing can match it.     if (this.playerNameFilter == null) {       return false;     }     ByteArrayInputStream bais = new ByteArrayInputStream(candidate);     DataInputStream inputStream = new DataInputStream(bais);     String name = null;     try {       int score = inputStream.readInt();       name = inputStream.readUTF();     } catch (EOFException eofe) {       System.out.println(eofe);       eofe.printStackTrace();     } catch (IOException eofe) {       System.out.println(eofe);       eofe.printStackTrace();     }     return (this.playerNameFilter.equals(name));   }   /*    * Part of the RecordComparator interface.    */   public int compare(byte[] rec1, byte[] rec2) {     // Construct DataInputStreams for extracting the scores from     // the records.     ByteArrayInputStream bais1 = new ByteArrayInputStream(rec1);     DataInputStream inputStream1 = new DataInputStream(bais1);     ByteArrayInputStream bais2 = new ByteArrayInputStream(rec2);     DataInputStream inputStream2 = new DataInputStream(bais2);     int score1 = 0;     int score2 = 0;     try {       // Extract the scores.       score1 = inputStream1.readInt();       score2 = inputStream2.readInt();     } catch (EOFException eofe) {       System.out.println(eofe);       eofe.printStackTrace();     } catch (IOException eofe) {       System.out.println(eofe);       eofe.printStackTrace();     }     // Sort by score     if (score1 > score2) {       return RecordComparator.FOLLOWS;     } else if (score1 < score2) {       return RecordComparator.PRECEDES;     } else {       return RecordComparator.EQUIVALENT;     }   }   /**    * Add a new score to the storage.    *     * @param score    *            the score to store.    * @param playerName    *            the name of the play achieving this score.    */   public void addScore(int score, String playerName) {     // Each score is stored in a separate record, formatted with     // the score, followed by the player name.     ByteArrayOutputStream baos = new ByteArrayOutputStream();     DataOutputStream outputStream = new DataOutputStream(baos);     try {       // Push the score into a byte array.       outputStream.writeInt(score);       // Then push the player name.       outputStream.writeUTF(playerName);     } catch (IOException ioe) {       System.out.println(ioe);       ioe.printStackTrace();     }     // Extract the byte array     byte[] b = baos.toByteArray();     try {       // Add it to the record store       recordStore.addRecord(b, 0, b.length);     } catch (RecordStoreException rse) {       System.out.println(rse);       rse.printStackTrace();     }   }   /**    * A helper method for the printScores methods.    */   private void printScoresHelper(RecordEnumeration re) {     try {       while (re.hasNextElement()) {         int id = re.nextRecordId();         ByteArrayInputStream bais = new ByteArrayInputStream(             recordStore.getRecord(id));         DataInputStream inputStream = new DataInputStream(bais);         try {           int score = inputStream.readInt();           String playerName = inputStream.readUTF();           System.out.println(playerName + " = " + score);         } catch (EOFException eofe) {           System.out.println(eofe);           eofe.printStackTrace();         }       }     } catch (RecordStoreException rse) {       System.out.println(rse);       rse.printStackTrace();     } catch (IOException ioe) {       System.out.println(ioe);       ioe.printStackTrace();     }   }   /**    * This method prints all of the scores sorted by game score.    */   public void printScores() {     try {       // Enumerate the records using the comparator implemented       // above to sort by game score.       // No RecordFilter here. All records in the RecordStore       RecordEnumeration re = recordStore.enumerateRecords(null, this,           true);       // Print all scores       System.out.println("Print all scores...");       printScoresHelper(re);       // Enumerate records respecting a RecordFilter       re = recordStore.enumerateRecords(this, this, true);       //Print scores for Farnsworth       System.out.println("Print scores for : " + this.playerNameFilter);       printScoresHelper(re);     } catch (RecordStoreException rse) {       System.out.println(rse);       rse.printStackTrace();     }   }   /**    * pauseApp()    */   public void pauseApp() {     System.out.println("pauseApp()");   }   /**    * destroyApp()    *     * This closes our open RecordStore when we are destroyed.    *     * @param cond    *            true if this is an unconditional destroy false if it is not    *            (ignored here and treated as unconditional)    */   public void destroyApp(boolean cond) {     System.out.println("destroyApp( )");     try {       if (recordStore != null)         recordStore.closeRecordStore();     } catch (Exception ignore) {       // ignore this     }   } }