package com.vci.client.portal.NewNewUI.buttonmng; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import javax.swing.JButton; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.TreePath; import org.apache.commons.lang3.StringUtils; import com.vci.client.workflow.editor.ui.TaskBusinessFunctionInterface; import com.vci.client.workflow.editor.ui.TaskDescPanel; import com.vci.common.utility.ObjectUtility; import com.vci.corba.portal.data.PLCommandParameter; import com.vci.corba.portal.data.PLTabButton; import com.vci.mw.ClientContextVariable; /** * 页签按钮配合窗口 * * FIXME 程序问题 * 1、保存按钮中数据库操作尽量复用了原有的代码,参数的创建和保存处理不合理 * 2、对于参数,没有做名称重复等校验 * * @author VCI-STGK006 * */ public class TaskBusinessFunctionButtonDialog extends ButtonSettingDialog implements TaskBusinessFunctionInterface{ /** * serialVersionUID */ private static final long serialVersionUID = -7532763453642444087L; private Map btnMap = new LinkedHashMap(); private Map btnParamsMap = new LinkedHashMap(); public static final String SEQ_BUTTON = "@#@"; public static final String SEQ_PARAM = "#@#"; private JPanel panel; private String btnParamsStr = ""; private Comparator btnComparator = new Comparator() { @Override public int compare(PLTabButton o1, PLTabButton o2) { return Integer.valueOf(o1.plSeq).compareTo(Integer.valueOf(o2.plSeq)); } }; private Comparator paramsComparator = new Comparator() { @Override public int compare(PLCommandParameter o1, PLCommandParameter o2) { return o1.plKey.compareTo(o2.plKey); } }; public TaskBusinessFunctionButtonDialog() { this.setModal(true); this.setTitle("配置业务功能"); } @Override protected String getRootNodeShowLable(){ return "业务功能定义"; } /** * 添加按钮事件 */ protected void addButtonBtnListener() { super.addButtonBtnListener(); btnSaveUrl.setEnabled(false); btnCancelSaveUrl.setEnabled(false); reloadBtnParams(); } /** * 修改按钮事件 */ protected void editButtonBtnListener() { super.editButtonBtnListener(); btnSaveUrl.setEnabled(false); btnCancelSaveUrl.setEnabled(false); reloadBtnParams(); } /** * 按钮删除事件 */ @Override protected void deleteButtonBtnListener() { if(super.selectedTabButton == null) { JOptionPane.showMessageDialog(this, "根节点不能删除!", "系统提示", JOptionPane.INFORMATION_MESSAGE); return; } //得到当前选择节点父节点,用于刷新使用 TreePath selectedPath = super.getButtonTree().getSelectionPath(); TreePath parentPath = null; if(selectedPath != null) { parentPath = selectedPath.getParentPath(); } String key = this.selectedTabButton.plOId; btnMap.remove(key); btnParamsMap.remove(key); refreshTreeNode(parentPath); } JButton btnSaveUrl = new JButton("完成设置"); JButton btnCancelSaveUrl = new JButton("取消设置"); /** * 绘制 */ @Override public void init(JPanel panel) { this.panel = panel; TaskDescPanel p = (TaskDescPanel)panel; this.btnParamsStr = p.getUrlTextArea().getText(); super.setShowCopyButton(false); super.setShowPasteButton(false); super.setShowPasteToOther(false); super.setShowJoinBtn(false); super.setShowExitBtn(false); btnSaveUrl.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { saveUrlListener(); } }); btnCancelSaveUrl.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { cancelUrlListener(); } }); super.setOtherCustomButtons(Arrays.asList(btnSaveUrl, btnCancelSaveUrl)); super.init(panel); this.setLocationRelativeTo(ClientContextVariable.getFrame()); this.setResizable(true); this.setVisible(true); } private void saveUrlListener() { TaskDescPanel p = (TaskDescPanel)panel; this.btnParamsStr = getBtnAndParamsStr(); p.getUrlTextArea().setText(btnParamsStr); cancelUrlListener(); } private String getBtnAndParamsStr(){ StringBuffer sbRes = new StringBuffer(); Iterator its = btnMap.keySet().iterator(); while(its.hasNext()){ String key = its.next(); PLTabButton btn = btnMap.get(key); String btnAttrStr = getBtnAndStr(btn); String btnParamStr = getBtnParamStr(key); sbRes.append(btnAttrStr).append(btnParamStr).append(SEQ_BUTTON); } if(sbRes.length() > 0){ sbRes.replace(sbRes.length() - SEQ_BUTTON.length(), sbRes.length(), ""); } return sbRes.toString(); } private String getBtnAndStr(PLTabButton btn){ StringBuffer sb = new StringBuffer(); sb.append("seq=" + btn.plSeq + ","); sb.append("label=" + btn.plLabel + ","); sb.append("action=" + btn.plActionOId + ","); sb.append("authorization=" + btn.authorization + ","); sb.append("show=" + btn.show + ","); sb.append("iconPath=" + btn.iconPath + ","); sb.append("displayMode=" + btn.displayMode + ","); sb.append("desc=" + btn.plDesc + ","); sb.append("areaType=tab,"); return sb.toString(); } private String getBtnParamStr(String btnOid){ StringBuffer sb = new StringBuffer(); sb.append("buttonParams=["); PLCommandParameter[] params = btnParamsMap.get(btnOid); if(params != null && params.length > 0){ Arrays.sort(params, paramsComparator); for (int i = 0; i < params.length; i++) { PLCommandParameter param = params[i]; sb.append(param.plKey).append("=").append(param.plValue); if(i != params.length - 1){ sb.append(SEQ_PARAM); } } } sb.append("]"); return sb.toString(); } private void cancelUrlListener() { this.dispose(); } /** * 加载页签区域按钮配置信息 * @return */ @Override protected PLTabButton[] downloadTabButton() { PLTabButton[] buttons = null; // if(this.btnParamsStr != null && !"".equals(this.btnParamsStr)){ // for(Entry entry : buttonMap.entrySet()) { // String str = entry.getValue(); // if(str != null && str.length() > 0 && !"null".equals(str)) { // this.btnParamsStr += str + SEQ_BUTTON; // } // } // buttonMap.clear(); // } List btns = new ArrayList(); if(btnParamsStr != null && btnParamsStr.length() > 0){ buttons = getButtonByStr(btnParamsStr); btnParamsStr = null; } else { buttons = new PLTabButton[]{}; Iterator its = btnMap.keySet().iterator(); while(its.hasNext()){ String key = its.next(); PLTabButton btn = btnMap.get(key); btns.add(btn); } Collections.sort(btns, btnComparator); buttons = btns.toArray(new PLTabButton[0]); } return buttons; } private PLTabButton[] getButtonByStr(String urlStr) { String[] str = urlStr.split(SEQ_BUTTON); List list = new ArrayList(); for(int l = 0; l < str.length; l++) { int num = str[l].indexOf("["); String str1 = str[l].substring(0, num); String paramStr = str[l].substring(num+1); String[] str2 = str1.split(","); PLTabButton button = new PLTabButton(); String buttonOid = ObjectUtility.getNewObjectID36(); btnMap.put(buttonOid, button); short seq = Short.valueOf(getStrValue(str2[0])); String label = getStrValue(str2[1]); String actionOid = getStrValue(str2[2]); String authorization = getStrValue(str2[3]); String show = getStrValue(str2[4]); String iconPath = getStrValue(str2[5]); String displayMode = getStrValue(str2[6]); String decs = getStrValue(str2[7]); button.plOId = buttonOid; button.show = show; button.plSeq = seq; button.plActionOId = actionOid; button.plLabel = label; button.iconPath = iconPath; button.authorization = authorization; button.displayMode = displayMode; button.plDesc = decs; String params = paramStr.substring(0, paramStr.length() - 1); if(params != null && params.length() > 0) { String[] paramStrs = params.split(SEQ_PARAM); List paramList = new ArrayList(); for(String s : paramStrs) { String[] keyValue = s.split("="); if(keyValue != null && keyValue.length == 2) { PLCommandParameter param = new PLCommandParameter(); param.plOId = ObjectUtility.getNewObjectID36(); param.plCommandOId = buttonOid; param.plKey = keyValue[0]; param.plValue = keyValue[1]; paramList.add(param); } } btnParamsMap.put(buttonOid, paramList.toArray(new PLCommandParameter[0])); } list.add(button); } Collections.sort(list, new Comparator(){ public int compare(PLTabButton o1, PLTabButton o2) { int seq1 = o1.plSeq; int seq2 = o2.plSeq; return seq1 > seq2 ? 1 : -1; } }); return list.toArray(new PLTabButton[0]); } private String getStrValue(String str) { String value = null; int num = str.indexOf("="); if(num != -1) { value = str.substring(num + 1).trim(); } return value; } @Override protected void buttonTreeSelectionListener(TreePath selectedPath) { if(selectedPath == null) return; DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode)selectedPath.getLastPathComponent(); if(treeNode.isRoot()){ super.selectedTabButton = null; } super.buttonTreeSelectionListener(selectedPath); if(super.selectedTabButton == null){ return; } reloadBtnParams(); } private void reloadBtnParams(){ if(super.selectedTabButton == null){ return; } String btnOid = this.selectedTabButton.plOId; PLCommandParameter[] params = btnParamsMap.get(btnOid); if(params != null && params.length > 0){ Arrays.sort(params, paramsComparator); List list = Arrays.asList(params); super.getBtnInfoPanel().getParamTablePanel().setButtonParams(list); super.getBtnInfoPanel().getParamTablePanel().getTablePanel().refreshTableData(); } } @Override public void saveBtnListener(){ String btnParamValidate = getBtnInfoPanel().getParamTablePanel().geCheckRes(); if(btnParamValidate != null && btnParamValidate.trim().length() != 0){ JOptionPane.showMessageDialog(this, btnParamValidate , "系统提示", JOptionPane.ERROR_MESSAGE); return; } //创建PLTabButton对象 PLTabButton btn = null; if(this.flag == OptMode.Add) { //如果是增加操作,直接创建PLTabButton对象 btn = new PLTabButton(); btn.plOId = ObjectUtility.getNewObjectID36(); } else { //修改操作 btn = super.selectedTabButton; } btn = getBtnInfoPanel().getFillVaueButton(btn); btn.plAreaType = super.buttonArea; if(btnMap.containsKey(btn.plOId)){ btnMap.remove(btn.plOId); } if(btnParamsMap.containsKey(btn.plOId)){ btnParamsMap.remove(btn.plOId); } List btnParams = new ArrayList(); LinkedHashMap buttonParams = getBtnInfoPanel().getParamTablePanel().getButtonParams(); if(!buttonParams.isEmpty()) { Iterator> iterator = buttonParams.entrySet().iterator(); while(iterator.hasNext()){ Entry next = iterator.next(); if(StringUtils.isEmpty(next.getKey()) || StringUtils.isEmpty(next.getValue())){ iterator.remove(); } } if(!buttonParams.isEmpty()){ Iterator> kvItor = buttonParams.entrySet().iterator(); while(kvItor.hasNext()){ Entry next = kvItor.next(); PLCommandParameter plCommandParameter = new PLCommandParameter(); plCommandParameter.plOId = ObjectUtility.getNewObjectID36(); plCommandParameter.plCommandOId = btn.plOId; plCommandParameter.plKey = next.getKey(); plCommandParameter.plValue = next.getValue(); btnParams.add(plCommandParameter); } } } btnMap.put(btn.plOId, btn); btnParamsMap.put(btn.plOId, btnParams.toArray(new PLCommandParameter[0])); if(this.flag == OptMode.Add) { //添加的时候刷新树节点 TreePath selectedPath = super.getButtonTree().getSelectionPath(); this.refreshTreeNode(selectedPath); //遍历子节点,设置新增节点为选中状态 selectChildPath(selectedPath, btn.plOId); }else{ //修改的时候刷新树节点 TreePath selectedPath = super.getButtonTree().getSelectionPath(); //add by caill 加非空判断为了避免空指针异常 if(selectedPath != null){ TreePath parentPath = selectedPath.getParentPath(); this.refreshTreeNode(parentPath); } } //保存完成后重置面板 cancelBtnListener(); super.getButtonTree().setEnabled(true); } @Override protected void cancelBtnListener(){ super.cancelBtnListener(); btnSaveUrl.setEnabled(true); btnCancelSaveUrl.setEnabled(true); } }