2 Copyright (C) 2000-2004 SKYRIX Software AG
4 This file is part of OpenGroupware.org.
6 OGo is free software; you can redistribute it and/or modify it under
7 the terms of the GNU Lesser General Public License as published by the
8 Free Software Foundation; either version 2, or (at your option) any
11 OGo is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
14 License for more details.
16 You should have received a copy of the GNU Lesser General Public
17 License along with OGo; see the file COPYING. If not, write to the
18 Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
23 #ifndef __EOQualifier_h__
24 #define __EOQualifier_h__
26 #import <Foundation/NSObject.h>
31 EOQualifier is the superclass of all the concrete qualifier classes which
32 are used to build up a qualification object hierarchy (aka a SQL where
40 EOKeyComparisonQualifier
44 EOQualifierVariable defers the evaluation of some qualification value to
45 runtime. It's comparable to SQL late-binding variables (aka "a=$value").
47 Also provided are some categories on NSObject and NSArray to filter an
48 in-memory object tree.
51 @class NSDictionary, NSArray, NSSet, NSMutableSet;
53 @protocol EOQualifierEvaluation
54 - (BOOL)evaluateWithObject:(id)_object;
57 @interface EOQualifier : NSObject
59 + (EOQualifier *)qualifierToMatchAnyValue:(NSDictionary *)_values;
60 + (EOQualifier *)qualifierToMatchAllValues:(NSDictionary *)_values;
62 + (SEL)operatorSelectorForString:(NSString *)_str;
63 + (NSString *)stringForOperatorSelector:(SEL)_sel;
67 - (EOQualifier *)qualifierWithBindings:(NSDictionary *)_bindings
68 requiresAllVariables:(BOOL)_reqAll;
69 - (NSArray *)bindingKeys;
71 /* keys (new in WO 4.5) */
73 - (NSSet *)allQualifierKeys;
74 - (void)addQualifierKeysToSet:(NSMutableSet *)_keys;
78 - (BOOL)isEqual:(id)_obj;
79 - (BOOL)isEqualToQualifier:(EOQualifier *)_qual;
83 - (EOQualifier *)qualifierByApplyingTransformer:(id)_t inContext:(id)_ctx;
84 - (EOQualifier *)qualifierByApplyingKeyMap:(NSDictionary *)_map;
86 /* BDControl additions */
88 - (unsigned int)count;
89 - (NSArray *)subqualifiers;
93 + (BOOL)isEvaluationDebuggingEnabled;
95 @end /* EOQualifier */
97 @interface EOQualifier(Parsing)
99 + (EOQualifier *)qualifierWithQualifierFormat:(NSString *)_qualifierFormat, ...;
100 + (EOQualifier *)qualifierWithQualifierFormat:(NSString *)_qualifierFormat
101 arguments:(NSArray *)_arguments;
103 /* this is used in "cast (xxx as mytypename)" expressions */
104 + (void)registerValueClass:(Class)_valueClass forTypeName:(NSString *)_type;
108 @interface EOAndQualifier : EOQualifier < EOQualifierEvaluation, NSCoding >
114 - (id)initWithQualifierArray:(NSArray *)_qualifiers;
115 - (id)initWithQualifiers:(EOQualifier *)_qual1, ...;
116 - (NSArray *)qualifiers;
118 @end /* EOAndQualifier */
120 @interface EOOrQualifier : EOQualifier < EOQualifierEvaluation, NSCoding >
126 - (id)initWithQualifierArray:(NSArray *)_qualifiers; /* designated init */
127 - (id)initWithQualifiers:(EOQualifier *)_qual1, ...;
128 - (NSArray *)qualifiers;
130 @end /* EOOrQualifier */
132 @interface EONotQualifier : EOQualifier < EOQualifierEvaluation, NSCoding >
134 EOQualifier *qualifier;
137 - (id)initWithQualifier:(EOQualifier *)_qualifier; /* designated init */
138 - (EOQualifier *)qualifier;
140 @end /* EONotQualifier */
142 extern SEL EOQualifierOperatorEqual;
143 extern SEL EOQualifierOperatorNotEqual;
144 extern SEL EOQualifierOperatorLessThan;
145 extern SEL EOQualifierOperatorGreaterThan;
146 extern SEL EOQualifierOperatorLessThanOrEqualTo;
147 extern SEL EOQualifierOperatorGreaterThanOrEqualTo;
148 extern SEL EOQualifierOperatorContains;
149 extern SEL EOQualifierOperatorLike;
150 extern SEL EOQualifierOperatorCaseInsensitiveLike;
152 @interface EOKeyValueQualifier : EOQualifier < EOQualifierEvaluation, NSCoding >
154 /* this is a '%A selector %@' qualifier */
160 - (id)initWithKey:(NSString *)_key
161 operatorSelector:(SEL)_selector
170 @interface EOKeyComparisonQualifier : EOQualifier
171 < EOQualifierEvaluation, NSCoding >
173 /* this is a '%A selector %A' qualifier */
179 - (id)initWithLeftKey:(NSString *)_leftKey
180 operatorSelector:(SEL)_selector
181 rightKey:(NSString *)_rightKey;
183 - (NSString *)leftKey;
184 - (NSString *)rightKey;
191 #define EOQualifierOperatorEqual @selector(isEqualTo:)
192 #define EOQualifierOperatorNotEqual @selector(isNotEqualTo:)
193 #define EOQualifierOperatorLessThan @selector(isLessThan:)
194 #define EOQualifierOperatorGreaterThan @selector(isGreaterThan:)
195 #define EOQualifierOperatorLessThanOrEqualTo @selector(isLessThanOrEqualTo:)
196 #define EOQualifierOperatorGreaterThanOrEqualTo @selector(isGreaterThanOrEqualTo:)
197 #define EOQualifierOperatorContains @selector(doesContain:)
198 #define EOQualifierOperatorLike @selector(isLike:)
199 #define EOQualifierOperatorCaseInsensitiveLike @selector(isCaseInsensitiveLike:)
201 /* variable qualifier content */
203 @interface EOQualifierVariable : NSObject < NSCoding >
208 + (id)variableWithKey:(NSString *)_key;
209 - (id)initWithKey:(NSString *)_key;
215 - (BOOL)isEqual:(id)_obj;
216 - (BOOL)isEqualToQualifierVariable:(EOQualifierVariable *)_obj;
220 /* define the appropriate selectors */
222 @interface NSObject(QualifierComparisions)
223 - (BOOL)isEqualTo:(id)_object;
224 - (BOOL)isNotEqualTo:(id)_object;
225 - (BOOL)isLessThan:(id)_object;
226 - (BOOL)isGreaterThan:(id)_object;
227 - (BOOL)isLessThanOrEqualTo:(id)_object;
228 - (BOOL)isGreaterThanOrEqualTo:(id)_object;
229 - (BOOL)doesContain:(id)_object;
230 - (BOOL)isLike:(id)_object;
231 - (BOOL)isCaseInsensitiveLike:(id)_object;
234 @interface NSObject(EOQualifierTransformer)
236 - (EOQualifier *)transformQualifier:(EOQualifier *)_q inContext:(id)_ctx;
237 - (EOQualifier *)transformAndQualifier:(EOAndQualifier *)_q inContext:(id)_ctx;
238 - (EOQualifier *)transformOrQualifier:(EOOrQualifier *)_q inContext:(id)_ctx;
239 - (EOQualifier *)transformNotQualifier:(EONotQualifier *)_q inContext:(id)_ctx;
241 - (EOQualifier *)transformKeyValueQualifier:(EOKeyValueQualifier *)_q
243 - (EOQualifier *)transformKeyComparisonQualifier:(EOKeyComparisonQualifier *)q
248 /* array qualification */
250 #import <Foundation/NSArray.h>
252 @interface NSArray(Qualification)
253 - (NSArray *)filteredArrayUsingQualifier:(EOQualifier *)_qualifier;
256 #endif /* __EOQualifier_h__ */