Open Source Repository

Home /jodd/jodd-3.3.2 | Repository Home



jodd/servlet/jspfn/JoddJspFunctions.java
// Copyright (c) 2003-2012, Jodd Team (jodd.org). All Rights Reserved.

package jodd.servlet.jspfn;

import jodd.datetime.JDateTime;
import jodd.servlet.HtmlEncoder;
import jodd.servlet.JspValueResolver;
import jodd.servlet.PageContextThreadLocal;
import jodd.servlet.ServletUtil;
import jodd.util.StringPool;
import jodd.util.StringUtil;
import jodd.util.ObjectUtil;
import static jodd.util.StringPool.EMPTY;

import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.JspTagException;

/**
 * Nice big set of JSP functions. Mainly delegates to other utilities,
 * just performs some user-input checking.
 */
public class JoddJspFunctions {

  public static String text(Object object) {
    if (object == null) {
      return StringPool.EMPTY;
    }
    return HtmlEncoder.text(object.toString());
  }

  public static String valueEnc(String name, PageContext pageContext) {
    return text(JspValueResolver.resolveValue(name, pageContext));
  }

  public static String valueEnc(String name) {
    return valueEnc(name, PageContextThreadLocal.get());
  }

  public static String attributeEnc(String name, PageContext pageContext) {
    return text(JspValueResolver.resolveAttribute(name, pageContext));
  }

  public static String attributeEnc(String name) {
    return attributeEnc(name, PageContextThreadLocal.get());
  }

  public static String propertyEnc(String name, PageContext pageContext) {
    return text(JspValueResolver.resolveProperty(name, pageContext));
  }

  public static String propertyEnc(String name) {
    return propertyEnc(name, PageContextThreadLocal.get());
  }

  /**
   * Returns default value if provided value is <code>null</code>.
   */
  public static Object defaultValue(Object value, Object defaultValue) {
    if (value == null) {
      return defaultValue;
    }
    return value;
  }

  /**
   * Returns default string if value is <code>null</code> or empty.
   */
  public static String defaultString(String value, String defaultValue) {
    if (value == null) {
      return defaultValue;
    }
    if (StringUtil.isEmpty(value)) {
      return defaultValue;
    }
    return value;
  }


  // ---------------------------------------------------------------- string manipulation

  /**
   * Joins strings.
   */
  public static String join(String[] array, String separator) {
    if (array == null) {
      return EMPTY;
    }
    if (separator == null) {
      separator = EMPTY;
    }
    StringBuilder result = new StringBuilder();
    for (int i = 0; i < array.length; i++) {
      if (i > 0) {
        result.append(separator);
      }
      String value = array[i];
      result.append(value != null ? value : EMPTY);
    }
    return result.toString();
  }

  public static String join2(String one, String two) {
    if (one == null) {
      one = EMPTY;
    }
    if (two == null) {
      return one;
    }
    return one + two;
  }

  /**
   * Converts all of the characters of the input string to upper case.
   */
  public static String toUpperCase(String input) {
    if (input == null) {
      return EMPTY;
    }
    return input.toUpperCase();
  }

  /**
   * Converts all of the characters of the input string to lower case.
   */
  public static String toLowerCase(String input) {
    if (input == null) {
      return EMPTY;
    }
    return input.toLowerCase();
  }

  public static String capitalize(String input) {
    if (input == null) {
      return EMPTY;
    }
    return StringUtil.capitalize(input);
  }

  public static String uncapitalize(String input) {
    if (input == null) {
      return EMPTY;
    }
    return StringUtil.uncapitalize(input);
  }

  public static String trim(String input) {
    if (input == null) {
      return EMPTY;
    }
    return input.trim();
  }

  public static String replace(String input, String substringBefore, String substringAfter) {
    if (input == null) {
      input = EMPTY;
    }
    if (input.length() == 0) {
      return EMPTY;
    }
    if (substringBefore == null) {
      substringBefore = EMPTY;
    }
    if (substringBefore.length() == 0) {
      return input;
    }
    return StringUtil.replace(input, substringBefore, substringAfter);
  }

