1 2 package org.roller.presentation.tags.calendar; 3 4 import org.apache.commons.beanutils.PropertyUtils; 5 import org.apache.commons.logging.Log; 6 import org.apache.commons.logging.LogFactory; 7 import org.apache.struts.Globals; 8 import org.apache.struts.config.ModuleConfig; 9 import org.apache.struts.util.MessageResources; 10 import org.apache.struts.util.RequestUtils; 11 import org.roller.presentation.tags.HybridTag; 12 import org.roller.util.DateUtil; 13 14 import java.io.PrintWriter ; 15 import java.text.SimpleDateFormat ; 16 import java.util.Calendar ; 17 import java.util.Date ; 18 import java.util.Locale ; 19 import java.util.StringTokenizer ; 20 21 import javax.servlet.ServletContext ; 22 import javax.servlet.http.HttpServletRequest ; 23 import javax.servlet.jsp.JspException ; 24 import javax.servlet.jsp.tagext.Tag ; 25 import org.roller.presentation.RollerContext; 26 27 28 32 public class CalendarTag extends HybridTag 33 { 34 private static Log mLogger = 35 LogFactory.getFactory().getInstance(CalendarTag.class); 36 37 39 40 public String getName() { return mName; } 41 public void setName( String name ) { mName = name; } 42 private String mName = null; 43 44 49 50 51 public String getModel() { return mModelName; } 52 public void setModel( String s ) { mModelName= s; } 53 private String mModelName = null; 54 55 56 public String getClassSuffix() { return mClassSuffix; } 57 public void setClassSuffix( String s ) { mClassSuffix= s; } 58 private String mClassSuffix = ""; 59 60 public void setLocale(Locale locale) { 62 if (locale != null) 63 mLocale = locale; 64 } 65 private Locale mLocale = Locale.getDefault(); 66 67 82 83 private String [] mDayNames = null; 84 85 public CalendarTag() 86 { 87 94 } 95 96 100 public int doStartTag( PrintWriter pw ) throws JspException 101 { 102 try 103 { 104 this.buildDayNames(); 106 107 Date day=null; Calendar dayCal; Calendar cal; Calendar todayCal; CalendarModel model; 113 117 StringTokenizer toker = new StringTokenizer (mModelName,"."); 119 String tok1 = toker.nextToken(); 120 if (toker.hasMoreTokens()) 121 { 122 String tok2 = toker.nextToken(); 123 Object bean = pageContext.findAttribute(tok1); 124 model = (CalendarModel)PropertyUtils.getProperty(bean, tok2); 125 } 126 else 127 { 128 model = (CalendarModel)pageContext.findAttribute( mModelName ); 129 } 130 131 if (model == null) 133 { 134 return SKIP_BODY; 135 } 136 137 day = model.getDay(); 138 139 todayCal = model.getCalendar(); 141 todayCal.setTime( new Date () ); 142 143 SimpleDateFormat formatTitle = new SimpleDateFormat ("MMMM yyyy", mLocale); 145 146 HttpServletRequest request = 147 (HttpServletRequest )pageContext.getRequest(); 148 149 MessageResources resources = getResources(request); 151 152 cal = model.getCalendar(); 154 day = DateUtil.getNoonOfDay(day, cal); 155 cal.set( Calendar.DAY_OF_MONTH, cal.getMinimum(Calendar.DAY_OF_MONTH) ); 156 157 while ( cal.get( Calendar.DAY_OF_WEEK ) != Calendar.SUNDAY ) 159 { 160 cal.add( Calendar.DATE, -1 ); 161 } 162 163 dayCal = model.getCalendar(); 165 dayCal.setTime( day ); 166 167 pw.print("<table cellspacing=\"0\" border=\"0\" "); 171 pw.print(" summary=\"" 172 +resources.getMessage(mLocale, "calendar.summary") 173 +"\" class=\"hCalendarTable" 174 +mClassSuffix+"\">"); 175 pw.print("<tr>"); 176 pw.print("<td colspan=\"7\" align=\"center\" "+ 177 "class=\"hCalendarMonthYearRow"+mClassSuffix+"\">"); 178 pw.print("<a HREF=\"" + model.computePrevMonthUrl() 179 + "\" title=\"" + resources.getMessage(mLocale, "calendar.prev") 180 + "\" class=\"hCalendarNavBar\">«</a> "); 181 pw.print( formatTitle.format(day) ); 182 if (todayCal.getTime().compareTo(model.getNextMonth()) >= 0) 183 { 184 pw.print(" <a HREF=\"" + model.computeNextMonthUrl() 185 + "\" title=\"" + resources.getMessage(mLocale, "calendar.next") 186 + "\" class=\"hCalendarNavBar\">»</a>"); 187 } 188 pw.print("</td></tr>"); 189 190 for ( int w=-1; w<6; w++ ) 192 { 193 pw.print("<tr>"); 194 for ( int d=0; d<7; d++ ) 195 { 196 if ( w == -1 ) 197 { 198 pw.print( 199 "<th class=\"hCalendarDayNameRow" 200 +mClassSuffix+"\" align=\"center\">"); 201 pw.print( mDayNames[d] ); 202 pw.print("</th>"); 203 continue; 204 } 205 206 Date tddate = cal.getTime(); 208 String url = model.computeUrl( tddate, false ); 209 String content = model.getContent( tddate ); 210 211 if (( cal.get(Calendar.DAY_OF_MONTH) 213 == todayCal.get(Calendar.DAY_OF_MONTH)) 214 && ( cal.get(Calendar.MONTH) 215 == todayCal.get(Calendar.MONTH)) 216 && ( cal.get(Calendar.YEAR) 217 == todayCal.get(Calendar.YEAR))) 218 { 219 printToday(pw, cal, url, content); 220 } 221 else if ((cal.get(Calendar.MONTH) == dayCal.get(Calendar.MONTH)) 223 && (cal.get(Calendar.YEAR) == dayCal.get(Calendar.YEAR))) 224 { 225 printDayInThisMonth(pw, cal, url, content); 226 } 227 else { 229 printDayNotInMonth(pw, cal); 230 } 231 232 cal.add( Calendar.DATE, 1 ); 234 } 235 pw.print("</tr>"); 236 } 237 238 pw.print("<tr class=\"hCalendarNextPrev" 239 +mClassSuffix+"\">"); 240 pw.print("<td colspan=\"7\" align=\"center\">"); 241 242 pw.print("<a HREF=\""+model.computeTodayMonthUrl() 243 +"\" class=\"hCalendarNavBar\">" 244 +resources.getMessage(mLocale, "calendar.today") 245 +"</a>"); 246 247 pw.print("</td>"); 248 pw.print("</tr>"); 249 250 pw.print("</table>"); 251 } 252 catch (Exception e) 253 { 254 pw.print("<span class=\"error\">"); 255 pw.print("<p><b>An ERROR has occured CalendarTag</b></p>"); 256 pw.print("</span>"); 257 mLogger.error("Calendar tag exception",e); 258 } 259 return Tag.SKIP_BODY; 260 } 261 262 private void printDayNotInMonth(PrintWriter pw, Calendar cal) 263 { 264 pw.print("<td class=\"hCalendarDayNotInMonth"+mClassSuffix+"\">"); 265 pw.print(" "); 267 pw.print("</td>"); 268 } 269 270 private void printDayInThisMonth(PrintWriter pw, Calendar cal, String url, String content) 271 { 272 if ( content!=null ) 273 { 274 pw.print("<td class=\"hCalendarDayCurrent" 275 +mClassSuffix+"\">"); 276 pw.print( content ); 277 pw.print("</td>"); 278 } 279 else if (url!=null) 280 { 281 pw.print("<td class=\"hCalendarDayLinked" 282 +mClassSuffix+"\">"); 283 pw.print("<div class=\"hCalendarDayTitle" 284 +mClassSuffix+"\">"); 285 pw.print("<a HREF=\""+url+"\">"); 286 pw.print(cal.get(Calendar.DAY_OF_MONTH)); 287 pw.print("</a></div>"); 288 pw.print("</td>"); 289 } 290 else 291 { 292 pw.print("<td class=\"hCalendarDay" 293 +mClassSuffix+"\">"); 294 pw.print("<div class=\"hCalendarDayTitle" 295 +mClassSuffix+"\">"); 296 pw.print(cal.get(Calendar.DAY_OF_MONTH)); 297 pw.print("</div>"); 298 pw.print("</td>"); 299 } 300 } 301 302 private void printToday(PrintWriter pw, Calendar cal, String url, String content) 303 { 304 if ( content!=null ) 305 { 306 pw.print("<td class=\"hCalendarDayCurrent" 307 +mClassSuffix+"\">"); 308 pw.print( content ); 309 pw.print("</td>"); 310 } 311 else if (url!=null) 312 { 313 pw.print("<td class=\"hCalendarDayCurrent" 314 +mClassSuffix+"\">"); 315 pw.print("<a HREF=\""+url+"\" " 316 +"class=\"hCalendarDayTitle"+mClassSuffix+"\">"); 317 pw.print(cal.get(Calendar.DAY_OF_MONTH)); 318 pw.print("</a>"); 319 pw.print("</td>"); 320 } 321 else 322 { 323 pw.print("<td class=\"hCalendarDayCurrent" 324 +mClassSuffix+"\">"); 325 pw.print("<div class=\"hCalendarDayTitle" 326 +mClassSuffix+"\">"); 327 pw.print(cal.get(Calendar.DAY_OF_MONTH)); 328 pw.print("</div></td>"); 329 } 330 } 331 private MessageResources getResources(HttpServletRequest request) { 332 ServletContext app = RollerContext.getServletContext(); 333 ModuleConfig moduleConfig = RequestUtils.getModuleConfig(request, app); 334 return (MessageResources)app.getAttribute(Globals.MESSAGES_KEY + 335 moduleConfig.getPrefix()); 336 } 337 338 343 private void buildDayNames() 344 { 345 mDayNames = new String [7]; 347 Calendar dayNameCal = Calendar.getInstance(); 348 SimpleDateFormat dayFormatter = new SimpleDateFormat ("EEE", mLocale); 349 dayNameCal.set(Calendar.DAY_OF_WEEK, 0); 350 for (int dnum = 0; dnum < 7; dnum++) 351 { 352 dayNameCal.add(Calendar.DATE, 1); 353 mDayNames[dnum] = dayFormatter.format(dayNameCal.getTime()); 354 } 355 } 356 357 } 358 359 | Popular Tags |