package net.filebot.util.prefs; import java.util.prefs.AbstractPreferences; import java.util.prefs.BackingStoreException; public class FilePreferences extends AbstractPreferences { protected PropertyFileBackingStore store; public FilePreferences(PropertyFileBackingStore store) { super(null, ""); this.store = store; } protected FilePreferences(FilePreferences parent, String name) { super(parent, name); this.store = parent.store; } protected String getNodeKey() { return absolutePath().substring(1); } @Override protected void putSpi(String key, String value) { store.setValue(getNodeKey(), key, value); } @Override protected String getSpi(String key) { return store.getValue(getNodeKey(), key); } @Override protected void removeSpi(String key) { store.removeValue(getNodeKey(), key); } @Override protected void removeNodeSpi() throws BackingStoreException { store.removeNode(getNodeKey()); } @Override protected String[] keysSpi() throws BackingStoreException { return store.getKeys(getNodeKey()); } @Override protected String[] childrenNamesSpi() throws BackingStoreException { return store.getChildren(getNodeKey()); } @Override protected FilePreferences childSpi(String name) { return new FilePreferences(this, name); } @Override public void sync() throws BackingStoreException { // if the backing store naturally syncs an entire subtree at once, the implementer is encouraged to override sync(), rather than merely overriding syncSpi() syncSpi(); } @Override protected void syncSpi() throws BackingStoreException { try { store.sync(); } catch (Exception e) { throw new BackingStoreException(e); } } @Override public void flush() throws BackingStoreException { // if the backing store naturally flushes an entire subtree at once, the implementer is encouraged to override flush(), rather than merely overriding flushSpi() flushSpi(); } @Override protected void flushSpi() throws BackingStoreException { try { store.flush(); } catch (Exception e) { throw new BackingStoreException(e); } } }