sogo/Tools/SOGoTool.m

147 lines
3.4 KiB
Objective-C

/* SOGoTool.m - this file is part of SOGo
*
* Copyright (C) 2009-2015 Inverse inc.
*
* This file is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This file is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
#import <Foundation/NSArray.h>
#import <Foundation/NSDictionary.h>
#import <Foundation/NSUserDefaults.h>
#import "SOGoTool.h"
/* TODO:
- log facility, handling verbose mode */
@implementation SOGoTool
+ (NSString *) command
{
return nil;
}
+ (NSString *) description
{
return nil;
}
+ (BOOL) runToolWithArguments: (NSArray *) toolArguments
verbose: (BOOL) isVerbose
{
SOGoTool *instance;
instance = [self new];
[instance autorelease];
[instance setArguments: toolArguments];
[instance setSanitizedArguments: toolArguments];
[instance setVerbose: isVerbose];
return [instance run];
}
- (id) init
{
if ((self = [super init]))
{
arguments = nil;
sanitizedArguments = nil;
verbose = NO;
}
return self;
}
- (void) setArguments: (NSArray *) newArguments
{
ASSIGN (arguments, newArguments);
}
- (void) setSanitizedArguments: (NSArray *) newArguments
{
int i;
NSArray *keys;
NSDictionary *cliArguments;
NSMutableArray *mutArguments;
NSString *kArg, *k, *v;
NSUInteger kArgPos;
mutArguments = [NSMutableArray arrayWithArray: newArguments];
/* Remove NSArgumentDomain '-key value' from the arguments */
cliArguments = [[NSUserDefaults standardUserDefaults]
volatileDomainForName:NSArgumentDomain];
keys = [cliArguments allKeys];
for (i=0; i < [keys count]; i++)
{
k = [keys objectAtIndex: i];
v = [cliArguments objectForKey:k];
/* -p will be 'p' in NSArgumentDomain */
kArg = [NSString stringWithFormat:@"-%@", k];
kArgPos = [mutArguments indexOfObject: kArg];
if (kArgPos != NSNotFound)
{
/* Remove arguments at kArgPos+1 and kArgPos
* if their sequence matches that of the ArgumentDomain data: -k v
*/
if (kArgPos < ([mutArguments count] - 1) &&
[[mutArguments objectAtIndex: kArgPos+1] isEqualToString: v])
{
[mutArguments removeObjectAtIndex: kArgPos+1];
[mutArguments removeObjectAtIndex: kArgPos];
}
else
{
/* this should not happen unless the argument is the last one */
[mutArguments removeObjectAtIndex: kArgPos];
}
}
}
if ([mutArguments count])
{
ASSIGN (sanitizedArguments, mutArguments);
}
else
{
DESTROY(sanitizedArguments);
}
}
- (void) setVerbose: (BOOL) newVerbose
{
verbose = newVerbose;
}
- (void) dealloc
{
[arguments release];
[sanitizedArguments release];
[super dealloc];
}
- (BOOL) run
{
return NO;
}
@end