| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.apache.catalina.manager; |
| |
| import java.text.DateFormat; |
| import java.text.NumberFormat; |
| import java.text.SimpleDateFormat; |
| import java.util.Date; |
| import java.util.Locale; |
| |
| import org.apache.catalina.Session; |
| import org.apache.catalina.manager.util.SessionUtils; |
| import org.apache.tomcat.util.security.Escape; |
| |
| |
| /** |
| * Helper JavaBean for JSPs, because JSTL 1.1/EL 2.0 is too dumb to do what I need (call methods with parameters), or I |
| * am too dumb to use it correctly. :) |
| */ |
| public class JspHelper { |
| |
| private static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; |
| |
| /** |
| * Public constructor, so that this class can be considered a JavaBean |
| */ |
| private JspHelper() { |
| super(); |
| } |
| |
| /** |
| * Try to get user locale from the session, if possible. |
| * <p> |
| * IMPLEMENTATION NOTE: this method has explicit support for Tapestry 3 and Struts 1.x |
| * |
| * @param in_session Session from which the locale should be guessed |
| * |
| * @return String |
| */ |
| public static String guessDisplayLocaleFromSession(Session in_session) { |
| return localeToString(SessionUtils.guessLocaleFromSession(in_session)); |
| } |
| |
| private static String localeToString(Locale locale) { |
| if (locale != null) { |
| return escapeXml(locale.toString()); // locale.getDisplayName(); |
| } else { |
| return ""; |
| } |
| } |
| |
| /** |
| * Try to get username from the session, if possible. |
| * |
| * @param in_session The Servlet session |
| * |
| * @return the username |
| */ |
| public static String guessDisplayUserFromSession(Session in_session) { |
| Object user = SessionUtils.guessUserFromSession(in_session); |
| return escapeXml(user); |
| } |
| |
| |
| public static String getDisplayCreationTimeForSession(Session in_session) { |
| try { |
| if (in_session.getCreationTime() == 0) { |
| return ""; |
| } |
| DateFormat formatter = new SimpleDateFormat(DATE_TIME_FORMAT); |
| return formatter.format(new Date(in_session.getCreationTime())); |
| } catch (IllegalStateException ise) { |
| // ignore: invalidated session |
| return ""; |
| } |
| } |
| |
| public static String getDisplayLastAccessedTimeForSession(Session in_session) { |
| try { |
| if (in_session.getLastAccessedTime() == 0) { |
| return ""; |
| } |
| DateFormat formatter = new SimpleDateFormat(DATE_TIME_FORMAT); |
| return formatter.format(new Date(in_session.getLastAccessedTime())); |
| } catch (IllegalStateException ise) { |
| // ignore: invalidated session |
| return ""; |
| } |
| } |
| |
| public static String getDisplayUsedTimeForSession(Session in_session) { |
| try { |
| if (in_session.getCreationTime() == 0) { |
| return ""; |
| } |
| } catch (IllegalStateException ise) { |
| // ignore: invalidated session |
| return ""; |
| } |
| return secondsToTimeString(SessionUtils.getUsedTimeForSession(in_session) / 1000); |
| } |
| |
| public static String getDisplayTTLForSession(Session in_session) { |
| try { |
| if (in_session.getCreationTime() == 0) { |
| return ""; |
| } |
| } catch (IllegalStateException ise) { |
| // ignore: invalidated session |
| return ""; |
| } |
| return secondsToTimeString(SessionUtils.getTTLForSession(in_session) / 1000); |
| } |
| |
| public static String getDisplayInactiveTimeForSession(Session in_session) { |
| try { |
| if (in_session.getCreationTime() == 0) { |
| return ""; |
| } |
| } catch (IllegalStateException ise) { |
| // ignore: invalidated session |
| return ""; |
| } |
| return secondsToTimeString(SessionUtils.getInactiveTimeForSession(in_session) / 1000); |
| } |
| |
| public static String secondsToTimeString(long in_seconds) { |
| StringBuilder buff = new StringBuilder(9); |
| if (in_seconds < 0) { |
| buff.append('-'); |
| in_seconds = -in_seconds; |
| } |
| long rest = in_seconds; |
| long hour = rest / 3600; |
| rest = rest % 3600; |
| long minute = rest / 60; |
| rest = rest % 60; |
| long second = rest; |
| if (hour < 10) { |
| buff.append('0'); |
| } |
| buff.append(hour); |
| buff.append(':'); |
| if (minute < 10) { |
| buff.append('0'); |
| } |
| buff.append(minute); |
| buff.append(':'); |
| if (second < 10) { |
| buff.append('0'); |
| } |
| buff.append(second); |
| return buff.toString(); |
| } |
| |
| |
| /* |
| * Following copied from org.apache.taglibs.standard.tag.common.core.Util v1.1.2 |
| */ |
| |
| private static final int HIGHEST_SPECIAL = '>'; |
| private static final char[][] specialCharactersRepresentation = new char[HIGHEST_SPECIAL + 1][]; |
| static { |
| specialCharactersRepresentation['&'] = "&".toCharArray(); |
| specialCharactersRepresentation['<'] = "<".toCharArray(); |
| specialCharactersRepresentation['>'] = ">".toCharArray(); |
| specialCharactersRepresentation['"'] = """.toCharArray(); |
| specialCharactersRepresentation['\''] = "'".toCharArray(); |
| } |
| |
| public static String escapeXml(Object obj) { |
| String value = null; |
| try { |
| value = obj == null ? null : obj.toString(); |
| } catch (Exception e) { |
| // Ignore |
| } |
| return escapeXml(value); |
| } |
| |
| /** |
| * Performs the following substring replacements (to facilitate output to XML/HTML pages): |
| * <ul> |
| * <li>& -> &amp;</li> |
| * <li>< -> &lt;</li> |
| * <li>> -> &gt;</li> |
| * <li>" -> &#034;</li> |
| * <li>' -> &#039;</li> |
| * </ul> |
| * |
| * @param buffer The XML to escape |
| * |
| * @return the escaped XML |
| */ |
| public static String escapeXml(String buffer) { |
| |
| if (buffer == null) { |
| return ""; |
| } |
| |
| return Escape.xml(buffer); |
| } |
| |
| public static String formatNumber(long number) { |
| return NumberFormat.getNumberInstance().format(number); |
| } |
| } |