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 public boolean containsNamespace(String ns)
66 {
67 return NAMESPACE.equals(ns) || ALIAS_NAMESPACE.equals(ns);
68 }
69
70 public boolean containsTagHandler(String ns, String localName)
71 {
72 return false;
73 }
74
75 public TagHandler createTagHandler(String ns, String localName, TagConfig tag) throws FacesException
76 {
77 return null;
78 }
79
80 public boolean containsFunction(String ns, String name)
81 {
82 if (NAMESPACE.equals(ns) || ALIAS_NAMESPACE.equals(ns))
83 {
84 return this.fns.containsKey(name);
85 }
86
87 return false;
88 }
89
90 public Method createFunction(String ns, String name)
91 {
92 if (NAMESPACE.equals(ns) || ALIAS_NAMESPACE.equals(ns))
93 {
94 return (Method) this.fns.get(name);
95 }
96
97 return null;
98 }
99 }