package com.aggrepoint.winlet.jsp.site.taglib;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
import com.aggrepoint.winlet.AuthorizationEngine;
import com.aggrepoint.winlet.ContextUtils;
import com.aggrepoint.winlet.site.SiteContext;
import com.aggrepoint.winlet.site.domain.Page;
/**
*
* <ae:eval type="focus" page="page0" name="bbbb"/> <% if (bbbb.booleanValue())
* { %>aaa<% } else { %>bbb<% } %>
*
* @author Jiangming Yang (yangjm@gmail.com)
*/
public class EveluateTag extends TagSupport {
static final long serialVersionUID = 0;
String m_strType;
String m_strPage;
String m_strName;
int m_iLevel;
public EveluateTag() {
m_strType = "";
m_strName = null;
m_strPage = null;
m_iLevel = -1;
}
public void setType(String type) {
m_strType = type;
}
public void setPage(String page) {
m_strPage = page;
}
public void setLevel(int level) {
m_iLevel = level;
}
public void setName(String name) {
m_strName = name;
}
public int doStartTag() throws JspException {
try {
SiteContext sc = (SiteContext) pageContext.getRequest()
.getAttribute(SiteContext.SITE_CONTEXT_KEY);
AuthorizationEngine ap = ContextUtils
.getAuthorizationEngine((HttpServletRequest) pageContext
.getRequest());
Page currentPage = sc.getPage();
Object val = new Boolean(false);
Page page = Utils.getPage(this, pageContext, m_strPage, m_iLevel);
if (m_strType.equals("hassub")) { // 判断指定的页是否包含子页面
if (page.getPages(ap, false, true, false).size() > 0)
val = new Boolean(true);
} else if (m_strType.equals("current")) { // 判断指定的页是否当前页
if (currentPage == page)
val = new Boolean(true);
} else if (m_strType.equals("focus")) { // 判断指定的页是否当前页或当前页的直接上级页面
while (currentPage != null
&& currentPage.getParent() != currentPage
&& currentPage != page)
currentPage = currentPage.getParent();
if (currentPage == page)
val = new Boolean(true);
} else if (m_strType.equals("first")) { // 用于在tree标记中,判断当前页面是否第一个页面
TreeTag tt = (TreeTag) TagSupport.findAncestorWithClass(this,
TreeTag.class);
if (tt != null)
if (tt.isFirst())
val = new Boolean(true);
} else if (m_strType.equals("last")) { // 用于在tree标记中,判断当前页面是否还有后续页面
TreeTag tt = (TreeTag) TagSupport.findAncestorWithClass(this,
TreeTag.class);
if (tt != null)
if (!tt.hasNext())
val = new Boolean(true);
} else if (m_strType.equals("canaccess")) { // 是否可以访问当前页。用于处理只能扩展访问但不能直接访问的页面
if (ContextUtils.getAuthorizationEngine(
(HttpServletRequest) pageContext.getRequest()).check(
page, false) == null)
val = new Boolean(true);
} else if (m_strType.startsWith("data.")) { // 获取data
val = page.getData(m_strType.substring(5));
}
pageContext.setAttribute(m_strName, val);
} catch (Exception e) {
throw new JspException(e.getMessage());
}
return SKIP_BODY;
}
}