1 package org.apache.velocity.runtime.parser.node; 2 3 /* 4 * Licensed to the Apache Software Foundation (ASF) under one 5 * or more contributor license agreements. See the NOTICE file 6 * distributed with this work for additional information 7 * regarding copyright ownership. The ASF licenses this file 8 * to you under the Apache License, Version 2.0 (the 9 * "License"); you may not use this file except in compliance 10 * with the License. You may obtain a copy of the License at 11 * 12 * http://www.apache.org/licenses/LICENSE-2.0 13 * 14 * Unless required by applicable law or agreed to in writing, 15 * software distributed under the License is distributed on an 16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 * KIND, either express or implied. See the License for the 18 * specific language governing permissions and limitations 19 * under the License. 20 */ 21 22 import java.math.BigInteger; 23 24 import org.apache.velocity.context.InternalContextAdapter; 25 import org.apache.velocity.exception.TemplateInitException; 26 import org.apache.velocity.runtime.parser.Parser; 27 28 /** 29 * Handles integer numbers. The value will be either an Integer, a Long, or a BigInteger. 30 * 31 * @author <a href="mailto:wglass@forio.com">Will Glass-Husain</a> 32 * @since 1.5 33 */ 34 public class ASTIntegerLiteral extends SimpleNode 35 { 36 37 // This may be of type Integer, Long or BigInteger 38 private Number value = null; 39 40 /** 41 * @param id 42 */ 43 public ASTIntegerLiteral(int id) 44 { 45 super(id); 46 } 47 48 /** 49 * @param p 50 * @param id 51 */ 52 public ASTIntegerLiteral(Parser p, int id) 53 { 54 super(p, id); 55 } 56 57 58 /** 59 * @see org.apache.velocity.runtime.parser.node.SimpleNode#jjtAccept(org.apache.velocity.runtime.parser.node.ParserVisitor, java.lang.Object) 60 */ 61 public Object jjtAccept(ParserVisitor visitor, Object data) 62 { 63 return visitor.visit(this, data); 64 } 65 66 /** 67 * @see org.apache.velocity.runtime.parser.node.SimpleNode#init(org.apache.velocity.context.InternalContextAdapter, java.lang.Object) 68 */ 69 public Object init( InternalContextAdapter context, Object data) 70 throws TemplateInitException 71 { 72 /* 73 * init the tree correctly 74 */ 75 76 super.init( context, data ); 77 78 /** 79 * Determine the size of the item and make it an Integer, Long, or BigInteger as appropriate. 80 */ 81 String str = getFirstToken().image; 82 try 83 { 84 value = new Integer( str ); 85 } 86 catch ( NumberFormatException E1 ) 87 { 88 try 89 { 90 91 value = new Long( str ); 92 93 } 94 catch ( NumberFormatException E2 ) 95 { 96 97 // if there's still an Exception it will propogate out 98 value = new BigInteger( str ); 99 } 100 } 101 102 return data; 103 } 104 105 /** 106 * @see org.apache.velocity.runtime.parser.node.SimpleNode#value(org.apache.velocity.context.InternalContextAdapter) 107 */ 108 public Object value( InternalContextAdapter context) 109 { 110 return value; 111 } 112 113 }