package com.vci.ubcs.codeapply; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.vci.base.ui.exception.VCIException; import com.vci.base.ui.swing.VCIOptionPane; import com.vci.base.ui.swing.components.VCIJPanel; import com.vci.base.ui.tree.VCIBaseTree; import com.vci.base.ui.tree.VCIBaseTreeModel; import com.vci.base.ui.tree.VCIBaseTreeNode; import com.vci.ubcs.codeapply.object.CodeClassify; import com.vci.ubcs.codeapply.object.R; import com.vci.ubcs.codeapply.utils.ConfigUtils; import com.vci.ubcs.system.user.entity.User; 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 java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public abstract class CodeApplyFor410TreePanel extends VCIJPanel { /** * */ private static final long serialVersionUID = 3252637341L; private VCIBaseTree tree = null; private VCIBaseTreeModel treeModel = null; private VCIBaseTreeNode rootNode = null; private CodeClassify currentRmType = null; private TransmitTreeObject transmitTreeObject = new TransmitTreeObject(); private User userObj = null; private VCIBaseTreeNode selNode = null; /** * 存储分类的Map,key:分类名称,value:分类值 */ private String clsfName = null; // private String[] clsfVal = new String[2]; private String libName = ""; public CodeApplyFor410TreePanel(CodeClassify currentRmType, User userObj, String clsfName, String libName) { this.currentRmType = currentRmType; this.userObj = userObj; this.clsfName = clsfName; this.libName = libName; if (this.libName == null) { libName = ""; } } public void buildTreePanel(){ initComponents(); } private void initComponents(){ initLeftPanel(); } private void initLeftPanel() { rootNode = new VCIBaseTreeNode(currentRmType.getName(), currentRmType); treeModel = new VCIBaseTreeModel(rootNode); tree = new VCIBaseTree(treeModel, new CodeLibTreeCellRenderer()); selNode = rootNode; if (clsfName == null || clsfName.equals("")) { loadTreeData(rootNode); } else { CodeClassify[] rmTypes = getRMTypeByDescAndLib(); int len = rmTypes.length; addChildrenToParentTreeNode(currentRmType,rootNode,rmTypes, len - 2); } inittreeActions(); } /** * 展开树 *

Description:

* * @author ligang * @time 2013-5-8 * @param rmTypeObj * @param parentNode */ private void addChildrenToParentTreeNode(CodeClassify rmTypeObj, VCIBaseTreeNode parentNode, CodeClassify[] rmTypes, int pos){ String parentId = rmTypeObj.getOid(); CodeClassify[] libs = {}; libs = getChildRMTypeObjects(parentId); for(CodeClassify obj : libs) { VCIBaseTreeNode node = new VCIBaseTreeNode(obj.getName(), obj); treeModel.insertNodeInto(node, parentNode, parentNode.getChildCount()); node.setLeaf(false); node.setExpand(false); if (pos < 0) { continue; } if (checkIsSel(obj, rmTypes[pos])) { selNode = node; addChildrenToParentTreeNode(obj, node, rmTypes, pos - 1); } } parentNode.setLeaf(libs.length == 0); parentNode.setExpand(true); if(tree != null){ tree.expandPath(new TreePath(selNode.getPath())); tree.setSelectionPath(new TreePath(selNode.getPath())); } } private void loadTreeData(VCIBaseTreeNode rootNode){ CodeClassify currentObj = (CodeClassify) rootNode.getObj(); String parentId = currentObj.getOid(); CodeClassify[] libs = {}; libs = getChildRMTypeObjects(parentId); for(CodeClassify obj : libs) { VCIBaseTreeNode node = new VCIBaseTreeNode(obj.getName(), obj); rootNode.add(node); node.setLeaf(false); node.setExpand(false); } rootNode.setLeaf(libs.length == 0); rootNode.setExpand(true); tree.setSelectionPath(new TreePath(selNode)); tree.updateUI(); } /** * 根据参数判断当前分类是否是选中状态 *

Description:

* * @author ligang * @time 2013-5-8 * @param obj * @return */ private boolean checkIsSel(CodeClassify obj, CodeClassify selObj) { if(obj.getId().equals(selObj.getId())) { return true; } return false; } private void inittreeActions(){ tree.addTreeSelectionListener(new TreeSelectionListener() { @Override public void valueChanged(TreeSelectionEvent e) { if(!e.isAddedPath()) return; leftTree_valueChanged(e); } }); tree.addTreeExpansionListener(new TreeExpansionListener() { @Override public void treeExpanded(TreeExpansionEvent e) { tree_treeExpanded_local(e); } @Override public void treeCollapsed(TreeExpansionEvent e) { } }); } /** * 根据分类描述获取传入分类的所有父分类信息 * @return */ private CodeClassify[] getRMTypeByDescAndLib() { CodeClassify[] objs = new CodeClassify[]{}; String url= ConfigUtils.getConfigValue("410.PDM.leftdescLibNode.url","http://127.0.0.1:36014/codeApplySwingController/getRMTypeByDescAndLib"); /**系统只加载代码项 如果libName不为空,直接获取对应的代码项**/ Map condtionMap=new HashMap<>(); condtionMap.put("desc", this.clsfName); condtionMap.put("codeLibName",rootNode.toString()); R r=HttpUtil.sendGet(url,condtionMap,new HashMap<>()); List codeClassifyList = new ArrayList<>(); if(r.isSuccess()){ Object object= r.getData(); if(object!=null) { ObjectMapper objectMapper = new ObjectMapper(); try { codeClassifyList = objectMapper.readValue(object.toString(), new com.fasterxml.jackson.core.type.TypeReference>() { }); } catch (JsonProcessingException e) { e.printStackTrace(); } } }else{ VCIOptionPane.showMessage(this,r.getMsg()); } return codeClassifyList.toArray(new CodeClassify[]{}); } /** * 根据ID直接获取子分类,无权限检查 *

Description:

* * @author xchao * @time 2013-3-20 * @param parentId * @return */ private CodeClassify[] getChildRMTypeObjects(String parentId){ String url= ConfigUtils.getConfigValue("410.PDM.leftClsfNode.url","http://127.0.0.1:36014/codeApplySwingController/selectCodeClassifyVOByParentId"); /**系统只加载代码项 如果libName不为空,直接获取对应的代码项**/ Map condtionMap=new HashMap<>(); condtionMap.put("parentId", parentId ); R r=HttpUtil.sendGet(url,condtionMap,new HashMap<>()); List codeClassifyList = new ArrayList<>(); if(r.isSuccess()){ Object object= r.getData(); if(object!=null) { ObjectMapper objectMapper = new ObjectMapper(); try { codeClassifyList = objectMapper.readValue(object.toString(), new com.fasterxml.jackson.core.type.TypeReference>() { }); } catch (JsonProcessingException e) { e.printStackTrace(); } } }else{ VCIOptionPane.showMessage(this,r.getMsg()); } return codeClassifyList.toArray(new CodeClassify[]{}); } private void tree_treeExpanded_local(TreeExpansionEvent e) { TreePath treePath = e.getPath(); VCIBaseTreeNode treeNode = (VCIBaseTreeNode)treePath.getLastPathComponent(); if(treeNode.isExpand()) return; if(!(treeNode.getObj() instanceof CodeClassify)) return; CodeClassify rmTypeObject = (CodeClassify)treeNode.getObj(); CodeClassify[] childs = null; childs = getChildRMTypeObjects(rmTypeObject.getOid()); addRMTypeObjectsToParentTreeNode(childs, treeNode); treeNode.setExpand(true); treeNode.setLeaf(treeModel.getChildCount(treeNode) == 0); } private void addRMTypeObjectsToParentTreeNode(CodeClassify[] objs, VCIBaseTreeNode parentNode){ for(CodeClassify obj : objs){ VCIBaseTreeNode node = new VCIBaseTreeNode(obj.getName(), obj); treeModel.insertNodeInto(node, parentNode, treeModel.getChildCount(parentNode)); } } private void leftTree_valueChanged(TreeSelectionEvent e) { tree_valueChanged(e); } /** * 选择了树节点的事件处理 *

Description:

* * @author xchao * @time 2012-5-26 * @param e */ public abstract void tree_valueChanged(TreeSelectionEvent e); public VCIBaseTree getTree() { return tree; } public void setTree(VCIBaseTree tree) { this.tree = tree; } public VCIBaseTreeModel getTreeModel() { return treeModel; } public void setTreeModel(VCIBaseTreeModel treeModel) { this.treeModel = treeModel; } public VCIBaseTreeNode getRootNode() { return rootNode; } public void setRootNode(VCIBaseTreeNode rootNode) { this.rootNode = rootNode; } public TransmitTreeObject getTransmitTreeObject() { return transmitTreeObject; } public void setTransmitTreeObject(TransmitTreeObject transmitTreeObject) { this.transmitTreeObject = transmitTreeObject; } public VCIBaseTreeNode getSelNode() { return selNode; } public void setSelNode(VCIBaseTreeNode selNode) { this.selNode = selNode; } }