/* * 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 java.text.SimpleDateFormat; import javax.servlet.http.HttpServletRequest; import javax.servlet.jsp.JspException; import javax.servlet.jsp.PageContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.taglibs.standard.tag.common.core.NullAttributeException; import org.rhq.core.clientapi.util.units.DateFormatter; import org.rhq.core.clientapi.util.units.FormattedNumber; import org.rhq.core.clientapi.util.units.ScaleConstants; import org.rhq.core.clientapi.util.units.UnitNumber; import org.rhq.core.clientapi.util.units.UnitsConstants; import org.rhq.core.clientapi.util.units.UnitsFormat; import org.rhq.enterprise.gui.legacy.Constants; import org.rhq.enterprise.gui.legacy.util.RequestUtils; /** * This class decorates longs representing dates to dates. */ public class DateDecorator extends BaseDecorator { private static Log log = LogFactory.getLog(DateDecorator.class.getName()); /** * Holds value of property isElapsedTime. */ private Boolean isElapsedTime; /** * Holds value of property isGroup. */ private Boolean isGroup = false; // el version private String isGroupEl; /** * Holds value of property active. */ private String active; /** * Holds the format of for the conversion of the input * * @see java.text.SimpleDateFormat */ private String format; /** * Holds key into resource bundle for the property which should be shown if the date being displayed is null */ private String resourceKeyForNull; public static final String defaultKey = "resource.hub.metric.not.applicable"; private PageContext context; protected String bundle = org.apache.struts.Globals.MESSAGES_KEY; /** * Decorates a date represented as a long. * * @param obj a long representing the time as a long * * @return formatted date */ @Override public String decorate(Object obj) { Long newDate = null; if (getName() != null) { String tmpName = getName(); try { tmpName = (String) evalAttr("name", this.getName(), String.class); newDate = new Long(Long.parseLong(tmpName)); } catch (NumberFormatException nfe) { log.debug("number format exception parsing long for: " + tmpName); return ""; } catch (NullAttributeException ne) { log.debug("bean " + this.getName() + " not found"); return ""; } catch (JspException je) { log.debug("can't evaluate name [" + this.getName() + "]: ", je); return ""; } } else { newDate = (Long) obj; } if (getActive() != null) { try { String tmpActive = (String) evalAttr("active", this.getActive(), String.class); int tmpIntActive = Integer.parseInt(tmpActive); if (tmpIntActive == 0) { return ""; } } catch (NumberFormatException nfe) { log.debug("invalid property"); } catch (NullAttributeException ne) { log.debug("bean " + this.getActive() + " not found"); } catch (JspException je) { log.debug("can't evaluate name [" + this.getActive() + "]: ", je); } } if (isGroupEl != null) { try { Boolean tmp = (Boolean) evalAttr("isGroupEl", isGroupEl, Boolean.class); if (tmp != null) { isGroup = tmp; } } catch (NullAttributeException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (JspException e) { // TODO Auto-generated catch block e.printStackTrace(); } } HttpServletRequest request = (HttpServletRequest) getPageContext().getRequest(); if ((newDate != null) && newDate.equals(new Long(0))) { String resString; if ((this.getIsGroup() != null) && isGroup.booleanValue()) { resString = RequestUtils.message(request, "resource.common.monitor.visibility.config.DIFFERENT"); } else { resString = RequestUtils.message(request, "resource.common.monitor.visibility.config.NONE"); } return resString; } StringBuffer buf = new StringBuffer(512); if (obj == null) { // there may be cases where we have no date set when rendering a // table, so just show n/a (see PR 8443) // infact let it be overridable what we show String resourceKey = getResourceKeyForNull(); if ((resourceKey == null) || "".equals(resourceKey)) { resourceKey = DateDecorator.defaultKey; } buf.append(RequestUtils.message(request, bundle, request.getLocale().toString(), resourceKey)); return buf.toString(); } Boolean b = getIsElapsedTime(); if (null == b) { b = Boolean.FALSE; } UnitsConstants unit = b.booleanValue() ? UnitsConstants.UNIT_DURATION : UnitsConstants.UNIT_DATE; String formatString; if ((format == null) || "".equals(format)) // old case with implicit format string { formatString = RequestUtils.message((HttpServletRequest) getPageContext().getRequest(), Constants.UNIT_FORMAT_PREFIX_KEY + "epoch-millis"); } else { formatString = format; } DateFormatter.DateSpecifics dateSpecs; dateSpecs = new DateFormatter.DateSpecifics(); dateSpecs.setDateFormat(new SimpleDateFormat(formatString)); FormattedNumber fmtd = UnitsFormat.format(new UnitNumber(newDate.doubleValue(), unit, ScaleConstants.SCALE_MILLI), getPageContext().getRequest().getLocale(), dateSpecs); buf.append(fmtd.toString()); return buf.toString(); } /** * Getter for property isElapsedTime. * * @return Value of property isElapsedTime. */ public Boolean getIsElapsedTime() { return this.isElapsedTime; } /** * Setter for property isElapsedTime. * * @param isElapsedTime New value of property isElapsedTime. */ public void setIsElapsedTime(Boolean isElapsedTime) { this.isElapsedTime = isElapsedTime; } /** * If this is a group, display "DIFFERENT" if the metric interval value is "0". * * @return Value of property isGroup. */ public String getIsGroup() { return isGroupEl; } /** * Setter for property isGroup. * * @param isGroup New value of property isGroup. */ public void setIsGroup(String el) { isGroupEl = el; } public PageContext getContext() { return context; } public void setContext(PageContext context) { this.context = context; } /** * @return Returns the active. */ public String getActive() { return active; } /** * @param active The active to set. */ public void setActive(String active) { this.active = active; } public String getResourceKeyForNull() { return resourceKeyForNull; } public void setResourceKeyForNull(String resourceKeyForNull) { this.resourceKeyForNull = resourceKeyForNull; } public String getFormat() { return format; } public void setFormat(String format) { this.format = format; } }