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

unix.superglobalmegacorp.com

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