/**
* (C) Copyright 2013 Jabylon (http://www.jabylon.org) and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.jabylon.common.util;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.osgi.service.prefs.BackingStoreException;
import org.osgi.service.prefs.Preferences;
public class AttachablePreferences implements Preferences, Serializable{
private static final long serialVersionUID = 1L;
private Map<String, Preferences> children;
private Map<String, Object> values = new HashMap<String, Object>();
private Preferences parent;
private String name;
public AttachablePreferences() {
this(null,"attachable");
}
public AttachablePreferences(Preferences parent, String name) {
this.parent = parent;
this.name = name;
}
@Override
public String absolutePath() {
if(parent!=null)
return parent.absolutePath() + "/" + name();
return "/" + name();
}
@Override
public String[] childrenNames() throws BackingStoreException {
if(children==null)
return new String[]{};
Set<String> keys = children.keySet();
return keys.toArray(new String[keys.size()]);
}
@Override
public void clear() throws BackingStoreException {
values.clear();
}
@Override
public void flush() throws BackingStoreException {
// TODO Auto-generated method stub
}
@Override
public String get(String arg0, String arg1) {
if(values!=null && values.containsKey(arg0))
return String.valueOf(values.get(arg0));
return arg1;
}
@Override
public boolean getBoolean(String arg0, boolean arg1) {
if(values!=null && values.containsKey(arg0))
{
Object value = values.get(arg0);
if (value instanceof String) {
return Boolean.parseBoolean((String) value);
}
return (Boolean)value;
}
return arg1;
}
@Override
public byte[] getByteArray(String arg0, byte[] arg1) {
if(values!=null && values.containsKey(arg0))
return (byte[]) values.get(arg0);
return arg1;
}
@Override
public double getDouble(String arg0, double arg1) {
if(values!=null && values.containsKey(arg0))
{
Object value = values.get(arg0);
if (value instanceof String) {
return Double.parseDouble((String) value);
}
return (Double)value;
}
return arg1;
}
@Override
public float getFloat(String arg0, float arg1) {
if(values!=null && values.containsKey(arg0))
{
Object value = values.get(arg0);
if (value instanceof String) {
return Float.parseFloat((String) value);
}
return (Float)value;
}
return arg1;
}
@Override
public int getInt(String arg0, int arg1) {
if(values!=null && values.containsKey(arg0))
{
Object value = values.get(arg0);
if (value instanceof String) {
return Integer.parseInt((String) value);
}
return (Integer)value;
}
return arg1;
}
@Override
public long getLong(String arg0, long arg1) {
if(values!=null && values.containsKey(arg0))
{
Object value = values.get(arg0);
if (value instanceof String) {
return Long.parseLong((String) value);
}
return (Long)value;
}
return arg1;
}
@Override
public String[] keys() throws BackingStoreException {
if(values==null)
return new String[]{};
Set<String> keys = values.keySet();
return keys.toArray(new String[keys.size()]);
}
@Override
public String name() {
return name;
}
@Override
public Preferences node(String arg0) {
Map<String, Preferences> children = getOrCreateChildren();
Preferences child = (AttachablePreferences) children.get(arg0);
if(child==null) {
child = new AttachablePreferences();
children.put(arg0, child);
}
return child;
}
private Map<String, Preferences> getOrCreateChildren() {
if(children==null)
children = new HashMap<String, Preferences>();
return children;
}
@Override
public boolean nodeExists(String arg0) throws BackingStoreException {
return getOrCreateChildren().containsKey(arg0);
}
@Override
public Preferences parent() {
return parent;
}
@Override
public void put(String arg0, String arg1) {
values.put(arg0, arg1);
}
@Override
public void putBoolean(String arg0, boolean arg1) {
values.put(arg0, arg1);
}
@Override
public void putByteArray(String arg0, byte[] arg1) {
values.put(arg0, arg1);
}
@Override
public void putDouble(String arg0, double arg1) {
values.put(arg0, arg1);
}
@Override
public void putFloat(String arg0, float arg1) {
values.put(arg0, arg1);
}
@Override
public void putInt(String arg0, int arg1) {
values.put(arg0, arg1);
}
@Override
public void putLong(String arg0, long arg1) {
values.put(arg0, arg1);
}
@Override
public void remove(String arg0) {
values.remove(arg0);
}
@Override
public void removeNode() throws BackingStoreException {
// TODO Auto-generated method stub
}
@Override
public void sync() throws BackingStoreException {
// TODO Auto-generated method stub
}
@Override
public String toString() {
return absolutePath();
}
}