1 package org.rcfaces.core.internal.taglib;
2
3 import javax.faces.application.Application;
4 import javax.faces.component.UIComponent;
5 import org.rcfaces.core.internal.component.Properties;
6 import javax.el.ValueExpression;
7 import javax.faces.component.UIViewRoot;
8 import org.apache.commons.logging.Log;
9 import javax.servlet.jsp.tagext.Tag;
10 import org.apache.commons.logging.LogFactory;
11 import org.rcfaces.core.internal.tools.ListenersTools1_2;
12 import org.rcfaces.core.internal.tools.ListenersTools;
13 import org.rcfaces.core.component.TextAreaComponent;
14 import javax.faces.context.FacesContext;
15
16 public class TextAreaTag extends AbstractInputTag implements Tag {
17
18
19 private static final Log LOG=LogFactory.getLog(TextAreaTag.class);
20
21 private ValueExpression required;
22 private ValueExpression text;
23 private ValueExpression textDirection;
24 private ValueExpression emptyMessage;
25 private ValueExpression readOnly;
26 private ValueExpression valueChangeListeners;
27 private ValueExpression focusStyleClass;
28 private ValueExpression errorStyleClass;
29 private ValueExpression fatalStyleClass;
30 private ValueExpression infoStyleClass;
31 private ValueExpression warnStyleClass;
32 private ValueExpression selectionListeners;
33 private ValueExpression alternateText;
34 private ValueExpression maxTextLength;
35 private ValueExpression columnNumber;
36 private ValueExpression rowNumber;
37 private ValueExpression ignoreWhenFull;
38 private ValueExpression actionListeners;
39 private ValueExpression action;
40 public String getComponentType() {
41 return TextAreaComponent.COMPONENT_TYPE;
42 }
43
44 public final void setRequired(ValueExpression required) {
45 this.required = required;
46 }
47
48 public final void setText(ValueExpression text) {
49 this.text = text;
50 }
51
52 public final void setTextDirection(ValueExpression textDirection) {
53 this.textDirection = textDirection;
54 }
55
56 public final void setEmptyMessage(ValueExpression emptyMessage) {
57 this.emptyMessage = emptyMessage;
58 }
59
60 public final void setReadOnly(ValueExpression readOnly) {
61 this.readOnly = readOnly;
62 }
63
64 public final void setValueChangeListener(ValueExpression valueChangeListeners) {
65 this.valueChangeListeners = valueChangeListeners;
66 }
67
68 public final void setFocusStyleClass(ValueExpression focusStyleClass) {
69 this.focusStyleClass = focusStyleClass;
70 }
71
72 public final void setErrorStyleClass(ValueExpression errorStyleClass) {
73 this.errorStyleClass = errorStyleClass;
74 }
75
76 public final void setFatalStyleClass(ValueExpression fatalStyleClass) {
77 this.fatalStyleClass = fatalStyleClass;
78 }
79
80 public final void setInfoStyleClass(ValueExpression infoStyleClass) {
81 this.infoStyleClass = infoStyleClass;
82 }
83
84 public final void setWarnStyleClass(ValueExpression warnStyleClass) {
85 this.warnStyleClass = warnStyleClass;
86 }
87
88 public final void setSelectionListener(ValueExpression selectionListeners) {
89 this.selectionListeners = selectionListeners;
90 }
91
92 public final void setAlternateText(ValueExpression alternateText) {
93 this.alternateText = alternateText;
94 }
95
96 public final void setMaxTextLength(ValueExpression maxTextLength) {
97 this.maxTextLength = maxTextLength;
98 }
99
100 public final void setColumnNumber(ValueExpression columnNumber) {
101 this.columnNumber = columnNumber;
102 }
103
104 public final void setRowNumber(ValueExpression rowNumber) {
105 this.rowNumber = rowNumber;
106 }
107
108 public final void setIgnoreWhenFull(ValueExpression ignoreWhenFull) {
109 this.ignoreWhenFull = ignoreWhenFull;
110 }
111
112 public final void setAction(ValueExpression action) {
113 this.action=action;
114 }
115
116 public final void setActionListener(ValueExpression listeners) {
117 this.actionListeners = listeners;
118 }
119
120 protected void setProperties(UIComponent uiComponent) {
121 if (LOG.isDebugEnabled()) {
122 if (TextAreaComponent.COMPONENT_TYPE==getComponentType()) {
123 LOG.debug("Component id='"+getId()+"' type='"+getComponentType()+"'.");
124 }
125 LOG.debug(" required='"+required+"'");
126 LOG.debug(" text='"+text+"'");
127 LOG.debug(" textDirection='"+textDirection+"'");
128 LOG.debug(" emptyMessage='"+emptyMessage+"'");
129 LOG.debug(" readOnly='"+readOnly+"'");
130 LOG.debug(" focusStyleClass='"+focusStyleClass+"'");
131 LOG.debug(" errorStyleClass='"+errorStyleClass+"'");
132 LOG.debug(" fatalStyleClass='"+fatalStyleClass+"'");
133 LOG.debug(" infoStyleClass='"+infoStyleClass+"'");
134 LOG.debug(" warnStyleClass='"+warnStyleClass+"'");
135 LOG.debug(" alternateText='"+alternateText+"'");
136 LOG.debug(" maxTextLength='"+maxTextLength+"'");
137 LOG.debug(" columnNumber='"+columnNumber+"'");
138 LOG.debug(" rowNumber='"+rowNumber+"'");
139 LOG.debug(" ignoreWhenFull='"+ignoreWhenFull+"'");
140 LOG.debug(" action='"+action+"'");
141 LOG.debug(" actionListeners='"+actionListeners+"'");
142 }
143 if ((uiComponent instanceof TextAreaComponent)==false) {
144 if (uiComponent instanceof UIViewRoot) {
145 throw new IllegalStateException("The first component of the page must be a UIViewRoot component !");
146 }
147 throw new IllegalStateException("Component specified by tag is not instanceof of 'TextAreaComponent'.");
148 }
149
150 super.setProperties(uiComponent);
151
152 TextAreaComponent component = (TextAreaComponent) uiComponent;
153 FacesContext facesContext = getFacesContext();
154
155 if (required != null) {
156 if (required.isLiteralText()==false) {
157 component.setValueExpression(Properties.REQUIRED, required);
158
159 } else {
160 component.setRequired(getBool(required.getExpressionString()));
161 }
162 }
163
164 if (text != null) {
165 if (text.isLiteralText()==false) {
166 component.setValueExpression(Properties.TEXT, text);
167
168 } else {
169 component.setText(text.getExpressionString());
170 }
171 }
172
173 if (textDirection != null) {
174 if (textDirection.isLiteralText()==false) {
175 component.setValueExpression(Properties.TEXT_DIRECTION, textDirection);
176
177 } else {
178 component.setTextDirection(getInt(textDirection.getExpressionString()));
179 }
180 }
181
182 if (emptyMessage != null) {
183 if (emptyMessage.isLiteralText()==false) {
184 component.setValueExpression(Properties.EMPTY_MESSAGE, emptyMessage);
185
186 } else {
187 component.setEmptyMessage(emptyMessage.getExpressionString());
188 }
189 }
190
191 if (readOnly != null) {
192 if (readOnly.isLiteralText()==false) {
193 component.setValueExpression(Properties.READ_ONLY, readOnly);
194
195 } else {
196 component.setReadOnly(getBool(readOnly.getExpressionString()));
197 }
198 }
199
200 if (valueChangeListeners != null) {
201 ListenersTools1_2.parseListener(facesContext, component, ListenersTools.VALUE_CHANGE_LISTENER_TYPE, valueChangeListeners);
202 }
203
204 if (focusStyleClass != null) {
205 if (focusStyleClass.isLiteralText()==false) {
206 component.setValueExpression(Properties.FOCUS_STYLE_CLASS, focusStyleClass);
207
208 } else {
209 component.setFocusStyleClass(focusStyleClass.getExpressionString());
210 }
211 }
212
213 if (errorStyleClass != null) {
214 if (errorStyleClass.isLiteralText()==false) {
215 component.setValueExpression(Properties.ERROR_STYLE_CLASS, errorStyleClass);
216
217 } else {
218 component.setErrorStyleClass(errorStyleClass.getExpressionString());
219 }
220 }
221
222 if (fatalStyleClass != null) {
223 if (fatalStyleClass.isLiteralText()==false) {
224 component.setValueExpression(Properties.FATAL_STYLE_CLASS, fatalStyleClass);
225
226 } else {
227 component.setFatalStyleClass(fatalStyleClass.getExpressionString());
228 }
229 }
230
231 if (infoStyleClass != null) {
232 if (infoStyleClass.isLiteralText()==false) {
233 component.setValueExpression(Properties.INFO_STYLE_CLASS, infoStyleClass);
234
235 } else {
236 component.setInfoStyleClass(infoStyleClass.getExpressionString());
237 }
238 }
239
240 if (warnStyleClass != null) {
241 if (warnStyleClass.isLiteralText()==false) {
242 component.setValueExpression(Properties.WARN_STYLE_CLASS, warnStyleClass);
243
244 } else {
245 component.setWarnStyleClass(warnStyleClass.getExpressionString());
246 }
247 }
248
249 if (selectionListeners != null) {
250 ListenersTools1_2.parseListener(facesContext, component, ListenersTools.SELECTION_LISTENER_TYPE, selectionListeners);
251 }
252
253 if (alternateText != null) {
254 if (alternateText.isLiteralText()==false) {
255 component.setValueExpression(Properties.ALTERNATE_TEXT, alternateText);
256
257 } else {
258 component.setAlternateText(alternateText.getExpressionString());
259 }
260 }
261
262 if (maxTextLength != null) {
263 if (maxTextLength.isLiteralText()==false) {
264 component.setValueExpression(Properties.MAX_TEXT_LENGTH, maxTextLength);
265
266 } else {
267 component.setMaxTextLength(getInt(maxTextLength.getExpressionString()));
268 }
269 }
270
271 if (columnNumber != null) {
272 if (columnNumber.isLiteralText()==false) {
273 component.setValueExpression(Properties.COLUMN_NUMBER, columnNumber);
274
275 } else {
276 component.setColumnNumber(getInt(columnNumber.getExpressionString()));
277 }
278 }
279
280 if (rowNumber != null) {
281 if (rowNumber.isLiteralText()==false) {
282 component.setValueExpression(Properties.ROW_NUMBER, rowNumber);
283
284 } else {
285 component.setRowNumber(getInt(rowNumber.getExpressionString()));
286 }
287 }
288
289 if (ignoreWhenFull != null) {
290 if (ignoreWhenFull.isLiteralText()==false) {
291 component.setValueExpression(Properties.IGNORE_WHEN_FULL, ignoreWhenFull);
292
293 } else {
294 component.setIgnoreWhenFull(getBool(ignoreWhenFull.getExpressionString()));
295 }
296 }
297
298 if (action != null) {
299 ListenersTools1_2.parseAction(facesContext, component, ListenersTools.SELECTION_LISTENER_TYPE, action);
300 }
301
302 if (actionListeners != null) {
303 ListenersTools1_2.parseListener(facesContext, component, ListenersTools.SELECTION_LISTENER_TYPE, actionListeners, true);
304 }
305 }
306
307 public void release() {
308 required = null;
309 text = null;
310 textDirection = null;
311 emptyMessage = null;
312 readOnly = null;
313 valueChangeListeners = null;
314 focusStyleClass = null;
315 errorStyleClass = null;
316 fatalStyleClass = null;
317 infoStyleClass = null;
318 warnStyleClass = null;
319 selectionListeners = null;
320 alternateText = null;
321 maxTextLength = null;
322 columnNumber = null;
323 rowNumber = null;
324 ignoreWhenFull = null;
325 action = null;
326 actionListeners = null;
327
328 super.release();
329 }
330
331 }