/* * Copyright (C) 2000-2012 InfoChamp System Corporation * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.gk.ui.client.com.utils; import java.util.Iterator; import java.util.Map; import org.gk.ui.client.com.tree.xml.gkXMLTreePanelIC; import com.extjs.gxt.ui.client.data.ModelData; import com.extjs.gxt.ui.client.widget.treepanel.TreePanel.TreeNode; import com.google.gwt.xml.client.Element; import com.google.gwt.xml.client.Node; public class TreeUtils { private static void appendNodeId(TreeNode node, StringBuffer sb) { String id = node.getModel().get(gkXMLTreePanelIC.ID); if (id == null || id.equals("")) { id = node.getModel().get(gkXMLTreePanelIC.NAME); } sb.append(id); } public static String getNodeId(TreeNode node) { int idx = -1; StringBuffer sb = new StringBuffer(); appendNodeId(node, sb); if (node.getParent() != null) { idx = node.getParent().indexOf(node); } return sb.append(":").append(idx) + ""; } public static String getNodeId(TreeNode putNode, TreeNode node, int seq) { StringBuffer sb = new StringBuffer(); int idx = seq; if (idx >= 0) { idx = putNode.getParent().indexOf(putNode) + seq; putNode = putNode.getParent(); } appendNodeId(putNode, sb); return sb.append(":").append(idx) + ""; } /** * 取得傳進來TreeNode當下的路徑,以及此節點位於父節點的第幾個位置 * * @param node * @return */ public static String getPath(TreeNode node) { int idx = -1; StringBuffer sb = new StringBuffer(); _getPath(node, sb); if (node.getParent() != null) { idx = node.getParent().indexOf(node); } return sb.append(":").append(idx) + ""; } public static String getPath(TreeNode putNode, TreeNode node, int seq) { StringBuffer sb = new StringBuffer(); int idx = seq; if (idx >= 0) { idx = putNode.getParent().indexOf(putNode) + seq; putNode = putNode.getParent(); } _getPath(putNode, sb); String nodeName = node.getModel().get(gkXMLTreePanelIC.NAME); return sb.append('/').append(nodeName).append(":").append(idx) + ""; } private static void _getPath(TreeNode node, StringBuffer sbuf) { String name = node.getModel().get(gkXMLTreePanelIC.NAME); sbuf.insert(0, "/" + name); if (node.getParent() != null) { _getPath(node.getParent(), sbuf); } } public static void updateSelectNode(gkXMLTreePanelIC tree, Map v) { ModelData md = tree.getTree().getSelectionModel().getSelectedItem(); Node parentNode = md.get(gkXMLTreePanelIC.NODE); // 建立新增節點的xml資訊 String name = (String) v.get(gkXMLTreePanelIC.NAME); Element newNode = parentNode.getOwnerDocument().createElement(name); parentNode.appendChild(newNode); // 將設定的資訊抄到node資訊裡面 Iterator<String> it = v.keySet().iterator(); while (it.hasNext()) { String key = it.next(); if (!key.equals(gkXMLTreePanelIC.NAME)) { newNode.setAttribute(key, (String) v.get(key)); } } v.put(gkXMLTreePanelIC.NODE, newNode); // TreeStore store = tree.getTree().getStore(); // store.add(md, v, false); } }