1 63 package com.ivata.groupware.business.calendar; 64 65 import java.sql.Timestamp ; 66 import java.util.ArrayList ; 67 import java.util.Arrays ; 68 import java.util.Collection ; 69 import java.util.GregorianCalendar ; 70 import java.util.Iterator ; 71 import java.util.TimeZone ; 72 import java.util.TreeSet ; 73 74 import com.ivata.groupware.admin.security.server.SecuritySession; 75 import com.ivata.groupware.business.BusinessLogic; 76 import com.ivata.groupware.business.calendar.event.EventDO; 77 import com.ivata.groupware.business.calendar.event.meeting.MeetingDO; 78 import com.ivata.groupware.business.calendar.event.publicholiday.PublicHolidayDO; 79 import com.ivata.groupware.container.persistence.QueryPersistenceManager; 80 import com.ivata.groupware.container.persistence.TimestampDOHandling; 81 import com.ivata.mask.Mask; 82 import com.ivata.mask.MaskFactory; 83 import com.ivata.mask.persistence.PersistenceSession; 84 import com.ivata.mask.util.StringHandling; 85 import com.ivata.mask.util.SystemException; 86 import com.ivata.mask.validation.ValidationError; 87 import com.ivata.mask.validation.ValidationErrors; 88 import com.ivata.mask.validation.ValidationException; 89 90 96 public class CalendarImpl extends BusinessLogic implements Calendar { 97 98 101 private class EventComparator implements java.util.Comparator { 102 103 113 public int compare(final Object o1, 114 final Object o2) { 115 EventDO event1 = (EventDO) o1; 116 EventDO event2 = (EventDO) o2; 117 long test1 = event1.getStart().getTime().getTime(); 118 long test2 = event2.getStart().getTime().getTime(); 119 120 return (test1 > test2) ? 1 : -1; 123 } 124 } 125 126 129 private QueryPersistenceManager persistenceManager; 130 131 136 public CalendarImpl(QueryPersistenceManager persistenceManager, 137 MaskFactory maskFactory) { 138 this.persistenceManager = persistenceManager; 139 this.maskFactory = maskFactory; 140 } 141 private MaskFactory maskFactory; 142 143 144 147 public EventDO addEvent(final SecuritySession securitySession, 148 final EventDO event) 149 throws SystemException { 150 PersistenceSession persistenceSession = persistenceManager.openSession(securitySession); 151 try { 152 ValidationErrors errors = validate(securitySession, event); 154 if (!errors.isEmpty()) { 155 throw new ValidationException(errors); 156 } 157 TimestampDOHandling.add(securitySession, event); 158 return (EventDO) persistenceManager.add(persistenceSession, event); 159 } catch (Exception e) { 160 persistenceSession.cancel(); 161 throw new SystemException(e); 162 } finally { 163 persistenceSession.close(); 164 } 165 } 166 167 178 205 206 207 210 public EventDO amendEvent(final SecuritySession securitySession, 211 final EventDO event) 212 throws SystemException { 213 PersistenceSession persistenceSession = persistenceManager.openSession(securitySession); 214 try { 215 ValidationErrors errors = validate(securitySession, event); 217 if (!errors.isEmpty()) { 218 throw new ValidationException(errors); 219 } 220 TimestampDOHandling.amend(securitySession, event); 221 persistenceManager.amend(persistenceSession, event); 222 return event; 223 } catch (Exception e) { 224 persistenceSession.cancel(); 225 throw new SystemException(e); 226 } finally { 227 persistenceSession.close(); 228 } 229 } 230 231 234 public EventDO findEventByPrimaryKey(final SecuritySession securitySession, 235 final String id) 236 throws SystemException { 237 PersistenceSession persistenceSession = persistenceManager.openSession(securitySession); 238 try { 239 return (EventDO) persistenceManager.findByPrimaryKey(persistenceSession, 240 EventDO.class, id); 241 } catch (Exception e) { 242 persistenceSession.cancel(); 243 throw new SystemException(e); 244 } finally { 245 persistenceSession.close(); 246 } 247 } 248 249 252 public Collection findEventsForDay(final SecuritySession securitySession, 253 final java.util.Calendar day) 254 throws SystemException { 255 PersistenceSession persistenceSession = persistenceManager.openSession(securitySession); 256 try { 257 GregorianCalendar tmpday = new GregorianCalendar (); 258 TimeZone timeZone = day.getTimeZone(); 259 260 tmpday.setTime(day.getTime()); 261 tmpday.setTimeZone(timeZone); 262 Timestamp start = new Timestamp (tmpday.getTime().getTime()); 263 264 tmpday.set(java.util.Calendar.DAY_OF_YEAR, tmpday.get(java.util.Calendar.DAY_OF_YEAR) + 1); Timestamp finish = new Timestamp (tmpday.getTime().getTime()); 266 Collection events = persistenceManager.find(persistenceSession, "calendarEventByStartFinish", 267 new Object [] {start, finish}); 268 TreeSet sorted = new TreeSet (new EventComparator()); 271 272 sorted.addAll(events); 273 Collection returnItems = new ArrayList (); 274 for (Iterator i = sorted.iterator(); 279 i.hasNext();) { 280 EventDO eventDO = (EventDO) i.next(); 281 java.util.Calendar tmpStart = eventDO.getStart(); 284 if (tmpStart!=null) { 285 tmpStart.setTimeZone(timeZone); 286 eventDO.setStart(tmpStart); 287 } 288 java.util.Calendar tmpFinish = eventDO.getFinish(); 289 if (tmpFinish!=null) { 290 tmpFinish.setTimeZone(timeZone); 291 eventDO.setFinish(tmpFinish); 292 } 293 294 returnItems.add(eventDO); 295 } 296 return returnItems; 297 } catch (Exception e) { 298 persistenceSession.cancel(); 299 throw new SystemException(e); 300 } finally { 301 persistenceSession.close(); 302 } 303 } 304 305 308 public void removeEvent(final SecuritySession securitySession, 309 final EventDO event) 310 throws SystemException { 311 PersistenceSession persistenceSession = persistenceManager.openSession(securitySession); 312 try { 313 persistenceManager.remove(persistenceSession, 314 event.getClass(), event.getId()); 315 } catch (Exception e) { 316 persistenceSession.cancel(); 317 throw new SystemException(e); 318 } finally { 319 persistenceSession.close(); 320 } 321 } 322 323 326 public ValidationErrors validate(final SecuritySession securitySession, 327 final EventDO eventDO) { 328 ValidationErrors errors = new ValidationErrors(); 329 Mask mask = maskFactory.getMask(EventDO.class); 330 String fieldKey; 331 332 String startFieldKey = ""; 333 String finishFieldKey = ""; 334 335 if (eventDO instanceof PublicHolidayDO) { 337 startFieldKey = "event.field.startDate.publicHoliday"; 338 finishFieldKey = "event.field.finishDate.publicHoliday"; 339 } else { 340 startFieldKey = "event.field.startDate"; 341 finishFieldKey = "event.field.finishDate"; 342 } 343 344 if (eventDO.getStart() == null) { 346 errors.add(new ValidationError( 347 "event", 348 Calendar.BUNDLE_PATH, 349 mask.getField("start"), 350 "errors.required")); 351 } 352 353 if (eventDO.getStart() != null && eventDO.getFinish()!= null && 355 eventDO.getStart().after(eventDO.getFinish())) { 356 357 errors.add(new ValidationError( 358 "event", 359 Calendar.BUNDLE_PATH, 360 mask.getField("finish"), 361 "errors.calendar.startAfterFinish", 362 Arrays.asList(new String [] { 363 startFieldKey, 364 finishFieldKey}))); 365 } 366 367 if (StringHandling.isNullOrEmpty(eventDO.getSubject())) { 369 if (eventDO instanceof PublicHolidayDO) { 371 fieldKey = "event.field.subject.publicHoliday"; 372 } else { 373 fieldKey = "event.field.subject"; 374 } 375 errors.add(new ValidationError( 376 "event", 377 Calendar.BUNDLE_PATH, 378 mask.getField("subject"), 379 "errors.required")); 380 } 381 return errors; 382 } 383 384 387 public ValidationErrors validate(final 388 SecuritySession securitySession, 389 final MeetingDO meetingDO) { 390 ValidationErrors errors = validate(securitySession, (EventDO) meetingDO); 391 Mask mask = maskFactory.getMask(MeetingDO.class); 392 393 if (StringHandling.isNullOrEmpty(meetingDO.getLocation())) { 395 errors.add(new ValidationError( 396 "event", 397 Calendar.BUNDLE_PATH, 398 mask.getField("location"), 399 "errors.required")); 400 } 401 return errors; 402 } 403 404 } 405 | Popular Tags |