/*
* Copyright 2004, 2005, 2006 Odysseus Software GmbH
*
* Licensed 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 de.odysseus.calyxo.base.misc;
import java.lang.reflect.Array;
import java.util.Collection;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Map;
import java.util.StringTokenizer;
import javax.servlet.jsp.JspTagException;
/**
* JSTL Functions.
* This class is a customized version of the <code>Functions</code>
* class that comes with Apache JSTL 1.1.1. Dependencies to other
* utitlity classes have been removed.
*
* @author Pierre Delisle
* @author Christoph Beck
*/
public class StandardFunctions {
//*********************************************************************
// String capitalization
/**
* Converts all of the characters of the input string to upper case.
*/
public static String toUpperCase(String input) {
return input.toUpperCase();
}
/**
* Converts all of the characters of the input string to lower case.
*/
public static String toLowerCase(String input) {
return input.toLowerCase();
}
//*********************************************************************
// Substring processing
public static int indexOf(String input, String substring) {
if (input == null) input = "";
if (substring == null) substring = "";
return input.indexOf(substring);
}
public static boolean contains(String input, String substring) {
return indexOf(input, substring) != -1;
}
public static boolean containsIgnoreCase(String input, String substring) {
if (input == null) input = "";
if (substring == null) substring = "";
String inputUC = input.toUpperCase();
String substringUC = substring.toUpperCase();
return indexOf(inputUC, substringUC) != -1;
}
public static boolean startsWith(String input, String substring) {
if (input == null) input = "";
if (substring == null) substring = "";
return input.startsWith(substring);
}
public static boolean endsWith(String input, String substring) {
if (input == null) input = "";
if (substring == null) substring = "";
int index = input.indexOf(substring);
if (index == -1) return false;
if (index == 0 && substring.length() == 0) return true;
return (index == input.length() - substring.length());
}
public static String substring(String input, int beginIndex, int endIndex) {
if (input == null) input = "";
if (beginIndex >= input.length()) return "";
if (beginIndex < 0) beginIndex = 0;
if (endIndex < 0 || endIndex > input.length()) endIndex = input.length();
if (endIndex < beginIndex) return "";
return input.substring(beginIndex, endIndex);
}
public static String substringAfter(String input, String substring) {
if (input == null) input = "";
if (input.length() == 0) return "";
if (substring == null) substring = "";
if (substring.length() == 0) return input;
int index = input.indexOf(substring);
if (index == -1) {
return "";
} else {
return input.substring(index+substring.length());
}
}
public static String substringBefore(String input, String substring) {
if (input == null) input = "";
if (input.length() == 0) return "";
if (substring == null) substring = "";
if (substring.length() == 0) return "";
int index = input.indexOf(substring);
if (index == -1) {
return "";
} else {
return input.substring(0, index);
}
}
//*********************************************************************
// Character replacement
public static String escapeXml(String input) {
if (input == null)
return "";
char chars[] = new char[input.length()];
input.getChars(0, input.length(), chars, 0);
StringBuffer result = new StringBuffer(chars.length + 20);
for (int i = 0; i < chars.length; i++) {
switch (chars[i]) {
case '<':
result.append("<");
break;
case '>':
result.append(">");
break;
case '&':
result.append("&");
break;
case '"':
result.append(""");
break;
case '\\':
result.append("'");
break;
default:
result.append(chars[i]);
}
}
return result.toString();
}
public static String trim(String input) {
if (input == null) return "";
return input.trim();
}
public static String replace(
String input,
String substringBefore,
String substringAfter)
{
if (input == null) input = "";
if (input.length() == 0) return "";
if (substringBefore == null) substringBefore = "";
if (substringBefore.length() == 0) return input;
StringBuffer buf = new StringBuffer(input.length());
int startIndex = 0;
int index;
while ((index = input.indexOf(substringBefore, startIndex)) != -1) {
buf.append(input.substring(startIndex, index)).append(substringAfter);
startIndex = index + substringBefore.length();
}
return buf.append(input.substring(startIndex)).toString();
}
public static String[] split(
String input,
String delimiters)
{
String[] array;
if (input == null) input = "";
if (input.length() == 0) {
array = new String[1];
array[0] = "";
return array;
}
if (delimiters == null) delimiters = "";
StringTokenizer tok = new StringTokenizer(input, delimiters);
int count = tok.countTokens();
array = new String[count];
int i = 0;
while (tok.hasMoreTokens()) {
array[i++] = tok.nextToken();
}
return array;
}
//*********************************************************************
// Collections processing
public static int length(Object obj) throws JspTagException {
if (obj == null) return 0;
if (obj instanceof String) return ((String)obj).length();
if (obj instanceof Collection) return ((Collection)obj).size();
if (obj instanceof Map) return ((Map)obj).size();
int count = 0;
if (obj instanceof Iterator) {
Iterator iter = (Iterator)obj;
count = 0;
while (iter.hasNext()) {
count++;
iter.next();
}
return count;
}
if (obj instanceof Enumeration) {
Enumeration enumeration = (Enumeration)obj;
count = 0;
while (enumeration.hasMoreElements()) {
count++;
enumeration.nextElement();
}
return count;
}
try {
count = Array.getLength(obj);
return count;
} catch (IllegalArgumentException ex) {}
throw new JspTagException("Don't know how to iterate over supplied items in <forEach>");
}
public static String join(String[] array, String separator) {
if (array == null) return "";
if (separator == null) separator = "";
StringBuffer buf = new StringBuffer();
for (int i=0; i<array.length; i++) {
buf.append(array[i]);
if (i < array.length-1) buf.append(separator);
}
return buf.toString();
}
}