r13342 - in Products.Archetypes/trunk: . Products/Archetypes

"Tom Gross" <[email protected]>
Newsgroups gmane.comp.web.zope.plone.archetypes.cvs
Message-ID <[email protected]>
Author: tom_gross
Date: Wed Dec  8 09:23:41 2010
New Revision: 13342

Modified:
   Products.Archetypes/trunk/   (props changed)
   Products.Archetypes/trunk/Products/Archetypes/   (props changed)
   Products.Archetypes/trunk/Products/Archetypes/OrderedBaseFolder.py
Log:
merged r13259-13340 from tom_gross-ofsordersupport-branch


Modified: Products.Archetypes/trunk/Products/Archetypes/OrderedBaseFolder.py
==============================================================================
--- Products.Archetypes/trunk/Products/Archetypes/OrderedBaseFolder.py	(original)
+++ Products.Archetypes/trunk/Products/Archetypes/OrderedBaseFolder.py	Wed Dec  8 09:23:41 2010
@@ -8,6 +8,7 @@
 from AccessControl import ClassSecurityInfo
 from App.class_init import InitializeClass
 from DocumentTemplate import sequence
+from OFS.OrderSupport import OrderSupport
 from OFS.interfaces import IOrderedContainer
 from Products.CMFCore.utils import getToolByName
 from Products.CMFCore.interfaces import IDynamicType
@@ -18,9 +19,9 @@
 from Products.Archetypes.ExtensibleMetadata import ExtensibleMetadata
 
 
-class OrderedContainer:
-
-    implements(IOrderedContainer)
+class OrderedContainer(OrderSupport):
+    """ Archetype specific additions and changes to OFS.OrderSupport
+    """
 
     security = ClassSecurityInfo()
 
@@ -37,136 +38,23 @@
         metadata.insert(position, obj_meta)
         self._objects = tuple(metadata)
 
-    # TODO here the implementing of IOrderedContainer starts
-    # this should be replaced by mixing in the 2.7 specific class
-    # OSF.OrderedContainer.OrderedContainer
-
-    security.declareProtected(permissions.ModifyPortalContent, 'moveObjectsByDelta')
-    def moveObjectsByDelta(self, ids, delta, subset_ids=None):
-        """ Move specified sub-objects by delta.
-        """
-        if isinstance(ids, basestring):
-            ids = (ids,)
-        min_position = 0
-        objects = list(self._objects)
-        if subset_ids == None:
-            # OLD: subset_ids = [ obj['id'] for obj in objects ]
-            subset_ids = self.getCMFObjectsSubsetIds(objects)
-        else:
-            subset_ids = list(subset_ids)
-        # unify moving direction
-        if delta > 0:
-            ids = list(ids)
-            ids.reverse()
-            subset_ids.reverse()
-        counter = 0
-
-        for id in ids:
-            try:
-                old_position = subset_ids.index(id)
-            except ValueError:
-                continue
-            new_position = max( old_position - abs(delta), min_position )
-            if new_position == min_position:
-                min_position += 1
-            if not old_position == new_position:
-                subset_ids.remove(id)
-                subset_ids.insert(new_position, id)
-                counter += 1
-
-        if counter > 0:
-            if delta > 0:
-                subset_ids.reverse()
-            obj_dict = {}
-            for obj in objects:
-                obj_dict[ obj['id'] ] = obj
-            pos = 0
-            for i in range( len(objects) ):
-                if objects[i]['id'] in subset_ids:
-                    try:
-                        objects[i] = obj_dict[ subset_ids[pos] ]
-                        pos += 1
-                    except KeyError:
-                        raise ValueError('The object with the id "%s" does '
-                                         'not exist.' % subset_ids[pos])
-            self._objects = tuple(objects)
-
-        return counter
-
     security.declarePrivate('getCMFObjectsSubsetIds')
