package com.aggrepoint.winlet.jsp.site.taglib;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;
import com.aggrepoint.winlet.site.SiteContext;
import com.aggrepoint.winlet.site.domain.Page;
/**
* IF
*
* @author Jiangming Yang (yangjm@gmail.com)
*/
public class IfTag extends TagSupport {
static final long serialVersionUID = 0;
String m_strType;
String m_strPage;
String m_strThen;
String m_strElse;
int m_iLevel;
public IfTag() {
m_strType = m_strThen = m_strElse = "";
m_strPage = null;
m_iLevel = -1;
}
public void setType(String type) {
m_strType = type;
}
public void setPage(String page) {
m_strPage = page;
}
public void setThen(String then) {
m_strThen = then;
}
public void setElse(String str) {
m_strElse = str;
}
public void setLevel(int level) {
m_iLevel = level;
}
public int doStartTag() throws JspException {
try {
JspWriter out = pageContext.getOut();
SiteContext sc = (SiteContext) pageContext.getRequest()
.getAttribute(SiteContext.SITE_CONTEXT_KEY);
Page currentPage = sc.getPage();
Page page = Utils.getPage(this, pageContext, m_strPage, m_iLevel);
if (m_strType.equals("current")) { // 判断指定的页是否当前页
if (currentPage == page)
out.print(m_strThen);
else
out.print(m_strElse);
} else if (m_strType.equals("focus")) { // 判断指定的页是否当前页或当前页的直接上级页面
while (currentPage != null
&& currentPage.getParent() != currentPage
&& currentPage != page)
currentPage = currentPage.getParent();
if (currentPage == page)
out.print(m_strThen);
else
out.print(m_strElse);
} else if (m_strType.equals("first")) { // 用于在tree标记中,判断当前页面是否第一个页面
TreeTag tt = (TreeTag) TagSupport.findAncestorWithClass(this,
TreeTag.class);
if (tt != null)
if (tt.isFirst())
out.print(m_strThen);
else
out.print(m_strElse);
} else if (m_strType.equals("last")) { // 用于在tree标记中,判断当前页面是否还有后续页面
TreeTag tt = (TreeTag) TagSupport.findAncestorWithClass(this,
TreeTag.class);
if (tt != null)
if (!tt.hasNext())
out.print(m_strThen);
else
out.print(m_strElse);
}
} catch (Exception e) {
throw new JspException(e.getMessage());
}
return SKIP_BODY;
}
}