package com.vci.client.workflow.task;
|
|
import java.awt.AWTEvent;
|
import java.awt.Dimension;
|
import java.awt.Frame;
|
import java.awt.Rectangle;
|
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionListener;
|
import java.awt.event.MouseAdapter;
|
import java.awt.event.MouseEvent;
|
import java.awt.event.WindowEvent;
|
import java.util.ArrayList;
|
import java.util.List;
|
|
import javax.swing.DefaultListModel;
|
import javax.swing.JButton;
|
import javax.swing.JDialog;
|
import javax.swing.JLabel;
|
import javax.swing.JList;
|
import javax.swing.JOptionPane;
|
import javax.swing.JScrollPane;
|
import javax.swing.JTextArea;
|
import javax.swing.ListModel;
|
import javax.swing.ListSelectionModel;
|
import javax.swing.border.EmptyBorder;
|
import javax.swing.border.TitledBorder;
|
|
import com.vci.client.LogonApplication;
|
import com.vci.client.common.objects.UserObject;
|
import com.vci.client.framework.delegate.RightManagementClientDelegate;
|
import com.vci.client.ui.exception.VCIException;
|
import com.vci.client.workflow.commom.Checkableitem;
|
import com.vci.client.workflow.delegate.ProcessCustomClientDelegate;
|
import com.vci.client.workflow.editor.TaskDescCObject;
|
import com.vci.corba.common.VCIError;
|
|
public class FlowUserDialog extends JDialog {
|
private static final long serialVersionUID = 1L;
|
public JButton buttonOk = new JButton();
|
public JButton buttonCancel = new JButton();
|
public boolean flag = false;
|
String taskName = "";
|
String outcome = "";
|
String jbpmDeploymentId = "";
|
public String[] userName ;
|
|
private JList userList = new JList();
|
private JList nextTaskList = new JList();
|
|
Checkableitem[] items = {};
|
JScrollPane scrollPanel = new JScrollPane();
|
JScrollPane selectScroPanel = new JScrollPane();
|
JScrollPane scroll = new JScrollPane();
|
private JTextArea descArea;
|
private JLabel descLabel;
|
private String desc = null;
|
String resTask = "";
|
private boolean isSelectFlag = false;
|
private long pltreatment = 0;
|
public boolean isSelectFlag() {
|
return isSelectFlag;
|
}
|
public void setSelectFlag(boolean isSelectFlag) {
|
this.isSelectFlag = isSelectFlag;
|
}
|
public FlowUserDialog(){
|
|
}
|
/**
|
*
|
* @param frame
|
*/
|
public FlowUserDialog(Frame frame,String jbpmDeploymentId,String taskName,String outcome){
|
super(frame, true);
|
this.taskName = taskName;
|
this.outcome = outcome;
|
this.jbpmDeploymentId = jbpmDeploymentId;
|
init();
|
//激活窗口事件
|
this.enableEvents(AWTEvent.WINDOW_EVENT_MASK);
|
|
if(isSelectFlag){
|
ok_todo();
|
}
|
}
|
//重写这个方法
|
@Override
|
protected void processWindowEvent(WindowEvent e) {
|
if (e.getID() == WindowEvent.WINDOW_CLOSING)
|
return; //直接返回,阻止默认动作,阻止窗口关闭
|
super.processWindowEvent(e); //该语句会执行窗口事件的默认动作(如:隐藏)
|
}
|
String[] nextTaskName;
|
public void init(){
|
int x = (int) (this.getParent().getLocationOnScreen().getX()) + 235;
|
int y = (int) (this.getParent().getLocationOnScreen().getY()) + 125;
|
this.setLocation(x, y);
|
|
this.setSize(new Dimension(520, 400));
|
this.setResizable(false);
|
|
|
|
descLabel = new JLabel("请输入任务描述:");
|
descLabel.setBounds(40, 190, 120, 25);
|
|
scroll.setBounds(40, 220, 420, 80);
|
descArea = new JTextArea();
|
descArea.setLineWrap(true);
|
scroll.getViewport().add(descArea);
|
|
buttonOk.setText("确定");
|
buttonOk.setBounds(new Rectangle(
|
170, 320, 60, 25));
|
buttonCancel.setText("取消");
|
buttonCancel.setBounds(new Rectangle(
|
270, 320, 60, 25));
|
try {
|
nextTaskName = getNextTaskNames(new ProcessCustomClientDelegate(
|
LogonApplication.getUserEntityObject()));
|
if (nextTaskName.length > 1) {
|
fillNextTaskCombox();
|
|
userList = new JList(items);
|
// userList.setCellRenderer(new Checklistrenderer());
|
userList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
userList.setBorder(new EmptyBorder(0, 4, 0, 0));
|
|
scrollPanel.setBounds(40, 10, 160, 150);
|
scrollPanel.setBorder(new TitledBorder("下一步任务"));
|
scrollPanel.getViewport().add(nextTaskList);
|
|
selectScroPanel.setBounds(300, 10, 160, 150);
|
selectScroPanel.setBorder(new TitledBorder("指定下一步处理人"));
|
selectScroPanel.getViewport().add(userList);
|
this.add(scrollPanel);
|
this.add(selectScroPanel);
|
|
}else{
|
fillUserCombox();
|
|
userList = new JList(items);
|
// userList.setCellRenderer(new Checklistrenderer());
|
userList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
userList.setBorder(new EmptyBorder(0, 4, 0, 0));
|
|
JScrollPane scrollPanel = new JScrollPane();
|
scrollPanel.setBounds(40, 10, 400, 150);
|
scrollPanel.setBorder(new TitledBorder("下一步处理人"));
|
scrollPanel.getViewport().add(userList);
|
this.add(scrollPanel);
|
|
//20120806 如果用户列表只有一个用户或者为所有人处理时,用户列表不选择
|
int size = userList.getModel().getSize();
|
if(size==1||pltreatment == 1){
|
userList.setEnabled(false);
|
for(int i = 0;i<size;i++){
|
Checkableitem item = (Checkableitem) userList.getModel()
|
.getElementAt(i);
|
item.setSelected(!item.isSelected());
|
Rectangle rect = userList.getCellBounds(i, i);
|
userList.repaint(rect);
|
}
|
isSelectFlag = true;
|
}else{
|
userList.setEnabled(true);
|
isSelectFlag = false;
|
}
|
}
|
} catch (VCIException e) {
|
// TODO Auto-generated catch block
|
e.printStackTrace();
|
}
|
|
|
this.setLayout(null);
|
this.add(scrollPanel);
|
this.add(buttonOk);
|
this.add(buttonCancel);
|
// this.add(descLabel);
|
// this.add(scroll);
|
userList.addMouseListener(new MouseAdapter() {
|
public void mouseClicked(MouseEvent e) {
|
if(!isSelectFlag){
|
int index = userList.locationToIndex(e.getPoint());
|
Checkableitem item = (Checkableitem) userList.getModel()
|
.getElementAt(index);
|
item.setSelected(!item.isSelected());
|
Rectangle rect = userList.getCellBounds(index, index);
|
userList.repaint(rect);
|
}
|
}
|
});
|
|
nextTaskList.addMouseListener(new MouseAdapter() {
|
public void mouseClicked(MouseEvent mouseevent) {
|
add_actionPerformed();
|
|
//20120806 如果用户列表只有一个用户或者为所有人处理时,用户列表不选择
|
int size = userList.getModel().getSize();
|
if(size==1||pltreatment==1){
|
userList.setEnabled(false);
|
for(int i = 0;i<size;i++){
|
Checkableitem item = (Checkableitem) userList.getModel()
|
.getElementAt(i);
|
item.setSelected(!item.isSelected());
|
Rectangle rect = userList.getCellBounds(i, i);
|
userList.repaint(rect);
|
}
|
isSelectFlag = true;
|
}else{
|
userList.setEnabled(true);
|
isSelectFlag = false;
|
}
|
}
|
});
|
buttonOk.addActionListener(new ActionListener() {
|
public void actionPerformed(ActionEvent arg0) {
|
ok_todo();
|
}
|
|
});
|
|
buttonCancel.addActionListener(new ActionListener() {
|
public void actionPerformed(ActionEvent arg0) {
|
flag = true;
|
dispose();
|
}
|
});
|
|
}
|
|
private void fillUserCombox(){
|
ProcessCustomClientDelegate processCustomClientDelegate = new ProcessCustomClientDelegate(LogonApplication.getUserEntityObject());
|
try {
|
String[] userName = processCustomClientDelegate.getNextCandidates(jbpmDeploymentId, taskName, outcome);
|
|
//获取下一步任务名称
|
String[] nextTaskNames = getNextTaskNames(new ProcessCustomClientDelegate(
|
LogonApplication.getUserEntityObject()));
|
for(int i=0;i<nextTaskNames.length;i++){
|
//获取任务的候选人处理方式
|
TaskDescCObject[] taskDescList = new ProcessCustomClientDelegate().getTaskDescList(jbpmDeploymentId, nextTaskNames[i]);
|
for(int j=0;j<taskDescList.length;j++){
|
pltreatment = taskDescList[j].getPltreatment();
|
}
|
}
|
|
RightManagementClientDelegate rightDel = new RightManagementClientDelegate(LogonApplication.getUserEntityObject());
|
DefaultListModel model = new DefaultListModel();
|
items = new Checkableitem[userName.length];
|
if(userName != null &&userName.length>0&&userName[0].contains("#{process_applicant}")){
|
UserObject userObj = rightDel.fetchUserInfoByName(LogonApplication.getUserEntityObject().getUserName());
|
if(!"".equals(userObj.getId())){
|
// model.addElement(userObj);
|
items[0] = new Checkableitem((Object) userObj);
|
model.add(model.getSize(), items[0]);
|
}
|
}else{
|
for(int i =0;i<userName.length;i++){
|
UserObject userObj = rightDel.fetchUserInfoByName(userName[i]);
|
//updated by wangxl 2011-12-16 修改用户被删除时 不加载
|
if(!"".equals(userObj.getId())){
|
// model.addElement(userObj);
|
items[i] = new Checkableitem((Object) userObj);
|
model.add(model.getSize(), items[i]);
|
}
|
}
|
userList.setModel(model);
|
|
}
|
} catch (VCIException e) {
|
e.printStackTrace();
|
}
|
}
|
private void ok_todo() {
|
flag = false;
|
// Object[] object = userList.getSelectedValues();
|
// userName = new String[object.length];
|
// for(int i=0;i<object.length;i++) {
|
// UserObject obj = (UserObject)object[i];
|
// userName[i] = obj.getUserName();
|
// }
|
|
|
ListModel model = userList.getModel();
|
int n = model.getSize();
|
|
//如果是任意人处理,则只选择一个人
|
if(pltreatment==0&&n>1){
|
userName = new String[1];
|
Checkableitem checkableitem = (Checkableitem) userList.getSelectedValue();
|
Object obj = checkableitem.getStr();
|
if(obj instanceof UserObject){
|
UserObject userObj = (UserObject) obj;
|
userName[0] = userObj.getUserName();
|
}
|
}else{
|
List userList = new ArrayList();
|
for (int i = 0; i < n; i++) {
|
Checkableitem item = (Checkableitem) model.getElementAt(i);
|
if(item.isSelected()){
|
userList.add(item);
|
}
|
}
|
|
userName = new String[userList.size()];
|
for (int i = 0; i < userList.size(); i++) {
|
Checkableitem checkableitem = (Checkableitem) userList.get(i);
|
Object obj = checkableitem.getStr();
|
if(obj instanceof UserObject){
|
UserObject userObj = (UserObject) obj;
|
userName[i] = userObj.getUserName();
|
}
|
}
|
}
|
if (userName.length <= 0) {
|
JOptionPane.showMessageDialog(LogonApplication.frame, "没有选择下一步的处理人!");
|
return;
|
}
|
resTask = (String) nextTaskList.getSelectedValue();
|
desc = descArea.getText().trim();
|
// if (desc.getBytes().length > 64) {
|
// JOptionPane.showMessageDialog(LogonApplication.frame,
|
// "输入的内容太多,不能超过64个字符或32个汉字");
|
// return;
|
// } else if (desc == null || desc.equals("")) {
|
// JOptionPane.showMessageDialog(LogonApplication.frame,
|
// "请输入流程描述信息");
|
// return;
|
// }
|
dispose();
|
}
|
private void fillNextTaskCombox() {
|
ProcessCustomClientDelegate processCustomClientDelegate = new ProcessCustomClientDelegate(
|
LogonApplication.getUserEntityObject());
|
try {
|
String[] nextTaskName = getNextTaskNames(processCustomClientDelegate);
|
DefaultListModel model = new DefaultListModel();
|
|
for (int i = 0; i < nextTaskName.length; i++) {
|
model.addElement(nextTaskName[i]);
|
}
|
|
nextTaskList.setModel(model);
|
nextTaskList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
} catch (VCIException e) {
|
JOptionPane.showMessageDialog(LogonApplication.frame, "该资源数据模板没有配置相应流程,请确认!");
|
}
|
}
|
|
private String[] getNextTaskNames(
|
ProcessCustomClientDelegate processCustomClientDelegate)
|
throws VCIException{
|
// 通过模板找到流程
|
String[] nextTaskName = processCustomClientDelegate.getNextTaskNames(
|
jbpmDeploymentId, taskName, outcome);
|
return nextTaskName;
|
}
|
private void add_actionPerformed() {
|
String objs = (String) nextTaskList.getSelectedValue();
|
|
ProcessCustomClientDelegate processCustomClientDelegate = new ProcessCustomClientDelegate(
|
LogonApplication.getUserEntityObject());
|
RightManagementClientDelegate rightDel = new RightManagementClientDelegate(
|
LogonApplication.getUserEntityObject());
|
DefaultListModel model = new DefaultListModel();
|
try {
|
String[] userName = null;
|
try {
|
userName = processCustomClientDelegate
|
.getCurCandidates(jbpmDeploymentId, objs, outcome, null);
|
} catch (VCIException e) {
|
e.printStackTrace();
|
}
|
|
//获取任务的候选人处理方式
|
TaskDescCObject[] taskDescList = new ProcessCustomClientDelegate().getTaskDescList(jbpmDeploymentId, objs);
|
for(int i=0;i<taskDescList.length;i++){
|
pltreatment = taskDescList[i].getPltreatment();
|
}
|
|
items = new Checkableitem[userName.length==0?1:userName.length];
|
if(userName != null &&userName.length>0&&userName[0].contains("#{process_applicant}")){
|
UserObject userObj = rightDel
|
.fetchUserInfoByName(LogonApplication
|
.getUserEntityObject().getUserName());
|
if (!"".equals(userObj.getId())) {
|
items[0] = new Checkableitem((Object) userObj);
|
model.add(model.getSize(), items[0]);
|
}
|
} else {
|
for (int i = 0; i < userName.length; i++) {
|
UserObject userObj = rightDel
|
.fetchUserInfoByName(userName[i]);
|
if (!"".equals(userObj.getId())) {
|
items[i] = new Checkableitem((Object) userObj);
|
model.add(model.getSize(), items[i]);
|
}
|
}
|
}
|
userList.setModel(model);
|
} catch (VCIException e) {
|
e.printStackTrace();
|
}
|
}
|
public String[] getUserName(){
|
return userName;
|
}
|
public String getDesc() {
|
return desc;
|
}
|
}
|