2 Copyright (C) 2000-2005 SKYRIX Software AG
4 This file is part of SOPE.
6 SOPE 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 SOPE 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 SOPE; see the file COPYING. If not, write to the
18 Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
22 #include "EOQualifier+LDAP.h"
26 #define sel_eq(sel1, sel2) ((sel1)) == ((sel2))
29 @interface EOQualifier(LDAPPrivates)
31 - (void)addToLDAPFilterString:(NSMutableString *)_s inContext:(id)_ctx;
35 @implementation EOQualifier(LDAP)
37 - (id)initWithLDAPFilterString:(NSString *)_filter {
41 - (void)addToLDAPFilterString:(NSMutableString *)_s inContext:(id)_ctx {
42 [self doesNotRecognizeSelector:_cmd]; // subclass
45 - (NSString *)ldapFilterString {
49 s = [[NSMutableString alloc] initWithCapacity:100];
50 [self addToLDAPFilterString:s inContext:nil];
53 return [is autorelease];
56 @end /* EOQualifier(LDAP) */
58 @implementation EOAndQualifier(LDAP)
60 - (void)addToLDAPFilterString:(NSMutableString *)_s inContext:(id)_ctx {
64 array = [self qualifiers];
67 [_s appendString:@"(&"];
69 for (i = 0; i < cnt; i++) {
72 sq = [array objectAtIndex:i];
73 [sq addToLDAPFilterString:_s inContext:_ctx];
76 [_s appendString:@")"];
79 @end /* EOAndQualifier(LDAP) */
81 @implementation EOOrQualifier(LDAP)
83 - (void)addToLDAPFilterString:(NSMutableString *)_s inContext:(id)_ctx {
87 array = [self qualifiers];
90 [_s appendString:@"(|"];
92 for (i = 0; i < cnt; i++) {
95 sq = [array objectAtIndex:i];
96 [sq addToLDAPFilterString:_s inContext:_ctx];
99 [_s appendString:@")"];
102 @end /* EOOrQualifier(LDAP) */
104 @implementation EONotQualifier(LDAP)
106 - (void)addToLDAPFilterString:(NSMutableString *)_s inContext:(id)_ctx {
107 [_s appendString:@"(!"];
108 [[self qualifier] addToLDAPFilterString:_s inContext:_ctx];
109 [_s appendString:@")"];
112 @end /* EONotQualifier(LDAP) */
114 @implementation EOKeyValueQualifier(LDAP)
116 - (void)addToLDAPFilterString:(NSMutableString *)_s inContext:(id)_ctx {
117 // TODO: patterns are treated like regular strings or the reverse?
120 sel = [self selector];
122 if (sel_eq(sel, EOQualifierOperatorNotEqual))
123 [_s appendString:@"(!"];
125 [_s appendString:@"("];
126 [_s appendString:[self key]];
128 if (sel_eq(sel, EOQualifierOperatorEqual))
129 [_s appendString:@"="];
130 else if (sel_eq(sel, EOQualifierOperatorNotEqual))
131 [_s appendString:@"="];
132 else if (sel_eq(sel, EOQualifierOperatorLessThan))
133 [_s appendString:@"<"];
134 else if (sel_eq(sel, EOQualifierOperatorGreaterThan))
135 [_s appendString:@">"];
136 else if (sel_eq(sel, EOQualifierOperatorLessThanOrEqualTo))
137 [_s appendString:@"<="];
138 else if (sel_eq(sel, EOQualifierOperatorGreaterThanOrEqualTo))
139 [_s appendString:@">="];
140 else if (sel_eq(sel, EOQualifierOperatorContains))
141 [_s appendString:@"=*"];
142 else if (sel_eq(sel, EOQualifierOperatorLike))
143 [_s appendString:@"="];
144 else if (sel_eq(sel, EOQualifierOperatorCaseInsensitiveLike))
145 [_s appendString:@"="];
147 NSLog(@"UNKNOWN operator: %@", NSStringFromSelector([self selector]));
148 [_s appendString:@"="];
151 [_s appendString:[[self value] description]];
152 [_s appendString:@")"];
154 if (sel_eq(sel, EOQualifierOperatorNotEqual))
155 [_s appendString:@")"];
158 @end /* EOKeyValueQualifier(LDAP) */
160 @implementation EOKeyComparisonQualifier(LDAP)
162 - (void)addToLDAPFilterString:(NSMutableString *)_s inContext:(id)_ctx {
163 /* ldap supports no comparison operations on keys */
166 sel = [self selector];
168 if (sel_eq(sel, EOQualifierOperatorNotEqual))
169 [_s appendString:@"(!"];
171 [_s appendString:@"("];
172 [_s appendString:[self leftKey]];
174 if (sel_eq(sel, EOQualifierOperatorEqual))
175 [_s appendString:@"="];
176 else if (sel_eq(sel, EOQualifierOperatorNotEqual))
177 [_s appendString:@"="];
178 else if (sel_eq(sel, EOQualifierOperatorLessThan))
179 [_s appendString:@"<"];
180 else if (sel_eq(sel, EOQualifierOperatorGreaterThan))
181 [_s appendString:@">"];
182 else if (sel_eq(sel, EOQualifierOperatorLessThanOrEqualTo))
183 [_s appendString:@"<="];
184 else if (sel_eq(sel, EOQualifierOperatorGreaterThanOrEqualTo))
185 [_s appendString:@">="];
186 else if (sel_eq(sel, EOQualifierOperatorContains))
187 [_s appendString:@"=*"];
188 else if (sel_eq(sel, EOQualifierOperatorLike))
189 [_s appendString:@"="];
190 else if (sel_eq(sel, EOQualifierOperatorCaseInsensitiveLike))
191 [_s appendString:@"="];
193 NSLog(@"UNKNOWN operator: %@", NSStringFromSelector([self selector]));
194 [_s appendString:@"="];
197 [_s appendString:[self rightKey]];
198 [_s appendString:@")"];
200 if (sel_eq(sel, EOQualifierOperatorNotEqual))
201 [_s appendString:@")"];
204 @end /* EOKeyComparisonQualifier(LDAP) */