/*
 * Created by IntelliJ IDEA.
 * User: bungle
 * Date: 11.10.2002
 * Time: 16:44:33
 * To change template for new class use 
 * Code Style | Class Templates options (Tools | IDE Options).
 */
package com.projectcast.web.tools.velocity;

import org.apache.velocity.context.Context;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.opensymphony.util.TextUtils;
import webwork.action.ActionContext;
import webwork.util.ValueStack;
import webwork.util.BeanUtil;

import java.util.ResourceBundle;
import java.io.UnsupportedEncodingException;

public class Text implements Tool {

    private Log log = LogFactory.getLog(this.getClass());

    private Context context;

    public String br(String text) {
        return TextUtils.br(text);
    }

    public String htmlEncode(String text) {
        return TextUtils.htmlEncode(text);
    }

    public String urlEncode(String text) {
        try {
            return java.net.URLEncoder.encode(text, "UTF-8");
        } catch (UnsupportedEncodingException e) {
            return text;
        }
    }

    public String hyperlink(String text) {
        return TextUtils.hyperlink(text);
    }

    public String linkEmail(String text) {
        return TextUtils.linkEmail(text);
    }

    public String linkURL(String text) {
        return TextUtils.linkURL(text);
    }

    public String noNull(String text) {
        return TextUtils.noNull(text);
    }

    public String noNull(String text, String defaultString) {
        return TextUtils.noNull(text, defaultString);
    }

    public String toHtml(String text) {
        return TextUtils.plainTextToHtml(text);
    }

    public String capitalise(String text) {
        return StringUtils.capitalise(text);
    }

    public String capitaliseAllWords(String text) {
        return StringUtils.capitaliseAllWords(text);
    }

    public String strip(String text) {
        return StringUtils.strip(text);
    }

    public String trim(String text) {
        return StringUtils.trim(text);
    }

    public String innerTrim(String text) {
        return TextUtils.innerTrim(text);
    }

    public String deleteWhiteSpace(String text) {
        return StringUtils.deleteWhitespace(text);
    }

    public String quote(String text) {
        return  "\"".concat(text).concat("\"");
    }

    public String translate(String text) {

        ActionContext.getContext().getResponse().setLocale(ActionContext.getContext().getRequest().getLocale());

        Object o = ValueStack.getStack(ActionContext.getContext().getRequest()).findValue("text('" + text + "')");

        if (o == null) {
            return text;
        }

        return BeanUtil.toStringValue(o);
    }

    public String translate(String text, String action) {

        ResourceBundle bundle = (ResourceBundle)ValueStack.getStack(ActionContext.getContext().getRequest()).findValue("texts('" + action + "')");

        if (bundle == null) {
            return text;
        }

        return bundle.getString(text);
    }

    public String htmlRender(String text) {
        return strip(br(htmlEncode(text)));
    }

    public String htmlRenderTitle(String text) {
        return translate(strip(br(htmlEncode(text))));
    }

    public void setContext(Context context) {
        this.context = context;
    }
}
