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.