Author: tchemit Date: 2010-03-10 23:28:59 +0100 (Wed, 10 Mar 2010) New Revision: 1767 Log: Anomalie #374: NPE on NavigationTreehelper due to multi selection + improve code Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/navigation/NavigationTreeContextHelper.java Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/navigation/NavigationTreeContextHelper.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/navigation/NavigationTreeContextHelper.java 2010-03-10 12:45:19 UTC (rev 1766) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/navigation/NavigationTreeContextHelper.java 2010-03-10 22:28:59 UTC (rev 1767) @@ -35,15 +35,15 @@ /** * To help getting and setting navigation tree objects from a {@link JAXXContext}. * <p/> - * There is six types of data which can be hold in a context : + * There is seven types of data which can be hold in a context : * <ul> * <li>tree : the tree </li> + * <li>tree-tablr : the jx tree table</li> * <li>tree model : the navigation tree model</li> * <li>tree handler : the navigation tree handler</li> * <li>selected path : the navigation path of the selected node</li> * <li>selected node : the selected node</li> * <li>selected bean : the selected bean</li> - * <li>selected ui : the selected content ui</li> * </ul> * <p/> * To make possible the use of more than one navigation tree system in a same @@ -53,12 +53,12 @@ * Here is the keys mapping : * <ul> * <li>tree : {@code prefix + "-tree"}</li> + * <li>tree-table : {@code prefix + "-tree-table"}</li> * <li>tree model : {@code prefix + "-tree-model"}</li> * <li>tree handler : {@code prefix + "-tree-handler"}</li> * <li>selected path : {@code prefix + "-selected-path"}</li> * <li>selected node : {@code prefix + "-selected-node"}</li> * <li>selected bean : {@code prefix + "-selected-bean"}</li> - * <li>selected ui: {@code prefix + "-selected-ui"}</li> * </ul> * * @author chemit @@ -79,7 +79,6 @@ protected JAXXContextEntryDef<NavigationTreeHandler> handlerContextEntry; protected JAXXContextEntryDef<JTree> treeContextEntry; protected JAXXContextEntryDef<JXTreeTable> treeTableContextEntry; -// protected JAXXContextEntryDef<Component> selectedUIContextEntry; public NavigationTreeContextHelper(String prefix) { this.prefix = prefix; @@ -90,7 +89,6 @@ selectedBeansContextEntry = JAXXUtil.newListContextEntryDef(prefix + "-selected-beans"); selectedNodesContextEntry = JAXXUtil.newListContextEntryDef(prefix + "-selected-nodes"); selectedPathsContextEntry = JAXXUtil.newListContextEntryDef(prefix + "-selected-paths"); -// selectedUIContextEntry = JAXXUtil.newContextEntryDef(prefix + "-selected-ui", Component.class); } public String getPrefix() { @@ -114,8 +112,9 @@ /** * @param context where to find model - * @deprecated please use {@link #getModel(JAXXContext)}, will be remove - * soon + * @deprecated since 2.0 please use {@link #getModel(JAXXContext)}, will + * be remove soon + * @return the specific tree model */ @Deprecated public NavigationTreeModel getTreeModel(JAXXContext context) { @@ -133,16 +132,18 @@ } public String getSelectedPath(JAXXContext context) { - List<String> values = getSelectedPathContextEntry().getContextValue(context); - if (values == null){ - return null; - } - if (log.isWarnEnabled()){ - if (values.size() > 1){ - log.warn("More than one values are selected, return first one"); - } - } - return values.get(0); + String result = getSelectedValue(getSelectedPathContextEntry(),context); + return result; +// List<String> values = getSelectedPathContextEntry().getContextValue(context); +// if (values == null){ +// return null; +// } +// if (log.isWarnEnabled()){ +// if (values.size() > 1){ +// log.warn("More than one values are selected, return first one"); +// } +// } +// return values.get(0); } public List<String> getSelectedPaths(JAXXContext context) { @@ -150,16 +151,18 @@ } public NavigationTreeNode getSelectedNode(JAXXContext context) { - List<NavigationTreeNode> values = getSelectedNodeContextEntry().getContextValue(context); - if (values == null){ - return null; - } - if (log.isWarnEnabled() && values != null){ - if (values.size() > 1){ - log.warn("More than one values are selected, return first one"); - } - } - return values.get(0); + NavigationTreeNode result = getSelectedValue(getSelectedNodeContextEntry(),context); + return result; +// List<NavigationTreeNode> values = getSelectedNodeContextEntry().getContextValue(context); +// if (values == null){ +// return null; +// } +// if (log.isWarnEnabled()){ +// if (values.size() > 1){ +// log.warn("More than one values are selected, return first one"); +// } +// } +// return values.get(0); } public List<NavigationTreeNode> getSelectedNodes(JAXXContext context) { @@ -167,16 +170,18 @@ } public Object getSelectedBean(JAXXContext context) { - List<Object> values = getSelectedBeanContextEntry().getContextValue(context); - if (values == null){ - return null; - } - if (log.isWarnEnabled()){ - if (values.size() > 1){ - log.warn("More than one values are selected, return first one"); - } - } - return values.get(0); + Object result = getSelectedValue(getSelectedBeanContextEntry(),context); + return result; +// List<Object> values = getSelectedBeanContextEntry().getContextValue(context); +// if (values == null){ +// return null; +// } +// if (log.isWarnEnabled()){ +// if (values.size() > 1){ +// log.warn("More than one values are selected, return first one"); +// } +// } +// return values.get(0); } public List<Object> getSelectedBeans(JAXXContext context) { @@ -191,7 +196,7 @@ /** * @param context where to store model * @param model model to store - * @deprecated please use {@link #setModel(JAXXContext, NavigationModel)}, + * @deprecated since 2.0 please use {@link #setModel(JAXXContext, NavigationModel)}, * will be remove soon */ @Deprecated @@ -217,66 +222,64 @@ } public void setSelectedPath(JAXXContext context, String path) { - if (path == null) { - getSelectedPathContextEntry().removeContextValue(context); - } else { - List<String> selecteds = new ArrayList<String>(); - selecteds.add(path); - getSelectedPathContextEntry().setContextValue(context, selecteds); - } + setSelectedValue(getSelectedPathContextEntry(), context, path); +// if (path == null) { +// getSelectedPathContextEntry().removeContextValue(context); +// } else { +// List<String> selecteds = new ArrayList<String>(); +// selecteds.add(path); +// getSelectedPathContextEntry().setContextValue(context, selecteds); +// } } public void setSelectedPaths(JAXXContext context, List<String> paths) { - if (paths == null || paths.isEmpty()) { - getSelectedPathContextEntry().removeContextValue(context); - } else { - getSelectedPathContextEntry().setContextValue(context, paths); - } + setSelectedValues(getSelectedPathContextEntry(), context, paths); +// if (paths == null || paths.isEmpty()) { +// getSelectedPathContextEntry().removeContextValue(context); +// } else { +// getSelectedPathContextEntry().setContextValue(context, paths); +// } } public void setSelectedNode(JAXXContext context, NavigationTreeNode node) { - if (node == null) { - getSelectedNodeContextEntry().removeContextValue(context); - } else { - List<NavigationTreeNode> selecteds = new ArrayList<NavigationTreeNode>(); - selecteds.add(node); - getSelectedNodeContextEntry().setContextValue(context, selecteds); - } + setSelectedValue(getSelectedNodeContextEntry(), context, node); +// if (node == null) { +// getSelectedNodeContextEntry().removeContextValue(context); +// } else { +// List<NavigationTreeNode> selecteds = new ArrayList<NavigationTreeNode>(); +// selecteds.add(node); +// getSelectedNodeContextEntry().setContextValue(context, selecteds); +// } } public void setSelectedNodes(JAXXContext context, List<NavigationTreeNode> nodes) { - if (nodes == null || nodes.isEmpty()) { - getSelectedNodeContextEntry().removeContextValue(context); - } else { - getSelectedNodeContextEntry().setContextValue(context, nodes); - } + setSelectedValues(getSelectedNodeContextEntry(), context, nodes); +// if (nodes == null || nodes.isEmpty()) { +// getSelectedNodeContextEntry().removeContextValue(context); +// } else { +// getSelectedNodeContextEntry().setContextValue(context, nodes); +// } } public void setSelectedBean(JAXXContext context, Object bean) { - if (bean == null) { - getSelectedBeanContextEntry().removeContextValue(context); - } else { - List<Object> selecteds = new ArrayList<Object>(); - selecteds.add(bean); - getSelectedBeanContextEntry().setContextValue(context, selecteds); - } + setSelectedValue(getSelectedBeanContextEntry(), context, bean); +// if (bean == null) { +// getSelectedBeanContextEntry().removeContextValue(context); +// } else { +// List<Object> selecteds = new ArrayList<Object>(); +// selecteds.add(bean); +// getSelectedBeanContextEntry().setContextValue(context, selecteds); +// } } public void setSelectedBeans(JAXXContext context, List<Object> beans) { - if (beans == null || beans.isEmpty()) { - getSelectedBeanContextEntry().removeContextValue(context); - } else { - getSelectedBeanContextEntry().setContextValue(context, beans); - } - } - -// public void setSelectedUI(JAXXContext context, Component ui) { -// if (ui == null) { -// getSelectedUIContextEntry().removeContextValue(context); + setSelectedValues(getSelectedBeanContextEntry(), context, beans); +// if (beans == null || beans.isEmpty()) { +// getSelectedBeanContextEntry().removeContextValue(context); // } else { -// getSelectedUIContextEntry().setContextValue(context, ui); +// getSelectedBeanContextEntry().setContextValue(context, beans); // } -// } + } protected JAXXContextEntryDef<NavigationModel> getModelContextEntry() { return modelContextEntry; @@ -307,9 +310,41 @@ return treeTableContextEntry; } -// public JAXXContextEntryDef<Component> getSelectedUIContextEntry() { + protected <T> T getSelectedValue(JAXXContextEntryDef<List<T>> entry, + JAXXContext context) { + List<T> values = entry.getContextValue(context); + T result = null; + if (values != null && !values.isEmpty()) { + if (values.size() > 1) { + if (log.isWarnEnabled()) { + log.warn("There is " + values.size() + + " values selected, will return first one"); + } + } + result = values.get(0); + } + return result; + } -// return selectedUIContextEntry; + protected <T> void setSelectedValue(JAXXContextEntryDef<List<T>> entry, + JAXXContext context, + T value) { + if (value == null) { + entry.removeContextValue(context); + } else { + List<T> selecteds = new ArrayList<T>(); + selecteds.add(value); + entry.setContextValue(context, selecteds); + } + } -// } + protected <T> void setSelectedValues(JAXXContextEntryDef<List<T>> entry, + JAXXContext context, + List<T> values) { + if (values == null || values.isEmpty()) { + entry.removeContextValue(context); + } else { + entry.setContextValue(context, values); + } + } }