1 // Borrowed from http://code.google.com/p/preferscala/
4 import sbinary.Operations._;
6 import java.util.prefs.Preferences;
8 sealed abstract class PreferenceType{
9 private[preferscala] def nodeForPackage(clazz : Class[_]) : Preferences;
10 private[preferscala] def root : Preferences;
13 object PreferenceType{
14 case object User extends PreferenceType{
15 private[preferscala] def nodeForPackage(clazz : Class[_]) = Preferences.userNodeForPackage(clazz);
16 private[preferscala] def root = Preferences.userRoot;
19 case object System extends PreferenceType{
20 private[preferscala] def nodeForPackage(clazz : Class[_]) = Preferences.systemNodeForPackage(clazz);
21 private[preferscala] def root = Preferences.systemRoot;
25 abstract class PreferenceGroup{
26 def underlying : Preferences;
27 class Preference[T](name : String, default : => T)(implicit bin : Format[T]){
28 private var localCache : T = null.asInstanceOf[T];
31 if (localCache == null){
32 var bytes = underlying.getByteArray(name, null);
36 localCache = fromByteArray[T](bytes)
44 underlying.putByteArray(name, toByteArray[T](t));
48 localCache = null.asInstanceOf[T];
49 underlying.remove(name);
53 def exportToFile(file : File){
54 toFile(apply())(file);
57 def loadFromFile(file : File){
58 update(fromFile[T](file));
63 class NamedGroup(groupName : String, pt : PreferenceType) extends PreferenceGroup{
64 val underlying = pt.root.node(groupName);
67 abstract class PackageGroup(pt : PreferenceType) extends PreferenceGroup{
68 val underlying = pt.nodeForPackage(getClass);