def get_preference(path, key, default=None):
    """
    """
    service = Platform.getPreferencesService()
    root = service.getRootNode()
    pref = root.node(path)
    return pref.get(key, default)
def set_preference(path, key, value, type="string"):
    """ Set a preference.
    
    http://help.eclipse.org/galileo/topic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/core/runtime/preferences/package-summary.html
    
    NOTE: Workbench must be restarted to make changes effective - 
    looks like Preference dialog keeps its own cached copy of preference somewhere and ignores changes here.  
    """
    service = Platform.getPreferencesService()
    root = service.getRootNode()
    pref = root.node(path)    

    # Java and static typing bites here...
    if type=="string":
        pref.put(key, value)
    elif type=="boolean":
        pref.putBoolean(key, value)
    elif type=="integer":
        pref.putInt(key, value)
    else:
        raise RuntimeError("Unknown type:" + type)
    
    pref.flush()
        
    print preference.absolutePath() + " dumping"
    
    print preference.__class__
        
    dump_keys(preference)
        
    for child_name in preference.childrenNames():
        #print "Got:" + child_name
        
        if child_name.startswith("_") or child_name == preference.name():
            # Looks like there is magical node _SELF_
            continue
                    
        child = preference.node(child_name)
        #continue
        
        #print child.childrenNames()
        #dump_keys(child)        
        dump_preference(child)
    

service = Platform.getPreferencesService()
root = service.getRootNode()
dump_preference(root)