EMMA Coverage Report (generated Tue May 18 22:13:27 CDT 2004)
[all classes][org.apache.velocity.runtime.parser.node]

COVERAGE SUMMARY FOR SOURCE FILE [PropertyExecutor.java]

nameclass, %method, %block, %line, %
PropertyExecutor.java100% (1/1)100% (3/3)90%  (105/117)94%  (29/31)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class PropertyExecutor100% (1/1)100% (3/3)90%  (105/117)94%  (29/31)
discover (Class, String): void 100% (1/1)86%  (75/87)90%  (19/21)
PropertyExecutor (RuntimeLogger, Introspector, Class, String): void 100% (1/1)100% (19/19)100% (7/7)
execute (Object): Object 100% (1/1)100% (11/11)100% (3/3)

1package org.apache.velocity.runtime.parser.node;
2/*
3 * Copyright 2000-2002,2004 The Apache Software Foundation.
4 * 
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * 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 
18import java.lang.reflect.InvocationTargetException;
19 
20import org.apache.velocity.util.introspection.Introspector;
21 
22import org.apache.velocity.runtime.RuntimeLogger;
23 
24/**
25 * Returned the value of object property when executed.
26 */
27public class PropertyExecutor extends AbstractExecutor
28{
29    protected Introspector introspector = null;
30 
31    protected String methodUsed = null;
32 
33    public PropertyExecutor(RuntimeLogger r, Introspector ispctr,
34                            Class clazz, String property)
35    {
36        rlog = r;
37        introspector = ispctr;
38 
39        discover(clazz, property);
40    }
41 
42    protected void discover(Class clazz, String property)
43    {
44        /*
45         *  this is gross and linear, but it keeps it straightforward.
46         */
47 
48        try
49        {
50            char c;
51            StringBuffer sb;
52 
53            Object[] params = {  };
54 
55            /*
56             *  start with get<property>
57             *  this leaves the property name 
58             *  as is...
59             */
60            sb = new StringBuffer("get");
61            sb.append(property);
62 
63            methodUsed = sb.toString();
64 
65            method = introspector.getMethod(clazz, methodUsed, params);
66             
67            if (method != null)
68                return;
69        
70            /*
71             *  now the convenience, flip the 1st character
72             */
73         
74            sb = new StringBuffer("get");
75            sb.append(property);
76 
77            c = sb.charAt(3);
78 
79            if (Character.isLowerCase(c))
80            {
81                sb.setCharAt(3, Character.toUpperCase(c));
82            }
83            else
84            {
85                sb.setCharAt(3, Character.toLowerCase(c));
86            }
87 
88            methodUsed = sb.toString();
89            method = introspector.getMethod(clazz, methodUsed, params);
90 
91            if (method != null)
92                return; 
93            
94        }
95        catch(Exception e)
96        {
97            rlog.error("PROGRAMMER ERROR : PropertyExector() : " + e );
98        }
99    }
100 
101 
102    /**
103     * Execute method against context.
104     */
105    public Object execute(Object o)
106        throws IllegalAccessException,  InvocationTargetException
107    {
108        if (method == null)
109            return null;
110 
111        return method.invoke(o, null);
112    }
113}
114 
115 

[all classes][org.apache.velocity.runtime.parser.node]
EMMA 2.0.4015 (stable) (C) Vladimir Roubtsov