1 31 32 package org.opencms.jsp; 33 34 import org.opencms.file.CmsObject; 35 import org.opencms.file.CmsResource; 36 import org.opencms.flex.CmsFlexController; 37 import org.opencms.i18n.CmsEncoder; 38 import org.opencms.loader.CmsImageScaler; 39 import org.opencms.main.CmsException; 40 import org.opencms.main.CmsLog; 41 import org.opencms.main.OpenCms; 42 import org.opencms.util.CmsStringUtil; 43 44 import java.util.Arrays ; 45 import java.util.HashMap ; 46 import java.util.Iterator ; 47 import java.util.List ; 48 import java.util.Map ; 49 50 import javax.servlet.ServletRequest ; 51 import javax.servlet.jsp.JspException ; 52 import javax.servlet.jsp.tagext.BodyTagSupport ; 53 54 import org.apache.commons.logging.Log; 55 56 65 public class CmsJspTagImage extends BodyTagSupport implements I_CmsJspTagParamParent { 66 67 private static final String ATTR_ALIGN = "align"; 69 private static final String ATTR_ALT = "alt"; 70 private static final String ATTR_BORDER = "border"; 71 private static final String ATTR_HSPACE = "hspace"; 72 private static final String ATTR_ID = "id"; 73 private static final String ATTR_LONGDESC = "longdesc"; 74 private static final String ATTR_NAME = "name"; 75 private static final String ATTR_STYLE = "style"; 76 private static final String ATTR_TITLE = "title"; 77 private static final String ATTR_USEMAP = "usemap"; 78 private static final String ATTR_VSPACE = "vspace"; 79 80 81 private static final Log LOG = CmsLog.getLog(CmsJspTagImage.class); 82 83 private static final String SCALE_ATTR_COLOR = "scalecolor"; 85 private static final String SCALE_ATTR_FILTER = "scalefilter"; 86 private static final String SCALE_ATTR_HEIGHT = "height"; 87 private static final String SCALE_ATTR_PARTIALTAG = "partialtag"; 88 private static final String SCALE_ATTR_POSITION = "scaleposition"; 89 private static final String SCALE_ATTR_QUALITY = "scalequality"; 90 private static final String SCALE_ATTR_RENDERMODE = "scalerendermode"; 91 private static final String SCALE_ATTR_SRC = "src"; 92 private static final String SCALE_ATTR_TYPE = "scaletype"; 93 private static final String SCALE_ATTR_WIDTH = "width"; 94 95 private static final String [] SCALER_ATTRS = { 97 SCALE_ATTR_COLOR, 98 SCALE_ATTR_FILTER, 99 SCALE_ATTR_HEIGHT, 100 SCALE_ATTR_PARTIALTAG, 101 SCALE_ATTR_POSITION, 102 SCALE_ATTR_QUALITY, 103 SCALE_ATTR_RENDERMODE, 104 SCALE_ATTR_SRC, 105 SCALE_ATTR_TYPE, 106 SCALE_ATTR_WIDTH}; 107 private static final List SCALER_ATTRS_LIST = Arrays.asList(SCALER_ATTRS); 108 109 110 private static final long serialVersionUID = 6513320107441256414L; 111 112 113 private Map m_attributes; 114 115 116 private boolean m_partialTag; 117 118 119 private CmsImageScaler m_scaler; 120 121 122 private String m_src; 123 124 127 public CmsJspTagImage() { 128 129 m_scaler = new CmsImageScaler(); 131 } 132 133 146 public static String imageTagAction( 147 String src, 148 CmsImageScaler scaler, 149 Map attributes, 150 boolean partialTag, 151 ServletRequest req) throws CmsException { 152 153 CmsFlexController controller = CmsFlexController.getController(req); 154 CmsObject cms = controller.getCmsObject(); 155 CmsResource imageRes = cms.readResource(src); 156 157 if ((scaler.getHeight() <= 0) || (scaler.getWidth() <= 0)) { 159 CmsImageScaler original = new CmsImageScaler(cms, imageRes); 161 if (original.isValid()) { 162 scaler = original.getReScaler(scaler); 163 } 164 } 165 166 StringBuffer result = new StringBuffer (128); 167 if (!partialTag) { 168 result.append("<img"); 170 } 171 172 result.append(" SRC=\""); 174 String imageLink = cms.getSitePath(imageRes); 175 if (scaler.isValid()) { 176 imageLink += scaler.toRequestParam(); 178 } 179 result.append(OpenCms.getLinkManager().substituteLink(cms, imageLink)); 180 result.append("\""); 181 182 if (scaler.isValid()) { 183 result.append(" width=\""); 185 result.append(scaler.getWidth()); 186 result.append("\""); 187 result.append(" height=\""); 188 result.append(scaler.getHeight()); 189 result.append("\""); 190 } 191 192 if (attributes != null) { 193 Iterator i = attributes.keySet().iterator(); 195 while (i.hasNext()) { 196 String attr = (String )i.next(); 197 String value = (String )attributes.get(attr); 198 result.append(" "); 199 result.append(attr); 200 result.append("=\""); 201 result.append(CmsEncoder.escapeXml(value)); 202 result.append("\""); 203 } 204 } 205 206 if (!partialTag) { 207 result.append(" />"); 209 } 210 return result.toString(); 211 } 212 213 216 public void addParameter(String name, String value) { 217 218 String key = name.trim().toLowerCase(); 219 switch (SCALER_ATTRS_LIST.indexOf(key)) { 220 case 0: setScaleColor(value); 222 break; 223 case 1: setScaleFilter(value); 225 break; 226 case 2: setHeight(value); 228 break; 229 case 3: setPartialTag(value); 231 break; 232 case 4: setScalePosition(value); 234 break; 235 case 5: setScaleQuality(value); 237 break; 238 case 6: setScaleRendermode(value); 240 break; 241 case 7: setSrc(value); 243 break; 244 case 8: setScaleType(value); 246 break; 247 case 9: setWidth(value); 249 break; 250 default: setAttribute(key, value); 252 } 253 } 254 255 258 public int doEndTag() throws JspException { 259 260 ServletRequest req = pageContext.getRequest(); 261 262 if (CmsFlexController.isCmsRequest(req)) { 264 265 try { 266 String imageTag = null; 268 try { 269 imageTag = imageTagAction(m_src, m_scaler, m_attributes, m_partialTag, req); 270 } catch (CmsException e) { 271 if (LOG.isWarnEnabled()) { 274 LOG.warn(Messages.get().getBundle().key(Messages.ERR_IMAGE_TAG_VFS_ACCESS_1, m_src), e); 275 } 276 } 277 pageContext.getOut().print(imageTag == null ? "" : imageTag); 279 280 } catch (Exception ex) { 281 if (LOG.isErrorEnabled()) { 282 LOG.error(Messages.get().getBundle().key(Messages.ERR_PROCESS_TAG_1, "image"), ex); 283 } 284 throw new javax.servlet.jsp.JspException (ex); 285 } 286 } 287 release(); 289 return EVAL_PAGE; 290 } 291 292 299 public int doStartTag() { 300 301 return EVAL_BODY_BUFFERED; 302 } 303 304 309 public String getAlign() { 310 311 return getAttribute(ATTR_ALIGN); 312 } 313 314 319 public String getAlt() { 320 321 return getAttribute(ATTR_ALT); 322 } 323 324 329 public String getBorder() { 330 331 return getAttribute(ATTR_BORDER); 332 } 333 334 339 public String getHeight() { 340 341 return String.valueOf(m_scaler.getHeight()); 342 } 343 344 349 public String getHspace() { 350 351 return getAttribute(ATTR_HSPACE); 352 } 353 354 359 public String getId() { 360 361 return getAttribute(ATTR_ID); 362 } 363 364 369 public String getLongdesc() { 370 371 return getAttribute(ATTR_LONGDESC); 372 } 373 374 379 public String getName() { 380 381 return getAttribute(ATTR_NAME); 382 } 383 384 389 public String getScaleColor() { 390 391 return m_scaler.getColorString(); 392 } 393 394 399 public String getScaleFilter() { 400 401 return m_scaler.getFiltersString(); 402 } 403 404 409 public String getScalePosition() { 410 411 return String.valueOf(m_scaler.getPosition()); 412 } 413 414 419 public String getScaleQuality() { 420 421 return String.valueOf(m_scaler.getQuality()); 422 } 423 424 429 public String getScaleRendermode() { 430 431 return String.valueOf(m_scaler.getRenderMode()); 432 } 433 434 439 public String getScaleType() { 440 441 return String.valueOf(m_scaler.getType()); 442 } 443 444 450 public String getSrc() { 451 452 return m_src; 453 } 454 455 460 public String getStyle() { 461 462 return getAttribute(ATTR_STYLE); 463 } 464 465 470 public String getTitle() { 471 472 return getAttribute(ATTR_TITLE); 473 } 474 475 480 public String getUsemap() { 481 482 return getAttribute(ATTR_USEMAP); 483 } 484 485 490 public String getVspace() { 491 492 return getAttribute(ATTR_VSPACE); 493 } 494 495 500 public String getWidth() { 501 502 return String.valueOf(m_scaler.getWidth()); 503 } 504 505 510 public String isPartialTag() { 511 512 return String.valueOf(m_partialTag); 513 } 514 515 518 public void release() { 519 520 m_attributes = null; 521 m_scaler = new CmsImageScaler(); 522 m_partialTag = false; 523 m_src = null; 524 super.release(); 525 } 526 527 532 public void setAlign(String value) { 533 534 setAttribute(ATTR_ALIGN, value); 535 } 536 537 542 public void setAlt(String value) { 543 544 setAttribute(ATTR_ALT, value); 545 546 } 547 548 553 public void setBorder(String value) { 554 555 setAttribute(ATTR_BORDER, value); 556 557 } 558 559 566 public void setHeight(String value) { 567 568 m_scaler.setHeight(CmsStringUtil.getIntValue(value, 0, SCALE_ATTR_HEIGHT)); 569 } 570 571 576 public void setHspace(String value) { 577 578 setAttribute(ATTR_HSPACE, value); 579 580 } 581 582 587 public void setId(String value) { 588 589 setAttribute(ATTR_ID, value); 590 591 } 592 593 598 public void setLongdesc(String value) { 599 600 setAttribute(ATTR_LONGDESC, value); 601 602 } 603 604 609 public void setName(String value) { 610 611 setAttribute(ATTR_NAME, value); 612 613 } 614 615 620 public void setPartialTag(String partialTag) { 621 622 m_partialTag = Boolean.valueOf(partialTag).booleanValue(); 623 } 624 625 630 public void setScaleColor(String value) { 631 632 m_scaler.setColor(value); 633 } 634 635 640 public void setScaleFilter(String value) { 641 642 m_scaler.setFilters(value); 643 } 644 645 650 public void setScalePosition(String value) { 651 652 m_scaler.setPosition(CmsStringUtil.getIntValue(value, 0, SCALE_ATTR_POSITION)); 653 } 654 655 660 public void setScaleQuality(String value) { 661 662 m_scaler.setQuality(CmsStringUtil.getIntValue(value, 0, SCALE_ATTR_QUALITY)); 663 } 664 665 670 public void setScaleRendermode(String value) { 671 672 m_scaler.setRenderMode(CmsStringUtil.getIntValue(value, 0, SCALE_ATTR_RENDERMODE)); 673 } 674 675 682 public void setScaleType(String value) { 683 684 m_scaler.setType(CmsStringUtil.getIntValue(value, 0, SCALE_ATTR_TYPE)); 685 } 686 687 695 public void setSrc(String value) { 696 697 m_src = value; 698 } 699 700 705 public void setStyle(String value) { 706 707 setAttribute(ATTR_STYLE, value); 708 } 709 710 715 public void setTitle(String value) { 716 717 setAttribute(ATTR_TITLE, value); 718 } 719 720 725 public void setUsemap(String value) { 726 727 setAttribute(ATTR_USEMAP, value); 728 } 729 730 735 public void setVspace(String value) { 736 737 setAttribute(ATTR_VSPACE, value); 738 739 } 740 741 748 public void setWidth(String value) { 749 750 m_scaler.setWidth(CmsStringUtil.getIntValue(value, 0, SCALE_ATTR_WIDTH)); 751 } 752 753 759 private String getAttribute(String key) { 760 761 if (m_attributes != null) { 762 return (String )m_attributes.get(key); 763 } 764 return null; 765 } 766 767 773 private void setAttribute(String key, String value) { 774 775 if (CmsStringUtil.isNotEmptyOrWhitespaceOnly(value)) { 776 if (m_attributes == null) { 777 m_attributes = new HashMap (); 778 } 779 m_attributes.put(key, value); 780 } 781 } 782 } | Popular Tags |