# GNU Enterprise Common Library - Namespace Handling
#
# Copyright 2000-2007 Free Software Foundation
#
# This file is part of GNU Enterprise.
#
# GNU Enterprise 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, or (at your option) any later version.
#
# GNU Enterprise 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 program; see the file COPYING. If not,
# write to the Free Software Foundation, Inc., 59 Temple Place
# - Suite 330, Boston, MA 02111-1307, USA.
#
# $Id: NamespaceCore.py 9222 2007-01-08 13:02:49Z johannes $
"""
Classes to build up a namespace object tree from an XML object tree.

Namespace objects are available within action and trigger code. They mirror the
XML object tree of the document, but the namespace objects are limited to the
functions and properties that the objects explicitly want to provide.
"""

from gnue.common.definitions.GObjects import GObj

__all__ = ['GObjNamespace']


# =============================================================================
# GObjNamespace
# =============================================================================

class GObjNamespace:
    """
    Helper object to build up a tree of namespace objects. For internal use of
    the trigger system only.
    """

    # -------------------------------------------------------------------------
    # Constructor
    # -------------------------------------------------------------------------

    def __init__(self, xml_object, rootName = "root"):
        """
        Initialize a GObjNamespace instance.
        """

        # FIXME: This should rather check for GRootObj, but that causes a
        # circular import
        checktype (xml_object, GObj)

        self.__root_name = rootName

        self._globalNamespace = {}

        self._globalNamespace[rootName] = \
                self.constructTriggerObject(xml_object)


    # -------------------------------------------------------------------------
    # Construct a namespace object tree for an XML object tree
    # -------------------------------------------------------------------------

    def constructTriggerObject(self, xml_object):
        """
        Construct a namespace object tree from an XML
        (L{definitions.GObjects.GObj}) object tree. DEPRECIATED.

        Depreciated. Use xml_object.create_namespace_object instead.
        """

        return xml_object.create_namespace_object(self._globalNamespace,
                self.__root_name)
