/* * The contents of this file are subject to the GNU Lesser General Public * License Version 2.1 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.gnu.org/copyleft/lesser.html * * Software distributed under the License is distributed on an "AS * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing * rights and limitations under the License. * * Developer: * Todd Ditchendorf, todd@ditchnet.org * */ /** * @author Todd Ditchendorf * @version 0.8 * @since 0.8 */ package org.ditchnet.jsp.taglib.tabs.handler; import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.jsp.JspException; import com.frameworkset.common.tag.BaseBodyTag; /** * @author Todd Ditchendorf * @since 0.8 * * JSP Tag that renders an XHTML </code>a</code> element that handles targeting * a specific tab on the current page or another page. */ public final class TabLinkTag extends BaseBodyTag { static final String QUESTION_MARK = "?"; static final String EQUALS = "="; static final String AMPERSAND = "&"; public static final String PARAM_NAME_TAB_PANE_ID = "orgDitchnetTabPaneId"; private String id,href,selectedTabPaneId; public void setId(final String id) { this.id = id; } public void setHref(final String href) { this.href = href; } public void setSelectedTabPaneId(final String selectedTabPaneId) { this.selectedTabPaneId = selectedTabPaneId; } private boolean hrefHasQueryString() { return href.indexOf( QUESTION_MARK ) > -1; } private String getUrlParamString() { String prefix; if (hrefHasQueryString()) { prefix = AMPERSAND; } else { prefix = QUESTION_MARK; } StringBuffer buff = new StringBuffer(); buff.append(prefix).append(PARAM_NAME_TAB_PANE_ID).append(EQUALS) .append(selectedTabPaneId); return buff.toString(); } public int doAfterBody() throws JspException { // StringWriter evalResult = new StringWriter(); // StringBuffer buff = evalResult.getBuffer(); StringBuffer buff = new StringBuffer(); buff.append("\n<a "); if (isHrefSameAsRequestURI()) { buff.append("onclick=\"org.ditchnet.jsp.") .append("TabUtils.tabLinkClicked(event,'") .append(selectedTabPaneId) .append("',false); return false;\" href=\"") .append(getRequest().getRequestURL()); } else { buff.append("href=\"").append(href).append(getUrlParamString()); } if (null != id && 0 != id.length()) { buff.append(" id=\"").append(id).append("\""); } buff.append("\">"); String evalResult = this.bodyContent.getString(); // bodyContent.clearBody(); // getJspBody().invoke(evalResult); buff.append(evalResult); buff.append("</a>\n"); // getJspContext().getOut().print(buff); try { // getPreviousOut().print(buff); bodyContent.getEnclosingWriter().print(buff); // out.print(buff); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return SKIP_BODY; } private boolean isHrefSameAsRequestURI() { return null == href; } private HttpServletRequest getRequest() { // PageContext pageContext = (PageContext)getJspContext(); // HttpServletRequest request = // (HttpServletRequest)pageContext.getRequest(); return this.getHttpServletRequest(); } @Override public void doFinally() { id = null;href = null;selectedTabPaneId = null; if(bodyContent != null) bodyContent.clearBody(); super.doFinally(); } }