View Javadoc

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 }