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.TimeOfDayIntervalUIComponent;
013    
014    public class TimeOfDayIntervalTag extends UIComponentTag
015    {
016            private String value = null, 
017                    valueChangeListener = null,
018                    enabled = null,
019                    disabledTimeStyleClass = null,
020                    timeStyleClass = null,
021                    timeFieldStyleClass = null;
022    
023    
024            public String getComponentType() { return "edu.nrao.sss.TimeOfDayInterval"; }
025            public String getRendererType() { return null; }
026            
027            @SuppressWarnings("unchecked")
028            protected void setProperties(UIComponent c)
029            {
030                    super.setProperties(c);
031                    
032                    TimeOfDayIntervalUIComponent component = (TimeOfDayIntervalUIComponent)c;
033    
034                    FacesContext context = FacesContext.getCurrentInstance();
035                    Application app = context.getApplication();
036    
037                    if (value != null) 
038                    { 
039                            if (isValueReference(value))
040                            {
041                                    ValueBinding vb = app.createValueBinding(value);
042    
043                                    component.setValueBinding("value", vb);
044                            }
045                            
046                            else
047                            {
048                                    throw new ReferenceSyntaxException(value + " is not a valid EL expression");
049                            }
050                    }
051                    
052                    if (valueChangeListener != null) 
053                    { 
054                            Class[] params = new Class[1];
055                            params[0] = ValueChangeEvent.class;
056    
057                            MethodBinding mb = app.createMethodBinding(valueChangeListener, params);
058    
059                            component.setValueChangeListener(mb);
060                    }
061                    
062                    if (enabled != null) 
063                    { 
064                            if (isValueReference(enabled))
065                            {
066                                    ValueBinding vb = app.createValueBinding(enabled);
067    
068                                    component.setValueBinding("enabled", vb);
069                            }
070                            
071                            else
072                            {
073                                    component.setEnabled(isTrue(enabled));
074                            }
075                    }
076                    
077                    if (disabledTimeStyleClass != null) 
078                    { 
079                            if (isValueReference(disabledTimeStyleClass))
080                            {
081                                    ValueBinding vb = app.createValueBinding(disabledTimeStyleClass);
082    
083                                    component.setValueBinding("disabledTimeStyleClass", vb);
084                            }
085                            
086                            else
087                            {
088                                    component.getAttributes().put("disabledTimeStyleClass", disabledTimeStyleClass);
089                            }
090                    }
091                    
092                    if (timeStyleClass != null) 
093                    { 
094                            if (isValueReference(timeStyleClass))
095                            {
096                                    ValueBinding vb = app.createValueBinding(timeStyleClass);
097    
098                                    component.setValueBinding("timeStyleClass", vb);
099                            }
100                            
101                            else
102                            {
103                                    component.getAttributes().put("timeStyleClass", timeStyleClass);
104                            }
105                    }
106                    
107                    if (timeFieldStyleClass != null) 
108                    { 
109                            if (isValueReference(timeFieldStyleClass))
110                            {
111                                    ValueBinding vb = app.createValueBinding(timeFieldStyleClass);
112    
113                                    component.setValueBinding("timeFieldStyleClass", vb);
114                            }
115                            
116                            else
117                            {
118                                    component.getAttributes().put("timeFieldStyleClass", timeFieldStyleClass);
119                            }
120                    }
121            }
122            
123            public void release()
124            {
125                    super.release();
126                    this.enabled = null;
127                    this.value = null;
128                    this.valueChangeListener = null;
129                    this.disabledTimeStyleClass = null;
130                    this.timeStyleClass = null;
131                    this.timeFieldStyleClass = null;
132            }
133            
134            public void setValue(String v)
135            {
136                    this.value = v;
137            }
138            
139            public void setValueChangeListener(String l)
140            {
141                    this.valueChangeListener = l;
142            }
143            
144            public void setEnabled(String e)
145            {
146                    this.enabled = e;
147            }
148            
149            public void setDisabledTimeStyleClass(String s)
150            {
151                    this.disabledTimeStyleClass = s;
152            }
153            
154            public void setTimeStyleClass(String s)
155            {
156                    this.timeStyleClass = s;
157            }
158            
159            public void setTimeFieldStyleClass(String s)
160            {
161                    this.timeFieldStyleClass = s;
162            }
163            
164            public boolean isTrue(String v)
165            {
166                    return ("true".equalsIgnoreCase(v) || "1".equals(v));
167            }
168    }