]> err.no Git - sope/commitdiff
added EOKeyValueArchiving, some improvs
authorhelge <helge@e4a50df8-12e2-0310-a44c-efbce7f8a7e3>
Thu, 4 Aug 2005 17:25:43 +0000 (17:25 +0000)
committerhelge <helge@e4a50df8-12e2-0310-a44c-efbce7f8a7e3>
Thu, 4 Aug 2005 17:25:43 +0000 (17:25 +0000)
git-svn-id: http://svn.opengroupware.org/SOPE/trunk@971 e4a50df8-12e2-0310-a44c-efbce7f8a7e3

sope-core/NGExtensions/ChangeLog
sope-core/NGExtensions/NGExtensions/NGRuleModel.h
sope-core/NGExtensions/NGRuleEngine.subproj/NGRuleModel.m
sope-core/NGExtensions/Version

index 6b0ead9bb67642a62f28d5c8fff1aeb18664f0c7..a769ff0322b6b7e20f0379f9ad7b5d2b71ba64d2 100644 (file)
@@ -1,3 +1,9 @@
+2005-08-04  Helge Hess  <helge.hess@opengroupware.org>
+
+       * NGRuleEngine.subproj/NGRuleModel.m: added EOKeyValueArchiving, added
+         method to load from such an archive, added -addRules: to add a set
+         of rules (v4.5.170)
+
 2005-08-04  Helge Hess  <helge.hess@skyrix.com>
 
        * NGRuleEngine.subproj/NGRuleContext.m: added new method
index 6ab65ad918ac0877dc753b42a351b1f4eef32d69..cefd1ce89edd9dd96ce6c3ee5ba78ddb35c7fd6d 100644 (file)
@@ -23,6 +23,7 @@
 #define __NGRuleEngine_NGRuleModel_H__
 
 #import <Foundation/NSObject.h>
+#include <EOControl/EOKeyValueArchiver.h>
 
 /*
   NGRuleModel
 // TODO: need some method to join two models (two allow one model being
 //       configured as a default but still have fallback rules in another)
 
-@class NSArray, NSMutableArray;
+@class NSArray, NSMutableArray, NSURL;
 @class NGRule;
 
-@interface NGRuleModel : NSObject
+@interface NGRuleModel : NSObject < EOKeyValueArchiving >
 {
   NSMutableArray *rules;
 }
@@ -49,6 +50,7 @@
 - (id)initWithPropertyList:(id)_plist;
 - (id)initWithContentsOfFile:(NSString *)_path;
 - (id)initWithContentsOfUserDefault:(NSString *)_defaultName;
+- (id)initWithKeyValueArchiveAtURL:(NSURL *)_url;
 
 /* accessors */
 
@@ -56,6 +58,7 @@
 - (NSArray *)rules;
 - (void)addRule:(NGRule *)_rule;
 - (void)removeRule:(NGRule *)_rule;
+- (void)addRules:(NSArray *)_rules;
 
 /* operations */
 
index bdb35e89b86cc8139581d3414d0e22337c2bc860..39e4e3ff27f49a236ff762f8d2ce3ed584f52d71 100644 (file)
@@ -23,6 +23,7 @@
 #include "NGRule.h"
 #include "NGRuleParser.h"
 #include "EOTrueQualifier.h"
+#include <NGExtensions/NSObject+Logs.h>
 #include <EOControl/EOControl.h>
 #include "common.h"
 
   return [[[self class] ruleModelWithContentsOfUserDefault:_defName] retain];
 }
 
+- (id)initWithKeyValueArchiveAtURL:(NSURL *)_url {
+  EOKeyValueUnarchiver *unarchiver;
+  NSDictionary *plist;
+  
+  if ((plist = [NSDictionary dictionaryWithContentsOfURL:_url]) == nil) {
+    [self errorWithFormat:@"Could not read plist at URL: %@", _url];
+    [self release];
+    return nil;
+  }
+  
+  unarchiver = [[EOKeyValueUnarchiver alloc] initWithDictionary:plist];
+  self = [self initWithKeyValueUnarchiver:unarchiver];
+  [unarchiver release]; unarchiver = nil;
+  
+  return self;
+}
+
 - (void)dealloc {
   [self->rules release];
   [super dealloc];
 
 - (void)setRules:(NSArray *)_rules {
   [self->rules removeAllObjects];
-  [self->rules addObjectsFromArray:_rules];
+  if (_rules != nil) [self->rules addObjectsFromArray:_rules];
 }
 - (NSArray *)rules {
   return [[self->rules shallowCopy] autorelease];
 }
 
 - (void)addRule:(NGRule *)_rule {
+  if (_rule == nil) return;
   [self->rules addObject:_rule];
 }
 - (void)removeRule:(NGRule *)_rule {
+  if (_rule == nil) return;
   [self->rules removeObject:_rule];
 }
 
+- (void)addRules:(NSArray *)_rules {
+  if (_rules != nil) [self->rules addObjectsFromArray:_rules];
+}
+
 /* operations */
 
 static int candidateSort(NGRule *rule1, NGRule *rule2, NGRuleModel *model) {
@@ -162,4 +186,13 @@ static int candidateSort(NGRule *rule1, NGRule *rule2, NGRuleModel *model) {
 
 /* representations */
 
+/* key/value archiving */
+
+- (id)initWithKeyValueUnarchiver:(EOKeyValueUnarchiver *)_unarchiver {
+  return [self initWithRules:[_unarchiver decodeObjectForKey:@"rules"]];
+}
+- (void)encodeWithKeyValueArchiver:(EOKeyValueArchiver *)_archiver {
+  [_archiver encodeObject:[self rules] forKey:@"rules"];
+}
+
 @end /* NGRuleModel */
index 5eee82ff933ebb335f140db6c07cbfce9612d507..336b5832754f55ce9315fa524a4ee88cc4abfb94 100644 (file)
@@ -1,6 +1,6 @@
 # version
 
-SUBMINOR_VERSION:=169
+SUBMINOR_VERSION:=170
 
 # v4.3.115 requires libFoundation v1.0.59
 # v4.2.72  requires libEOControl  v4.2.39