[Buix-commits] r1033 - lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/swing/navigation
Author: chemit Date: 2008-11-25 09:00:41 +0000 (Tue, 25 Nov 2008) New Revision: 1033 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/NavigationTreeModelBuilder.java lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/swing/navigation/NavigationTreeSelectionAdapter.java lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/swing/navigation/NavigationUtil.java Log: out selected bean in context improve search of bean algorithm (a node can have a JAXXContextEntryDef ad a jxpath) 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-25 08:58:41 UTC (rev 1032) +++ lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/swing/navigation/NavigationTreeModel.java 2008-11-25 09:00:41 UTC (rev 1033) @@ -53,7 +53,11 @@ protected NodeRenderer renderer; - public NavigationTreeNode(Object renderer, Object jaxxContextEntryDef, String context, Class<? extends JAXXObject> jaxxClass, Class<? extends JAXXAction> jaxxActionClass) { + public NavigationTreeNode(Object renderer, + Object jaxxContextEntryDef, + String context, + Class<? extends JAXXObject> jaxxClass, + Class<? extends JAXXAction> jaxxActionClass) { super(renderer); if (renderer instanceof NodeRenderer) { // the renderer must keep a reference of the node @@ -82,29 +86,31 @@ } } - /*public NavigationTreeNode(String context, Class<? extends JAXXObject> jaxxClass, Class<? extends JAXXAction> jaxxActionClass, JAXXContextEntryDef jaxxContextEntryDef) { + public NavigationTreeNode(Object renderer, + JAXXContextEntryDef jaxxContextEntryDef, + String jaxxContextEntryPath, + String context, + Class<? extends JAXXObject> jaxxClass, + Class<? extends JAXXAction> jaxxActionClass) { + super(renderer); + if (renderer instanceof NodeRenderer) { + // the renderer must keep a reference of the node + ((NodeRenderer) renderer).setNode(this); + } else if (renderer instanceof String) { + // nothing special to be done + } else { + if (renderer != null) { + // wrong renderer type + throw new IllegalArgumentException("to define a renderer, must be a String (simple libelle) or a " + NodeRenderer.class + ", but was " + renderer); + } + } this.context = context; this.jaxxClass = jaxxClass; this.jaxxActionClass = jaxxActionClass; this.jaxxContextEntryDef = jaxxContextEntryDef; - }*/ + this.jaxxContextEntryPath = jaxxContextEntryPath; + } - /*public NavigationTreeNode(Object userObject, String context, Class<? extends JAXXObject> jaxxClass, Class<? extends JAXXAction> jaxxActionClass, JAXXContextEntryDef jaxxContextEntryDef) { - super(userObject); - this.context = context; - this.jaxxClass = jaxxClass; - this.jaxxActionClass = jaxxActionClass; - this.jaxxContextEntryDef = jaxxContextEntryDef; - }*/ - - /*public NavigationTreeNode(Object userObject, boolean allowsChildren, String context, Class<? extends JAXXObject> jaxxClass, Class<? extends JAXXAction> jaxxActionClass, JAXXContextEntryDef jaxxContextEntryDef) { - super(userObject, allowsChildren); - this.context = context; - this.jaxxClass = jaxxClass; - this.jaxxActionClass = jaxxActionClass; - this.jaxxContextEntryDef = jaxxContextEntryDef; - }*/ - public String getContext() { return context; } @@ -190,10 +196,10 @@ if (stack.isEmpty()) { return this; } - // nextcontext to search + // next context to search String currentPath = stack.pop(); - if (getContext().equals(currentPath)) { - // this node matchs + if (getContext().equals(currentPath) && currentPath.startsWith("$")) { + // this node matchs (only do this for root node) return findNode(stack); } // find the next matching son @@ -213,8 +219,8 @@ public Object getJAXXContextValue(JAXXContext context) throws InvocationTargetException, NoSuchMethodException, IllegalAccessException { Object result; - if (getJaxxContextEntryDef() != null) { - // the node maps directly a value in context + if (getJaxxContextEntryDef() != null && jaxxContextEntryPath==null) { + // the node maps directly a value in context, with no jxpath resolving result = getJaxxContextEntryDef().getContextValue(context); return result; } @@ -236,8 +242,8 @@ return null; } - if (this == parentNode) { - // current node is the node matching the context entry value + if (this == parentNode && jaxxContextEntryPath == null) { + // current node is the node matching the context entry value and no jxpath is found return parentBean; } @@ -257,7 +263,7 @@ } if (jxpathExpression.startsWith("[")) { // special case when we want to access a collection - jxpathExpression = '.'+jxpathExpression; + jxpathExpression = '.' + jxpathExpression; } log.info("jxpath : " + jxpathExpression); 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-11-25 08:58:41 UTC (rev 1032) +++ lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/swing/navigation/NavigationTreeModelBuilder.java 2008-11-25 09:00:41 UTC (rev 1033) @@ -19,15 +19,27 @@ return model; } - public NavigationTreeNode build(NavigationTreeNode parentNode, String libelle, JAXXContextEntryDef entryDef, + public NavigationTreeNode build(NavigationTreeNode parentNode, String libelle, + JAXXContextEntryDef entryDef, + String entryPath, String contextName, Class<? extends JAXXObject> uiClass, Class<? extends JAXXAction> actionClass) { + NavigationTreeNode node = new NavigationTreeNode(new NodeRenderer(libelle), entryDef, entryPath, contextName, uiClass, actionClass); + return addChildNode(parentNode, node); + } + + 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, + public NavigationTreeNode build(NavigationTreeNode parentNode, String libelle, + String entryPath, String contextName, Class<? extends JAXXObject> uiClass, Class<? extends JAXXAction> actionClass) { @@ -35,15 +47,27 @@ return addChildNode(parentNode, node); } - public NavigationTreeNode build(NavigationTreeNode parentNode, Decorator<?> decorator, JAXXContextEntryDef entryDef, + public NavigationTreeNode build(NavigationTreeNode parentNode, Decorator<?> decorator, + JAXXContextEntryDef entryDef, + String entryPath, String contextName, Class<? extends JAXXObject> uiClass, Class<? extends JAXXAction> actionClass) { + NavigationTreeNode node = new NavigationTreeNode(new NodeRenderer(decorator), entryDef, 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, + public NavigationTreeNode build(NavigationTreeNode parentNode, Decorator<?> decorator, + String entryPath, String contextName, Class<? extends JAXXObject> uiClass, Class<? extends JAXXAction> actionClass) { Modified: lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/swing/navigation/NavigationTreeSelectionAdapter.java =================================================================== --- lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/swing/navigation/NavigationTreeSelectionAdapter.java 2008-11-25 08:58:41 UTC (rev 1032) +++ lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/swing/navigation/NavigationTreeSelectionAdapter.java 2008-11-25 09:00:41 UTC (rev 1033) @@ -1,7 +1,7 @@ package jaxx.runtime.swing.navigation; +import jaxx.runtime.JAXXAction; import jaxx.runtime.JAXXObject; -import jaxx.runtime.JAXXAction; import jaxx.runtime.swing.navigation.NavigationTreeModel.NavigationTreeNode; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -11,7 +11,6 @@ import javax.swing.event.TreeSelectionListener; import javax.swing.tree.TreePath; import java.awt.Component; -import java.lang.reflect.InvocationTargetException; /** A {@link javax.swing.event.TreeSelectionListener} implementation@author chemit */ public abstract class NavigationTreeSelectionAdapter implements TreeSelectionListener { @@ -23,6 +22,8 @@ static public final String NAVIGATION_SELECTED_NODE = "navigation-selected-node"; + static public final String NAVIGATION_SELECTED_BEAN = "navigation-selected-bean"; + /** la classe d'ui par defaut, associé à un noeud de l'arbe */ protected Class<? extends JAXXObject> defaultUIClass; @@ -86,6 +87,26 @@ */ protected abstract void goBackToPreviousNode(TreeSelectionEvent event, Exception e); + /** + * Prepare le nouveau noeud sélectionné. + * + * @param event l'évènement de selection du noeud + * @return le noeud selectionné et preparé + */ + protected NavigationTreeNode prepareNode(TreeSelectionEvent event) { + NavigationTreeNode node = (NavigationTreeNode) event.getPath().getLastPathComponent(); + + if (node.getJaxxClass() == null) { + // no ui is associated with this node, display a empty content + node.setJaxxClass(defaultUIClass); + } + + if (node.getJaxxActionClass() == null) { + node.setJaxxActionClass(defaultUIHandlerClass); + } + return node; + } + public void valueChanged(TreeSelectionEvent event) { if (event.getOldLeadSelectionPath() != null && event.getOldLeadSelectionPath().equals(event.getPath())) { // do not treate this if no path changed @@ -94,21 +115,12 @@ try { - NavigationTreeNode node = (NavigationTreeNode) event.getPath().getLastPathComponent(); + NavigationTreeNode node = prepareNode(event); - if (node.getJaxxClass() == null) { - // no ui is associated with this node, display a empty content - node.setJaxxClass(defaultUIClass); - } - - if (node.getJaxxActionClass()==null) { - node.setJaxxActionClass(defaultUIHandlerClass); - } - String path = node.getContextPath(); - if (log.isDebugEnabled()) { - log.debug(path); + if (log.isTraceEnabled()) { + log.trace(path); } Component newUI = getNewUI(path); @@ -119,7 +131,6 @@ return; } - if (!closeUI(event, component)) { // previous ui was not closed, so reselect the previous node in navigation goBackToPreviousNode(event, null); @@ -130,9 +141,19 @@ // now, we are free to open the ui associated with the selected node in navigation // before all, attach bean in context associated with the selected node in naivgation tree - attachBeanFromNodeToContext(node); + Object data = getNavigationTreeModel().getJAXXContextValue(context, path); + if (log.isDebugEnabled()) { + log.debug("find data for contextPath <" + path + "> : " + data.getClass()); + } + if (data != null) { + context.setContextValue(data, NAVIGATION_SELECTED_BEAN); + //todo should we not use this to avoid conflict in context ? + context.setContextValue(data); + } + + if (newUI == null) { // instanciate a new ui associated with the selected node newUI = createUI(node); @@ -149,13 +170,14 @@ openUI(newUI, node); } catch (Exception e) { + // remove data from context + // if any error, go back to previvous node goBackToPreviousNode(event, e); } - } - protected void attachBeanFromNodeToContext(NavigationTreeNode node) throws InvocationTargetException, NoSuchMethodException, IllegalAccessException { + /* protected Object attachBeanFromNodeToContext(NavigationTreeNode node) throws InvocationTargetException, NoSuchMethodException, IllegalAccessException { String path = node.getContextPath(); @@ -171,7 +193,8 @@ context.setContextValue(data); } //} - } + return data; + }*/ protected void returnToPreviousNode(JTree tree, TreeSelectionEvent event) { // go back to previous node 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-25 08:58:41 UTC (rev 1032) +++ lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/swing/navigation/NavigationUtil.java 2008-11-25 09:00:41 UTC (rev 1033) @@ -25,6 +25,10 @@ return context.getContextValue(NavigationTreeNode.class, NavigationTreeSelectionAdapter.NAVIGATION_SELECTED_NODE); } + public static Object getSelectedBean(JAXXContext context) { + return context.getContextValue(Object.class, NavigationTreeSelectionAdapter.NAVIGATION_SELECTED_BEAN); + } + public static Object getContextValue(JAXXContext context, String contextKey, String navigationPath) throws InvocationTargetException, NoSuchMethodException, IllegalAccessException { NavigationTreeModel navigationModel = context.getContextValue(NavigationTreeModel.class, contextKey);
participants (1)
-
chemit@users.labs.libre-entreprise.org