1 21 package com.jaspersoft.jasperserver.api.engine.common.service.impl; 22 23 import java.util.Calendar ; 24 import java.util.Date ; 25 import java.util.List ; 26 27 import org.apache.commons.logging.Log; 28 import org.apache.commons.logging.LogFactory; 29 import org.hibernate.criterion.DetachedCriteria; 30 import org.hibernate.criterion.Order; 31 import org.hibernate.criterion.Restrictions; 32 import org.springframework.orm.hibernate3.support.HibernateDaoSupport; 33 34 import com.jaspersoft.jasperserver.api.common.domain.ExecutionContext; 35 import com.jaspersoft.jasperserver.api.common.domain.LogEvent; 36 import com.jaspersoft.jasperserver.api.common.domain.impl.LogEventImpl; 37 import com.jaspersoft.jasperserver.api.engine.common.service.LoggingService; 38 import com.jaspersoft.jasperserver.api.engine.common.service.SecurityContextProvider; 39 40 44 public class HibernateLoggingService extends HibernateDaoSupport implements LoggingService { 45 46 private static final Log log = LogFactory.getLog(HibernateLoggingService.class); 47 48 private static final long EVENT_ID_NEW = 0l; 49 50 private SecurityContextProvider securityContextProvider; 51 private int maximumAge; 52 53 public SecurityContextProvider getSecurityContextProvider() { 54 return securityContextProvider; 55 } 56 57 public void setSecurityContextProvider( 58 SecurityContextProvider securityContextProvider) { 59 this.securityContextProvider = securityContextProvider; 60 } 61 62 public int getMaximumAge() { 63 return maximumAge; 64 } 65 66 public void setMaximumAge(int days) { 67 this.maximumAge = days; 68 } 69 70 public LogEvent instantiateLogEvent() { 71 return createLogEvent(); 72 } 73 74 protected LogEvent createLogEvent() { 75 return new LogEventImpl(); 76 } 77 78 public void log(LogEvent event) { 79 prepareForSave(event); 80 getHibernateTemplate().save(event); 81 } 82 83 public void update(LogEvent event) 84 { 85 getHibernateTemplate().saveOrUpdate(event); 86 } 87 88 protected void prepareForSave(LogEvent event) { 89 event.setId(EVENT_ID_NEW); 90 if (event.getOccurrenceDate() == null) { 91 event.setOccurrenceDate(new Date ()); 92 } 93 event.setUsername(securityContextProvider.getContextUsername()); 94 } 95 96 public void purge() { 97 Calendar cal = Calendar.getInstance(); 98 cal.add(Calendar.DATE, -getMaximumAge()); 99 Date last = cal.getTime(); 100 101 if (log.isDebugEnabled()) { 102 log.debug("Purging log events older than " + last); 103 } 104 105 getHibernateTemplate().bulkUpdate("delete LogEventImpl e where e.occurrenceDate < ?", last); 106 } 107 108 109 public void delete(ExecutionContext context, long[] eventIds) 110 { 111 for (int i = 0; i < eventIds.length; i++) { 112 LogEvent event = getLogEvent(context, eventIds[i]); 113 getHibernateTemplate().delete(event); 114 } 115 } 116 117 118 public List getUserEvents(ExecutionContext context) { 119 String username = securityContextProvider.getContextUsername(); 120 121 DetachedCriteria criteria = DetachedCriteria.forClass(LogEventImpl.class); 122 if (username != null) { 123 criteria.add(Restrictions.eq("username", username)); 124 } 125 criteria.addOrder(Order.desc("occurrenceDate")); 126 127 List events = getHibernateTemplate().findByCriteria(criteria); 128 129 return events; 130 } 131 132 public List getUnreadEvents(ExecutionContext context) 133 { 134 String username = securityContextProvider.getContextUsername(); 135 136 DetachedCriteria criteria = DetachedCriteria.forClass(LogEventImpl.class); 137 criteria.add(Restrictions.eq("state", new Byte (LogEvent.STATE_UNREAD))); 138 if (username != null) { 139 criteria.add(Restrictions.eq("username", username)); 140 } 141 criteria.addOrder(Order.desc("occurrenceDate")); 142 143 List events = getHibernateTemplate().findByCriteria(criteria); 144 145 return events; 146 } 147 148 public LogEvent getLogEvent(ExecutionContext context, long id) { 149 LogEvent event = (LogEvent) getHibernateTemplate().get(LogEventImpl.class, new Long (id)); 151 if (event == null) { 152 log.debug("Log event with id " + id + " not found"); 153 } 154 return event; 155 } 156 157 public int getUserEventsCount(ExecutionContext context) 158 { 159 String username = securityContextProvider.getContextUsername(); 160 161 List result = getHibernateTemplate().find("select count(*) from LogEventImpl where state=?", Byte.valueOf(LogEvent.STATE_UNREAD)); 162 163 if (result != null) { 164 Integer size = (Integer ) result.get(0); 165 return size.intValue(); 166 } 167 return 0; 168 } 169 } 170 | Popular Tags |