Author: chemit Date: 2008-11-30 14:05:52 +0000 (Sun, 30 Nov 2008) New Revision: 1036 Modified: lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/Decorator.java lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/JXPathDecorator.java 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/NavigationUtil.java Log: improve NodeRenderer and Decorator : keep the internalClass to be render (will be used for example by some renderer...) Modified: lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/Decorator.java =================================================================== --- lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/Decorator.java 2008-11-26 01:06:42 UTC (rev 1035) +++ lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/Decorator.java 2008-11-30 14:05:52 UTC (rev 1036) @@ -5,12 +5,24 @@ * * @author chemit */ -public interface Decorator<O> extends java.io.Serializable { +public abstract class Decorator<O> implements java.io.Serializable { + protected final Class<O> internalClass; + private static final long serialVersionUID = -1L; + + public Decorator(Class<O> internalClass) { + this.internalClass = internalClass; + } + /** * @param bean the bean to decorate * @return the string value of the given bean */ - String toString(O bean); + public abstract String toString(Object bean); + + public final Class<O> getInternalClass() { + return internalClass; + } + } Modified: lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/JXPathDecorator.java =================================================================== --- lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/JXPathDecorator.java 2008-11-26 01:06:42 UTC (rev 1035) +++ lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/JXPathDecorator.java 2008-11-30 14:05:52 UTC (rev 1036) @@ -5,7 +5,7 @@ import org.apache.commons.logging.LogFactory; /** @author chemit */ -public class JXPathDecorator<O> implements Decorator<O> { +public class JXPathDecorator<O> extends Decorator<O> { /** to use log facility, just put in your code: log.info(\"...\"); */ private static final Log log = LogFactory.getLog(JXPathDecorator.class); @@ -14,11 +14,13 @@ protected String expression; - public JXPathDecorator(String expression) { + public JXPathDecorator(Class<O> internalClass, String expression) { + super(internalClass); this.expression = expression; } - public String toString(O bean) { + public String toString(Object bean) { + //todo check bean class JXPathContext jxcontext = JXPathContext.newContext(bean); String result = (String) jxcontext.getValue(expression); if (log.isDebugEnabled()) { 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-11-26 01:06:42 UTC (rev 1035) +++ lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/swing/navigation/NavigationTreeCellRenderer.java 2008-11-30 14:05:52 UTC (rev 1036) @@ -8,7 +8,11 @@ import javax.swing.tree.DefaultTreeCellRenderer; import java.awt.Component; -/** @author chemit */ +/** + * A simple cell renderer which use the {@link NavigationTreeNode#renderer} to display node. + * + * @author chemit + */ public class NavigationTreeCellRenderer extends DefaultTreeCellRenderer { protected JAXXContext context; @@ -19,16 +23,29 @@ @Override public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) { + + if (value != null) { + + NodeRenderer renderer = getNodeRenderer(value); + if (renderer != null) { + value = renderer.toString(context); + } + } + + return super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus); + } + + protected NodeRenderer getNodeRenderer(Object value) { + NodeRenderer render = null; + if (value != null && value instanceof NavigationTreeNode && ((NavigationTreeNode) value).getUserObject() instanceof NodeRenderer) { // NodeRenderer used as userObject NavigationTreeNode navigationTreeNode = (NavigationTreeNode) value; // could have a cached value ( - NodeRenderer render = (NodeRenderer) navigationTreeNode.getUserObject(); - - value = render.toString(context); + render = (NodeRenderer) navigationTreeNode.getUserObject(); } + return render; + } - return super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus); - } } 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-11-26 01:06:42 UTC (rev 1035) +++ lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/swing/navigation/NavigationTreeModel.java 2008-11-30 14:05:52 UTC (rev 1036) @@ -143,7 +143,9 @@ return null; } path = matcher.group(1); - log.info("matching regex " + regex + " : " + path); + if (log.isDebugEnabled()) { + log.debug("matching regex " + regex + " : " + path); + } } StringTokenizer stk = new StringTokenizer(path, navigationPathSeparator); NavigationTreeNode result = root; @@ -310,6 +312,10 @@ this.jaxxContextEntryPath = jaxxContextEntryPath; } + public Class<?> getInternalClass() { + return renderer.getInternalClass(); + } + /** @return the fully context pathof the node from the root node to this. */ public String getContextPath() { TreeNode[] path = getPath(); @@ -406,7 +412,9 @@ // special case when we want to access a collection jxpathExpression = '.' + jxpathExpression; } - log.info("jxpath : " + jxpathExpression); + if (log.isDebugEnabled()) { + log.debug("jxpath : " + jxpathExpression); + } JXPathContext jxcontext = JXPathContext.newContext(parentBean); 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-11-26 01:06:42 UTC (rev 1035) +++ lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/swing/navigation/NavigationUtil.java 2008-11-30 14:05:52 UTC (rev 1036) @@ -25,7 +25,7 @@ return context.getContextValue(NavigationTreeNode.class, NavigationTreeSelectionAdapter.NAVIGATION_SELECTED_NODE); } - public static <O> O getSelectedBean(JAXXContext context,Class<O> clazz) { + public static <O> O getSelectedBean(JAXXContext context, Class<O> clazz) { return context.getContextValue(clazz, NavigationTreeSelectionAdapter.NAVIGATION_SELECTED_BEAN); } @@ -88,14 +88,18 @@ protected NavigationTreeNode node; + protected Class<?> internalClass; + private static final long serialVersionUID = -1238962588426200861L; public NodeRenderer(String libelle) { this.libelle = libelle; + this.internalClass = String.class; } - public NodeRenderer(Decorator<?> decorator) { + public NodeRenderer(Decorator decorator) { this.decorator = decorator; + this.internalClass = decorator.getInternalClass(); } public String toString(JAXXContext context) { @@ -121,6 +125,10 @@ public void setNode(NavigationTreeNode node) { this.node = node; } + + public Class<?> getInternalClass() { + return internalClass; + } } }