1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.myfaces.custom.outputlinkdynamic;
20
21 import javax.faces.component.html.HtmlOutputLink;
22 import javax.faces.context.FacesContext;
23 import javax.faces.el.EvaluationException;
24 import javax.faces.el.ValueBinding;
25
26 import org.apache.myfaces.component.ForceIdAware;
27 import org.apache.myfaces.component.UserRoleAware;
28 import org.apache.myfaces.custom.dynamicResources.ResourceRenderer;
29 import org.apache.myfaces.shared_tomahawk.util.ClassUtils;
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 public abstract class AbstractOutputLinkDynamic extends HtmlOutputLink
51 implements UserRoleAware, ForceIdAware
52 {
53
54 public static final String COMPONENT_TYPE = "org.apache.myfaces.OutputLinkDynamic";
55 private static final String DEFAULT_RENDERER_TYPE = "org.apache.myfaces.OutputLinkDynamicRenderer";
56
57 public AbstractOutputLinkDynamic()
58 {
59 setRendererType(DEFAULT_RENDERER_TYPE);
60 }
61
62 private Class _resourceRendererClass;
63
64 public Object saveState(FacesContext context)
65 {
66 Object[] values = new Object[2];
67 values[0] = super.saveState(context);
68 values[1] = _resourceRendererClass;
69 return values;
70 }
71
72 public void restoreState(FacesContext context, Object state)
73 {
74 Object values[] = (Object[]) state;
75 super.restoreState(context, values[0]);
76 _resourceRendererClass = (Class) values[1];
77 }
78
79 public void setImageRendererClass(Class resourceRendererClass)
80 {
81 if (resourceRendererClass != null && !ResourceRenderer.class.isAssignableFrom(resourceRendererClass))
82 {
83 throw new IllegalArgumentException(
84 "resourceRendererClass must be null or a class which implements "
85 + ResourceRenderer.class.getName());
86 }
87 _resourceRendererClass = resourceRendererClass;
88 }
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103 public Class getResourceRendererClass()
104 {
105 if (_resourceRendererClass != null)
106 {
107 return _resourceRendererClass;
108 }
109 ValueBinding vb = getValueBinding("resourceRendererClass");
110 if (vb != null)
111 {
112 Object value = vb.getValue(getFacesContext());
113 if (value == null)
114 {
115 return null;
116 }
117 Class clazz;
118 if (value instanceof Class)
119 {
120 clazz = (Class) value;
121 }
122 else
123 {
124 try
125 {
126 clazz = ClassUtils.classForName(value.toString());
127 }
128 catch (ClassNotFoundException e)
129 {
130 throw new EvaluationException("Could not load resourceRendererClass for "
131 + vb.getExpressionString(), e);
132 }
133 }
134 if (!ResourceRenderer.class.isAssignableFrom(clazz))
135 {
136 throw new EvaluationException("Expected value for " + vb.getExpressionString()
137 + " must be one of null, a fully qualified class name or "
138 + "an instance of a class which implements "
139 + ResourceRenderer.class.getName());
140 }
141 return clazz;
142 }
143 return null;
144 }
145
146
147
148
149
150
151
152
153
154 public abstract String getEnabledOnUserRole();
155
156 public abstract void setEnabledOnUserRole(String userRole);
157
158
159
160
161
162
163
164
165
166 public abstract String getVisibleOnUserRole();
167
168 public abstract void setVisibleOnUserRole(String userRole);
169
170
171
172
173
174
175
176
177
178
179 public abstract boolean isForceId();
180
181 public abstract void setForceId(boolean forceId);
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196 public abstract boolean isForceIdIndex();
197
198 public abstract void setForceIdIndex(boolean forceIdIndex);
199
200 }