MessageStore.java

/**
 * Copyright (c) 2012 Nokia Corporation. All rights reserved.
 * Nokia and Nokia Connecting People are registered trademarks of Nokia 
Corporation.
 * Oracle and Java are trademarks or registered trademarks of Oracle and/or its
 * affiliates. Other product and company names mentioned herein may be trademarks
 * or trade names of their respective owners.
 * See LICENSE.TXT for license information.
 */

package com.nokia.example.satsa;

import javax.microedition.lcdui.List;
import javax.microedition.rms.RecordEnumeration;
import javax.microedition.rms.RecordStore;
import javax.microedition.rms.RecordStoreException;

// Stores the messages as byte arrays in the RMS
class MessageStore {

    private final SATSAMIDlet midlet;
    private RecordStore recordStore;
    private RecordEnumeration recordEnumeration;
    private int[] messageIdArray;
    private int numberOfMessages;

    MessageStore(SATSAMIDlet midlet) {
        this.midlet = midlet;
        openMessageStore();
    }

    void close() {
        try {
            recordStore.closeRecordStore();
        } catch (RecordStoreException rse) {
            // Ignore, since the application is closing anyway.
        }
    }

    // List all messages in Record Store
    void fillList(List list) {
        list.deleteAll();

        try {
            numberOfMessages = recordStore.getNumRecords();
            messageIdArray = new int[numberOfMessages + 1];

            recordEnumeration = recordStore.enumerateRecords(null,
                    null,
                    false);
            int i = 0;

            while (recordEnumeration.hasNextElement()) {
                i++;
                int id = recordEnumeration.nextRecordId();

                list.append("Message " + id, null);
                messageIdArray[i] = id;
            }
        } catch (RecordStoreException rse) {
            midlet.showError("Record Store Exception. " + rse.getMessage());
        }
    }

    // Add a record to Record Store
    void addMessage(byte[] messageData) {
        try {
            recordStore.addRecord(messageData, 0, messageData.length);
        } catch (RecordStoreException rse) {
            midlet.showError("Record Store Exception. " + rse.getMessage());
        }
    }

    // Get message from Record Store
    byte[] getMessage(int index) {
        try {
            byte[] messageData = recordStore.getRecord(messageIdArray[index]);
            return messageData;
        } catch (RecordStoreException rse) {
            midlet.showError("Record Store Exception. " + rse.getMessage());
            return null;
        }
    }

    // Delete a record from Record Store
    void deleteMessage(int index) {
        try {
            recordStore.deleteRecord(messageIdArray[index]);
        } catch (RecordStoreException rse) {
            midlet.showError("Record Store Exception. " + rse.getMessage());
        }
    }

    private void openMessageStore() {
        try {
            recordStore = RecordStore.openRecordStore("SATSA_test", true);
        } catch (RecordStoreException rse) {
            midlet.showError("Record Store Exception. " + rse.getMessage());
        }
    }
}