Annotation of Examples/EnterpriseObjects/Validation/AppController.m, revision 1.1

1.1     ! root        1: 
        !             2: #import "AppController.h"
        !             3: 
        !             4: @implementation AppController
        !             5: 
        !             6: - appDidInit:sender
        !             7: {
        !             8:     EODatabaseChannel *channel = [(id)[controller dataSource] databaseChannel];
        !             9:     [channel setDelegate:self];
        !            10: 
        !            11:     // Set a controller in memory sort by department and then lastName
        !            12:     [controller setSortOrdering:[NSArray arrayWithObjects:
        !            13:         [EOKeySortOrdering keyOrderingWithKey:@"departmentName" ordering:NSOrderedAscending],
        !            14:         [EOKeySortOrdering keyOrderingWithKey:@"lastName" ordering:NSOrderedAscending], nil]];
        !            15:         
        !            16:     [controller fetch];
        !            17:     return self;
        !            18: }
        !            19: 
        !            20: - validatesOnChange:sender
        !            21: {
        !            22:     [self setValidatesImmediately:[sender intValue]];
        !            23:     return self;
        !            24: }
        !            25: 
        !            26: - saveChanges:sender
        !            27: {
        !            28:     // we can't call saveToDataSource directly since it doesn't automatically
        !            29:     // call saveToObjects first (bummer!)
        !            30:     if ([controller saveToObjects] && [controller saveToDataSource])
        !            31:         return self;
        !            32:     return nil;
        !            33: }
        !            34: 
        !            35: 
        !            36: - (NSDictionary *)databaseChannel:channel
        !            37:     willRefetchObject:object
        !            38:     fromSnapshot:(NSDictionary *)snapshot
        !            39: {
        !            40:     // Our object is being refetched, and will be refreshed with the given
        !            41:     // snapshot.  Snapshot is really the set of class properties that would be
        !            42:     // passed to us in takeValuesFromDictionary (not the one we'd get from
        !            43:     // snapshotForObject).
        !            44:     // PROBLEM: if we have uncommitted edits to this object, they could get
        !            45:     // reset by refetching.
        !            46:     // OPTIONS:
        !            47:     // 1) Diff our object against it current (old) snapshot and see if we've
        !            48:     //    made any changes.  Only allow the update it we have.  Might be slow.
        !            49:     // 2) If our EO keeps an explicit lock flag, we could check if it's locked
        !            50:     //    for update.  Sadly, we have no such lock.
        !            51:     // 3) Always ignore the refetch.  Disadvantage: we'll never be able to
        !            52:     //    refresh to see new changes made by others in the server.
        !            53:     // Since efficiency is not a major issue in this example, we'll choose #1.
        !            54:     NSDictionary *originalSnapshot = [[channel databaseContext] snapshotForObject:object];
        !            55:     NSDictionary *currentSnapshot = [object valuesForKeys:[originalSnapshot allKeys]];
        !            56:     if (![originalSnapshot isEqual:currentSnapshot]) {
        !            57:         // Conflicting update
        !            58:         // NSLog(@"Attempt to refetch a modified object with current snapshot: %@", currentSnapshot);
        !            59:         return nil;
        !            60:     }
        !            61:     // Okay, no conflict, so allow the update
        !            62:     return snapshot;
        !            63: }
        !            64: 
        !            65: @end

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.