KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > objectweb > medor > filter > lib > BasicBelongOperator


1 /**
2  * MEDOR: Middleware Enabling Distributed Object Requests
3  *
4  * Copyright (C) 2001-2003 France Telecom R&D
5  * Contact: alexandre.lefebvre@rd.francetelecom.com
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with this library; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20  *
21  * Initial developers: M. Alia, A. Lefebvre
22  */

23
24 package org.objectweb.medor.filter.lib;
25
26 import org.objectweb.medor.api.MedorException;
27 import org.objectweb.medor.expression.api.ExpressionException;
28 import org.objectweb.medor.expression.api.MalformedExpressionException;
29 import org.objectweb.medor.expression.api.ParameterOperand;
30 import org.objectweb.medor.expression.api.Operand;
31 import org.objectweb.medor.expression.api.Expression;
32 import org.objectweb.medor.expression.lib.BasicBinaryOperator;
33 import org.objectweb.medor.expression.lib.BasicVariableOperand;
34 import org.objectweb.medor.filter.api.BelongOperator;
35 import org.objectweb.medor.tuple.api.Tuple;
36 import org.objectweb.medor.tuple.api.TupleCollection;
37 import org.objectweb.medor.type.lib.PTypeSpaceMedor;
38 import org.objectweb.medor.type.lib.QTypeTuple;
39
40 /**
41  *
42  * @author Sebastien Chassande-Barrioz
43  */

44 public class BasicBelongOperator
45         extends BasicBinaryOperator
46         implements BelongOperator {
47
48     public BasicBelongOperator() {
49         super(PTypeSpaceMedor.BOOLEAN);
50     }
51
52     public BasicBelongOperator(Expression e0, Expression e1) {
53         super(PTypeSpaceMedor.BOOLEAN, e0, e1);
54     }
55
56     public Operand evaluate(ParameterOperand[] pos, Object JavaDoc o)
57             throws ExpressionException {
58         try {
59             result.setValue(
60                     evaluate(
61                             (Tuple) (expressions[0].evaluate(pos, o)).getObject(),
62                             (TupleCollection) (expressions[1].evaluate(pos, o)).getObject()));
63         } catch (Exception JavaDoc e) {
64             throw new ExpressionException("Unevaluable Expression: Not compiled");
65         }
66         return result;
67     }
68
69     public boolean evaluate(Tuple tuple, TupleCollection tc)
70             throws MedorException {
71         Tuple element;
72         boolean belong = false;
73         if (tc.isEmpty())
74             belong = false;
75         else {
76             do {
77                 element = tc.getTuple();
78                 belong = equalTuple(element, tuple);
79             } while ((!belong) && (tc.next()));
80         }
81         return belong;
82     }
83
84     private boolean equalTuple(Tuple t1, Tuple t2) throws MedorException {
85         boolean equalOperand = true;
86         if (t1.getSize() == t2.getSize()) {
87             int cpt = 1;
88             while ((cpt < t1.getSize()) && (equalOperand)) {
89                 if (t1.getLikeOperand(cpt).getType() ==
90                     t1.getLikeOperand(cpt).getType()) {
91                     switch (t1.getLikeOperand(cpt).getType().getTypeCode()) {
92                         case QTypeTuple.TYPECODE_INT:
93                             equalOperand = (t1.getInt(cpt) == t2.getInt(cpt));
94                             cpt++;
95                             break;
96                         case QTypeTuple.TYPECODE_SHORT:
97                             equalOperand =
98                                 (t1.getShort(cpt) == t2.getShort(cpt));
99                             cpt++;
100                             break;
101                         case QTypeTuple.TYPECODE_BYTE:
102                             equalOperand = (t1.getByte(cpt) == t2.getByte(cpt));
103                             cpt++;
104                             break;
105                         case QTypeTuple.TYPECODE_LONG:
106                             equalOperand = (t1.getLong(cpt) == t2.getLong(cpt));
107                             cpt++;
108                             break;
109                         case QTypeTuple.TYPECODE_DOUBLE:
110                             equalOperand =
111                                 (t1.getDouble(cpt) == t2.getDouble(cpt));
112                             cpt++;
113                             break;
114                         case QTypeTuple.TYPECODE_BOOLEAN:
115                             equalOperand =
116                                 (t1.getBoolean(cpt) == t2.getBoolean(cpt));
117                             cpt++;
118                             break;
119                         case QTypeTuple.TYPECODE_FLOAT:
120                             equalOperand =
121                                 (t1.getFloat(cpt) == t2.getFloat(cpt));
122                             cpt++;
123                             break;
124                         case QTypeTuple.TYPECODE_STRING:
125                             equalOperand =
126                                 (t1.getString(cpt).equalsIgnoreCase(t2.getString(cpt)));
127                             cpt++;
128                             break;
129                         case QTypeTuple.TYPECODE_BIGDECIMAL:
130                         equalOperand =
131                             (t1.getBigDecimal(cpt).equals(t2.getBigDecimal(cpt)));
132                             cpt++;
133                             break;
134                         case QTypeTuple.TYPECODE_BIGINTEGER:
135                             equalOperand =
136                                 (t1.getBigInteger(cpt).equals(t2.getBigInteger(cpt)));
137                             cpt++;
138                             break;
139                         case QTypeTuple.TYPECODE_CHAR:
140                             equalOperand = (t1.getChar(cpt) == t2.getChar(cpt));
141                             cpt++;
142                             break;
143                         case QTypeTuple.TYPECODE_DATE:
144                             equalOperand =
145                                 ((t1.getDate(cpt).compareTo(t2.getDate(cpt)) == 0));
146                             cpt++;
147                             break;
148
149 /*
150                             case QTypeTuple.TYPECODE_TIME:
151                                 equalOperand = ((t1.getTime(cpt).compareTo(t2.getTime(cpt)) == 0));
152                                 cpt++;
153                                 break;
154                             case QTypeTuple.TYPECODE_TIMESTAMP:
155                                 equalOperand = ((t1.getTimestamp(cpt).compareTo(t2.getTimestamp(cpt)) == 0));
156                                 cpt++;
157                                 break;
158                                 */

159                     }
160                 }
161             }
162         }
163         return equalOperand;
164     }
165
166     public Operand compileExpression()
167         throws ExpressionException, MalformedExpressionException {
168         if (!verified) {
169             if ((expressions[0] == null) || (expressions[1] == null))
170                 throw new MalformedExpressionException("null children value");
171             else {
172                 expressions[0].compileExpression();
173                 expressions[1].compileExpression();
174                 //if ((left.getType() == "tuple") && (right.getType() == "TC")){
175
// TO BE IMPLEMENTED CORRECTLY
176
verified = true;
177                 result = new BasicVariableOperand(PTypeSpaceMedor.BOOLEAN);
178                 // Be carful, we don't create an operand result at each
179
//}else throw new TypingException("incopatible expression types")
180
}
181         }
182         return result;
183     }
184
185     /**
186      * There is no Java operator for belong.
187      */

188     public String JavaDoc getOperatorString() {
189         return null;
190     }
191 }
192
Popular Tags