"""Main product initializer
"""
 
from zope.i18nmessageid import MessageFactory
from tecnoteca.googlemap import config
 
from Products.Archetypes import atapi
from Products.CMFCore import utils
 
from AccessControl import ModuleSecurityInfo
 
# Define a message factory for when this product is internationalised.
# This will be imported with the special name "_" in most modules. Strings
# like _(u"message") will then be extracted by i18n tools for translation.
 
googlemapMessageFactory = MessageFactory('tecnoteca.googlemap')
ModuleSecurityInfo('tecnoteca.googlemap').declarePublic('googlemapMessageFactory')
 
def initialize(context):
    """Initializer called when used as a Zope 2 product.
 
    This is referenced from configure.zcml. Regstrations as a "Zope 2 product"
    is necessary for GenericSetup profiles to work, for example.
 
    Here, we call the Archetypes machinery to register our content types
    with Zope and the CMF.
    """
 
    from AccessControl import allow_module, allow_class
    allow_module('tecnoteca.googlemap.content')
 
    from tecnoteca.googlemap.content.ttgooglemapcoordinates import TTGoogleMapCoordinates
    allow_class(TTGoogleMapCoordinates)
 
    from tecnoteca.googlemap.browser.logger import log
    allow_class(log)
 
    # Retrieve the content types that have been registered with Archetypes
    # This happens when the content type is imported and the registerType()
    # call in the content type's module is invoked. Actually, this happens
    # during ZCML processing, but we do it here again to be explicit. Of
    # course, even if we import the module several times, it is only run
    # once.
 
    content_types, constructors, ftis = atapi.process_types(
        atapi.listTypes(config.PROJECTNAME),
        config.PROJECTNAME)
 
    # Now initialize all these content types. The initialization process takes
    # care of registering low-level Zope 2 factories, including the relevant
    # add-permission. These are listed in config.py. We use different
    # permissions for each content type to allow maximum flexibility of who
    # can add which content types, where. The roles are set up in rolemap.xml
    # in the GenericSetup profile.
 
    for atype, constructor in zip(content_types, constructors):
        utils.ContentInit('%s: %s' % (config.PROJECTNAME, atype.portal_type),
            content_types=(atype, ),
            permission=config.ADD_PERMISSIONS[atype.portal_type],
            extra_constructors=(constructor,),
            ).initialize(context)