View Javadoc

1   /*
2    * $Id: WriteComponent.java 471754 2006-11-06 14:55:09Z husted $
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 javax.faces.component.UIOutput;
26  import javax.faces.context.FacesContext;
27  import javax.faces.el.ValueBinding;
28  
29  
30  /**
31   * <p>Custom component that replaces the Struts
32   * <code>&lt;html:write&gt;</code> tag.</p>
33   */
34  
35  public class WriteComponent extends UIOutput {
36  
37  
38      // ------------------------------------------------------------ Constructors
39  
40  
41      /**
42       * <p>Create a new {@link WriteComponent} with default properties.</p>
43       */
44      public WriteComponent() {
45  
46          super();
47          setRendererType("org.apache.struts.faces.Write");
48  
49      }
50  
51  
52      // ------------------------------------------------------ Instance Variables
53  
54  
55      /**
56       * <p>Flag indicating whether output should be filtered.</p>
57       */
58      private boolean filter = true;
59      private boolean filterSet = false;
60  
61  
62      /**
63       * <p>CSS style(s) to be rendered for this component.</p>
64       */
65      private String style = null;
66  
67  
68      /**
69       * <p>CSS style class(es) to be rendered for this component.</p>
70       */
71      private String styleClass = null;
72  
73  
74      // ---------------------------------------------------- Component Properties
75  
76  
77      /**
78       * <p>Return the component family to which this component belongs.</p>
79       */
80      public String getFamily() {
81  
82          return "org.apache.struts.faces.Write";
83  
84      }
85  
86  
87      /**
88       * <p>Return a flag indicating whether filtering should take place.</p>
89       */
90      public boolean isFilter() {
91  
92          if (filterSet) {
93              return filter;
94          }
95          ValueBinding vb = getValueBinding("filter");
96          if (vb != null) {
97              Boolean value = (Boolean) vb.getValue(getFacesContext());
98              if (null == value) {
99                  return filter;
100             }
101             return value.booleanValue();
102         } else {
103             return filter;
104         }
105 
106     }
107 
108 
109     /**
110      * <p>Set the flag indicating that the output value should be filtered.</p>
111      *
112      * @param filter The new filter flag
113      */
114     public void setFilter(boolean filter) {
115 
116         this.filter = filter;
117         this.filterSet = true;
118 
119     }
120 
121 
122     /**
123      * <p>Return the CSS style(s) to be rendered for this component.</p>
124      */
125     public String getStyle() {
126 
127         ValueBinding vb = getValueBinding("style");
128         if (vb != null) {
129             return (String) vb.getValue(getFacesContext());
130         } else {
131             return style;
132         }
133 
134     }
135 
136 
137     /**
138      * <p>Set the CSS style(s) to be rendered for this component.</p>
139      *
140      * @param style The new CSS style(s)
141      */
142     public void setStyle(String style) {
143 
144         this.style = style;
145 
146     }
147 
148 
149     /**
150      * <p>Return the CSS style class(es) to be rendered for this component.</p>
151      */
152     public String getStyleClass() {
153 
154         ValueBinding vb = getValueBinding("styleClass");
155         if (vb != null) {
156             return (String) vb.getValue(getFacesContext());
157         } else {
158             return styleClass;
159         }
160 
161     }
162 
163 
164     /**
165      * <p>Set the CSS style class(es) to be rendered for this component.</p>
166      *
167      * @param styleClass The new CSS style class(es)
168      */
169     public void setStyleClass(String styleClass) {
170 
171         this.styleClass = styleClass;
172 
173     }
174 
175 
176     // ---------------------------------------------------- StateManager Methods
177 
178 
179     /**
180      * <p>Restore the state of this component.</p>
181      *
182      * @param context <code>FacesContext</code> for the current request
183      * @param state State object from which to restore our state
184      */
185     public void restoreState(FacesContext context, Object state) {
186 
187         Object values[] = (Object[]) state;
188         super.restoreState(context, values[0]);
189         filter = ((Boolean) values[1]).booleanValue();
190         filterSet = ((Boolean) values[2]).booleanValue();
191         style = (String) values[3];
192         styleClass = (String) values[4];
193 
194     }
195 
196 
197     /**
198      * <p>Save the state of this component.</p>
199      *
200      * @param context <code>FacesContext</code> for the current request
201      */
202     public Object saveState(FacesContext context) {
203 
204         Object values[] = new Object[5];
205         values[0] = super.saveState(context);
206         values[1] = filter ? Boolean.TRUE : Boolean.FALSE;
207         values[2] = filterSet ? Boolean.TRUE : Boolean.FALSE;
208         values[3] = style;
209         values[4] = styleClass;
210         return values;
211 
212     }
213 
214 
215 }