/*
* 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 java.util.ArrayList;
import java.util.List;
import javax.servlet.jsp.JspException;
import org.ditchnet.jsp.util.JspResponseWriter;
import org.ditchnet.xml.Xhtml;
import org.frameworkset.util.I18NUtil;
import com.frameworkset.common.tag.BaseBodyTag;
/**
* @author Todd Ditchendorf
* @since 0.8
*
* JSP Tag that renders individual tab pane components and their tabs.
*/
public final class TabPaneTag extends BaseBodyTag {
private String id,tabTitle,tabTitleCode;
public String getTabTitleCode() {
return tabTitleCode;
}
public void setTabTitleCode(String tabTitleCode) {
this.tabTitleCode = tabTitleCode;
}
private TabContainerTag tabContainer;
private TabPane tab = null;
private boolean enablesecurity = false;
private boolean lazeload = false;
private List listIFrame = null;
private String action = null;
private String resourceType = null;
public void setId(final String id) {
this.id = id;
}
public String getId() {
return id;
}
public void setTabTitle(final String tabTitle) {
this.tabTitle = tabTitle;
}
public String getTabTitle() {
return tabTitle;
}
public int doStartTag() throws JspException
{
super.doStartTag();
// if(enablesecurity)
// {
// if(this.getTabContainer().accesscontrol.checkPermission(id,this.action,this.resourceType))
// return EVAL_BODY_BUFFERED;
// else
// return this.SKIP_BODY;
// }
this.listIFrame = new ArrayList();
addToContainer();
if(this.getTabContainer().isEnablecookie())
{
getTabContainer().consumeCookie();
}
getTabContainer().consumeQueryStringParam();
getTabContainer().determineSelectedIndex();
return EVAL_BODY_BUFFERED;
}
public int doAfterBody() throws JspException {
// if(enablesecurity && !getTabContainer().accesscontrol.checkPermission(id,this.action,this.resourceType))
// {
// return SKIP_BODY;
// }
// addToContainer();
// getTabContainer().consumeCookie();
// getTabContainer().consumeQueryStringParam();
// getTabContainer().determineSelectedIndex();
renderComponent();
//move to dofinally
// bodyContent.clearBody();
return SKIP_BODY;
}
public TabContainerTag getTabContainer() {
if (null == tabContainer) {
tabContainer = (TabContainerTag)
findAncestorWithClass(this,TabContainerTag.class);
}
return tabContainer;
}
private void addToContainer() {
TabPane tab = new TabPane();
this.tab = tab;
tab.setId(this.getId());
if(this.tabTitleCode == null)
tab.setTabTitle(this.tabTitle);
else
{
tab.setTabTitle( I18NUtil.getI18nMessage(tabTitleCode,(String)tabTitle, request));
}
getTabContainer().addChild(tab);
}
public int doEndTag() throws JspException
{
int ret = super.doEndTag();
return ret;
}
/**
* 重置所有的属性
*
*/
void reset()
{
id = null;
tabTitle= null;
this.tabTitleCode = null;
tabContainer= null;
tab = null;
enablesecurity = false;
action = null;
resourceType = null;
this.lazeload = false;
this.listIFrame = null;
}
private void renderComponent() throws JspException {
JspResponseWriter out = new JspResponseWriter();
out.lineBreak();
out.startElement(Xhtml.Tag.DIV);
out.attribute(Xhtml.Attr.ID,id);
out.attribute(Xhtml.Attr.CLASS,TabConstants.TAB_PANE_CLASS_NAME);
if (isSelectedTab()) {
out.attribute(Xhtml.Attr.STYLE,"display:block;");
} else {
out.attribute(Xhtml.Attr.STYLE,"display:none;");
//如果启用延迟加载,则添加一个hidden元素,存放该面板内的所有iframe页面的id与src
if(this.lazeload && this.listIFrame != null
&& this.listIFrame.size() > 0){
String iframeStr = "";
out.startElement(Xhtml.Tag.INPUT);
out.attribute(Xhtml.Attr.ID,id+"-flag");
out.attribute(Xhtml.Attr.TYPE,"hidden");
out.endElement(Xhtml.Tag.INPUT);
for(int i=0;i<this.listIFrame.size();i++){
out.startElement(Xhtml.Tag.INPUT);
out.attribute(Xhtml.Attr.ID,id+"-hidden");
out.attribute(Xhtml.Attr.TYPE,"hidden");
String[] str = (String[])this.listIFrame.get(i);
out.attribute(Xhtml.Attr.IFRAMEID,str[0]);
out.attribute(Xhtml.Attr.IFRAMESRC,str[1]);
out.endElement(Xhtml.Tag.INPUT);
}
}
}
//if(iframe != null && lazeload)out.text(iframe.toString());
//else out.text(" ");
out.text(" ");
String result = this.getBodyContent().getString();
out.text(result);
//getJspBody().invoke(out.getWriter());
out.lineBreak();
out.endElement(Xhtml.Tag.DIV);
try {
// this.getPreviousOut().print(out.getBuffer());
String ret = out.getBuffer().toString();
bodyContent.getEnclosingWriter().print(ret);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public boolean isSelectedTab() {
// return getTabContainer().getChildren().indexOf(tab) ==
// getTabContainer().getSelectedIndex();
return tab.getId().equals(getTabContainer().getSelectedIndex());
}
public String getAction() {
return action;
}
public void setAction(String action) {
this.action = action;
}
public boolean isEnablesecurity() {
return enablesecurity;
}
public void setEnablesecurity(boolean enablesecurity) {
this.enablesecurity = enablesecurity;
}
public String getResourceType() {
return resourceType;
}
public void setResourceType(String resourceType) {
this.resourceType = resourceType;
}
public boolean isLazeload() {
return lazeload;
}
public void setLazeload(boolean lazeload) {
this.lazeload = lazeload;
}
public List getListIFrame() {
return listIFrame;
}
@Override
public void doFinally() {
if(bodyContent != null)
bodyContent.clearBody();
reset();
super.doFinally();
}
}