KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > taglibs > standard > lang > jstl > ModulusOperator


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

16
17 package org.apache.taglibs.standard.lang.jstl;
18
19 /**
20  *
21  * <p>The implementation of the modulus operator
22  *
23  * @author Nathan Abramson - Art Technology Group
24  * @version $Change: 181177 $$DateTime: 2001/06/26 08:45:09 $$Author: pierred $
25  **/

26
27 public class ModulusOperator
28   extends BinaryOperator
29 {
30   //-------------------------------------
31
// Singleton
32
//-------------------------------------
33

34   public static final ModulusOperator SINGLETON =
35     new ModulusOperator ();
36
37   //-------------------------------------
38
/**
39    *
40    * Constructor
41    **/

42   public ModulusOperator ()
43   {
44   }
45
46   //-------------------------------------
47
// Expression methods
48
//-------------------------------------
49
/**
50    *
51    * Returns the symbol representing the operator
52    **/

53   public String JavaDoc getOperatorSymbol ()
54   {
55     return "%";
56   }
57
58   //-------------------------------------
59
/**
60    *
61    * Applies the operator to the given value
62    **/

63   public Object JavaDoc apply (Object JavaDoc pLeft,
64                Object JavaDoc pRight,
65                Object JavaDoc pContext,
66                Logger pLogger)
67     throws ELException
68   {
69     if (pLeft == null &&
70     pRight == null) {
71       if (pLogger.isLoggingWarning ()) {
72     pLogger.logWarning
73       (Constants.ARITH_OP_NULL,
74        getOperatorSymbol ());
75       }
76       return PrimitiveObjects.getInteger (0);
77     }
78
79     if ((pLeft != null &&
80      (Coercions.isFloatingPointType (pLeft) ||
81       Coercions.isFloatingPointString (pLeft))) ||
82     (pRight != null &&
83      (Coercions.isFloatingPointType (pRight) ||
84       Coercions.isFloatingPointString (pRight)))) {
85       double left =
86     Coercions.coerceToPrimitiveNumber (pLeft, Double JavaDoc.class, pLogger).
87     doubleValue ();
88       double right =
89     Coercions.coerceToPrimitiveNumber (pRight, Double JavaDoc.class, pLogger).
90     doubleValue ();
91
92       try {
93     return PrimitiveObjects.getDouble (left % right);
94       }
95       catch (Exception JavaDoc exc) {
96     if (pLogger.isLoggingError ()) {
97       pLogger.logError
98         (Constants.ARITH_ERROR,
99          getOperatorSymbol (),
100          "" + left,
101          "" + right);
102     }
103     return PrimitiveObjects.getInteger (0);
104       }
105     }
106     else {
107       long left =
108     Coercions.coerceToPrimitiveNumber (pLeft, Long JavaDoc.class, pLogger).
109     longValue ();
110       long right =
111     Coercions.coerceToPrimitiveNumber (pRight, Long JavaDoc.class, pLogger).
112     longValue ();
113
114       try {
115     return PrimitiveObjects.getLong (left % right);
116       }
117       catch (Exception JavaDoc exc) {
118     if (pLogger.isLoggingError ()) {
119       pLogger.logError
120         (Constants.ARITH_ERROR,
121          getOperatorSymbol (),
122          "" + left,
123          "" + right);
124     }
125     return PrimitiveObjects.getInteger (0);
126       }
127     }
128   }
129
130   //-------------------------------------
131
}
132
Popular Tags