package com.vci.client.workflow.task; import java.awt.BorderLayout; import java.util.ArrayList; import java.util.List; import javax.swing.JComponent; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JSplitPane; import javax.swing.event.TreeExpansionEvent; import javax.swing.event.TreeExpansionListener; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.tree.TreePath; import javax.swing.tree.TreeSelectionModel; import com.vci.client.LogonApplication; import com.vci.client.common.VCIBasePanel; import com.vci.client.framework.rightConfig.object.FunctionObject; 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.ClientHelper; import com.vci.client.workflow.template.ProcessDefinitionPanel; import com.vci.client.workflow.template.object.ProcessCategoryObject; import com.vci.client.workflow.template.object.ProcessDefinitionObject; public class ProcessTaskPanel extends VCIBasePanel { private static final long serialVersionUID = 3904757499482930815L; private VCIBaseTree leftTree = null; private VCIBaseTreeModel treeModel = null; private VCIBaseTreeNode rootNode = null; private ProcessTaskToolBar toolBar = null; JComponent rightPanel = null; JPanel rightEmptyPanel = new JPanel(); private JSplitPane splitPane; FunctionObject funcObj = new FunctionObject(); public ProcessTaskPanel(FunctionObject funcObj){ super(funcObj); LogonApplication.getUserEntityObject().setModules(this.getClass().getName()); init(); } private void init() { JScrollPane leftScrPane = new JScrollPane(); splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftScrPane, rightEmptyPanel); splitPane.setDividerSize(10); splitPane.setContinuousLayout(true); splitPane.setOneTouchExpandable(true); splitPane.setDividerLocation(200); this.setLayout(new BorderLayout()); this.add(splitPane, BorderLayout.CENTER); initLeftPanel(leftScrPane); } private void initLeftPanel(JScrollPane leftJsp) { String rootObj = "root"; rootNode = new VCIBaseTreeNode(this.getI18nString("treeRootNodeName"), rootObj); treeModel = new VCIBaseTreeModel(rootNode); leftTree = new VCIBaseTree(treeModel, new ProcessTaskTreeCellRender()); leftTree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); leftTree.addTreeSelectionListener(new TreeSelectionListener() { public void valueChanged(TreeSelectionEvent e) { treeValueChanged(e); } }); leftTree.addTreeExpansionListener(new TreeExpansionListener() { public void treeExpanded(TreeExpansionEvent event) { TreePath treePath = event.getPath(); VCIBaseTreeNode selectNode = (VCIBaseTreeNode) treePath.getLastPathComponent(); if (!selectNode.isExpand()&&!selectNode.getObj().equals("root")) { selectNode.removeAllChildren(); getExpandTreeData(selectNode); } } public void treeCollapsed(TreeExpansionEvent event) { } }); leftJsp.getViewport().add(leftTree); initLeftTree(rootNode); } protected void treeValueChanged(TreeSelectionEvent e) { TreePath treePath = e.getPath(); if (treePath == null) { splitPane.setRightComponent(rightEmptyPanel); return; } VCIBaseTreeNode selectNode = (VCIBaseTreeNode) treePath.getLastPathComponent(); Object object = selectNode.getObj(); ProcessDefinitionObject processDefinitionObject = null; if (object instanceof ProcessDefinitionObject) { processDefinitionObject = (ProcessDefinitionObject) object; if (rightPanel == null) { rightPanel = new ProcessDefinitionPanel(); } ((ProcessDefinitionPanel) rightPanel).setObject(processDefinitionObject); splitPane.setRightComponent(rightPanel); } else if (object instanceof IdName) { IdName idName = (IdName) object; if ("todotask".equals(idName.getId())) { TodoTaskPanel instance = TodoTaskPanel.getInstance(funcObj,""); // instance.initData(); instance.initializeData(); splitPane.setRightComponent(instance); } else if ("donetask".equals(idName.getId())) { DoneTaskPanel doneTaskPanel = DoneTaskPanel.getInstance(funcObj,""); doneTaskPanel.initData(); splitPane.setRightComponent(doneTaskPanel); } else if ("tracktask".equals(idName.getId())) { TrackTaskPanel instance = TrackTaskPanel.getInstance(funcObj,""); instance.initializeData(); splitPane.setRightComponent(instance); } // else if("CCtask".equals(idName.getId())){ // CCTaskPanel instance = CCTaskPanel.getInstance(); //// instance.initData(); // instance.initializeData(); // splitPane.setRightComponent(instance); // } else if("processControl".equals(idName.getId())){ ProcessControlPanel instance = ProcessControlPanel.getInstance(""); // instance.initData(); instance.initializeData(); splitPane.setRightComponent(instance); } } else { splitPane.setRightComponent(rightEmptyPanel); } int location = splitPane.getDividerLocation(); splitPane.setDividerLocation(location); } public ProcessTaskToolBar getSpecialToolBar() { if (toolBar == null) { toolBar = new ProcessTaskToolBar(LogonApplication.frame, this); } return toolBar; } /** * 返回当前选中的树节点 * * @return */ public VCIBaseTreeNode getCurrentSelectedTreeNode() { return (VCIBaseTreeNode) this.leftTree.getLastSelectedPathComponent(); } public Object getCurrentSelectedObject() { return this.getCurrentSelectedTreeNode().getObj(); } /** * toolbar上的刷新按钮会调用该方法 */ public void updateTree() { ((VCIBaseTreeNode) this.leftTree.getLastSelectedPathComponent()).removeAllChildren(); getExpandTreeData(((VCIBaseTreeNode) this.leftTree.getLastSelectedPathComponent())); this.leftTree.updateUI(); } private void getExpandTreeData(VCIBaseTreeNode treeNode) { // try{ String processCategoryId = ""; Object nodeObject = treeNode.getObj(); if (nodeObject instanceof String && nodeObject.toString().equals("root")) { initLeftTree(rootNode); } else { /* * if (nodeObject instanceof ProcessCategoryObject) { processCategoryId = ((ProcessCategoryObject)nodeObject).getId(); } else if (nodeObject instanceof RMTypeObject) { * TreeNode[] treeNodes = treeNode.getPath(); processCategoryId = ((ProcessCategoryObject)(((VCIBaseTreeNode)treeNodes[1]).getObj())).getId(); } //TODO refresh tree * from db ProcessCategoryObject[] processCategories = new ProcessCustomClientDelegate(LogonApplication.getUserEntityObject()).getProcessCategories(processCategoryId); * for (ProcessCategoryObject obj : processCategories) { VCIBaseTreeNode node = new VCIBaseTreeNode(obj.getName(), obj); treeModel.insertNodeInto(node, treeNode, * treeNode.getChildCount()); treeNode.setExpand(true); } * * ProcessDefinitionObject[] processDefinitions = new ProcessCustomClientDelegate(LogonApplication.getUserEntityObject()).getProcessDefinitions(processCategoryId); for * (ProcessDefinitionObject processDefinitionObject : processDefinitions) { VCIBaseTreeNode node = new VCIBaseTreeNode(processDefinitionObject.getName(), * processDefinitionObject); treeModel.insertNodeInto(node, treeNode, treeNode.getChildCount()); treeNode.setExpand(true); } */ } /* * }catch(VCIException ex){ VCIOptionPane.showError(LogonApplication.frame, "RMIPWorkflow", ex); } */ } public void initLeftTree() { initLeftTree(this.rootNode); } public void initLeftTree(VCIBaseTreeNode treeNode) { // try{ /* * ProcessCustomClientDelegate delSrv = new ProcessCustomClientDelegate(LogonApplication.getUserEntityObject()); ProcessCategoryObject[] processCategories = * delSrv.getProcessCategories("root"); */ treeNode.removeAllChildren(); List taskTypes = getTaskTypes(); for (IdName obj : taskTypes) { VCIBaseTreeNode node = new VCIBaseTreeNode(obj.getName(), obj); node.setLeaf(true); treeNode.add(node); } this.leftTree.setSelectionPath(new TreePath(treeNode)); this.leftTree.updateUI(); /* * } catch (VCIException e) { VCIOptionPane.showError(LogonApplication.frame, "RMIPWorkflow", e); return; } */ } private List getTaskTypes() { List taskTypes = new ArrayList(); // taskTypes.add(new IdName("CCtask", "抄送给我的任务","0")); taskTypes.add(new IdName("todotask", "待办任务","")); taskTypes.add(new IdName("donetask", "已办任务","")); taskTypes.add(new IdName("tracktask", "跟踪任务","")); // taskTypes.add(new IdName("processControl", "流程监控","")); return taskTypes; } public void setEmptyPanel() { splitPane.setRightComponent(rightEmptyPanel); int location = splitPane.getDividerLocation(); splitPane.setDividerLocation(location); } public void addNewObjectToTree(ProcessCategoryObject object) { VCIBaseTreeNode newNode = new VCIBaseTreeNode(object.getName(), object); this.treeModel.insertNodeInto(newNode, getCurrentSelectedTreeNode(), getCurrentSelectedTreeNode().getChildCount()); this.leftTree.setSelectionPath(new TreePath(newNode.getPath())); this.leftTree.updateUI(); } public void refreshModifyObjectToTree(ProcessCategoryObject object) { VCIBaseTreeNode modifyNode = getCurrentSelectedTreeNode(); modifyNode.setUserObject(object.getName()); modifyNode.setObj(object); this.leftTree.setSelectionPath(new TreePath(modifyNode.getPath())); this.leftTree.updateUI(); } public void removeNode(VCIBaseTreeNode treeNode) { treeNode.removeFromParent(); this.leftTree.updateUI(); } public VCIBaseTree getLeftTree() { return leftTree; } private String getI18nString(String spCode) { return ClientHelper.getI18nStringForWorkflow(this.getClass().getName() + "." + spCode, this.getLocale()); } }