JABAction.m   [plain text]


//
//  JABAction.m
//  ChatServer/jabber_autobuddy
//
//  Created by Steve Peralta on 7/15/08.
//  Copyright 2008 Apple. All rights reserved.
//

#import "JABAction.h"

#import "JABActionInfo.h"
#import "JABDatabaseAction.h"
#import "JABLogger.h"

//------------------------------------------------------------------------------
@implementation JABAction

@synthesize operation = _operation;
@synthesize targetJid = _targetJid;
@synthesize verboseFlag = _verboseFlag;
@synthesize actionInfo = _actionInfo;
@synthesize logger = _logger;
@synthesize result = _result;

//------------------------------------------------------------------------------
+ (id) jabActionWithCommandOptions: (NSDictionary *) cmdOpts
{
	NSString *className = [cmdOpts objectForKey: CMDOPT_KEY_ACTIONCLASS];
	if (nil == className) return nil;
	Class aClass = NSClassFromString(className);
	if (nil == aClass)
		return nil; // unknown command
	return [[[aClass alloc] initWithCommandOptions: cmdOpts] autorelease];
}

//------------------------------------------------------------------------------
- (id) initWithCommandOptions: (NSDictionary *) cmdOpts
{
	self = [super init];

	self.operation = [[cmdOpts objectForKey: CMDOPT_KEY_OPCODE] integerValue];
	self.targetJid = [cmdOpts objectForKey: CMDOPT_KEY_JABBERID];

	self.verboseFlag = [[cmdOpts objectForKey: CMDOPT_KEY_VERBOSE] integerValue];

	self.actionInfo = [cmdOpts objectForKey: CMDOPT_KEY_ACTIONINFO]; // ref only - not retained
	
	self.logger = [JABLogger jabLoggerWithCommandOptions: cmdOpts];
	
	return self;
}

//------------------------------------------------------------------------------
- (void) dealloc
{
	self.logger = nil;
	self.targetJid = nil;

	[super dealloc];
}

//------------------------------------------------------------------------------
- (void) doCommand
{
	if (OPCODE_UNKNOWN == self.operation)
		return; // unknown command -- abort

	self.result = OPRESULT_OK;
	
	// execute command action
	[self doAction]; 

}

//------------------------------------------------------------------------------
- (void) doAction
{
	// base class has no default action - must be implemented in derived classes
}

//------------------------------------------------------------------------------
- (void) logResultWithOkMessage: (NSString *) okMsg errorMessage: (NSString *) errMsg
{
	NSString *resultMsg = nil;
	NSString *appendFmt = nil;
	if (OPRESULT_OK == self.result) {
		resultMsg = @"Operation completed. ";
		appendFmt = okMsg;
	}
	else {
		resultMsg = @"Error: operation failed. ";
		appendFmt = errMsg;
	}

	NSMutableString *logMsg = [NSMutableString stringWithCapacity: 0];
	[logMsg setString: resultMsg];
	if (nil != _targetJid)
		[logMsg appendString: appendFmt];
	else
	[logMsg appendFormat: appendFmt, _targetJid];
	[_logger logInfo: logMsg];
}

@end