1 16 package dlog4j.tags; 17 18 import java.util.List ; 19 20 import javax.servlet.jsp.JspException ; 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 38 public class LogTag extends DlogBaseTag { 39 40 private boolean withReplies = false; 41 private int logId = -1; 42 private String nextid = null; 43 private String previd = null; 44 45 48 public int doStartTag() throws JspException { 49 int log_id = logId; 50 if (log_id == -1) 51 try { 52 String 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 e) {} 58 int cat_id = -1; 59 try { 60 cat_id = Integer.parseInt(pageContext.getRequest().getParameter(Globals.PARAM_CATEGORYID)); 61 }catch(Exception 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 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 String 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 pls = q1.list(); 104 if(pls.size()>0) 106 pageContext.setAttribute(previd, pls.get(0)); 107 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 nls = q2.list(); 125 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 (e); 134 } catch (Exception e) { 135 throw new JspException (e); 136 } finally { 137 try { 138 commitSession(ssn,true); 139 } catch (Exception 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 getToken(int log_id){ 150 return (String )pageContext.getSession().getAttribute("VIEW_LOG_"+log_id); 151 } 152 153 public int doEndTag() throws JspException { 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 166 public boolean isWithReplies() { 167 return withReplies; 168 } 169 170 173 public void setWithReplies(boolean b) { 174 withReplies = b; 175 } 176 177 180 public int getLogId() { 181 return logId; 182 } 183 184 187 public void setLogId(int i) { 188 logId = i; 189 } 190 191 194 public String getNextid() { 195 return nextid; 196 } 197 198 201 public String getPrevid() { 202 return previd; 203 } 204 205 208 public void setNextid(String string) { 209 nextid = string; 210 } 211 212 215 public void setPrevid(String string) { 216 previd = string; 217 } 218 219 } 220 | Popular Tags |