1 24 package org.ofbiz.widget.html; 25 26 import java.util.Iterator ; 27 import java.util.List ; 28 import java.util.Map ; 29 30 import javax.servlet.ServletContext ; 31 import javax.servlet.http.HttpServletRequest ; 32 import javax.servlet.http.HttpServletResponse ; 33 import javax.servlet.http.HttpSession ; 34 35 import org.ofbiz.base.util.StringUtil; 36 import org.ofbiz.base.util.UtilValidate; 37 import org.ofbiz.entity.GenericDelegator; 38 import org.ofbiz.entity.GenericValue; 39 import org.ofbiz.webapp.control.RequestHandler; 40 import org.ofbiz.webapp.taglib.ContentUrlTag; 41 import org.ofbiz.widget.menu.MenuStringRenderer; 42 import org.ofbiz.widget.menu.ModelMenu; 43 import org.ofbiz.widget.menu.ModelMenuItem; 44 import org.ofbiz.widget.menu.ModelMenuItem.Image; 45 import org.ofbiz.widget.menu.ModelMenuItem.Link; 46 47 55 public class HtmlMenuRenderer implements MenuStringRenderer { 56 57 HttpServletRequest request; 58 HttpServletResponse response; 59 protected String userLoginIdAtPermGrant; 60 protected boolean userLoginIdHasChanged = true; 61 protected String permissionErrorMessage = ""; 62 63 public static final String module = HtmlMenuRenderer.class.getName(); 64 65 protected HtmlMenuRenderer() {} 66 67 public HtmlMenuRenderer(HttpServletRequest request, HttpServletResponse response) { 68 this.request = request; 69 this.response = response; 70 } 71 72 public void appendWhitespace(StringBuffer buffer) { 73 buffer.append("\r\n"); 75 } 77 78 public void appendOfbizUrl(StringBuffer buffer, String location) { 79 ServletContext ctx = (ServletContext ) request.getAttribute("servletContext"); 80 if (ctx == null) { 81 HttpSession session = request.getSession(); 83 if (session != null) { 84 ctx = session.getServletContext(); 85 } else { 86 } 88 if (ctx == null) { 89 throw new RuntimeException ("ctx is null. buffer=" + buffer.toString() + " location:" + location); 90 } 91 } 93 GenericDelegator delegator = (GenericDelegator)request.getAttribute("delegator"); 94 if (delegator == null) { 95 } 97 RequestHandler rh = (RequestHandler) ctx.getAttribute("_REQUEST_HANDLER_"); 98 String s = rh.makeLink(this.request, this.response, location); 100 if (s.indexOf("null") >= 0) { 101 } 103 buffer.append(s); 104 } 105 106 public void appendContentUrl(StringBuffer buffer, String location) { 107 ServletContext ctx = (ServletContext ) this.request.getAttribute("servletContext"); 108 if (ctx == null) { 109 HttpSession session = request.getSession(); 111 if (session != null) { 112 ctx = session.getServletContext(); 113 } else { 114 } 116 if (ctx == null) { 117 throw new RuntimeException ("ctx is null. buffer=" + buffer.toString() + " location:" + location); 118 } 119 this.request.setAttribute("servletContext", ctx); 121 } 122 GenericDelegator delegator = (GenericDelegator)request.getAttribute("delegator"); 123 if (delegator == null) { 124 } 126 ContentUrlTag.appendContentPrefix(this.request, buffer); 127 buffer.append(location); 128 } 129 130 public void appendTooltip(StringBuffer buffer, Map context, ModelMenuItem modelMenuItem) { 131 String tooltip = modelMenuItem.getTooltip(context); 133 if (UtilValidate.isNotEmpty(tooltip)) { 134 buffer.append("<span"); 135 String tooltipStyle = modelMenuItem.getTooltipStyle(); 136 if (UtilValidate.isNotEmpty(tooltipStyle)) { 137 buffer.append(" class=\""); 138 buffer.append(tooltipStyle); 139 buffer.append("\""); 140 } 141 buffer.append("> -["); 142 buffer.append(tooltip); 143 buffer.append("]- </span>"); 144 } 145 } 146 147 public void renderFormatSimpleWrapperRows(StringBuffer buffer, Map context, Object menuObj) { 148 149 List menuItemList = ((ModelMenu)menuObj).getMenuItemList(); 150 Iterator menuItemIter = menuItemList.iterator(); 151 ModelMenuItem currentMenuItem = null; 152 153 while (menuItemIter.hasNext()) { 154 currentMenuItem = (ModelMenuItem)menuItemIter.next(); 155 renderMenuItem(buffer, context, currentMenuItem); 156 } 157 return; 158 } 159 160 public void renderMenuItem(StringBuffer buffer, Map context, ModelMenuItem menuItem) { 161 162 boolean hideThisItem = isHideIfSelected(menuItem); 164 if (hideThisItem) 166 return; 167 168 169 String style = menuItem.getAlignStyle(); 170 if (UtilValidate.isNotEmpty(style)) { 171 String orientation = menuItem.getModelMenu().getOrientation(); 172 if (orientation.equalsIgnoreCase("vertical")) style += "-vert"; 173 String align = menuItem.getAlign(); 174 if (align.equalsIgnoreCase("right")) style += "-right"; 175 176 buffer.append("<div class=\"" + style + "\">"); 177 } 178 179 180 Link link = menuItem.getLink(); 181 if (link != null) { 183 renderLink(buffer, context, link); 184 } 185 186 if (UtilValidate.isNotEmpty(style)) { 187 buffer.append("</div>"); 189 } 190 191 this.appendWhitespace(buffer); 192 return; 193 } 194 195 public boolean isDisableIfEmpty(ModelMenuItem menuItem, Map context) { 196 197 boolean disabled = false; 198 String disableIfEmpty = menuItem.getDisableIfEmpty(); 199 if (UtilValidate.isNotEmpty(disableIfEmpty)) { 200 List keys = StringUtil.split(disableIfEmpty, "|"); 201 Iterator iter = keys.iterator(); 202 while (iter.hasNext()) { 203 Object obj = context.get(disableIfEmpty); 204 if (obj == null) { 205 disabled = true; 206 break; 207 } 208 } 209 } 210 return disabled; 211 } 212 213 214 public String buildDivStr(ModelMenuItem menuItem, Map context) { 215 String divStr = ""; 216 divStr = menuItem.getTitle(context); 217 return divStr; 218 } 219 220 public void renderMenuOpen(StringBuffer buffer, Map context, ModelMenu modelMenu) { 221 222 if (!userLoginIdHasChanged) { 223 userLoginIdHasChanged = userLoginIdHasChanged(); 224 } 225 226 String menuWidth = modelMenu.getMenuWidth(); 228 String menuContainerStyle = modelMenu.getMenuContainerStyle(context); 229 String widthStr = ""; 230 if (UtilValidate.isNotEmpty(menuWidth)) { 231 widthStr = " style=\"width:" + menuWidth + ";\""; 232 } 233 buffer.append("<div class=\"" + menuContainerStyle + "\"" + widthStr + ">"); 234 235 this.appendWhitespace(buffer); 236 } 237 238 241 public void renderMenuClose(StringBuffer buffer, Map context, ModelMenu modelMenu) { 242 243 String fillStyle = modelMenu.getFillStyle(); 244 if (UtilValidate.isNotEmpty(fillStyle)) { 245 buffer.append("<div class=\"" + fillStyle + "\"> </div>"); 246 } 247 buffer.append("</div>"); 249 this.appendWhitespace(buffer); 250 251 userLoginIdHasChanged = userLoginIdHasChanged(); 252 GenericValue userLogin = (GenericValue)request.getSession().getAttribute("userLogin"); 253 if (userLogin != null) { 254 String userLoginId = userLogin.getString("userLoginId"); 255 setUserLoginIdAtPermGrant(userLoginId); 257 } else { 259 request.getSession().setAttribute("userLoginIdAtPermGrant", null); 260 } 261 } 262 263 public void renderFormatSimpleWrapperOpen(StringBuffer buffer, Map context, ModelMenu modelMenu) { 264 } 266 267 public void renderFormatSimpleWrapperClose(StringBuffer buffer, Map context, ModelMenu modelMenu) { 268 } 270 271 public void setRequest(HttpServletRequest request) { 272 this.request = request; 273 } 274 275 public void setResponse(HttpServletResponse response) { 276 this.response = response; 277 } 278 279 280 283 public void setUserLoginIdAtPermGrant(String string) { 284 this.userLoginIdAtPermGrant = string; 286 } 287 288 291 public String getUserLoginIdAtPermGrant() { 292 return this.userLoginIdAtPermGrant; 293 } 294 295 public boolean isHideIfSelected( ModelMenuItem menuItem) { 296 297 ModelMenu menu = menuItem.getModelMenu(); 298 String currentMenuItemName = menu.getCurrentMenuItemName(); 299 String currentItemName = menuItem.getName(); 300 Boolean hideIfSelected = menuItem.getHideIfSelected(); 301 if (hideIfSelected != null && hideIfSelected.booleanValue() && currentMenuItemName != null && currentMenuItemName.equals(currentItemName)) 303 return true; 304 else 305 return false; 306 } 307 308 309 public boolean userLoginIdHasChanged() { 310 311 boolean hasChanged = false; 312 GenericValue userLogin = (GenericValue)request.getSession().getAttribute("userLogin"); 313 userLoginIdAtPermGrant = getUserLoginIdAtPermGrant(); 314 String userLoginId = null; 316 if (userLogin != null) 317 userLoginId = userLogin.getString("userLoginId"); 318 if ((userLoginId == null && userLoginIdAtPermGrant != null) 320 || (userLoginId != null && userLoginIdAtPermGrant == null) 321 || ((userLoginId != null && userLoginIdAtPermGrant != null) 322 && !userLoginId.equals(userLoginIdAtPermGrant))) { 323 hasChanged = true; 324 } else { 325 if (userLoginIdAtPermGrant != null) 326 hasChanged = true; 327 else 328 hasChanged = false; 329 330 userLoginIdAtPermGrant = null; 331 } 332 return hasChanged; 333 } 334 335 336 public void setUserLoginIdHasChanged(boolean b) { 337 userLoginIdHasChanged = b; 338 } 339 340 341 public String getTitle(ModelMenuItem menuItem, Map context) { 342 343 String title = null; 344 title = menuItem.getTitle(context); 345 return title; 346 } 347 348 public void renderLink(StringBuffer buffer, Map context, ModelMenuItem.Link link) { 349 buffer.append("<a"); 351 String id = link.getId(context); 352 if (UtilValidate.isNotEmpty(id)) { 353 buffer.append(" id=\""); 354 buffer.append(id); 355 buffer.append("\""); 356 } 357 358 ModelMenuItem menuItem = link.getLinkMenuItem(); 359 boolean isSelected = menuItem.isSelected(context); 360 361 String style = null; 362 363 if (isSelected) { 364 style = menuItem.getSelectedStyle(); 365 } else { 366 style = link.getStyle(context); 367 if (UtilValidate.isEmpty(style)) 368 style = menuItem.getTitleStyle(); 369 if (UtilValidate.isEmpty(style)) 370 style = menuItem.getWidgetStyle(); 371 } 372 373 if (menuItem.getDisabled()) { 374 style = menuItem.getDisabledTitleStyle(); 375 } 376 377 if (UtilValidate.isNotEmpty(style)) { 378 buffer.append(" class=\""); 379 buffer.append(style); 380 buffer.append("\""); 381 } 382 String name = link.getName(context); 383 if (UtilValidate.isNotEmpty(name)) { 384 buffer.append(" name=\""); 385 buffer.append(name); 386 buffer.append("\""); 387 } 388 String targetWindow = link.getTargetWindow(context); 389 if (UtilValidate.isNotEmpty(targetWindow)) { 390 buffer.append(" target=\""); 391 buffer.append(targetWindow); 392 buffer.append("\""); 393 } 394 String target = link.getTarget(context); 395 if (menuItem.getDisabled()) { 396 target = null; 397 } 398 if (UtilValidate.isNotEmpty(target)) { 399 buffer.append(" HREF=\""); 400 String urlMode = link.getUrlMode(); 401 String prefix = link.getPrefix(context); 402 boolean fullPath = link.getFullPath(); 403 boolean secure = link.getSecure(); 404 boolean encode = link.getEncode(); 405 HttpServletResponse res = (HttpServletResponse ) context.get("response"); 406 HttpServletRequest req = (HttpServletRequest ) context.get("request"); 407 if (urlMode != null && urlMode.equalsIgnoreCase("intra-app")) { 408 if (req != null && res != null) { 409 ServletContext ctx = (ServletContext ) req.getAttribute("servletContext"); 410 RequestHandler rh = (RequestHandler) ctx.getAttribute("_REQUEST_HANDLER_"); 411 String urlString = rh.makeLink(req, res, target, fullPath, secure, encode); 412 buffer.append(urlString); 413 } else if (prefix != null) { 414 buffer.append(prefix + target); 415 } else { 416 buffer.append(target); 417 } 418 } else if (urlMode != null && urlMode.equalsIgnoreCase("content")) { 419 StringBuffer newURL = new StringBuffer (); 420 ContentUrlTag.appendContentPrefix(req, newURL); 421 newURL.append(target); 422 buffer.append(newURL.toString()); 423 } else { 424 buffer.append(target); 425 } 426 427 buffer.append("\""); 428 } 429 buffer.append(">"); 430 431 Image img = link.getImage(); 433 if (img == null) 434 buffer.append(link.getText(context)); 435 else 436 renderImage(buffer, context, img); 437 438 buffer.append("</a>"); 440 } 441 442 public void renderImage(StringBuffer buffer, Map context, ModelMenuItem.Image image) { 443 buffer.append("<img "); 445 String id = image.getId(context); 446 if (UtilValidate.isNotEmpty(id)) { 447 buffer.append(" id=\""); 448 buffer.append(id); 449 buffer.append("\""); 450 } 451 String style = image.getStyle(context); 452 if (UtilValidate.isNotEmpty(style)) { 453 buffer.append(" class=\""); 454 buffer.append(style); 455 buffer.append("\""); 456 } 457 String wid = image.getWidth(context); 458 if (UtilValidate.isNotEmpty(wid)) { 459 buffer.append(" width=\""); 460 buffer.append(wid); 461 buffer.append("\""); 462 } 463 String hgt = image.getHeight(context); 464 if (UtilValidate.isNotEmpty(hgt)) { 465 buffer.append(" height=\""); 466 buffer.append(hgt); 467 buffer.append("\""); 468 } 469 String border = image.getBorder(context); 470 if (UtilValidate.isNotEmpty(border)) { 471 buffer.append(" border=\""); 472 buffer.append(border); 473 buffer.append("\""); 474 } 475 String src = image.getSrc(context); 476 if (UtilValidate.isNotEmpty(src)) { 477 buffer.append(" SRC=\""); 478 String urlMode = image.getUrlMode(); 479 boolean fullPath = false; 480 boolean secure = false; 481 boolean encode = false; 482 HttpServletResponse response = (HttpServletResponse ) context.get("response"); 483 HttpServletRequest request = (HttpServletRequest ) context.get("request"); 484 if (urlMode != null && urlMode.equalsIgnoreCase("ofbiz")) { 485 if (request != null && response != null) { 486 ServletContext ctx = (ServletContext ) request.getAttribute("servletContext"); 487 RequestHandler rh = (RequestHandler) ctx.getAttribute("_REQUEST_HANDLER_"); 488 String urlString = rh.makeLink(request, response, src, fullPath, secure, encode); 489 buffer.append(urlString); 490 } else { 491 buffer.append(src); 492 } 493 } else if (urlMode != null && urlMode.equalsIgnoreCase("content")) { 494 if (request != null && response != null) { 495 StringBuffer newURL = new StringBuffer (); 496 ContentUrlTag.appendContentPrefix(request, newURL); 497 newURL.append(src); 498 buffer.append(newURL.toString()); 499 } 500 } else { 501 buffer.append(src); 502 } 503 504 buffer.append("\""); 505 } 506 buffer.append("/>"); 507 } 508 } 509 510 | Popular Tags |