/*
* 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.system.buttons;
import java.util.ArrayList;
import java.util.List;
import com.wabacus.config.Config;
import com.wabacus.config.component.IComponentConfigBean;
import com.wabacus.config.resource.dataimport.configbean.AbsDataImportConfigBean;
import com.wabacus.config.xml.XmlElementBean;
import com.wabacus.exception.WabacusConfigLoadingException;
import com.wabacus.system.ReportRequest;
import com.wabacus.system.assistant.WabacusAssistant;
import com.wabacus.system.intercept.AbsFileUploadInterceptor;
import com.wabacus.util.Consts;
import com.wabacus.util.Consts_Private;
import com.wabacus.util.Tools;
public class DataImportButton extends WabacusButton
{
private DataImportBean dataimportBean;
public DataImportButton(IComponentConfigBean ccbean)
{
super(ccbean);
}
public String getButtonType()
{
return Consts.IMPORT_DATA;
}
public String showButton(ReportRequest rrequest,String dynclickevent)
{
return super.showButton(rrequest,getDataImportEvent());
}
public String showButton(ReportRequest rrequest,String dynclickevent,String button)
{
return super.showButton(rrequest,getDataImportEvent(),button);
}
public AbsFileUploadInterceptor getDataimportInterceptorObj()
{
return this.dataimportBean.getDataimportInterceptorObj();
}
public boolean isDataImportAsyn()
{
return this.dataimportBean.isDataImportAsyn();
}
public List<String> getLstDataImportFileNames()
{
return this.dataimportBean.getLstDataImportFileNames();
}
public List<AbsDataImportConfigBean> getLstDataImportItems()
{
return this.dataimportBean.getLstDataImportItems();
}
private String getDataImportEvent()
{
String token="?";
if(Config.showreport_url.indexOf("?")>0) token="&";
String serverurl=Config.showreport_url+token+"PAGEID="+ccbean.getPageBean().getId()+"&COMPONENTID="+ccbean.getId()
+"&ACTIONTYPE=ShowUploadFilePage&FILEUPLOADTYPE="+Consts_Private.FILEUPLOADTYPE_DATAIMPORTREPORT;
serverurl+="&DATAIMPORT_BUTTONNAME="+this.getName();
return "wx_winpage('"+serverurl+"',"+this.dataimportBean.getDataimportpopupparams()+");";
}
public void loadExtendConfig(XmlElementBean eleButtonBean)
{
super.loadExtendConfig(eleButtonBean);
XmlElementBean eleDataImportBean=eleButtonBean.getChildElementByName("dataimport");
if(eleDataImportBean==null)
{
throw new WabacusConfigLoadingException("加载组件"+this.ccbean.getPath()+"上的数据导入按钮失败,没有配置<dataimport/>子标签");
}
String ref=eleDataImportBean.attributeValue("ref");
if(ref==null||ref.trim().equals(""))
{
throw new WabacusConfigLoadingException("加载组件"+this.ccbean.getPath()+"上的数据导入按钮失败,<dataimport/>标签的ref属性不能为空");
}
String interceptor=eleDataImportBean.attributeValue("interceptor");
String asyn=eleDataImportBean.attributeValue("asyn");
String popupparams=eleDataImportBean.attributeValue("popupparams");
String popupinitsize=eleDataImportBean.attributeValue("popupinitsize");
this.dataimportBean=new DataImportBean();
List<AbsDataImportConfigBean> lstDataImports=new ArrayList<AbsDataImportConfigBean>();
List<String> lst=Tools.parseStringToList(ref,";",false);
for(String strTmp:lst)
{
if(strTmp.equals("")) continue;
if(!Tools.isDefineKey("$",strTmp))
{
throw new WabacusConfigLoadingException("加载组件"+this.ccbean.getPath()+"失败,配置的数据导出项"+strTmp+"不是从资源文件中获取");
}
Object obj=Config.getInstance().getResourceObject(null,this.ccbean.getPageBean(),strTmp,true);
if(!(obj instanceof AbsDataImportConfigBean))
{
throw new WabacusConfigLoadingException("加载组件"+this.ccbean.getPath()+"失败,配置的数据导出项"+strTmp+"对应的资源项不是数据导出项资源类型");
}
lstDataImports.add((AbsDataImportConfigBean)obj);
}
this.dataimportBean.setLstDataImportItems(lstDataImports);
popupparams=WabacusAssistant.getInstance().addDefaultPopupParams(popupparams,popupinitsize,"300","160",null);
if(popupparams!=null) this.dataimportBean.setDataimportpopupparams(popupparams.trim());
if(interceptor!=null&&!interceptor.trim().equals(""))
{
this.dataimportBean.setDataimportInterceptorObj(AbsFileUploadInterceptor.createInterceptorObj(interceptor.trim()));
}
this.dataimportBean.setDataImportAsyn("true".equalsIgnoreCase(asyn));
}
private class DataImportBean
{
private List<AbsDataImportConfigBean> lstDataImportItems;
private AbsFileUploadInterceptor dataimportInterceptorObj;
private boolean isDataImportAsyn;
private List<String> lstDataImportFileNames;
private String dataimportpopupparams;//弹出数据导入窗口参数,以json形式传入弹出组件所能接受的参数
private List<AbsDataImportConfigBean> getLstDataImportItems()
{
return lstDataImportItems;
}
public void setLstDataImportItems(List<AbsDataImportConfigBean> lstDataImportItems)
{
lstDataImportFileNames=new ArrayList<String>();
if(lstDataImportItems!=null&&lstDataImportItems.size()>0)
{
String fileuploadpath=null;
for(AbsDataImportConfigBean dataImportTmp:lstDataImportItems)
{
if(!lstDataImportFileNames.contains(dataImportTmp.getFilename())) lstDataImportFileNames.add(dataImportTmp.getFilename());
if(fileuploadpath==null)
{
fileuploadpath=dataImportTmp.getFilepath();
}else if(!fileuploadpath.equals(dataImportTmp.getFilepath()))
{
throw new WabacusConfigLoadingException("加载组件"+ccbean.getPath()+"数据导入按钮失败,被同一个报表引用的所有数据导入项"+dataImportTmp.getReskey()+"的导入路径必须一致");
}
}
}
this.lstDataImportItems=lstDataImportItems;
}
private AbsFileUploadInterceptor getDataimportInterceptorObj()
{
return dataimportInterceptorObj;
}
private void setDataimportInterceptorObj(AbsFileUploadInterceptor dataimportInterceptorObj)
{
this.dataimportInterceptorObj=dataimportInterceptorObj;
}
private boolean isDataImportAsyn()
{
return isDataImportAsyn;
}
private void setDataImportAsyn(boolean isDataImportAsyn)
{
this.isDataImportAsyn=isDataImportAsyn;
}
private List<String> getLstDataImportFileNames()
{
return lstDataImportFileNames;
}
private void setLstDataImportFileNames(List<String> lstDataImportFileNames)
{
this.lstDataImportFileNames=lstDataImportFileNames;
}
private String getDataimportpopupparams()
{
if(dataimportpopupparams==null||dataimportpopupparams.trim().equals("")) return "null";
return dataimportpopupparams;
}
private void setDataimportpopupparams(String dataimportpopupparams)
{
this.dataimportpopupparams=dataimportpopupparams;
}
}
}