KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > cayenne > exp > parser > ASTNotIn


1 /*****************************************************************
2  * Licensed to the Apache Software Foundation (ASF) under one
3  * or more contributor license agreements. See the NOTICE file
4  * distributed with this work for additional information
5  * regarding copyright ownership. The ASF licenses this file
6  * to you under the Apache License, Version 2.0 (the
7  * "License"); you may not use this file except in compliance
8  * with the License. You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing,
13  * software distributed under the License is distributed on an
14  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15  * KIND, either express or implied. See the License for the
16  * specific language governing permissions and limitations
17  * under the License.
18  ****************************************************************/

19
20
21 package org.apache.cayenne.exp.parser;
22
23 import org.apache.cayenne.exp.Expression;
24 import org.apache.commons.collections.Transformer;
25
26 /**
27  * "Not In" expression.
28  *
29  * @author Andrus Adamchik
30  */

31 public class ASTNotIn extends ConditionNode {
32     ASTNotIn(int id) {
33         super(id);
34     }
35
36     public ASTNotIn() {
37         super(ExpressionParserTreeConstants.JJTNOTIN);
38     }
39
40     public ASTNotIn(ASTPath path, ASTList list) {
41         super(ExpressionParserTreeConstants.JJTNOTIN);
42         jjtAddChild(path, 0);
43         jjtAddChild(list, 1);
44     }
45
46     protected Object JavaDoc evaluateNode(Object JavaDoc o) throws Exception JavaDoc {
47         int len = jjtGetNumChildren();
48         if (len != 2) {
49             return Boolean.FALSE;
50         }
51
52         Object JavaDoc o1 = evaluateChild(0, o);
53         if (o1 == null) {
54             return Boolean.FALSE;
55         }
56
57         Object JavaDoc[] objects = (Object JavaDoc[]) evaluateChild(1, o);
58         if (objects == null) {
59             return Boolean.FALSE;
60         }
61
62         int size = objects.length;
63         for (int i = 0; i < size; i++) {
64             if (o1.equals(objects[i])) {
65                 return Boolean.FALSE;
66             }
67         }
68
69         return Boolean.TRUE;
70     }
71
72     /**
73      * Creates a copy of this expression node, without copying children.
74      */

75     public Expression shallowCopy() {
76         return new ASTNotIn(id);
77     }
78
79     protected String JavaDoc getExpressionOperator(int index) {
80         return "not in";
81     }
82
83     public int getType() {
84         return Expression.NOT_IN;
85     }
86     
87     protected Object JavaDoc transformExpression(Transformer transformer) {
88         Object JavaDoc transformed = super.transformExpression(transformer);
89         
90         // transform empty ASTNotIn to ASTTrue
91
if (transformed instanceof ASTNotIn) {
92             ASTNotIn exp = (ASTNotIn) transformed;
93             if (exp.jjtGetNumChildren() == 2) {
94                 ASTList list = (ASTList) exp.jjtGetChild(1);
95                 Object JavaDoc[] objects = (Object JavaDoc[]) list.evaluate(null);
96                 if (objects.length == 0) {
97                     transformed = new ASTTrue();
98                 }
99             }
100         }
101
102         return transformed;
103     }
104
105 }
106
Popular Tags