Example #1
0
 def moveObject(self, msgHeader, msgOldparent,
                msgNewparent, msgObjectOid):
     """
     an object should be moved
     """
     print "moveObject"
     print "msgHeader: %s" % msgHeader
     print "msgOldparent: %s" % msgOldparent
     print "msgNewparent: %s" % msgNewparent
     print "msgObjectOid: %s" % msgObjectOid
     my_catalog = zapi.getUtility(ICatalog)
     newParentObj = None
     if not msgNewparent: # in root-folder of slave
         res = my_catalog.searchResults(oid_index=msgHeader['from_oid'])
         if len(res) > 0:
             newParentObj = iter(res).next()
     else:
         res = my_catalog.searchResults(oid_index=msgNewparent)
         if len(res) > 0:
             newParentObj = iter(res).next()
     objToMove = None
     res = my_catalog.searchResults(oid_index=msgObjectOid)
     if len(res) > 0:
         objToMove = iter(res).next()
     if objToMove and newParentObj:
         mover = IObjectMover(objToMove)
         if mover.moveableTo(newParentObj):
             mover.moveTo(newParentObj)
         else:
             raise Exception, "object not movable to new parent"
Example #2
0
 def test_movefolderfromroot2(self):
     root = self.rootFolder
     target = traverse(root, '/folder2/folder2_1/folder2_1_1')
     source = traverse(root, '/folder1')
     mover = IObjectMover(source)
     mover.moveTo(target)
     self.failUnless('folder1' in target)
Example #3
0
 def test_movefoldertosibling(self):
     root = self.rootFolder
     target = traverse(root, '/folder2')
     source = traverse(root, '/folder1/folder1_1')
     mover = IObjectMover(source)
     mover.moveTo(target)
     self.failUnless('folder1_1' in target)
Example #4
0
def move_action(item, container):
    mover = IObjectMover(item)
    try:
        mover.moveTo(container)
        return True
    except (KeyError, DuplicateIDError, InvalidItemType):
        return False
 def test_movefolderfromroot(self):
     root = self.rootFolder
     target = traverse(root, '/folder2')
     source = traverse(root, '/folder1')
     mover = IObjectMover(source)
     mover.moveTo(target)
     self.assertTrue('folder1' in target)
Example #6
0
 def test_movefoldertosibling(self):
     root = self.rootFolder
     target = traverse(root, '/folder2')
     source = traverse(root, '/folder1/folder1_1')
     mover = IObjectMover(source)
     mover.moveTo(target)
     self.failUnless('folder1_1' in target)
Example #7
0
 def test_movefolderfromroot2(self):
     root = self.rootFolder
     target = traverse(root, '/folder2/folder2_1/folder2_1_1')
     source = traverse(root, '/folder1')
     mover = IObjectMover(source)
     mover.moveTo(target)
     self.failUnless('folder1' in target)
Example #8
0
 def test_movetosamewithnewname(self):
     root = self.rootFolder
     container = traverse(root, 'folder1')
     container['file1'] = File()
     file = traverse(root, 'folder1/file1')
     mover = IObjectMover(file)
     mover.moveTo(container, 'file2')
     self.failIf('file1' in container)
     self.failUnless('file2' in container)
Example #9
0
 def test_movefoldertosame2(self):
     # Should be a noop, because "moving" to same location
     root = self.rootFolder
     target = traverse(root, '/folder1/folder1_1')
     source = traverse(root, '/folder1/folder1_1/folder1_1_1')
     mover = IObjectMover(source)
     mover.moveTo(target)
     self.failUnless('folder1_1_1' in target)
     self.assertEquals(len(target), 1)
Example #10
0
 def test_movefoldertosame2(self):
     # Should be a noop, because "moving" to same location
     root = self.rootFolder
     target = traverse(root, '/folder1/folder1_1')
     source = traverse(root, '/folder1/folder1_1/folder1_1_1')
     mover = IObjectMover(source)
     mover.moveTo(target)
     self.failUnless('folder1_1_1' in target)
     self.assertEquals(len(target), 1)
Example #11
0
 def test_movetosamewithnewname(self):
     root = self.rootFolder
     container = traverse(root, 'folder1')
     container['file1'] = File()
     file = traverse(root, 'folder1/file1')
     mover = IObjectMover(file)
     mover.moveTo(container, 'file2')
     self.failIf('file1' in container)
     self.failUnless('file2' in container)
 def test_movetootherwithnewname(self):
     root = self.rootFolder
     container = traverse(root, 'folder1')
     container['file1'] = File()
     target = traverse(root, 'folder2')
     file = traverse(root, 'folder1/file1')
     mover = IObjectMover(file)
     mover.moveTo(target, 'file2')
     self.assertFalse('file1' in container)
     self.assertTrue('file2' in target)
