def removal_handler(obj, event):
    """ Remove related XML content if a Dexterity content object
        is being deleted.
    """

    if not util.is_xml_content(event.object):
        return

    handle = getUtility(IConnectorHandle).get_handle()
    storage_dir = util.get_storage_path(event.object)
    storage_parent_dir = util.get_storage_path_parent(event.object)
    if handle.exists(storage_dir):
        handle.removedir(storage_dir, False, True)
    if handle.exists(storage_parent_dir) and handle.isdirempty(storage_parent_dir):
        handle.removedir(storage_parent_dir, False, True)
def removal_handler(obj, event):
    """ Remove related XML content if a Dexterity content object
        is being deleted.
    """

    if not util.is_xml_content(event.object):
        return

    handle = getUtility(IWebdavHandle).webdav_handle()
    storage_dir = util.get_storage_path(event.object)
    storage_parent_dir = util.get_storage_path_parent(event.object)
    if handle.exists(storage_dir):
        handle.removedir(storage_dir, False, True)
    if handle.exists(storage_parent_dir) and handle.isdirempty(storage_parent_dir):
        handle.removedir(storage_parent_dir, False, True)
def copied_handler(obj, event):
    """ Copy XML resources to new object """

    # original and copied Dexterity object
    copied = event.object
    original = event.original

    # Is this Dexterity content object related to XML resources?
    if not util.is_xml_content(copied):
        return

    # create a new storage id
    if util.get_storage_key(original) == util.get_storage_key(copied):
        util.new_storage_key(copied)

        # an copy over XML content from original content object
        handle = getUtility(IConnectorHandle).get_handle()
        storage_dir_original = util.get_storage_path(original)
        storage_dir_copied = util.get_storage_path(copied)
        storage_dir_copied_parent = util.get_storage_path_parent(copied)
        handle.makedir(storage_dir_copied_parent, True, True)
        handle.copydir(storage_dir_original, storage_dir_copied)
def copied_handler(obj, event):
    """ Copy XML resources to new object """

    # original and copied Dexterity object
    copied = event.object
    original = event.original

    # Is this Dexterity content object related to XML resources?
    if not util.is_xml_content(copied):
        return

    # create a new storage id
    if util.get_storage_key(original) == util.get_storage_key(copied):
        util.new_storage_key(copied)

        # an copy over XML content from original content object
        handle = getUtility(IWebdavHandle).webdav_handle()
        storage_dir_original = util.get_storage_path(original)
        storage_dir_copied = util.get_storage_path(copied)
        storage_dir_copied_parent = util.get_storage_path_parent(copied)
        handle.makedir(storage_dir_copied_parent, True, True)
        handle.copydir(storage_dir_original, storage_dir_copied)