001
014
015 package com.liferay.taglib.ui;
016
017 import com.liferay.portal.kernel.language.LanguageUtil;
018 import com.liferay.portal.kernel.language.UnicodeLanguageUtil;
019 import com.liferay.portal.kernel.util.GetterUtil;
020 import com.liferay.portal.kernel.util.HtmlUtil;
021 import com.liferay.portal.kernel.util.ServerDetector;
022 import com.liferay.portal.kernel.util.StringPool;
023 import com.liferay.portal.kernel.util.Validator;
024 import com.liferay.portal.kernel.util.WebKeys;
025
026 import java.util.ResourceBundle;
027
028 import javax.servlet.http.HttpServletRequest;
029 import javax.servlet.jsp.JspException;
030 import javax.servlet.jsp.JspWriter;
031 import javax.servlet.jsp.tagext.TagSupport;
032
033
036 public class MessageTag extends TagSupport {
037
038 @Override
039 public int doEndTag() throws JspException {
040 try {
041 String value = StringPool.BLANK;
042
043 HttpServletRequest request =
044 (HttpServletRequest)pageContext.getRequest();
045
046 boolean unicode = GetterUtil.getBoolean(
047 request.getAttribute(WebKeys.JAVASCRIPT_CONTEXT));
048
049 if (unicode) {
050 _unicode = unicode;
051 }
052
053 if (_arguments == null) {
054 if (!_localizeKey) {
055 value = _key;
056 }
057 else if (_escape) {
058 if (_resourceBundle != null) {
059 value = HtmlUtil.escape(
060 LanguageUtil.get(_resourceBundle, _key));
061 }
062 else {
063 value = HtmlUtil.escape(
064 LanguageUtil.get(request, _key));
065 }
066 }
067 else if (_escapeAttribute) {
068 if (_resourceBundle != null) {
069 value = HtmlUtil.escapeAttribute(
070 LanguageUtil.get(_resourceBundle, _key));
071 }
072 else {
073 value = HtmlUtil.escapeAttribute(
074 LanguageUtil.get(request, _key));
075 }
076 }
077 else if (_unicode) {
078 if (_resourceBundle != null) {
079 value = UnicodeLanguageUtil.get(_resourceBundle, _key);
080 }
081 else {
082 value = UnicodeLanguageUtil.get(request, _key);
083 }
084 }
085 else {
086 if (_resourceBundle != null) {
087 value = LanguageUtil.get(_resourceBundle, _key);
088 }
089 else {
090 value = LanguageUtil.get(request, _key);
091 }
092 }
093 }
094 else {
095 if (_unicode) {
096 if (_resourceBundle != null) {
097 value = UnicodeLanguageUtil.format(
098 _resourceBundle, _key, _arguments,
099 _translateArguments);
100 }
101 else {
102 value = UnicodeLanguageUtil.format(
103 request, _key, _arguments, _translateArguments);
104 }
105 }
106 else {
107 if (_resourceBundle != null) {
108 value = LanguageUtil.format(
109 _resourceBundle, _key, _arguments,
110 _translateArguments);
111 }
112 else {
113 value = LanguageUtil.format(
114 request, _key, _arguments, _translateArguments);
115 }
116 }
117 }
118
119 if (Validator.isNotNull(value)) {
120 JspWriter jspWriter = pageContext.getOut();
121
122 jspWriter.write(value);
123 }
124
125 return EVAL_PAGE;
126 }
127 catch (Exception e) {
128 throw new JspException(e);
129 }
130 finally {
131 if (!ServerDetector.isResin()) {
132 _arguments = null;
133 _escape = false;
134 _escapeAttribute = false;
135 _key = null;
136 _localizeKey = true;
137 _resourceBundle = null;
138 _translateArguments = true;
139 _unicode = false;
140 }
141 }
142 }
143
144 public void setArguments(Object argument) {
145 if (argument == null) {
146 _arguments = null;
147
148 return;
149 }
150
151 Class<?> clazz = argument.getClass();
152
153 if (clazz.isArray()) {
154 _arguments = (Object[])argument;
155 }
156 else {
157 _arguments = new Object[] {argument};
158 }
159 }
160
161 public void setEscape(boolean escape) {
162 _escape = escape;
163 }
164
165 public void setEscapeAttribute(boolean escapeAttribute) {
166 _escapeAttribute = escapeAttribute;
167 }
168
169 public void setKey(String key) {
170 _key = key;
171 }
172
173 public void setLocalizeKey(boolean localizeKey) {
174 _localizeKey = localizeKey;
175 }
176
177 public void setResourceBundle(ResourceBundle resourceBundle) {
178 _resourceBundle = resourceBundle;
179 }
180
181 public void setTranslateArguments(boolean translateArguments) {
182 _translateArguments = translateArguments;
183 }
184
185 public void setUnicode(boolean unicode) {
186 _unicode = unicode;
187 }
188
189 private Object[] _arguments;
190 private boolean _escape;
191 private boolean _escapeAttribute;
192 private String _key;
193 private boolean _localizeKey = true;
194 private ResourceBundle _resourceBundle;
195 private boolean _translateArguments = true;
196 private boolean _unicode;
197
198 }