Example #13
0
 def test_movetoother(self):
     root = self.rootFolder
     container = traverse(root, 'folder1')
     container['file1'] = File()
     target = traverse(root, 'folder2')
     file = traverse(root, 'folder1/file1')
     mover = IObjectMover(file)
     mover.moveTo(target, 'file1')
     self.failIf('file1' in container)
     self.failUnless('file1' in target)
Example #14
0
 def test_movetosame(self):
     # Should be a noop, because "moving" to same location
     root = self.rootFolder
     container = traverse(root, 'folder1')
     container['file1'] = File()
     file = traverse(root, 'folder1/file1')
     mover = IObjectMover(file)
     mover.moveTo(container, 'file1')
     self.failUnless('file1' in container)
     self.assertEquals(len(container), 2)
Example #15
0
    def renameItem(self, oldName, newName):
        object = self.container.get(oldName)
        if object is None:
            raise ItemNotFoundError(self.container, oldName)
        mover = IObjectMover(object)

        if newName in self.container:
            raise DuplicationError("%s is already in use" % newName)

        mover.moveTo(self.container, newName)
Example #16
0
 def test_movetosame(self):
     # Should be a noop, because "moving" to same location
     root = self.rootFolder
     container = traverse(root, 'folder1')
     container['file1'] = File()
     file = traverse(root, 'folder1/file1')
     mover = IObjectMover(file)
     mover.moveTo(container, 'file1')
     self.failUnless('file1' in container)
     self.assertEquals(len(container), 2)
Example #17
0
 def test_movetoother(self):
     root = self.rootFolder
     container = traverse(root, 'folder1')
     container['file1'] = File()
     target = traverse(root, 'folder2')
     file = traverse(root, 'folder1/file1')
     mover = IObjectMover(file)
     mover.moveTo(target, 'file1')
     self.failIf('file1' in container)
     self.failUnless('file1' in target)
Example #18
0
 def test_AttributionUpToDateWhenCategoryMoved(self):
     """ Test if the attribution is up to date if a category was
     removed."""
     self.root['c'] = catable = Categorizable()
     attribution = interfaces.IAttribution(catable)
     attribution.attribute('cat11')
     from zope.copypastemove.interfaces import IObjectMover
     mover = IObjectMover(self.categories['set1']['cat11'])
     mover.moveTo(self.categories['set2'])
     self.assertTrue(attribution.isAttributed('cat11'))
Example #19
0
    def handlePaste(self, action):
        items = self.clipboard.getContents()
        moved = False
        not_pasteable_ids = []
        for item in items:
            duplicated_id = False
            try:
                obj = api.traverse(self.context, item['target'])
            except TraversalError:
                pass
            else:
                if item['action'] == 'cut':
                    mover = IObjectMover(obj)
                    try:
                        mover.moveTo(self.context)
                        moved = True
                    except DuplicateIDError:
                        duplicated_id = True
                elif item['action'] == 'copy':
                    copier = IObjectCopier(obj)
                    try:
                        copier.copyTo(self.context)
                    except DuplicateIDError:
                        duplicated_id = True
                else:
                    raise

            if duplicated_id:
                not_pasteable_ids.append(api.getName(obj))

        if moved:
            # Clear the clipboard if we do a move, but not if we only do a copy
            self.clipboard.clearContents()

        if not_pasteable_ids != []:
            # Show the ids of objects that can't be pasted because
            # their ids are already taken.
            # TODO Can't we add a 'copy_of' or something as a prefix
            # instead of raising an exception ?
            transaction.doom()
            raise UserError(
                _("The given name(s) %s is / are already being used" % (
                    str(not_pasteable_ids))))
        else:
            # we need to update the table rows again, otherwise we don't
            # see the new item in the table
            self.updateAfterActionExecution()
            self.status = self.pasteSucsessMessage
