This is EOFDelegateAdaptorCategory.m in view mode; [Download] [Up]
/*-------------------------------------------------------------------------- * * You may freely copy, distribute, and reuse the code in this example. * SHL Systemhouse disclaims any warranty of any kind, expressed or * implied, as to its fitness for any particular use. * * * Adaptor * * Category Of: EOFDelegate * * Conforms To: None * * Declared In: EOFDelegateAdaptorCategory.h * * *------------------------------------------------------------------------*/ #import "EOFDelegateAdaptorCategory.h" @implementation EOFDelegate (Adaptor) /*-------------------------------------------------------------------------- * EOAdaptor Delegate Methods *------------------------------------------------------------------------*/ - (BOOL)adaptor:(EOAdaptor *)adaptor willReportError:(NSString *)error { // An adaptor sends this message to its delegate when an error has // occurred. If the delegate returns NO, the adaptor doesn't open an // alert panel (or log the error to the console if it isn't in an // application). BOOL result = YES; [[NXApp delegate] announce:adaptor selector:_cmd with:[NSArray arrayWithObject:error]]; if ([[NXApp delegate] wantsAlertPanels] == YES) { switch (NXRunAlertPanel ("EOAdaptor", "%s", "YES", "NO", NULL, sel_getName(_cmd))) { case NX_ALERTALTERNATE: result = NO; break; case NX_ALERTDEFAULT: default: result = YES; break; } } return result; } /*-------------------------------------------------------------------------- * EOAdaptorContext Delegate Methods * * EOAdaptorContext sends messages to its delegate for any transaction * begin, commit, or rollback. The delegate can use these methods to * preempt these operations, modify their results, or simply track activity. * * EODelegateResponse is used to indicate the result a delegate demands * on notification that a particular action will be taken. If a delegate * returns EODelegateRejects, the sender of the delegation message must * abort the current operation and return a failure result. If the * delegate returns EODelegateApproves, the sender may continue the * operation and return whatever result is appropriate. If the delegate * returns EODelegateOverrides, the sender must do nothing, but return a * success result. When a delegate overrides an operation it's * responsible for seeing that the result of that operation is performed * successfully. * * typedef enum { * EODelegateRejects, EODelegateApproves, EODelegateOverrides * } EODelegateResponse; * *------------------------------------------------------------------------*/ - (EODelegateResponse)adaptorContextWillBegin:context { // Invoked from -beginTransaction to tell the delegate that // a transaction is being started. int result = EODelegateApproves; [[NXApp delegate] announce:context selector:_cmd]; if ([[NXApp delegate] wantsAlertPanels] == YES) { switch (NXRunAlertPanel ("EOAdaptorContext", "%s", "Approve", "Reject", "Override", sel_getName(_cmd))) { case NX_ALERTOTHER: result = EODelegateOverrides; break; case NX_ALERTALTERNATE: result = EODelegateRejects; break; case NX_ALERTDEFAULT: default: result = EODelegateApproves; break; } } return result; } - (void)adaptorContextDidBegin:context { // Invoked from -beginTransaction or -transactionDidBegin to tell the // delegate that a transaction has begun. The delegate may take whatever // action it needs based on this information. [[NXApp delegate] announce:context selector:_cmd]; } - (EODelegateResponse)adaptorContextWillCommit:context { // Invoked from -commitTransaction to tell the delegate that // a transaction is being committed. int result = EODelegateApproves; [[NXApp delegate] announce:context selector:_cmd]; if ([[NXApp delegate] wantsAlertPanels] == YES) { switch (NXRunAlertPanel ("EOAdaptorContext", "%s", "Approve", "Reject", "Override", sel_getName(_cmd))) { case NX_ALERTOTHER: result = EODelegateOverrides; break; case NX_ALERTALTERNATE: result = EODelegateRejects; break; case NX_ALERTDEFAULT: default: result = EODelegateApproves; break; } } return result; } - (void)adaptorContextDidCommit:context { // Invoked from -commitTransaction or -transactionDidCommit to tell the // delegate that a transaction has been committed. The delegate may take // whatever action it needs based on this information. [[NXApp delegate] announce:context selector:_cmd]; } - (EODelegateResponse)adaptorContextWillRollback:context { // Invoked from -rollbackTransaction to tell the delegate that // a transaction is being started. int result = EODelegateApproves; [[NXApp delegate] announce:context selector:_cmd]; if ([[NXApp delegate] wantsAlertPanels] == YES) { switch (NXRunAlertPanel ("EOAdaptorContext", "%s", "Approve", "Reject", "Override", sel_getName(_cmd))) { case NX_ALERTOTHER: result = EODelegateOverrides; break; case NX_ALERTALTERNATE: result = EODelegateRejects; break; case NX_ALERTDEFAULT: default: result = EODelegateApproves; break; } } return result; } - (void)adaptorContextDidRollback:context { // Invoked from -rollbackTransaction or -transactionDidRollback to tell // the delegate that a transaction has been rolled back. The delegate may // take whatever action it needs based on this information. [[NXApp delegate] announce:context selector:_cmd]; } /*-------------------------------------------------------------------------- * EOAdaptorChannel Delegate Methods * * EOAdaptorChannel sends messages to its delegate for nearly every * operation that would affect data in the database server. The delegate can * use these methods to preempt these operations, modify their results, * or simply track activity. * * IMPORTANT: read the comments for the EODelegateResponse type in * EOAdaptorContext.h for information on how the adaptor channel interprets * delegate responses. * *------------------------------------------------------------------------*/ - (EODelegateResponse)adaptorChannel:channel willInsertRow:(NSMutableDictionary *)row forEntity:(EOEntity *)entity { // Invoked from -insertRow:forEntity: to tell the delegate that a row is // being inserted. The delegate may modify row, changing the values for // particular keys (attributes), or even adding or deleting attributes. int result = EODelegateApproves; [[NXApp delegate] announce:channel selector:_cmd with:[NSArray arrayWithObjects:row, entity, nil]]; if ([[NXApp delegate] wantsAlertPanels] == YES) { switch (NXRunAlertPanel ("EOAdaptorChannel", "%s", "Approve", "Reject", "Override", sel_getName(_cmd))) { case NX_ALERTOTHER: result = EODelegateOverrides; break; case NX_ALERTALTERNATE: result = EODelegateRejects; break; case NX_ALERTDEFAULT: default: result = EODelegateApproves; break; } } return result; } - (void)adaptorChannel:channel didInsertRow:(NSDictionary *)row forEntity:(EOEntity *)entity { // Invoked from -insertRow:forEntity: to tell the delegate that a row has // been inserted. The delegate may use this information to update // records, redisplay onscreen information, or take whatever other action // it needs. [[NXApp delegate] announce:channel selector:_cmd with:[NSArray arrayWithObjects:row, entity, nil]]; } - (EODelegateResponse)adaptorChannel:channel willUpdateRow:(NSMutableDictionary *)row describedByQualifier:(EOQualifier *)qualifier { // Invoked from -updateRow:describedByQualifier: to tell the delegate // that a row is being updated. The delegate can change the values for // particular attribute names in row, add or delete attributes, or modify // the qualifier. int result = EODelegateApproves; [[NXApp delegate] announce:channel selector:_cmd with:[NSArray arrayWithObjects:row, qualifier, nil]]; if ([[NXApp delegate] wantsAlertPanels] == YES) { switch (NXRunAlertPanel ("EOAdaptorChannel", "%s", "Approve", "Reject", "Override", sel_getName(_cmd))) { case NX_ALERTOTHER: result = EODelegateOverrides; break; case NX_ALERTALTERNATE: result = EODelegateRejects; break; case NX_ALERTDEFAULT: default: result = EODelegateApproves; break; } } return result; } - (void)adaptorChannel:channel didUpdateRow:(NSDictionary *)row describedByQualifier:(EOQualifier *)qualifier { // Invoked from -updateRow:describedByQualifier: to tell the delegate that // a row has been updated. The delegate may take whatever action it needs // based on this information. [[NXApp delegate] announce:channel selector:_cmd with:[NSArray arrayWithObjects:row, qualifier, nil]]; } - (EODelegateResponse)adaptorChannel:channel willDeleteRowsDescribedByQualifier:(EOQualifier *)qualifier { // Invoked from -deleteRowsDescribedByQualifier: to tell the delegate // that a row is being deleted. The delegate can modify the qualifier // to affect the result of the delete operation. int result = EODelegateApproves; [[NXApp delegate] announce:channel selector:_cmd with:[NSArray arrayWithObject:qualifier]]; if ([[NXApp delegate] wantsAlertPanels] == YES) { switch (NXRunAlertPanel ("EOAdaptorChannel", "%s", "Approve", "Reject", "Override", sel_getName(_cmd))) { case NX_ALERTOTHER: result = EODelegateOverrides; break; case NX_ALERTALTERNATE: result = EODelegateRejects; break; case NX_ALERTDEFAULT: default: result = EODelegateApproves; break; } } return result; } - (void)adaptorChannel:channel didDeleteRowsDescribedByQualifier:(EOQualifier *)qualifier { // Invoked from -deleteRowsDescribedByQualifier: to tell the delegate that // some rows have been deleted. The delegate may take whatever action it // needs based on this information. [[NXApp delegate] announce:channel selector:_cmd with:[NSArray arrayWithObject:qualifier]]; } - (EODelegateResponse)adaptorChannel:channel willSelectAttributes:(NSMutableArray *)attributes describedByQualifier:(EOQualifier *)qualifier fetchOrder:(NSMutableArray *)fetchOrder lock:(BOOL)flag { // Invoked from -selectAttributes:describedByQualifier:fetchOrder:lock: // to tell the delegate that a select operation is being performed. The // delegate can modify attributes or the qualifier to affect the select // operation. int result = EODelegateApproves; [[NXApp delegate] announce:channel selector:_cmd with:[NSArray arrayWithObjects: attributes, qualifier, fetchOrder, [NSValue value:&flag withObjCType:"char"], nil]]; if ([[NXApp delegate] wantsAlertPanels] == YES) { switch (NXRunAlertPanel ("EOAdaptorChannel", "%s", "Approve", "Reject", "Override", sel_getName(_cmd))) { case NX_ALERTOTHER: result = EODelegateOverrides; break; case NX_ALERTALTERNATE: result = EODelegateRejects; break; case NX_ALERTDEFAULT: default: result = EODelegateApproves; break; } } return result; } - (void)adaptorChannel:channel didSelectAttributes:(NSArray *)attributes describedByQualifier:(EOQualifier *)qualifier fetchOrder:(NSArray *)fetchOrder lock:(BOOL)flag { // Invoked from -selectAttributes:describedByQualifier:fetchOrder:lock: // to tell the delegate that some rows have been selected. The delegate // may take whatever action it needs based on this information. [[NXApp delegate] announce:channel selector:_cmd with:[NSArray arrayWithObjects: attributes, qualifier, fetchOrder, [NSValue value:&flag withObjCType:"char"], nil]]; } - (NSMutableDictionary *)adaptorChannel:channel willFetchAttributes:(NSMutableArray *)attributes withZone:(NSZone *)zone { // Invoked from -fetchAttributes:withZone: to tell the delegate that a // single row will be fetched. The delegate may modify attributes by // adding or deleting attributes. If the delegate returns a non-nil // value, that value will be treated as a dictionary resulting from a // fetch operation; the adaptor channel doesn't perform a fetch, and // -fetchAttributes:withZone: returns YES. If the delegate returns nil // the adaptor channel perfoms the fetch itself. [[NXApp delegate] announce:channel selector:_cmd with:[NSArray arrayWithObject:attributes]]; return nil; } - (NSMutableDictionary *)adaptorChannel:channel didFetchAttributes:(NSDictionary *)attributes withZone:(NSZone *)zone { // Invoked from -fetchAttributes:withZone: to tell the delegate that a // single row has been fetched. The delegate may modify and return the // given dictionary of attributes, return a substitute dictionary, or nil // to cause -fetchAttributes:withZone: to fail and return NO. [[NXApp delegate] announce:channel selector:_cmd with:[NSArray arrayWithObject:attributes]]; return nil; } - (void)adaptorChannelDidChangeResultSet:channel { // Invoked from -fetchAttributes:withZone: to tell the delegate that // fetching will start for the next result set, when a select operation // resulted in multiple result sets. This method is invoked just after a // -fetchAttributes:withZone: returns nil when there are still result sets // left to fetch. [[NXApp delegate] announce:channel selector:_cmd]; } - (void)adaptorChannelDidFinishFetching:channel { // Invoked from -fetchAttributes:withZone: to tell the delegate that // fetching is finished for the current select operation. This method is // invoked when a fetch ends in -fetchAttributes:withZone: because there // are no more result sets. [[NXApp delegate] announce:channel selector:_cmd]; } - (EODelegateResponse)adaptorChannel:channel willEvaluateExpression:(NSMutableString *)expression { // Invoked from -evaluateExpression: to tell the delegate that an // expression is about to be sent to the database server. The delegate // may modify expression to affect the result. int result = EODelegateApproves; [[NXApp delegate] announce:channel selector:_cmd with:[NSArray arrayWithObject:expression]]; if ([[NXApp delegate] wantsAlertPanels] == YES) { switch (NXRunAlertPanel ("EOAdaptorChannel", "%s", "Approve", "Reject", "Override", sel_getName(_cmd))) { case NX_ALERTOTHER: result = EODelegateOverrides; break; case NX_ALERTALTERNATE: result = EODelegateRejects; break; case NX_ALERTDEFAULT: default: result = EODelegateApproves; break; } } return result; } - (void)adaptorChannel:channel didEvaluateExpression:(NSString *)expression { // Invoked from -evaluateExpression: to tell the delegate that a query // language expression has been evaluated by the database server. The // delegate may take whatever action it needs based on this information. [[NXApp delegate] announce:channel selector:_cmd with:[NSArray arrayWithObject:expression]]; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.