/*
* 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.util;
import javax.servlet.http.HttpSession;
import javax.servlet.jsp.PageContext;
/**
* Utilities class that provides convenience methods for taglib classes.
*/
public class TaglibUtils {
/**
* Set the value of the variable in the given scope with the given name as the given object. If the scope is
* specified as <code>null</code>, the variable will be set in the page scope.
*
* @param pageContext the page context
* @param scope the scope of the variable ("application", "session", "request", or "page")
* @param var the name of the variable
* @param value the value of the variable
*/
public static void setScopedVariable(PageContext pageContext, String scope, String var, Object value) {
if (scope == null) {
scope = " page";
}
if (scope.equalsIgnoreCase("application")) {
pageContext.getServletContext().setAttribute(var, value);
} else if (scope.equalsIgnoreCase("session")) {
HttpSession session = pageContext.getSession();
if (session != null) {
session.setAttribute(var, value);
}
} else if (scope.equalsIgnoreCase("request")) {
pageContext.getRequest().setAttribute(var, value);
} else {
pageContext.setAttribute(var, value);
}
}
/**
* @param preChars The maximum number of chars to appear before the "..."
* @param postChars The maximum number of chars to appear after the "..."
*
* @return The path, shortened by putting "..." in the middle
*/
public static String shortenPath(String path, int preChars, int postChars, boolean strict) {
if (!strict) {
return shortenPath(path, preChars, postChars);
}
// If path is shorter than preChars + postChars + 3 ellipses, then
// just return the original
if (path.length() <= (preChars + postChars + 3)) {
return path;
}
StringBuffer ret = new StringBuffer(path.substring(0, preChars)).append("...").append(
path.substring(path.length() - postChars));
return ret.toString();
}
public static String shortenPath(String path, int preChars, int postChars) {
// Look for the first kind of slash to determine which kind this path uses.
int slash1 = path.indexOf("/");
int slash2 = path.indexOf("\\");
char slash;
// There must be some cleaner, simpler logic here.
if (slash1 == -1) {
if (slash2 == -1) {
return path;
}
slash = '\\';
} else {
if (slash2 == -1) {
slash = '/';
} else if (slash1 < slash2) {
slash = '/';
} else {
slash = '\\';
}
}
// Easy cases
try {
if (path.length() <= (preChars + postChars)) {
return path;
}
slash1 = path.substring(0, preChars).lastIndexOf(slash);
if (slash1 == -1) {
slash1 = path.indexOf(slash);
}
if (slash1 == -1) {
return path;
}
String prefix = path.substring(0, slash1 + 1);
if (postChars > path.length()) {
postChars = path.length();
}
slash2 = path.substring(path.length() - postChars).indexOf(slash);
if (slash2 == -1) {
postChars = path.length();
slash2 = path.lastIndexOf(slash);
}
if ((slash2 == -1) || (slash2 == slash1)) {
return path;
}
String suffix = path.substring(path.length() - postChars).substring(slash2);
return prefix + "..." + suffix;
} catch (StringIndexOutOfBoundsException e) {
System.err.println("SBE on shortenPath(" + path + "," + preChars + "," + postChars + ")");
throw e;
}
}
}