TextTag.java

package sk.iway.iwcm.tags;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;

import org.apache.struts.util.ResponseUtils;

import sk.iway.iwcm.PageLng;
import sk.iway.iwcm.Tools;
import sk.iway.iwcm.i18n.IwayProperties;
import sk.iway.iwcm.i18n.Prop;


/**
 *  Tag pre vypis stringu z requestu v JSP stranke
 *
 *@Title        WebJET
 *@Company      Interway
 *@Copyright    Ľuboš Balát, Copyright (c) 2002
 *@author       jeeff
 *@version      1.0
 *@created      Piatok, 2002, február 22
 *@modified     $Date: 2010/01/20 11:15:08 $
 */
public class TextTag extends TagSupport
{
	private static final long serialVersionUID = 1955748610554165388L;

	public static final String PREFIX_KEY = "webjet.textTag.prefix";

	// Name of request attribute - required
	private String key = null;
	private String param1 = null;
	private String param2 = null;
	private String param3 = null;
	private String defaultText = null;
	private String lng = null;
	private boolean pluralize = false;
    private boolean jsEscape = false;

	@Override
	public void release()
	{
		super.release();
		key = null;
		param1 = null;
		param2 = null;
		param3 = null;
		defaultText = null;
		lng = null;
	}

	/**
	 *  Description of the Method
	 *
	 *@return                   Description of the Return Value
	 *@exception  JspException  Description of the Exception
	 */
	@Override
	public final int doEndTag() throws JspException
	{
		try
		{
			String text = key;
			HttpServletRequest request = (HttpServletRequest)pageContext.getRequest();
			String lng = "";
			if (this.lng!=null)
			{
				lng = this.lng;
			}
			else if (pageContext.getAttribute("lng")!=null)
			{
				lng = (String)pageContext.getAttribute("lng");
			}
			else if (request.getAttribute("PageLng")!=null)
			{
				lng = (String)request.getAttribute("PageLng");
			}
			else
			{
				lng = ResponseUtils.filter(request.getParameter("language"));
				if (lng!=null && lng.length()>3) lng = null;
				if (lng != null && request.getSession().getAttribute(Prop.SESSION_I18N_PROP_LNG)==null) request.getSession().setAttribute(Prop.SESSION_I18N_PROP_LNG, lng);
				if (lng==null)
				{
					lng = (String)request.getSession().getAttribute(Prop.SESSION_I18N_PROP_LNG);
				}
				if (lng == null)
				{
					lng = PageLng.getUserLng(request); // sk.iway.iwcm.Constants.getString("defaultLanguage");
				}
			}

			boolean needRefresh = false;
			if (request.getSession().getAttribute("userlngr")!=null)
			{
				//ak to mame v session, tak chceme pri kazdom zobrazeni stranky spravit refresh
				needRefresh = true;
			}
			if (request.getParameter("userlngr")!=null)
			{
				needRefresh = true;
			}
			if (pageContext.getAttribute("userlngr")!=null)
			{
				//pri zobrazeni tejto stranky sme uz jazyk refreshli, nema zmysel to robit znova
				needRefresh = false;
			}

			//Logger.println(this,"userlngr="+request.getParameter("userlngr"));

			Prop prop = null;
			if (needRefresh)
			{
				pageContext.setAttribute("userlngr", "refreshed");
				prop = Prop.getInstance(pageContext.getServletContext(), lng, true);
				if ("session".equals(request.getParameter("userlngr")))
				{
					//uloz si to do session, teraz sa bude refreshovat pri kazdom zobrazeni stranky
					request.getSession().setAttribute("userlngr", "session");
				}
			}
			else
			{
				prop = Prop.getInstance(pageContext.getServletContext(), lng, false);
			}

			if (pluralize)
			{
				IwayProperties iwayProperties = prop.getRes(lng);
				if (iwayProperties.containsKey(key+"."+param1))
				{
					key = key+"."+param1;
				} 
				else 
				{
					boolean keyFound = false;
					for (String lKey : iwayProperties.keySet())
					{
						if (lKey.startsWith(key) && (lKey.contains("."+param1+".") || lKey.endsWith("."+param1)))
						{
							key = lKey;
							keyFound = true;
							break;
						}
					}
					if (!keyFound)
					{
						key = key+".X";
					}
				}
				iwayProperties = null;
			}

			text = prop.getText(key, param1, param2, param3);

			String textTagPrefix = (String)pageContext.getRequest().getAttribute(PREFIX_KEY);
			if (Tools.isNotEmpty(textTagPrefix))
			{
				String prefixKey = textTagPrefix+"."+key;
				String textWithPrefix = prop.getText(prefixKey, param1, param2, param3);
				if (Tools.isNotEmpty(textWithPrefix) && prefixKey.equals(textWithPrefix)==false) text = textWithPrefix;
			}

			if (text.equals(key) && Tools.isNotEmpty(defaultText) && lng.equals("sk"))
			{
				text = defaultText;
			}

			if (jsEscape) text = JSEscapeTag.jsEscape(text);

			//text = prop.getText(key);
			if (text != null)
			{
				pageContext.getOut().write(text);
			}

		}
		catch (Exception e)
		{

		}
		return EVAL_PAGE;
	}

	public final void setKey(String key)
	{
		this.key = key;
	}

	public String getParam1()
	{
		return param1;
	}
	public void setParam1(String param1)
	{
		this.param1 = param1;
	}
	public String getParam2()
	{
		return param2;
	}
	public void setParam2(String param2)
	{
		this.param2 = param2;
	}
	public String getParam3()
	{
		return param3;
	}
	public void setParam3(String param3)
	{
		this.param3 = param3;
	}

	public String getDefaultText()
	{
		return defaultText;
	}

	public void setDefaultText(String defaultText)
	{
		this.defaultText = defaultText;
	}

	public String getLng() {
		return lng;
	}

	public void setLng(String lng) {
		this.lng = lng;
	}

	public void setPluralize(boolean pluralize) {
		this.pluralize = pluralize;
	}

    public boolean isJsEscape()
    {
        return jsEscape;
    }

    public void setJsEscape(boolean jsEscape)
    {
        this.jsEscape = jsEscape;
    }
}