[Zapp-cvs-commit] ZApp ZApp_RelatableItem.py,1.15,1.16 ZApp_Relationship.py,1.4,1.5 ZApp_Relationshi
Brought to you by:
sspickle
|
From: <ssp...@us...> - 2003-07-01 22:22:06
|
Update of /cvsroot/zapp/ZApp
In directory sc8-pr-cvs1:/tmp/cvs-serv20465
Modified Files:
ZApp_RelatableItem.py ZApp_Relationship.py
ZApp_RelationshipManager.py
Log Message:
added new relationship code..
Index: ZApp_RelatableItem.py
===================================================================
RCS file: /cvsroot/zapp/ZApp/ZApp_RelatableItem.py,v
retrieving revision 1.15
retrieving revision 1.16
diff -C2 -d -r1.15 -r1.16
*** ZApp_RelatableItem.py 2 Jun 2003 14:46:08 -0000 1.15
--- ZApp_RelatableItem.py 1 Jul 2003 22:22:03 -0000 1.16
***************
*** 8,11 ****
--- 8,12 ----
lprop = ZApp_Base.LeverProperty
+ from Products.PageTemplates.PageTemplateFile import PageTemplateFile
class ZApp_RelatableParentMixin:
***************
*** 246,251 ****
ZApp_Base.extendProperties( ZApp_RelatableItem, relatable_child_props )
- OVERRIDE = "This method should be overridden."
-
class ZApp_RelatedObject:
"""
--- 247,250 ----
***************
*** 257,260 ****
--- 256,262 ----
delete_if_orphaned = None
+ displayCustomUpdate_pt = PageTemplateFile('zpt/Generic_displayRelatedObjects', globals())
+ findNewRelationship_pt = PageTemplateFile('zpt/findNewRelationship_ui', globals())
+
_custom_skin_scripts=(
"WITH self.getObjectType() COMPUTE objectType=RESULT",
***************
*** 312,318 ****
theManager = self.getSpecialist( objectManager )
! newObject = theManager.ZApp_createNewItem( objectProperties )
! self.addObject( otherObject=newObject, objectRole=objectRole, selfRole=selfRole, createIfNone=createIfNone, contextID=contextID)
! return newObject
def addObject(self, otherObject, objectRole=None, selfRole=None, createIfNone=0, contextID=''):
--- 314,328 ----
theManager = self.getSpecialist( objectManager )
! theObject = None
!
! if objectProperties.has_key('objectID'):
! theObjectID = objectProperties.get('objectID','')
! if theObjectID:
! theObject = theManager.getItem( theObjectID)
!
! if not theObject:
! theObject = theManager.ZApp_createNewItem( objectProperties )
! self.addObject( otherObject=theObject, objectRole=objectRole, selfRole=selfRole, createIfNone=createIfNone, contextID=contextID)
! return theObject
def addObject(self, otherObject, objectRole=None, selfRole=None, createIfNone=0, contextID=''):
***************
*** 327,330 ****
--- 337,364 ----
rm.relateObjects( object1=self, object1Role=selfRole, object2=otherObject, object2Role=objectRole, createIfNone=createIfNone, contextID=contextID)
+ def removeObjectRelations(self, relationshipIDs):
+ """
+ remove the relationships with the given relationship IDs..
+ """
+ self.getRelationshipManager().removeObjectRelations( relationshipIDs)
+
+ def removeObjectRelations_ui(self, relationshipIDs, REQUEST=None):
+ """
+ remove the relationships with the given relationship IDs.. + UI fluff..
+ """
+ if relationshipIDs:
+
+ self.removeObjectRelations( relationshipIDs )
+
+ if REQUEST is not None:
+ responseURL = self.REQUEST.get('responseURL',None)
+
+ if responseURL:
+ self.REQUEST.RESPONSE.redirect(responseURL)
+
+ return self.manage_main(self, REQUEST)
+ else:
+ raise RuntimeError, "I need some ids!"
+
def removeObject(self, otherObject=None, selfRole=None, objectRole=None):
"""
***************
*** 334,341 ****
rm = self.getRelationshipManager()
rm.removeObjects(object1=self, object1Role=selfRole, object2=otherObject, object2Role=objectRole)
def relatedObjects(self, objectTypes=None, objectRoles=None, selfRoles=None):
"""
! Get related objects..
"""
if objectTypes:
--- 368,403 ----
rm = self.getRelationshipManager()
rm.removeObjects(object1=self, object1Role=selfRole, object2=otherObject, object2Role=objectRole)
+
+
+ def objectRelations(self, objectTypes=None, objectRoles=None, selfRoles=None, returnObjects=0):
+ """
+ Get info about the relationships in which I'm involved...
+
+ returns a list of dictionaries like so:
+ [
+ {'relationshipID':rid,
+ 'otherObjectID':objId,
+ 'otherManagerID':manID,
+ 'otherRole':otherRole,
+ 'selfRole':selfRole,
+ },
+ {....
+ },
+ ...
+ ]
+
+ if returnObjects is true, each dictionary also has 'otherObject':otherObject as a member.
+ """
+ if objectTypes:
+ if type(objectTypes) == type(''):
+ objectTypes = [objectTypes]
+
+ rm = self.getRelationshipManager()
+ return rm.getObjectRelations(anObject=self, objectTypes=objectTypes, objectRoles=objectRoles, selfRoles=selfRoles, returnObjects=returnObjects)
+
def relatedObjects(self, objectTypes=None, objectRoles=None, selfRoles=None):
"""
! Get related objects themselves.
"""
if objectTypes:
***************
*** 358,362 ****
return rm.getRelatedObjectContextIDs( anObject=self, objectTypes=objectTypes, objectRoles=objectRoles, selfRoles=selfRoles)
!
def nextContextID(self, objectTypes=None, objectRoles=None, selfRoles=None):
--- 420,451 ----
return rm.getRelatedObjectContextIDs( anObject=self, objectTypes=objectTypes, objectRoles=objectRoles, selfRoles=selfRoles)
!
! def editRelations_ui(self, ids, relationInfo, REQUEST=None):
! """
! edit my relationships...
! """
!
! if not ids:
! raise RuntimeError, "No ids selected!"
!
! if not relationInfo:
! raise RuntimeError, "No relationship info provided.. "
!
! rItemMan = self.getRelationshipItemManager()
!
! for relInfo in relationInfo:
! otherRIID = relInfo.get('otherRIID','')
! if otherRIID in ids:
! rItem = rItemMan.getItem(otherRIID)
! if rItem:
! rItem.change( relInfo )
!
! if REQUEST is not None:
! responseURL = self.REQUEST.get('responseURL',None)
!
! if responseURL:
! self.REQUEST.RESPONSE.redirect(responseURL)
!
! return self.manage_main(self, REQUEST)
def nextContextID(self, objectTypes=None, objectRoles=None, selfRoles=None):
Index: ZApp_Relationship.py
===================================================================
RCS file: /cvsroot/zapp/ZApp/ZApp_Relationship.py,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** ZApp_Relationship.py 4 May 2003 03:47:54 -0000 1.4
--- ZApp_Relationship.py 1 Jul 2003 22:22:03 -0000 1.5
***************
*** 20,35 ****
meta_type = 'ZApp Relationship'
! def newRelationshipItem(self, conditions=None, **kw):
!
! if conditions == None:
! conditions = {}
!
! conditons.update(kw)
! conditons['relationshipID'] = self.id
!
! riH = self.getRelationshipItemHandler()
! newRI = riH.ZApp_createNewItem( conditions )
! return newRI
ZApp_Base.extendProperties( ZApp_Relationship, props )
--- 20,33 ----
meta_type = 'ZApp Relationship'
! def getRelationshipItems(self, excludeIDs = None):
! """
! get all the relItems in this relationship.
! """
! rItemMan = self.getRelationshipItemManager()
! results = rItemMan.ZApp_getItems(relationshipID = self.id)
! if excludeIDs:
! results = filter(lambda x: x.id not in excludeIDs, results)
! return results
ZApp_Base.extendProperties( ZApp_Relationship, props )
Index: ZApp_RelationshipManager.py
===================================================================
RCS file: /cvsroot/zapp/ZApp/ZApp_RelationshipManager.py,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** ZApp_RelationshipManager.py 30 Jun 2003 20:25:05 -0000 1.1
--- ZApp_RelationshipManager.py 1 Jul 2003 22:22:03 -0000 1.2
***************
*** 17,21 ****
meta_type = 'Z App Relationship Manager'
!
def relateObjects(self, object1, object2, object1Role=None, object2Role=None, createIfNone=0, contextID=''):
"""
--- 17,44 ----
meta_type = 'Z App Relationship Manager'
!
! def getRoleManager(self):
! """
! return the role object manager..
! """
! return getattr(self, rRolesID)
!
! def getRelationshipItemManager(self):
! """
! return the manager of relationship items..
! """
! return getattr(self, rItemsID)
!
! def getRelationshipItems(self, excludeIDs = None):
! """
! get all the relItems in this relationship.
! """
!
! rItemMan = self.getRelationshipItemManager()
! results = rItemMan.ZApp_getItems(relationshipID = self.id)
! if excludeIDs:
! results = filter(lambda x,eids=excludeIDs: x.id not in eids, results)
! return results
!
def relateObjects(self, object1, object2, object1Role=None, object2Role=None, createIfNone=0, contextID=''):
"""
***************
*** 23,28 ****
"""
newR = self.ZApp_createNewItem()
! relIRolesMan = getattr(self, rRolesID)
! relItems = getattr(self, rItemsID)
role1ID=''
--- 46,51 ----
"""
newR = self.ZApp_createNewItem()
! relIRolesMan = self.getRoleManager()
! relItems = self.getRelationshipItemManager()
role1ID=''
***************
*** 42,51 ****
! rItem1 = getattr(self, rItemsID).ZApp_createNewItem(relationshipID=newR.id, objectID=object1.id, objectManager=object1.Manager, roleID=role1ID)
! rItem2 = getattr(self, rItemsID).ZApp_createNewItem(relationshipID=newR.id, objectID=object2.id, objectManager=object2.Manager, roleID=role2ID, contextID=contextID)
def removeObjects(self, object1, object2=None, object1Role=None, object2Role=None, object2Type=None, object2Manager=None):
"""
! Relate two objects..
"""
role1ID=''
--- 65,84 ----
! rItem1 = relItems.ZApp_createNewItem(relationshipID=newR.id, objectID=object1.id, objectManager=object1.Manager, roleID=role1ID)
! rItem2 = relItems.ZApp_createNewItem(relationshipID=newR.id, objectID=object2.id, objectManager=object2.Manager, roleID=role2ID, contextID=contextID)
!
! def removeObjectRelations(self, relationshipIDs):
! """
! remove the relationships with the given relationship IDs..
! """
+ rItemsMan = self.getRelationshipItemManager()
+
+ for rItem in rItemsMan.ZApp_getItems( relationshipID = relationshipIDs):
+ rItem.manage_delete()
+
def removeObjects(self, object1, object2=None, object1Role=None, object2Role=None, object2Type=None, object2Manager=None):
"""
! Remove object relations between two objects..
"""
role1ID=''
***************
*** 64,68 ****
o2Manger=object2Manager
! relIRolesMan = getattr(self, rRolesID)
if object1Role:
--- 97,102 ----
o2Manger=object2Manager
! relIRolesMan = self.getRoleManager()
! rItemsMan = self.getRelationshipItemManager()
if object1Role:
***************
*** 75,81 ****
relationshipIDs = []
! for rItem1 in getattr(self, rItemsID).ZApp_getItems(objectID=object1.id, objectManager=object1.Manager, roleID=role1ID):
theRID=rItem1.relationshipID
! for rItem2 in getattr(self, rItemsID).ZApp_getItems(relationshipID=rItem1.relationshipID, objectManager=o2Manager, roleID=role2ID):
if (not ((rItem2.objectID == object1.id) and (rItem2.objectManager == object2.Manager))):
rItem2.manage_delete()
--- 109,115 ----
relationshipIDs = []
! for rItem1 in rItemsMan.ZApp_getItems(objectID=object1.id, objectManager=object1.Manager, roleID=role1ID):
theRID=rItem1.relationshipID
! for rItem2 in rItemsMan.ZApp_getItems(relationshipID=rItem1.relationshipID, objectManager=o2Manager, roleID=role2ID):
if (not ((rItem2.objectID == object1.id) and (rItem2.objectManager == object2.Manager))):
rItem2.manage_delete()
***************
*** 84,88 ****
self.commit_subtransaction()
! rItemsLeft = getattr(self, rItemsID).ZApp_getItems(relationshipID=theRID)
if len(rItemsLeft) < 2:
for ri in rItemsLeft:
--- 118,122 ----
self.commit_subtransaction()
! rItemsLeft = rItemsMan.ZApp_getItems(relationshipID=theRID)
if len(rItemsLeft) < 2:
for ri in rItemsLeft:
***************
*** 93,128 ****
relation.manage_delete()
! def getRelatedObjects(self, anObject, objectTypes=None, objectRoles=None, selfRoles=None):
"""
! find related objects... this is the 'brute force' approach.....
"""
! myRelationshipItems = getattr(self, rItemsID).ZApp_getItems( objectID=anObject.id, objectManager=anObject.Manager)
! riMan = getattr(self, rRolesID)
results = []
for anRI in myRelationshipItems:
! if selfRoles:
! RIRole = riMan.getItem(anRI.roleID)
! if (not RIRole) or (RIRole.name not in selfRoles):
! continue
- theRelationshipItems = getattr(self, rItemsID).ZApp_getItems( relationshipID=anRI.relationshipID )
for rItem in theRelationshipItems:
if objectRoles:
- RIRole = riMan.getItem(rItem.roleID)
if not RIRole:
continue
! elif RIRole.name not in objectRoles:
continue
! if (not ((rItem.objectManager == anObject.Manager) and (rItem.objectID == anObject.id))):
theObject = rItem.getObject()
! if objectTypes and (theObject.objectType not in objectTypes):
continue
! results.append(theObject)
return results
--- 127,218 ----
relation.manage_delete()
! def getObjectRelations(self, anObject, objectTypes=None, objectRoles=None, selfRoles=None, returnObjects=0):
"""
! get info about relationships in which anObject is involved..
!
! returns a list of dictionaries like so:
! [
! {
! 'relationshipID': the relationshipID,
! 'otherRIID': other object's relationshipItemID,
! 'otherObjectID': other object's ID,
! 'otherManagerID': other object's Manager,
! 'otherRole': other object's role..
! 'otherContextID': other object's contextID,
! 'selfRole': my roleName,
! 'selfRIID': my relationshipItemID,
! 'selfContextID': my contextID,
! },
! {....
! },
! ...
! ]
!
! if returnObjects is true, each dictionary also has 'otherObject':otherObject as a member.
!
"""
+ rItemsMan = self.getRelationshipItemManager()
! myRelationshipItems = rItemsMan.ZApp_getItems( objectID=anObject.id, objectManager=anObject.Manager)
! riMan = self.getRoleManager()
results = []
for anRI in myRelationshipItems:
! selfRIID= anRI.id
! selfRIRole = anRI.roleID and riMan.getItem(anRI.roleID)
! selfRIRoleName = (selfRIRole or '') and selfRIRole.name
! if selfRoles and (selfRIRoleName not in selfRoles):
! continue
!
! theRelationshipItems = rItemsMan.ZApp_getItems( relationshipID=anRI.relationshipID )
for rItem in theRelationshipItems:
+ if rItem.id == selfRIID:
+ continue # reject my own RI...
+
+ RIID = rItem.id
+ RIRole = rItem.roleID and riMan.getItem(rItem.roleID)
+ RIRoleName = (RIRole or '') and RIRole.name
if objectRoles:
if not RIRole:
continue
! elif RIRoleName not in objectRoles:
continue
! theResult = {}
!
! if objectTypes or returnObjects:
theObject = rItem.getObject()
! if objectTypes and theObject and (theObject.objectType not in objectTypes):
continue
! if returnObjects:
! theResult['otherObject'] = theObject
!
! theResult.update({
! 'relationshipID':rItem.relationshipID,
! 'otherRIID':RIID,
! 'otherObjectID':rItem.objectID,
! 'otherManagerID':rItem.objectManager,
! 'otherRole':RIRoleName,
! 'otherContextID':rItem.contextID,
! 'selfRole':selfRIRoleName,
! 'selfRIID':selfRIID,
! 'selfContextID':anRI.contextID,
! })
!
! results.append( theResult )
return results
+
+
+ def getRelatedObjects(self, anObject, objectTypes=None, objectRoles=None, selfRoles=None):
+ """
+ find related objects... this is the 'brute force' approach.....
+ """
+
+ results = self.getObjectRelations( anObject, objectTypes=objectTypes, objectRoles=objectRoles, selfRoles=selfRoles, returnObjects=1)
+
+ return [x['otherObject'] for x in results]
***************
*** 132,137 ****
"""
! myRelationshipItems = getattr(self, rItemsID).ZApp_getItems( objectID=anObject.id, objectManager=anObject.Manager)
! riMan = getattr(self, rRolesID)
results = []
--- 222,227 ----
"""
! myRelationshipItems = self.getRelationshipItemManager().ZApp_getItems( objectID=anObject.id, objectManager=anObject.Manager)
! riMan = self.getRoleManager()
results = []
***************
*** 143,147 ****
continue
! theRelationshipItems = getattr(self, rItemsID).ZApp_getItems( relationshipID=anRI.relationshipID )
for rItem in theRelationshipItems:
if objectRoles:
--- 233,237 ----
continue
! theRelationshipItems = self.getRelationshipItemManager().ZApp_getItems( relationshipID=anRI.relationshipID )
for rItem in theRelationshipItems:
if objectRoles:
|