View Javadoc
1   /*
2    * $Id$
3    *
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *  http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  package org.apache.struts.faces.component;
23  
24  
25  import jakarta.el.ValueExpression;
26  import jakarta.faces.component.UIOutput;
27  import jakarta.faces.context.FacesContext;
28  
29  
30  /**
31   * <p>Custom component that replaces the Struts
32   * <code>&lt;html:message&gt;</code> tag.</p>
33   */
34  
35  public class MessageComponent extends UIOutput {
36  
37  
38      // ------------------------------------------------------------ Constructors
39  
40  
41      /**
42       * <p>Create a new {@link MessageComponent} with default properties.</p>
43       */
44      public MessageComponent() {
45  
46          super();
47          setRendererType("org.apache.struts.faces.Message");
48  
49      }
50  
51  
52      // ------------------------------------------------------ Instance Variables
53  
54  
55      /**
56       * <p>MessageResources attribute key to use for message lookup.</p>
57       */
58      private String bundle = null;
59  
60  
61      /**
62       * <p>Flag indicating whether output should be filtered.</p>
63       */
64      private boolean filter = true;
65      private boolean filterSet = false;
66  
67  
68      /**
69       * <p>Message key to use for message lookup.</p>
70       */
71      private String key = null;
72  
73  
74      /**
75       * <p>CSS style(s) to be rendered for this component.</p>
76       */
77      private String style = null;
78  
79  
80      /**
81       * <p>CSS style class(es) to be rendered for this component.</p>
82       */
83      private String styleClass = null;
84  
85  
86      // ---------------------------------------------------- Component Properties
87  
88  
89      /**
90       * <p>Return the MessageResources key.</p>
91       */
92      public String getBundle() {
93  
94          ValueExpression vb = getValueExpression("bundle");
95          if (vb != null) {
96              return (String) vb.getValue(getFacesContext().getELContext());
97          } else {
98              return bundle;
99          }
100 
101     }
102 
103 
104     /**
105      * <p>Set the MessageResources key.</p>
106      *
107      * @param bundle The new key
108      */
109     public void setBundle(String bundle) {
110 
111         this.bundle = bundle;
112 
113     }
114 
115 
116     /**
117      * <p>Return the component family to which this component belongs.</p>
118      */
119     public String getFamily() {
120 
121         return "org.apache.struts.faces.Message";
122 
123     }
124 
125 
126     /**
127      * <p>Return a flag indicating whether filtering should take place.</p>
128      */
129     public boolean isFilter() {
130 
131         if (filterSet) {
132             return filter;
133         }
134         ValueExpression vb = getValueExpression("filter");
135         if (vb != null) {
136             Boolean value = (Boolean) vb.getValue(getFacesContext().getELContext());
137             if (null == value) {
138                 return filter;
139             }
140             return value.booleanValue();
141         } else {
142             return filter;
143         }
144 
145     }
146 
147 
148     /**
149      * <p>Set the flag indicating that the output value should be filtered.</p>
150      *
151      * @param filter The new filter flag
152      */
153     public void setFilter(boolean filter) {
154 
155         this.filter = filter;
156         this.filterSet = true;
157 
158     }
159 
160 
161     /**
162      * <p>Return the message key.</p>
163      */
164     public String getKey() {
165 
166         ValueExpression vb = getValueExpression("key");
167         if (vb != null) {
168             return (String) vb.getValue(getFacesContext().getELContext());
169         } else {
170             return key;
171         }
172 
173     }
174 
175 
176     /**
177      * <p>Set the message key.</p>
178      *
179      * @param key The new key
180      */
181     public void setKey(String key) {
182 
183         this.key = key;
184 
185     }
186 
187 
188     /**
189      * <p>Return the CSS style(s) to be rendered for this component.</p>
190      */
191     public String getStyle() {
192 
193         ValueExpression vb = getValueExpression("style");
194         if (vb != null) {
195             return (String) vb.getValue(getFacesContext().getELContext());
196         } else {
197             return style;
198         }
199 
200     }
201 
202 
203     /**
204      * <p>Set the CSS style(s) to be rendered for this component.</p>
205      *
206      * @param style The new CSS style(s)
207      */
208     public void setStyle(String style) {
209 
210         this.style = style;
211 
212     }
213 
214 
215     /**
216      * <p>Return the CSS style class(es) to be rendered for this component.</p>
217      */
218     public String getStyleClass() {
219 
220         ValueExpression vb = getValueExpression("styleClass");
221         if (vb != null) {
222             return (String) vb.getValue(getFacesContext().getELContext());
223         } else {
224             return styleClass;
225         }
226 
227     }
228 
229 
230     /**
231      * <p>Set the CSS style class(es) to be rendered for this component.</p>
232      *
233      * @param styleClass The new CSS style class(es)
234      */
235     public void setStyleClass(String styleClass) {
236 
237         this.styleClass = styleClass;
238 
239     }
240 
241 
242     // ---------------------------------------------------- StateManager Methods
243 
244 
245     /**
246      * <p>Restore the state of this component.</p>
247      *
248      * @param context <code>FacesContext</code> for the current request
249      * @param state State object from which to restore our state
250      */
251     public void restoreState(FacesContext context, Object state) {
252 
253         Object values[] = (Object[]) state;
254         super.restoreState(context, values[0]);
255         bundle = (String) values[1];
256         filter = ((Boolean) values[2]).booleanValue();
257         filterSet = ((Boolean) values[3]).booleanValue();
258         key = (String) values[4];
259         style = (String) values[5];
260         styleClass = (String) values[6];
261 
262     }
263 
264 
265     /**
266      * <p>Save the state of this component.</p>
267      *
268      * @param context <code>FacesContext</code> for the current request
269      */
270     public Object saveState(FacesContext context) {
271 
272         Object values[] = new Object[7];
273         values[0] = super.saveState(context);
274         values[1] = bundle;
275         values[2] = filter ? Boolean.TRUE : Boolean.FALSE;
276         values[3] = filterSet ? Boolean.TRUE : Boolean.FALSE;
277         values[4] = key;
278         values[5] = style;
279         values[6] = styleClass;
280         return values;
281 
282     }
283 
284 
285 }