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 }