KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > dlog4j > tags > LogTag


1 /*
2  * This program is free software; you can redistribute it and/or modify
3  * it under the terms of the GNU General Public License as published by
4  * the Free Software Foundation; either version 2 of the License, or
5  * (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  * GNU Library General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software
14  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
15  */

16 package dlog4j.tags;
17
18 import java.util.List JavaDoc;
19
20 import javax.servlet.jsp.JspException JavaDoc;
21
22 import net.sf.hibernate.HibernateException;
23 import net.sf.hibernate.Query;
24 import net.sf.hibernate.Session;
25 import dlog4j.Globals;
26 import dlog4j.LogManager;
27 import dlog4j.formbean.CategoryForm;
28 import dlog4j.formbean.LogForm;
29 import dlog4j.formbean.ReplyForm;
30 import dlog4j.formbean.SiteForm;
31 import dlog4j.formbean.TrackBackForm;
32 import dlog4j.formbean.UserForm;
33
34 /**
35  * @author Liudong
36  * 用于查询日志的详细信息
37  */

38 public class LogTag extends DlogBaseTag {
39
40     private boolean withReplies = false;
41     private int logId = -1;
42     private String JavaDoc nextid = null;
43     private String JavaDoc previd = null;
44
45     /* (non-Javadoc)
46      * @see javax.servlet.jsp.tagext.Tag#doStartTag()
47      */

48     public int doStartTag() throws JspException JavaDoc {
49         int log_id = logId;
50         if (log_id == -1)
51             try {
52                 String JavaDoc sLogid = pageContext.getRequest().getParameter(Globals.PARAM_LOG);
53                 int idx = sLogid.indexOf('#');
54                 if(idx!=-1)
55                     sLogid = sLogid.substring(0,idx);
56                 log_id = Integer.parseInt(sLogid);
57             } catch (Exception JavaDoc e) {}
58         int cat_id = -1;
59         try {
60             cat_id = Integer.parseInt(pageContext.getRequest().getParameter(Globals.PARAM_CATEGORYID));
61         }catch(Exception JavaDoc e) {}
62         
63         if (log_id >= 0) {
64             SiteForm site = getCurrentSite();
65             Session ssn = null;
66             try {
67                 ssn = getSession();
68                 
69                 UserForm loginUser = getLoginUser();
70                 LogForm log = LogManager.getLogForm(ssn,site,loginUser,log_id);
71                 if (log != null){
72                     //读取TrackBacks
73
Query q = ssn.createQuery("FROM "+TrackBackForm.class.getName()+" AS t WHERE t.log.id=? ORDER BY t.refTime DESC");
74                     q.setInteger(0,log_id);
75                     log.setTrackBacks(q.list());
76                 }
77                 if (log != null && withReplies) {
78                     if(getToken(log_id)==null){
79                         saveToken(log_id);
80                         log.setViewCount(log.getViewCount()+1);
81                         ssn.update(log);
82                     }
83                     Query q = ssn.createQuery("FROM " + ReplyForm.class.getName() + " AS r WHERE r.log.id=? ORDER BY r.writeTime");
84                     q.setInteger(0,log_id);
85                     log.setReplies(q.list());
86                     //加载前一个日志
87
String JavaDoc hql = "FROM "+LogForm.class.getName()+" AS log WHERE log.id<? AND log.status=? AND log.site.id=?";
88                     hql += " AND log.category.type<>?";
89                     if(cat_id!=-1)
90                         hql += " AND log.category.id=?";
91                     hql += " ORDER BY log.logTime DESC";
92                     Query q1 = ssn.createQuery(hql);
93                     q1.setInteger(0,log_id);
94                     q1.setInteger(1,LogForm.STATUS_NORMAL);
95                     q1.setInteger(2,site.getId());
96                     if(loginUser==null||!loginUser.isAdmin())
97                         q1.setInteger(3, CategoryForm.TYPE_OWNER);
98                     else
99                         q1.setInteger(3, Integer.MIN_VALUE);
100                     if(cat_id!=-1)
101                         q1.setInteger(4, cat_id);
102                     q1.setMaxResults(1);
103                     List JavaDoc pls = q1.list();
104                     //List pls = ssn.createCriteria(LogForm.class).add(Expression.lt("id",new Integer(log_id))).add(Expression.not(Expression.eq("status",new Integer(LogForm.STATUS_DELETED)))).addOrder(Order.desc("logTime")).setMaxResults(1).list();
105
if(pls.size()>0)
106                         pageContext.setAttribute(previd, pls.get(0));
107                     //加载后一个日志
108
hql = "FROM "+LogForm.class.getName()+" AS log WHERE log.id>? AND log.status=? AND log.site.id=?";
109                     hql += " AND log.category.type<>?";
110                     if(cat_id!=-1)
111                         hql += " AND log.category.id=?";
112                     hql += " ORDER BY log.logTime";
113                     Query q2 = ssn.createQuery(hql);
114                     q2.setInteger(0,log_id);
115                     q2.setInteger(1,LogForm.STATUS_NORMAL);
116                     q2.setInteger(2,site.getId());
117                     if(loginUser==null||!loginUser.isAdmin())
118                         q2.setInteger(3, CategoryForm.TYPE_OWNER);
119                     else
120                         q2.setInteger(3, Integer.MIN_VALUE);
121                     if(cat_id!=-1)
122                         q2.setInteger(4, cat_id);
123                     q2.setMaxResults(1);
124                     List JavaDoc nls = q2.list();
125                     //List nls = ssn.createCriteria(LogForm.class).add(Expression.gt("id",new Integer(log_id))).add(Expression.not(Expression.eq("status",new Integer(LogForm.STATUS_DELETED)))).addOrder(Order.asc("logTime")).setMaxResults(1).list();
126
if(nls.size()>0)
127                         pageContext.setAttribute(nextid, nls.get(0));
128                 }
129                 if (log != null)
130                     pageContext.setAttribute(id, log);
131                 
132             } catch (HibernateException e) {
133                 throw new JspException JavaDoc(e);
134             } catch (Exception JavaDoc e) {
135                 throw new JspException JavaDoc(e);
136             } finally {
137                 try {
138                     commitSession(ssn,true);
139                 } catch (Exception JavaDoc e) {}
140             }
141         }
142         return SKIP_BODY;
143     }
144     
145     protected void saveToken(int log_id){
146         pageContext.getSession().setAttribute("VIEW_LOG_"+log_id, String.valueOf(log_id));
147     }
148     
149     protected String JavaDoc getToken(int log_id){
150         return (String JavaDoc)pageContext.getSession().getAttribute("VIEW_LOG_"+log_id);
151     }
152
153     public int doEndTag() throws JspException JavaDoc {
154         release();
155         return EVAL_PAGE;
156     }
157     public void release() {
158         withReplies = false;
159         logId = -1;
160         nextid = null;
161         previd = null;
162     }
163     /**
164      * @return
165      */

166     public boolean isWithReplies() {
167         return withReplies;
168     }
169
170     /**
171      * @param b
172      */

173     public void setWithReplies(boolean b) {
174         withReplies = b;
175     }
176
177     /**
178      * @return
179      */

180     public int getLogId() {
181         return logId;
182     }
183
184     /**
185      * @param i
186      */

187     public void setLogId(int i) {
188         logId = i;
189     }
190
191     /**
192      * @return
193      */

194     public String JavaDoc getNextid() {
195         return nextid;
196     }
197
198     /**
199      * @return
200      */

201     public String JavaDoc getPrevid() {
202         return previd;
203     }
204
205     /**
206      * @param string
207      */

208     public void setNextid(String JavaDoc string) {
209         nextid = string;
210     }
211
212     /**
213      * @param string
214      */

215     public void setPrevid(String JavaDoc string) {
216         previd = string;
217     }
218
219 }
220
Popular Tags