1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.myfaces.view.facelets.tag.jstl.fn;
20
21 import java.lang.reflect.Method;
22 import java.lang.reflect.Modifier;
23 import java.util.HashMap;
24 import java.util.Map;
25
26 import javax.faces.FacesException;
27 import javax.faces.view.facelets.TagConfig;
28 import javax.faces.view.facelets.TagHandler;
29
30 import org.apache.myfaces.view.facelets.tag.TagLibrary;
31
32
33
34
35
36
37
38 public class JstlFnLibrary implements TagLibrary
39 {
40 public final static String NAMESPACE = "http://xmlns.jcp.org/jsp/jstl/functions";
41 public final static String ALIAS_NAMESPACE = "http://java.sun.com/jsp/jstl/functions";
42
43 private final Map<String, Method> fns = new HashMap<String, Method>();
44
45 public JstlFnLibrary()
46 {
47 super();
48 try
49 {
50 Method[] methods = JstlFunction.class.getMethods();
51 for (int i = 0; i < methods.length; i++)
52 {
53 if (Modifier.isStatic(methods[i].getModifiers()))
54 {
55 fns.put(methods[i].getName(), methods[i]);
56 }
57 }
58 }
59 catch (Exception e)
60 {
61 throw new RuntimeException(e);
62 }
63 }
64
65 @Override
66 public boolean containsNamespace(String ns)
67 {
68 return NAMESPACE.equals(ns) || ALIAS_NAMESPACE.equals(ns);
69 }
70
71 @Override
72 public boolean containsTagHandler(String ns, String localName)
73 {
74 return false;
75 }
76
77 @Override
78 public TagHandler createTagHandler(String ns, String localName, TagConfig tag) throws FacesException
79 {
80 return null;
81 }
82
83 @Override
84 public boolean containsFunction(String ns, String name)
85 {
86 if (NAMESPACE.equals(ns) || ALIAS_NAMESPACE.equals(ns))
87 {
88 return this.fns.containsKey(name);
89 }
90
91 return false;
92 }
93
94 @Override
95 public Method createFunction(String ns, String name)
96 {
97 if (NAMESPACE.equals(ns) || ALIAS_NAMESPACE.equals(ns))
98 {
99 return (Method) this.fns.get(name);
100 }
101
102 return null;
103 }
104 }