Changeset 462

Show
Ignore:
Timestamp:
Wed Jun 18 20:59:23 2008
Author:
Alexander
Message:

prepare to redirect fact type shapes to fact reading table

Files:

Legend:

Unmodified
Added
Removed
Modified
  • ganttpv/trunk/ORM.py

    r461 r462  
    149 149     parallel = dist(pointA, junction) / dist(pointA, pointB)  
    150 150     orthagonal = dist(junction, pointC)  
      151     # if follower is clockwise from the line, make orthagonal negative  
    151 152     if ((pointB[1] > pointA[1] and pointC[0] < junction[0]) or  
    152           (pointB[1] == pointA[1] and pointC[1] < junction[1]) or  
    153           (pointB[1] < pointA[1] and pointC[0] > junction[0])):  
      153         (pointB[1] < pointA[1] and pointC[0] > junction[0]) or  
      154         (pointB[0] > pointA[0] and pointC[1] > junction[1]) or  
      155         (pointB[0] < pointA[0] and pointC[1] < junction[1])):  
    154 156         orthagonal = -orthagonal  
    155           # if follower is clockwise from the line, make orthagonal negative  
    156 157     follower._SetInShell('parallel', parallel)  
    157 158     follower._SetInShell('orthagonal', orthagonal)  
     
    167 168     ''' Add report row, add target object'''  
    168 169     if debug: print report_object  
    169       project = report_object.Get('Project')  
    170       projectid = project.ID  
      170     projectid = report_object.ProjectID  
    171 171     today = Data.TodayString()  
    172 172  
     
    205 205     ''' Add report row, add target object, connect to end objects'''  
    206 206     if debug: print 'adding %s to %s' % (shape_type, report_object)  
    207       project = report_object.Get('Project')  
    208       projectid = project.ID  
      207     projectid = report_object.ProjectID  
    209 208     today = Data.TodayString()  
    210 209  
     
    215 214     model[nodea.TableName + 'ID'] = nodea.TableID  
    216 215     if shape_type == 'ORMRoleConnectorShape':  
    217   ##        fact = nodea.Get('Target')  
    218   ##        fact.Nary += 1  
    219   ##        model['Seq'] = fact.Nary  
    220 216         object_type = 'ORMRole'  
    221 217         model['ORMObjectTypeID'] = nodeb.TableID  
     
    230 226     object_id = Data.Update(model)['ID']  
    231 227     if shape_type == 'ORMRoleConnectorShape':  
    232           fact = nodea.Target  
      228         fact = fact_object = nodea.Target  
    232 228         AddRole(fact, fact.db.GetObject('ORMRole', object_id))  
    233 229  
     
    241 237     newrowid = Data.Update(graphic)['ID']  
    242 238  
    243   ##    rlist = Data.GetRowList(report_object.ID)  # insert row at beginning of row list  
    244   ##    rlist.append(newrowid)  
    245   ##    Data.ReorderReportRows(report_object.ID, rlist)  
    246    
    247 239     return report_object.db.GetObject('GraphicObject', newrowid)  
    248 240  
     
    250 242     ''' Add report row, add target object, connect to end objects'''  
    251 243     if debug: print 'adding %s to %s' % (shape_type, report_object)  
    252       project = report_object.Get('Project')  
    253       projectid = project.ID  
      244     projectid = report_object.ProjectID  
    254 245     today = Data.TodayString()  
    255 246  
     
    259 250     model = {'ProjectID': projectid, 'DateAdded': today}  
    260 251     model[nodea.TableName + 'ID'] = nodea.TableID  
    261   #    if object_type == 'ORMFactReading':  
    262   #        fact = nodea.Get('Target')  
    263   #        fact.Nary += 1  
    264   #        model['Seq'] = fact.Nary  
    265   #    else:  
    266   #        model[nodeb.TableName + 'ID'] = nodeb.TableID  
    267 252     model['Table'] = object_type  
    268   ##    object_id = Data.Update(model)['ID']  
    269 253     if shape_type == 'ORMFactReadingShape':  
    270 254         model2 = {'Table': 'ORMRoleSequence', 'Seq': 1,  
     
    274 258  
    275 259         object_id = Data.Update(model)['ID']  
    276           nodea.Target.ORMFactReadingID = object_id  # pointer back  
    277            
      260         fact_object = nodea.Target  
      261         fact_object.ORMFactReadingID = object_id  # pointer back  
    278 262     elif shape_type == 'ORMRoleNameShape':  # is this really needed  
    279 263         object_type = 'ORMRole'  
    280           object_id = nodea.Get('Target').ID   # same target as nodea  
    281   ##        nodea.Get('Target').ORMRoleNameID = object_id  # pointer back  
      264         object_id = nodea.TableID   # same target as nodea  
    282 265     elif shape_type == 'ORMObjectTypeShape':  
    283 266         model['Type'] = 'Entity'  
     
    294 277     newrowid = Data.Update(graphic)['ID']  
    295 278  
    296   ##    rlist = Data.GetRowList(report_object.ID)  # insert row at beginning of row list  
    297   ##    rlist.append(newrowid)  
    298   ##    Data.ReorderReportRows(report_object.ID, rlist)  
    299    
    300 279     return report_object.db.GetObject('GraphicObject', newrowid)  
    301 280  
     
    503 482     def GetEnds(self):  
    504 483         x, y = self.GetPos()  
    505           nodea = self.Get('NodeA')  
    506           nodeb = self.Get('NodeB')  
      484         nodea, nodeb = self.NodeA, self.NodeB  
    507 485         endb = nodeb.GetPos()  
    508 486         enda = nodea.AdjustEnd(endb)  
     
    516 494  
    517 495     def Follow(self, remove=None):  
    518           nodea = self.Get('NodeA')  # these objects might not already be in the diagram  
    519           nodeb = self.Get('NodeB')  
      496         nodea = self.NodeA  # these objects might not already be in the diagram  
      497         nodeb = self.NodeB  
    520 498         if not remove:  
    521 499             nodea.AddFollower(self)  # must be the right subtype to have this method  
     
    527 505 class ORMFollowText(ORMBox):  
    528 506     def Follow(self, remove=None):  
    529           nodea = self.Get('NodeA')  # these objects might not already be in the diagram  
      507         nodea = self.NodeA  # these objects might not already be in the diagram  
    529 507         if not remove:  
    530 508             nodea.AddFollower(self)  # must be the right subtype to have this method  
     
    535 513 class ORMObjectTypeShape(ORMBox):  
    536 514     def Follow(self, remove=None):  
    537           nodea = self.Get('NodeA')  
      515         nodea = self.NodeA  
    537 515         if nodea:  # if objectified fact type  
    538 516             if not remove:  
     
    543 521  
    544 522     def OnBottom(self):  
    545           nodea = self.Get('NodeA')  
      523         nodea = self.NodeA  
    545 523         if nodea:  # if objectified fact type  
    546 524             nodea.OnTop()  
     
    605 583  
    606 584         if self.NodeA:  # objectified fact type  
    607               box_w = role_box_width * self.NodeA.Target.Nary + left_margin + right_margin + 4  
      585             fact_object = self.NodeA.Target  
      586             box_w = role_box_width * fact_object.Nary + left_margin + right_margin + 4  
    608 587             box_h = role_box_width + top_margin + bottom_margin  
    609 588  
     
    990 969         '''use this to delete a role from a fact type'''  
    991 970         fact_object = self.Target  
    992           # reading_object = self.Target.ORMFactReading  
      971         reading_object = self.Target.ORMFactReading  
    992 971  
    993 972         DeleteRole(fact_object, role)  
     
    997 976         '''use this to delete a role from a fact type'''  
    998 977         fact_object = self.Target  
    999           # reading_object = self.Target.ORMFactReading  
      978         reading_object = self.Target.ORMFactReading  
    999 978  
    1000 979         AddRole(fact_object, role)  
     
    1014 993                 r.Seq = i  
    1015 994  
      995     delete_role.Delete()  
    1016 996     roles = fact_object.GetList('ORMRole')  
    1017       roles.sort(cmp=lambda x,y: cmp(x.Seq, y.Seq))  
    1018       i = 0  
    1019       for r in roles:  
    1020           if r == delete_role:  
    1021               r.Delete()  
    1022           else:  # renumber remaining roles  
    1023               i += 1  
    1024               r.Seq = i  
    1025       fact_object.Nary = len(roles) - 1  
      997     fact_object.Nary = len(roles)  
    1026 998  
    1027 999 def AddRole(fact_object, add_role):  # in a separate function "just in case"  
     
    1039 1011     add_role.ORMFactTypeID = fact_object.ID  
    1040 1012     roles = fact_object.GetList('ORMRole')  
    1041       fact_object.Nary = add_role.Seq = len(roles)  
      1013     fact_object.Nary = len(roles)  
    1041 1013  
    1042 1014 class ORMFactReadingShape(ORMFollowText):  
     
    1424 1396         orm_object = self.Get('Target')  
    1425 1397         x, y = self.GetPos()  
    1426           nodea = self.Get('NodeA')  
    1427           nodeb = self.Get('NodeB')  
      1398         nodea, nodeb = self.NodeA, self.NodeB  
    1428 1399  
    1429 1400         # connect base on reading sequence, not fact sequence  
    1430           seq = [ x.Seq for x in nodea.Target.ORMFactReading.ORMRoleSequence.GetList('ORMRolePosition')  
      1401         fact_object = nodea.Target  
      1402         reading_object = nodea.Target.ORMFactReading  
      1403         seq = [ x.Seq for x in reading_object.ORMRoleSequence.GetList('ORMRolePosition')  
    1431 1404                 if x.ORMRole.ID == orm_object.ID ][0]  
    1432 1405         endb = nodeb.GetPos()  
     
    1442 1415          
    1443 1416         x, y = self.GetPos()  
    1444           nodea = self.Get('NodeA')  # these objects might not already be in the diagram  
    1445           nodeb = self.Get('NodeB')  
      1417         nodea = self.NodeA  # these objects might not already be in the diagram  
      1418         nodeb = self.NodeB  
    1446 1419  
    1447 1420         # connect base on reading sequence, not fact sequence  
    1448   ##        seq = orm_object.Seq or 1  # the old ways was simpler  
    1449           seq = [ x.Seq for x in nodea.Target.ORMFactReading.ORMRoleSequence.GetList('ORMRolePosition')  
      1421         reading_object = nodea.Target.ORMFactReading  
      1422         seq = [ x.Seq for x in reading_object.ORMRoleSequence.GetList('ORMRolePosition')  
    1450 1423                 if x.ORMRole.ID == orm_object.ID ][0]  
    1451 1424         endb = nodeb.GetPos()  
     
    1520 1493  
    1521 1494         x, y = self.GetPos()  # treat this as the center of the shape  
    1522           nodea = self.Get('NodeA')  # these objects might not already be in the diagram  
    1523           nodeb = self.Get('NodeB')  
      1495         nodea = self.NodeA  # these objects might not already be in the diagram  
      1496         nodeb = self.NodeB  
    1524 1497  
    1525 1498         enda = nodea.GetPos()  
     
    1572 1545  
    1573 1546         x, y = self.GetPos()  
    1574           nodea = self.Get('NodeA')  
    1575           nodeb = self.Get('NodeB')  
      1547         nodea, nodeb = self.NodeA, self.NodeB  
    1576 1548  
    1577 1549         enda = nodea.GetPos()  
     
    1603 1575     def GetEnds(self):  
    1604 1576         x, y = self.GetPos()  
    1605           nodea = self.Get('NodeA')  
    1606           nodeb = self.Get('NodeB')  
      1577         nodea, nodeb = self.NodeA, self.NodeB  
      1578         fact_object = nodea.Target  
      1579         reading_object = nodea.Target.ORMFactReading  
    1607 1580  
    1608 1581         constraintlist = self.Get('Target')  
    1609 1582         cr_list = constraintlist.GetList('ORMRolePosition')  
    1610           fact_roles = [cr.ORMRole for cr in cr_list if cr.ORMRole.ORMFactTypeID == nodea.Target.ID]  
      1583         fact_roles = [cr.ORMRole for cr in cr_list if cr.ORMRole.ORMFactTypeID == fact_object.ID]  
    1610 1583  
    1611           seq_xref = dict([ (x.ORMRoleID, x.Seq) for x in nodea.Target.ORMFactReading.ORMRoleSequence.GetList('ORMRolePosition') ])  
      1584         seq_xref = dict([ (x.ORMRoleID, x.Seq) for x in reading_object.ORMRoleSequence.GetList('ORMRolePosition') ])  
    1611 1584         seq_numbers = [seq_xref[role.ID] for role in fact_roles]  
    1612 1585         if not seq_numbers: return  
     
    1631 1604          
    1632 1605         x, y = self.GetPos()  
    1633           nodea = self.Get('NodeA')  # these objects might not already be in the diagram  
    1634           nodeb = self.Get('NodeB')  
      1606         nodea = self.NodeA  # these objects might not already be in the diagram  
      1607         nodeb = self.NodeB  
      1608         fact_object = nodea.Target  
      1609         reading_object = nodea.Target.ORMFactReading  
    1635 1610  
    1636 1611         constraintlist = self.Get('Target')  
    1637 1612         cr_list = constraintlist.GetList('ORMRolePosition')  
    1638 1613         # remove constraint roles that aren't for this fact  
    1639           fact_roles = [cr.ORMRole for cr in cr_list if cr.ORMRole.ORMFactTypeID == nodea.Target.ID]  
      1614         fact_roles = [cr.ORMRole for cr in cr_list if cr.ORMRole.ORMFactTypeID == fact_object.ID]  
    1639 1614  
    1640   #        seq_numbers = [role.Seq for role in fact_roles]    # old way  
    1641           seq_xref = dict([ (x.ORMRoleID, x.Seq) for x in nodea.Target.ORMFactReading.ORMRoleSequence.GetList('ORMRolePosition') ])  
      1615         seq_xref = dict([ (x.ORMRoleID, x.Seq) for x in reading_object.ORMRoleSequence.GetList('ORMRolePosition') ])  
    1642 1616         seq_numbers = [seq_xref[role.ID] for role in fact_roles]  
    1643 1617         if not seq_numbers: return  
     
    1707 1681  
    1708 1682         x, y = self.GetPos()  
    1709           nodea = self.Get('NodeA')  
    1710           nodeb = self.Get('NodeB')  
      1683         nodea, nodeb = self.NodeA, self.NodeB  
    1711 1684  
    1712 1685         enda = nodea.GetPos()  
     
    2397 2370             if factshape.Target.ID in fact_type_ids:  
    2398 2371                 new_shape = self.AddConnector('ORMConstraintConnectorShape', factshape, shape)  
    2399                   new_shape.TableName = clist.Table  # so 'Target' will work  
    2400                   new_shape.TableID = clist.ID  
      2372                 new_shape.Target = clist  
    2401 2373                 self.RedrawID(factshape.dcid)  
    2402 2374                 self.RedrawID(new_shape.dcid)