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