001: /**
002: * @author <a href="mailto:novotny@gridsphere.org">Jason Novotny</a>
003: * @version $Id: TabbedPaneTag.java 6385 2007-10-25 14:02:26Z wehrens $
004: */package org.gridsphere.provider.portletui.tags;
005:
006: import org.gridsphere.portlet.impl.SportletProperties;
007: import org.gridsphere.portlet.impl.StoredPortletResponseImpl;
008: import org.gridsphere.provider.portletui.beans.TabBean;
009:
010: import javax.portlet.PortletURL;
011: import javax.portlet.RenderRequest;
012: import javax.portlet.RenderResponse;
013: import javax.servlet.ServletResponse;
014: import javax.servlet.http.HttpServletRequest;
015: import javax.servlet.http.HttpServletResponse;
016: import javax.servlet.jsp.JspException;
017: import javax.servlet.jsp.JspWriter;
018: import javax.servlet.jsp.PageContext;
019: import java.io.StringWriter;
020: import java.util.ArrayList;
021: import java.util.List;
022:
023: /**
024: * A <code>TabbedPaneTag</code> represents a tabbed pane</code>
025: */
026: public class TabbedPaneTag extends BaseComponentTag {
027:
028: protected String TAB_LABEL_PARAM = "ui.tab.label";
029: protected String currentPage = "";
030: protected String currentTabLabel = "";
031:
032: protected List<TabBean> tabBeans = new ArrayList<TabBean>();
033:
034: public void addTabBean(TabBean tabBean) {
035: tabBeans.add(tabBean);
036: }
037:
038: public void setCurrentTab(String currentTab) {
039: this .currentTabLabel = currentTab;
040: }
041:
042: public String getCurrentTab() {
043: return currentTabLabel;
044: }
045:
046: public void setCurrentPage(String currentPage) {
047: this .currentPage = currentPage;
048: }
049:
050: public int doStartTag() throws JspException {
051: super .doStartTag();
052: return EVAL_BODY_INCLUDE;
053: }
054:
055: public int doEndTag() throws JspException {
056: if (tabBeans.isEmpty())
057: return EVAL_PAGE;
058:
059: try {
060:
061: RenderRequest req = (RenderRequest) pageContext
062: .getAttribute(SportletProperties.RENDER_REQUEST,
063: PageContext.REQUEST_SCOPE);
064: currentTabLabel = req.getParameter(TAB_LABEL_PARAM);
065: if (currentTabLabel == null) {
066: currentTabLabel = (String) req.getPortletSession(true)
067: .getAttribute(getClass().getName());
068: }
069:
070: JspWriter out = pageContext.getOut();
071: out.println("<ul class=\"ui-tab\">");
072: // if this tab is not set, then use this tab (the first tab in the sequence)
073: if (currentTabLabel == null) {
074: currentTabLabel = ((TabBean) tabBeans.get(0))
075: .getLabel();
076: }
077:
078: RenderResponse res = (RenderResponse) pageContext
079: .getAttribute(SportletProperties.RENDER_RESPONSE,
080: PageContext.REQUEST_SCOPE);
081:
082: // print out all tabs
083: for (int i = 0; i < tabBeans.size(); i++) {
084: TabBean tabBean = (TabBean) tabBeans.get(i);
085: PortletURL url = res.createRenderURL();
086: url.setParameter(TAB_LABEL_PARAM, tabBean.getLabel());
087: String href = url.toString();
088:
089: if (tabBean.getLabel().equals(currentTabLabel)) {
090: req.getPortletSession(true).setAttribute(
091: getClass().getName(), currentTabLabel);
092: currentPage = tabBean.getPage();
093: out.println("<li class=\"selected\">");
094: } else {
095: out.println("<li>");
096: }
097: out.println("<a href=\"" + href + "\">"
098: + tabBean.getValue() + "</a>");
099: out.println("</li>");
100: }
101:
102: out.println("</ul>");
103:
104: StringWriter writer = new StringWriter();
105: ServletResponse sres = pageContext.getResponse();
106: if (res instanceof HttpServletResponse) {
107: HttpServletResponse hres = (HttpServletResponse) sres;
108: HttpServletRequest hreq = (HttpServletRequest) pageContext
109: .getRequest();
110: StoredPortletResponseImpl resWrapper = new StoredPortletResponseImpl(
111: hreq, hres, writer);
112: pageContext.getServletContext().getRequestDispatcher(
113: currentPage).include(pageContext.getRequest(),
114: resWrapper);
115: out.println(writer.getBuffer());
116: }
117: tabBeans.clear();
118: } catch (Exception e) {
119: throw new JspException(e);
120: }
121: super.release();
122: return EVAL_PAGE;
123: }
124: }
|