001    /**
002     * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
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    /**
034     * @author Brian Wing Shun Chan
035     */
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    }