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();
|
}
|
|
/**
|
* 展开树
|
* <p>Description: </p>
|
*
|
* @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();
|
|
|
}
|
|
/**
|
* 根据参数判断当前分类是否是选中状态
|
* <p>Description: </p>
|
*
|
* @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<String,String> condtionMap=new HashMap<>();
|
condtionMap.put("desc", this.clsfName);
|
condtionMap.put("codeLibName",rootNode.toString());
|
|
R r=HttpUtil.sendGet(url,condtionMap,new HashMap<>());
|
List<CodeClassify> 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<List<CodeClassify>>() {
|
});
|
} catch (JsonProcessingException e) {
|
e.printStackTrace();
|
}
|
}
|
}else{
|
VCIOptionPane.showMessage(this,r.getMsg());
|
}
|
return codeClassifyList.toArray(new CodeClassify[]{});
|
}
|
|
/**
|
* 根据ID直接获取子分类,无权限检查
|
* <p>Description: </p>
|
*
|
* @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<String,String> condtionMap=new HashMap<>();
|
condtionMap.put("parentId", parentId );
|
R r=HttpUtil.sendGet(url,condtionMap,new HashMap<>());
|
List<CodeClassify> 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<List<CodeClassify>>() {
|
});
|
} 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);
|
}
|
|
/**
|
* 选择了树节点的事件处理
|
* <p>Description: </p>
|
*
|
* @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;
|
}
|
}
|