package com.vci.client.workflow.editor.ui;
|
|
import java.awt.BorderLayout;
|
import java.awt.Dimension;
|
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionListener;
|
import java.awt.event.FocusEvent;
|
import java.awt.event.FocusListener;
|
import java.awt.event.KeyEvent;
|
import java.awt.event.KeyListener;
|
import java.awt.event.MouseEvent;
|
import java.awt.event.MouseListener;
|
import java.beans.PropertyChangeEvent;
|
import java.beans.PropertyChangeListener;
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
import javax.swing.BoxLayout;
|
import javax.swing.JButton;
|
import javax.swing.JComboBox;
|
import javax.swing.JPanel;
|
import javax.swing.JScrollPane;
|
import javax.swing.JTable;
|
|
import com.vci.client.LogonApplication;
|
import com.vci.client.ui.locale.LocaleDisplay;
|
import com.vci.client.ui.swing.VCIOptionPane;
|
import com.vci.client.workflow.commom.ClientHelper;
|
import com.vci.client.workflow.delegate.EventConfClientDelegate;
|
import com.vci.client.workflow.editor.DblclickCellEditor;
|
import com.vci.corba.common.VCIError;
|
import com.vci.corba.workflow.data.PropertyInfo;
|
|
public class PropertyEditPanel extends JPanel {
|
private static final long serialVersionUID = 1300418480939892949L;
|
|
private JTable propertyTable;
|
private JButton addBtn;
|
private JButton deleteBtn;
|
private String paramKey;
|
private TaskCustomClassEditPanel customClassEditpanel;
|
private TaskEventPanel eventPanel;
|
|
/**
|
* 记录上一次点击的事件名称
|
*/
|
private String oldValue ="";
|
/**
|
* 保存事件和参数的关系
|
*/
|
private Map<String, ArrayList<PropertyInfo>> propertyMap = new HashMap<String, ArrayList<PropertyInfo>>();
|
|
public PropertyEditPanel(String paramKey,TaskCustomClassEditPanel customClassEditpanel,TaskEventPanel eventPanel) {
|
this.paramKey = paramKey;
|
this.customClassEditpanel = customClassEditpanel;
|
this.eventPanel = eventPanel;
|
initUI();
|
addListener();
|
}
|
|
private void addListener() {
|
addBtn.addActionListener(new ActionListener() {
|
public void actionPerformed(ActionEvent e) {
|
PropertyTableModel model = (PropertyTableModel)propertyTable.getModel();
|
model.addRow();
|
}
|
});
|
|
deleteBtn.addActionListener(new ActionListener() {
|
public void actionPerformed(ActionEvent e) {
|
int[] selectedRows = propertyTable.getSelectedRows();
|
PropertyTableModel model = (PropertyTableModel)propertyTable.getModel();
|
model.deleteRow(selectedRows);
|
if(customClassEditpanel ==null){
|
return;
|
}
|
JTable customTable = customClassEditpanel.getCustomTable();
|
int selectedRow = customTable.getSelectedRow();
|
String valueAt = (String) customTable.getValueAt(selectedRow, 0);
|
PropertyObject[] eventTypes = getEventTypes(eventPanel.getEventType());
|
String value = "";
|
for(int i=0;i<eventTypes.length;i++){
|
if(valueAt.equals(eventTypes[i].getValue())){
|
/*value = EventProperties.getStringProperty("workflow.event.type." + eventTypes[i].getProperty()+".class");*/
|
//add by caill start 2016.4.8 通过corba连接服务端
|
try {
|
value = new EventConfClientDelegate().getStringProperty("workflow.event.type." + eventTypes[i].getProperty()+".class");
|
} catch (VCIError en) {
|
// TODO Auto-generated catch block
|
en.printStackTrace();
|
}
|
//add by caill end
|
paramKey = eventTypes[i].getProperty();
|
}
|
}
|
|
ArrayList<PropertyInfo> result = new ArrayList<PropertyInfo>();
|
ArrayList<PropertyInfo> data = (ArrayList<PropertyInfo>) model.getData();
|
for (PropertyInfo propertyInfo : data) {
|
if(propertyInfo.property.trim().length() > 0
|
&& propertyInfo.value.trim().length() > 0){
|
result.add(propertyInfo);
|
}
|
}
|
eventPanel.getTaskeventMap().put(value,result);
|
}
|
});
|
|
}
|
|
private void initUI() {
|
setLayout(new BorderLayout());
|
add(new JScrollPane(getPropertyTable()), BorderLayout.CENTER);
|
|
JPanel BtnPanel = new JPanel();
|
add(BtnPanel, BorderLayout.EAST);
|
BtnPanel.setLayout(new BoxLayout(BtnPanel, BoxLayout.Y_AXIS));
|
|
addBtn = new JButton("添加");
|
BtnPanel.add(addBtn);
|
|
deleteBtn = new JButton("删除");
|
BtnPanel.add(deleteBtn);
|
}
|
|
private JTable getPropertyTable() {
|
if(propertyTable == null) {
|
propertyTable = new JTable(new PropertyTableModel());
|
propertyTable.setRowHeight(20);
|
|
Dimension size = propertyTable.getTableHeader().getPreferredSize();
|
size.height = 22;
|
propertyTable.getTableHeader().setPreferredSize(size);
|
JComboBox c = new JComboBox(getParamTypes(paramKey));//在下拉列表中选择phase
|
propertyTable.getColumnModel().getColumn(0).setCellEditor(new DblclickCellEditor(c,propertyTable));
|
|
propertyTable.getColumnModel().getColumn(1).addPropertyChangeListener(new PropertyChangeListener() {
|
|
public void propertyChange(PropertyChangeEvent arg0) {
|
if(customClassEditpanel ==null){
|
return;
|
}
|
JTable customTable = customClassEditpanel.getCustomTable();
|
int selectedRow = customTable.getSelectedRow();
|
int rowCount = customTable.getRowCount();
|
// for(int k=0;k<rowCount;k++){
|
String valueAt = (String) customTable.getValueAt(selectedRow, 0);
|
PropertyObject[] eventTypes = getEventTypes(eventPanel.getEventType());
|
String value = "";
|
for(int i=0;i<eventTypes.length;i++){
|
if(valueAt.equals(eventTypes[i].getValue())){
|
/*value = EventProperties.getStringProperty("workflow.event.type." + eventTypes[i].getProperty()+".class");*/
|
//add by caill start 2016.4.8 通过corba连接服务端
|
try {
|
value = new EventConfClientDelegate().getStringProperty("workflow.event.type." + eventTypes[i].getProperty()+".class");
|
} catch (VCIError e) {
|
// TODO Auto-generated catch block
|
e.printStackTrace();
|
}
|
//add by caill end
|
paramKey = eventTypes[i].getProperty();
|
}
|
}
|
oldValue = value;
|
// }
|
|
}
|
});
|
propertyTable.addKeyListener(new KeyListener() {
|
|
public void keyTyped(KeyEvent arg0) {
|
// TODO Auto-generated method stub
|
|
}
|
|
public void keyReleased(KeyEvent e) {
|
// TODO Auto-generated method stub
|
if(e.getKeyCode()==KeyEvent.VK_ENTER){
|
setPropertyMap();
|
}
|
}
|
|
public void keyPressed(KeyEvent arg0) {
|
// TODO Auto-generated method stub
|
|
}
|
});
|
|
propertyTable.addFocusListener(new FocusListener() {
|
|
public void focusLost(FocusEvent arg0) {
|
setPropertyMap();
|
}
|
|
|
|
public void focusGained(FocusEvent arg0) {
|
|
}
|
});
|
// JComboBox cType = new JComboBox();//在下拉列表中选择类型
|
// cType.addItem("");
|
// cType.addItem("String");
|
// cType.addItem("Map");
|
// propertyTable.getColumnModel().getColumn(1).setCellEditor(new DblclickCellEditor(cType,propertyTable));
|
}
|
return propertyTable;
|
}
|
/**
|
* 设置事件与参数之间的关系
|
*/
|
private void setPropertyMap() {
|
if(customClassEditpanel ==null){
|
return;
|
}
|
JTable customTable = customClassEditpanel.getCustomTable();
|
int selectedRow = customTable.getSelectedRow();
|
String valueAt = (String) customTable.getValueAt(selectedRow, 0);
|
PropertyObject[] eventTypes = getEventTypes(eventPanel.getEventType());
|
String value = "";
|
for(int i=0;i<eventTypes.length;i++){
|
if(valueAt.equals(eventTypes[i].getValue())){
|
/*value = EventProperties.getStringProperty("workflow.event.type." + eventTypes[i].getProperty()+".class");*/
|
//add by caill start 2016.4.8 通过corba连接服务端
|
try {
|
value = new EventConfClientDelegate().getStringProperty("workflow.event.type." + eventTypes[i].getProperty()+".class");
|
} catch (VCIError e) {
|
// TODO Auto-generated catch block
|
e.printStackTrace();
|
}
|
//add by caill end
|
paramKey = eventTypes[i].getProperty();
|
}
|
}
|
PropertyInfo[] propertyInfos = customClassEditpanel.getPropertyEditPanel().getPropertyInfos();
|
int length = propertyInfos.length;
|
ArrayList<PropertyInfo> taskeventPropertylist = new ArrayList<PropertyInfo>();
|
if(length>0){
|
for(int i =0;i<length;i++){
|
taskeventPropertylist.add(propertyInfos[i]);
|
}
|
}
|
if(oldValue != value){
|
return;
|
}
|
eventPanel.getTaskeventMap().put(value,taskeventPropertylist);
|
}
|
/**
|
* 参数列表
|
* @param param
|
* @return
|
*/
|
private String[] getParamTypes(String param) {
|
/*String[] types = EventProperties.getStringProperty("workflow.event.type."+param+".field").split(",");*/
|
//add by caill start 2016.4.8 通过corba连接服务端
|
String[] types = null;
|
try {
|
types = new EventConfClientDelegate().getStringProperty("workflow.event.type."+param+".field").split(",");
|
} catch (VCIError e) {
|
// TODO Auto-generated catch block
|
e.printStackTrace();
|
}
|
//add by caill end
|
List<String> taskTypes = new ArrayList<String>();
|
taskTypes.add("");
|
for (int i = 0; i < types.length; i++) {
|
// taskTypes.add(new PropertyObject(types[i],
|
// getI18nForEvent("workflow.event.type." + types[i]+".field")));
|
taskTypes.add(types[i]);
|
}
|
if (param != null && !"".equals(param)) {
|
System.out.println("+++++流程事件下选中事件为:" + param);
|
for (int i = 0; i < taskTypes.size(); i++) {
|
System.out.println("=====流程事件下选中事件" + param + "的第" + i + "个参数名称为" +taskTypes.get(i));
|
}
|
|
}
|
return taskTypes.toArray(new String[0]);
|
}
|
private String getI18nForEvent(String key) {
|
return LocaleDisplay.getI18nString(key, "RMIPWorkflow", getLocale());
|
}
|
public PropertyInfo[] getPropertyInfos(){
|
List<PropertyInfo> result = new ArrayList<PropertyInfo>();
|
PropertyTableModel model = (PropertyTableModel)propertyTable.getModel();
|
List<PropertyInfo> data = model.getData();
|
if(data != null && data.size() > 0){
|
for (PropertyInfo propertyInfo : data) {
|
if(propertyInfo.property.trim().length() > 0
|
&& propertyInfo.value.trim().length() > 0){
|
result.add(propertyInfo);
|
}
|
}
|
}
|
return result.toArray(new PropertyInfo[0]);
|
}
|
|
public void setData(List<PropertyInfo> data){
|
PropertyTableModel model = (PropertyTableModel)propertyTable.getModel();
|
model.setData(data);
|
}
|
|
private String getI18nString(String spCode) {
|
return ClientHelper.getI18nStringForWorkflow(this.getClass().getName() + "." + spCode, this.getLocale());
|
}
|
/**
|
* 直接取得table中cell的值
|
* @param table
|
*/
|
public void cursorLeave(JTable table) {
|
try {
|
if (table == null) {
|
return;
|
}
|
if (table.isEditing()) {
|
table.getCellEditor(table.getEditingRow(), table.getEditingColumn()).stopCellEditing();
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
private PropertyObject[] getEventTypes(String eventType) {
|
/*String[] types = EventProperties.getStringProperty("workflow.event.type."+eventType).split(",");*/
|
//add by caill start 2016.4.8 通过corba连接服务端
|
String[] types = null;
|
try {
|
types = new EventConfClientDelegate().getStringProperty("workflow.event.type."+eventType).split(",");
|
} catch (VCIError e) {
|
// TODO Auto-generated catch block
|
e.printStackTrace();
|
}
|
//add by caill end
|
List<PropertyObject> taskTypes = new ArrayList<PropertyObject>();
|
taskTypes.add(new PropertyObject("", ""));
|
for (int i = 0; i < types.length; i++) {
|
/*taskTypes.add(new PropertyObject(types[i],
|
EventProperties.getStringProperty("workflow.event.type." + types[i])));*/
|
//add by caill start 2016.4.8 通过corba连接服务端
|
try {
|
taskTypes.add(new PropertyObject(types[i],
|
new EventConfClientDelegate().getStringProperty("workflow.event.type." + types[i])));
|
} catch (VCIError e) {
|
// TODO Auto-generated catch block
|
e.printStackTrace();
|
}
|
//add by caill end
|
}
|
return taskTypes.toArray(new PropertyObject[0]);
|
}
|
|
}
|