/* * RHQ Management Platform * Copyright (C) 2005-2008 Red Hat, Inc. * All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ package org.rhq.enterprise.gui.legacy.taglib.display; import javax.servlet.http.HttpServletRequest; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspTagException; import javax.servlet.jsp.tagext.Tag; import javax.servlet.jsp.tagext.TagSupport; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.taglibs.standard.tag.el.core.ExpressionUtil; /** * This class is a two-in-one decorator/tag for use within the <code>TableTag</code>; it is a <code> * ColumnDecorator</code> tag that that creates a row of quicknav icons (i.e. [M][I][C][A] etc.) for the resource hub. * * @author Ian Springer */ public abstract class QuicknavDecorator extends ColumnDecorator implements Tag { protected static final String DATA_TABLE_STYLE_CLASS = "data-table"; protected static final String QUICKNAV_CELL_STYLE_CLASS = "quicknav-cell"; protected static final String QUICKNAV_BLOCK_STYLE_CLASS = "quicknav-block"; private static final IconInfo MONITOR_ICON_INFO = new IconInfo("/images/icons/Monitor_grey_16.png", "Monitor"); private static final IconInfo EVENT_ICON_INFO = new IconInfo("/images/icons/Events_grey_16.png", "Events"); private static final IconInfo INVENTORY_ICON_INFO = new IconInfo("/images/icons/Inventory_grey_16.png", "Inventory"); private static final IconInfo CONFIGURE_ICON_INFO = new IconInfo("/images/icons/Configure_grey_16.png", "Configure"); private static final IconInfo OPERATIONS_ICON_INFO = new IconInfo("/images/icons/Operation_grey_16.png", "Operations"); private static final IconInfo ALERT_ICON_INFO = new IconInfo("/images/icons/Alert_grey_16.png", "Alerts"); private static final IconInfo CONTENT_ICON_INFO = new IconInfo("/images/icons/Content_grey_16.png", "Content"); // aka Packages private static final String ICON_SRC_LOCKED = "/images/icon_hub_locked.gif"; private static final String ICON_WIDTH = "16"; private static final String ICON_HEIGHT = "16"; protected static final Log LOG = LogFactory.getLog(QuicknavDecorator.class.getName()); private Tag parentTag; protected String getOutput() { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("<table class=\"").append(DATA_TABLE_STYLE_CLASS).append("\"><tr>"); // MONITOR icon appendCell(stringBuilder, isMonitorSupported(), isMonitorAllowed(), getMonitorURL(), MONITOR_ICON_INFO); // INVENTORY icon appendCell(stringBuilder, isInventorySupported(), isInventoryAllowed(), getInventoryURL(), INVENTORY_ICON_INFO); // ALERTS icon appendCell(stringBuilder, isAlertSupported(), isAlertAllowed(), getAlertURL(), ALERT_ICON_INFO); // CONFIGURE icon appendCell(stringBuilder, isConfigureSupported(), isConfigureAllowed(), getConfigureURL(), CONFIGURE_ICON_INFO); // OPERATIONS icon appendCell(stringBuilder, isOperationsSupported(), isOperationsAllowed(), getOperationsURL(), OPERATIONS_ICON_INFO); // EVENTS icon appendCell(stringBuilder, isEventsSupported(), isEventsAllowed(), getEventsURL(), EVENT_ICON_INFO); // CONTENT/PACKAGES icon appendCell(stringBuilder, isContentSupported(), isContentAllowed(), getContentURL(), CONTENT_ICON_INFO); stringBuilder.append("</tr></table>"); return stringBuilder.toString(); } private void appendCell(StringBuilder stringBuilder, boolean facetSupported, boolean facetAllowed, String tabUrl, IconInfo iconInfo) { stringBuilder.append("<td class=\"").append(QUICKNAV_CELL_STYLE_CLASS).append("\">"); stringBuilder.append("<div class=\"").append(QUICKNAV_BLOCK_STYLE_CLASS).append("\">"); if (facetSupported) { if (facetAllowed) { appendLinkedIcon(stringBuilder, tabUrl, iconInfo); } else { appendLockedIcon(stringBuilder); } } stringBuilder.append("</div></td>"); } protected String getNA() { return ""; } protected void appendLockedIcon(StringBuilder stringBuilder) { HttpServletRequest request = (HttpServletRequest) getPageContext().getRequest(); stringBuilder.append("<img src=\"").append(request.getContextPath()).append(ICON_SRC_LOCKED).append( "\" width=\"").append(ICON_WIDTH).append("\" height=\"").append(ICON_HEIGHT).append( "\" alt=\"Locked\" />\n"); } protected void appendLinkedIcon(StringBuilder stringBuilder, String url, IconInfo iconInfo) { String fullTargetURL = getFullURL(url); makeLinkedIconWithRef(stringBuilder, fullTargetURL, iconInfo.getSrc(), iconInfo.getTitle()); } protected abstract String getFullURL(String relativeTargetURL); // protected boolean isMonitoringEnabled() // { // return ContextUtils.monitoringEnabled(getPageContext().getServletContext()); // } private void makeLinkedIconWithRef(StringBuilder stringBuilder, String targetURL, String imageURL, String imageTitle) { HttpServletRequest request = (HttpServletRequest) getPageContext().getRequest(); stringBuilder.append("<a href=\"").append(targetURL).append("\">"); stringBuilder.append("<img src=\"").append(request.getContextPath()).append(imageURL).append("\" width=\"") .append(ICON_WIDTH).append("\" height=\"").append(ICON_HEIGHT).append("\" title=\"").append(imageTitle) .append("\" alt=\"").append(imageTitle).append("\" />"); stringBuilder.append("</a>\n"); } public void setParent(Tag tag) { this.parentTag = tag; } public Tag getParent() { return this.parentTag; } public int doStartTag() throws JspTagException { ColumnTag ancestorTag = (ColumnTag) TagSupport.findAncestorWithClass(this, ColumnTag.class); if (ancestorTag == null) { throw new JspTagException("A " + getTagName() + " tag must be used within a ColumnTag."); } ancestorTag.setDecorator(this); return SKIP_BODY; } public int doEndTag() { return EVAL_PAGE; } @Override public void release() { setParent(null); setPageContext(null); } protected abstract String getTagName(); protected Object evalAttr(String name, String value, Class<?> type) throws JspException { return ExpressionUtil.evalNotNull(getTagName(), name, value, type, this, getPageContext()); } protected abstract boolean isMonitorSupported(); protected abstract boolean isEventsSupported(); protected abstract boolean isInventorySupported(); protected abstract boolean isConfigureSupported(); protected abstract boolean isOperationsSupported(); protected abstract boolean isAlertSupported(); protected abstract boolean isContentSupported(); protected abstract boolean isMonitorAllowed(); protected abstract boolean isEventsAllowed(); protected abstract boolean isInventoryAllowed(); protected abstract boolean isConfigureAllowed(); protected abstract boolean isOperationsAllowed(); protected abstract boolean isAlertAllowed(); protected abstract boolean isContentAllowed(); protected abstract String getMonitorURL(); protected abstract String getEventsURL(); protected abstract String getInventoryURL(); protected abstract String getConfigureURL(); protected abstract String getOperationsURL(); protected abstract String getAlertURL(); protected abstract String getContentURL(); protected static class IconInfo { private String src; private String title; public IconInfo(String src, String title) { this.src = src; this.title = title; } public String getSrc() { return src; } public String getTitle() { return title; } } }