/* * 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.other; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.wabacus.config.component.ComponentConfigLoadManager; import com.wabacus.config.component.IComponentConfigBean; import com.wabacus.config.component.application.report.ReportBean; import com.wabacus.exception.WabacusConfigLoadingException; import com.wabacus.system.ReportRequest; import com.wabacus.system.assistant.ComponentAssistant; import com.wabacus.system.assistant.ReportAssistant; import com.wabacus.system.assistant.WabacusAssistant; import com.wabacus.system.buttons.AbsButtonType; import com.wabacus.system.buttons.DataExportButton; import com.wabacus.system.buttons.PrintButton; import com.wabacus.util.Consts; public class ButtonsBean implements Cloneable { private static Log log=LogFactory.getLog(ReportAssistant.class); private int buttonspacing=3; private String align="right"; private String titleposition; private IComponentConfigBean ccbean; private Map<String,List<AbsButtonType>> mAllButtons; // private boolean isExistReferedButton;//本报表按钮中是否存在被容器引用显示的按钮 public ButtonsBean(IComponentConfigBean ccbean) { this.ccbean=ccbean; mAllButtons=new HashMap<String,List<AbsButtonType>>(); } public IComponentConfigBean getCcbean() { return ccbean; } public void setCcbean(IComponentConfigBean ccbean) { this.ccbean=ccbean; } public int getButtonspacing() { return buttonspacing; } public void setButtonspacing(int buttonspacing) { this.buttonspacing=buttonspacing; } public Map<String,List<AbsButtonType>> getMAllButtons() { return mAllButtons; } public void setMAllButtons(Map<String,List<AbsButtonType>> allButtons) { mAllButtons=allButtons; } public String getAlign() { return align; } public void setAlign(String align) { align=align==null?"":align.toLowerCase().trim(); if(!align.equals("left")&&!align.equals("center")&&!align.equals("right")) align="right";//默认显示在右边 this.align=align; } // public String getTitleposition() { return titleposition; } public void setTitleposition(String titleposition) { this.titleposition=titleposition; } public AbsButtonType getButtonByName(String name) { if(mAllButtons==null) return null; if(name==null||name.trim().equals("")) return null; name=name.trim(); Iterator<String> itPositions=mAllButtons.keySet().iterator(); String position; while(itPositions.hasNext()) { position=itPositions.next(); List<AbsButtonType> lstButtons=mAllButtons.get(position); if(lstButtons==null) continue; AbsButtonType buttonObj; for(int i=0;i<lstButtons.size();i++) { buttonObj=lstButtons.get(i); if(buttonObj==null) continue; if(name.equals(buttonObj.getName())) { return buttonObj; } } } return null; } public AbsButtonType getButtonByNameAndPosition(String name,String position) { if(mAllButtons==null) return null; if(name==null||name.trim().equals("")) return null; if(position==null||position.trim().equals("")) position=Consts.OTHER_PART; position=position.trim(); name=name.trim(); List<AbsButtonType> lstButtons=mAllButtons.get(position); if(lstButtons==null||lstButtons.size()==0) { return null; } for(int i=0;i<lstButtons.size();i++) { if(name.equals(lstButtons.get(i).getName())) { return lstButtons.get(i); } } return null; } public List<AbsButtonType> getButtonsByPosition(String position) { if(mAllButtons==null) return null; if(position==null||position.trim().equals("")) position=Consts.OTHER_PART; return mAllButtons.get(position.trim()); } public void addButton(AbsButtonType button,String position) { if(mAllButtons==null) mAllButtons=new HashMap<String,List<AbsButtonType>>(); List<AbsButtonType> lstButtons=mAllButtons.get(position); if(lstButtons==null) { lstButtons=new ArrayList<AbsButtonType>(); mAllButtons.put(position,lstButtons); } if(button.getName()==null||button.getName().trim().equals("")) { throw new WabacusConfigLoadingException("添加配置的按钮对象失败,按钮对象必须配置name属性"); } for(int i=0;i<lstButtons.size();i++) { if(lstButtons.get(i)==null) continue; if(button.getName().equals(lstButtons.get(i).getName())) { throw new WabacusConfigLoadingException("添加配置的按钮对象失败,在位置"+position+"中已经存在name为" +button.getName()+"的按钮对象"); } } lstButtons.add(button); } public int removeButton(String buttonname,String position) { if(mAllButtons==null) return 0; List<AbsButtonType> lstButtons=mAllButtons.get(position); if(lstButtons==null) return 0; AbsButtonType buttonObj; for(int i=0;i<lstButtons.size();i++) { buttonObj=lstButtons.get(i); if(buttonObj==null||buttonObj.getName()==null) continue; if(buttonObj.getName().equals(buttonname)) { lstButtons.remove(i); return 1; } } return 0; } public void removeAllCertainTypeButtons(Class buttonType) { if(mAllButtons==null||buttonType==null) return; Iterator<String> itPositions=mAllButtons.keySet().iterator(); String position; while(itPositions.hasNext()) { position=itPositions.next(); List<AbsButtonType> lstButtons=mAllButtons.get(position); if(lstButtons==null) continue; AbsButtonType buttonObj; boolean flag=true; while(flag) { flag=false; for(int i=0;i<lstButtons.size();i++) { buttonObj=lstButtons.get(i); if(buttonObj==null) continue; if(buttonType.isInstance(buttonObj)) { lstButtons.remove(i); flag=true; break; } } } } } public AbsButtonType getcertainTypeButton(Class buttonType) { if(mAllButtons==null||buttonType==null) return null; Iterator<String> itPositions=mAllButtons.keySet().iterator(); String position; while(itPositions.hasNext()) { position=itPositions.next(); List<AbsButtonType> lstButtons=mAllButtons.get(position); if(lstButtons==null) continue; AbsButtonType buttonObj; for(int i=0;i<lstButtons.size();i++) { buttonObj=lstButtons.get(i); if(buttonObj==null) continue; if(buttonType.isInstance(buttonObj)) { return buttonObj; } } } return null; } public List<AbsButtonType> getAllDistinctButtonsList() { if(mAllButtons==null) return null; List<AbsButtonType> lstButtonsResult=new ArrayList<AbsButtonType>(); List<String> lstButtonNames=new ArrayList<String>(); for(Entry<String,List<AbsButtonType>> entryButtonsTmp:this.mAllButtons.entrySet()) { for(AbsButtonType buttonObj:entryButtonsTmp.getValue()) { if(buttonObj==null) continue; if(lstButtonNames.contains(buttonObj.getName())) continue; lstButtonNames.add(buttonObj.getName()); lstButtonsResult.add(buttonObj); } } return lstButtonsResult; } public List<AbsButtonType> getAllCertainTypeButtonsList(Class buttonType) { if(mAllButtons==null||buttonType==null) return null; Iterator<String> itPositions=mAllButtons.keySet().iterator(); List<AbsButtonType> lstButtonsResult=new ArrayList<AbsButtonType>(); String position; while(itPositions.hasNext()) { position=itPositions.next(); List<AbsButtonType> lstButtons=mAllButtons.get(position); if(lstButtons==null) continue; AbsButtonType buttonObj; for(int i=0;i<lstButtons.size();i++) { buttonObj=lstButtons.get(i); if(buttonObj==null) continue; if(buttonType.isInstance(buttonObj)) { lstButtonsResult.add(buttonObj); } } } return lstButtonsResult; } public List<AbsButtonType> getLstDataExportTypeButtons(String exporttype) { List<AbsButtonType> lstDataExportButtons=getAllCertainTypeButtonsList(DataExportButton.class);//取到配置的所有数据导出按钮 if(lstDataExportButtons==null||lstDataExportButtons.size()==0) return null; exporttype=exporttype==null?"":exporttype.trim(); List<AbsButtonType> lstResults=new ArrayList<AbsButtonType>(); for(AbsButtonType buttonObjTmp:lstDataExportButtons) { if(exporttype.equals(((DataExportButton)buttonObjTmp).getDataexporttype())) lstResults.add(buttonObjTmp); } return lstResults; } public List<AbsButtonType> getLstPrintTypeButtons(String printtype) { List<AbsButtonType> lstPrintButtons=getAllCertainTypeButtonsList(PrintButton.class); if(lstPrintButtons==null||lstPrintButtons.size()==0) return null; printtype=printtype==null?"":printtype.trim(); List<AbsButtonType> lstResults=new ArrayList<AbsButtonType>(); for(AbsButtonType buttonObjTmp:lstPrintButtons) { if(printtype.equals(((PrintButton)buttonObjTmp).getPrinttype())) lstResults.add(buttonObjTmp); } return lstResults; } public List<AbsButtonType> getDistinctCertainTypeButtonsList(Class buttonType) { if(mAllButtons==null||buttonType==null) return null; Iterator<String> itPositions=mAllButtons.keySet().iterator(); List<AbsButtonType> lstButtonsResult=new ArrayList<AbsButtonType>(); List<String> lstButtonNames=new ArrayList<String>(); String position; while(itPositions.hasNext()) { position=itPositions.next(); List<AbsButtonType> lstButtons=mAllButtons.get(position); if(lstButtons==null) continue; AbsButtonType buttonObj; for(int i=0;i<lstButtons.size();i++) { buttonObj=lstButtons.get(i); if(buttonObj==null) continue; if(buttonType.isInstance(buttonObj)) { if(lstButtonNames.contains(buttonObj.getName())) { continue; } lstButtonNames.add(buttonObj.getName()); lstButtonsResult.add(buttonObj); } } } return lstButtonsResult; } public List<AbsButtonType> getLstButtonsByTypeName(String typename) { if(mAllButtons==null||typename==null||typename.trim().equals("")) return null; List<AbsButtonType> lstButtonsResult=new ArrayList<AbsButtonType>(); List<String> lstButtonNames=new ArrayList<String>(); for(Entry<String,List<AbsButtonType>> entryButtonsTmp:this.mAllButtons.entrySet()) { for(AbsButtonType buttonObj:entryButtonsTmp.getValue()) { if(buttonObj==null||buttonObj.getButtonType()==null) continue; if(buttonObj.getButtonType().equals(typename)) { if(lstButtonNames.contains(buttonObj.getName())) continue; lstButtonNames.add(buttonObj.getName()); lstButtonsResult.add(buttonObj); } } } return lstButtonsResult; } public void printAllButton() { if(mAllButtons==null) return; Iterator<String> itPositions=mAllButtons.keySet().iterator(); String position; while(itPositions.hasNext()) { position=itPositions.next(); List<AbsButtonType> lstButtons=mAllButtons.get(position); if(lstButtons==null) continue; AbsButtonType buttonObj; for(int i=0;i<lstButtons.size();i++) { buttonObj=lstButtons.get(i); if(buttonObj==null) continue; System.out.print(buttonObj.getName()+"---"); } } } public String showButtons(ReportRequest rrequest,String positiontype) { if(mAllButtons==null) return ""; List<AbsButtonType> lstButtons=mAllButtons.get(positiontype); if(lstButtons==null||lstButtons.size()==0) return ""; StringBuffer resultBuf=new StringBuffer(); String buttonspace=WabacusAssistant.getInstance().getSpacingDisplayString(this.buttonspacing); String buttonstr; for(AbsButtonType buttonObjTmp:lstButtons) { buttonstr=ComponentAssistant.getInstance().showButton(this.getCcbean(),buttonObjTmp,rrequest,null); if(buttonstr==null||buttonstr.trim().equals("")) continue; resultBuf.append(buttonstr).append(buttonspace); } buttonstr=resultBuf.toString(); if(!buttonspace.equals("")&&buttonstr.endsWith(buttonspace)) { buttonstr=buttonstr.substring(0,buttonstr.length()-buttonspace.length()); } return buttonstr.trim(); } public void sortButtons() { if(mAllButtons==null||mAllButtons.size()==0) return; for(Entry<String,List<AbsButtonType>> entryButtons:mAllButtons.entrySet()) { if(entryButtons.getValue()==null) continue; if(Consts.CONTEXTMENU_PART.equals(entryButtons.getKey())) { Map<String,List<AbsButtonType>> mButtonsTmp=new HashMap<String,List<AbsButtonType>>(); String menugroupTmp; List<AbsButtonType> lstButtonsTmp; for(AbsButtonType buttonTypeObjTmp:entryButtons.getValue()) { menugroupTmp=buttonTypeObjTmp.getMenugroup(); if(menugroupTmp==null||menugroupTmp.trim().equals("")) menugroupTmp="0"; lstButtonsTmp=mButtonsTmp.get(menugroupTmp); if(lstButtonsTmp==null) {//此menugroup下面还没有按钮 lstButtonsTmp=new ArrayList<AbsButtonType>(); mButtonsTmp.put(menugroupTmp,lstButtonsTmp); } lstButtonsTmp.add(buttonTypeObjTmp); } List<String> lstMenuGroups=new ArrayList<String>(); lstMenuGroups.addAll(mButtonsTmp.keySet()); Collections.sort(lstMenuGroups); List<AbsButtonType> lstResults=new ArrayList<AbsButtonType>(); for(String menugroupTmp2:lstMenuGroups) { lstButtonsTmp=mButtonsTmp.get(menugroupTmp2); if(lstButtonsTmp.size()==0) continue; Collections.sort(lstButtonsTmp); lstResults.addAll(lstButtonsTmp); } mAllButtons.put(Consts.CONTEXTMENU_PART,lstResults); }else {//排序其它位置的按钮 Collections.sort(entryButtons.getValue()); } } } public void doPostLoad() { if(mAllButtons==null) return; for(Entry<String, List<AbsButtonType>> entryButtonsTmp:this.mAllButtons.entrySet()) { if(entryButtonsTmp.getValue()==null) continue; for(AbsButtonType buttonTypeObjTmp:entryButtonsTmp.getValue()) { buttonTypeObjTmp.doPostLoad(); } } } public void doPostLoadFinally(ReportBean reportbean) { if(mAllButtons==null) return; for(Entry<String, List<AbsButtonType>> entryButtonsTmp:this.mAllButtons.entrySet()) { if(entryButtonsTmp.getValue()==null) continue; for(AbsButtonType buttonTypeObjTmp:entryButtonsTmp.getValue()) { buttonTypeObjTmp.doPostLoadFinally(); } } } public ButtonsBean clone(IComponentConfigBean ccbeanNew) { try { ButtonsBean newBean=(ButtonsBean)super.clone(); newBean.setCcbean(ccbeanNew); if(mAllButtons!=null) { Map<String,List<AbsButtonType>> mAllButtons_new=new HashMap<String,List<AbsButtonType>>(); newBean.setMAllButtons(mAllButtons_new); String key; List<AbsButtonType> lstButtons; List<AbsButtonType> lstButtons_new; for(Entry<String,List<AbsButtonType>> entryButtons:mAllButtons.entrySet()) { key=entryButtons.getKey(); lstButtons=entryButtons.getValue(); if(lstButtons==null||lstButtons.size()==0) continue; lstButtons_new=new ArrayList<AbsButtonType>(); for(AbsButtonType buttonTmp:lstButtons) { if(buttonTmp==null) continue; buttonTmp=(AbsButtonType)buttonTmp.clone(ccbeanNew); lstButtons_new.add(buttonTmp); } mAllButtons_new.put(key,lstButtons_new); } } return newBean; }catch(CloneNotSupportedException e) { log.error("clone 按钮失败",e); return null; } } }