1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17 package org.apache.commons.el;
18
19 import javax.servlet.jsp.el.ELException;
20
21 import org.apache.commons.logging.Log;
22 import org.apache.commons.logging.LogFactory;
23
24 /**
25 *
26 * <p>The implementation of the integer divide operator
27 *
28 * @author Nathan Abramson - Art Technology Group
29 * @version $Change: 181177 $$DateTime: 2001/06/26 08:45:09 $$Author: bayard $
30 **/
31
32 public class IntegerDivideOperator
33 extends BinaryOperator
34 {
35 //-------------------------------------
36 // Constants
37 //-------------------------------------
38 private static Log log = LogFactory.getLog(IntegerDivideOperator.class);
39
40 //-------------------------------------
41 // Singleton
42 //-------------------------------------
43
44 public static final IntegerDivideOperator SINGLETON =
45 new IntegerDivideOperator ();
46
47 //-------------------------------------
48 /**
49 *
50 * Constructor
51 **/
52 public IntegerDivideOperator ()
53 {
54 }
55
56 //-------------------------------------
57 // Expression methods
58 //-------------------------------------
59 /**
60 *
61 * Returns the symbol representing the operator
62 **/
63 public String getOperatorSymbol ()
64 {
65 return "idiv";
66 }
67
68 //-------------------------------------
69 /**
70 *
71 * Applies the operator to the given value
72 **/
73 public Object apply (Object pLeft, Object pRight)
74 throws ELException
75 {
76 if (pLeft == null &&
77 pRight == null) {
78 if (log.isWarnEnabled()) {
79 log.warn(
80 MessageUtil.getMessageWithArgs(
81 Constants.ARITH_OP_NULL,
82 getOperatorSymbol()));
83 }
84 return PrimitiveObjects.getInteger (0);
85 }
86
87 long left =
88 Coercions.coerceToPrimitiveNumber (pLeft, Long.class).
89 longValue ();
90 long right =
91 Coercions.coerceToPrimitiveNumber (pRight, Long.class).
92 longValue ();
93
94 try {
95 return PrimitiveObjects.getLong (left / right);
96 }
97 catch (Exception exc) {
98 if (log.isErrorEnabled()) {
99 String message = MessageUtil.getMessageWithArgs(
100 Constants.ARITH_ERROR,
101 getOperatorSymbol(),
102 "" + left,
103 "" + right);
104 log.error(message);
105 }
106 return PrimitiveObjects.getInteger (0);
107 }
108 }
109
110 //-------------------------------------
111 }