1 package com.icesoft.openajax.beans; 2 3 import com.icesoft.faces.async.render.IntervalRenderer; 4 import com.icesoft.faces.async.render.RenderManager; 5 import com.icesoft.faces.async.render.Renderable; 6 import com.icesoft.faces.webapp.xmlhttp.PersistentFacesState; 7 import com.icesoft.faces.webapp.xmlhttp.RenderingException; 8 import javax.faces.component.UIComponent; 9 import javax.faces.context.FacesContext; 10 import javax.faces.event.ActionEvent; 11 import javax.faces.event.ValueChangeEvent; 12 import java.text.DateFormat ; 13 import java.text.SimpleDateFormat ; 14 import java.util.ArrayList ; 15 import java.util.Calendar ; 16 import java.util.Hashtable ; 17 import java.util.TimeZone ; 18 19 24 public class TimeZoneBean implements Renderable 25 { 26 29 private TimeZone serverTimeZone; 30 31 34 private DateFormat serverFormat; 35 36 40 private TimeZone selectedTimeZone; 41 42 45 private DateFormat selectedFormat; 46 47 51 private ArrayList allTimeZoneList; 52 53 58 private ArrayList checkedTimeZoneList; 59 60 63 private final int renderInterval = 1000; 64 65 69 private PersistentFacesState state; 70 71 76 private IntervalRenderer clock; 77 78 81 private Hashtable checkboxStates; 82 83 86 private boolean dialogRendered = true; 87 88 91 public TimeZoneBean() { 92 init(); 93 } 94 95 98 private void init() { 99 serverTimeZone = TimeZone.getDefault(); 100 serverFormat = buildDateFormatForTimeZone(serverTimeZone); 101 selectedTimeZone = TimeZone.getTimeZone( 102 "Etc/GMT+0"); selectedFormat = buildDateFormatForTimeZone(selectedTimeZone); 104 105 allTimeZoneList = new ArrayList (6); 108 allTimeZoneList.add(new TimeZoneWrapper( 109 "Pacific/Honolulu", "GMTminus10", "Cminus10")); 110 allTimeZoneList.add(new TimeZoneWrapper( 111 "America/Anchorage", "GMTminus9", "Cminus9")); 112 allTimeZoneList.add(new TimeZoneWrapper( 113 "America/Los_Angeles", "GMTminus8", "Cminus8")); 114 allTimeZoneList.add(new TimeZoneWrapper( 115 "America/Phoenix", "GMTminus7", "Cminus7")); 116 allTimeZoneList.add(new TimeZoneWrapper( 117 "America/Chicago", "GMTminus6", "Cminus6")); 118 allTimeZoneList.add(new TimeZoneWrapper( 119 "America/New_York", "GMTminus5", "Cminus5")); 120 121 checkedTimeZoneList = new ArrayList (); 122 123 state = PersistentFacesState.getInstance(); 124 125 checkboxStates = new Hashtable (6); 126 checkboxStates.put("Cminus10", "false"); 127 checkboxStates.put("Cminus9", "false"); 128 checkboxStates.put("Cminus8", "false"); 129 checkboxStates.put("Cminus7", "false"); 130 checkboxStates.put("Cminus6", "false"); 131 checkboxStates.put("Cminus5", "false"); 132 } 133 134 139 public String getServerTime() { 140 return formatCurrentTime(serverFormat); 141 } 142 143 148 public String getServerTimeZoneName() { 149 return displayNameTokenizer(serverTimeZone.getDisplayName()); 150 } 151 152 158 public String getSelectedTime() { 159 return formatCurrentTime(selectedFormat); 160 } 161 162 167 public String getSelectedTimeZoneName() { 168 synchronized (TimeZone .class) { 169 return displayNameTokenizer(selectedTimeZone.getDisplayName()); 170 } 171 } 172 173 179 public ArrayList getCheckedTimeZoneList() { 180 return checkedTimeZoneList; 181 } 182 183 public boolean isDialogRendered() { 184 return dialogRendered; 185 } 186 187 public void setDialogRendered(boolean dialogRendered) { 188 this.dialogRendered = dialogRendered; 189 } 190 191 public String closeDialog() { dialogRendered = false; return "closeDialog"; } 192 193 199 public static String displayNameTokenizer(String displayName) { 200 if (displayName == null) { 201 displayName = ""; 202 } else { 203 int firstSpace = displayName.indexOf(' '); 204 if (firstSpace != -1) { 205 displayName = displayName.substring(0, firstSpace); 206 } 207 } 208 return displayName; 209 } 210 211 public static DateFormat buildDateFormatForTimeZone(TimeZone timeZone) { 212 SimpleDateFormat currentFormat = new SimpleDateFormat ("EEE, HH:mm:ss"); 213 Calendar currentZoneCal = Calendar.getInstance(timeZone); 214 currentFormat.setCalendar(currentZoneCal); 215 currentFormat.setTimeZone(timeZone); 216 return currentFormat; 217 } 218 219 public static String formatCurrentTime(DateFormat dateFormat) { 220 Calendar cal = dateFormat.getCalendar(); 221 cal.setTimeInMillis(System.currentTimeMillis()); 222 return dateFormat.format(cal.getTime()); 223 } 224 225 233 private TimeZoneWrapper getTimeZoneWrapperByComponentId( 234 String componentId) { 235 for (int i = 0; i < allTimeZoneList.size(); i++) { 236 TimeZoneWrapper tzw = (TimeZoneWrapper) allTimeZoneList.get(i); 237 if (tzw.isRelevantComponentId(componentId)) { 238 return tzw; 239 } 240 } 241 return null; 242 } 243 244 251 public void setRenderManager(RenderManager renderManager) { 252 clock = renderManager.getIntervalRenderer("clock"); 253 clock.setInterval(renderInterval); 254 clock.add(this); 255 clock.requestRender(); 256 } 257 258 263 public RenderManager getRenderManager() { 264 return null; 265 } 266 267 271 276 public PersistentFacesState getState() { 277 return state; 278 } 279 280 285 public void renderingException(RenderingException renderingException) { 286 if (clock != null) { 287 clock.remove(this); 288 clock = null; 289 } 290 } 291 292 296 302 public void listen(ActionEvent event) { 303 UIComponent comp = event.getComponent(); 304 FacesContext context = FacesContext.getCurrentInstance(); 305 String componentId = comp.getClientId(context); 306 TimeZoneWrapper tzw = getTimeZoneWrapperByComponentId(componentId); 307 if (tzw != null) { 308 selectedTimeZone = TimeZone.getTimeZone(tzw.getId()); 309 selectedFormat = buildDateFormatForTimeZone(selectedTimeZone); 310 } 311 } 312 313 320 public void timeZoneChanged(ValueChangeEvent event) { 321 UIComponent comp = event.getComponent(); 322 FacesContext context = FacesContext.getCurrentInstance(); 323 String componentId = comp.getClientId(context); 324 TimeZoneWrapper tzw = getTimeZoneWrapperByComponentId(componentId); 325 if (tzw != null) { 326 boolean checked = ((Boolean ) event.getNewValue()).booleanValue(); 327 if (checked) { 329 if (!checkedTimeZoneList.contains(tzw)) { 330 checkedTimeZoneList.add(tzw); 331 } 332 } 333 else { 335 checkedTimeZoneList.remove(tzw); 336 } 337 checkboxStates.put(tzw.getCheckboxId(), checked ? "true" : "false"); 338 } 339 } 340 341 346 public Hashtable getCheckboxStates() { 347 return checkboxStates; 348 } 349 350 356 public void setCheckboxStates(Hashtable checkboxStates) { 357 this.checkboxStates = checkboxStates; 358 } 359 } 360 | Popular Tags |