Changeset 301

Show
Ignore:
Timestamp:
01/31/08 19:10:07 (1 year ago)
Author:
johnbywater
Message:

Refactored temporal property model classes.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/src/dm/dom/temporal.py

    r298 r301  
    3131 
    3232    def create(self, recordedValue, loadedList={}, dateCreated=None): 
    33         #print "SAVE: Creating new temporal: %s" % recordedValue 
    3433        return super(TemporalCollection, self).create( 
    3534            recordedValue=recordedValue, 
     
    3938 
    4039 
    41 class BitemporalActualCollection(BaseTemporalCollection): 
     40class BitemporalActualCollection(TemporalCollection): 
    4241 
    4342    def getReferenceTime(self): 
    4443        return self.timepoint.actual 
    45  
    46     def create(self, recordedValue, loadedList={}, dateCreated=None): 
    47         #print "SAVE: Creating new bitemporal actual %s is %s as at %s" % (self, recordedValue, self.getReferenceTime()) 
    48         obj = super(BitemporalActualCollection, self).create( 
    49             recordedValue=recordedValue, 
    50             loadedList=loadedList, 
    51             dateCreated=dateCreated 
    52         ) 
    53         #print obj 
    54         return obj 
    5544 
    5645 
     
    5847 
    5948    def create(self, recordedValue, loadedList={}, dateCreated=None): 
    60         #print "SAVE: Creating new bitemporal history for '%s'." % recordedValue 
    61         oldRecorded = super(BitemporalCollection, 
    62             self).findFirstDomainObject(loadedList=loadedList) 
    63         newRecorded = super(BitemporalCollection, 
    64             self).create(loadedList=loadedList) 
    65         if not newRecorded: 
    66             raise Exception, "Failed to create a new bitemporal record." 
    67         actualsMeta = newRecorded.meta.attributeNames['recordedValue'] 
    68         newActuals = actualsMeta.createTemporalCollection(newRecorded) 
    69         if oldRecorded: 
    70             #print "SAVE: Copying old bitemporal actual records...." 
    71             oldActuals = actualsMeta.createTemporalCollection(oldRecorded) 
     49        oldHistory = self.findCurrentHistory(loadedList=loadedList) 
     50        newHistory = self.createNewHistory(loadedList=loadedList) 
     51        if oldHistory: 
     52            oldActuals = oldHistory.getActualsRegister() 
     53            newActuals = newHistory.getActualsRegister() 
    7254            for oldActual in oldActuals: 
    73                 #print "SAVE: Copying old bitemporal actual: %s" % oldActual.recordedValue 
    7455                newActual = newActuals.create( 
    7556                    recordedValue=oldActual.recordedValue, 
     
    7758                    dateCreated=oldActual.dateCreated 
    7859                ) 
    79                 #print "SAVE: %s" % newActual 
    80         else: 
    81             #print "SAVE: No old history found...." 
    82             pass 
    83         #print "SAVE: Setting actual bitemporal value" 
    84         newRecorded.recordedValue = recordedValue 
    85         newRecorded.save() 
    86         return newRecorded 
     60        newHistory.recordedValue = recordedValue 
     61        newHistory.save() 
     62        return newHistory 
     63 
     64    def findCurrentHistory(self, loadedList={}): 
     65        return super( 
     66            BitemporalCollection, self 
     67        ).findFirstDomainObject(loadedList=loadedList) 
     68 
     69    def createNewHistory(self, loadedList={}): 
     70        return super( 
     71            BitemporalCollection, self 
     72        ).create(loadedList=loadedList) 
    8773 
    8874    def findFirstDomainObject(self, loadedList={}): 
    89         oldRecorded = super(BitemporalCollection, self).findFirstDomainObject( 
    90             loadedList=loadedList, 
    91         ) 
    92         if not oldRecorded: 
     75        history = self.findCurrentHistory(loadedList=loadedList) 
     76        if history: 
     77            actualsRegister = history.getActualsRegister() 
     78            return actualsRegister.findFirstDomainObject(loadedList) 
     79        else: 
    9380            return None 
    94         actualsMeta = oldRecorded.meta.attributeNames['recordedValue'] 
    95         actualsRegister = actualsMeta.createTemporalCollection(oldRecorded) 
    96         return actualsRegister.findFirstDomainObject(loadedList) 
    9781 
     82    def getActualsRegister(self, history): 
     83        actualsMeta = history.meta.attributeNames['recordedValue'] 
     84        return actualsMeta.createTemporalCollection(history) 
    9885 
    9986 
     
    10390    isConstant = True 
    10491 
    105     parent = Integer(default=1)           # Will be overridden. 
    106     recordedValue = String(default='')    # Will be overridden. 
    107     dateCreated = DateTime(               # This stays.... 
     92    dateCreated = DateTime( 
    10893        isIndexed=True, 
    10994        isRequired=True, 
    11095    ) 
     96    parent = Integer(default=1)           # Abstract. 
     97    recordedValue = String(default='')    # Abstract. 
    11198 
    11299    sortAscending = False 
     
    125112 
    126113    def getSortOnValue(self): 
    127         value = (self.dateCreated, self.id) 
    128         return value 
     114        return (self.dateCreated, self.id) 
    129115 
    130116 
     
    133119    registerClass = BitemporalCollection 
    134120 
     121    def getActualsRegister(self): 
     122        actualsMeta = self.meta.attributeNames['recordedValue'] 
     123        return actualsMeta.createTemporalCollection(self) 
    135124