  // ---------------------------------------------------------------- substrings

  public static int indexOf(String input, String substring) {
    if (input == null) {
      input = EMPTY;
    }
    if (substring == null) {
      substring = EMPTY;
    }
    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 = EMPTY;
    }
    if (substring == null) {
      substring = EMPTY;
    }
    return StringUtil.indexOfIgnoreCase(input, substring!= -1;
  }

  public static boolean startsWith(String input, String substring) {
    if (input == null) {
      input = EMPTY;
    }
    if (substring == null) {
      substring = EMPTY;
    }
    return input.startsWith(substring);
  }

  public static boolean startsWithIgnoreCase(String input, String substring) {
    if (input == null) {
      input = EMPTY;
    }
    if (substring == null) {
      substring = EMPTY;
    }
    return StringUtil.startsWithIgnoreCase(input, substring);
  }

  public static boolean endsWith(String input, String substring) {
    if (input == null) {
      input = EMPTY;
    }
    if (substring == null) {
      substring = EMPTY;
    }
    return input.endsWith(substring);
  }

  public static boolean endsWithIgnoreCase(String input, String substring) {
    if (input == null) {
      input = EMPTY;
    }
    if (substring == null) {
      substring = EMPTY;
    }
    return StringUtil.endsWithIgnoreCase(input, substring);
  }



  public static String substring(String input, int beginIndex, int endIndex) {
    if (input == null) {
      input = EMPTY;
    }
    if (beginIndex >= input.length()) {
      return EMPTY;
    }
    if (beginIndex < 0) {
      beginIndex = 0;
    }
    if (endIndex < || endIndex > input.length()) {
      endIndex = input.length();
    }
    if (endIndex < beginIndex) {
      return EMPTY;
    }
    return input.substring(beginIndex, endIndex);
  }

  public static String substringAfter(String input, String substring) {
    if (input == null) {
      input = EMPTY;
    }
    if (input.length() == 0) {
      return EMPTY;
    }
    if (substring == null) {
      substring = EMPTY;
    }
    if (substring.length() == 0) {
      return input;
    }

    int index = input.indexOf(substring);
    if (index == -1) {
      return EMPTY;
    else {
      return input.substring(index + substring.length());
    }
  }

  public static String substringBefore(String input, String substring) {
    if (input == null) {
      input = EMPTY;
    }
    if (input.length() == 0) {
      return EMPTY;
    }
    if (substring == null) {
      substring = EMPTY;
    }
    if (substring.length() == 0) {
      return EMPTY;
    }

    int index = input.indexOf(substring);
    if (index == -1) {
      return EMPTY;
    else {
      return input.substring(0, index);
    }
  }

  // ---------------------------------------------------------------- collections

  /**
   * Returns the length of provided object (collection, array and so on).
   * If object doesn't have a length, exception is thrown.
   */
  public static int length(Object objthrows JspTagException {
    int result = ObjectUtil.length(obj);
    if (result == -1) {
      throw new JspTagException("Provided object does not have length.");
    }
    return result;
  }

  public static boolean containsElement(Object obj, Object element) {
    return ObjectUtil.containsElement(obj, element);
  }

  // ---------------------------------------------------------------- test

  /**
   * Tests condition and returns <code>true</code> of <code>false</code> value.
   * Works like ternary operator.
   */
  public static Object test(boolean condition, Object trueValue, Object falseValue) {
    return condition ? trueValue : falseValue;
  }


  // ---------------------------------------------------------------- datetime

  /**
   * Formats jdatetime.
   */
  public static String fmtTime(JDateTime jdt, String format) {
    return jdt.toString(format);
  }


  // ---------------------------------------------------------------- ctx

  /**
   * Stores current context path in page context scope.
   */
  public static void setContextPathVariable(PageContext pageContext, String scope, String contextPathVariableName) {
    String ctxPath = ServletUtil.getContextPath(pageContext);
    ServletUtil.setScopeAttribute(contextPathVariableName, ctxPath, scope, pageContext);
  }

}