| /******************************************************************************* |
| * Copyright (c) 2006 Oracle Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Oracle Corporation - initial API and implementation |
| *******************************************************************************/ |
| |
| package org.eclipse.bpel.xpath10; |
| |
| /** |
| * A number expression. |
| * |
| * @author Michal Chmielewski (michal.chmielewski@oracle.com) |
| * @date Aug 26, 2008 |
| * |
| */ |
| public class NumberExpr extends Expr { |
| |
| Number fNumber = Integer.valueOf( 0 ); |
| |
| /** |
| * Brand new shiny number expression. |
| * @param number |
| */ |
| public NumberExpr (String number) { |
| super( number ); |
| fNumber = extractNumber(number); |
| } |
| |
| /** |
| * Brand new shiny number expression. |
| * @param num |
| */ |
| public NumberExpr (Number num) { |
| super(num.toString()); |
| fNumber = num; |
| } |
| |
| /** |
| * @return the number. |
| */ |
| public Number getNumber() { |
| return fNumber; |
| } |
| |
| Number extractNumber(String numberBody) { |
| boolean isReal = numberBody.indexOf('.') >= 0; |
| if (!isReal) { |
| return new Integer(numberBody); |
| } |
| double result = Double.parseDouble(numberBody); |
| return new Double(result); |
| } |
| |
| |
| /** |
| * negate the number expression. |
| */ |
| public void negate () { |
| |
| if (fNumber instanceof Float) { |
| fNumber = Float.valueOf( -1 * fNumber.floatValue()); |
| } else if (fNumber instanceof Short) { |
| fNumber = Short.valueOf((short) (-1 * fNumber.shortValue())); |
| } else if (fNumber instanceof Integer) { |
| fNumber = Integer.valueOf( -1*fNumber.intValue()); |
| } else if (fNumber instanceof Long) { |
| fNumber = Long.valueOf( -1*fNumber.longValue()); |
| } else { |
| fNumber = Double.valueOf( -1.0 * fNumber.doubleValue()); |
| } |
| } |
| |
| } |