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;i0&&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;i1){ 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;i0&&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; } }