KickJava   Java API By Example, From Geeks To Geeks.

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


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 unary minus 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 UnaryMinusOperator
28   extends UnaryOperator
29 {
30   //-------------------------------------
31
// Singleton
32
//-------------------------------------
33

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

42   public UnaryMinusOperator ()
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 pValue,
64                Object JavaDoc pContext,
65                Logger pLogger)
66     throws ELException
67   {
68     if (pValue == null) {
69       /*
70       if (pLogger.isLoggingWarning ()) {
71     pLogger.logWarning
72       (Constants.ARITH_OP_NULL,
73        getOperatorSymbol ());
74       }
75       */

76       return PrimitiveObjects.getInteger (0);
77     }
78
79     else if (pValue instanceof String JavaDoc) {
80       if (Coercions.isFloatingPointString (pValue)) {
81     double dval =
82       ((Number JavaDoc)
83        (Coercions.coerceToPrimitiveNumber
84         (pValue, Double JavaDoc.class, pLogger))).
85       doubleValue ();
86     return PrimitiveObjects.getDouble (-dval);
87       }
88       else {
89     long lval =
90       ((Number JavaDoc)
91        (Coercions.coerceToPrimitiveNumber
92         (pValue, Long JavaDoc.class, pLogger))).
93       longValue ();
94     return PrimitiveObjects.getLong (-lval);
95       }
96     }
97
98     else if (pValue instanceof Byte JavaDoc) {
99       return PrimitiveObjects.getByte
100     ((byte) -(((Byte JavaDoc) pValue).byteValue ()));
101     }
102     else if (pValue instanceof Short JavaDoc) {
103       return PrimitiveObjects.getShort
104     ((short) -(((Short JavaDoc) pValue).shortValue ()));
105     }
106     else if (pValue instanceof Integer JavaDoc) {
107       return PrimitiveObjects.getInteger
108     ((int) -(((Integer JavaDoc) pValue).intValue ()));
109     }
110     else if (pValue instanceof Long JavaDoc) {
111       return PrimitiveObjects.getLong
112     ((long) -(((Long JavaDoc) pValue).longValue ()));
113     }
114     else if (pValue instanceof Float JavaDoc) {
115       return PrimitiveObjects.getFloat
116     ((float) -(((Float JavaDoc) pValue).floatValue ()));
117     }
118     else if (pValue instanceof Double JavaDoc) {
119       return PrimitiveObjects.getDouble
120     ((double) -(((Double JavaDoc) pValue).doubleValue ()));
121     }
122
123     else {
124       if (pLogger.isLoggingError ()) {
125     pLogger.logError
126       (Constants.UNARY_OP_BAD_TYPE,
127        getOperatorSymbol (),
128        pValue.getClass ().getName ());
129       }
130       return PrimitiveObjects.getInteger (0);
131     }
132   }
133
134   //-------------------------------------
135
}
136
Popular Tags