r2150 - in trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav: . tree treetable
Author: tchemit Date: 2011-01-01 18:31:35 +0100 (Sat, 01 Jan 2011) New Revision: 2150 Url: http://nuiton.org/repositories/revision/jaxx/2150 Log: Anomalie #1191: Improve nav api Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/NavBridge.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/NavHelper.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/NavNode.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/NavNodeChildLoador.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/NavTreeBridge.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/NavTreeHelper.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/NavTreeNode.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/NavTreeNodeChildLoador.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/NavTreeTableBridge.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/NavTreeTableHelper.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/NavTreeTableNode.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/NavTreeTableNodeChildLoador.java Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/NavBridge.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/NavBridge.java 2010-12-30 13:11:59 UTC (rev 2149) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/NavBridge.java 2011-01-01 17:31:35 UTC (rev 2150) @@ -32,9 +32,9 @@ /** * Contract of the bridge used by {@link NavHelper} to hold model and ui. * - * @author tchemit <chemit@codelutin.com> * @param <M> Type of model to bridge * @param <N> Type of nodes of the model + * @author tchemit <chemit@codelutin.com> * @since 2.1 */ public interface NavBridge<M, N extends NavNode<M, N>> { @@ -71,6 +71,8 @@ void reload(N node); + boolean canLoadChild(N node) ; + //-------------------------------------------------------------------------- //-- Listeners notifications //-------------------------------------------------------------------------- @@ -120,41 +122,4 @@ <T extends EventListener> T[] getListeners(Class<T> listenerType); - - //-------------------------------------------------------------------------- - //-- UI - //-------------------------------------------------------------------------- - - -// U getUI(); -// -// void setUI(U ui); -// -// void scrollPathToVisible(TreePath path); -// -// void setSelectionPath(TreePath path); -// -// TreeSelectionModel getSelectionModel(); -// -// boolean isExpanded(TreePath pathToExpand); -// -// void expandPath(TreePath pathToExpand); -// -// /** -// * Obtains the {@link AbstractNavTreeCellRenderer} renderer of the -// * registred tree. -// * -// * @return the renderer of the registred tree or null if no tree was -// * registred nor the renderer is a {@link AbstractNavTreeCellRenderer}. -// */ -// AbstractNavTreeCellRenderer<M, N> getTreeCellRenderer(); -// -// /** -// * Obtains the selected node of the registred tree. -// * -// * @return the selected tree or {@code null} if no registred tree nor -// * selection empty. -// */ -// N getSelectedNode(); - } Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/NavHelper.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/NavHelper.java 2010-12-30 13:11:59 UTC (rev 2149) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/NavHelper.java 2011-01-01 17:31:35 UTC (rev 2150) @@ -53,7 +53,7 @@ * <b>Note:</b> A helper can NOT be used to manage multi-trees. * <h2>Internal states</h2 * <h3>Internal model</h3> - * To create the model, use method {@link #createModel(NavNode ,Object...)} given a + * To create the model, use method {@link #createModel(NavNode, Object...)} given a * root node. * <p/> * To obtain the model, use method {@link #getModel()}. @@ -83,7 +83,7 @@ * To listen modification of the model, it will mainly repopulate nodes when * required. * <p/> - * See the method {@link #populateNode(NavNode , Object[], boolean)}. + * See the method {@link #populateNode(NavNode, Object[], boolean)}. * <h3>{@link #selectionListener}</h3> * To listen modification of the selection, it will mainly expand paths if required. * <p/> @@ -94,12 +94,12 @@ * The helper offers some methods to modify and query the internal tree model. * <h3>Model modification</h3> * <ul> - * <li>{@link #createModel(NavNode ,Object...)}</li> - * <li>{@link #insertNode(NavNode , NavNode)}</li> + * <li>{@link #createModel(NavNode, Object...)}</li> + * <li>{@link #insertNode(NavNode, NavNode)}</li> * <li>{@link #removeNode(NavNode)}</li> - * <li>{@link #moveNode(NavNode , NavNode , int)}</li> - * <li>{@link #refreshNode(NavNode , boolean)}</li> - * <li>{@link #loadAllNodes(NavNode , NavDataProvider)}</li> + * <li>{@link #moveNode(NavNode, NavNode, int)}</li> + * <li>{@link #refreshNode(NavNode, boolean)}</li> + * <li>{@link #loadAllNodes(NavNode, NavDataProvider)}</li> * <p/> * </ul> * <h3>Model selection modification</h3> @@ -110,14 +110,14 @@ * </ul> * <h3>Model query</h3> * <ul> - * <li>{@link #findNode(NavNode , String...)}</li> + * <li>{@link #findNode(NavNode, String...)}</li> * </ul> * <h3>Child loadors factory</h3> * The class offers a factory of {@link NavNodeChildLoador}, use the method * {@link #getChildLoador(Class)} to obtain the correct child loador given his type. * + * @param <U> Type of ui to bridge * @author tchemit <chemit@codelutin.com> - * @param <U> Type of ui to bridge * @see NavNode * @see NavNodeChildLoador * @see AbstractNavTreeCellRenderer @@ -358,7 +358,9 @@ if (isAdded && !pathExpanded) { // ask to expand path - log.info("expand node [" + pathToExpand + "]"); + if (log.isDebugEnabled()) { + log.debug("expand node [" + pathToExpand + "]"); + } expandPath(pathToExpand); } } @@ -877,7 +879,7 @@ * Finds a node from the given root {@code node}, and return child searched * * @param node the starting node - * @param id of child searched + * @param id id of searched child * @return the find node or {@code null} if no node matchs. */ public N getChild(N node, String id) { @@ -900,7 +902,9 @@ if (getModel() == null) { // no model set, - log.warn("No model set in " + this); + if (log.isWarnEnabled()) { + log.warn("No model set in " + this); + } return false; } // model is set Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/NavNode.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/NavNode.java 2010-12-30 13:11:59 UTC (rev 2149) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/NavNode.java 2011-01-01 17:31:35 UTC (rev 2150) @@ -78,8 +78,8 @@ * Initialy node has no data child nodes, ({@link #isLoaded()} equals * {@code false}). * when model requires node's childs, it can load them via method - * {@link #populateNode(NavBridge , NavDataProvider , boolean)} - * and {@link #populateChilds(NavBridge , NavDataProvider)} methods. + * {@link #populateNode(NavBridge, NavDataProvider, boolean)} + * and {@link #populateChilds(NavBridge, NavDataProvider)} methods. * <h2>Node rendering</h2 * the {@link AbstractNavTreeCellRenderer} looks the {@link #isDirty} state to * know when render should be (re-)compute and set back the state to {@code false}. @@ -130,7 +130,7 @@ * Given an {@code id}, obtain the child with matching id. * <p/> * If node is NOT {@code loaded}, then first loads it (method - * {@link #populateChilds(NavBridge , NavDataProvider)}) then do search + * {@link #populateChilds(NavBridge, NavDataProvider)}) then do search * on direct childs of the node recursivly. * * @param id the id of the researched node @@ -146,17 +146,17 @@ * Given an {@code id}, obtain the child with matching id. * <p/> * If node is NOT {@code loaded}, then first loads it (method - * {@link #populateChilds(NavBridge , NavDataProvider)}) then return + * {@link #populateChilds(NavBridge, NavDataProvider)}) then return * on direct childs of the node. * * @param id the id of the researched node - * @param bridge model owner of nodes + * @param bridge model owner of nodes * @param provider data provider * @return the found node or {@code null} if not found */ - N getChild(String id , - NavBridge<M, N> model, - NavDataProvider provider); + N getChild(String id, + NavBridge<M, N> bridge, + NavDataProvider provider); /** * Changes the {@link #isDirty} state. Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/NavNodeChildLoador.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/NavNodeChildLoador.java 2010-12-30 13:11:59 UTC (rev 2149) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/NavNodeChildLoador.java 2011-01-01 17:31:35 UTC (rev 2150) @@ -34,7 +34,7 @@ * Object to load childs of a node. * <p/> * It uses {@link NavDataProvider} in method - * {@link #loadChilds(NavBridge , NavNode , NavDataProvider)} to obtain datas + * {@link #loadChilds(NavBridge, NavNode, NavDataProvider)} to obtain datas * then build childs nodes. * <p/> * A factory of such objects can be found in {@link NavHelper} to make @@ -44,19 +44,21 @@ * For example when you want to creat by hand a new node, always prefer to reuse * a such object rathen than duplicate same code in helper... * - * @author tchemit <chemit@codelutin.com> * @param <T> type of data used to create nodes (can be just a String type to use only ids) * @param <O> type of data associated with nodes * @param <N> type of node to used (to make possible full co-variance and no cast in fal implementations). + * @author tchemit <chemit@codelutin.com> * @see NavHelper * @see NavNode * @since 2.1 */ public abstract class NavNodeChildLoador<T, O, M, B extends NavBridge<M, N>, N extends NavNode<M, N>> implements Serializable { - /** Logger */ + /** Logger. */ static private final Log log = LogFactory.getLog(NavNodeChildLoador.class); + private static final long serialVersionUID = 1L; + /** Type of data of the node */ protected final Class<O> beanType; Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/NavTreeBridge.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/NavTreeBridge.java 2010-12-30 13:11:59 UTC (rev 2149) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/NavTreeBridge.java 2011-01-01 17:31:35 UTC (rev 2150) @@ -28,7 +28,6 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import javax.swing.JTree; import javax.swing.event.TreeModelListener; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreeNode; @@ -51,15 +50,13 @@ protected DefaultTreeModel model; /** bridge ui */ - protected JTree ui; +// protected JTree ui; +// public NavTreeBridge() { +// } - public NavTreeBridge() { - } - //-------------------------------------------------------------------------- //-- Model Queries //-------------------------------------------------------------------------- - @Override public DefaultTreeModel getModel() { return model; @@ -126,6 +123,11 @@ model.reload(); } + @Override + public boolean canLoadChild(N node) { + return true; + } + //-------------------------------------------------------------------------- //-- Model Listeners notifications //-------------------------------------------------------------------------- Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/NavTreeHelper.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/NavTreeHelper.java 2010-12-30 13:11:59 UTC (rev 2149) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/NavTreeHelper.java 2011-01-01 17:31:35 UTC (rev 2150) @@ -45,9 +45,13 @@ public class NavTreeHelper<N extends NavTreeNode<N>> extends NavHelper<DefaultTreeModel, JTree, NavTreeBridge<N>, N> { public NavTreeHelper() { - super(new NavTreeBridge<N>()); + this(new NavTreeBridge<N>()); } + public NavTreeHelper(NavTreeBridge<N> bridge) { + super(bridge); + } + @Override public void scrollPathToVisible(TreePath path) { getUI().scrollPathToVisible(path); @@ -141,28 +145,6 @@ return nodes; } -// @Override -// public void setUI(JTree tree, -// boolean addExpandTreeListener) { -// setUI(tree, addExpandTreeListener, null); -// } -// -// @Override -// public void setUI(JTree tree, -// boolean addExpandTreeListener, -// TreeSelectionListener listener) { -// -// setUI(tree, addExpandTreeListener, true, listener); -// } -// -// @Override -// public void setUI(JTree tree, -// boolean addExpandTreeListener, -// boolean addOneClickSelectionListener, -// TreeSelectionListener listener) { -// setUI(tree, addExpandTreeListener, addOneClickSelectionListener, listener, null); -// } - @Override public void setUI(JTree tree, boolean addExpandTreeListener, Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/NavTreeNode.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/NavTreeNode.java 2010-12-30 13:11:59 UTC (rev 2149) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/NavTreeNode.java 2011-01-01 17:31:35 UTC (rev 2150) @@ -188,9 +188,9 @@ } @Override - public N getChild(String id , - NavBridge<DefaultTreeModel, N> model, - NavDataProvider provider) { + public N getChild(String id, + NavBridge<DefaultTreeModel, N> bridge, + NavDataProvider provider) { if (id == null) { @@ -201,7 +201,7 @@ if (!isLoaded()) { // il faut charger les fils du noeud pour effectuer la recherche - populateChilds(model, provider); + populateChilds(bridge, provider); } if (isLeaf()) { @@ -270,21 +270,33 @@ @Override @SuppressWarnings({"unchecked"}) - public void populateChilds(NavBridge<DefaultTreeModel, N> model, NavDataProvider provider) { + public void populateChilds(NavBridge<DefaultTreeModel, N> bridge, + NavDataProvider provider) { if (isStaticNode()) { - log.debug("is static node " + this); + if (log.isDebugEnabled()) { + log.debug("is static node " + this); + } // noeud static, rien a faire return; } + if (!bridge.canLoadChild((N) this)) { + + // can not load childs + if (log.isDebugEnabled()) { + log.debug("Will Skip populateChilds for node : " + this); + } + return; + } + // chargement des noeuds fils du noeud courant try { if (log.isDebugEnabled()) { log.debug("Will load childs for " + this); } - childLoador.loadChilds((NavTreeBridge<N>) model, (N) this, provider); + childLoador.loadChilds((NavTreeBridge<N>) bridge, (N) this, provider); } catch (Exception e) { throw new RuntimeException(e.getMessage(), e); } finally { Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/NavTreeNodeChildLoador.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/NavTreeNodeChildLoador.java 2010-12-30 13:11:59 UTC (rev 2149) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/NavTreeNodeChildLoador.java 2011-01-01 17:31:35 UTC (rev 2150) @@ -36,6 +36,8 @@ */ public abstract class NavTreeNodeChildLoador<T, O, N extends NavTreeNode<N>> extends NavNodeChildLoador<T, O, DefaultTreeModel, NavTreeBridge<N>, N> { + private static final long serialVersionUID = 1L; + protected NavTreeNodeChildLoador(Class<O> beanType) { super(beanType); } Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/NavTreeTableBridge.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/NavTreeTableBridge.java 2010-12-30 13:11:59 UTC (rev 2149) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/NavTreeTableBridge.java 2011-01-01 17:31:35 UTC (rev 2150) @@ -27,7 +27,6 @@ import jaxx.runtime.swing.nav.NavBridge; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.jdesktop.swingx.JXTreeTable; import org.jdesktop.swingx.treetable.TreeTableNode; import javax.swing.event.TreeModelListener; @@ -53,18 +52,17 @@ protected NavTreeTableModel model; /** bridge ui */ - protected JXTreeTable ui; +// protected JXTreeTable ui; - public NavTreeTableBridge() { - if (log.isDebugEnabled()) { - log.debug("New " + this); - } - } +// public NavTreeTableBridge() { +// if (log.isDebugEnabled()) { +// log.debug("New " + this); +// } +// } //-------------------------------------------------------------------------- //-- Model Queries //-------------------------------------------------------------------------- - @Override public NavTreeTableModel getModel() { return model; @@ -132,7 +130,7 @@ } parent.remove(node); -// It's not enought to fire model support... +// It's not enougth to fire model support... // model.getModelSupport().fireChildRemoved(path, index, node); model.getModelSupport().fireTreeStructureChanged(getTreePath(parent)); } @@ -142,6 +140,11 @@ model.getModelSupport().fireTreeStructureChanged(getTreePath(node)); } + @Override + public boolean canLoadChild(N node) { + return true; + } + //-------------------------------------------------------------------------- //-- Listeners notifications //-------------------------------------------------------------------------- @@ -189,7 +192,7 @@ @Override public void nodesWereRemoved(TreeNode node, int[] childIndices, Object[] removedChildren) { - + model.getModelSupport().fireChildrenRemoved(getTreePath(node), childIndices, removedChildren); @@ -291,60 +294,4 @@ return new TreePath(getPathToRoot(node)); } -// //-------------------------------------------------------------------------- -// //-- UI -// //-------------------------------------------------------------------------- -// -// @Override -// public JXTreeTable getUI() { -// return ui; -// } -// -// @Override -// public void setUI(JXTreeTable ui) { -// this.ui = ui; -// } -// -// @Override -// public void scrollPathToVisible(TreePath path) { -// getUI().scrollPathToVisible(path); -// } -// -// @Override -// public void setSelectionPath(TreePath path) { -// getUI().getTreeSelectionModel().setSelectionPath(path); -// } -// -// @Override -// public TreeSelectionModel getSelectionModel() { -// return getUI().getTreeSelectionModel(); -// } -// -// @Override -// public boolean isExpanded(TreePath pathToExpand) { -// return getUI().isExpanded(pathToExpand); -// } -// -// @Override -// public void expandPath(TreePath pathToExpand) { -// getUI().expandPath(pathToExpand); -// } -// -// @Override -// public AbstractNavTreeCellRenderer<NavTreeTableModel, N> getTreeCellRenderer() { -// //FIXME Implements it if possible -// return null; -// } -// -// @SuppressWarnings({"unchecked"}) -// @Override -// public N getSelectedNode() { -// TreePath path = getSelectionModel().getSelectionPath(); -// N node = null; -// if (path != null) { -// node = (N) path.getLastPathComponent(); -// } -// return node; -// } - } \ No newline at end of file Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/NavTreeTableHelper.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/NavTreeTableHelper.java 2010-12-30 13:11:59 UTC (rev 2149) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/NavTreeTableHelper.java 2011-01-01 17:31:35 UTC (rev 2150) @@ -26,6 +26,8 @@ import jaxx.runtime.swing.nav.NavHelper; import jaxx.runtime.swing.nav.tree.AbstractNavTreeCellRenderer; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.jdesktop.swingx.JXTreeTable; import javax.swing.event.TreeSelectionListener; @@ -43,6 +45,9 @@ */ public class NavTreeTableHelper<N extends NavTreeTableNode<N>> extends NavHelper<NavTreeTableModel, JXTreeTable, NavTreeTableBridge<N>, N> { + /** Logger */ + static private final Log log = LogFactory.getLog(NavTreeTableHelper.class); + public NavTreeTableHelper() { super(new NavTreeTableBridge<N>()); } Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/NavTreeTableNode.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/NavTreeTableNode.java 2010-12-30 13:11:59 UTC (rev 2149) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/NavTreeTableNode.java 2011-01-01 17:31:35 UTC (rev 2150) @@ -196,9 +196,9 @@ } @Override - public N getChild(String id , - NavBridge<NavTreeTableModel, N> model, - NavDataProvider provider) { + public N getChild(String id, + NavBridge<NavTreeTableModel, N> bridge, + NavDataProvider provider) { if (id == null) { @@ -209,7 +209,7 @@ if (!isLoaded()) { // il faut charger les fils du noeud pour effectuer la recherche - populateChilds(model, provider); + populateChilds(bridge, provider); } if (isLeaf()) { @@ -278,7 +278,7 @@ @Override @SuppressWarnings({"unchecked"}) - public void populateChilds(NavBridge<NavTreeTableModel, N> model, + public void populateChilds(NavBridge<NavTreeTableModel, N> bridge, NavDataProvider provider) { if (isStaticNode()) { @@ -286,12 +286,21 @@ return; } + if (!bridge.canLoadChild((N) this)) { + + // can not load childs + if (log.isDebugEnabled()) { + log.debug("Will Skip populateChilds for node : " + this); + } + return; + } + // chargement des noeuds fils du noeud courant try { if (log.isDebugEnabled()) { log.debug("Will load childs for " + this); } - childLoador.loadChilds((NavTreeTableBridge<N>) model, (N) this, provider); + childLoador.loadChilds((NavTreeTableBridge<N>) bridge, (N) this, provider); } catch (Exception e) { throw new RuntimeException(e.getMessage(), e); } finally { @@ -323,13 +332,13 @@ @Override public Enumeration<N> children() { List<? extends MutableTreeTableNode> newChildrenList = - new ArrayList<MutableTreeTableNode>(super.children); - + new ArrayList<MutableTreeTableNode>(children); + return (Enumeration<N>) Collections.enumeration(newChildrenList); } public void removeAllChildren() { - super.children.clear(); + children.clear(); } @Override Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/NavTreeTableNodeChildLoador.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/NavTreeTableNodeChildLoador.java 2010-12-30 13:11:59 UTC (rev 2149) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/NavTreeTableNodeChildLoador.java 2011-01-01 17:31:35 UTC (rev 2150) @@ -34,6 +34,8 @@ */ public abstract class NavTreeTableNodeChildLoador<T, O, N extends NavTreeTableNode<N>> extends NavNodeChildLoador<T, O, NavTreeTableModel, NavTreeTableBridge<N>, N> { + private static final long serialVersionUID = 1L; + protected NavTreeTableNodeChildLoador(Class<O> beanType) { super(beanType); }
participants (1)
-
tchemit@users.nuiton.org