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<String, PLTabButton> btnMap = new LinkedHashMap<String, PLTabButton>();
|
private Map<String, PLCommandParameter[]> btnParamsMap = new LinkedHashMap<String, PLCommandParameter[]>();
|
|
public static final String SEQ_BUTTON = "@#@";
|
|
public static final String SEQ_PARAM = "#@#";
|
|
private JPanel panel;
|
|
private String btnParamsStr = "";
|
|
|
private Comparator<PLTabButton> btnComparator = new Comparator<PLTabButton>() {
|
@Override
|
public int compare(PLTabButton o1, PLTabButton o2) {
|
return Integer.valueOf(o1.plSeq).compareTo(Integer.valueOf(o2.plSeq));
|
}
|
};
|
|
private Comparator<PLCommandParameter> paramsComparator = new Comparator<PLCommandParameter>() {
|
@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<String> 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<String, String> entry : buttonMap.entrySet()) {
|
// String str = entry.getValue();
|
// if(str != null && str.length() > 0 && !"null".equals(str)) {
|
// this.btnParamsStr += str + SEQ_BUTTON;
|
// }
|
// }
|
// buttonMap.clear();
|
// }
|
|
List<PLTabButton> btns = new ArrayList<PLTabButton>();
|
if(btnParamsStr != null && btnParamsStr.length() > 0){
|
buttons = getButtonByStr(btnParamsStr);
|
btnParamsStr = null;
|
} else {
|
buttons = new PLTabButton[]{};
|
Iterator<String> 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<PLTabButton> list = new ArrayList<PLTabButton>();
|
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<PLCommandParameter> paramList = new ArrayList<PLCommandParameter>();
|
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<PLTabButton>(){
|
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<PLCommandParameter> 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<PLCommandParameter> btnParams = new ArrayList<PLCommandParameter>();
|
LinkedHashMap<String, String> buttonParams = getBtnInfoPanel().getParamTablePanel().getButtonParams();
|
if(!buttonParams.isEmpty()) {
|
Iterator<Entry<String, String>> iterator = buttonParams.entrySet().iterator();
|
while(iterator.hasNext()){
|
Entry<String, String> next = iterator.next();
|
if(StringUtils.isEmpty(next.getKey()) || StringUtils.isEmpty(next.getValue())){
|
iterator.remove();
|
}
|
}
|
if(!buttonParams.isEmpty()){
|
Iterator<Entry<String, String>> kvItor = buttonParams.entrySet().iterator();
|
while(kvItor.hasNext()){
|
Entry<String, String> 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);
|
}
|
}
|