IDEMPIERE-186 Zk6: Rendering of organization tree throw NPE
This commit is contained in:
parent
2e6f20aabd
commit
acedf65ff7
|
@ -12,6 +12,7 @@
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
package org.adempiere.webui.component;
|
package org.adempiere.webui.component;
|
||||||
|
|
||||||
|
import org.adempiere.webui.util.TreeUtils;
|
||||||
import org.adempiere.webui.window.FDialog;
|
import org.adempiere.webui.window.FDialog;
|
||||||
import org.compiere.model.MTree;
|
import org.compiere.model.MTree;
|
||||||
import org.compiere.model.MTreeNode;
|
import org.compiere.model.MTreeNode;
|
||||||
|
@ -146,6 +147,10 @@ public class ADTreeOnDropListener implements EventListener {
|
||||||
treeModel.addNode(newParent, movingNode, index);
|
treeModel.addNode(newParent, movingNode, index);
|
||||||
|
|
||||||
int path[] = treeModel.getPath(movingNode);
|
int path[] = treeModel.getPath(movingNode);
|
||||||
|
if (TreeUtils.isOnInitRenderPosted(tree))
|
||||||
|
{
|
||||||
|
tree.onInitRender();
|
||||||
|
}
|
||||||
Treeitem movingItem = tree.renderItemByPath(path);
|
Treeitem movingItem = tree.renderItemByPath(path);
|
||||||
tree.setSelectedItem(movingItem);
|
tree.setSelectedItem(movingItem);
|
||||||
Events.sendEvent(tree, new Event(Events.ON_SELECT, tree));
|
Events.sendEvent(tree, new Event(Events.ON_SELECT, tree));
|
||||||
|
|
|
@ -88,7 +88,7 @@ public class SimpleTreeModel extends org.zkoss.zul.DefaultTreeModel implements T
|
||||||
treeCols.appendChild(treeCol);
|
treeCols.appendChild(treeCol);
|
||||||
tree.setPageSize(-1);
|
tree.setPageSize(-1);
|
||||||
try {
|
try {
|
||||||
tree.setTreeitemRenderer(treeModel);
|
tree.setItemRenderer(treeModel);
|
||||||
tree.setModel(treeModel);
|
tree.setModel(treeModel);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.log(Level.SEVERE, "Failed to setup tree");
|
logger.log(Level.SEVERE, "Failed to setup tree");
|
||||||
|
@ -106,10 +106,11 @@ public class SimpleTreeModel extends org.zkoss.zul.DefaultTreeModel implements T
|
||||||
SimpleTreeModel model = null;
|
SimpleTreeModel model = null;
|
||||||
Enumeration nodeEnum = root.children();
|
Enumeration nodeEnum = root.children();
|
||||||
|
|
||||||
DefaultTreeNode stRoot = new DefaultTreeNode(root, new ArrayList());
|
DefaultTreeNode stRoot = new DefaultTreeNode(root, nodeEnum.hasMoreElements() ? new ArrayList() : null);
|
||||||
while(nodeEnum.hasMoreElements()) {
|
while(nodeEnum.hasMoreElements()) {
|
||||||
MTreeNode childNode = (MTreeNode)nodeEnum.nextElement();
|
MTreeNode childNode = (MTreeNode)nodeEnum.nextElement();
|
||||||
DefaultTreeNode stNode = new DefaultTreeNode(childNode, new ArrayList());
|
DefaultTreeNode stNode = childNode.getChildCount() > 0 ? new DefaultTreeNode(childNode, new ArrayList())
|
||||||
|
: new DefaultTreeNode(childNode);
|
||||||
stRoot.getChildren().add(stNode);
|
stRoot.getChildren().add(stNode);
|
||||||
if (childNode.getChildCount() > 0) {
|
if (childNode.getChildCount() > 0) {
|
||||||
populate(stNode, childNode);
|
populate(stNode, childNode);
|
||||||
|
@ -123,7 +124,8 @@ public class SimpleTreeModel extends org.zkoss.zul.DefaultTreeModel implements T
|
||||||
Enumeration nodeEnum = root.children();
|
Enumeration nodeEnum = root.children();
|
||||||
while(nodeEnum.hasMoreElements()) {
|
while(nodeEnum.hasMoreElements()) {
|
||||||
MTreeNode childNode = (MTreeNode)nodeEnum.nextElement();
|
MTreeNode childNode = (MTreeNode)nodeEnum.nextElement();
|
||||||
DefaultTreeNode stChildNode = new DefaultTreeNode(childNode, new ArrayList());
|
DefaultTreeNode stChildNode = childNode.getChildCount() > 0 ? new DefaultTreeNode(childNode, new ArrayList())
|
||||||
|
: new DefaultTreeNode(childNode);
|
||||||
stNode.getChildren().add(stChildNode);
|
stNode.getChildren().add(stChildNode);
|
||||||
if (childNode.getChildCount() > 0) {
|
if (childNode.getChildCount() > 0) {
|
||||||
populate(stChildNode, childNode);
|
populate(stChildNode, childNode);
|
||||||
|
@ -135,7 +137,8 @@ public class SimpleTreeModel extends org.zkoss.zul.DefaultTreeModel implements T
|
||||||
* @param ti
|
* @param ti
|
||||||
* @param node
|
* @param node
|
||||||
*/
|
*/
|
||||||
public void render(Treeitem ti, Object node) {
|
@Override
|
||||||
|
public void render(Treeitem ti, Object node, int index) {
|
||||||
Treecell tc = new Treecell(Objects.toString(node));
|
Treecell tc = new Treecell(Objects.toString(node));
|
||||||
Treerow tr = null;
|
Treerow tr = null;
|
||||||
if(ti.getTreerow()==null){
|
if(ti.getTreerow()==null){
|
||||||
|
@ -164,7 +167,7 @@ public class SimpleTreeModel extends org.zkoss.zul.DefaultTreeModel implements T
|
||||||
public void addNode(DefaultTreeNode newNode) {
|
public void addNode(DefaultTreeNode newNode) {
|
||||||
DefaultTreeNode root = (DefaultTreeNode) getRoot();
|
DefaultTreeNode root = (DefaultTreeNode) getRoot();
|
||||||
root.getChildren().add(newNode);
|
root.getChildren().add(newNode);
|
||||||
fireEvent(root, root.getChildCount() - 1, root.getChildCount() - 1, TreeDataEvent.INTERVAL_ADDED);
|
fireEvent(TreeDataEvent.INTERVAL_ADDED, getPath(root), root.getChildCount() - 1, root.getChildCount() - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -191,8 +194,8 @@ public class SimpleTreeModel extends org.zkoss.zul.DefaultTreeModel implements T
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
parentNode.getChildren().remove(path[index]);
|
parentNode.getChildren().remove(path[index]);
|
||||||
fireEvent(parentNode, path[index], path[index], TreeDataEvent.INTERVAL_REMOVED);
|
fireEvent(TreeDataEvent.INTERVAL_REMOVED, getPath(parentNode), path[index], path[index]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -256,8 +259,15 @@ public class SimpleTreeModel extends org.zkoss.zul.DefaultTreeModel implements T
|
||||||
*/
|
*/
|
||||||
public void addNode(DefaultTreeNode newParent, DefaultTreeNode newNode,
|
public void addNode(DefaultTreeNode newParent, DefaultTreeNode newNode,
|
||||||
int index) {
|
int index) {
|
||||||
newParent.getChildren().add(index, newNode);
|
DefaultTreeNode parent = newParent;
|
||||||
fireEvent(newParent, index, index, TreeDataEvent.INTERVAL_ADDED);
|
if (newParent.getChildren() == null) {
|
||||||
|
parent = new DefaultTreeNode(newParent.getData(), new ArrayList());
|
||||||
|
newParent.getParent().insert(parent, newParent.getParent().getIndex(newParent));
|
||||||
|
removeNode(newParent);
|
||||||
|
}
|
||||||
|
|
||||||
|
parent.getChildren().add(index, newNode);
|
||||||
|
fireEvent(TreeDataEvent.INTERVAL_ADDED, getPath(parent), index, index);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -290,13 +300,7 @@ public class SimpleTreeModel extends org.zkoss.zul.DefaultTreeModel implements T
|
||||||
DefaultTreeNode parent = getParent(node);
|
DefaultTreeNode parent = getParent(node);
|
||||||
if (parent != null) {
|
if (parent != null) {
|
||||||
int i = parent.getChildren().indexOf(node);
|
int i = parent.getChildren().indexOf(node);
|
||||||
fireEvent(parent, i, i, TreeDataEvent.CONTENTS_CHANGED);
|
fireEvent(TreeDataEvent.CONTENTS_CHANGED, getPath(parent), i, i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(Treeitem arg0, Object arg1, int arg2) throws Exception {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,6 +47,7 @@ import org.adempiere.webui.editor.WEditorPopupMenu;
|
||||||
import org.adempiere.webui.editor.WebEditorFactory;
|
import org.adempiere.webui.editor.WebEditorFactory;
|
||||||
import org.adempiere.webui.event.ContextMenuListener;
|
import org.adempiere.webui.event.ContextMenuListener;
|
||||||
import org.adempiere.webui.util.GridTabDataBinder;
|
import org.adempiere.webui.util.GridTabDataBinder;
|
||||||
|
import org.adempiere.webui.util.TreeUtils;
|
||||||
import org.adempiere.webui.window.FDialog;
|
import org.adempiere.webui.window.FDialog;
|
||||||
import org.compiere.model.DataStatusEvent;
|
import org.compiere.model.DataStatusEvent;
|
||||||
import org.compiere.model.DataStatusListener;
|
import org.compiere.model.DataStatusListener;
|
||||||
|
@ -982,6 +983,11 @@ DataStatusListener, IADTabpanel, VetoableChangeListener
|
||||||
|
|
||||||
private void setSelectedNode(int recordId) {
|
private void setSelectedNode(int recordId) {
|
||||||
if (recordId <= 0) return;
|
if (recordId <= 0) return;
|
||||||
|
|
||||||
|
//force on init render
|
||||||
|
if (TreeUtils.isOnInitRenderPosted(treePanel.getTree())) {
|
||||||
|
treePanel.getTree().onInitRender();
|
||||||
|
}
|
||||||
|
|
||||||
if (treePanel.getTree().getSelectedItem() != null) {
|
if (treePanel.getTree().getSelectedItem() != null) {
|
||||||
DefaultTreeNode treeNode = (DefaultTreeNode) treePanel.getTree().getSelectedItem().getValue();
|
DefaultTreeNode treeNode = (DefaultTreeNode) treePanel.getTree().getSelectedItem().getValue();
|
||||||
|
@ -994,7 +1000,7 @@ DataStatusListener, IADTabpanel, VetoableChangeListener
|
||||||
if (treeNode != null) {
|
if (treeNode != null) {
|
||||||
int[] path = model.getPath(treeNode);
|
int[] path = model.getPath(treeNode);
|
||||||
Treeitem ti = treePanel.getTree().renderItemByPath(path);
|
Treeitem ti = treePanel.getTree().renderItemByPath(path);
|
||||||
treePanel.getTree().setSelectedItem(ti);
|
treePanel.getTree().selectItem(ti);
|
||||||
} else {
|
} else {
|
||||||
addNewNode();
|
addNewNode();
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,6 +28,12 @@ import org.zkoss.zul.Treeitem;
|
||||||
*/
|
*/
|
||||||
public class TreeUtils {
|
public class TreeUtils {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* copy from Tree.java
|
||||||
|
*/
|
||||||
|
private static final String ATTR_ON_INIT_RENDER_POSTED =
|
||||||
|
"org.zkoss.zul.Tree.onInitLaterPosted";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Collapse all nodes
|
* Collapse all nodes
|
||||||
* @param tree
|
* @param tree
|
||||||
|
@ -126,4 +132,11 @@ public class TreeUtils {
|
||||||
traverse(model, child, action);
|
traverse(model, child, action);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isOnInitRenderPosted(Tree tree) {
|
||||||
|
if (tree.getAttribute(ATTR_ON_INIT_RENDER_POSTED) != null) {
|
||||||
|
return ((Boolean)tree.getAttribute(ATTR_ON_INIT_RENDER_POSTED)).booleanValue();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue