r1031 - lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/swing/navigation
Author: chemit Date: 2008-11-24 15:35:11 +0000 (Mon, 24 Nov 2008) New Revision: 1031 Added: lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/swing/navigation/NavigationTreeCellRenderer.java lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/swing/navigation/NavigationTreeModelBuilder.java Modified: lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/swing/navigation/NavigationUtil.java Log: introduce a NavigationTreeCellRenderer based on a NodeRenderer introduce a NAvigationTreeModelBuilder to simplify the build of a model Added: 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 (rev 0) +++ lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/swing/navigation/NavigationTreeCellRenderer.java 2008-11-24 15:35:11 UTC (rev 1031) @@ -0,0 +1,34 @@ +package jaxx.runtime.swing.navigation; + +import jaxx.runtime.JAXXContext; +import jaxx.runtime.swing.navigation.NavigationTreeModel.NavigationTreeNode; +import jaxx.runtime.swing.navigation.NavigationUtil.NodeRenderer; + +import javax.swing.JTree; +import javax.swing.tree.DefaultTreeCellRenderer; +import java.awt.Component; + +/** @author chemit */ +public class NavigationTreeCellRenderer extends DefaultTreeCellRenderer { + + protected JAXXContext context; + + public NavigationTreeCellRenderer(JAXXContext context) { + this.context = context; + } + + @Override + public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) { + 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); + } + + return super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus); + } +} Added: 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 (rev 0) +++ lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/swing/navigation/NavigationTreeModelBuilder.java 2008-11-24 15:35:11 UTC (rev 1031) @@ -0,0 +1,118 @@ +package jaxx.runtime.swing.navigation; + +import jaxx.runtime.Decorator; +import jaxx.runtime.JAXXAction; +import jaxx.runtime.JAXXContextEntryDef; +import jaxx.runtime.JAXXObject; +import jaxx.runtime.swing.navigation.NavigationTreeModel.NavigationTreeNode; +import jaxx.runtime.swing.navigation.NavigationUtil.NodeRenderer; + +/** @author chemit */ +public class NavigationTreeModelBuilder { + + protected NavigationTreeModel model; + + public NavigationTreeModelBuilder() { + } + + public NavigationTreeModel getModel() { + return model; + } + + public NavigationTreeNode build(NavigationTreeNode parentNode, String libelle, JAXXContextEntryDef entryDef, + String contextName, + Class<? extends JAXXObject> uiClass, + Class<? extends JAXXAction> actionClass) { + NavigationTreeNode node = new NavigationTreeNode(new NodeRenderer(libelle), entryDef, contextName, uiClass, actionClass); + return addChildNode(parentNode, node); + } + + public NavigationTreeNode build(NavigationTreeNode parentNode, String libelle, String entryPath, + String contextName, + Class<? extends JAXXObject> uiClass, + Class<? extends JAXXAction> actionClass) { + NavigationTreeNode node = new NavigationTreeNode(new NodeRenderer(libelle), entryPath, contextName, uiClass, actionClass); + return addChildNode(parentNode, node); + } + + public NavigationTreeNode build(NavigationTreeNode parentNode, Decorator<?> decorator, JAXXContextEntryDef entryDef, + String contextName, + Class<? extends JAXXObject> uiClass, + Class<? extends JAXXAction> actionClass) { + NavigationTreeNode node = new NavigationTreeNode(new NodeRenderer(decorator), entryDef, contextName, uiClass, actionClass); + return addChildNode(parentNode, node); + } + + public NavigationTreeNode build(NavigationTreeNode parentNode, Decorator<?> decorator, String entryPath, + String contextName, + Class<? extends JAXXObject> uiClass, + Class<? extends JAXXAction> actionClass) { + NavigationTreeNode node = new NavigationTreeNode(new NodeRenderer(decorator), entryPath, contextName, uiClass, actionClass); + return addChildNode(parentNode, node); + } + + public void setRootNode(NavigationTreeNode rootNode) { + if (model == null) { + // create model with the root node + model = new NavigationTreeModel(rootNode); + } else { + model.setRoot(rootNode); + } + } + + protected NavigationTreeNode addChildNode(NavigationTreeNode parentNode, NavigationTreeNode node) { + if (parentNode != null) { + parentNode.add(node); + } + return node; + } + + public NavigationTreeNode removeChildNode(NavigationTreeNode parentNode, NavigationTreeNode node) { + if (parentNode != null) { + parentNode.remove(node); + } + return node; + } + + /* + public NavigationTreeNode build(NavigationTreeNode parentNode, String libelle, JAXXContextEntryDef entryDef, + String contextName, + Class<? extends JAXXObject> uiClass) { + return build(parentNode, libelle, entryDef, contextName, uiClass, null); + } + + public NavigationTreeNode build(NavigationTreeNode parentNode, String libelle, JAXXContextEntryDef entryDef, + String contextName) { + return build(parentNode, libelle, entryDef, contextName, null, null); + } + + public NavigationTreeNode build(NavigationTreeNode parentNode, String libelle, String contextName, + Class<? extends JAXXObject> uiClass) { + return build(parentNode, libelle, (String) null, contextName, uiClass, null); + } + + public NavigationTreeNode build(NavigationTreeNode parentNode, String libelle, String contextName) { + return build(parentNode, libelle, (String) null, contextName, null, null); + } + + public NavigationTreeNode build(NavigationTreeNode parentNode, Decorator<Object> decorator, JAXXContextEntryDef entryDef, + String contextName, Class<? extends JAXXObject> uiClass) { + return build(parentNode, decorator, entryDef, contextName, uiClass, null); + } + + public NavigationTreeNode build(NavigationTreeNode parentNode, Decorator<Object> decorator, JAXXContextEntryDef entryDef, + String contextName) { + return build(parentNode, decorator, entryDef, contextName, null, null); + } + + public NavigationTreeNode build(NavigationTreeNode parentNode, Decorator<Object> decorator, + String contextName, Class<? extends JAXXObject> uiClass) { + return build(parentNode, decorator, (String) null, contextName, uiClass, null); + } + + public NavigationTreeNode build(NavigationTreeNode parentNode, Decorator<Object> decorator, + String contextName) { + return build(parentNode, decorator, (String) null, contextName, null, null); + }*/ + +} 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-24 15:33:42 UTC (rev 1030) +++ lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/swing/navigation/NavigationUtil.java 2008-11-24 15:35:11 UTC (rev 1031) @@ -1,7 +1,9 @@ package jaxx.runtime.swing.navigation; +import jaxx.runtime.Decorator; import jaxx.runtime.JAXXContext; import jaxx.runtime.swing.navigation.NavigationTreeModel.NavigationTreeNode; +import static org.codelutin.i18n.I18n._; import java.lang.reflect.InvocationTargetException; import java.util.regex.Pattern; @@ -73,5 +75,48 @@ } return navigationTreeNode; } - + + public static class NodeRenderer implements java.io.Serializable { + + protected String libelle; + + protected Decorator decorator; + + protected NavigationTreeNode node; + + private static final long serialVersionUID = -1238962588426200861L; + + public NodeRenderer(String libelle) { + this.libelle = libelle; + } + + public NodeRenderer(Decorator<?> decorator) { + this.decorator = decorator; + } + + public String toString(JAXXContext context) { + if (libelle != null) { + // simple libelle renderer + return _(libelle); + } + + // with decorator renderer + String result; + + try { + Object bean = node.getJAXXContextValue(context); + result = decorator.toString(bean); + + } catch (Exception e) { + result = ""; + } + + return result; + } + + public void setNode(NavigationTreeNode node) { + this.node = node; + } + } + }
participants (1)
-
chemit@users.labs.libre-entreprise.org