-    def getCMFObjectsSubsetIds(self, objs):
+    def getIdsSubset(self, objs):
         """Get the ids of only cmf objects (used for moveObjectsByDelta)
         """
         ttool = getToolByName(self, 'portal_types')
         cmf_meta_types = [ti.Metatype() for ti in ttool.listTypeInfo()]
         return [obj['id'] for obj in objs if obj['meta_type'] in cmf_meta_types ]
 
+    getCMFObjectsSubsetIds = getIdsSubset
+
     security.declareProtected(permissions.ModifyPortalContent, 'getObjectPosition')
     def getObjectPosition(self, id):
-
-        objs = list(self._objects)
-        om = [objs.index(om) for om in objs if om['id']==id ]
-
-        if om: # only 1 in list if any
-            return om[0]
-
-        raise NotFound, 'Object %s was not found' % str(id)
-
-    security.declareProtected(permissions.ModifyPortalContent, 'moveObjectsUp')
-    def moveObjectsUp(self, ids, delta=1, RESPONSE=None):
-        """ Move an object up """
-        self.moveObjectsByDelta(ids, -delta)
-        if RESPONSE is not None:
-            RESPONSE.redirect('manage_workspace')
-
-    security.declareProtected(permissions.ModifyPortalContent, 'moveObjectsDown')
-    def moveObjectsDown(self, ids, delta=1, RESPONSE=None):
-        """ move an object down """
-        self.moveObjectsByDelta(ids, delta)
-        if RESPONSE is not None:
-            RESPONSE.redirect('manage_workspace')
-
-    security.declareProtected(permissions.ModifyPortalContent, 'moveObjectsToTop')
-    def moveObjectsToTop(self, ids, RESPONSE=None):
-        """ move an object to the top """
-        self.moveObjectsByDelta( ids, -len(self._objects) )
-        if RESPONSE is not None:
-            RESPONSE.redirect('manage_workspace')
-
-    security.declareProtected(permissions.ModifyPortalContent, 'moveObjectsToBottom')
-    def moveObjectsToBottom(self, ids, RESPONSE=None):
-        """ move an object to the bottom """
-        self.moveObjectsByDelta( ids, len(self._objects) )
-        if RESPONSE is not None:
-            RESPONSE.redirect('manage_workspace')
-
-    security.declareProtected(permissions.ModifyPortalContent, 'moveObjectToPosition')
-    def moveObjectToPosition(self, id, position):
-        """ Move specified object to absolute position.
-        """
-        delta = position - self.getObjectPosition(id)
-        return self.moveObjectsByDelta(id, delta)
-
-    security.declareProtected(permissions.ModifyPortalContent, 'orderObjects')
-    def orderObjects(self, key, reverse=None):
-        """ Order sub-objects by key and direction.
-        """
-        ids = [ id for id, obj in sequence.sort( self.objectItems(),
-                                        ( (key, 'cmp', 'asc'), ) ) ]
-        if reverse:
-            ids.reverse()
-        return self.moveObjectsByDelta( ids, -len(self._objects) )
-
-    # here the implementing of IOrderedContainer ends
-
-    def manage_renameObject(self, id, new_id, REQUEST=None):
-        " "
-        objidx = self.getObjectPosition(id)
-        method = OrderedContainer.inheritedAttribute('manage_renameObject')
-        result = method(self, id, new_id, REQUEST)
-        self.moveObject(new_id, objidx)
-
-        return result
+        try:
+            pos = OrderSupport.getObjectPosition(self, id)
+        except ValueError:
+            raise NotFound, 'Object %s was not found' % str(id)
+        return pos
 
 InitializeClass(OrderedContainer)
 

------------------------------------------------------------------------------
What happens now with your Lotus Notes apps - do you make another costly 
upgrade, or settle for being marooned without product support? Time to move
off Lotus Notes and onto the cloud with Force.com, apps are easier to build,
use, and manage than apps on traditional platforms. Sign up for the Lotus 
Notes Migration Kit to learn more. http://p.sf.net/sfu/salesforce-d2d
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.