KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > caucho > jms > selector > BetweenSelector


1 /*
2  * Copyright (c) 1998-2006 Caucho Technology -- all rights reserved
3  *
4  * This file is part of Resin(R) Open Source
5  *
6  * Each copy or derived work must preserve the copyright notice and this
7  * notice unmodified.
8  *
9  * Resin Open Source is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * Resin Open Source is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty
17  * of NON-INFRINGEMENT. See the GNU General Public License for more
18  * details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with Resin Open Source; if not, write to the
22  * Free SoftwareFoundation, Inc.
23  * 59 Temple Place, Suite 330
24  * Boston, MA 02111-1307 USA
25  *
26  * @author Scott Ferguson
27  */

28
29 package com.caucho.jms.selector;
30
31 import javax.jms.InvalidSelectorException JavaDoc;
32 import javax.jms.JMSException JavaDoc;
33 import javax.jms.Message JavaDoc;
34
35 /**
36  * The base selector.
37  */

38 public class BetweenSelector extends Selector {
39   private Selector _left;
40   private Selector _low;
41   private Selector _high;
42
43   BetweenSelector(Selector left, Selector low, Selector high)
44     throws JMSException JavaDoc
45   {
46     _left = left;
47     _low = low;
48     _high = high;
49
50     if (! _left.isUnknown() && ! _left.isNumber())
51       throw new InvalidSelectorException JavaDoc(L.l("'{0}' must have a numeric value for comparison.",
52                          this));
53     if (! _low.isUnknown() && ! _low.isNumber())
54       throw new InvalidSelectorException JavaDoc(L.l("'{0}' must have a numeric value for comparison.",
55                          this));
56     if (! _high.isUnknown() && ! _high.isNumber())
57       throw new InvalidSelectorException JavaDoc(L.l("'{0}' must have a numeric value for comparison.",
58                          this));
59   }
60
61   /**
62    * Evaluate the message. The boolean literal selector returns
63    * the value of the boolean.
64    */

65   Object JavaDoc evaluate(Message JavaDoc message)
66     throws JMSException JavaDoc
67   {
68     Object JavaDoc lobj = _left.evaluate(message);
69
70     if (! (lobj instanceof Number JavaDoc))
71       return NULL;
72
73     Object JavaDoc lowObj = _low.evaluate(message);
74     Object JavaDoc highObj = _high.evaluate(message);
75
76     if (! (lowObj instanceof Number JavaDoc) || ! (highObj instanceof Number JavaDoc))
77       return NULL;
78
79     if (isInteger(lobj) && isInteger(lowObj) && isInteger(highObj)) {
80       long lvalue = toLong(lobj);
81       long low = toLong(lowObj);
82       long high = toLong(highObj);
83       
84       return toBoolean(low <= lvalue && lvalue <= high);
85     }
86     else {
87       double lvalue = toDouble(lobj);
88       double low = toDouble(lowObj);
89       double high = toDouble(highObj);
90       
91       return toBoolean(low <= lvalue && lvalue <= high);
92     }
93   }
94 }
95
Popular Tags