Example #20
0
    def pasteObjects(self):
        """Paste ojects in the user clipboard to the container
        """
        target = self.context
        clipboard = getPrincipalClipboard(self.request)
        items = clipboard.getContents()
        moved = False
        not_pasteable_ids = []
        for item in items:
            duplicated_id = False
            try:
                obj = traverse(target, item['target'])
            except TraversalError:
                pass
            else:
                if item['action'] == 'cut':
                    mover = IObjectMover(obj)
                    try:
                        mover.moveTo(target)
                        moved = True
                    except DuplicateIDError:
                        duplicated_id = True
                elif item['action'] == 'copy':
                    copier = IObjectCopier(obj)
                    try:
                        copier.copyTo(target)
                    except DuplicateIDError:
                        duplicated_id = True
                else:
                    raise

            if duplicated_id:
                not_pasteable_ids.append(getName(obj))

        if moved:
            # Clear the clipboard if we do a move, but not if we only do a copy
            clipboard.clearContents()

        if not_pasteable_ids != []:
            # Show the ids of objects that can't be pasted because
            # their ids are already taken.
            # TODO Can't we add a 'copy_of' or something as a prefix
            # instead of raising an exception ?
            raise UserError(
                _("The given name(s) %s is / are already being used" %(
                str(not_pasteable_ids))))
Example #21
0
    def pasteObjects(self):
        """Paste ojects in the user clipboard to the container
        """
        target = self.context
        clipboard = getPrincipalClipboard(self.request)
        items = clipboard.getContents()
        moved = False
        not_pasteable_ids = []
        for item in items:
            duplicated_id = False
            try:
                obj = traverse(target, item['target'])
            except TraversalError:
                pass
            else:
                if item['action'] == 'cut':
                    mover = IObjectMover(obj)
                    try:
                        mover.moveTo(target)
                        moved = True
                    except DuplicateIDError:
                        duplicated_id = True
                elif item['action'] == 'copy':
                    copier = IObjectCopier(obj)
                    try:
                        copier.copyTo(target)
                    except DuplicateIDError:
                        duplicated_id = True
                else:
                    raise

            if duplicated_id:
                not_pasteable_ids.append(getName(obj))

        if moved:
            # Clear the clipboard if we do a move, but not if we only do a copy
            clipboard.clearContents()

        if not_pasteable_ids != []:
            # Show the ids of objects that can't be pasted because
            # their ids are already taken.
            # TODO Can't we add a 'copy_of' or something as a prefix
            # instead of raising an exception ?
            raise UserError(
                _("The given name(s) %s is / are already being used" %
                  (str(not_pasteable_ids))))
Example #22
0
 def test_IndexedUpToDateWhenCategoryMovedAndRenamed(self):
     """ Test if an attribution is indexed at all."""
     self.root['c'] = catable = Categorizable()
     attribution = interfaces.IAttribution(catable)
     attribution.attribute('cat11')
     zope.event.notify(ObjectModifiedEvent(catable))
     from zope.copypastemove.interfaces import IObjectMover
     mover = IObjectMover(self.categories['set1']['cat11'])
     mover.moveTo(self.categories['set2'], new_name='moved')
     zope.event.notify(ObjectModifiedEvent(catable))
     from z3c.indexer.query import AnyOf
     from z3c.indexer.search import SearchQuery
     query = SearchQuery(AnyOf('attribution-set', ('cat22', )))
     result = query.apply()
     self.assertTrue(len(result) == 0)
     query = SearchQuery(AnyOf('attribution-set', ('moved', )))
     result = query.apply()
     self.assertTrue(len(result) == 1)
Example #23
0
    def _renameItem(self, oldName, newName):
        object = self.container.get(oldName)
        if object is None:
            raise ItemNotFoundError(self.container, oldName)
        mover = IObjectMover(object)

        if newName in self.container:
            raise DuplicationError("%s is already in use" % newName)

        return mover.moveTo(self.container, newName)
Example #24
0
    def pasteObjects(self):
        """Paste ojects in the user clipboard to the container """
        target = self.context
        clipboard = getPrincipalClipboard(self.request)
        items = clipboard.getContents()
        moved = False
        not_pasteable_ids = []
        for item in items:
            duplicated_id = False
            try:
                obj = traverse(target, item['target'])
            except TraversalError:
                pass
            else:
                if item['action'] == 'cut':
                    mover = IObjectMover(removeAllProxies(obj))
                    try:
                        mover.moveTo(target)
                        moved = True
                    except DuplicateIDError:
                        duplicated_id = True
                elif item['action'] == 'copy':
                    copier = IObjectCopier(removeAllProxies(obj))
                    try:
                        copier.copyTo(target)
                    except DuplicateIDError:
                        duplicated_id = True
                    except InvalidItemType:
                        pass
                else:
                    raise

            if duplicated_id:
                not_pasteable_ids.append(getName(obj))

        if moved:
            clipboard.clearContents()

        if not_pasteable_ids:
            abort()
            IStatusMessage(self.request).add(
                _("The given name(s) %s is / are already being used" % (
                    str(not_pasteable_ids))), 'error')