Author: tchemit Date: 2010-03-31 11:22:35 +0200 (Wed, 31 Mar 2010) New Revision: 1821 Log: - add adjustingValue state on NavigationMode to not fires any event - clean generics code on Sort methods (again...) Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/navigation/AbstractNavigationModel.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/navigation/AbstractNavigationModelBuilder.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/navigation/NavigationModel.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/navigation/tree/NavigationTreeModel.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/navigation/tree/NavigationTreeNode.java Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/navigation/AbstractNavigationModel.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/navigation/AbstractNavigationModel.java 2010-03-30 21:31:37 UTC (rev 1820) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/navigation/AbstractNavigationModel.java 2010-03-31 09:22:35 UTC (rev 1821) @@ -59,6 +59,11 @@ /** Context to retrieve beans */ private JAXXContext context; + /** + * if sets to {@code true} will not fires any event (this is a convinient + * state when we are building the tree to avoid reload of nodes) + */ + protected boolean adjustingValue; public AbstractNavigationModel(TreeModel delegate, String pathSeparator, @@ -72,6 +77,14 @@ // NavigationModel implementation //-------------------------------------------------------------------------- + public boolean isAdjustingValue() { + return adjustingValue; + } + + public void setAdjustingValue(boolean adjustingValue) { + this.adjustingValue = adjustingValue; + } + @Override public JAXXContext getContext() { return context; @@ -165,6 +178,9 @@ @Override public final void nodeChanged(E node) { + if (adjustingValue) { + return; + } nodeChanged(node, false); if (log.isDebugEnabled()) { log.debug(node); @@ -172,6 +188,9 @@ } protected final void reload(E node) { + if (adjustingValue) { + return; + } reload(node, false); } @@ -179,6 +198,9 @@ if (node == null) { return; } + if (adjustingValue) { + return; + } node.reload(getContext()); if (deep) { @@ -211,6 +233,9 @@ @Override public final void valueForPathChanged(TreePath path, Object newValue) { + if (adjustingValue) { + return; + } getDelegate().valueForPathChanged(path, newValue); } Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/navigation/AbstractNavigationModelBuilder.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/navigation/AbstractNavigationModelBuilder.java 2010-03-30 21:31:37 UTC (rev 1820) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/navigation/AbstractNavigationModelBuilder.java 2010-03-31 09:22:35 UTC (rev 1821) @@ -56,13 +56,19 @@ /** [optional] default action class */ protected Class<? extends JAXXAction> defaultUIHandlerClass; - - protected Comparator<NavigationNode> rendererComparator; - + //TODO Doc + protected Comparator<NavigationNode<?>> rendererComparator; + //TODO Doc protected boolean useRendererComparator; - + //TODO Doc protected List<JAXXComparator<?>> comparators; + /** + * if sets to {@code true} will not fires any event (this is a convinient + * state when we are building the tree to avoid reload of nodes) + */ + protected boolean adjustingValue; + public AbstractNavigationModelBuilder( Class<? extends JAXXObject> defaultUIClass, Class<? extends JAXXAction> defaultUIHandlerClass, @@ -92,7 +98,7 @@ this.defaultUIClass = defaultUIClass; this.defaultUIHandlerClass = defaultUIHandlerClass; this.model = model; - this.comparators = new ArrayList<JAXXComparator<?>>(); + comparators = new ArrayList<JAXXComparator<?>>(); comparators.add(comparator); } @@ -316,7 +322,7 @@ model.setRoot(node); } else { boolean useExternalComparators = - (comparators != null && !comparators.isEmpty()); + comparators != null && !comparators.isEmpty(); if (!useRendererComparator && !useExternalComparators){ parentNode.add(node); } else { @@ -338,8 +344,8 @@ if (log.isDebugEnabled()){ log.debug("Use external comparator : " + useExternalComparators - + " adding child " + (node.getFullPath()) - + " to parent " + (parentNode.getFullPath()) + + " adding child " + node.getFullPath() + + " to parent " + parentNode.getFullPath() + " at " + i); } @@ -355,7 +361,7 @@ // This one don't work, i think new nodes dont have bean protected List<E> sortWithComparators(List<E> children) { for (JAXXComparator<?> comparator : comparators){ - Class<? extends Object> beanType = children.get(0).getBean(model.getContext()).getClass(); + Class<?> beanType = children.get(0).getBean(model.getContext()).getClass(); if (comparator.getClazz() .isAssignableFrom(beanType)){ List<E> result = sortWithComparator(children, comparator); @@ -404,12 +410,12 @@ return children; } - protected Comparator<NavigationNode> getRendererComparator(){ + protected Comparator<NavigationNode<?>> getRendererComparator(){ if (rendererComparator == null){ - rendererComparator = new Comparator<NavigationNode>() { + rendererComparator = new Comparator<NavigationNode<?>>() { @Override - public int compare(NavigationNode o1, NavigationNode o2) { + public int compare(NavigationNode<?> o1, NavigationNode<?> o2) { String label1 = o1.getRenderer().toString(); String label2 = o2.getRenderer().toString(); if (label1 == null || label2 == null){ @@ -421,7 +427,7 @@ } return rendererComparator; } - + //TODO Doc public interface JAXXComparator<T> extends Comparator<T>{ Class<T> getClazz(); Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/navigation/NavigationModel.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/navigation/NavigationModel.java 2010-03-30 21:31:37 UTC (rev 1820) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/navigation/NavigationModel.java 2010-03-31 09:22:35 UTC (rev 1821) @@ -142,6 +142,20 @@ JAXXContext getContext(); /** + * @return {@code true} if no event should be fired + */ + boolean isAdjustingValue(); + + /** + * Sets the new internal state {@code adjustingValue}. + * + * If the value is {@code true}, no more event will be fired, otherwise + * will not block events firing. + * + * @param adjustingValue the new value of {@code valueAdjusting} state + */ + void setAdjustingValue(boolean adjustingValue); + /** * Obtain the associated bean value from context corresponding to node from * given navigation path. * Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/navigation/tree/NavigationTreeModel.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/navigation/tree/NavigationTreeModel.java 2010-03-30 21:31:37 UTC (rev 1820) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/navigation/tree/NavigationTreeModel.java 2010-03-31 09:22:35 UTC (rev 1821) @@ -71,6 +71,9 @@ @Override public void nodeStructureChanged(NavigationTreeNode node) { + if (isAdjustingValue()) { + return; + } NavigationTreeNode n = node; //TC-20091004 never launch a deep reload reload(n, true); @@ -82,7 +85,9 @@ @Override public void nodeChanged(NavigationTreeNode node, boolean deep) { - + if (isAdjustingValue()) { + return; + } NavigationTreeNode n = node; //TC-20091004 never launch a deep clean, since we do a deep nodeChanged. reload(n, deep); Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/navigation/tree/NavigationTreeNode.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/navigation/tree/NavigationTreeNode.java 2010-03-30 21:31:37 UTC (rev 1820) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/navigation/tree/NavigationTreeNode.java 2010-03-31 09:22:35 UTC (rev 1821) @@ -332,6 +332,12 @@ @Override public void setBean(Object bean) { this.bean = bean; + //TC-20100331 : we wants to compute render as soon as possible + // this is a easy way to not need any reload of the node + NavigationNodeRenderer renderer = getRenderer(); + if (renderer != null) { + renderer.reload(bean); + } } @Override