1 21 package com.jaspersoft.jasperserver.war.tags; 22 23 import java.io.*; 24 import java.util.*; 25 26 import javax.servlet.ServletContext ; 27 import javax.servlet.jsp.JspException ; 28 import javax.servlet.jsp.PageContext ; 29 import javax.servlet.jsp.tagext.TagSupport ; 30 import javax.servlet.http.HttpServletRequest ; 31 32 import org.apache.commons.logging.Log; 33 import org.apache.commons.logging.LogFactory; 34 import org.springframework.web.context.WebApplicationContext; 35 import org.springframework.web.context.support.WebApplicationContextUtils; 36 37 import com.jaspersoft.jasperserver.war.common.JasperServerConst; 38 import com.jaspersoft.jasperserver.war.common.JasperServerConstImpl; 39 import com.jaspersoft.jasperserver.api.metadata.common.service.RepositoryService; 40 import com.jaspersoft.jasperserver.api.metadata.user.service.ObjectPermissionService; 41 import com.jaspersoft.jasperserver.api.common.domain.ExecutionContext; 42 import com.jaspersoft.jasperserver.api.common.domain.impl.ExecutionContextImpl; 43 44 import com.jaspersoft.jasperserver.api.metadata.user.domain.User; 45 import com.jaspersoft.jasperserver.api.metadata.user.domain.Role; 46 import com.jaspersoft.jasperserver.api.metadata.user.domain.ObjectPermission; 47 48 56 public class PaginationTag extends TagSupport { 57 58 private String retrvPerm = null; 59 private String htmlOP = null; 60 private List objectList = null; 61 private String resPerPage = null; 62 63 private static final Log log = LogFactory.getLog(PaginationTag.class); 64 65 70 public List getObjectList() { 71 return objectList; 72 } 73 74 79 public void setObjectList(List objectList) { 80 this.objectList = objectList; 81 } 82 83 84 89 public String getHtmlOP() { 90 return htmlOP; 91 } 92 93 98 public void setHtmlOP(String str) { 99 this.htmlOP = str; 100 } 101 102 107 public String getRetrvPerm() { 108 return retrvPerm; 109 } 110 111 116 public void setRetrvPerm(String str) { 117 this.retrvPerm = str; 118 } 119 120 125 public String getResPerPage() { 126 return resPerPage; 127 } 128 129 134 public void setResPerPage(String str) { 135 this.resPerPage = str; 136 } 137 138 142 public int doStartTag() throws JspException { 143 144 HttpServletRequest req = (HttpServletRequest ) pageContext.getRequest(); 145 List displayList = null; 146 int resultsPerPage = -1; 147 148 if(resPerPage != null && resPerPage.trim().length() != 0) 149 resultsPerPage = Integer.parseInt(resPerPage); 150 151 if(resultsPerPage <= 0) 152 resultsPerPage = Integer.parseInt(JasperServerConst.RESULTS_PER_PAGE); 153 154 if(objectList == null || objectList.size() == 0) { 155 log.info(" *** Search result object is NULL *** "); 156 return SKIP_BODY; 157 } 158 159 int currentPageSet = -1; 161 String strCurrPageSet = req.getParameter("currentpageset"); 162 if(strCurrPageSet == null || strCurrPageSet.trim().length() == 0 || strCurrPageSet.trim().equals("null")) { 163 currentPageSet = 1; 164 } else { 165 currentPageSet = Integer.parseInt(strCurrPageSet); 166 } 167 168 boolean dispNextSet = false; 169 int totObjects = objectList.size(); 170 int objListStIndex = -1, objListEndIndex = -1; 171 List objListCopy = new ArrayList(objectList); 172 int totalPageSets = getFirstLastSetDisplay(objectList.size(), resultsPerPage); 173 174 if(totObjects > currentPageSet*JasperServerConst.PAGE_SET_COUNT*resultsPerPage) { 175 dispNextSet = true; 176 objListStIndex = (currentPageSet-1)*JasperServerConst.PAGE_SET_COUNT*resultsPerPage; 177 objListEndIndex = currentPageSet*JasperServerConst.PAGE_SET_COUNT*resultsPerPage - 1; 178 objectList = objectList.subList(objListStIndex, objListEndIndex+1); 179 totObjects = objectList.size(); 180 } else { 181 objListStIndex = (currentPageSet-1)*JasperServerConst.PAGE_SET_COUNT*resultsPerPage; 182 objListEndIndex = totObjects - 1; 183 objectList = objectList.subList(objListStIndex, objListEndIndex+1); 184 totObjects = objectList.size(); 185 } 186 187 int totPages = totObjects/resultsPerPage; 188 if(totObjects%resultsPerPage != 0) 189 totPages += 1; 190 191 int pagenumber = -1, startIndex = -1, endIndex = -1, hrefPageNo = -1; 192 String pageNo = req.getParameter("currentpageno"); 193 194 if(pageNo == null || pageNo.trim().length() == 0 || pageNo.trim().equals("null")) { 195 pagenumber = 1; 196 } else { 197 pagenumber = Integer.parseInt(pageNo); 198 } 199 200 if(currentPageSet == 1) { 202 if(totObjects <= (pagenumber-1)*(resultsPerPage)) { 203 pagenumber = pagenumber - 1; 204 } 205 } else { 206 if(totObjects <= ((pagenumber%((currentPageSet-1)*(JasperServerConst.PAGE_SET_COUNT)))-1)*(resultsPerPage)) { 207 pagenumber = pagenumber - 1; 208 } 209 } 210 211 StringBuffer sbf = new StringBuffer (); 212 for(int ix = 1; ix <= totPages; ix++) { 213 hrefPageNo = ((currentPageSet-1)*JasperServerConst.PAGE_SET_COUNT) + ix; 214 if(hrefPageNo == pagenumber) { 215 sbf.append("<font color=\"#003399\" style=\"size:11px;\">" + hrefPageNo + "</font>" + " "); 216 } else { 217 sbf.append("<a HREF=\"javascript:pagenoclick("); 218 sbf.append(hrefPageNo + ");\""); 219 sbf.append(">" + hrefPageNo + "</a> "); 220 } 221 } 222 223 int pagenumber_bkup = pagenumber; 224 pagenumber = pagenumber - ((currentPageSet-1) * JasperServerConst.PAGE_SET_COUNT); 225 226 startIndex = ((pagenumber-1)*resultsPerPage); 227 if(totObjects < pagenumber*(resultsPerPage)) 228 endIndex = totObjects - 1; 229 else 230 endIndex = (pagenumber*resultsPerPage) - 1; 231 232 displayList = new ArrayList(); 233 for(int iy = startIndex; iy <= endIndex; iy++) { 234 displayList.add(objectList.get(iy)); 235 } 236 237 sbf.append(" "); 238 sbf.append("<input type=\"hidden\" name=\"currentpageno\" value=\"" + pagenumber_bkup + "\"/>"); 239 req.setAttribute("displayList", displayList); 240 241 if(currentPageSet > 1) { 243 sbf.insert(0, "<a HREF=\"javascript:prevSetclick(" + (currentPageSet-1) + ");\"" + "> Prev Set " + "</a>"); 244 } 245 246 if(currentPageSet > 2) { 248 sbf.insert(0, "<a HREF=\"javascript:prevSetclick(1);\"> First Set " + "</a>"); 249 } 250 251 if(dispNextSet) { 253 sbf.append(" <a HREF=\"javascript:nextSetclick(" + (currentPageSet+1) + ");\""); 254 sbf.append("> Next Set" + "</a>" + " "); 255 } 256 257 if(currentPageSet <= (totalPageSets - 2)) { 259 sbf.append(" <a HREF=\"javascript:nextSetclick(" + totalPageSets + ");\""); 260 sbf.append("> Last Set" + "</a>" + " "); 261 } 262 263 sbf.append("<input type=\"hidden\" name=\"currentpageset\" value=\"" + currentPageSet + "\"" + "/>"); 265 266 if(getRetrvPerm() != null && getRetrvPerm().equals("yes")) { 268 req.setAttribute("displayPermList", setPermissionToObjects(displayList)); 269 } 270 271 setHtmlOP(sbf.toString()); 272 return SKIP_BODY; 273 } 274 275 279 public int doEndTag() { 280 if(getHtmlOP()==null || getHtmlOP().trim().length()==0) 281 setHtmlOP(" "); 282 pageContext.setAttribute("pageLinks", htmlOP); 283 return EVAL_PAGE; 284 } 285 286 291 protected Hashtable setPermissionToObjects(List displayList) { 292 293 if(displayList == null || displayList.size() == 0) { 294 return null; 295 } 296 297 try { 298 HttpServletRequest req = (HttpServletRequest ) pageContext.getRequest(); 299 ServletContext servletContext = pageContext.getServletContext(); 300 WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext); 301 RepositoryService repository = (RepositoryService) wac.getBean("repositoryService"); 302 ObjectPermissionService objPermService = (ObjectPermissionService)wac.getBean("objectPermissionService"); 303 304 ExecutionContext context = new ExecutionContextImpl(); 305 Hashtable objPermList = new Hashtable(); 306 String objectIdentifier = req.getParameter("resource"); 307 Object targetObject = null; 308 if(objectIdentifier != null && objectIdentifier.trim().length() != 0) { 309 targetObject = repository.getResource(context, objectIdentifier); 310 311 if (targetObject == null) { 312 targetObject = repository.getFolder(context, objectIdentifier); 313 } 314 } 315 316 if (targetObject == null) { 317 log.warn("PaginationTag.setPermissionToObjects: *** targetObject resource is NULL *** "); 318 return objPermList; 319 } else { 320 log.debug("PaginationTag.setPermissionToObjects: targetObject - " + targetObject); 321 } 322 323 ListIterator iterator = displayList.listIterator(); 324 325 while (iterator.hasNext()) { 326 Object recpObject = iterator.next(); 327 328 String objPermKey = null; 329 330 if (recpObject instanceof User) { 331 objPermKey = ((User) recpObject).getUsername(); 332 } else if (recpObject instanceof Role) { 333 objPermKey = ((Role) recpObject).getRoleName(); 334 } else { 335 log.warn("PaginationTag.setPermissionToObjects: recipient object ignored " + recpObject); 336 } 337 338 if (objPermKey != null) { 339 Integer permissionToDisplay = new Integer (-1); 340 341 List lstPermns = objPermService.getObjectPermissionsForObjectAndRecipient(context, targetObject, recpObject); 342 if (lstPermns != null && lstPermns.size() > 0) { 343 ObjectPermission objPermission = (ObjectPermission) lstPermns.get(0); 344 345 347 if (objPermission != null && objPermission.getPermissionRecipient() != null) { 348 permissionToDisplay = new Integer (objPermission.getPermissionMask()); 349 } 350 } 351 objPermList.put(objPermKey, permissionToDisplay.toString()); 352 log.debug("PaginationTag.setPermissionToObjects: object:" + recpObject + ", " + objPermKey + " - permission: " + permissionToDisplay); 353 } 354 } 355 return objPermList; 356 } catch (Exception _ex) { 357 _ex.printStackTrace(); 358 } 359 return null; 360 } 361 362 368 private int getFirstLastSetDisplay(int objSize, int resultsPerPage) { 369 int tot_Page_Sets = objSize/(JasperServerConst.PAGE_SET_COUNT * resultsPerPage); 370 if(objSize%(JasperServerConst.PAGE_SET_COUNT * resultsPerPage) != 0) 371 tot_Page_Sets += 1; 372 return tot_Page_Sets; 373 } 374 375 } 376 | Popular Tags |