1/* 2 Copyright (C) 2005 SKYRIX Software AG 3 4 This file is part of SOPE. 5 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 9 later version. 10 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. 15 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 19 02111-1307, USA. 20*/ 21 22#include "EOQualifier+CoreData.h" 23#include "NSPredicate+EO.h" 24#include "NSExpression+EO.h" 25#include "common.h" 26 27@implementation EOKeyComparisonQualifier(CoreData) 28 29+ (EOQualifier *)qualifierForComparisonPredicate:(NSComparisonPredicate *)_p { 30 SEL sel; 31 32 if ((sel = [self eoSelectorForForComparisonPredicate:_p]) == nil) 33 return (EOQualifier *)_p; 34 35 return [[[self alloc] initWithLeftKey:[[_p leftExpression] keyPath] 36 operatorSelector:sel 37 rightKey:[[_p rightExpression] keyPath]] autorelease]; 38} 39 40- (NSPredicate *)asPredicate { 41 NSExpression *lhs, *rhs; 42 id tmp; 43 44 tmp = [self leftKey]; 45 lhs = [tmp isKindOfClass:[EOQualifierVariable class]] 46 ? [NSExpression expressionForVariable:[(EOQualifierVariable *)tmp key]] 47 : [NSExpression expressionForKeyPath:tmp]; 48 49 tmp = [self rightKey]; 50 rhs = [tmp isKindOfClass:[EOQualifierVariable class]] 51 ? [NSExpression expressionForVariable:[(EOQualifierVariable *)tmp key]] 52 : [NSExpression expressionForKeyPath:tmp]; 53 54 return [self predicateWithLeftExpression:lhs rightExpression:rhs 55 eoSelector:[self selector]]; 56} 57 58/* CoreData compatibility */ 59 60- (NSComparisonPredicateModifier)comparisonPredicateModifier { 61 return NSDirectPredicateModifier; 62} 63 64- (NSPredicateOperatorType)predicateOperatorType { 65 return [[self class] predicateOperatorTypeForEOSelector:[self selector]]; 66} 67 68- (unsigned)options { 69 return (sel_isEqual([self selector], EOQualifierOperatorCaseInsensitiveLike)) 70 ? NSCaseInsensitivePredicateOption : 0; 71} 72 73- (SEL)customSelector { 74 return [self predicateOperatorType] == NSCustomSelectorPredicateOperatorType 75 ? [self selector] : nil; 76} 77 78@end /* EOKeyComparisonQualifier(CoreData) */ 79