# Copyright (c) 2000-2001 LOGILAB S.A. (Paris, FRANCE).
# http://www.logilab.fr/ -- mailto:contact@logilab.fr
#
# This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software
# Foundation; either version 2 of the License, or (at your option) any later
# version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along with
# this program; if not, write to the Free Software Foundation, Inc.,
# 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
__revision__ = "$Id: NarvalRC.py,v 1.12 2002/01/04 14:13:05 syt Exp $"

from narval.utils.sax import DictSaxHandlerMixin, PrefReader

## configuration object #######################################################
class NarvalRC:
    """ class for configuration file handling """
    _DICT = {}

    def __init__(self, file=None):
        self.__dict__ = NarvalRC._DICT
        if not self.__dict__:
            self._prefs = {'encoding': 'UTF-8',
                          'disable' : {'actions-module': [],
                                       'transforms-module' : [],
                                       'cookbook' : []},
                           'protocol_handlers' : {}
                                       
                        }
            self.black_list = self._prefs['disable']
            if file is None:
                from os.path import normpath, join
                from narval import config
                file = normpath(join(config.get_home(), 'data/narvalrc.xml'))
            self.reader = PrefReader(NarvalRCSaxHandler, self)
            try:
                self.reader.fromFile(file)
                from narval.lib import set_encoding
                set_encoding(self._prefs['encoding'])
            except IOError, e:
                print e
                print 'No narval configuration file found, everything will be loaded.'
                
    def __getitem__(self, key):
        return self._prefs[key]

    def __setitem__(self, key, val):
        self._prefs[key] = val

    def setdefault(self, key, val):
        return self._prefs.setdefault(key, val)
    

        
## saxHandler definition ######################################################
class NarvalRCSaxHandler(DictSaxHandlerMixin):
    _MASTER = {'disable':None, 'protocol_handlers':None, 'handler':'name'}
    _S_LIST = ()
    _LIST = ('actions-module', 'transforms-module', 'cookbook')
    _KEY = ('encoding', 'package', 'class')
    _CB = {}
