www.pudn.com > GMapViewer-src.zip > Preferences.java
package org.sreid.j2me.gmapviewer;
import java.io.*;
import java.util.*;
import javax.microedition.rms.*;
import javax.microedition.lcdui.*;
import javax.microedition.io.*;
import org.sreid.j2me.util.*;
class Preferences extends Properties {
private static final String RECORD_STORE_NAME = "GMapViewer.preferences";
private static final int RECORD_ID = 1;
private final GMapViewer app;
Preferences(GMapViewer app) {
this.app = app;
}
// Return app property as default if no user-supplied property specified
public Object get(Object key) {
if (containsKey(key)) {
return super.get(key);
}
else {
return app.getAppProperty("prefs." + (String)key);
}
}
void loadPreferences() {
RecordStore rms = null;
try {
rms = RecordStore.openRecordStore(RECORD_STORE_NAME, true);
byte[] data = null;
try {
data = rms.getRecord(RECORD_ID);
}
catch (Exception e) {
// New RecordStore. Create an empty record.
int id = rms.addRecord(null, 0, 0);
if (id != RECORD_ID) {
// We just added a record, but it was not the first record. Something very wrong.
for (;;) {
try { rms.closeRecordStore(); }
catch (RecordStoreNotOpenException ee) { break; }
}
RecordStore.deleteRecordStore(RECORD_STORE_NAME);
loadPreferences();
return;
}
}
if (data != null) {
super.load(data);
}
}
catch (Exception e) {
app.exception("An error occured while loading user preferences.", e);
}
finally {
if (rms != null) {
try { rms.closeRecordStore(); }
catch (Exception e) { app.exception("An error occured while closing the user preferences database after loading.", e); }
}
}
}
void savePreferences() {
RecordStore rms = null;
try {
byte[] data = super.save();
rms = RecordStore.openRecordStore(RECORD_STORE_NAME, false);
rms.setRecord(RECORD_ID, data, 0, data.length);
}
catch (Exception e) {
app.exception("An error occured while saving user preferences database.", e);
}
finally {
if (rms != null) {
try { rms.closeRecordStore(); }
catch (Exception e) { app.exception("An error occured while closing the user preferences database after saving.", e); }
}
}
}
}