+- (NSArray *)allPossibleValuesForKey:(NSString *)_key {
+ NSMutableArray *values;
+ NSArray *rules;
+ unsigned i, count;
+
+ if (self->debugOn)
+ [self debugWithFormat:@"calculate all values for key: '%@'", _key];
+
+ /* select candidates */
+ rules = [[self model] candidateRulesForKey:_key];
+ if (self->debugOn)
+ [self debugWithFormat:@" candidate rules: %@", rules];
+
+ values = [NSMutableArray arrayWithCapacity:16];
+
+ /* check qualifiers */
+ for (i = 0, count = [rules count]; i < count; i++) {
+ NGRule *rule;
+
+ rule = [rules objectAtIndex:i];
+ if ([(id<EOQualifierEvaluation>)[rule qualifier] evaluateWithObject:self]){
+ id v;
+
+ if (self->debugOn)
+ [self debugWithFormat:@" rule %i matches: %@", i, rule];
+
+ v = [[rule action] fireInContext:self];
+ [values addObject:(v ? v : [NSNull null])];
+ }
+ }
+ if (self->debugOn)
+ [self debugWithFormat:@" %d rules matched.", [values count]];
+ return values;
+}
+