def enumerateIndexes():
    #   Return a list of ( index_name, type ) pairs for the initial
    #   index set.
    return ()

def enumerateColumns():
    #   Return a sequence of schema names to be cached.
    return ( 'getHighlightedIcon'
           , 'allowedToModifyRolesAndUsers'
           )


def install(self):
    """ Initialize indexes """
    catalog = getattr(self, 'portal_catalog')
    
    indexes = {}
    indexobjects = catalog.getIndexObjects()
    for index in indexobjects:
        indexes[index.__name__] = index

    # Content indexes
    for index_name, index_type in enumerateIndexes():
        if not index_name in indexes:
            catalog.manage_addIndex(index_name, index_type)
        else:
            index = index[index_name]
            indextype = catalog.__class__.__name__
            if indextype != index_type:
                catalog.manage_delIndex((index_name,))
                catalog.manage_addIndex(index_name, index_type)

    columns = catalog.schema()
    # Cached metadata
    for column_name in enumerateColumns():
        #TODO: Remove redundant metadata coloums.
        if not column_name in columns:
            catalog.manage_addColumn(column_name)

