/*
* Copyright (C) 2010---2014 星星(wuweixing)<349446658@qq.com>
*
* This file is part of Wabacus
*
* Wabacus is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.wabacus.config.component;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.wabacus.config.Config;
import com.wabacus.config.OnloadMethodBean;
import com.wabacus.config.component.container.AbsContainerConfigBean;
import com.wabacus.config.component.container.page.PageBean;
import com.wabacus.config.dataexport.DataExportsConfigBean;
import com.wabacus.config.dataexport.PDFExportBean;
import com.wabacus.config.other.ButtonsBean;
import com.wabacus.config.print.AbsPrintProviderConfigBean;
import com.wabacus.config.template.TemplateBean;
import com.wabacus.exception.WabacusRuntimeException;
import com.wabacus.system.ReportRequest;
import com.wabacus.system.assistant.ComponentAssistant;
import com.wabacus.system.assistant.WabacusAssistant;
import com.wabacus.util.Consts;
import com.wabacus.util.Consts_Private;
public abstract class AbsComponentConfigBean implements IComponentConfigBean,Cloneable
{
protected String id;
protected String refreshid;
protected String refreshGuid;
protected String top;
protected String bottom;
protected String left;
protected String right;
protected String width;
protected String height;
protected String align;
protected String valign="top";
protected String scrollstyle;
protected String title;
protected Map<String,String> mDynTitleParts;//标题title中的动态部分,key为此动态值的在title中的占位符,值为request{xxx}、session{key}、url{key}等等形式,用于运行时得到真正值
protected String titlealign="left";
protected String subtitle;
protected Map<String,String> mDynSubtitleParts;
protected String parenttitle;
protected Map<String,String> mDynParenttitleParts;//副标题parenttitle中的动态部分,形式与mDynTitleParts一致
protected String parentSubtitle;
protected Map<String,String> mDynParentSubtitleParts;
private ButtonsBean buttonsBean=null;
private boolean showContextMenu=true;
private TemplateBean outerHeaderTplBean;//<outheader/>配置的静态模板对象
private TemplateBean outerFooterTplBean;//<outfooter/>配置的静态模板对象
private TemplateBean headerTplBean;//<header/>配置的静态模板对象
private TemplateBean footerTplBean;//<footer/>配置的静态模板对象
private DataExportsConfigBean dataExportsBean;
protected AbsPrintProviderConfigBean printBean;
private PDFExportBean pdfPrintBean;//PDF打印配置,与pdf导出配置完全一样,但与其它打印方式不同,所以单独做为一个成员变量存放
protected List<OnloadMethodBean> lstOnloadMethods;
protected AbsContainerConfigBean parentContainer;
public AbsComponentConfigBean(AbsContainerConfigBean parentContainer)
{
this.parentContainer=parentContainer;
}
public String getId()
{
return id;
}
public String getGuid()
{
if(this.parentContainer==null) return this.id;//没有父容器,即是顶层<page/>
return this.getPageBean().getId()+Consts_Private.GUID_SEPERATOR+this.id;
}
public String getPath()
{
if(this.getParentContainer()==null)
{
return this.id;
}else
{
return this.getParentContainer().getPath()+Consts_Private.PATH_SEPERATOR+this.id;
}
}
public void setId(String id)
{
this.id=id;
}
public String getRefreshid()
{
return refreshid;
}
public void setRefreshid(String refreshid)
{
this.refreshid=refreshid;
}
public String getRefreshGuid()
{
if(this.id.equals(this.getPageBean().getId())) return this.id;
if(this.refreshGuid==null)
{
this.refreshGuid=ComponentConfigLoadAssistant.getInstance().createComponentRefreshGuidByRefreshId(this.getPageBean(),this.id,this.refreshid);
}
return refreshGuid;
}
public String getTop()
{
return top;
}
public void setTop(String top)
{
this.top=top;
}
public String getBottom()
{
return bottom;
}
public void setBottom(String bottom)
{
this.bottom=bottom;
}
public String getRight()
{
return right;
}
public void setRight(String right)
{
this.right=right;
}
public String getLeft()
{
return left;
}
public void setLeft(String left)
{
this.left=left;
}
public String getAlign()
{
return align;
}
public void setAlign(String align)
{
this.align=align;
}
public String getValign()
{
return valign;
}
public void setValign(String valign)
{
this.valign=valign;
}
public DataExportsConfigBean getDataExportsBean()
{
return dataExportsBean;
}
public void setDataExportsBean(DataExportsConfigBean dataExportsBean)
{
this.dataExportsBean=dataExportsBean;
}
public String getScrollstyle()
{
if(scrollstyle==null||scrollstyle.trim().equals(""))
{
String scrollstyleTmp=Config.getInstance().getSystemConfigValue("default-scrollstyle",Consts_Private.SCROLLSTYLE_NORMAL).toLowerCase();
if(!Consts_Private.lstAllScrollStyles.contains(scrollstyleTmp))
{
throw new WabacusRuntimeException("在wabacus.cfg.xml的default-scrollstyle属性中配置的值"+scrollstyleTmp+"不支持");
}
return scrollstyleTmp;
}
return scrollstyle;
}
public void setScrollstyle(String scrollstyle)
{
this.scrollstyle=scrollstyle;
}
public String getTitle(ReportRequest rrequest)
{
return WabacusAssistant.getInstance().getStringValueWithDynPart(rrequest,this.title,this.mDynTitleParts,"");
}
public void setTitle(String title)
{
Object[] objArr=WabacusAssistant.getInstance().parseStringWithDynPart(this.getPageBean(),title);
this.title=(String)objArr[0];
this.mDynTitleParts=(Map<String,String>)objArr[1];
}
public String getSubtitle(ReportRequest rrequest)
{
return WabacusAssistant.getInstance().getStringValueWithDynPart(rrequest,this.subtitle,this.mDynSubtitleParts,"");
}
public void setSubtitle(String subtitle)
{
Object[] objArr=WabacusAssistant.getInstance().parseStringWithDynPart(this.getPageBean(),subtitle);
this.subtitle=(String)objArr[0];
this.mDynSubtitleParts=(Map<String,String>)objArr[1];
}
public String getParenttitle(ReportRequest rrequest)
{
return WabacusAssistant.getInstance().getStringValueWithDynPart(rrequest,this.parenttitle,this.mDynParenttitleParts,"");
}
public void setParenttitle(String parenttitle)
{
Object[] objArr=WabacusAssistant.getInstance().parseStringWithDynPart(this.getPageBean(),parenttitle);
this.parenttitle=(String)objArr[0];
this.mDynParenttitleParts=(Map<String,String>)objArr[1];
}
public String getParentSubtitle(ReportRequest rrequest)
{
return WabacusAssistant.getInstance().getStringValueWithDynPart(rrequest,this.parentSubtitle,this.mDynParentSubtitleParts,"");
}
public void setParentSubtitle(String parentSubtitle)
{
Object[] objArr=WabacusAssistant.getInstance().parseStringWithDynPart(this.getPageBean(),parentSubtitle);
this.parentSubtitle=(String)objArr[0];
this.mDynParentSubtitleParts=(Map<String,String>)objArr[1];
}
public void setMDynTitleParts(Map<String,String> dynTitleParts)
{
this.mDynTitleParts=dynTitleParts;
}
public void setMDynSubtitleParts(Map<String,String> dynSubtitleParts)
{
this.mDynSubtitleParts=dynSubtitleParts;
}
public void setMDynParenttitleParts(Map<String,String> dynParenttitleParts)
{
this.mDynParenttitleParts=dynParenttitleParts;
}
public void setMDynParentSubtitleParts(Map<String,String> dynParentSubtitleParts)
{
this.mDynParentSubtitleParts=dynParentSubtitleParts;
}
public String getTitlealign()
{
return titlealign;
}
public void setTitlealign(String titlealign)
{
this.titlealign=titlealign;
}
public String getWidth()
{
return width;
}
public void setWidth(String width)
{
this.width=width;
}
public String getHeight()
{
return height;
}
public void setHeight(String height)
{
this.height=height;
}
public boolean shouldShowContextMenu()
{
if(!showContextMenu) return false;
if(this.buttonsBean==null) return false;
if(this.buttonsBean.getButtonsByPosition(Consts.CONTEXTMENU_PART)==null
||this.buttonsBean.getButtonsByPosition(Consts.CONTEXTMENU_PART).size()==0) return false;
return true;
}
public void setShowContextMenu(boolean showContextMenu)
{
this.showContextMenu=showContextMenu;
}
public TemplateBean getOuterHeaderTplBean()
{
return outerHeaderTplBean;
}
public void setOuterHeaderTplBean(TemplateBean outerHeaderTplBean)
{
this.outerHeaderTplBean=outerHeaderTplBean;
}
public TemplateBean getHeaderTplBean()
{
return headerTplBean;
}
public void setHeaderTplBean(TemplateBean headerTplBean)
{
ComponentAssistant.getInstance().validComponentHeaderTpl(this,headerTplBean);
this.headerTplBean=headerTplBean;
}
public TemplateBean getFooterTplBean()
{
return footerTplBean;
}
public void setFooterTplBean(TemplateBean footerTplBean)
{
ComponentAssistant.getInstance().validComponentFooterTpl(this,footerTplBean);
this.footerTplBean=footerTplBean;
}
public TemplateBean getOuterFooterTplBean()
{
return outerFooterTplBean;
}
public void setOuterFooterTplBean(TemplateBean outerFooterTplBean)
{
this.outerFooterTplBean=outerFooterTplBean;
}
public ButtonsBean getButtonsBean()
{
return buttonsBean;
}
public void setButtonsBean(ButtonsBean buttonsBean)
{
this.buttonsBean=buttonsBean;
}
public void setPrintBean(AbsPrintProviderConfigBean printBean)
{
this.printBean=printBean;
}
public AbsPrintProviderConfigBean getPrintBean()
{
return this.printBean;
}
public PDFExportBean getPdfPrintBean()
{
return pdfPrintBean;
}
public void setPdfPrintBean(PDFExportBean pdfPrintBean)
{
this.pdfPrintBean=pdfPrintBean;
}
public void addOnloadMethod(OnloadMethodBean onLoadMethodBean)
{
if(this.lstOnloadMethods==null) this.lstOnloadMethods=new ArrayList<OnloadMethodBean>();
lstOnloadMethods.add(onLoadMethodBean);
}
public void removeOnloadMethodByType(String type)
{
if(lstOnloadMethods==null||lstOnloadMethods.size()==0) return;
for(int i=lstOnloadMethods.size()-1;i>=0;i--)
{
if(type.equalsIgnoreCase(lstOnloadMethods.get(i).getType()))
{
lstOnloadMethods.remove(i);
}
}
}
public List<OnloadMethodBean> getLstOnloadMethods()
{
return lstOnloadMethods;
}
public String getOnloadMethodName()
{
if(lstOnloadMethods==null||lstOnloadMethods.size()==0) return "''";
return this.getGuid()+"_onload";
}
public AbsContainerConfigBean getParentContainer()
{
return parentContainer;
}
public void setParentContainer(AbsContainerConfigBean parentContainer)
{
this.parentContainer=parentContainer;
}
public PageBean getPageBean()
{
if(this instanceof PageBean)
{
return (PageBean)this;
}
AbsContainerConfigBean bean=this.getParentContainer();
if(bean==null) return null;
while(!(bean instanceof PageBean))
{
bean=bean.getParentContainer();
if(bean==null) return null;
continue;
}
return (PageBean)bean;
}
public void doPostLoad()
{
if(this.dataExportsBean!=null) this.dataExportsBean.doPostLoad();
if(this.printBean!=null) this.printBean.doPostLoad();
if(pdfPrintBean!=null) pdfPrintBean.doPostLoad();
if(this.buttonsBean!=null) this.buttonsBean.doPostLoad();
}
public void doPostLoadFinally()
{
}
public IComponentConfigBean clone(AbsContainerConfigBean parentContainer)
{
try
{
AbsComponentConfigBean configBeanNew=(AbsComponentConfigBean)super.clone();
configBeanNew.setParentContainer(parentContainer);
configBeanNew.setRefreshid(null);
if(this.dataExportsBean!=null)
{
configBeanNew.setDataExportsBean(dataExportsBean.clone(configBeanNew));
}
if(this.printBean!=null)
{
AbsPrintProviderConfigBean newPrintBean=(AbsPrintProviderConfigBean)this.printBean.clone();
newPrintBean.setOwner(configBeanNew);
configBeanNew.setPrintBean(newPrintBean);
}
if(pdfPrintBean!=null)
{
configBeanNew.setPdfPrintBean((PDFExportBean)pdfPrintBean.clone(configBeanNew));
}
if(this.mDynTitleParts!=null)
{
configBeanNew.setMDynTitleParts((Map<String,String>)((HashMap<String,String>)this.mDynTitleParts).clone());
}
if(this.mDynSubtitleParts!=null)
{
configBeanNew.setMDynSubtitleParts((Map<String,String>)((HashMap<String,String>)this.mDynSubtitleParts).clone());
}
if(this.mDynParenttitleParts!=null)
{
configBeanNew.setMDynParenttitleParts((Map<String,String>)((HashMap<String,String>)this.mDynParenttitleParts).clone());
}
if(this.mDynParentSubtitleParts!=null)
{
configBeanNew.setMDynParentSubtitleParts((Map<String,String>)((HashMap<String,String>)this.mDynParentSubtitleParts).clone());
}
return configBeanNew;
}catch(CloneNotSupportedException e)
{
e.printStackTrace();
return null;
}
}
}