Annotation of Examples/EnterpriseObjects/Validation/AppController.m, revision 1.1.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.