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.aui;
016    
017    import com.liferay.portal.kernel.language.LanguageUtil;
018    import com.liferay.portal.kernel.util.GetterUtil;
019    import com.liferay.portal.kernel.util.HtmlUtil;
020    import com.liferay.portal.kernel.util.JavaConstants;
021    import com.liferay.portal.kernel.util.StringPool;
022    import com.liferay.portal.kernel.util.Validator;
023    import com.liferay.taglib.aui.base.BaseATag;
024    import com.liferay.taglib.util.InlineUtil;
025    
026    import java.io.IOException;
027    
028    import java.util.Map;
029    
030    import javax.portlet.PortletResponse;
031    
032    import javax.servlet.http.HttpServletRequest;
033    import javax.servlet.jsp.JspWriter;
034    
035    /**
036     * @author Julio Camarero
037     * @author Jorge Ferrer
038     * @author Brian Wing Shun Chan
039     * @author Shuyang Zhou
040     */
041    public class ATag extends BaseATag {
042    
043            protected boolean isOpensNewWindow() {
044                    String target = getTarget();
045    
046                    if ((target != null) &&
047                            (target.equals("_blank") || target.equals("_new"))) {
048    
049                            return true;
050                    }
051                    else {
052                            return false;
053                    }
054            }
055    
056            @Override
057            protected int processEndTag() throws Exception {
058                    JspWriter jspWriter = pageContext.getOut();
059    
060                    if (Validator.isNotNull(getHref())) {
061                            if (isOpensNewWindow()) {
062                                    jspWriter.write("<span class=\"opens-new-window-accessible\">");
063                                    jspWriter.write(LanguageUtil.get(request, "opens-new-window"));
064                                    jspWriter.write("</span>");
065                            }
066    
067                            jspWriter.write("</a>");
068                    }
069                    else {
070                            jspWriter.write("</span>");
071                    }
072    
073                    return EVAL_PAGE;
074            }
075    
076            @Override
077            protected int processStartTag() throws Exception {
078                    JspWriter jspWriter = pageContext.getOut();
079    
080                    String ariaRole = getAriaRole();
081                    String cssClass = getCssClass();
082                    Map<String, Object> data = getData();
083                    String href = getHref();
084                    String id = getId();
085                    String label = getLabel();
086                    String lang = getLang();
087                    Boolean localizeLabel = getLocalizeLabel();
088                    String namespace = _getNamespace();
089                    String onClick = getOnClick();
090                    String target = getTarget();
091                    String title = getTitle();
092    
093                    if (Validator.isNotNull(href)) {
094                            jspWriter.write("<a ");
095    
096                            jspWriter.write("href=\"");
097                            jspWriter.write(HtmlUtil.escapeAttribute(href));
098                            jspWriter.write("\" ");
099    
100                            if (Validator.isNotNull(target)) {
101                                    jspWriter.write("target=\"");
102                                    jspWriter.write(target);
103                                    jspWriter.write("\" ");
104                            }
105                    }
106                    else {
107                            jspWriter.write("<span ");
108                    }
109    
110                    if (Validator.isNotNull(cssClass)) {
111                            jspWriter.write("class=\"");
112                            jspWriter.write(cssClass);
113                            jspWriter.write("\" ");
114                    }
115    
116                    if (Validator.isNotNull(id)) {
117                            jspWriter.write("id=\"");
118                            jspWriter.write(namespace);
119                            jspWriter.write(id);
120                            jspWriter.write("\" ");
121                    }
122    
123                    if (Validator.isNotNull(lang)) {
124                            jspWriter.write("lang=\"");
125                            jspWriter.write(lang);
126                            jspWriter.write("\" ");
127                    }
128    
129                    if (Validator.isNotNull(onClick)) {
130                            jspWriter.write("onClick=\"");
131                            jspWriter.write(onClick);
132                            jspWriter.write("\" ");
133                    }
134    
135                    if (Validator.isNotNull(ariaRole)) {
136                            jspWriter.write("role=\"");
137                            jspWriter.write(ariaRole);
138                            jspWriter.write("\" ");
139                    }
140    
141                    if (Validator.isNotNull(title) || isOpensNewWindow()) {
142                            jspWriter.write("title=\"");
143    
144                            if (Validator.isNotNull(title)) {
145                                    jspWriter.write(LanguageUtil.get(request, title));
146                            }
147    
148                            if (isOpensNewWindow()) {
149                                    jspWriter.write(LanguageUtil.get(request, "opens-new-window"));
150                            }
151    
152                            jspWriter.write("\" ");
153                    }
154    
155                    if (data != null) {
156                            jspWriter.write(AUIUtil.buildData(data));
157                    }
158    
159                    _writeDynamicAttributes(jspWriter);
160    
161                    jspWriter.write(">");
162    
163                    if (Validator.isNotNull(label)) {
164                            if (localizeLabel) {
165                                    jspWriter.write(LanguageUtil.get(request, label));
166                            }
167                            else {
168                                    jspWriter.write(label);
169                            }
170                    }
171    
172                    return EVAL_BODY_INCLUDE;
173            }
174    
175            private String _getNamespace() {
176                    HttpServletRequest request =
177                            (HttpServletRequest)pageContext.getRequest();
178    
179                    PortletResponse portletResponse = (PortletResponse)request.getAttribute(
180                            JavaConstants.JAVAX_PORTLET_RESPONSE);
181    
182                    String namespace = StringPool.BLANK;
183    
184                    boolean useNamespace = GetterUtil.getBoolean(
185                            (String)request.getAttribute("aui:form:useNamespace"), true);
186    
187                    if ((portletResponse != null) && useNamespace) {
188                            namespace = portletResponse.getNamespace();
189                    }
190    
191                    return namespace;
192            }
193    
194            private void _writeDynamicAttributes(JspWriter jspWriter)
195                    throws IOException {
196    
197                    String dynamicAttributesString = InlineUtil.buildDynamicAttributes(
198                            getDynamicAttributes());
199    
200                    if (Validator.isNotNull(dynamicAttributesString)) {
201                            jspWriter.write(dynamicAttributesString);
202                    }
203            }
204    
205    }