首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 计算机考试 > 认证考试 > JAVA认证 >

基于Java实现的多层目录结构(2)

2009-03-05 
多层目录结构

  108 * <p>
  109 * 本身转换包含id、name两个属性,子节点转换为children属性的数组
  110 * </p>
  111 *
  112 * @return
  113 */
  114 public JSONObject toJson() {
  115 JSONObject jsonObject = new JSONObject();
  116 try {
  117 jsonObject.put("id", id);
  118 jsonObject.put("name", name);
  119 if (!isEndNode()) {
  120 JSONArray jsonArray = new JSONArray();
  121 for (Node child : getChildren()) {
  122 jsonArray.put(child.toJson());
  123 }
  124 jsonObject.put("children", jsonArray);
  125 }
  126 } catch (JSONException e) {
  127 // ignore
  128 }
  129 return jsonObject;
  130 }

    131
  132 @Override
  133 public int compareTo(Node o) {
  134 return this.getId().compareTo(o.getId());
  135 }
  136
  137 }
  Tree.java:
  1 public class Tree<T extends Node> {
  2
  3 private String type;
  4 private Node root; // root节点
  5 private Map<Integer, T> nodeHolder = new HashMap<Integer, T>();// 节点持有器
  6
  7 private NodeStore<T> nodeStore;
  8
  9 /**
  10 * 将平面的node list构建成树
  11 *
  12 * @throws TreeException
  13 */
  14 public void build() throws TreeException {
  15 List<T> nodes = nodeStore.findByType(type);
  16 // 如果nodes为空,则不做任何处理
  17 if (nodes == null || nodes.isEmpty()) {
  18 return;
  19 }
  20 // 设置root和node持有器
  21 for (T node : nodes) {
  22 if (node.isRootNode()) {
  23 this.root = node;
  24 }
  25 nodeHolder.put(node.getId(), node);
  26 }
  27
  28 // 如果root为空,则build失败了
  29 if (root == null) {
  30 throw new TreeException("no root node found.");
  31 }
  32
  33 // 建立节点之前关系
  34 for (T node : nodes) {
  35 if (node.isRootNode()) {
  36 continue;
  37 }
  38 Node parent = getNodeById(node.getParentId());
  39 if (parent == null) {
  40 throw new TreeException("no parent node found.current node id is:" + node.getId());
  41 }
  42 parent.addChild(node);
  43 }
  44
  45 // 排序
  46 root.sortAllChidren();
  47 }
  48
  49 /**
  50 * 得到root节点
  51 *
  52 * @return
  53 */
  54 public Node getRoot() {
  55 return root;
  56 }
  57
  58 /**
  59 * 根据id得到对应节点
  60 *
  61 * @param id
  62 * @return
  63 */
  64 public Node getNodeById(Integer id) {
  65 return nodeHolder.get(id);
  66 }
  67
  68 public void setType(String type) {
  69 this.type = type;
  70 }
  71
  72 public void setNodeStore(NodeStore nodeStore) {
  73 this.nodeStore = nodeStore;
  74 }
  75
  76 }

 

3COME考试频道为您精心整理,希望对您有所帮助,更多信息在http://www.reader8.com/exam/

热点排行