Re: [opennms-devel] [PATCH] Timezone support in OpenNMS
"Aaron Paxson" <[email protected]>
| Newsgroups | gmane.network.opennms.bugs |
|---|---|
| Message-ID | <[email protected]> |
Cool!! I could use that feature. On Feb 8, 2008 1:48 PM, Marc Petit-Huguenin <[email protected]> wrote: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > Hi, > > We use OpenNMS on multiple data centers on different timezones and the > sysadmins are also working from different timezones. Because of this, > we added in OpenNMS the possibility for a user to choose the timezone > used to display date/time in the web application or in the emails > received. So we are submitting the attached patch for review and > inclusion in the OpenNMS repository. > > The code is copyrighted 2008 8x8 Inc. and is released under the GPL > license. The code was written by Isabelle Dalmasso. > > The code was developed and tested on OpenNMS 1.3.9. I will merge 1.3.10 > soon in our repository and can submit a new patch after this if needed. > > Thanks. > > - -- > Marc Petit-Huguenin [ ] > Home: [email protected] [RFC1855-compliant space for rent ] > Work: [email protected] [ ] > [ ] > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v1.4.6 (GNU/Linux) > Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org > > iD8DBQFHrLIi9RoMZyVa61cRAgwkAKCqvgPpl8czKwc+g1wbHxhhHtmGwACghThX > xCp4vKKWZt9AbupLAW1JGeY= > =OYzx > -----END PGP SIGNATURE----- > > Index: opennms-config/src/main/castor/users.xsd > =================================================================== > --- opennms-config/src/main/castor/users.xsd (.../external/current) > (revision 47) > +++ opennms-config/src/main/castor/users.xsd (.../trunk) (revision > 47) > @@ -50,6 +50,8 @@ > > <element maxOccurs="1" minOccurs="1" name="password" > type="string"/> > > + <element maxOccurs="1" minOccurs="0" name="user-timezone" > type="string"/> > + > <element maxOccurs="unbounded" minOccurs="0" ref="this:contact"/> > > <element maxOccurs="unbounded" minOccurs="0" name="duty-schedule" > Index: > opennms-services/src/main/java/org/opennms/netmgt/notifd/NotificationTask.java > =================================================================== > --- > opennms-services/src/main/java/org/opennms/netmgt/notifd/NotificationTask.java > (.../external/current) (revision 47) > +++ > opennms-services/src/main/java/org/opennms/netmgt/notifd/NotificationTask.java > (.../trunk) (revision 47) > @@ -46,7 +46,11 @@ > import java.util.HashMap; > import java.util.List; > import java.util.Map; > +import java.util.TimeZone; > +import java.text.DateFormat; > +import java.text.SimpleDateFormat; > > + > import org.apache.log4j.Category; > import org.exolab.castor.xml.MarshalException; > import org.exolab.castor.xml.ValidationException; > @@ -213,6 +217,7 @@ > if (getUserManager().isUserOnDuty(m_user.getUserId(), > Calendar.getInstance())) { > // send the notice > > + replaceByUserTimezone(m_user.getUserTimezone()); > ExecutorStrategy command = null; > String cntct = ""; > > @@ -335,6 +340,36 @@ > return value; > } > > + private final static String MARKER = "--timeuser"; > + > + private void replaceByUserTimezone(String timezone) { > + for (String key : m_params.keySet()) > + { > + if (m_params.get(key).indexOf(MARKER) != -1) > + { > + String finalText = m_params.get(key).replaceAll(MARKER, > ""); > + if (timezone != null && timezone.length() > 0) > + { > + try > + { > + DateFormat formatter = > DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL); > + formatter.setTimeZone(TimeZone.getTimeZone( > timezone.trim())); > + > + String dateToParse = > m_params.get(key).split(MARKER)[1]; > + String finalDate = formatter.format( > DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL).parse( > dateToParse.trim())); > + finalText = finalText.replaceFirst(dateToParse, > finalDate); > + } > + catch (Exception e) > + { > + log().error("Unexpected error to > NotifcationTask", e); > + } > + } > + m_params.put(key, finalText); > + } > + } > + } > + > + > public String getEmail() throws IOException, MarshalException, > ValidationException { > return getContactInfo("email"); > } > Index: > opennms-services/src/main/java/org/opennms/netmgt/config/UserManager.java > =================================================================== > --- > opennms-services/src/main/java/org/opennms/netmgt/config/UserManager.java > (.../external/current) (revision 47) > +++ > opennms-services/src/main/java/org/opennms/netmgt/config/UserManager.java > (.../trunk) (revision 47) > @@ -394,7 +394,36 @@ > } > > /** > + * Get a User timezone > + * > + * @param userid the userid of the user to return > + * @return String the timezone. > */ > + > + public String getTimeZone(User user) throws IOException, > MarshalException, ValidationException { > + if (user == null) return null; > + update(); > + > + return user.getUserTimezone(); > + } > + > + /** > + * Get a User timezone > + * > + * @param userid the userid of the user to return. > + * @return String the timezone. > + */ > + > + public String getTimeZone(String userid) throws IOException, > MarshalException, ValidationException { > + if (userid == null) return null; > + update(); > + > + User user = (User) m_users.get(userid); > + return getTimeZone(user); > + } > + > + /** > + */ > public synchronized void saveUsers(Collection usersList) throws > Exception { > // clear out the interanal structure and reload it > m_users.clear(); > Index: > opennms-webapp/src/main/java/org/opennms/web/admin/users/UpdateUserServlet.java > =================================================================== > --- > opennms-webapp/src/main/java/org/opennms/web/admin/users/UpdateUserServlet.java > (.../external/current) (revision 47) > +++ > opennms-webapp/src/main/java/org/opennms/web/admin/users/UpdateUserServlet.java > (.../trunk) (revision 47) > @@ -78,6 +78,7 @@ > // get the rest of the user information from the form > newUser.setFullName(request.getParameter("fullName")); > newUser.setUserComments(request.getParameter("userComments")); > + newUser.setUserTimezone(request.getParameter > ("userTimezone")); > > String password = request.getParameter("password"); > if (password != null && !password.trim().equals("")) { > Index: > opennms-webapp/src/main/java/org/opennms/web/account/selfService/NewTimezoneActionServlet.java > =================================================================== > --- > opennms-webapp/src/main/java/org/opennms/web/account/selfService/NewTimezoneActionServlet.java > (.../external/current) (revision 0) > +++ > opennms-webapp/src/main/java/org/opennms/web/account/selfService/NewTimezoneActionServlet.java > (.../trunk) (revision 47) > @@ -0,0 +1,87 @@ > +// > +// This file is part of the OpenNMS(R) Application. > +// > +// OpenNMS(R) is Copyright (C) 2002-2003 The OpenNMS Group, Inc. All > rights reserved. > +// OpenNMS(R) is a derivative work, containing both original code, > included code and modified > +// code that was published under the GNU General Public License. > Copyrights for modified > +// and included code are below. > +// > +// OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc. > +// > +// Modifications: > +// > +// Copyright (C) 2008 8x8 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; either version 2 of the License, or > +// (at your option) any later version. > +// > +// 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, > USA. > +// > +// For more information contact: > +// OpenNMS Licensing <[email protected]> > +// http://www.opennms.org/ > +// http://www.opennms.com/ > +// > + > +package org.opennms.web.account.selfService; > + > +import java.io.IOException; > + > +import javax.servlet.RequestDispatcher; > +import javax.servlet.ServletException; > +import javax.servlet.http.HttpServlet; > +import javax.servlet.http.HttpServletRequest; > +import javax.servlet.http.HttpServletResponse; > +import javax.servlet.http.HttpSession; > + > +import org.opennms.netmgt.config.UserFactory; > +import org.opennms.netmgt.config.UserManager; > +import org.opennms.netmgt.config.users.User; > + > +/** > + * A servlet that handles changing a user's timezone > + */ > +public class NewTimezoneActionServlet extends HttpServlet { > + private static final long serialVersionUID = 1L; > + > + public void doPost(HttpServletRequest request, HttpServletResponse > response) throws ServletException, IOException { > + try { > + UserFactory.init(); > + } catch (Exception e) { > + throw new ServletException("NewTimezoneActionServlet: Error > initializing user factory." + e); > + } > + HttpSession userSession = request.getSession(false); > + UserManager userFactory = UserFactory.getInstance(); > + > + User user = (User) userSession.getAttribute("user.newTimezone.jsp > "); > + String newTimezone = request.getParameter("newTimezone"); > + > + if (user.getUserTimezone()!= null && user.getUserTimezone().equals(newTimezone)) > { > + RequestDispatcher dispatcher = this.getServletContext > ().getRequestDispatcher("/account/selfService/newTimezone.jsp?action=redo"); > + dispatcher.forward(request, response); > + } else { > + user.setUserTimezone(newTimezone); > + > + userSession.setAttribute("user.newTimezone.jsp", user); > + try { > + userFactory.saveUser(user.getUserId(), user); > + } > + catch (Exception e) { > + throw new ServletException("Error saving user " + > user.getUserId(), e); > + } > + > + // forward the request for proper display > + RequestDispatcher dispatcher = this.getServletContext > ().getRequestDispatcher("/account/selfService/timezoneChanged.jsp"); > + dispatcher.forward(request, response); > + } > + } > +} > Index: > opennms-webapp/src/main/java/org/opennms/web/account/selfService/NewTimezoneEntryServlet.java > =================================================================== > --- > opennms-webapp/src/main/java/org/opennms/web/account/selfService/NewTimezoneEntryServlet.java > (.../external/current) (revision 0) > +++ > opennms-webapp/src/main/java/org/opennms/web/account/selfService/NewTimezoneEntryServlet.java > (.../trunk) (revision 47) > @@ -0,0 +1,80 @@ > +// > +// This file is part of the OpenNMS(R) Application. > +// > +// OpenNMS(R) is Copyright (C) 2002-2003 The OpenNMS Group, Inc. All > rights reserved. > +// OpenNMS(R) is a derivative work, containing both original code, > included code and modified > +// code that was published under the GNU General Public License. > Copyrights for modified > +// and included code are below. > +// > +// OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc. > +// > +// Modifications: > +// > +// Copyright (C) 2008 8x8 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; either version 2 of the License, or > +// (at your option) any later version. > +// > +// 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, > USA. > +// > +// For more information contact: > +// OpenNMS Licensing <[email protected]> > +// http://www.opennms.org/ > +// http://www.opennms.com/ > +// > + > +package org.opennms.web.account.selfService; > + > +import java.io.IOException; > + > +import javax.servlet.RequestDispatcher; > +import javax.servlet.ServletException; > +import javax.servlet.http.HttpServlet; > +import javax.servlet.http.HttpServletRequest; > +import javax.servlet.http.HttpServletResponse; > +import javax.servlet.http.HttpSession; > + > +import org.opennms.netmgt.config.UserFactory; > +import org.opennms.netmgt.config.UserManager; > +import org.opennms.netmgt.config.users.User; > + > +/** > + * A servlet that retrieves a user's password in preparation for changing > the password > + * > + */ > +public class NewTimezoneEntryServlet extends HttpServlet { > + private static final long serialVersionUID = 1L; > + > + public void doPost(HttpServletRequest request, HttpServletResponse > response) throws ServletException, IOException { > + HttpSession userSession = request.getSession(false); > + > + try { > + UserFactory.init(); > + } catch (Exception e) { > + throw new ServletException("NewTimezoneEntryServlet: Error > initializing user factory." + e); > + } > + UserManager userFactory = UserFactory.getInstance(); > + > + if (userSession != null) { > + String userid = request.getRemoteUser(); > + try { > + User user = userFactory.getUser(userid); > + userSession.setAttribute("user.newTimezone.jsp", user); > + } > + catch (Exception e) { > + throw new ServletException("Couldn't initialize > UserFactory", e); > + } > + RequestDispatcher dispatcher = this.getServletContext > ().getRequestDispatcher("/account/selfService/newTimezone.jsp"); > + dispatcher.forward(request, response); > + } > + } > +} > Index: opennms-webapp/src/main/java/org/opennms/web/Util.java > =================================================================== > --- opennms-webapp/src/main/java/org/opennms/web/Util.java > (.../external/current) (revision 47) > +++ opennms-webapp/src/main/java/org/opennms/web/Util.java > (.../trunk) (revision 47) > @@ -48,6 +48,7 @@ > import java.util.Iterator; > import java.util.Map; > import java.util.Set; > +import java.util.TimeZone; > import java.util.TreeMap; > > import javax.servlet.http.HttpServletRequest; > @@ -565,4 +566,28 @@ > return DateFormat.getDateTimeInstance(DateFormat.SHORT, > DateFormat.MEDIUM).format(date); > } > > + private final static String MARKER = "--timeuser"; > + public static final String formatMessageToUserTZ(String message, > String timezone) { > + if (message.indexOf(MARKER) == -1) return new String(message); > + > + String finalText = message.replaceAll(MARKER, ""); > + if (timezone != null && timezone.length() > 0) > + { > + try > + { > + DateFormat formatter = DateFormat.getDateTimeInstance( > DateFormat.FULL, DateFormat.FULL); > + formatter.setTimeZone(TimeZone.getTimeZone(timezone.trim > ())); > + > + String dateToParse = message.split(MARKER)[1]; > + String finalDate = formatter.format( > DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL).parse( > dateToParse.trim())); > + finalText = finalText.replaceFirst(dateToParse, > finalDate); > + } > + catch (Exception e) > + { > + e.printStackTrace(); > + } > + } > + return finalText; > + } > + > } > Index: opennms-webapp/src/main/webapp/outage/list.jsp > =================================================================== > --- opennms-webapp/src/main/webapp/outage/list.jsp > (.../external/current) (revision 47) > +++ opennms-webapp/src/main/webapp/outage/list.jsp (.../trunk) > (revision 47) > @@ -183,7 +183,7 @@ > > <!-- lost service time --> > <td class="noWrap"> > - <fmt:formatDate value="${outage.lostServiceTime}" type="date" > dateStyle="short"/> <fmt:formatDate value="${outage.lostServiceTime}" > type="time" pattern="HH:mm:ss"/> > + <fmt:formatDate value="${outage.lostServiceTime}" type="date" > dateStyle="short"/> <fmt:formatDate value="${outage.lostServiceTime}" > type="time" pattern="HH:mm:ss z"/> > <a href="<%=OutageUtil.makeLink( request, parms, new > LostServiceDateAfterFilter(outages[i].getLostServiceTime()), true)%>" > title="Only show outages beginning after this one"><%=AFTER_ICON%></a> > <a href="<%=OutageUtil.makeLink( request, parms, new > LostServiceDateBeforeFilter(outages[i].getLostServiceTime()), true)%>" > title="Only show outages beginning before this one"><%=BEFORE_ICON%></a> > </td> > @@ -192,7 +192,7 @@ > <% Date regainedTime = outages[i].getRegainedServiceTime(); %> > <% if(regainedTime != null ) { %> > <td class="noWrap"> > - <fmt:formatDate value="${outage.regainedServiceTime}" > type="date" dateStyle="short"/> <fmt:formatDate value="${ > outage.regainedServiceTime}" type="time" pattern="HH:mm:ss"/> > + <fmt:formatDate value="${outage.regainedServiceTime}" > type="date" dateStyle="short"/> <fmt:formatDate value="${ > outage.regainedServiceTime}" type="time" pattern="HH:mm:ss z"/> > <a href="<%=OutageUtil.makeLink( request, parms, new > RegainedServiceDateAfterFilter(outages[i].getRegainedServiceTime()), > true)%>" title="Only show outages resolving after this > one"><%=AFTER_ICON%></a> > <a href="<%=OutageUtil.makeLink( request, parms, new > RegainedServiceDateBeforeFilter(outages[i].getRegainedServiceTime()), > true)%>" title="Only show outages resolving before this > one"><%=BEFORE_ICON%></a> > </td> > Index: opennms-webapp/src/main/webapp/outage/current.jsp > =================================================================== > --- opennms-webapp/src/main/webapp/outage/current.jsp > (.../external/current) (revision 47) > +++ opennms-webapp/src/main/webapp/outage/current.jsp (.../trunk) > (revision 47) > @@ -160,7 +160,7 @@ > > <td><a > href="element/service.jsp?node=<%=nodeId%>&intf=<%=ipAddr%>&service=<%= > outage.getServiceId()%>"><%=outage.getServiceName()%></a></td> > <td> > - <fmt:formatDate value="${outage.timeDown}" type="date" > dateStyle="short"/> <fmt:formatDate value="${outage.timeDown}" > type="time" pattern="HH:mm:ss"/> > + <fmt:formatDate value="${outage.timeDown}" type="date" > dateStyle="short"/> <fmt:formatDate value="${outage.timeDown}" > type="time" pattern="HH:mm:ss z"/> > </td> > <td><a > href="outage/detail.jsp?id=<%=outageId%>"><%=outageId%></a></td> > </tr> > Index: opennms-webapp/src/main/webapp/outage/detail.jsp > =================================================================== > --- opennms-webapp/src/main/webapp/outage/detail.jsp > (.../external/current) (revision 47) > +++ opennms-webapp/src/main/webapp/outage/detail.jsp (.../trunk) > (revision 47) > @@ -48,9 +48,7 @@ > " > %> > > -<%! > - public static DateFormat DATE_FORMAT = DateFormat.getDateTimeInstance > (DateFormat.SHORT, DateFormat.MEDIUM); > -%> > +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> > > <% > String outageIdString = request.getParameter( "id" ); > @@ -73,6 +71,7 @@ > if( outage == null ) { > throw new org.opennms.web.outage.OutageIdNotFoundException( "An > outage with this id was not found.", String.valueOf(outageId) ); > } > + pageContext.setAttribute("outage", outage); > > String action = null; > String buttonName=null; > @@ -101,8 +100,7 @@ > </td> > > <td class="standardheader" > width="10%">Lost Service Time:</td> > - <td class="standard"><%=DATE_FORMAT.format( > outage.getLostServiceTime())%></td> > - > + <td class="standard"><fmt:formatDate value="${ > outage.lostServiceTime}" type="date" > dateStyle="short"/> <fmt:formatDate value="${outage.lostServiceTime}" > type="time" pattern="HH:mm:ss z" /></td> > <td class="standardheader" > width="10%">Lost Service Event:</td> > <td class="standard"><a href="event/detail.jsp?id=<%= > outage.getLostServiceEventId()%>"><%=outage.getLostServiceEventId > ()%></a></td> > > @@ -126,7 +124,7 @@ > <% Date regainTime = outage.getRegainedServiceTime(); %> > > <% if(regainTime != null) { %> > - <%=DATE_FORMAT.format(regainTime)%> > + <fmt:formatDate value="${outage.regainedServiceTime}" > type="date" dateStyle="short"/> <fmt:formatDate value="${ > outage.regainedServiceTime}" type="time" pattern="HH:mm:ss z" /> > <% } else { %> > <% String label = OutageUtil.getStatusLabel(outage); %> > <%=(label == null) ? " " : label %> > Index: opennms-webapp/src/main/webapp/notification/list.jsp > =================================================================== > --- opennms-webapp/src/main/webapp/notification/list.jsp > (.../external/current) (revision 47) > +++ opennms-webapp/src/main/webapp/notification/list.jsp > (.../trunk) (revision 47) > @@ -43,9 +43,10 @@ > <%@page language="java" > contentType="text/html" > session="true" > - import="org.opennms.web.notification.*, > + import="java.util.*, > + org.opennms.web.notification.*, > org.opennms.web.event.*, > - org.opennms.web.MissingParameterException, > + org.opennms.web.MissingParameterException, > org.opennms.web.acegisecurity.Authentication > " > %> > @@ -62,7 +63,16 @@ > throw new MissingParameterException( "username" ); > } > > - Notification[] notices = this.model.getOutstandingNotices( username > ); > + Notification[] notices = this.model.getOutstandingNotices( username > ); > + String userTimezone = TimeZone.getDefault().getID(); > + try { > + TimeZone tz = > (TimeZone)javax.servlet.jsp.jstl.core.Config.find(pageContext, > javax.servlet.jsp.jstl.core.Config.FMT_TIME_ZONE); > + if (tz != null) { > + userTimezone = tz.getID(); > + } > + } > + catch (Exception e) { > + } > %> > > <jsp:include page="/includes/header.jsp" flush="false" > > @@ -145,7 +155,7 @@ > <td><a > href="event/detail.jsp?id=<%=notices[i].getEventId()%>"><%=notices[i].getEventId()%></a></td> > <td class="bright"><%=eventSeverity%></td> > <td class="noWrap"><%=notices[i].getTimeSent()%></td> > - <td><%=notices[i].getTextMessage()%></td> > + <td><%=org.opennms.web.Util.formatMessageToUserTZ(notices[i].getTextMessage(), > userTimezone)%></td> > </tr> > <% } %> > </table> > Index: opennms-webapp/src/main/webapp/notification/detail.jsp > =================================================================== > --- opennms-webapp/src/main/webapp/notification/detail.jsp > (.../external/current) (revision 47) > +++ opennms-webapp/src/main/webapp/notification/detail.jsp > (.../trunk) (revision 47) > @@ -43,12 +43,15 @@ > contentType="text/html" > session="true" > import="java.util.*, > + org.opennms.web.*, > org.opennms.web.notification.*, > org.opennms.web.element.*, > org.opennms.web.event.* > " > %> > > +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> > + > <%! > NotificationModel model = new NotificationModel(); > %> > @@ -69,6 +72,7 @@ > } > > Notification notice = this.model.getNoticeInfo(noticeID); > + pageContext.setAttribute("notice", notice); > > if( notice == null ) { > throw new NoticeIdNotFoundException("An notice with this id was > not found.", String.valueOf(noticeID)); > @@ -81,6 +85,16 @@ > eventSeverity = new String("Cleared"); > } > > + String userTimezone = TimeZone.getDefault().getID(); > + try { > + TimeZone tz = > (TimeZone)javax.servlet.jsp.jstl.core.Config.find(pageContext, > javax.servlet.jsp.jstl.core.Config.FMT_TIME_ZONE); > + if (tz != null) { > + userTimezone = tz.getID(); > + } > + } > + catch (Exception e) { > + } > + > %> > > <jsp:include page="/includes/header.jsp" flush="false" > > @@ -107,9 +121,9 @@ > <table> > <tr class="<%=eventSeverity%>"> > <td width="15%">Notification Time</td> > - <td width="17%"><%=org.opennms.netmgt.EventConstants.formatToUIString > (notice.getTimeSent())%></td> > + <td width="17%"><fmt:formatDate value="${notice.timeSent}" > type="date" dateStyle="short"/> <fmt:formatDate value="${ > notice.timeSent}" type="time" pattern="HH:mm:ss z" /></td> > <td width="15%">Time Replied</td> > - <td width="17%"><%=notice.getTimeReplied()!=null ? > org.opennms.netmgt.EventConstants.formatToUIString(notice.getTimeReplied()) > : " "%></td> > + <td width="17%"><fmt:formatDate value="${notice.timeReplied}" > type="date" dateStyle="short"/> <fmt:formatDate value="${ > notice.timeReplied}" type="time" pattern="HH:mm:ss z" /></td> > <td width="15%">Responder</td> > <td width="17%"><%=notice.getResponder()!=null ? notice.getResponder() > : " "%></td> > </tr> > @@ -175,7 +189,7 @@ > </tr> > > <tr class="<%=eventSeverity%>"> > - <td><%=notice.getTextMessage()%></td> > + <td><%=org.opennms.web.Util.formatMessageToUserTZ( > notice.getTextMessage(), userTimezone)%></td> > </tr> > <% } %> > </table> > @@ -193,12 +207,13 @@ > > <% List sentToList = notice.getSentTo(); %> > <% for (int i=0; i < sentToList.size(); i++) { %> > - <% NoticeSentTo sentTo = (NoticeSentTo)sentToList.get(i); %> > - > + <% NoticeSentTo sentTo = (NoticeSentTo)sentToList.get(i); > + pageContext.setAttribute("notice", sentTo); > + %> > <tr class="<%=eventSeverity%>"> > <td><%=sentTo.getUserId()%></td> > > - <td><%=org.opennms.netmgt.EventConstants.formatToUIString( > sentTo.getTime())%></td> > + <td><fmt:formatDate value="${notice.time}" type="date" > dateStyle="short"/> <fmt:formatDate value="${notice.time}" > type="time" pattern="HH:mm:ss z" /></td> > > <td> > <% if (sentTo.getMedia()!=null && > !sentTo.getMedia().trim().equals("")) { %> > Index: opennms-webapp/src/main/webapp/notification/acknowledge.jsp > =================================================================== > --- opennms-webapp/src/main/webapp/notification/acknowledge.jsp > (.../external/current) (revision 47) > +++ opennms-webapp/src/main/webapp/notification/acknowledge.jsp > (.../trunk) (revision 47) > @@ -84,6 +84,17 @@ > for (int i = 0; i < noticeIds.length; i++) { > notices[i] = this.model.getNoticeInfo(Integer.parseInt > (noticeIds[i])); > } > + > + String userTimezone = java.util.TimeZone.getDefault().getID(); > + try { > + java.util.TimeZone tz = (java.util.TimeZone)javax.servlet.jsp.jstl.core.Config.find(pageContext, > javax.servlet.jsp.jstl.core.Config.FMT_TIME_ZONE); > + if (tz != null) { > + userTimezone = tz.getID(); > + } > + } > + catch (Exception e) { > + } > + > %> > > <jsp:include page="/includes/header.jsp" flush="false" > > @@ -158,7 +169,7 @@ > <%if (notices[i].getTextMessage() != null) { %> > <tr class="<%=eventSeverity%>"> > <td colspan="6"> > - <%=notices[i].getTextMessage()%> > + <%=org.opennms.web.Util.formatMessageToUserTZ(notices[i].getTextMessage(), > userTimezone)%> > </td> > </tr> > <% } %> > Index: opennms-webapp/src/main/webapp/notification/browser.jsp > =================================================================== > --- opennms-webapp/src/main/webapp/notification/browser.jsp > (.../external/current) (revision 47) > +++ opennms-webapp/src/main/webapp/notification/browser.jsp > (.../trunk) (revision 47) > @@ -55,6 +55,8 @@ > " > %> > > +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> > + > <%-- > This page is written to be the display (view) portion of the > NotificationQueryServlet > at the /notification/list URL. It will not work by itself, as it > requires two request > @@ -97,7 +99,17 @@ > HashMap nodeLabelMap = new HashMap(); > > //useful constant strings > - String addPositiveFilterString = "[+]"; > + String addPositiveFilterString = "[+]"; > + String userTimezone = TimeZone.getDefault().getID(); > + try { > + TimeZone tz = > (TimeZone)javax.servlet.jsp.jstl.core.Config.find(pageContext, > javax.servlet.jsp.jstl.core.Config.FMT_TIME_ZONE); > + if (tz != null) { > + userTimezone = tz.getID(); > + } > + } > + catch (Exception e) { > + } > + > %> > > <jsp:include page="/includes/header.jsp" flush="false" > > @@ -239,7 +251,8 @@ > </tr> > </thead> > > - <% for( int i=0; i < notices.length; i++ ) { > + <% for( int i=0; i < notices.length; i++ ) { > + pageContext.setAttribute("notice", notices[i]); > Event event = EventFactory.getEvent( notices[i].getEventId() ); > String eventSeverity = EventUtil.getSeverityLabel( > event.getSeverity());%> > <tr class="<%=eventSeverity%>"> > @@ -254,7 +267,7 @@ > <% } %> > </td> > <td class="bright divider" rowspan="2"><%=eventSeverity%></td> > - <td class="divider"><%= > org.opennms.netmgt.EventConstants.formatToUIString > (notices[i].getTimeSent())%></td> > + <td class="divider"><fmt:formatDate value="${notice.timeSent}" > type="date" dateStyle="short"/> <fmt:formatDate value="${ > notice.timeSent}" type="time" pattern="HH:mm:ss z" /></td> > <td class="divider"><% NoticeFactory.Filter responderFilter = > new NoticeFactory.ResponderFilter(notices[i].getResponder()); %> > <% if(notices[i].getResponder()!=null) {%> > <%=notices[i].getResponder()%> > @@ -265,9 +278,9 @@ > </td> > <td class="divider"> > <%if (notices[i].getTimeReplied()!=null) { %> > - <%=org.opennms.netmgt.EventConstants.formatToUIString > (notices[i].getTimeReplied())%> > + <fmt:formatDate value="${notice.timeReplied}" type="date" > dateStyle="short"/> <fmt:formatDate value="${notice.timeSent}" > type="time" pattern="HH:mm:ss z" /> > <% } %> > - </td> > + </td> > <td class="divider"> > <% if(notices[i].getNodeId() != 0 ) { %> > <% NoticeFactory.Filter nodeFilter = new > NoticeFactory.NodeFilter(notices[i].getNodeId()); %> > @@ -306,7 +319,7 @@ > </td> > </tr> > <tr class="<%=eventSeverity%>"> > - <td colspan="6"><%=notices[i].getTextMessage()%></td> > + <td colspan="6"><%=org.opennms.web.Util.formatMessageToUserTZ(notices[i].getTextMessage(), > userTimezone)%></td> > </tr> > <% } /*end for*/%> > </table> > Index: opennms-webapp/src/main/webapp/alarm/list-long.jsp > =================================================================== > --- opennms-webapp/src/main/webapp/alarm/list-long.jsp (.../external/current) (revision 47) > +++ opennms-webapp/src/main/webapp/alarm/list-long.jsp (.../trunk) > (revision 47) > @@ -365,14 +365,14 @@ > <% } %> > </td> > <td class="divider"> > - <nobr><span title="Event <%= alarms[i].getLastEventID() > %>"><a href="event/detail.jsp?id=<%= alarms[i].getLastEventID() > %>"><fmt:formatDate value="${alarm.lastEventTime}" type="date" > dateStyle="short"/> <fmt:formatDate value="${alarm.lastEventTime}" > type="time" pattern="HH:mm:ss"/></a></span></nobr> > + <nobr><span title="Event <%= alarms[i].getLastEventID() > %>"><a href="event/detail.jsp?id=<%= alarms[i].getLastEventID() > %>"><fmt:formatDate value="${alarm.lastEventTime}" type="date" > dateStyle="short"/> <fmt:formatDate value="${alarm.lastEventTime}" > type="time" pattern="HH:mm:ss z"/></a></span></nobr> > <nobr> > <a href="<%=this.makeLink( parms, new > AfterLastEventTimeFilter(alarms[i].getLastEventTime()), true)%>" > class="filterLink" title="Only show alarms occurring after this > one">${addAfterFilter}</a> > <a href="<%=this.makeLink( parms, new > BeforeLastEventTimeFilter(alarms[i].getLastEventTime()), true)%>" > class="filterLink" title="Only show alarms occurring before this > one">${addBeforeFilter}</a> > </nobr> > </td> > <td class="divider"> > - <nobr><fmt:formatDate value="${alarm.firstEventTime}" > type="date" dateStyle="short"/> <fmt:formatDate value="${ > alarm.firstEventTime}" type="time" pattern="HH:mm:ss"/></nobr> > + <nobr><fmt:formatDate value="${alarm.firstEventTime}" > type="date" dateStyle="short"/> <fmt:formatDate value="${ > alarm.firstEventTime}" type="time" pattern="HH:mm:ss z"/></nobr> > <nobr> > <a href="<%=this.makeLink( parms, new > AfterFirstEventTimeFilter(alarms[i].getFirstEventTime()), true)%>" > class="filterLink" title="Only show alarms occurring after this > one">${addAfterFilter}</a> > <a href="<%=this.makeLink( parms, new > BeforeFirstEventTimeFilter(alarms[i].getFirstEventTime()), true)%>" > class="filterLink" title="Only show alarms occurring before this > one">${addBeforeFilter}</a> > @@ -396,7 +396,12 @@ > </td> > > <td colspan="2"> > - Ackd Time: <%=alarms[i].isAcknowledged() ? > org.opennms.netmgt.EventConstants.formatToUIString(alarms[i].getAcknowledgeTime()) > : " "%> > + Ackd Time: <% if (alarms[i].isAcknowledged()) { %> > + <fmt:formatDate value="${alarm.acknowledgeTime}" > type="date" dateStyle="short"/> <fmt:formatDate value="${ > alarm.acknowledgeTime}" type="time" pattern="HH:mm:ss z"/> > + <% } else { %> > + > + <% } %> > + > </td> > <td colspan="3"> > <% if(alarms[i].getUei() != null) { %> > Index: opennms-webapp/src/main/webapp/alarm/list.jsp > =================================================================== > --- opennms-webapp/src/main/webapp/alarm/list.jsp > (.../external/current) (revision 47) > +++ opennms-webapp/src/main/webapp/alarm/list.jsp (.../trunk) > (revision 47) > @@ -377,13 +377,13 @@ > <% } %> > </td> > <td class="divider"> > - <nobr><span title="Event <%= alarms[i].getLastEventID() > %>"><a href="event/detail.jsp?id=<%= alarms[i].getLastEventID() > %>"><fmt:formatDate value="${alarm.lastEventTime}" type="date" > dateStyle="short"/> <fmt:formatDate value="${alarm.lastEventTime}" > type="time" pattern="HH:mm:ss"/></a></span></nobr> > + <nobr><span title="Event <%= alarms[i].getLastEventID() > %>"><a href="event/detail.jsp?id=<%= alarms[i].getLastEventID() > %>"><fmt:formatDate value="${alarm.lastEventTime}" type="date" > dateStyle="short"/> <fmt:formatDate value="${alarm.lastEventTime}" > type="time" pattern="HH:mm:ss z"/></a></span></nobr> > <nobr> > <a href="<%=this.makeLink( parms, new > AfterLastEventTimeFilter(alarms[i].getLastEventTime()), true)%>" > class="filterLink" title="Only show alarms occurring after this > one">${addAfterFilter}</a> > <a href="<%=this.makeLink( parms, new > BeforeLastEventTimeFilter(alarms[i].getLastEventTime()), true)%>" > class="filterLink" title="Only show alarms occurring before this > one">${addBeforeFilter}</a> > </nobr> > <br /> > - <nobr><fmt:formatDate value="${alarm.firstEventTime}" > type="date" dateStyle="short"/> <fmt:formatDate value="${ > alarm.firstEventTime}" type="time" pattern="HH:mm:ss"/></nobr> > + <nobr><fmt:formatDate value="${alarm.firstEventTime}" > type="date" dateStyle="short"/> <fmt:formatDate value="${ > alarm.firstEventTime}" type="time" pattern="HH:mm:ss z"/></nobr> > <nobr> > <a href="<%=this.makeLink( parms, new > AfterFirstEventTimeFilter(alarms[i].getFirstEventTime()), true)%>" > class="filterLink" title="Only show alarms occurring after this > one">${addAfterFilter}</a> > <a href="<%=this.makeLink( parms, new > BeforeFirstEventTimeFilter(alarms[i].getFirstEventTime()), true)%>" > class="filterLink" title="Only show alarms occurring before this > one">${addBeforeFilter}</a> > Index: opennms-webapp/src/main/webapp/alarm/detail.jsp > =================================================================== > --- opennms-webapp/src/main/webapp/alarm/detail.jsp > (.../external/current) (revision 47) > +++ opennms-webapp/src/main/webapp/alarm/detail.jsp (.../trunk) > (revision 47) > @@ -47,6 +47,7 @@ > %> > <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> > <%@ taglib tagdir="/WEB-INF/tags/form" prefix="form" %> > +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> > > <%! > > @@ -128,7 +129,8 @@ > </tr> > <tr class="<%=AlarmUtil.getSeverityLabel(alarm.getSeverity())%>"> > <th>Last Event</th> > - <td><span title="Event <%= alarm.getLastEventID() %>"><a > href="event/detail.jsp?id=<%= alarm.getLastEventID() %>"><%= > org.opennms.netmgt.EventConstants.formatToUIString(alarm.getLastEventTime > ())%></a></span></td> > + <td><span title="Event <%= alarm.getLastEventID() %>"><a > href="event/detail.jsp?id=<%= alarm.getLastEventID() %>"> > + <fmt:formatDate value="${alarm.lastEventTime}" > type="date" dateStyle="short"/> <fmt:formatDate value="${ > alarm.lastEventTime}" type="time" pattern="HH:mm:ss z" /></a></span></td> > <th>Interface</th> > <td> > <% if( alarm.getIpAddress() != null ) { %> > @@ -142,11 +144,11 @@ > <% } %> > </td> > <th>Time Acknowledged</th> > - <td><%=alarm.getAcknowledgeTime()!=null ? > org.opennms.netmgt.EventConstants.formatToUIString( > alarm.getAcknowledgeTime()) : " "%></td> > + <td><fmt:formatDate value="${alarm.acknowledgeTime}" > type="date" dateStyle="short"/> <fmt:formatDate value="${ > alarm.acknowledgeTime}" type="time" pattern="HH:mm:ss z" /></td> > </tr> > <tr class="<%=AlarmUtil.getSeverityLabel(alarm.getSeverity())%>"> > <th>First Event</th> > - <td><%=org.opennms.netmgt.EventConstants.formatToUIString( > alarm.getFirstEventTime())%></td> > + <td><fmt:formatDate value="${alarm.firstEventTime}" type="date" > dateStyle="short"/> <fmt:formatDate value="${alarm.firstEventTime}" > type="time" pattern="HH:mm:ss z" /></td> > <th>Service</th> > <td> > <% if( alarm.getServiceName() != null ) { %> > Index: opennms-webapp/src/main/webapp/includes/header.jsp > =================================================================== > --- opennms-webapp/src/main/webapp/includes/header.jsp > (.../external/current) (revision 47) > +++ opennms-webapp/src/main/webapp/includes/header.jsp (.../trunk) > (revision 47) > @@ -20,7 +20,7 @@ > <%@page language="java" > contentType="text/html" > session="true" > - import="org.opennms.netmgt.config.NotifdConfigFactory" > + import="org.opennms.netmgt.config.*" > %> > <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> > <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> > @@ -30,20 +30,38 @@ > public void init() throws ServletException { > try { > NotifdConfigFactory.init(); > + UserFactory.init(); > } catch (Throwable t) { > - // notice status will be unknown if the factory can't be > initialized > - } > + // notice status will be unknown if the factory can't be > initialized > + } > } > %> > > <% > String noticeStatus; > + String userTimezone = null; > try { > noticeStatus = NotifdConfigFactory.getPrettyStatus(); > } catch (Throwable t) { > noticeStatus = "<font color=\"ff0000\">Unknown</font>"; > } > pageContext.setAttribute("noticeStatus", noticeStatus); > + try { > + UserManager userManager = UserFactory.getInstance(); > + if (userManager != null) { > + String user = request.getRemoteUser(); > + userTimezone = userManager.getTimeZone(user); > + } > + > + userTimezone = userTimezone == null || userTimezone.length() == 0 > + ? java.util.TimeZone.getDefault().getID() : userTimezone; > + > + pageContext.setAttribute("timezone", userTimezone); > + > + } catch (Exception e) { > + throw new ServletException("Error retrieving remote user > timezone", e); > + } > + > %> > <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" > "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> > @@ -74,6 +92,8 @@ > validator doesn't complain. See bug #1728. --%> > <%= "<body>" %> > > +<fmt:setTimeZone value="${timezone}" scope="session"/> > + > <c:choose> > <c:when test="${param.quiet == 'true'}"> > <!-- No visual header is being displayed --> > Index: opennms-webapp/src/main/webapp/includes/eventlist.jsp > =================================================================== > --- opennms-webapp/src/main/webapp/includes/eventlist.jsp > (.../external/current) (revision 47) > +++ opennms-webapp/src/main/webapp/includes/eventlist.jsp > (.../trunk) (revision 47) > @@ -184,7 +184,7 @@ > </nobr> > </td> > <% } %> > - <td class="divider"><fmt:formatDate value="${event.time}" > type="date" dateStyle="short"/> <fmt:formatDate value="${event.time}" > type="time" pattern="HH:mm:ss"/></td> > + <td class="divider"><fmt:formatDate value="${event.time}" > type="date" dateStyle="short"/> <fmt:formatDate value="${event.time}" > type="time" pattern="HH:mm:ss z" /></td> > <td class="divider bright"><%=EventUtil.getSeverityLabel > (severity)%></td> > <td class="divider"><%=events[i].getLogMessage()%></td> > </tr> > Index: opennms-webapp/src/main/webapp/includes/serviceOutages-box.jsp > =================================================================== > --- opennms-webapp/src/main/webapp/includes/serviceOutages-box.jsp > (.../external/current) (revision 47) > +++ opennms-webapp/src/main/webapp/includes/serviceOutages-box.jsp > (.../trunk) (revision 47) > @@ -92,11 +92,11 @@ > pageContext.setAttribute("outage", outage); > %> > <tr class="<%=(outages[i].getRegainedServiceTime() == null) ? > "Critical" : "Normal"%>"> > - <td class="divider"><fmt:formatDate value="${outage.lostServiceTime}" > type="date" dateStyle="short"/> <fmt:formatDate value="${ > outage.lostServiceTime}" type="time" pattern="HH:mm:ss"/></td> > + <td class="divider"><fmt:formatDate value="${outage.lostServiceTime}" > type="date" dateStyle="short"/> <fmt:formatDate value="${ > outage.lostServiceTime}" type="time" pattern="HH:mm:ss z"/></td> > <% if( outages[i].getRegainedServiceTime() == null ) { %> > <td class="divider bright"><b>DOWN</b></td> > <% } else { %> > - <td class="divider bright"><fmt:formatDate value="${ > outage.regainedServiceTime}" type="date" > dateStyle="short"/> <fmt:formatDate value="${ > outage.regainedServiceTime}" type="time" pattern="HH:mm:ss"/></td> > + <td class="divider bright"><fmt:formatDate value="${ > outage.regainedServiceTime}" type="date" > dateStyle="short"/> <fmt:formatDate value="${ > outage.regainedServiceTime}" type="time" pattern="HH:mm:ss z"/></td> > <% } %> > <td class="divider"><a > href="outage/detail.jsp?id=<%=outages[i].getId()%>"><%=outages[i].getId()%></a></td> > </tr> > Index: opennms-webapp/src/main/webapp/includes/interfaceOutages-box.jsp > =================================================================== > --- opennms-webapp/src/main/webapp/includes/interfaceOutages-box.jsp > (.../external/current) (revision 47) > +++ opennms-webapp/src/main/webapp/includes/interfaceOutages-box.jsp > (.../trunk) (revision 47) > @@ -100,11 +100,11 @@ > <tr class="Cleared"> > <% } %> > <td class="divider"><a > href="element/service.jsp?node=<%=nodeId%>&intf=<%=outages[i].getIpAddress()%>&service=<%=outages[i].getServiceId()%>"><%=outages[i].getServiceName()%></a></td> > - <td class="divider"><fmt:formatDate value="${outage.lostServiceTime}" > type="date" dateStyle="short"/> <fmt:formatDate value="${ > outage.lostServiceTime}" type="time" pattern="HH:mm:ss"/></td> > + <td class="divider"><fmt:formatDate value="${outage.lostServiceTime}" > type="date" dateStyle="short"/> <fmt:formatDate value="${ > outage.lostServiceTime}" type="time" pattern="HH:mm:ss z"/></td> > <% if( outages[i].getRegainedServiceTime() == null ) { %> > <td class="divider"><b>DOWN</b></td> > <% } else { %> > - <td class="divider"><fmt:formatDate value="${ > outage.regainedServiceTime}" type="date" > dateStyle="short"/> <fmt:formatDate value="${ > outage.regainedServiceTime}" type="time" pattern="HH:mm:ss"/></td> > + <td class="divider"><fmt:formatDate value="${ > outage.regainedServiceTime}" type="date" > dateStyle="short"/> <fmt:formatDate value="${ > outage.regainedServiceTime}" type="time" pattern="HH:mm:ss z"/></td> > <% } %> > <td class="divider"><a > href="outage/detail.jsp?id=<%=outages[i].getId()%>"><%=outages[i].getId()%></a></td> > </tr> > Index: opennms-webapp/src/main/webapp/includes/timeControl.jsp > =================================================================== > --- opennms-webapp/src/main/webapp/includes/timeControl.jsp > (.../external/current) (revision 47) > +++ opennms-webapp/src/main/webapp/includes/timeControl.jsp > (.../trunk) (revision 47) > @@ -43,12 +43,12 @@ > <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> > <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> > > -<fmt:parseDate var="morning" value="01-08-2005 03:00:00" > pattern="dd-MM-yyyy HH:mm:ss"/> > -<fmt:parseDate var="evening" value="01-08-2005 16:00:00" > pattern="dd-MM-yyyy HH:mm:ss"/> > +<fmt:parseDate var="morning" value="01-08-2005 03:00:00" > pattern="dd-MM-yyyy HH:mm:ss z"/> > +<fmt:parseDate var="evening" value="01-08-2005 16:00:00" > pattern="dd-MM-yyyy HH:mm:ss z"/> > <c:set var="amPmList"><fmt:formatDate value="${morning}" > pattern="a"/>,<fmt:formatDate value="${evening}" pattern="a"/></c:set> > > <c:set var="prefix" value="${param.prefix}" /> > -<fmt:parseDate var="time" value="${param.time}" pattern="HH:mm:ss" /> > +<fmt:parseDate var="time" value="${param.time}" pattern="HH:mm:ss z" /> > > <select name="<c:out > value='${prefix}'/>Hour"> > <fmt:formatDate var="startHour" > value="${time}" pattern="h"/> > Index: opennms-webapp/src/main/webapp/includes/nodeOutages-box.jsp > =================================================================== > --- opennms-webapp/src/main/webapp/includes/nodeOutages-box.jsp(.../external/current) (revision 47) > +++ opennms-webapp/src/main/webapp/includes/nodeOutages-box.jsp(.../trunk) (revision 47) > @@ -101,12 +101,12 @@ > <% } %> > <td class="divider"><a > href="element/interface.jsp?node=<%=nodeId%>&intf=<%=outages[i].getIpAddress()%>"><%=outages[i].getIpAddress()%></a></td> > <td class="divider"><a > href="element/service.jsp?node=<%=nodeId%>&intf=<%=outages[i].getIpAddress()%>&service=<%=outages[i].getServiceId()%>"><%=outages[i].getServiceName()%></a></td> > - <td class="divider"><fmt:formatDate value="${outage.lostServiceTime}" > type="date" dateStyle="short"/> <fmt:formatDate value="${ > outage.lostServiceTime}" type="time" pattern="HH:mm:ss"/></td> > + <td class="divider"><fmt:formatDate value="${outage.lostServiceTime}" > type="date" dateStyle="short"/> <fmt:formatDate value="${ > outage.lostServiceTime}" type="time" pattern="HH:mm:ss z"/></td> > > <% if( outages[i].getRegainedServiceTime() == null ) { %> > <td class="divider bright"><b>DOWN</b></td> > <% } else { %> > - <td class="divider bright"><fmt:formatDate value="${ > outage.regainedServiceTime}" type="date" > dateStyle="short"/> <fmt:formatDate value="${ > outage.regainedServiceTime}" type="time" pattern="HH:mm:ss"/></td> > + <td class="divider bright"><fmt:formatDate value="${ > outage.regainedServiceTime}" type="date" > dateStyle="short"/> <fmt:formatDate value="${ > outage.regainedServiceTime}" type="time" pattern="HH:mm:ss z"/></td> > <% } %> > <td class="divider"><a > href="outage/detail.jsp?id=<%=outages[i].getId()%>"><%=outages[i].getId()%></a></td> > </tr> > Index: opennms-webapp/src/main/webapp/event/list.jsp > =================================================================== > --- opennms-webapp/src/main/webapp/event/list.jsp > (.../external/current) (revision 47) > +++ opennms-webapp/src/main/webapp/event/list.jsp (.../trunk) > (revision 47) > @@ -289,7 +289,7 @@ > <% } %> > </td> > <td class="divider"> > - <nobr><fmt:formatDate value="${event.time}" type="date" > dateStyle="short"/> <fmt:formatDate value="${event.time}" type="time" > pattern="HH:mm:ss"/></nobr> > + <nobr><fmt:formatDate value="${event.time}" type="date" > dateStyle="short"/> <fmt:formatDate value="${event.time}" type="time" > pattern="HH:mm:ss z"/></nobr> > <nobr> > <a href="<%=this.makeLink( parms, new > AfterDateFilter(events[i].getTime()), true)%>" class="filterLink" > title="Only show events occurring after this > one"><%=addAfterDateFilterString%></a> > <a href="<%=this.makeLink( parms, new > BeforeDateFilter(events[i].getTime()), true)%>" class="filterLink" > title="Only show events occurring before this > one"><%=addBeforeDateFilterString%></a> > Index: opennms-webapp/src/main/webapp/event/detail.jsp > =================================================================== > --- opennms-webapp/src/main/webapp/event/detail.jsp > (.../external/current) (revision 47) > +++ opennms-webapp/src/main/webapp/event/detail.jsp (.../trunk) > (revision 47) > @@ -56,6 +56,8 @@ > > %> > > +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> > + > <% > String eventIdString = request.getParameter( "id" ); > > @@ -77,7 +79,9 @@ > if( event == null ) { > throw new org.opennms.web.event.EventIdNotFoundException( "An > event with this id was not found.", String.valueOf(eventId) ); > } > - > + > + pageContext.setAttribute("event", event); > + > String action = null; > String buttonName=null; > > @@ -138,7 +142,7 @@ > > <tr class="<%=EventUtil.getSeverityLabel(event.getSeverity())%>"> > <th>Time</th> > - <td><%=org.opennms.netmgt.EventConstants.formatToUIString( > event.getTime())%></td> > + <td><fmt:formatDate value="${event.time}" type="date" > dateStyle="short"/> <fmt:formatDate value="${event.time}" type="time" > pattern="HH:mm:ss z" /></td> > <th>Interface</th> > <td> > <% if( event.getIpAddress() != null ) { %> > @@ -152,7 +156,7 @@ > <% } %> > </td> > <th>Time Acknowledged</th> > - <td><%=event.getAcknowledgeTime()!=null ? > org.opennms.netmgt.EventConstants.formatToUIString( > event.getAcknowledgeTime()) : " "%></td> > + <td><fmt:formatDate value="${event.acknowledgeTime}" > type="date" dateStyle="short"/> <fmt:formatDate value="${ > event.acknowledgeTime}" type="time" pattern="HH:mm:ss z" /></td> > </tr> > > <tr class="<%=EventUtil.getSeverityLabel(event.getSeverity())%>"> > Index: opennms-webapp/src/main/webapp/WEB-INF/web.xml > =================================================================== > --- opennms-webapp/src/main/webapp/WEB-INF/web.xml > (.../external/current) (revision 47) > +++ opennms-webapp/src/main/webapp/WEB-INF/web.xml (.../trunk) > (revision 47) > @@ -572,7 +572,17 @@ > <servlet-name>newPasswordAction</servlet-name> > <servlet-class> > org.opennms.web.account.selfService.NewPasswordActionServlet > </servlet-class> > </servlet> > - > + > + <servlet> > + <servlet-name>newTimezoneEntry</servlet-name> > + <servlet-class> > org.opennms.web.account.selfService.NewTimezoneEntryServlet > </servlet-class> > + </servlet> > + <!-- servlet for self-service password change action --> > + <servlet> > + <servlet-name>newTimezoneAction</servlet-name> > + <servlet-class> > org.opennms.web.account.selfService.NewTimezoneActionServlet > </servlet-class> > + </servlet> > + > <!-- Servlet mappings for user account self-service --> > <servlet-mapping> > <servlet-name>newPasswordEntry</servlet-name> > @@ -583,6 +593,14 @@ > <url-pattern>/account/selfService/newPasswordAction</url-pattern> > </servlet-mapping> > > + <servlet-mapping> > + <servlet-name>newTimezoneEntry</servlet-name> > + <url-pattern>/account/selfService/newTimezoneEntry</url-pattern> > + </servlet-mapping> > + <servlet-mapping> > + <servlet-name>newTimezoneAction</servlet-name> > + <url-pattern>/account/selfService/newTimezoneAction</url-pattern> > + </servlet-mapping> > > <servlet> > <servlet-name>nodeLabelChange</servlet-name> > Index: > opennms-webapp/src/main/webapp/admin/notification/noticeWizard/choosePath.jsp > =================================================================== > --- > opennms-webapp/src/main/webapp/admin/notification/noticeWizard/choosePath.jsp > (.../external/current) (revision 47) > +++ > opennms-webapp/src/main/webapp/admin/notification/noticeWizard/choosePath.jsp > (.../trunk) (revision 47) > @@ -76,6 +76,16 @@ > varbindValue=varbind.getVbvalue(); > } > } > + String userTimezone = TimeZone.getDefault().getID(); > + try { > + TimeZone tz = > (TimeZone)javax.servlet.jsp.jstl.core.Config.find(pageContext, > javax.servlet.jsp.jstl.core.Config.FMT_TIME_ZONE); > + if (tz != null) { > + userTimezone = tz.getID(); > + } > + } > + catch (Exception e) { > + } > + > %> > > <jsp:include page="/includes/header.jsp" flush="false" > > @@ -173,7 +183,7 @@ > Text Message: > </td> > <td valign="top" align="left"> > - <textarea rows="3" cols="100" name="textMsg"><%=( > newNotice.getTextMessage()!=null ? newNotice.getTextMessage() : > "")%></textarea> > + <textarea rows="3" cols="100" name="textMsg"><%=( > newNotice.getTextMessage()!=null ? > org.opennms.web.Util.formatMessageToUserTZ(newNotice.getTextMessage(), > userTimezone) : "")%></textarea> > </td> > </tr> > <tr> > Index: > opennms-webapp/src/main/webapp/admin/userGroupView/users/modifyUser.jsp > =================================================================== > --- > opennms-webapp/src/main/webapp/admin/userGroupView/users/modifyUser.jsp > (.../external/current) (revision 47) > +++ > opennms-webapp/src/main/webapp/admin/userGroupView/users/modifyUser.jsp > (.../trunk) (revision 47) > @@ -200,6 +200,7 @@ > String textPin = null; > String fullName = null; > String comments = null; > + String timezone = null; > try { > email = userFactory.getEmail(userid); > pagerEmail = userFactory.getPagerEmail(userid); > @@ -210,6 +211,7 @@ > textPin = userFactory.getTextPin(userid); > fullName = user.getFullName(); > comments = user.getUserComments(); > + timezone = user.getUserTimezone(); > } catch (org.exolab.castor.xml.MarshalException e) { > throw new ServletException("An Error occurred reading the > users file", e); > } catch (org.exolab.castor.xml.ValidationException e) { > @@ -234,6 +236,14 @@ > </td> > </tr> > <tr> > + <td valign="top"> > + <label id="timezoneLabel" > for="userTimezone">Timezone:</label> > + </td> > + <td align="left" valign="top"> > + <input id="userTimezone" type="text" size="35" > name="userTimezone" value="<%=(timezone == null ? "": timezone) %>" /> > + </td> > + </tr> > + <tr> > <td colspan="2"> > > </td> > Index: opennms-webapp/src/main/webapp/admin/userGroupView/users/list.jsp > =================================================================== > --- opennms-webapp/src/main/webapp/admin/userGroupView/users/list.jsp > (.../external/current) (revision 47) > +++ opennms-webapp/src/main/webapp/admin/userGroupView/users/list.jsp > (.../trunk) (revision 47) > @@ -148,6 +148,7 @@ > <td width="15%"><b>Email</b></td> > <td width="15%"><b>Pager Email</b></td> > <td width="15%"><b>XMPP Address</b></td> > + <td width="10%"><b>Timezone</b></td> > <!-- > <td width="10%"><b>Num Service</b></td> > <td width="10%"><b>Num Pin</b></td> > @@ -196,9 +197,9 @@ > <td width="15%"> > <div id="<%= "users("+curUser.getUserId()+").fullName" %>"> > <% if(curUser.getFullName() != null){ %> > - <%= (curUser.getFullName().equals("") ? " " : > curUser.getFullName()) %> > - <% } %> > - </div> > + <%= (curUser.getFullName().equals("") ? " " : > curUser.getFullName()) %> > + <% } %> > + </div> > </td> > <td width="15%"> > <div id="<%= "users("+curUser.getUserId()+").email" %>"> > @@ -210,11 +211,18 @@ > <%= ((pagerEmail == null || pagerEmail.equals("")) ? " " > : pagerEmail) %> > </div> > </td> > - <td width="15"> > + <td width="15%"> > <div id="<%= "users("+curUser.getUserId()+").xmppAddress" %>"> > <%= ((xmppAddress == null || xmppAddress.equals("")) ? > " " : xmppAddress) %> > </div> > </td> > + <td width="10%"> > + <div id="<%= "users("+curUser.getUserId()+").userTimezone" > %>"> > + <% if(curUser.getUserTimezone() != null){ %> > + <%= (curUser.getUserTimezone().equals("") ? " " : > curUser.getUserTimezone()) %> > + <% } %> > + </div> > + </td> > <!-- > <td width="10%"> > <div id="<%= "users("+curUser.getUserId()+").numericService" > %>"> > @@ -239,13 +247,12 @@ > --> > </tr> > <tr bgcolor=<%=row%2==0 ? "#ffffff" : "#cccccc"%>> > - <td colspan="5"> > + <td colspan="6"> > <div id="<%= "users("+curUser.getUserId()+").userComments" > %>"> > - <% if(curUser.getUserComments() != null){ %> > - <%= (curUser.getUserComments().equals("") ? "No > Comments" : curUser.getUserComments()) %> > - > - <% } %> > - </div> > + <% if(curUser.getUserComments() != null){ %> > + <%= (curUser.getUserComments().equals("") ? "No Comments" : > curUser.getUserComments()) %> > + <% } %> > + </div> > </td> > </tr> > <% row++; > Index: opennms-webapp/src/main/webapp/account/selfService/newTimezone.jsp > =================================================================== > --- opennms-webapp/src/main/webapp/account/selfService/newTimezone.jsp > (.../external/current) (revision 0) > +++ opennms-webapp/src/main/webapp/account/selfService/newTimezone.jsp > (.../trunk) (revision 47) > @@ -0,0 +1,111 @@ > +<%-- > + > +// > +// This file is part of the OpenNMS(R) Application. > +// > +// OpenNMS(R) is Copyright (C) 2002-2007 The OpenNMS Group, Inc. All > rights reserved. > +// OpenNMS(R) is a derivative work, containing both original code, > included code and modified > +// code that was published under the GNU General Public License. > Copyrights for modified > +// and included code are below. > +// > +// OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc. > +// > +// Copyright (C) 2008 8x8 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; either version 2 of the License, or > +// (at your option) any later version. > +// > +// 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, > USA. > +// > +// For more information contact: > +// OpenNMS Licensing <[email protected]> > +// http://www.opennms.org/ > +// http://www.opennms.com/ > +// > + > +--%> > + > +<%@page language="java" > + contentType="text/html" > + session="true" > + import="org.opennms.netmgt.config.*, > + java.util.*, > + org.opennms.netmgt.config.users.* > + " > +%> > + > +<% > + > + HttpSession userSession = request.getSession(false); > + String timezone = null; > + try { > + if (userSession != null) { > + User user = (User) userSession.getAttribute(" > user.newTimezone.jsp"); > + if (user != null) { > + timezone = user.getUserTimezone(); > + } > + } > + } catch (Exception e) { > + throw new ServletException("An Error occurred reading the > users file", e); > + } > +%> > + > +<jsp:include page="/includes/header.jsp" flush="false" > > + <jsp:param name="title" value="Change Timezone" /> > + <jsp:param name="headTitle" value="Change Timezone" /> > + <jsp:param name="breadcrumb" value="<a > href='account/selfService/index.jsp'>Self-Service</a>" /> > + <jsp:param name="breadcrumb" value="Change Timezone" /> > +</jsp:include> > + > +<script language="JavaScript"> > + function updateTZ() > + { > + document.newTimezoneForm.newTimezone.value=document.goForm.tz.value; > + document.newTimezoneForm.action= > "account/selfService/newTimezoneAction"; > + document.newTimezoneForm.submit(); > + > + window.close(); > + } > +</script> > + > +<% if ("redo".equals(request.getParameter("action"))) { %> > +<h3>Please enter the new timezone.</h3> > +<% } %> > + > +<br/> > +<form method="post" name="newTimezoneForm"> > + <input type="hidden" name="newTimezone" value=""> > +</form> > +<form method="post" name="goForm"> > + > +<table> > + <tr> > + <td width="10%"> > + Timezone: > + </td> > + <td width="100%"> > + <input type="text" size="35" name="tz" value="<%=(timezone == null > ? "": timezone) %>" /> > + (java timezone) > + </td> > + </tr> > + > + <tr> > + <td> > + <input type="button" value="OK" onClick="updateTZ()"> > + </td> > + <td> > + </tr> > + > +</table> > +</form> > + > +<jsp:include page="/includes/footer.jsp" flush="false" /> > Index: > opennms-webapp/src/main/webapp/account/selfService/timezoneChanged.jsp > =================================================================== > --- opennms-webapp/src/main/webapp/account/selfService/timezoneChanged.jsp > (.../external/current) (revision 0) > +++ opennms-webapp/src/main/webapp/account/selfService/timezoneChanged.jsp > (.../trunk) (revision 47) > @@ -0,0 +1,55 @@ > +<%-- > + > +// > +// This file is part of the OpenNMS(R) Application. > +// > +// OpenNMS(R) is Copyright (C) 2002-2007 The OpenNMS Group, Inc. All > rights reserved. > +// OpenNMS(R) is a derivative work, containing both original code, > included code and modified > +// code that was published under the GNU General Public License. > Copyrights for modified > +// and included code are below. > +// > +// OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc. > +// > +// Copyright (C) 8x8 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; either version 2 of the License, or > +// (at your option) any later version. > +// > +// 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, > USA. > +// > +// For more information contact: > +// OpenNMS Licensing <[email protected]> > +// http://www.opennms.org/ > +// http://www.opennms.com/ > +// > + > +--%> > + > +<%@page language="java" > + contentType="text/html" > + session="true" > + import="org.opennms.netmgt.config.*, > + java.util.*, > + org.opennms.netmgt.config.users.* > + " > +%> > +<jsp:include page="/includes/header.jsp" flush="false" > > + <jsp:param name="title" value="Timezone Changed" /> > + <jsp:param name="headTitle" value="Timezone Changed" /> > + <jsp:param name="breadcrumb" value="<a > href='account/selfService/index.jsp'>Self-Service</a>" /> > + <jsp:param name="breadcrumb" value="Timezone Changed" /> > +</jsp:include> > + > +<h3>Timezone successfully changed.</h3> > + > +<jsp:include page="/includes/footer.jsp" flush="false" /> > + > Index: opennms-webapp/src/main/webapp/account/selfService/index.jsp > =================================================================== > --- opennms-webapp/src/main/webapp/account/selfService/index.jsp > (.../external/current) (revision 47) > +++ opennms-webapp/src/main/webapp/account/selfService/index.jsp > (.../trunk) (revision 47) > @@ -54,6 +54,12 @@ > document.selfServiceForm.action = > "account/selfService/newPasswordEntry"; > document.selfServiceForm.submit(); > } > + > + function changeTimezone() { > + document.selfServiceForm.action = > "account/selfService/newTimezoneEntry"; > + document.selfServiceForm.submit(); > + } > + > </script> > > <div class="TwoColLeft"> > @@ -61,6 +67,7 @@ > <div class="boxWrapper"> > <ul class="plain"> > <li><a href="javascript:changePassword()">Change Password</a></li> > + <li><a href="javascript:changeTimezone()">Change > Timezone</a></li> > </ul> > </div> > </div> > > ------------------------------------------------------------------------- > This SF.net email is sponsored by: Microsoft > Defy all challenges. Microsoft(R) Visual Studio 2008. > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ > _______________________________________________ > Please read the OpenNMS Mailing List FAQ: > http://www.opennms.org/index.php/Mailing_List_FAQ > > opennms-devel mailing list > > To *unsubscribe* or change your subscription options, see the bottom of > this page: > https://lists.sourceforge.net/lists/listinfo/opennms-devel > -- Aaron J. Paxson --------- [email protected] http://aaron.thepaxson5.org ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ _______________________________________________ Please read the OpenNMS Mailing List FAQ: http://www.opennms.org/index.php/Mailing_List_FAQ opennms-devel mailing list To *unsubscribe* or change your subscription options, see the bottom of this page: https://lists.sourceforge.net/lists/listinfo/opennms-devel