KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > jaspersoft > jasperserver > api > engine > common > service > impl > HibernateLoggingService


1 /*
2  * Copyright (C) 2006 JasperSoft http://www.jaspersoft.com
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed WITHOUT ANY WARRANTY; and without the
10  * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
11  * See the GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program; if not, see http://www.gnu.org/licenses/gpl.txt
15  * or write to:
16  *
17  * Free Software Foundation, Inc.,
18  * 59 Temple Place - Suite 330,
19  * Boston, MA USA 02111-1307
20  */

21 package com.jaspersoft.jasperserver.api.engine.common.service.impl;
22
23 import java.util.Calendar JavaDoc;
24 import java.util.Date JavaDoc;
25 import java.util.List JavaDoc;
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 /**
41  * @author Lucian Chirita (lucianc@users.sourceforge.net)
42  * @version $Id: HibernateLoggingService.java 3781 2006-06-21 16:30:51Z inedelcu $
43  */

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 JavaDoc());
92         }
93         event.setUsername(securityContextProvider.getContextUsername());
94     }
95
96     public void purge() {
97         Calendar JavaDoc cal = Calendar.getInstance();
98         cal.add(Calendar.DATE, -getMaximumAge());
99         Date JavaDoc 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 JavaDoc getUserEvents(ExecutionContext context) {
119         String JavaDoc 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 JavaDoc events = getHibernateTemplate().findByCriteria(criteria);
128
129         return events;
130     }
131
132     public List JavaDoc getUnreadEvents(ExecutionContext context)
133     {
134         String JavaDoc username = securityContextProvider.getContextUsername();
135
136         DetachedCriteria criteria = DetachedCriteria.forClass(LogEventImpl.class);
137         criteria.add(Restrictions.eq("state", new Byte JavaDoc(LogEvent.STATE_UNREAD)));
138         if (username != null) {
139             criteria.add(Restrictions.eq("username", username));
140         }
141         criteria.addOrder(Order.desc("occurrenceDate"));
142
143         List JavaDoc events = getHibernateTemplate().findByCriteria(criteria);
144
145         return events;
146     }
147
148     public LogEvent getLogEvent(ExecutionContext context, long id) {
149         // TODO check username
150
LogEvent event = (LogEvent) getHibernateTemplate().get(LogEventImpl.class, new Long JavaDoc(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 JavaDoc username = securityContextProvider.getContextUsername();
160
161         List JavaDoc result = getHibernateTemplate().find("select count(*) from LogEventImpl where state=?", Byte.valueOf(LogEvent.STATE_UNREAD));
162
163         if (result != null) {
164             Integer JavaDoc size = (Integer JavaDoc) result.get(0);
165             return size.intValue();
166         }
167         return 0;
168     }
169 }
170
Popular Tags