package com.vci.client.workflow.launch; import java.util.LinkedHashMap; import java.awt.BorderLayout; import java.awt.Color; import java.awt.FlowLayout; import javax.imageio.ImageIO; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import javax.swing.JSplitPane; import javax.swing.border.TitledBorder; import javax.swing.event.TreeExpansionEvent; import javax.swing.event.TreeExpansionListener; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import java.awt.GridBagLayout; import javax.swing.JLabel; import java.awt.GridBagConstraints; import javax.swing.JTextField; import java.awt.Insets; import javax.swing.DefaultListModel; import javax.swing.ImageIcon; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JComboBox; import javax.swing.JTabbedPane; import javax.swing.JTable; import javax.swing.table.TableColumn; import javax.swing.table.TableColumnModel; import javax.swing.tree.TreePath; import javax.swing.JList; import com.vci.client.LogonApplication; import com.vci.client.common.TransmitTreeObject; import com.vci.client.common.objects.DeptObject; import com.vci.client.common.objects.RoleObject; import com.vci.client.common.objects.UserObject; import com.vci.client.common.oq.OQTool; import com.vci.client.framework.delegate.RightManagementClientDelegate; import com.vci.client.framework.systemConfig.stafforgmanage.RightManagementTreeCellRenderer; import com.vci.client.oq.QTClient; import com.vci.client.ui.exception.VCIException; import com.vci.client.ui.locale.LocaleDisplay; import com.vci.client.ui.swing.VCIOptionPane; import com.vci.client.ui.swing.components.VCIJLabel; import com.vci.client.ui.swing.components.VCIJScrollPane; import com.vci.client.ui.table.VCIBaseTableModel; import com.vci.client.ui.table.VCIBaseTableNode; import com.vci.client.ui.tree.VCIBaseTree; import com.vci.client.ui.tree.VCIBaseTreeModel; import com.vci.client.ui.tree.VCIBaseTreeNode; import com.vci.client.workflow.commom.FlowCustomProperties; import com.vci.client.workflow.delegate.ProcessCustomClientDelegate; import com.vci.client.workflow.template.object.ProcessCategoryObject; import com.vci.client.workflow.template.object.ProcessDefinitionObject; import com.vci.common.qt.object.Condition; import com.vci.common.qt.object.Connector; import com.vci.common.qt.object.QueryTemplate; import com.vci.corba.common.VCIError; import com.vci.corba.omd.data.BusinessObject; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Map.Entry; public class LaunchDialog extends JDialog { /** * */ private static final long serialVersionUID = 2539859820247075177L; private final JPanel contentPanel = new JPanel(); private JTextField processName; private JTable dataTable; private JComboBox processTemplate; private JTextArea processDec; private JList taskList; private DefaultListModel taskListModel; private JList userList; private DefaultListModel resultListModel; private DefaultListModel tmpListModel = new DefaultListModel(); private String processType = ""; private boolean saveFlag = false; private VCIBaseTree rightManagementTree; private VCIBaseTreeModel treeModel; private UserObject userInfo; private TransmitTreeObject transmitTreeObject = new TransmitTreeObject(); // private Map> taskAndUserMap = new HashMap>(); private Map> taskAndUserMap = (Map>)new LinkedHashMap(); private Map taskAndUserMap_1 = new HashMap(); private String processTemplateName = ""; private String processNameValue; private String processDecValue; private String userValue ; private String roleValue ; private String departmentValue ; private JScrollPane treeScrollPane; private JPanel panel_2; private VCIBaseTreeNode selectNode; private VCIBaseTreeNode rootNode = new VCIBaseTreeNode("人员组织", "root"); private Map> resMap = new HashMap>(); public String getProcessTemplateName() { return processTemplateName; } public void setProcessTemplateName(String processTemplateName) { this.processTemplateName = processTemplateName; } public JComboBox getProcessTemplate() { return processTemplate; } public void setProcessTemplate(JComboBox processTemplate) { this.processTemplate = processTemplate; } public String getProcessName() { return processNameValue; } public void setProcessName(String processNameValue) { this.processNameValue = processNameValue; this.processName.setText(processNameValue); } public String getProcessDec() { return processDecValue; } public void setProcessDec(String processDecValue) { this.processDecValue = processDecValue; this.processDec.setText(processDecValue); } public Map> getTaskAndUserMap() { return taskAndUserMap; } public void setTaskAndUserMap(Map> taskAndUserMap) { this.taskAndUserMap = taskAndUserMap; } private List resultList = new ArrayList(); private String[] headers ; private Class[] columnTypes ; private VCIBaseTableModel tableModel = null; public boolean isSaveFlag() { return saveFlag; } public void setSaveFlag(boolean saveFlag) { this.saveFlag = saveFlag; } public LaunchDialog(String processType,String[] headers,Map> resMap) { super(LogonApplication.frame,true); setTitle("发起流程"); this.processType = processType; this.resMap = resMap; this.headers = headers; init(); actionListener(); initProcessTemplate(); initObjectData(); hiddenTableColumn(); this.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); this.setLocationRelativeTo(null); // this.setVisible(true); } protected void init() { setBounds(100, 100, 812, 553); getContentPane().setLayout(new BorderLayout()); contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5)); getContentPane().add(contentPanel, BorderLayout.CENTER); contentPanel.setLayout(new BorderLayout(0, 0)); { JSplitPane splitPane = new JSplitPane(); splitPane.setOrientation(JSplitPane.VERTICAL_SPLIT); contentPanel.add(splitPane, BorderLayout.CENTER); { JPanel panel = new JPanel(); panel.setBorder(new TitledBorder(null, "流程信息", TitledBorder.LEADING, TitledBorder.TOP, null, null)); splitPane.setLeftComponent(panel); GridBagLayout gbl_panel = new GridBagLayout(); gbl_panel.columnWidths = new int[]{0, 0, 0, 0}; gbl_panel.rowHeights = new int[]{0, 0, 0, 0, 0}; gbl_panel.columnWeights = new double[]{0.0, 0.0, 1.0, Double.MIN_VALUE}; gbl_panel.rowWeights = new double[]{0.0, 1.0, 0.0, 0.0, Double.MIN_VALUE}; panel.setLayout(gbl_panel); { JLabel label = new JLabel("流程名称"); GridBagConstraints gbc_label = new GridBagConstraints(); gbc_label.insets = new Insets(0, 0, 5, 5); gbc_label.gridx = 1; gbc_label.gridy = 0; panel.add(label, gbc_label); } { processName = new JTextField(); GridBagConstraints gbc_textField = new GridBagConstraints(); gbc_textField.insets = new Insets(0, 0, 5, 0); gbc_textField.fill = GridBagConstraints.HORIZONTAL; gbc_textField.gridx = 2; gbc_textField.gridy = 0; panel.add(processName, gbc_textField); processName.setColumns(10); } { JLabel label = new JLabel("描述信息"); GridBagConstraints gbc_label = new GridBagConstraints(); gbc_label.insets = new Insets(0, 0, 5, 5); gbc_label.gridx = 1; gbc_label.gridy = 1; panel.add(label, gbc_label); } { JScrollPane scrollPane = new JScrollPane(); GridBagConstraints gbc_scrollPane = new GridBagConstraints(); gbc_scrollPane.gridheight = 2; gbc_scrollPane.insets = new Insets(0, 0, 5, 0); gbc_scrollPane.fill = GridBagConstraints.BOTH; gbc_scrollPane.gridx = 2; gbc_scrollPane.gridy = 1; panel.add(scrollPane, gbc_scrollPane); { processDec = new JTextArea(); scrollPane.setViewportView(processDec); } } { JLabel label = new JLabel("流程模板"); GridBagConstraints gbc_label = new GridBagConstraints(); gbc_label.anchor = GridBagConstraints.EAST; gbc_label.insets = new Insets(0, 0, 0, 5); gbc_label.gridx = 1; gbc_label.gridy = 3; panel.add(label, gbc_label); } { processTemplate = new JComboBox(); GridBagConstraints gbc_processTemplate = new GridBagConstraints(); gbc_processTemplate.fill = GridBagConstraints.HORIZONTAL; gbc_processTemplate.gridx = 2; gbc_processTemplate.gridy = 3; panel.add(processTemplate, gbc_processTemplate); } } { JPanel panel = new JPanel(); panel.setBorder(new TitledBorder(null, "流程", TitledBorder.LEADING, TitledBorder.TOP, null, null)); splitPane.setRightComponent(panel); panel.setLayout(new BorderLayout(0, 0)); { JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP); JPanel panel_1 = new JPanel(); tabbedPane.addTab("流程审批数据", panel_1); panel_1.setLayout(new BorderLayout(0, 0)); { JScrollPane scrollPane = new JScrollPane(); panel_1.add(scrollPane, BorderLayout.CENTER); { dataTable = new JTable(); columnTypes = new Class[headers.length]; for(int i=0;i>"); btnNewButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { int selectedIndex = taskList.getSelectedIndex(); if(selectedIndex==-1){ VCIOptionPane.showMessage(LogonApplication.frame, "请选择任务!"); return; } VCIBaseTreeNode clickedNode = (VCIBaseTreeNode) rightManagementTree.getLastSelectedPathComponent(); Object object = clickedNode.getObj(); if (object instanceof RoleObject) { RoleObject role = (RoleObject) object; UserObject[] fetchUserInfoByRoleId; try { fetchUserInfoByRoleId = new RightManagementClientDelegate(LogonApplication.getUserEntityObject()).fetchUserInfoByRoleId(role.getId(), role.getType()); if(fetchUserInfoByRoleId==null||fetchUserInfoByRoleId.length==0){ VCIOptionPane.showMessage(LogonApplication.frame, "该角色下没有用户"); return; } } catch (VCIException e1) { e1.printStackTrace(); } } if (object instanceof DeptObject) { RightManagementClientDelegate del = new RightManagementClientDelegate(LogonApplication.getUserEntityObject()); DeptObject dept = (DeptObject) object; UserObject[] objs; try { objs = del.getUserByDeptId(dept.getId()); if(objs==null||objs.length==0){ VCIOptionPane.showMessage(LogonApplication.frame, "该部门下没有用户"); return; } } catch (VCIException e1) { e1.printStackTrace(); } } addToUserListFromTreeNode(true); taskAndUserMap.put((String) taskList.getSelectedValue(), resultList); taskAndUserMap_1.put((String) taskList.getSelectedValue(), tmpListModel); userList.setModel(resultListModel); userList.updateUI(); } }); GridBagConstraints gbc_btnNewButton = new GridBagConstraints(); gbc_btnNewButton.anchor = GridBagConstraints.NORTHWEST; gbc_btnNewButton.insets = new Insets(0, 0, 5, 0); gbc_btnNewButton.gridx = 0; gbc_btnNewButton.gridy = 2; panel_3.add(btnNewButton, gbc_btnNewButton); } { JButton btnNewButton_1 = new JButton("<<"); btnNewButton_1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { removeUserFromUserList(true); } }); GridBagConstraints gbc_btnNewButton_1 = new GridBagConstraints(); gbc_btnNewButton_1.anchor = GridBagConstraints.NORTHWEST; gbc_btnNewButton_1.gridx = 0; gbc_btnNewButton_1.gridy = 4; panel_3.add(btnNewButton_1, gbc_btnNewButton_1); } } { JScrollPane scrollPane = new JScrollPane(); GridBagConstraints gbc_scrollPane = new GridBagConstraints(); gbc_scrollPane.fill = GridBagConstraints.BOTH; gbc_scrollPane.gridx = 6; gbc_scrollPane.gridy = 1; panel_2.add(scrollPane, gbc_scrollPane); { resultListModel = new DefaultListModel(); userList = new JList(resultListModel); scrollPane.setViewportView(userList); } } JPanel panel_3 = new JPanel(); tabbedPane.addTab("流程模板信息", panel_3); panel_3.setLayout(new BorderLayout(0, 0)); { panel_3.add(jspFlowImage); } panel.add(tabbedPane, BorderLayout.CENTER); } } } { JPanel buttonPane = new JPanel(); buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT)); getContentPane().add(buttonPane, BorderLayout.SOUTH); { JButton okButton = new JButton("启动流程"); okButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { processNameValue = processName.getText().trim(); processDecValue = processDec.getText(); processTemplateName = ((ProcessDefinitionObject)processTemplate.getSelectedItem()).getId(); if(processNameValue==null||"".equals(processNameValue)){ VCIOptionPane.showMessage(LogonApplication.frame, "请填写流程名称!"); return; } if(taskAndUserMap==null){ VCIOptionPane.showMessage(LogonApplication.frame, "请选择候选人!"); return; } if(taskAndUserMap.size()==0){ VCIOptionPane.showMessage(LogonApplication.frame, "请选择候选人!"); return; } int size = taskListModel.getSize(); for(int i=0;i 0 && selectTask.indexOf(":") > 0) { String taskName = selectTask.substring(0, selectTask.indexOf("(")); String deployId = selectTask.substring(selectTask.lastIndexOf(":") + 1, selectTask.lastIndexOf(")")); allCandidatesForTask = new ProcessCustomClientDelegate().getAllCandidatesForTask(deployId, taskName, ""); } else { allCandidatesForTask = new ProcessCustomClientDelegate().getAllCandidatesForTask(procDecObj.getJbpmDeploymentId(), selectTask, ""); } String templateFlag = FlowCustomProperties.getStrPro("workflow.template"); if (templateFlag.equals("1")) { if(allCandidatesForTask.length==1){ if("#{process_applicant}".equals(allCandidatesForTask[0])){ userValue = null; }else{ userValue = allCandidatesForTask[0]; } roleValue = null; departmentValue = null; } if(allCandidatesForTask.length==2){ userValue = allCandidatesForTask[0]; roleValue = allCandidatesForTask[1]; departmentValue = null; } if(allCandidatesForTask.length==3){ userValue = allCandidatesForTask[0]; roleValue = allCandidatesForTask[1]; departmentValue = allCandidatesForTask[2]; } } else if (templateFlag.equals("2")){ constructWorkFlowUserInfo(allCandidatesForTask); } resultList = taskAndUserMap.get(taskList.getSelectedValue()); if(resultList == null){ resultList = new ArrayList(); } resultListModel.clear(); DefaultListModel defaultListModel = taskAndUserMap_1.get(taskList.getSelectedValue()); for(int i=0;i 0) { return true; } } return false; } protected void initUserTree(VCIBaseTreeNode rootNode, String puid) { String userName = LogonApplication.getUserEntityObject().getUserName(); try { userInfo = new RightManagementClientDelegate(LogonApplication.getUserEntityObject()).fetchUserInfoByName(userName); } catch (VCIException e) { e.printStackTrace(); return; } UserObject userObject = new UserObject(); userObject.setId("root"); userNode = new VCIBaseTreeNode("用户", userObject); rootNode.add(userNode); } protected void initRoleTree(VCIBaseTreeNode rootNode, String puid) { String userName = LogonApplication.getUserEntityObject().getUserName(); try { userInfo = new RightManagementClientDelegate(LogonApplication.getUserEntityObject()).fetchUserInfoByName(userName); } catch (VCIException e) { e.printStackTrace(); return; } RoleObject roleObject = new RoleObject(); roleObject.setId("root"); roleNode = new VCIBaseTreeNode(LocaleDisplay.getI18nString("rmip.stafforg.menu.role", "RMIPFramework", getLocale()), roleObject); rootNode.add(roleNode); } protected void initDepartTree(VCIBaseTreeNode rootNode, String puid) { String userName = LogonApplication.getUserEntityObject().getUserName(); try { userInfo = new RightManagementClientDelegate(LogonApplication.getUserEntityObject()).fetchUserInfoByName(userName); } catch (VCIException e) { e.printStackTrace(); return; } DeptObject rootDepartment = new DeptObject(); rootDepartment.setId("root"); departmentNode = new VCIBaseTreeNode( LocaleDisplay.getI18nString("rmip.stafforg.menu.department", "RMIPFramework", getLocale()), rootDepartment); rootNode.add(departmentNode); } protected void addToUserListFromTreeNode(boolean batch){ LinkedList nodeList = new LinkedList(); TreePath[] paths = rightManagementTree.getSelectionPaths(); if(batch && paths != null){ for(TreePath path : paths){ nodeList.add((VCIBaseTreeNode)path.getLastPathComponent()); } } else{ nodeList.add(transmitTreeObject.getCurrentTreeNode()); } for(VCIBaseTreeNode selectNode : nodeList){ if(selectNode == null) continue; Object object = selectNode.getObj(); if (object instanceof UserObject) { UserObject user = (UserObject) object; if("root".equals(user.getId())){ continue; } if(checkUserIdAdded(user)) return; resultListModel.addElement(object); tmpListModel.addElement(object); resultList.add("user:"+user.getUserName()); } if (object instanceof RoleObject) { RoleObject role = (RoleObject) object; if("root".equals(role.getId())){ continue; } if(checkRoleIdAdded(role)) return; resultListModel.addElement(object); tmpListModel.addElement(object); resultList.add("role:"+role.getName()); } if (object instanceof DeptObject) { DeptObject dept = (DeptObject) object; if("root".equals(dept.getId())){ continue; } if(checkDeptIdAdded(dept)) return; resultListModel.addElement(object); tmpListModel.addElement(object); resultList.add("department:"+dept.getName()); } } } protected void removeUserFromUserList(boolean batch){ Object[] selectedIndices = userList.getSelectedValues(); String selectedTaskValue = (String) taskList.getSelectedValue(); if(!batch){ selectedIndices = new Object[]{userList.getSelectedValue()}; } for(int i =0;i> entrySet : resMap.entrySet()){ String key = entrySet.getKey(); // for(int i =0;i value = entrySet.getValue(); for(Entry data : value.entrySet()){ for(int k=0;k userList = new ArrayList(); List roleList = new ArrayList(); List deptList = new ArrayList(); for (int i = 0; i < userInfos.length; i++) { String[] cVal = userInfos[i].split(","); for (int j = 0; j < cVal.length; j++) { String[] valType = cVal[j].split(":"); if (valType.length != 2) { continue; } if (valType[0].equalsIgnoreCase("user")) { userList.add(valType[1]); } else if (valType[0].equalsIgnoreCase("role")) { roleList.add(valType[1]); } else if (valType[0].equalsIgnoreCase("org")) { deptList.add(valType[1]); } } } userList = getUserByPersonID(userList); if (userList.size() > 0) { this.userValue = convertListToString(userList); } if (roleList.size() > 0) { this.roleValue = convertListToString(roleList); } if (deptList.size() > 0 ){ this.departmentValue = convertListToString(deptList); } } private String convertListToString(List list) { String str = Arrays.toString(list.toArray(new String[0])); return str.substring(1, str.length() - 1); } private List getUserByPersonID(List personIdList) { List userList = new ArrayList(); QueryTemplate qt2 = new QueryTemplate(); qt2.setId("btmQuery"); qt2.setBtmType("person"); qt2.setType("btm"); List clauseList = new ArrayList(); clauseList.add("*"); qt2.setClauseList(clauseList); qt2.setQueryChildrenFlag(false); qt2.setRightFlag(false); qt2.setVersion(1); Map map = new HashMap(); Condition condition_ = OQTool.getCondition(map); for(String key : personIdList){ map.put("oid", key); Condition condition = OQTool.getCondition(map); condition_ = OQTool.mergeCondition(condition, condition_, Connector.OR); map.clear(); } qt2.setCondition(condition_); try { BusinessObject[] bos = QTClient.getService().findBTMObjects(qt2.getId(), OQTool.qtTOXMl(qt2).asXML()); for (int i = 0; i < bos.length; i++) { userList.add(bos[i].id); } } catch (VCIError e) { // TODO Auto-generated catch block e.printStackTrace(); } return userList; } }