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); }
			}
		}
	}
}