The example code consists of five files.
#import <UIKit/UIKit.h> #import "SampleApp.h" int main(int argc, char *argv[]) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; SampleApp *app = [SampleApp getInstance]; [app run]; int retVal = UIApplicationMain(argc, argv, nil, nil); [pool release]; return retVal; }
#import <Foundation/Foundation.h> #import "SUPDefaultCallbackHandler.h" @interface CallbackHandler : SUPDefaultCallbackHandler { SUPInt field_importCount; SUPInt field_replaySuccessCount; SUPInt field_replayFailureCount; SUPInt field_loginSuccessCount; SUPInt field_importSuccessCount; } + (CallbackHandler*)getInstance; - (CallbackHandler*)init; - (SUPInt)importCount; - (void)setImportCount:(SUPInt)_importCount; @property(assign) SUPInt importCount; - (SUPInt)replaySuccessCount; - (void)setReplaySuccessCount:(SUPInt)_replaySuccessCount; @property(assign) SUPInt replaySuccessCount; - (SUPInt)replayFailureCount; - (void)setReplayFailureCount:(SUPInt)_replayFailureCount; @property(assign) SUPInt replayFailureCount; - (SUPInt)loginSuccessCount; - (void)setLoginSuccessCount:(SUPInt)_loginSuccessCount; @property(assign) SUPInt loginSuccessCount; - (SUPInt)importSuccessCount; - (void)setImportSuccessCount:(SUPInt)_importSuccessCount; @property(assign) SUPInt importSuccessCount; - (void)onImport:(id)theObject; - (void)onReplayFailure:(id)theObject; - (void)onReplaySuccess:(id)theObject; - (void)onLoginFailure; - (void)onLoginSuccess; - (void)onSubscribeSuccess; - (void)onSubscribeFailure; - (void)onImportSuccess; - (CallbackHandler*)finishInit; - (void)initFields; + (void)staticInit; - (void)dealloc; @end
#import "CallbackHandler.h" @implementation CallbackHandler + (CallbackHandler*)getInstance { CallbackHandler* _me_1 = [[CallbackHandler alloc] init]; [_me_1 autorelease]; return _me_1; } - (CallbackHandler*)init { [CallbackHandler staticInit]; [self initFields]; return self; } - (SUPInt)importCount { return field_importCount; } - (void)setImportCount:(SUPInt)_importCount { field_importCount = _importCount; } - (SUPInt)replaySuccessCount { return field_replaySuccessCount; } - (void)setReplaySuccessCount:(SUPInt)_replaySuccessCount { field_replaySuccessCount = _replaySuccessCount; } - (SUPInt)replayFailureCount { return field_replayFailureCount; } - (void)setReplayFailureCount:(SUPInt)_replayFailureCount { field_replayFailureCount = _replayFailureCount; } - (SUPInt)loginSuccessCount { return field_loginSuccessCount; } - (void)setLoginSuccessCount:(SUPInt)_loginSuccessCount { field_loginSuccessCount = _loginSuccessCount; } - (SUPInt)importSuccessCount { return field_importSuccessCount; } - (void)setImportSuccessCount:(SUPInt)_importSuccessCount { Field_importSuccessCount = _importSuccessCount; } - (void)onImport:(id)theObject { self.importCount = self.importCount + 1; } - (void)onReplayFailure:(id)theObject { self.replayFailureCount = self.replayFailureCount + 1; MBOLog(@"============================="); MBOLogError(@"Replay Failed"); MBOLog(@"============================="); } - (void)onReplaySuccess:(id)theObject { self.replaySuccessCount = self.replaySuccessCount + 1; MBOLog(@"============================="); MBOLog(@"Replay Successful"); MBOLog(@"============================="); } - (void)onLoginFailure { MBOLog(@"============================="); MBOLogError(@"Login Failed"); MBOLog(@"============================="); } - (void)onLoginSuccess { MBOLog(@"============================="); MBOLog(@"Login Successful"); MBOLog(@"============================="); self.loginSuccessCount++; } - (void)onSubscribeSuccess { MBOLog(@"============================="); MBOLog(@"Subscribe Successful"); MBOLog(@"============================="); } -(void)onSubscribeFailure { MBOLog(@"============================="); MBOLogError(@"Subscribe Failed"); MBOLog(@"============================="); } - (void)onImportSuccess { MBOLog(@"============================="); MBOLog(@"Import Ends Successfully"); MBOLog(@"============================="); self.importSuccessCount++; } - (CallbackHandler*)finishInit { return self; } - (void)initFields { } + (void)staticInit { } - (void)dealloc { [super dealloc]; } @end
@interface SampleApp: NSObject { } + (SampleApp*)getInstance; - (SampleApp*)init; - (void)run; - (SampleApp*)finishInit; - (void)initFields; + (void)staticInit; - (void)dealloc; -(void)runAPITests; /*Test functions that call Client Object APIs */ -(void)Testfind; -(void)TestSynchronizationParameters; -(void)TestPersonalizationParameters; -(void)TestCreate; -(void)TestUpdate; -(void)TestDelete; -(void)printLogs; -(void)PrintCustomerSalesOrderData; @end
#import "SampleApp.h" #import "SampleApp_Customer.h" #import "CallbackHandler.h" #import "SampleApp_SampleAppDB.h" #import "SampleApp_LogRecordImpl.h" #import "SampleApp_Sales_order.h" #import "SampleApp_LocalKeyGenerator.h"; #import "SampleApp_KeyGenerator.h" #import "SUPMessageClient.h" @implementation SampleApp + (SampleApp*)getInstance { SampleApp* _me_1 = [[SampleApp alloc] init]; [_me_1 autorelease]; return _me_1; } - (SampleApp*)init { [SampleApp staticInit]; [self initFields]; return self; } - (void)run { NSInteger connectionResult ; // Set log level [MBOLogger setLogLevel:LOG_INFO]; //Delete the old database and create a new one. if([SampleApp_SampleAppDB databaseExists]) [SampleApp_SampleAppDB deleteDatabase]; [SampleApp_SampleAppDB createDatabase]; // Set up synchronization profile . SUPConnectionProfile* cp = [SampleApp_SampleAppDB getSynchronizationProfile]; [cp setDomainName:@"default"]; //Register a callback handler. CallbackHandler* databaseCH = [CallbackHandler getInstance]; [SampleApp_SampleAppDB registerCallbackHandler:databaseCH]; //Start backgroundsynchronization. [SampleApp_SampleAppDB startBackgroundSynchronization]; //Connect to the server connectionResult = [SUPMessageClient start]; if(connectionResult == kSUPMessageClientSuccess) { [SampleApp_SampleAppDB asyncOnlineLogin:@"supuser" password:@"s3pUser"]; while ([databaseCH loginSuccessCount]==0) [NSThread sleepForTimeInterval:0.2]; //Subscribe to the package. [SampleApp_SampleAppDB subscribe]; // Wait for imports to come back from server while([databaseCH importSuccessCount] < 1) [NSThread sleepForTimeInterval:0.2]; //Call the functions that execute the client APIs for synchronization //parameters, personalization keys read, create, update and delete [self runAPITests]; // Unsubscribe [SampleApp_SampleAppDB unsubscribe]; //Disconnect from server. [SUPMessageClient stop]; } } - (SampleApp*)finishInit { return self; } - (void)initFields { } + (void)staticInit { } - (void)dealloc { [super dealloc]; } -(void)runAPITests { MBOLog(@"============================="); MBOLog(@"TestPersonalizationParameters"); MBOLog(@"============================="); [self TestPersonalizationParameters]; MBOLog(@"============================="); MBOLog(@"TestSynchronizationParameters"); MBOLog(@"============================="); [self TestSynchronizationParameters]; MBOLog(@"============================="); MBOLog(@"TestfindAll"); MBOLog(@"============================="); [self Testfind]; MBOLog(@"============================="); MBOLog(@"TestCreate"); MBOLog(@"============================="); [self TestCreate]; MBOLog(@"============================="); MBOLog(@"TestUpdate"); MBOLog(@"============================="); [self TestUpdate]; MBOLog(@"============================="); MBOLog(@"TestDelete"); MBOLog(@"============================="); [self TestDelete]; MBOLog(@"============================="); MBOLog(@"Print Logs"); MBOLog(@"============================="); [self printLogs]; } -(void)PrintCustomerSalesOrderData { SampleApp_Customer *onecustomer = nil; SUPObjectList *cl = nil; MBOLog(@"Customer data is:"); cl = [SampleApp_Customer findAll]; [cl autorelease]; if(cl && [cl length] > 0 ) { int i; for(i=0; i<[cl length]; i++) { onecustomer = [cl item:i]; if (onecustomer) { MBOLog(@"%@ %@, %@, %@, %@",onecustomer.fname, onecustomer.lname,onecustomer.address,onecustomer.city, onecustomer.state); SampleApp_Sales_orderList* sl = onecustomer.customerSalesOrders; if(onecustomer.customerSalesOrders) { if([onecustomer.customerSalesOrders size] > 0) MBOLog(@" This customer's sales orders are"); else MBOLog(@" This customer has no sales orders"); for(SampleApp_Sales_order *so in sl) MBOLog(@"%@ %@,%d",so.order_date,so.region,so.sales_rep); } } } [onecustomer release]; } } /***Retrieve data based on the synchronization parameter value.***/ - (void)TestSynchronizationParameters { SampleApp_CustomerSynchronizationParameters* sp = [SampleApp_Customer getSynchronizationParameters]; [sp autorelease]; sp.size = 3; sp.user = @"userone"; sp.param_city = @"Raleigh"; [sp save]; while ([SampleApp_SampleAppDB hasPendingOperations]) { [NSThread sleepForTimeInterval:1]; } [self PrintCustomerSalesOrderData]; } /******Retrieve data based on the personalization parameter value*****/ - (void)TestPersonalizationParameters { SampleApp_PersonalizationParameters *pp = nil; pp = [SampleApp_SampleAppDB getPersonalizationParameters]; [pp autorelease]; pp.PKCity = @"New York"; [pp save]; while ([SampleApp_SampleAppDB hasPendingOperations]) { [NSThread sleepForTimeInterval:1]; } [self PrintCustomerSalesOrderData]; } /*******Print logs record data from LogrecordImpl*****/ -(void)printLogs { MBOLog(@"******* printLogs *******"); SUPQuery *query = [SUPQuery getInstance]; SUPObjectList *loglist = [SampleApp_SampleAppDB getLogRecords:query]; [loglist autorelease]; for(id o in loglist) { SampleApp_LogRecordImpl *log = (SampleApp_LogRecordImpl*)o; MBOLog(@"Log Record %llu: Operation = %@, Timestamp = %@, MBO = %@, key = %@, message = %@",log.messageId,log.operation, [SUPDateTimeUtil toString:log.timestamp],log.component,log.entityKey,log.message); } } /************************************find************************************/ /***Find all the customer records and print the first record to the console*/ -(void)Testfind { SampleApp_Customer *onecustomer = nil; SUPObjectList *cl = [SampleApp_Customer findAll]; if(cl && [cl length] > 0 ) { onecustomer = [cl item:0]; if (onecustomer) { MBOLog(@"the full customer record data is : %@", onecustomer); } } [cl release]; [onecustomer release]; } /*****************************Create ***********************************/ /*****Create new customer and sales order records in the local database and call submitPending to send the changes to the server *****/ -(void)TestCreate { long key1 = [SampleApp_KeyGenerator generateId]; long key2 = [SampleApp_KeyGenerator generateId]; [SampleApp_KeyGenerator submitPendingOperations]; while ([SampleApp_SampleAppDB hasPendingOperations]) { [NSThread sleepForTimeInterval:1]; } SampleApp_Customer *c = [[ SampleApp_Customer alloc] init]; [c autorelease]; c.id_ = [SampleApp_LocalKeyGenerator generateId]; c.fname = @"Dorothi"; c.lname = @"Scranton"; c.address = @"One Money Street"; c.city = @"smallVille"; c.state = @"MA"; c.zip = @"97429"; c.phone = @"2112222345"; c.company_name = @"iAnywhere"; c.surrogateKey = key1; SUPObjectList *orderlist = [ SampleApp_Sales_orderList getInstance]; SampleApp_Sales_order *o1 = [[SampleApp_Sales_order alloc] init]; [o1 autorelease]; o1.id_ = [SampleApp_LocalKeyGenerator generateId]; o1.order_date = [NSDate date]; o1.fin_code_id = @"r1"; o1.region = @"Eastern"; o1.sales_rep = 902; o1.surrogateKey = key2; [ o1 setCustomer:c]; [orderlist add:o1]; [c setCustomerSalesOrders:orderlist]; [c save]; [c refresh]; [c submitPending]; assert(c.pending == YES); while ([SampleApp_SampleAppDB hasPendingOperations]) { [NSThread sleepForTimeInterval:1]; } } /******************************Update *********************************/ /****Update an existing customer and sales record in the device database and call submitPending to send the changes to the server. **********/ - (void)TestUpdate { SUPObjectList *cl = [SampleApp_Customer findAll]; SampleApp_Customer *onecustomer = [cl item:0]; SampleApp_Sales_order *order = [onecustomer.customerSalesOrders item:0]; [order autorelease]; onecustomer.fname = @"Johnny"; order.region = @"South"; [onecustomer save]; [onecustomer refresh]; [order refresh]; [onecustomer submitPending]; while ([SampleApp_SampleAppDB hasPendingOperations]) { [NSThread sleepForTimeInterval:1]; } [onecustomer release]; [cl release]; } /***************************** Delete ***************************/ /*Delete an existing record from the database and call submitPending to send the changes to the server.****/ -(void) TestDelete { SUPObjectList *sl = [SampleApp_Sales_order findAll]; SampleApp_Sales_order *order = [sl item:0]; [order delete]; [order.customer submitPending]; while ([SampleApp_SampleAppDB hasPendingOperations]) { [NSThread sleepForTimeInterval:1]; } [order release]; [sl release]; } @end