Annotation of Examples/EnterpriseObjects/SHLExamples/DataSource/DataSource.m, revision 1.1

1.1     ! root        1: /*--------------------------------------------------------------------------
        !             2:  *
        !             3:  *     You may freely copy, distribute, and reuse the code in this example.
        !             4:  *     SHL Systemhouse disclaims any warranty of any kind, expressed or  
        !             5:  *     implied, as to its fitness for any particular use.
        !             6:  *
        !             7:  *
        !             8:  *     DataSource
        !             9:  *
        !            10:  *     Inherits From:          NSObject
        !            11:  *
        !            12:  *     Conforms To:            EOQualifiedDataSources, EORollbackDataSources
        !            13:  *
        !            14:  *     Declared In:            DataSource.h
        !            15:  *
        !            16:  *
        !            17:  *------------------------------------------------------------------------*/
        !            18: #import "DataSource.h"
        !            19: #import "Motorcycle.h"
        !            20: #import <foundation/NSUtilities.h>
        !            21: #import <appkit/Application.h>
        !            22: 
        !            23: #define print_trace [[NXApp delegate] perform: @selector (console:) with:\
        !            24: [NSString stringWithFormat: @"DATASOURCE  %s\n", sel_getName(_cmd)]]
        !            25: 
        !            26: 
        !            27: 
        !            28: 
        !            29: @implementation DataSource
        !            30: 
        !            31: /*--------------------------------------------------------------------------
        !            32:  *     EODataSources Protocol
        !            33:  *
        !            34:  *  The EODataSources protocol defines the interface for a source of
        !            35:  *  data-bearing objects retrieved from some external store, such as an RDBMS.
        !            36:  *  EODataSources uses a simple insert/delete/update/fetch model.
        !            37:  * 
        !            38:  *  Changes to the objects provided by a data source are made in two phases.
        !            39:  *  First, you can modify an object independently of the data source.  These
        !            40:  *  changes don't affect the external store until you send an -insertObject:,
        !            41:  *  -deleteObject:, or -updateObject: message.  For example, if you release an
        !            42:  *  object you received from the data source, it isn't deleted from the
        !            43:  *  external store.  Invoking one of the messages listed sends the changes
        !            44:  *  associated with the object to the external store.  You must invoke
        !            45:  *  -saveObjects to make your changes permanent.  If an external store supports
        !            46:  *  rolling back of changes you can invoke -rollback (declared in the
        !            47:  *  EORollbackDataSources protocol) to undo the changes made since the last
        !            48:  *  -saveObjects message.
        !            49:  *
        !            50:  *------------------------------------------------------------------------*/
        !            51: - (NSArray *) keys
        !            52: {
        !            53:     // Returns the names of the keys that describe the data-bearing objects.
        !            54: 
        !            55:        print_trace;
        !            56:        return [NSArray arrayWithObject: @"Model"];
        !            57: }
        !            58: 
        !            59: 
        !            60: - createObject
        !            61: {
        !            62:     // Returns a new data bearing object with no values set, or nil if the
        !            63:     // data source won't allow object insertion.  You're responsible for
        !            64:     // assigning a proper primary key.
        !            65: 
        !            66:        print_trace;
        !            67:        return [[Motorcycle alloc] init];
        !            68: }
        !            69: 
        !            70: - coerceValue: value forKey: (NSString *)key
        !            71: {
        !            72:     return value;
        !            73: }
        !            74: 
        !            75: - (BOOL) insertObject: object
        !            76: {
        !            77:     // Inserts object into the data source.  Returns YES on success, NO on
        !            78:     // failure for any reason.
        !            79: 
        !            80:        print_trace;
        !            81: 
        !            82:        if ([object isKindOf: [Motorcycle class]] == NO)  return NO;
        !            83: 
        !            84:        if (workingStore == nil) 
        !            85:                workingStore = [[NSMutableArray allocWithZone: [self zone]]
        !            86:                         initWithCapacity: 1];
        !            87: 
        !            88:        [workingStore addObject: object];
        !            89:        return YES;
        !            90: }
        !            91: 
        !            92: 
        !            93: - (BOOL) deleteObject: object
        !            94: {
        !            95:     // Deletes object from the data source.  Returns YES on success, NO on
        !            96:     // failure for any reason.
        !            97: 
        !            98:        print_trace;
        !            99: 
        !           100:        if ([object isKindOf: [Motorcycle class]] == NO)  return NO;
        !           101:        if (workingStore == nil)  return NO;
        !           102:        
        !           103:        [workingStore removeObject: object];
        !           104:        return YES;
        !           105: }
        !           106: 
        !           107: 
        !           108: - (BOOL) updateObject: object
        !           109: {
        !           110:     // Saves changes to object to the data source.  Returns YES on success,
        !           111:     // NO on failure for any reason.
        !           112: 
        !           113:        print_trace;
        !           114:        return YES;
        !           115: }
        !           116: 
        !           117: 
        !           118: - (NSArray *) fetchObjects
        !           119: {
        !           120:     // Returns an array of the data-bearing objects in the data source.
        !           121: 
        !           122:        print_trace;
        !           123:        return persistentStore;
        !           124: }
        !           125: 
        !           126: 
        !           127: - (BOOL) saveObjects
        !           128: {
        !           129:     // Saves objects to persistent storage, if needed.  Returns YES on
        !           130:     // success, NO on failure for any reason.
        !           131: 
        !           132:        print_trace;
        !           133: 
        !           134:        if (persistentStore == nil) 
        !           135:                persistentStore = [[NSMutableArray allocWithZone: [self zone]]
        !           136:                         initWithCapacity: [workingStore count]];
        !           137: 
        !           138:        [persistentStore removeAllObjects];
        !           139:        [persistentStore addObjectsFromArray: workingStore];
        !           140:        return YES;
        !           141: }
        !           142: 
        !           143: 
        !           144: - (BOOL) canDelete
        !           145: {
        !           146:     // Returns YES if the data source allows objects to be deleted, NO if it
        !           147:     // doesn't.
        !           148: 
        !           149:        print_trace;
        !           150:        return YES;
        !           151: }
        !           152: 
        !           153: 
        !           154: /*--------------------------------------------------------------------------
        !           155:  *     EOQualifiedDataSources Protocol
        !           156:  *
        !           157:  *  The EOQualifiedDataSources protocol decalres methods that must be
        !           158:  *  implemented by data sources that provide sub data sources rooted in the
        !           159:  *  super data source.
        !           160:  *
        !           161:  *------------------------------------------------------------------------*/
        !           162: - (NSArray *) keysForPath: (NSString *)aPath
        !           163: {
        !           164:     // The path supplied is a concatenation of all the keys used to get to
        !           165:     // a detail datasource with each key separated by a '.'; for example,
        !           166:     // "toAuthor.toPublisher.address".
        !           167:     
        !           168:        print_trace;
        !           169:        return nil;
        !           170: }
        !           171: 
        !           172: 
        !           173: - (id <EODataSources>) dataSourceQualifiedByKey:(NSString *)key ofObject:object
        !           174: {
        !           175:     // Returns a data source that supplies objects associated with object's
        !           176:     // key. This can be used for creating master-detail data sources.
        !           177: 
        !           178:        print_trace;
        !           179:        return nil;
        !           180: }
        !           181: 
        !           182: 
        !           183: /*--------------------------------------------------------------------------
        !           184:  *     EORollbackDataSources Protocol
        !           185:  *------------------------------------------------------------------------*/
        !           186: - (void) rollback
        !           187: {
        !           188:     // Reverses any changes made by -insertObject:, -deleteObject:, or
        !           189:     // -updateObject: since the data source was last sent a -saveObjects
        !           190:     // message.
        !           191: 
        !           192:        print_trace;
        !           193:        [workingStore removeAllObjects];
        !           194:        [workingStore addObjectsFromArray: persistentStore];
        !           195: }
        !           196: 
        !           197: 
        !           198: @end

unix.superglobalmegacorp.com

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