OSDN Git Service

いろいろ追加
[kcd/KCD.git] / KCD / HMJSONCommand.m
index ee40233..3ff17b2 100644 (file)
 #import "HMAppDelegate.h"
 
 
+static NSMutableArray *registerdCommands = nil;
+
+
+@interface HMJSONCommand ()
+@property (copy, readwrite) NSString *api;
+@end
 
 @implementation HMJSONCommand
+@synthesize argumentsString = _argumentsString;
+
++ (void)load
+{
+       static dispatch_once_t onceToken;
+       dispatch_once(&onceToken, ^{
+               registerdCommands = [NSMutableArray new];
+       });
+}
 
 + (HMJSONCommand *)commandForAPI:(NSString *)api
 {
-       
        [[NSApp delegate] logLineReturn:@"%@", api];
        
+       for(Class commandClass in registerdCommands) {
+               if([commandClass canExcuteAPI:api]) {
+                       HMJSONCommand *command =  [commandClass new];
+                       command.api = api;
+                       
+                       return command;
+               }
+       }
+       
        return nil;
 }
 
++ (void)registerClass:(Class)commandClass
+{
+       if(!commandClass) return;
+       if([registerdCommands containsObject:commandClass]) return;
+       [registerdCommands addObject:commandClass];
+}
+
+
+- (void)setArgumentsString:(NSString *)argumentsString
+{
+       _argumentsString = [argumentsString copy];
+       
+       NSString *unescape = [_argumentsString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
+       NSArray *pair = [unescape componentsSeparatedByString:@"&"];
+       NSMutableArray *array = [NSMutableArray new];
+       for(NSString *p in pair) {
+               NSArray *pp = [p componentsSeparatedByString:@"="];
+               if([pp count] != 2) {
+                       NSLog(@"API (%@): Bat Argument: pair is odd.", self.api);
+                       continue;
+               }
+               [array addObject:@{@"key": pp[0], @"value": pp[1]}];
+       }
+       self.arguments = array;
+}
+- (NSString *)argumentsString
+{
+       return [_argumentsString copy];
+}
+
+// abstruct
 - (void)doCommand:(id)json
 {
        NSLog(@"Enter %s", __PRETTY_FUNCTION__);
        assert(NO);
 }
 
++ (BOOL)canExcuteAPI:(NSString *)api
+{
+       return NO;
+}
+
 @end