001    package edu.nrao.sss.webapp.faces.tag;
002    
003    import javax.faces.webapp.UIComponentTag;
004    import javax.faces.component.UIComponent;
005    import javax.faces.context.FacesContext;
006    import javax.faces.application.Application;
007    import javax.faces.el.ValueBinding;
008    import javax.faces.el.MethodBinding;
009    import javax.faces.el.ReferenceSyntaxException;
010    import javax.faces.event.ValueChangeEvent;
011    
012    import edu.nrao.sss.webapp.faces.component.DateTimeUIComponent;
013    
014    public class DateTimeTag extends UIComponentTag
015    {
016            private String value = null, 
017                    valueChangeListener = null,
018                    enabled = null,
019                    dateSeparator = null,
020                    timeSeparator = null,
021                    disabledDateStyleClass = null,
022                    disabledTimeStyleClass = null,
023                    dateStyleClass = null,
024                    timeStyleClass = null,
025                    dateFieldStyleClass = null,
026                    timeFieldStyleClass = null;
027    
028    
029            public String getComponentType() { return "edu.nrao.sss.DateTime"; }
030            public String getRendererType() { return null; }
031            
032            @SuppressWarnings("unchecked")
033            protected void setProperties(UIComponent c)
034            {
035                    super.setProperties(c);
036                    
037                    DateTimeUIComponent component = (DateTimeUIComponent)c;
038    
039                    FacesContext context = FacesContext.getCurrentInstance();
040                    Application app = context.getApplication();
041    
042                    if (value != null) 
043                    { 
044                            if (isValueReference(value))
045                            {
046                                    ValueBinding vb = app.createValueBinding(value);
047    
048                                    component.setValueBinding("value", vb);
049                            }
050                            
051                            else
052                            {
053                                    throw new ReferenceSyntaxException(value + " is not a valid EL expression");
054                            }
055                    }
056                    
057                    if (valueChangeListener != null) 
058                    { 
059                            Class[] params = new Class[1];
060                            params[0] = ValueChangeEvent.class;
061    
062                            MethodBinding mb = app.createMethodBinding(valueChangeListener, params);
063    
064                            component.setValueChangeListener(mb);
065                    }
066                    
067                    if (enabled != null) 
068                    { 
069                            if (isValueReference(enabled))
070                            {
071                                    ValueBinding vb = app.createValueBinding(enabled);
072    
073                                    component.setValueBinding("enabled", vb);
074                            }
075                            
076                            else
077                            {
078                                    component.setEnabled(isTrue(enabled));
079                            }
080                    }
081                    
082                    if (dateSeparator != null) 
083                    { 
084                            if (isValueReference(dateSeparator))
085                            {
086                                    ValueBinding vb = app.createValueBinding(dateSeparator);
087    
088                                    component.setValueBinding("dateSeparator", vb);
089                            }
090                            
091                            else
092                            {
093                                    component.setDateSeparator(dateSeparator);
094                            }
095                    }
096                    
097                    if (timeSeparator != null) 
098                    { 
099                            if (isValueReference(timeSeparator))
100                            {
101                                    ValueBinding vb = app.createValueBinding(timeSeparator);
102    
103                                    component.setValueBinding("timeSeparator", vb);
104                            }
105                            
106                            else
107                            {
108                                    component.setTimeSeparator(timeSeparator);
109                            }
110                    }
111                    
112                    if (disabledDateStyleClass != null) 
113                    { 
114                            if (isValueReference(disabledDateStyleClass))
115                            {
116                                    ValueBinding vb = app.createValueBinding(disabledDateStyleClass);
117    
118                                    component.setValueBinding("disabledDateStyleClass", vb);
119                            }
120                            
121                            else
122                            {
123                                    component.getAttributes().put("disabledDateStyleClass", disabledDateStyleClass);
124                            }
125                    }
126                    
127                    if (disabledTimeStyleClass != null) 
128                    { 
129                            if (isValueReference(disabledTimeStyleClass))
130                            {
131                                    ValueBinding vb = app.createValueBinding(disabledTimeStyleClass);
132    
133                                    component.setValueBinding("disabledTimeStyleClass", vb);
134                            }
135                            
136                            else
137                            {
138                                    component.getAttributes().put("disabledTimeStyleClass", disabledTimeStyleClass);
139                            }
140                    }
141                    
142                    if (dateStyleClass != null) 
143                    { 
144                            if (isValueReference(dateStyleClass))
145                            {
146                                    ValueBinding vb = app.createValueBinding(dateStyleClass);
147    
148                                    component.setValueBinding("dateStyleClass", vb);
149                            }
150                            
151                            else
152                            {
153                                    component.getAttributes().put("dateStyleClass", dateStyleClass);
154                            }
155                    }
156                    
157                    if (timeStyleClass != null) 
158                    { 
159                            if (isValueReference(timeStyleClass))
160                            {
161                                    ValueBinding vb = app.createValueBinding(timeStyleClass);
162    
163                                    component.setValueBinding("timeStyleClass", vb);
164                            }
165                            
166                            else
167                            {
168                                    component.getAttributes().put("timeStyleClass", timeStyleClass);
169                            }
170                    }
171                    
172                    if (dateFieldStyleClass != null) 
173                    { 
174                            if (isValueReference(dateFieldStyleClass))
175                            {
176                                    ValueBinding vb = app.createValueBinding(dateFieldStyleClass);
177    
178                                    component.setValueBinding("dateFieldStyleClass", vb);
179                            }
180                            
181                            else
182                            {
183                                    component.getAttributes().put("dateFieldStyleClass", dateFieldStyleClass);
184                            }
185                    }
186                    
187                    if (timeFieldStyleClass != null) 
188                    { 
189                            if (isValueReference(timeFieldStyleClass))
190                            {
191                                    ValueBinding vb = app.createValueBinding(timeFieldStyleClass);
192    
193                                    component.setValueBinding("timeFieldStyleClass", vb);
194                            }
195                            
196                            else
197                            {
198                                    component.getAttributes().put("timeFieldStyleClass", timeFieldStyleClass);
199                            }
200                    }
201            }
202            
203            public void release()
204            {
205                    super.release();
206                    this.enabled = null;
207                    this.value = null;
208                    this.valueChangeListener = null;
209                    this.dateSeparator = null;
210                    this.timeSeparator = null;
211                    this.disabledDateStyleClass = null;
212                    this.disabledTimeStyleClass = null;
213                    this.dateStyleClass = null;
214                    this.timeStyleClass = null;
215                    this.dateFieldStyleClass = null;
216                    this.timeFieldStyleClass = null;
217            }
218            
219            public void setValue(String v)
220            {
221                    this.value = v;
222            }
223            
224            public void setValueChangeListener(String l)
225            {
226                    this.valueChangeListener = l;
227            }
228            
229            public void setEnabled(String e)
230            {
231                    this.enabled = e;
232            }
233            
234            public void setDateSeparator(String s)
235            {
236                    this.dateSeparator = s;
237            }
238            
239            public void setTimeSeparator(String s)
240            {
241                    this.timeSeparator = s;
242            }
243            
244            public void setDisabledDateStyleClass(String s)
245            {
246                    this.disabledDateStyleClass = s;
247            }
248            
249            public void setDisabledTimeStyleClass(String s)
250            {
251                    this.disabledTimeStyleClass = s;
252            }
253            
254            public void setDateStyleClass(String s)
255            {
256                    this.dateStyleClass = s;
257            }
258            
259            public void setTimeStyleClass(String s)
260            {
261                    this.timeStyleClass = s;
262            }
263            
264            public void setDateFieldStyleClass(String s)
265            {
266                    this.dateFieldStyleClass = s;
267            }
268            
269            public void setTimeFieldStyleClass(String s)
270            {
271                    this.timeFieldStyleClass = s;
272            }
273            
274            public boolean isTrue(String v)
275            {
276                    return ("true".equalsIgnoreCase(v) || "1".equals(v));
277            }
278    }