r1080 - in lutinjaxx/trunk/jaxx-core: . src/main/java/jaxx/runtime/swing/navigation
Author: tchemit Date: 2008-12-13 09:36:23 +0000 (Sat, 13 Dec 2008) New Revision: 1080 Modified: lutinjaxx/trunk/jaxx-core/changelog.txt lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/swing/navigation/NavigationTreeCellRenderer.java lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/swing/navigation/NavigationTreeModel.java lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/swing/navigation/NavigationTreeModelBuilder.java lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/swing/navigation/NavigationUtil.java Log: - improve navigation tree node rendering with some caches - introduce a ChildBuilder to simplify building of child nodes from a collection or array Modified: lutinjaxx/trunk/jaxx-core/changelog.txt =================================================================== --- lutinjaxx/trunk/jaxx-core/changelog.txt 2008-12-12 20:15:32 UTC (rev 1079) +++ lutinjaxx/trunk/jaxx-core/changelog.txt 2008-12-13 09:36:23 UTC (rev 1080) @@ -1,5 +1,7 @@ 0.8 ??? 2009???? - +* 20081213 [chemit] - improve navigation tree node rendering with some caches + - introduce a ChildBuilder to simplify building of child nodes from a collection or array + 0.7 chemit 20081210 * 20081210 [chemit] - fix bug 1751 * 20081210 [chemit] - improve JAXXButtonGroup (add ActionChangeListener and toolTipText mecanism) Modified: lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/swing/navigation/NavigationTreeCellRenderer.java =================================================================== --- lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/swing/navigation/NavigationTreeCellRenderer.java 2008-12-12 20:15:32 UTC (rev 1079) +++ lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/swing/navigation/NavigationTreeCellRenderer.java 2008-12-13 09:36:23 UTC (rev 1080) @@ -44,7 +44,9 @@ if (renderer != null) { value = renderer.toString(context); long t2 = System.nanoTime(); - log.info("use renderer [" + (t++) + "]<" + row + ">" + renderer.decorator + " <" + StringUtil.convertTime(t0, t1) + "/" + StringUtil.convertTime(t1, t2) + ">"); + if (log.isDebugEnabled()) { + log.debug("use renderer [" + (t++) + "]<" + row + ">" + renderer.decorator + " <" + StringUtil.convertTime(t0, t1) + "/" + StringUtil.convertTime(t1, t2) + ">"); + } } } @@ -58,7 +60,7 @@ // NodeRenderer used as userObject NavigationTreeNode navigationTreeNode = (NavigationTreeNode) value; - // could have a cached value ( + render = (NodeRenderer) navigationTreeNode.getUserObject(); } return render; Modified: lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/swing/navigation/NavigationTreeModel.java =================================================================== --- lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/swing/navigation/NavigationTreeModel.java 2008-12-12 20:15:32 UTC (rev 1079) +++ lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/swing/navigation/NavigationTreeModel.java 2008-12-13 09:36:23 UTC (rev 1080) @@ -198,7 +198,7 @@ @Override public void nodeChanged(TreeNode node) { NavigationTreeNode n = (NavigationTreeNode) node; - n.clearRendererCachedValues(); + n.clearCache(); super.nodeChanged(node); } @@ -226,6 +226,9 @@ /** jxPath to process to obtain real value associated from context with the node (can be null) */ protected String jaxxContextEntryPath; + /** cache of bean associated with bean to improve performance */ + protected transient Object cachedBean; + /** renderer of the node */ protected NodeRenderer renderer; @@ -371,9 +374,16 @@ public Object getJAXXContextValue(JAXXContext context) { Object result; + if (cachedBean != null) { + // use cached bean + return cachedBean; + } + if (getJaxxContextEntryDef() != null && jaxxContextEntryPath == null) { // the node maps directly a value in context, with no jxpath resolving result = getJaxxContextEntryDef().getContextValue(context); + // save in cache + setCachedBean(result); return result; } // find the first ancestor node with a context def @@ -400,6 +410,9 @@ parentBean = jxcontext.getValue(parentNode.jaxxContextEntryPath); } + // save in cache + parentNode.setCachedBean(parentBean); + if (this == parentNode) { // current node is the node matching the context entry value and no jxpath is found return parentBean; @@ -431,6 +444,9 @@ result = jxcontext.getValue(jxpathExpression); + // save in cache + setCachedBean(result); + return result; } @@ -500,16 +516,31 @@ return ancestor.computeJXPath(newExpr, parentNode); } - public void clearRendererCachedValues() { + public void clearCache() { + + // clear bean cache + cachedBean = null; + + // clear render cache if (renderer != null) { renderer.setRendererCachedValue(null); } + + // clear cache in childs Enumeration childs = this.children(); while (childs.hasMoreElements()) { NavigationTreeNode o = (NavigationTreeNode) childs.nextElement(); - o.clearRendererCachedValues(); + o.clearCache(); } } + + public Object getCachedBean() { + return cachedBean; + } + + public void setCachedBean(Object cachedBean) { + this.cachedBean = cachedBean; + } } } Modified: lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/swing/navigation/NavigationTreeModelBuilder.java =================================================================== --- lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/swing/navigation/NavigationTreeModelBuilder.java 2008-12-12 20:15:32 UTC (rev 1079) +++ lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/swing/navigation/NavigationTreeModelBuilder.java 2008-12-13 09:36:23 UTC (rev 1080) @@ -95,4 +95,61 @@ return parentNode; } + public static abstract class ChildBuilder<O> { + + protected NavigationTreeModelBuilder builder; + + protected ChildBuilder(NavigationTreeModelBuilder builder) { + this.builder = builder; + } + + protected abstract void init(Class<? extends O> klass); + + protected abstract Decorator<? extends O> getDecorator(O child); + + protected abstract String getJXPath(O child); + + protected abstract String getNavigationPath(O child); + + public void build(NavigationTreeNode parent, boolean cacheValues, Class<? extends O> klass, java.util.Collection<? extends O> beans, Class<? extends JAXXObject> ui, Class<? extends JAXXAction> actionClass) { + + if (beans == null || beans.isEmpty()) { + // no bean to treate + return; + } + + init(klass); + + NavigationTreeNode node; + + for (O o : beans) { + node = builder.build(parent, getDecorator(o), getJXPath(o), getNavigationPath(o), ui, actionClass); + if (cacheValues) { + // cache the bean value to improve performance + node.setCachedBean(o); + } + } + } + + public void build(NavigationTreeNode parent, boolean cacheValues, Class<? extends O> klass, O[] beans, Class<? extends JAXXObject> ui, Class<? extends JAXXAction> actionClass) { + + if (beans == null || beans.length == 0) { + // no bean to treate + return; + } + + init(klass); + + NavigationTreeNode node; + + for (O o : beans) { + node = builder.build(parent, getDecorator(o), getJXPath(o), getNavigationPath(o), ui, actionClass); + if (cacheValues) { + // cache the bean value to improve performance + node.setCachedBean(o); + } + } + } + } + } Modified: lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/swing/navigation/NavigationUtil.java =================================================================== --- lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/swing/navigation/NavigationUtil.java 2008-12-12 20:15:32 UTC (rev 1079) +++ lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/swing/navigation/NavigationUtil.java 2008-12-13 09:36:23 UTC (rev 1080) @@ -145,7 +145,9 @@ public void setRendererCachedValue(String rendererCachedValue) { this.rendererCachedValue = rendererCachedValue; - log.info(rendererCachedValue); + if (log.isDebugEnabled()) { + log.debug(rendererCachedValue); + } } }
participants (1)
-
tchemit@users.labs.libre-entreprise.org