Author: tchemit Date: 2010-06-30 18:05:18 +0200 (Wed, 30 Jun 2010) New Revision: 2011 Url: http://nuiton.org/repositories/revision/jaxx/2011 Log: introduce JaxxNavBridge and use it in demo Added: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/NavDemoDataProvider.java trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/ActorsTreeNodeLoador.java trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/MoviesTreeNodeLoador.java trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/NavDemoTreeCellRenderer.java trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/NavDemoTreeHelper.java trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/NavDemoTreeNode.java trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/ActorsTreeTableNodeLoador.java trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/MoviesTreeTableNodeLoador.java trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/NavDemoTreeTableHelper.java trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/NavDemoTreeTableModel.java trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/NavDemoTreeTableNode.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxNavBridge.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/JaxxTreeBridge.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/JaxxTreeHelper.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/JaxxTreeTableBridge.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/JaxxTreeTableHelper.java Removed: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/JaxxNavDemoDataProvider.java trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/JaxxNavDemoHelper.java trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/loadors/ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/JaxxTreeDemoCellRenderer.java trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/JaxxTreeDemoNode.java trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/JaxxTreeTableDemoModel.java trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/JaxxTreeTableDemoNode.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxDelegateTreeModel.java trunk/jaxx-runtime/src/test/java/jaxx/runtime/swing/navigation/ Modified: trunk/jaxx-demo/src/license/THIRD-PARTY.properties trunk/jaxx-demo/src/main/java/jaxx/demo/DemoUI.css trunk/jaxx-demo/src/main/java/jaxx/demo/DemoUI.jaxx trunk/jaxx-demo/src/main/java/jaxx/demo/DemoUIHandler.java trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/JaxxNavDemo.jaxx trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/content/AbstractContentUI.jaxx trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/content/ActorContentUI.jaxx trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/content/ActorsContentUI.jaxx trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/content/MovieContentUI.jaxx trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoCellRenderer.java trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoTreeHelper.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/DataProvider.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxNavHelper.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxNode.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxNodeChildLoador.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/AbstractJaxxTreeCellRenderer.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/JaxxTreeNode.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/JaxxTreeNodeChildLoador.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/JaxxTreeTableModel.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/JaxxTreeTableNode.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/JaxxTreeTableNodeChildLoador.java Modified: trunk/jaxx-demo/src/license/THIRD-PARTY.properties =================================================================== --- trunk/jaxx-demo/src/license/THIRD-PARTY.properties 2010-06-29 22:50:39 UTC (rev 2010) +++ trunk/jaxx-demo/src/license/THIRD-PARTY.properties 2010-06-30 16:05:18 UTC (rev 2011) @@ -16,4 +16,4 @@ commons-primitives--commons-primitives--1.0=The Apache Software License, Version 2.0 javax.help--javahelp--2.0.02=Sun Microsystems, Inc. Binary Code License Agreement for the JDK 5.0 opensymphony--ognl--2.6.11=The OpenSymphony Software License 1.1 -org.nuiton.thirdparty--rsyntaxtextarea--1.4.0=Lesser General Public License (LGPL) v 3.0 +org.nuiton.thirdparty--rsyntaxtextarea--1.4.1=Lesser General Public License (LGPL) v 3.0 Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/DemoUI.css =================================================================== --- trunk/jaxx-demo/src/main/java/jaxx/demo/DemoUI.css 2010-06-29 22:50:39 UTC (rev 2010) +++ trunk/jaxx-demo/src/main/java/jaxx/demo/DemoUI.css 2010-06-30 16:05:18 UTC (rev 2011) @@ -161,7 +161,7 @@ showsRootHandles:false; largeModel:true; font-size:11; - model:{getTreeHelper().createTreeModel()}; + model:{getTreeHelper().createModel()}; cellRenderer:{new DemoCellRenderer(getTreeHelper().getDataProvider())}; } Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/DemoUI.jaxx =================================================================== --- trunk/jaxx-demo/src/main/java/jaxx/demo/DemoUI.jaxx 2010-06-29 22:50:39 UTC (rev 2010) +++ trunk/jaxx-demo/src/main/java/jaxx/demo/DemoUI.jaxx 2010-06-30 16:05:18 UTC (rev 2011) @@ -49,18 +49,6 @@ <script><![CDATA[ -/*public DemoConfig getConfig() { - return getContextValue(DemoConfig.class); -} - -protected DemoUIHandler getHandler() { - return getContextValue(DemoUIHandler.class); -} - -protected DemoTreeHelper getTreeHelper() { - return getContextValue(DemoTreeHelper.class); -}*/ - public boolean acceptLocale(Locale l, String expected) { return l !=null && l.toString().equals(expected); } @@ -108,8 +96,6 @@ <JSplitPane id='splitPane' constraints='BorderLayout.CENTER'> <JScrollPane id='navigationPane'> <JTree id='navigation'/> - <!--model='{getTreeHelper().createTreeModel(DemoUI.this)}' - selectionModel="{getTreeHelper().createTreeHandler(DemoUI.this)}"/--> </JScrollPane> <JPanel id='content'/> Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/DemoUIHandler.java =================================================================== --- trunk/jaxx-demo/src/main/java/jaxx/demo/DemoUIHandler.java 2010-06-29 22:50:39 UTC (rev 2010) +++ trunk/jaxx-demo/src/main/java/jaxx/demo/DemoUIHandler.java 2010-06-30 16:05:18 UTC (rev 2011) @@ -171,7 +171,7 @@ JTree tree = ui.getNavigation(); - ui.getTreeHelper().setTree(tree, true, listener); + ui.getTreeHelper().setUI(tree, true, listener); // auto-expand node when selected SwingUtil.addExpandOnClickListener(tree); @@ -194,14 +194,13 @@ log.info("Will instanciate a new " + constraints); try { // Get constructor - Constructor<? extends DemoPanel> constructor = - (Constructor<? extends DemoPanel>) type.getConstructor(JAXXContext.class); + Constructor<?> constructor = + type.getConstructor(JAXXContext.class); - JAXXInitialContext tx = new JAXXInitialContext().add(ui.getDelegateContext()); - DemoPanel panel = constructor.newInstance(tx); + DemoPanel panel = (DemoPanel) constructor.newInstance(tx); log.info("Demo panel to use : " + panel); Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/JaxxNavDemo.jaxx =================================================================== --- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/JaxxNavDemo.jaxx 2010-06-29 22:50:39 UTC (rev 2010) +++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/JaxxNavDemo.jaxx 2010-06-30 16:05:18 UTC (rev 2011) @@ -24,41 +24,43 @@ <jaxx.demo.DemoPanel layout='{new BorderLayout()}'> - <import> - jaxx.runtime.decorator.DecoratorProvider - jaxx.demo.component.jaxx.nav.content.ActorContentUI - jaxx.demo.component.jaxx.nav.content.ActorsContentUI - jaxx.demo.component.jaxx.nav.content.MovieContentUI - jaxx.demo.component.jaxx.nav.content.MoviesContentUI - jaxx.demo.component.jaxx.nav.tree.JaxxTreeDemoCellRenderer - jaxx.demo.component.jaxx.nav.tree.JaxxTreeDemoNode - jaxx.demo.component.jaxx.nav.treetable.JaxxTreeTableDemoNode - jaxx.demo.entities.Movie - jaxx.demo.entities.People - javax.swing.tree.TreePath - java.lang.reflect.Constructor - jaxx.demo.component.jaxx.nav.content.AbstractContentUI - org.jdesktop.swingx.JXTreeTable - jaxx.runtime.swing.nav.JaxxNode - </import> + <import> + jaxx.runtime.swing.nav.JaxxNode + jaxx.demo.component.jaxx.nav.content.* + jaxx.demo.component.jaxx.nav.tree.* + jaxx.demo.component.jaxx.nav.treetable.* + jaxx.demo.entities.* + jaxx.runtime.decorator.DecoratorProvider - <CardLayout2 id='contentLayout'/> + org.jdesktop.swingx.JXTreeTable + javax.swing.tree.TreePath + java.lang.reflect.Constructor + </import> - <script><![CDATA[ -private JaxxNavDemoDataProvider dataProvider = new JaxxNavDemoDataProvider(); -private JaxxNavDemoHelper<JaxxTreeDemoNode> treeHelper = new JaxxNavDemoHelper<JaxxTreeDemoNode>(dataProvider); -private JaxxNavDemoHelper<JaxxTreeTableDemoNode> treeTableHelper = new JaxxNavDemoHelper<JaxxTreeTableDemoNode>(dataProvider); + <CardLayout2 id='contentLayout'/> + <NavDemoDataProvider id='dataProvider'/> + + <NavDemoTreeHelper id='treeHelper' constructorParams='getDataProvider()'/> + + <NavDemoTreeTableHelper id='treeTableHelper' + constructorParams='getDataProvider()'/> + + <script><![CDATA[ + @Override protected String[] getSources() { return new String[]{ getDefaultSource(), - "JaxxNavDemoHelper.java", - "tree/JaxxTreeDemoNode.java", - "tree/JaxxTreeDemoCellRenderer.java", - "treetable/JaxxTreeTableDemoModel.java", - "treetable/JaxxTreeTableDemoNode.java", - "loadors/ActorsNodeLoadors.java", - "loadors/MoviesNodeLoadors.java"}; + "tree/NavDemoTreeNode.java", + "tree/NavDemoTreeHelper.java", + "tree/NavDemoTreeCellRenderer.java", + "tree/ActorsTreeNodeLoador.java", + "tree/MoviesTreeNodeLoador.java", + "treetable/NavDemoTreeTableNode.java", + "treetable/NavDemoTreeTableHelper.java", + "treetable/ActorsTreeTableNodeLoador.java", + "treetable/MoviesTreeTableNodeLoador.java" + }; } private void $afterCompleteSetup() { @@ -70,7 +72,7 @@ @Override public void valueChanged(TreeSelectionEvent event) { TreePath path = event.getPath(); - JaxxTreeDemoNode demoNode = (JaxxTreeDemoNode) path.getLastPathComponent(); + NavDemoTreeNode demoNode = (NavDemoTreeNode) path.getLastPathComponent(); if (log.isDebugEnabled()) { log.debug("Select demoNode " + demoNode); @@ -89,7 +91,7 @@ @Override public void valueChanged(TreeSelectionEvent event) { TreePath path = event.getPath(); - JaxxTreeTableDemoNode demoNode = (JaxxTreeTableDemoNode) path.getLastPathComponent(); + NavDemoTreeTableNode demoNode = (NavDemoTreeTableNode) path.getLastPathComponent(); if (log.isDebugEnabled()) { log.debug("Select demoNode " + demoNode); @@ -107,13 +109,13 @@ DecoratorProvider decoratorProvider = getContextValue(DecoratorProvider.class); // Attach renderer - navigationTree.setCellRenderer(new JaxxTreeDemoCellRenderer(decoratorProvider, dataProvider)); + navigationTree.setCellRenderer(new NavDemoTreeCellRenderer(decoratorProvider, dataProvider)); // Register tree - treeHelper.setTree(navigationTree, true, treeSelectionListener); + treeHelper.setUI(navigationTree, true, treeSelectionListener); // Register tree table - treeTableHelper.setTreeTable(navigationTreeTable, true, treeTableSelectionListener); + treeTableHelper.setUI(navigationTreeTable, true, treeTableSelectionListener); SwingUtilities.invokeLater(new Runnable() { @@ -143,13 +145,13 @@ if (editType.equals(String.class)) { // Actors categorie demoNode - if (JaxxNavDemoHelper.ACTORS_CATEGORY_NODE.equals(id)) { + if (NavDemoTreeHelper.ACTORS_CATEGORY_NODE.equals(id)) { java.util.List<People> peoples = dataProvider.getPeoples(); showUI(peoples, ActorsContentUI.class); // Movies categorie demoNode - } else if (JaxxNavDemoHelper.MOVIES_CATEGORY_NODE.equals(id)) { + } else if (NavDemoTreeHelper.MOVIES_CATEGORY_NODE.equals(id)) { java.util.List<Movie> movies = dataProvider.getMovies(); showUI(movies, MoviesContentUI.class); @@ -212,43 +214,43 @@ return (E) contentLayout.getComponent(content, contentName); } ]]> - </script> + </script> - <JSplitPane id='splitPane' - constraints='BorderLayout.CENTER' - oneTouchExpandable='true'> + <JSplitPane id='splitPane' + constraints='BorderLayout.CENTER' + oneTouchExpandable='true'> - <JTabbedPane> - <tab title='jaxxdemo.tree.tabtitle'> - <JScrollPane border='{null}' - horizontalScrollBarPolicy='{JScrollPane.HORIZONTAL_SCROLLBAR_NEVER}' - verticalScrollBarPolicy='{JScrollPane.VERTICAL_SCROLLBAR_NEVER}'> + <JTabbedPane> + <tab title='jaxxdemo.tree.tabtitle'> + <JScrollPane border='{null}' + horizontalScrollBarPolicy='{JScrollPane.HORIZONTAL_SCROLLBAR_NEVER}' + verticalScrollBarPolicy='{JScrollPane.VERTICAL_SCROLLBAR_NEVER}'> - <JTree id="navigationTree" - font-size='11' - rootVisible='false' - showsRootHandles='false' - model='{treeHelper.createTreeModel()}'/> + <JTree id="navigationTree" + font-size='11' + rootVisible='false' + showsRootHandles='false' + model='{treeHelper.createModel()}'/> - </JScrollPane> - </tab> - <tab title='jaxxdemo.treeTable.tabtitle'> - <JScrollPane border='{null}' - horizontalScrollBarPolicy='{JScrollPane.HORIZONTAL_SCROLLBAR_NEVER}' - verticalScrollBarPolicy='{JScrollPane.VERTICAL_SCROLLBAR_NEVER}'> + </JScrollPane> + </tab> + <tab title='jaxxdemo.treeTable.tabtitle'> + <JScrollPane border='{null}' + horizontalScrollBarPolicy='{JScrollPane.HORIZONTAL_SCROLLBAR_NEVER}' + verticalScrollBarPolicy='{JScrollPane.VERTICAL_SCROLLBAR_NEVER}'> - <JXTreeTable id="navigationTreeTable" - font-size='11' - rootVisible='false' - showsRootHandles='false' - treeTableModel='{treeTableHelper.createTreeTableModel()}'/> + <JXTreeTable id="navigationTreeTable" + font-size='11' + rootVisible='false' + showsRootHandles='false' + treeTableModel='{treeTableHelper.createModel()}'/> - </JScrollPane> - </tab> - </JTabbedPane> + </JScrollPane> + </tab> + </JTabbedPane> - <JPanel id="content" layout="{contentLayout}"/> + <JPanel id="content" layout="{contentLayout}"/> - </JSplitPane> + </JSplitPane> </jaxx.demo.DemoPanel> Deleted: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/JaxxNavDemoDataProvider.java =================================================================== --- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/JaxxNavDemoDataProvider.java 2010-06-29 22:50:39 UTC (rev 2010) +++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/JaxxNavDemoDataProvider.java 2010-06-30 16:05:18 UTC (rev 2011) @@ -1,112 +0,0 @@ -/* - * #%L - * JAXX :: Demo - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2008 - 2010 CodeLutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -package jaxx.demo.component.jaxx.nav; - -import jaxx.demo.entities.Movie; -import jaxx.demo.entities.People; -import jaxx.runtime.swing.nav.DataProvider; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author sletellier <letellier@codelutin.com> - * @since 2.1 - */ -public class JaxxNavDemoDataProvider implements DataProvider { - - /** Logger */ - static private final Log log = LogFactory.getLog(JaxxNavDemoDataProvider.class); - - protected Map<String, Movie> movies; - - protected Map<String, People> peoples; - - public JaxxNavDemoDataProvider() { - - movies = new HashMap<String, Movie>(); - peoples = new HashMap<String, People>(); - - log.info("for " + this); - People a = new People("0", "Jack", "Black", 0, "/jaxx/demo/images/jack.jpg"); - People a2 = new People("1", "Héctor", "Jiménez", 0, "/jaxx/demo/images/hector.jpg"); - People a3 = new People("2", "Ana", "de la Reguera", 0, "/jaxx/demo/images/ana.jpg"); - - Movie m = new Movie("0", "Nacho libre", 1996, "/jaxx/demo/images/nacho.jpg"); - m.addActor(a); - m.addActor(a2); - m.addActor(a3); - - Movie m2 = new Movie("1", "Nacho 2", 2009, "/jaxx/demo/images/nacho2.png"); - m2.addActor(a); - m2.addActor(a2); - - movies.put(m.getId(), m); - movies.put(m2.getId(), m2); - - peoples.put(a.getId(), a); - peoples.put(a2.getId(), a2); - peoples.put(a3.getId(), a3); - } - - @Override - public boolean isEnabled() { - return true; - } - - public Movie getMovie(String id) { - return movies.get(id); - } - - public People getPeople(String id) { - return peoples.get(id); - } - - public List<Movie> getMovies() { - return new ArrayList<Movie>(movies.values()); - } - - public List<People> getPeoples() { - return new ArrayList<People>(peoples.values()); - } - - public List<People> getPeoples(Movie m) { - return m.getActors(); - } - - public List<People> getPeoples(String moviesId) { - - if (log.isDebugEnabled()) { - log.debug("Get people for movie " + moviesId); - } - - return movies.get(moviesId).getActors(); - } -} Deleted: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/JaxxNavDemoHelper.java =================================================================== --- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/JaxxNavDemoHelper.java 2010-06-29 22:50:39 UTC (rev 2010) +++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/JaxxNavDemoHelper.java 2010-06-30 16:05:18 UTC (rev 2011) @@ -1,141 +0,0 @@ -/* - * #%L - * JAXX :: Demo - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2008 - 2010 CodeLutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -package jaxx.demo.component.jaxx.nav; - -import jaxx.demo.component.jaxx.nav.tree.JaxxTreeDemoNode; -import jaxx.demo.component.jaxx.nav.treetable.JaxxTreeTableDemoModel; -import jaxx.demo.component.jaxx.nav.treetable.JaxxTreeTableDemoNode; -import jaxx.demo.component.jaxx.nav.loadors.ActorsNodeLoadors; -import jaxx.demo.component.jaxx.nav.loadors.MoviesNodeLoadors; -import jaxx.runtime.swing.nav.JaxxNavHelper; -import jaxx.runtime.swing.nav.JaxxNode; -import jaxx.runtime.swing.nav.treetable.JaxxTreeTableModel; -import jaxx.runtime.swing.nav.JaxxDelegateTreeModel; - -import javax.swing.tree.DefaultTreeModel; - -import static org.nuiton.i18n.I18n.n_; - -/** - * @author sletellier <letellier@codelutin.com> - * @since 2.1 - */ -public class JaxxNavDemoHelper<N extends JaxxNode<N>> extends JaxxNavHelper<N> { - - public static String MOVIES_CATEGORY_NODE = "movies"; - - public static String ACTORS_CATEGORY_NODE = "actors"; - - public JaxxNavDemoHelper(JaxxNavDemoDataProvider provider) { - setDataProvider(provider); - } - - @Override - public JaxxNavDemoDataProvider getDataProvider() { - return (JaxxNavDemoDataProvider)dataProvider; - } - - @SuppressWarnings({"unchecked"}) - public DefaultTreeModel createTreeModel() { - - // Create root static node - JaxxNode root = new JaxxTreeDemoNode( - String.class, - "Root node", - null, - null - ); - - // Create movies category node - JaxxNode moviesCategoryNode = new JaxxTreeDemoNode( - String.class, - n_(MOVIES_CATEGORY_NODE), - null, - new MoviesNodeLoadors<JaxxTreeDemoNode>() - ); - - // Create peoples category node - JaxxNode peoplesCategoryNode = new JaxxTreeDemoNode( - String.class, - n_(ACTORS_CATEGORY_NODE), - null, - new ActorsNodeLoadors<JaxxTreeDemoNode>() - ); - - // Add to root - root.add(moviesCategoryNode); - root.add(peoplesCategoryNode); - - // Create model - JaxxDelegateTreeModel<N> model = createTreeModel((N) root); - - // Populate childs nodes - root.populateChilds(model, getDataProvider()); - - return getTreeModel(); - } - - @SuppressWarnings({"unchecked"}) - public JaxxTreeTableModel createTreeTableModel() { - - // Create root static node - JaxxNode root = new JaxxTreeTableDemoNode( - String.class, - "Root node", - null, - null - ); - - // Create movies category node - JaxxNode moviesCategoryNode = new JaxxTreeTableDemoNode( - String.class, - n_(MOVIES_CATEGORY_NODE), - null, - new MoviesNodeLoadors<JaxxTreeTableDemoNode>(true) - ); - - // Create peoples category node - JaxxNode peoplesCategoryNode = new JaxxTreeTableDemoNode( - String.class, - n_(ACTORS_CATEGORY_NODE), - null, - new ActorsNodeLoadors<JaxxTreeTableDemoNode>(true) - ); - - // Add to root - root.add(moviesCategoryNode); - root.add(peoplesCategoryNode); - - // Create model - JaxxTreeTableDemoModel delegate = new JaxxTreeTableDemoModel(getDataProvider()); - JaxxDelegateTreeModel model = createTreeTableModel(delegate, (N) root); - - // Populate childs nodes - root.populateChilds(model, getDataProvider()); - - return getTreeTableModel(); - } -} Copied: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/NavDemoDataProvider.java (from rev 2010, trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/JaxxNavDemoDataProvider.java) =================================================================== --- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/NavDemoDataProvider.java (rev 0) +++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/NavDemoDataProvider.java 2010-06-30 16:05:18 UTC (rev 2011) @@ -0,0 +1,112 @@ +/* + * #%L + * JAXX :: Demo + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2008 - 2010 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +package jaxx.demo.component.jaxx.nav; + +import jaxx.demo.entities.Movie; +import jaxx.demo.entities.People; +import jaxx.runtime.swing.nav.DataProvider; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author sletellier <letellier@codelutin.com> + * @since 2.1 + */ +public class NavDemoDataProvider implements DataProvider { + + /** Logger */ + static private final Log log = LogFactory.getLog(NavDemoDataProvider.class); + + protected Map<String, Movie> movies; + + protected Map<String, People> peoples; + + public NavDemoDataProvider() { + + movies = new HashMap<String, Movie>(); + peoples = new HashMap<String, People>(); + + log.info("for " + this); + People a = new People("0", "Jack", "Black", 0, "/jaxx/demo/images/jack.jpg"); + People a2 = new People("1", "Héctor", "Jiménez", 0, "/jaxx/demo/images/hector.jpg"); + People a3 = new People("2", "Ana", "de la Reguera", 0, "/jaxx/demo/images/ana.jpg"); + + Movie m = new Movie("0", "Nacho libre", 1996, "/jaxx/demo/images/nacho.jpg"); + m.addActor(a); + m.addActor(a2); + m.addActor(a3); + + Movie m2 = new Movie("1", "Nacho 2", 2009, "/jaxx/demo/images/nacho2.png"); + m2.addActor(a); + m2.addActor(a2); + + movies.put(m.getId(), m); + movies.put(m2.getId(), m2); + + peoples.put(a.getId(), a); + peoples.put(a2.getId(), a2); + peoples.put(a3.getId(), a3); + } + + @Override + public boolean isEnabled() { + return true; + } + + public Movie getMovie(String id) { + return movies.get(id); + } + + public People getPeople(String id) { + return peoples.get(id); + } + + public List<Movie> getMovies() { + return new ArrayList<Movie>(movies.values()); + } + + public List<People> getPeoples() { + return new ArrayList<People>(peoples.values()); + } + + public List<People> getPeoples(Movie m) { + return m.getActors(); + } + + public List<People> getPeoples(String moviesId) { + + if (log.isDebugEnabled()) { + log.debug("Get people for movie " + moviesId); + } + + return movies.get(moviesId).getActors(); + } +} Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/content/AbstractContentUI.jaxx =================================================================== --- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/content/AbstractContentUI.jaxx 2010-06-29 22:50:39 UTC (rev 2010) +++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/content/AbstractContentUI.jaxx 2010-06-30 16:05:18 UTC (rev 2011) @@ -26,17 +26,19 @@ layout='{new BorderLayout()}' genericType='B extends Object'> + <import> + jaxx.demo.component.jaxx.nav.tree.NavDemoTreeHelper + jaxx.demo.component.jaxx.nav.treetable.NavDemoTreeTableHelper + </import> + + <NavDemoTreeHelper id='treeHelper' + initializer='getContextValue(NavDemoTreeHelper.class,"treeHelper")'/> + + <NavDemoTreeTableHelper id='treeTableHelper' + initializer='getContextValue(NavDemoTreeTableHelper.class,"treeTableHelper")'/> + <script><![CDATA[ -import jaxx.demo.component.jaxx.nav.JaxxNavDemoHelper; -// Get helper in context -JaxxNavDemoHelper getTreeHelper() { - return getContextValue(JaxxNavDemoHelper.class, "treeHelper"); -} -JaxxNavDemoHelper getTreeTableHelper() { - return getContextValue(JaxxNavDemoHelper.class, "treeTableHelper"); -} - public abstract B getData(); public abstract void setData(B data); Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/content/ActorContentUI.jaxx =================================================================== --- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/content/ActorContentUI.jaxx 2010-06-29 22:50:39 UTC (rev 2010) +++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/content/ActorContentUI.jaxx 2010-06-30 16:05:18 UTC (rev 2011) @@ -27,8 +27,10 @@ <import> jaxx.demo.entities.* </import> + + <People id='data' javaBean='null'/> + <script><![CDATA[ -import jaxx.demo.entities.*; String getContent(People data) { if (data == null) { @@ -51,8 +53,6 @@ constraints='BorderLayout.CENTER' oneTouchExpandable='true'> - <People id='data' javaBean='null'/> - <JScrollPane border='{null}' horizontalScrollBarPolicy='{JScrollPane.HORIZONTAL_SCROLLBAR_NEVER}' verticalScrollBarPolicy='{JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED}'> Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/content/ActorsContentUI.jaxx =================================================================== --- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/content/ActorsContentUI.jaxx 2010-06-29 22:50:39 UTC (rev 2010) +++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/content/ActorsContentUI.jaxx 2010-06-30 16:05:18 UTC (rev 2011) @@ -24,12 +24,18 @@ <AbstractContentUI superGenericType='java.util.List<People>'> + <import> + jaxx.demo.entities.* + jaxx.runtime.swing.renderer.DecoratorProviderListCellRenderer + jaxx.runtime.binding.SimpleJAXXObjectBinding + java.beans.PropertyChangeEvent + java.beans.PropertyChangeListener + + </import> + + <java.util.List id='data' genericType='People' javaBean='null'/> + <script><![CDATA[ -import jaxx.demo.entities.*; -import jaxx.runtime.swing.renderer.DecoratorProviderListCellRenderer; -import jaxx.runtime.binding.SimpleJAXXObjectBinding; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; private void $afterCompleteSetup() { @@ -59,8 +65,6 @@ } ]]></script> - <java.util.List id='data' genericType='People' javaBean='null'/> - <JPanel layout='{new BorderLayout()}'> <JScrollPane Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/content/MovieContentUI.jaxx =================================================================== --- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/content/MovieContentUI.jaxx 2010-06-29 22:50:39 UTC (rev 2010) +++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/content/MovieContentUI.jaxx 2010-06-30 16:05:18 UTC (rev 2011) @@ -24,9 +24,14 @@ <AbstractContentUI superGenericType='Movie'> + <import> + jaxx.demo.entities.* + </import> + + <Movie id='data' javaBean='null'/> + <script><![CDATA[ -import jaxx.demo.entities.*; - + String getContent(Movie data) { if (data == null) { return "no content"; @@ -47,8 +52,6 @@ constraints='BorderLayout.CENTER' oneTouchExpandable='true'> - <Movie id='data' javaBean='null'/> - <JScrollPane border='{null}' horizontalScrollBarPolicy='{JScrollPane.HORIZONTAL_SCROLLBAR_NEVER}' verticalScrollBarPolicy='{JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED}'> @@ -65,8 +68,7 @@ verticalScrollBarPolicy='{JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED}' minimumSize='{SwingUtil.newMinDimension()}'> - <JLabel horizontalAlignment='center' - icon='{getImage(getData())}'/> + <JLabel horizontalAlignment='center' icon='{getImage(getData())}'/> </JScrollPane> Added: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/ActorsTreeNodeLoador.java =================================================================== --- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/ActorsTreeNodeLoador.java (rev 0) +++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/ActorsTreeNodeLoador.java 2010-06-30 16:05:18 UTC (rev 2011) @@ -0,0 +1,82 @@ +/* + * #%L + * JAXX :: Demo + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2008 - 2010 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +package jaxx.demo.component.jaxx.nav.tree; + +import jaxx.demo.component.jaxx.nav.NavDemoDataProvider; +import jaxx.demo.entities.People; +import jaxx.runtime.swing.nav.DataProvider; +import jaxx.runtime.swing.nav.tree.JaxxTreeNodeChildLoador; + +import java.util.List; + +/** + * @author sletellier <letellier@codelutin.com> + * @since 2.1 + */ +public class ActorsTreeNodeLoador extends JaxxTreeNodeChildLoador<People, People, NavDemoTreeNode> { + + private static final long serialVersionUID = 1L; + + public ActorsTreeNodeLoador() { + super(People.class); + } + + @Override + public List<People> getData(Class<?> parentClass, + String moviesId, + DataProvider dataProvider) throws Exception { + + // Get people for parentId + NavDemoDataProvider provider = (NavDemoDataProvider) dataProvider; + + // If its not root + if (moviesId != null) { + + // Return peoples for movies id + return provider.getPeoples(moviesId); + } + + // Return all peoples + return provider.getPeoples(); + } + + @SuppressWarnings({"unchecked"}) + @Override + public NavDemoTreeNode createNode(People data, DataProvider dataProvider) { + + NavDemoTreeNode actorNode; + + // Create actor static nodes + actorNode = new NavDemoTreeNode( + getBeanType(), + data.getId(), + null, + null + ); + + return actorNode; + } +} \ No newline at end of file Property changes on: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/ActorsTreeNodeLoador.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Deleted: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/JaxxTreeDemoCellRenderer.java =================================================================== --- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/JaxxTreeDemoCellRenderer.java 2010-06-29 22:50:39 UTC (rev 2010) +++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/JaxxTreeDemoCellRenderer.java 2010-06-30 16:05:18 UTC (rev 2011) @@ -1,114 +0,0 @@ -/* - * #%L - * JAXX :: Demo - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2008 - 2010 CodeLutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -package jaxx.demo.component.jaxx.nav.tree; - -import jaxx.demo.component.jaxx.nav.JaxxNavDemoDataProvider; -import jaxx.demo.entities.Movie; -import jaxx.demo.entities.People; -import jaxx.runtime.decorator.Decorator; -import jaxx.runtime.decorator.DecoratorProvider; -import jaxx.runtime.swing.nav.tree.AbstractJaxxTreeCellRenderer; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import javax.swing.JTree; -import java.awt.Component; - -/** - * @author sletellier <letellier@codelutin.com> - * @since 2.1 - */ -public class JaxxTreeDemoCellRenderer extends AbstractJaxxTreeCellRenderer<JaxxTreeDemoNode> { - - /** Logger */ - protected static final Log log = - LogFactory.getLog(JaxxTreeDemoCellRenderer.class); - - protected DecoratorProvider decoratorProvider; - - public JaxxTreeDemoCellRenderer(DecoratorProvider decoratorProvider, JaxxNavDemoDataProvider provider) { - super.setDataProvider(provider); - this.decoratorProvider = decoratorProvider; - } - - @Override - public JaxxNavDemoDataProvider getDataProvider() { - return (JaxxNavDemoDataProvider) super.getDataProvider(); - } - - @Override - protected String computeNodeText(JaxxTreeDemoNode node) { - - // Get node type - Class<?> editType = node.getInternalClass(); - String id = node.getId(); - - // get decorator - Decorator<?> decorator = decoratorProvider.getDecorator(editType); - - Object toDecorate = null; - - // People node - if (editType.equals(People.class)) { - toDecorate = getDataProvider().getPeople(id); - - // Movie node - } else if (editType.equals(Movie.class)) { - toDecorate = getDataProvider().getMovie(id); - } - - // Get decorated value - String decorated = decorator.toString(toDecorate); - - if (log.isDebugEnabled()) { - log.debug("Compute text for node " + - node + " return " + - decorated); - } - - return decorated; - } - - @Override - public Component getTreeCellRendererComponent(JTree tree, - Object value, - boolean sel, - boolean expanded, - boolean leaf, int row, - boolean hasFocus) { - - // get node - JaxxTreeDemoNode node = (JaxxTreeDemoNode) value; - - // get text for node - String text = getNodeText(node); - - // Render node - return super.getTreeCellRendererComponent(tree, text, sel, - expanded, leaf, - row, hasFocus); - } -} Deleted: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/JaxxTreeDemoNode.java =================================================================== --- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/JaxxTreeDemoNode.java 2010-06-29 22:50:39 UTC (rev 2010) +++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/JaxxTreeDemoNode.java 2010-06-30 16:05:18 UTC (rev 2011) @@ -1,49 +0,0 @@ -/* - * #%L - * JAXX :: Demo - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2008 - 2010 CodeLutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -package jaxx.demo.component.jaxx.nav.tree; - -import jaxx.runtime.swing.nav.JaxxNodeChildLoador; -import jaxx.runtime.swing.nav.tree.JaxxTreeNode; - -/** - * @author sletellier <letellier@codelutin.com> - * @since 2.1 - */ -public class JaxxTreeDemoNode extends JaxxTreeNode<JaxxTreeDemoNode> { - - private static final long serialVersionUID = 1L; - - public JaxxTreeDemoNode(String id) { - super(id); - } - - public JaxxTreeDemoNode(Class<?> internalClass, - String id, - String context, - JaxxNodeChildLoador<?, ?, JaxxTreeDemoNode> loador) { - super(internalClass, id, context, loador); - } -} Added: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/MoviesTreeNodeLoador.java =================================================================== --- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/MoviesTreeNodeLoador.java (rev 0) +++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/MoviesTreeNodeLoador.java 2010-06-30 16:05:18 UTC (rev 2011) @@ -0,0 +1,96 @@ +/* + * #%L + * JAXX :: Demo + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2008 - 2010 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +package jaxx.demo.component.jaxx.nav.tree; + +import jaxx.demo.component.jaxx.nav.NavDemoDataProvider; +import jaxx.demo.entities.Movie; +import jaxx.runtime.swing.nav.DataProvider; +import jaxx.runtime.swing.nav.JaxxNavHelper; +import jaxx.runtime.swing.nav.tree.JaxxTreeNodeChildLoador; + +import java.util.List; + +import static org.nuiton.i18n.I18n.n_; + +/** + * @author sletellier <letellier@codelutin.com> + * @since 2.1 + */ +public class MoviesTreeNodeLoador extends JaxxTreeNodeChildLoador<Movie, Movie, NavDemoTreeNode> { + + private static final long serialVersionUID = 1L; + + protected boolean isTreeTable; + + public MoviesTreeNodeLoador() { + this(false); + } + + public MoviesTreeNodeLoador(boolean isTreeTable) { + super(Movie.class); + this.isTreeTable = isTreeTable; + } + + @Override + public List<Movie> getData(Class<?> parentClass, + String parentId, + DataProvider dataProvider) throws Exception { + + NavDemoDataProvider provider = (NavDemoDataProvider) dataProvider; + + // Return all movies + return provider.getMovies(); + } + + @SuppressWarnings({"unchecked"}) + @Override + public NavDemoTreeNode createNode(Movie data, DataProvider dataProvider) { + + NavDemoTreeNode moviesNode; + NavDemoTreeNode actorsCategoryNode; + + // Create movies static nodes + moviesNode = new NavDemoTreeNode( + getBeanType(), + data.getId(), + null, + null + ); + + // Create clients category node + actorsCategoryNode = new NavDemoTreeNode( + String.class, + n_(NavDemoTreeHelper.ACTORS_CATEGORY_NODE), + null, + JaxxNavHelper.getChildLoador(ActorsTreeNodeLoador.class) + ); + + // Add actors nodes to movies node + moviesNode.add(actorsCategoryNode); + + return moviesNode; + } +} \ No newline at end of file Property changes on: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/MoviesTreeNodeLoador.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Copied: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/NavDemoTreeCellRenderer.java (from rev 2010, trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/JaxxTreeDemoCellRenderer.java) =================================================================== --- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/NavDemoTreeCellRenderer.java (rev 0) +++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/NavDemoTreeCellRenderer.java 2010-06-30 16:05:18 UTC (rev 2011) @@ -0,0 +1,115 @@ +/* + * #%L + * JAXX :: Demo + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2008 - 2010 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +package jaxx.demo.component.jaxx.nav.tree; + +import jaxx.demo.component.jaxx.nav.NavDemoDataProvider; +import jaxx.demo.entities.Movie; +import jaxx.demo.entities.People; +import jaxx.runtime.decorator.Decorator; +import jaxx.runtime.decorator.DecoratorProvider; +import jaxx.runtime.swing.nav.tree.AbstractJaxxTreeCellRenderer; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import javax.swing.JTree; +import javax.swing.tree.DefaultTreeModel; +import java.awt.Component; + +/** + * @author sletellier <letellier@codelutin.com> + * @since 2.1 + */ +public class NavDemoTreeCellRenderer extends AbstractJaxxTreeCellRenderer<DefaultTreeModel, NavDemoTreeNode> { + + /** Logger */ + protected static final Log log = + LogFactory.getLog(NavDemoTreeCellRenderer.class); + + protected DecoratorProvider decoratorProvider; + + public NavDemoTreeCellRenderer(DecoratorProvider decoratorProvider, NavDemoDataProvider provider) { + setDataProvider(provider); + this.decoratorProvider = decoratorProvider; + } + + @Override + public NavDemoDataProvider getDataProvider() { + return (NavDemoDataProvider) super.getDataProvider(); + } + + @Override + protected String computeNodeText(NavDemoTreeNode node) { + + // Get node type + Class<?> editType = node.getInternalClass(); + String id = node.getId(); + + // get decorator + Decorator<?> decorator = decoratorProvider.getDecorator(editType); + + Object toDecorate = null; + + // People node + if (editType.equals(People.class)) { + toDecorate = getDataProvider().getPeople(id); + + // Movie node + } else if (editType.equals(Movie.class)) { + toDecorate = getDataProvider().getMovie(id); + } + + // Get decorated value + String decorated = decorator.toString(toDecorate); + + if (log.isDebugEnabled()) { + log.debug("Compute text for node " + + node + " return " + + decorated); + } + + return decorated; + } + + @Override + public Component getTreeCellRendererComponent(JTree tree, + Object value, + boolean sel, + boolean expanded, + boolean leaf, int row, + boolean hasFocus) { + + // get node + NavDemoTreeNode node = (NavDemoTreeNode) value; + + // get text for node + String text = getNodeText(node); + + // Render node + return super.getTreeCellRendererComponent(tree, text, sel, + expanded, leaf, + row, hasFocus); + } +} Added: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/NavDemoTreeHelper.java =================================================================== --- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/NavDemoTreeHelper.java (rev 0) +++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/NavDemoTreeHelper.java 2010-06-30 16:05:18 UTC (rev 2011) @@ -0,0 +1,94 @@ +/* + * #%L + * JAXX :: Demo + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2008 - 2010 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +package jaxx.demo.component.jaxx.nav.tree; + +import jaxx.demo.component.jaxx.nav.NavDemoDataProvider; +import jaxx.runtime.swing.nav.tree.JaxxTreeHelper; + +import javax.swing.tree.DefaultTreeModel; + +import static org.nuiton.i18n.I18n.n_; + +/** + * @author sletellier <letellier@codelutin.com> + * @since 2.1 + */ +public class NavDemoTreeHelper extends JaxxTreeHelper<NavDemoTreeNode> { + + public static String MOVIES_CATEGORY_NODE = "movies"; + + public static String ACTORS_CATEGORY_NODE = "actors"; + + public NavDemoTreeHelper(NavDemoDataProvider provider) { + setDataProvider(provider); + } + + @Override + public NavDemoDataProvider getDataProvider() { + return (NavDemoDataProvider) dataProvider; + } + + @SuppressWarnings({"unchecked"}) + public DefaultTreeModel createModel() { + + // Create root static node + NavDemoTreeNode root = new NavDemoTreeNode( + String.class, + "Root node", + null, + null + ); + + // Create movies category node + NavDemoTreeNode moviesCategoryNode = new NavDemoTreeNode( + String.class, + n_(MOVIES_CATEGORY_NODE), + null, + getChildLoador(MoviesTreeNodeLoador.class) + ); + + // Create peoples category node + NavDemoTreeNode peoplesCategoryNode = new NavDemoTreeNode( + String.class, + n_(ACTORS_CATEGORY_NODE), + null, + getChildLoador(ActorsTreeNodeLoador.class) + ); + + // Add to root + root.add(moviesCategoryNode); + root.add(peoplesCategoryNode); + + // Create model + DefaultTreeModel model = createModel(root); + + // Populate childs nodes + root.populateChilds(getBridge(), getDataProvider()); + + return model; + } + +} \ No newline at end of file Property changes on: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/NavDemoTreeHelper.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Copied: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/NavDemoTreeNode.java (from rev 2010, trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/JaxxTreeDemoNode.java) =================================================================== --- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/NavDemoTreeNode.java (rev 0) +++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/NavDemoTreeNode.java 2010-06-30 16:05:18 UTC (rev 2011) @@ -0,0 +1,49 @@ +/* + * #%L + * JAXX :: Demo + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2008 - 2010 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +package jaxx.demo.component.jaxx.nav.tree; + +import jaxx.runtime.swing.nav.tree.JaxxTreeNode; +import jaxx.runtime.swing.nav.tree.JaxxTreeNodeChildLoador; + +/** + * @author sletellier <letellier@codelutin.com> + * @since 2.1 + */ +public class NavDemoTreeNode extends JaxxTreeNode<NavDemoTreeNode> { + + private static final long serialVersionUID = 1L; + + public NavDemoTreeNode(String id) { + super(id); + } + + public NavDemoTreeNode(Class<?> internalClass, + String id, + String context, + JaxxTreeNodeChildLoador<?, ?, NavDemoTreeNode> loador) { + super(internalClass, id, context, loador); + } +} Added: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/ActorsTreeTableNodeLoador.java =================================================================== --- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/ActorsTreeTableNodeLoador.java (rev 0) +++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/ActorsTreeTableNodeLoador.java 2010-06-30 16:05:18 UTC (rev 2011) @@ -0,0 +1,83 @@ +/* + * #%L + * JAXX :: Demo + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2008 - 2010 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +package jaxx.demo.component.jaxx.nav.treetable; + +import jaxx.demo.component.jaxx.nav.NavDemoDataProvider; +import jaxx.demo.entities.People; +import jaxx.runtime.swing.nav.DataProvider; +import jaxx.runtime.swing.nav.treetable.JaxxTreeTableNodeChildLoador; + +import java.util.List; + +/** + * @author sletellier <letellier@codelutin.com> + * @since 2.1 + */ +public class ActorsTreeTableNodeLoador extends JaxxTreeTableNodeChildLoador<People, People, NavDemoTreeTableNode> { + + private static final long serialVersionUID = 1L; + + public ActorsTreeTableNodeLoador() { + super(People.class); + } + + @Override + public List<People> getData(Class<?> parentClass, + String moviesId, + DataProvider dataProvider) throws Exception { + + // Get people for parentId + NavDemoDataProvider provider = (NavDemoDataProvider) dataProvider; + + // If its not root + if (moviesId != null) { + + // Return peoples for movies id + return provider.getPeoples(moviesId); + } + + // Return all peoples + return provider.getPeoples(); + } + + @SuppressWarnings({"unchecked"}) + @Override + public NavDemoTreeTableNode createNode(People data, DataProvider dataProvider) { + + NavDemoTreeTableNode actorNode; + + // Create actor static nodes + + actorNode = new NavDemoTreeTableNode( + getBeanType(), + data.getId(), + null, + null + ); + + return actorNode; + } +} \ No newline at end of file Property changes on: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/ActorsTreeTableNodeLoador.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Deleted: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/JaxxTreeTableDemoModel.java =================================================================== --- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/JaxxTreeTableDemoModel.java 2010-06-29 22:50:39 UTC (rev 2010) +++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/JaxxTreeTableDemoModel.java 2010-06-30 16:05:18 UTC (rev 2011) @@ -1,119 +0,0 @@ -/* - * #%L - * JAXX :: Demo - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2008 - 2010 CodeLutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ -package jaxx.demo.component.jaxx.nav.treetable; - -import jaxx.demo.component.jaxx.nav.JaxxNavDemoDataProvider; -import jaxx.demo.entities.Movie; -import jaxx.demo.entities.People; -import jaxx.runtime.swing.nav.treetable.JaxxTreeTableModel; -import jaxx.runtime.swing.nav.JaxxNode; - -import static org.nuiton.i18n.I18n._; - -/** - * @author sletellier <letellier@codelutin.com> - * @since 2.1 - */ -public class JaxxTreeTableDemoModel extends JaxxTreeTableModel.MyDefaultTreeTableModel { - - protected JaxxNavDemoDataProvider dataProvider; - - public JaxxTreeTableDemoModel(JaxxNavDemoDataProvider dataProvider) { - this.dataProvider = dataProvider; - } - - @Override - public Object getValueAt(Object o, int i) { - JaxxNode node = (JaxxNode)o; - - // Get node type - Class<?> editType = node.getInternalClass(); - String id = node.getId(); - - // If it's category node - if (node.isStringNode()) { - if (i == 0) { - return _(id); - } - return ""; - - // People node - } else if (editType.equals(People.class)) { - People people = dataProvider.getPeople(id); - return getPeopleColumn(people, i); - - // Movie node - } else if (editType.equals(Movie.class)) { - Movie movie = dataProvider.getMovie(id); - return getMovieColumn(movie, i); - } - - // This never append - return "not found"; - } - - private String getMovieColumn(Movie movie, int i) { - String result = ""; - - switch (i) { - case 0: - result = movie.getTitle(); - break; - case 2: - result = String.valueOf(movie.getYear()); - break; - } - return result; - } - - protected String getPeopleColumn(People people, int i) { - String result = ""; - - switch (i) { - case 0: - result = people.getFirstName(); - break; - case 1: - result = people.getLastName(); - break; - case 2: - result = String.valueOf(people.getAge()); - break; - } - return result; - } - - @Override - public String[] getColumnsNames() { - return new String[]{_("jaxxdemo.tree.firstName"), - _("jaxxdemo.tree.lastName"), - _("jaxxdemo.tree.age")}; - } - - @Override - public boolean isCellEditable(Object node, int column) { - return false; - } -} Deleted: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/JaxxTreeTableDemoNode.java =================================================================== --- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/JaxxTreeTableDemoNode.java 2010-06-29 22:50:39 UTC (rev 2010) +++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/JaxxTreeTableDemoNode.java 2010-06-30 16:05:18 UTC (rev 2011) @@ -1,43 +0,0 @@ -/* - * #%L - * JAXX :: Demo - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2008 - 2010 CodeLutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ -package jaxx.demo.component.jaxx.nav.treetable; - -import jaxx.runtime.swing.nav.JaxxNodeChildLoador; -import jaxx.runtime.swing.nav.treetable.JaxxTreeTableNode; - -/** - * @author sletellier <letellier@codelutin.com> - * @since 2.1 - */ -public class JaxxTreeTableDemoNode extends JaxxTreeTableNode<JaxxTreeTableDemoNode> { - - protected JaxxTreeTableDemoNode(String id) { - super(id); - } - - public JaxxTreeTableDemoNode(Class<?> internalClass, String id, String context, JaxxNodeChildLoador childLoador) { - super(internalClass, id, context, childLoador); - } -} Added: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/MoviesTreeTableNodeLoador.java =================================================================== --- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/MoviesTreeTableNodeLoador.java (rev 0) +++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/MoviesTreeTableNodeLoador.java 2010-06-30 16:05:18 UTC (rev 2011) @@ -0,0 +1,96 @@ +/* + * #%L + * JAXX :: Demo + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2008 - 2010 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +package jaxx.demo.component.jaxx.nav.treetable; + +import jaxx.demo.component.jaxx.nav.NavDemoDataProvider; +import jaxx.demo.entities.Movie; +import jaxx.runtime.swing.nav.DataProvider; +import jaxx.runtime.swing.nav.JaxxNavHelper; +import jaxx.runtime.swing.nav.treetable.JaxxTreeTableNodeChildLoador; + +import java.util.List; + +import static org.nuiton.i18n.I18n.n_; + +/** + * @author sletellier <letellier@codelutin.com> + * @since 2.1 + */ +public class MoviesTreeTableNodeLoador extends JaxxTreeTableNodeChildLoador<Movie, Movie, NavDemoTreeTableNode> { + + private static final long serialVersionUID = 1L; + + protected boolean isTreeTable; + + public MoviesTreeTableNodeLoador() { + this(false); + } + + public MoviesTreeTableNodeLoador(boolean isTreeTable) { + super(Movie.class); + this.isTreeTable = isTreeTable; + } + + @Override + public List<Movie> getData(Class<?> parentClass, + String parentId, + DataProvider dataProvider) throws Exception { + + NavDemoDataProvider provider = (NavDemoDataProvider) dataProvider; + + // Return all movies + return provider.getMovies(); + } + + @SuppressWarnings({"unchecked"}) + @Override + public NavDemoTreeTableNode createNode(Movie data, DataProvider dataProvider) { + + NavDemoTreeTableNode moviesNode; + NavDemoTreeTableNode actorsCategoryNode; + + // Create movies static nodes + moviesNode = new NavDemoTreeTableNode( + getBeanType(), + data.getId(), + null, + null + ); + + // Create clients category node + actorsCategoryNode = new NavDemoTreeTableNode( + String.class, + n_(NavDemoTreeTableHelper.ACTORS_CATEGORY_NODE), + null, + JaxxNavHelper.getChildLoador(ActorsTreeTableNodeLoador.class) + ); + + // Add actors nodes to movies node + moviesNode.add(actorsCategoryNode); + + return moviesNode; + } +} \ No newline at end of file Property changes on: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/MoviesTreeTableNodeLoador.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/NavDemoTreeTableHelper.java =================================================================== --- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/NavDemoTreeTableHelper.java (rev 0) +++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/NavDemoTreeTableHelper.java 2010-06-30 16:05:18 UTC (rev 2011) @@ -0,0 +1,94 @@ +/* + * #%L + * JAXX :: Demo + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2008 - 2010 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +package jaxx.demo.component.jaxx.nav.treetable; + +import jaxx.demo.component.jaxx.nav.NavDemoDataProvider; +import jaxx.runtime.swing.nav.treetable.JaxxTreeTableHelper; +import jaxx.runtime.swing.nav.treetable.JaxxTreeTableModel; + +import static org.nuiton.i18n.I18n.n_; + +/** + * @author sletellier <letellier@codelutin.com> + * @since 2.1 + */ +public class NavDemoTreeTableHelper extends JaxxTreeTableHelper<NavDemoTreeTableNode> { + + public static String MOVIES_CATEGORY_NODE = "movies"; + + public static String ACTORS_CATEGORY_NODE = "actors"; + + public NavDemoTreeTableHelper(NavDemoDataProvider provider) { + setDataProvider(provider); + } + + @Override + public NavDemoDataProvider getDataProvider() { + return (NavDemoDataProvider) dataProvider; + } + + + @SuppressWarnings({"unchecked"}) + public JaxxTreeTableModel createModel() { + + // Create root static node + NavDemoTreeTableNode root = new NavDemoTreeTableNode( + String.class, + "Root node", + null, + null + ); + + // Create movies category node + NavDemoTreeTableNode moviesCategoryNode = new NavDemoTreeTableNode( + String.class, + n_(MOVIES_CATEGORY_NODE), + null, + getChildLoador(MoviesTreeTableNodeLoador.class) + ); + + // Create peoples category node + NavDemoTreeTableNode peoplesCategoryNode = new NavDemoTreeTableNode( + String.class, + n_(ACTORS_CATEGORY_NODE), + null, + getChildLoador(ActorsTreeTableNodeLoador.class) + ); + + // Add to root + root.add(moviesCategoryNode); + root.add(peoplesCategoryNode); + + // Create model + NavDemoTreeTableModel delegate = new NavDemoTreeTableModel(getDataProvider()); + JaxxTreeTableModel model = createModel(root, delegate); + + // Populate childs nodes + root.populateChilds(getBridge(), getDataProvider()); + + return model; + } +} \ No newline at end of file Property changes on: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/NavDemoTreeTableHelper.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Copied: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/NavDemoTreeTableModel.java (from rev 2010, trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/JaxxTreeTableDemoModel.java) =================================================================== --- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/NavDemoTreeTableModel.java (rev 0) +++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/NavDemoTreeTableModel.java 2010-06-30 16:05:18 UTC (rev 2011) @@ -0,0 +1,119 @@ +/* + * #%L + * JAXX :: Demo + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2008 - 2010 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ +package jaxx.demo.component.jaxx.nav.treetable; + +import jaxx.demo.component.jaxx.nav.NavDemoDataProvider; +import jaxx.demo.entities.Movie; +import jaxx.demo.entities.People; +import jaxx.runtime.swing.nav.treetable.JaxxTreeTableModel; +import jaxx.runtime.swing.nav.JaxxNode; + +import static org.nuiton.i18n.I18n._; + +/** + * @author sletellier <letellier@codelutin.com> + * @since 2.1 + */ +public class NavDemoTreeTableModel extends JaxxTreeTableModel.MyDefaultTreeTableModel { + + protected NavDemoDataProvider dataProvider; + + public NavDemoTreeTableModel(NavDemoDataProvider dataProvider) { + this.dataProvider = dataProvider; + } + + @Override + public Object getValueAt(Object o, int i) { + JaxxNode node = (JaxxNode)o; + + // Get node type + Class<?> editType = node.getInternalClass(); + String id = node.getId(); + + // If it's category node + if (node.isStringNode()) { + if (i == 0) { + return _(id); + } + return ""; + + // People node + } else if (editType.equals(People.class)) { + People people = dataProvider.getPeople(id); + return getPeopleColumn(people, i); + + // Movie node + } else if (editType.equals(Movie.class)) { + Movie movie = dataProvider.getMovie(id); + return getMovieColumn(movie, i); + } + + // This never append + return "not found"; + } + + private String getMovieColumn(Movie movie, int i) { + String result = ""; + + switch (i) { + case 0: + result = movie.getTitle(); + break; + case 2: + result = String.valueOf(movie.getYear()); + break; + } + return result; + } + + protected String getPeopleColumn(People people, int i) { + String result = ""; + + switch (i) { + case 0: + result = people.getFirstName(); + break; + case 1: + result = people.getLastName(); + break; + case 2: + result = String.valueOf(people.getAge()); + break; + } + return result; + } + + @Override + public String[] getColumnsNames() { + return new String[]{_("jaxxdemo.tree.firstName"), + _("jaxxdemo.tree.lastName"), + _("jaxxdemo.tree.age")}; + } + + @Override + public boolean isCellEditable(Object node, int column) { + return false; + } +} Copied: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/NavDemoTreeTableNode.java (from rev 2010, trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/JaxxTreeTableDemoNode.java) =================================================================== --- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/NavDemoTreeTableNode.java (rev 0) +++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/NavDemoTreeTableNode.java 2010-06-30 16:05:18 UTC (rev 2011) @@ -0,0 +1,47 @@ +/* + * #%L + * JAXX :: Demo + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2008 - 2010 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ +package jaxx.demo.component.jaxx.nav.treetable; + +import jaxx.runtime.swing.nav.treetable.JaxxTreeTableNode; +import jaxx.runtime.swing.nav.treetable.JaxxTreeTableNodeChildLoador; + +/** + * @author sletellier <letellier@codelutin.com> + * @since 2.1 + */ +public class NavDemoTreeTableNode extends JaxxTreeTableNode<NavDemoTreeTableNode> { + private static final long serialVersionUID = 1L; + + protected NavDemoTreeTableNode(String id) { + super(id); + } + + public NavDemoTreeTableNode(Class<?> internalClass, + String id, + String context, + JaxxTreeTableNodeChildLoador<?, ?, NavDemoTreeTableNode> childLoador) { + super(internalClass, id, context, childLoador); + } +} Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoCellRenderer.java =================================================================== --- trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoCellRenderer.java 2010-06-29 22:50:39 UTC (rev 2010) +++ trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoCellRenderer.java 2010-06-30 16:05:18 UTC (rev 2011) @@ -25,12 +25,13 @@ package jaxx.demo.tree; -import jaxx.demo.component.jaxx.nav.JaxxNavDemoDataProvider; +import jaxx.demo.component.jaxx.nav.NavDemoDataProvider; import jaxx.runtime.swing.nav.tree.AbstractJaxxTreeCellRenderer; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import javax.swing.JTree; +import javax.swing.tree.DefaultTreeModel; import java.awt.Component; import static org.nuiton.i18n.I18n._; @@ -39,7 +40,7 @@ * @author sletellier <letellier@codelutin.com> * @since 2.1 */ -public class DemoCellRenderer extends AbstractJaxxTreeCellRenderer<DemoNode> { +public class DemoCellRenderer extends AbstractJaxxTreeCellRenderer<DefaultTreeModel, DemoNode> { /** Logger */ protected static final Log log = @@ -51,8 +52,8 @@ } @Override - public JaxxNavDemoDataProvider getDataProvider() { - return (JaxxNavDemoDataProvider) super.getDataProvider(); + public NavDemoDataProvider getDataProvider() { + return (NavDemoDataProvider) super.getDataProvider(); } @Override Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoTreeHelper.java =================================================================== --- trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoTreeHelper.java 2010-06-29 22:50:39 UTC (rev 2010) +++ trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoTreeHelper.java 2010-06-30 16:05:18 UTC (rev 2011) @@ -25,16 +25,16 @@ package jaxx.demo.tree; -import jaxx.runtime.swing.nav.JaxxDelegateTreeModel; -import jaxx.runtime.swing.nav.JaxxNavHelper; +import jaxx.runtime.swing.nav.tree.JaxxTreeHelper; +import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreeModel; /** * @author tchemit <tchemit@codelutin.com> * @since 2.1 */ -public class DemoTreeHelper extends JaxxNavHelper<DemoNode> { +public class DemoTreeHelper extends JaxxTreeHelper<DemoNode> { public DemoTreeHelper(DemoDataProvider provider) { setDataProvider(provider); @@ -45,17 +45,17 @@ return (DemoDataProvider) super.getDataProvider(); } - public TreeModel createTreeModel() { + public TreeModel createModel() { // Create root static node DemoNode root = new DemoNode("jaxxdemo.tree"); // Create model - JaxxDelegateTreeModel<DemoNode> model = createTreeModel(root); + DefaultTreeModel model = createModel(root); // load all nodes of model - loadAllNodes(model, root, getDataProvider()); + loadAllNodes(root, getDataProvider()); - return getTreeModel(); + return model; } } \ No newline at end of file Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/DataProvider.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/DataProvider.java 2010-06-29 22:50:39 UTC (rev 2010) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/DataProvider.java 2010-06-30 16:05:18 UTC (rev 2011) @@ -24,11 +24,13 @@ */ package jaxx.runtime.swing.nav; +import jaxx.runtime.swing.nav.tree.AbstractJaxxTreeCellRenderer; + /** * Contract of provider of data. * <p/> * This object is used by {@link JaxxNodeChildLoador} to populate childs of node - * and by {@link jaxx.runtime.swing.nav.tree.AbstractJaxxTreeCellRenderer} to render nodes. + * and by {@link AbstractJaxxTreeCellRenderer} to render nodes. * * @author tchemit <chemit@codelutin.com> * @since 2.1 Deleted: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxDelegateTreeModel.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxDelegateTreeModel.java 2010-06-29 22:50:39 UTC (rev 2010) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxDelegateTreeModel.java 2010-06-30 16:05:18 UTC (rev 2011) @@ -1,332 +0,0 @@ -/* - * #%L - * JAXX :: Runtime - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2008 - 2010 CodeLutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ -package jaxx.runtime.swing.nav; - -import jaxx.runtime.swing.nav.tree.JaxxTreeNode; -import jaxx.runtime.swing.nav.treetable.JaxxTreeTableModel; -import jaxx.runtime.swing.nav.treetable.JaxxTreeTableNode; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.jdesktop.swingx.treetable.TreeTableNode; - -import javax.swing.event.TreeModelListener; -import javax.swing.tree.DefaultTreeModel; -import javax.swing.tree.MutableTreeNode; -import javax.swing.tree.TreeNode; -import javax.swing.tree.TreePath; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.EventListener; -import java.util.List; - -/** - * Delegate model used to switch between tree model and tree table model api - * - * @author sletellier <letellier@codelutin.com> - * @since 2.1 - **/ -public class JaxxDelegateTreeModel<N extends JaxxNode<N>> { - - /** Logger */ - static private final Log log = LogFactory.getLog(JaxxDelegateTreeModel.class); - - // Delegate tree model - protected DefaultTreeModel treeModel; - - // Delegate jaxx tree table model - protected JaxxTreeTableModel treeTableModel; - - protected boolean isTreeTable; - - /** - * Use this constructor to use tree api - * - * @param treeModel {@link DefaultTreeModel} to use - */ - public JaxxDelegateTreeModel(DefaultTreeModel treeModel) { - this.treeModel = treeModel; - isTreeTable = false; - } - - /** - * Use this constructor to use tree table api - * - * @param treeTableModel {@link JaxxTreeTableModel} to use - */ - public JaxxDelegateTreeModel(JaxxTreeTableModel treeTableModel) { - this.treeTableModel = treeTableModel; - isTreeTable = true; - } - - public boolean isTreeTable() { - return isTreeTable; - } - - @SuppressWarnings({"unchecked"}) - public N getRoot() { - if (!isTreeTable) { - return (N)treeModel.getRoot(); - } - return (N)treeTableModel.getRoot(); - } - - public void setRoot(N node) { - if (!isTreeTable) { - treeModel.setRoot(node); - return; - } - treeTableModel.setRoot((TreeTableNode) node); - } - - @SuppressWarnings({"unchecked"}) - public N getChild(Object parent, int index) { - if (!isTreeTable) { - return (N)treeModel.getChild(parent, index); - } - return (N)treeTableModel.getChild(parent, index); - } - - public int getChildCount(Object parent) { - if (!isTreeTable) { - return treeModel.getChildCount(parent); - } - return treeTableModel.getChildCount(parent); - } - - public boolean isLeaf(Object node) { - if (!isTreeTable) { - return treeModel.isLeaf(node); - } - return treeTableModel.isLeaf(node); - } - - public void valueForPathChanged(TreePath path, Object newValue) { - if (!isTreeTable) { - treeModel.valueForPathChanged(path, newValue); - return; - } - treeTableModel.valueForPathChanged(path, newValue); - } - - public int getIndexOfChild(Object parent, Object child) { - if (!isTreeTable) { - return treeModel.getIndexOfChild(parent, child); - } - return treeTableModel.getIndexOfChild(parent, child); - } - - public void addTreeModelListener(TreeModelListener l) { - if (!isTreeTable) { - treeModel.addTreeModelListener(l); - return; - } - treeTableModel.addTreeModelListener(l); - } - - public void removeTreeModelListener(TreeModelListener l) { - if (!isTreeTable) { - treeModel.removeTreeModelListener(l); - return; - } - treeTableModel.removeTreeModelListener(l); - } - - public void nodesWereInserted(N parent, int[] indices) { - if (!isTreeTable) { - treeModel.nodesWereInserted(parent, indices); - return; - } - nodeStructureChanged(parent); - } - - public void nodeWereInserted(N parentNode, int childIndice, N node) { - if (!isTreeTable) { - int[] indices = new int[1]; - indices[0] = childIndice; - treeModel.nodesWereInserted(parentNode, indices); - return; - } - - nodeStructureChanged(node); - } - - public void insertNodeInto(N newChild, - N parent, int index){ - if (!isTreeTable) { - treeModel.insertNodeInto((MutableTreeNode)newChild, (MutableTreeNode)parent, index); - return; - } - treeTableModel.nodeStructureChanged((JaxxTreeTableNode<?>) parent); - } - - public void removeNodeFromParent(N node) { - if (!isTreeTable) { - treeModel.removeNodeFromParent((MutableTreeNode)node); - return; - } - treeTableModel.nodeStructureChanged((JaxxTreeTableNode<?>) node); - } - - public void nodeChanged(TreeNode node) { - if (!isTreeTable) { - treeModel.nodeChanged(node); - return; - } - treeTableModel.nodeChanged((JaxxTreeTableNode<?>) node); - } - - public void reload(N node) { - if (!isTreeTable) { - treeModel.reload(); - return; - } - treeTableModel.getModelSupport().fireTreeStructureChanged(new TreePath(getPathToRoot(node))); - } - - public void nodesWereRemoved(TreeNode node, int[] childIndices, - Object[] removedChildren) { - if (!isTreeTable) { - treeModel.nodesWereRemoved(node, childIndices, removedChildren); - return; - } - treeTableModel.getModelSupport().fireChildrenRemoved(new TreePath(getPathToRoot(node)), childIndices, removedChildren); - } - - public void nodesChanged(TreeNode node, int[] childIndices) { - if (!isTreeTable) { - treeModel.nodesChanged(node, childIndices); - return; - } - treeTableModel.nodeChanged((JaxxTreeTableNode<?>) node); - } - - public void nodeStructureChanged(TreeNode node) { - if (!isTreeTable) { - treeModel.nodeStructureChanged(node); - return; - } - treeTableModel.nodeStructureChanged((JaxxTreeTableNode<?>) node); - } - - public TreeNode[] getPathToRoot(TreeNode aNode) { - if (!isTreeTable) { - return treeModel.getPathToRoot(aNode); - } - return treeTableModel.getPathToRoot((TreeTableNode)aNode); - } - - public TreeModelListener[] getTreeModelListeners() { - if (!isTreeTable) { - return treeModel.getTreeModelListeners(); - } - return treeTableModel.getModelSupport().getTreeModelListeners(); - } - - @SuppressWarnings({"unchecked"}) - public <T extends EventListener> T[] getListeners(Class<T> listenerType) { - if (!isTreeTable) { - return treeModel.getListeners(listenerType); - } - TreeModelListener[] treeModelListeners = getTreeModelListeners(); - List<TreeModelListener> result = new ArrayList<TreeModelListener>(); - for (TreeModelListener listener : treeModelListeners) { - if (listener.getClass().isAssignableFrom(listenerType)) { - result.add(listener); - } - } - return (T[])result.toArray(); - } - - /** - * Notifies that all childs nodes of {@code node} were - * inserted. - * <p/> - * <b>Note:</b> The method recurses on childs (always notify parent before child) - * - * @param node node where all childs where inserted - */ - @SuppressWarnings({"unchecked"}) - public void notifyChildNodesInserted(N node) { - if (isTreeTable) { - nodeStructureChanged(node); - return; - } - int count = node.getChildCount(); - if (count < 1) { - if (log.isDebugEnabled()) { - log.debug("Skip for leaf node : " + node); - } - return; - } - if (log.isDebugEnabled()) { - log.debug("Notify for node : " + node + ", " + count + " child(s) inserted."); - } - int[] indices = new int[count]; - for (int i = 0; i < count; i++) { - indices[i] = i; - } - - nodesWereInserted(node, indices); - - // recurse notify on childs - for (Enumeration<? extends JaxxTreeNode<?>> childs = node.children(); - childs.hasMoreElements();) { - N child = (N) childs.nextElement(); - notifyChildNodesInserted(child); - } - } - - /** - * Notifies that the {@code node} was inserted. - * <p/> - * <b>Note:</b> The method recurses on childs (always notify parent before child) - * - * @param node node inserted - */ - public void notifyNodeInserted(N node) { - if (isTreeTable) { - nodeStructureChanged(node); - return; - } - - N parent = node.getParent(); - if (parent != null) { - int indice = parent.getIndex(node); - if (log.isDebugEnabled()) { - log.debug("Notify for node : " + node + ", for parent [" + parent + "] child " + indice + " inserted."); - } - nodesWereInserted(parent, new int[]{indice}); - notifyChildNodesInserted(node); - } - } - - public DefaultTreeModel getTreeDelegateModel() { - return treeModel; - } - - public JaxxTreeTableModel getTreeTableDelegateModel() { - return treeTableModel; - } -} \ No newline at end of file Added: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxNavBridge.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxNavBridge.java (rev 0) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxNavBridge.java 2010-06-30 16:05:18 UTC (rev 2011) @@ -0,0 +1,159 @@ +/* + * #%L + * JAXX :: Runtime + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2008 - 2010 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ +package jaxx.runtime.swing.nav; + +import javax.swing.event.TreeModelListener; +import javax.swing.tree.TreeNode; +import javax.swing.tree.TreePath; +import java.util.EventListener; + +/** + * Contract of the bridge used by {@link JaxxNavHelper} 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 + * @since 2.1 + */ +public interface JaxxNavBridge<M, N extends JaxxNode<M, N>> { + + //-------------------------------------------------------------------------- + //-- Model Queries + //-------------------------------------------------------------------------- + + M getModel(); + + N getRoot(); + + boolean isLeaf(Object node); + + int getChildCount(Object parent); + + N getChild(Object parent, int index); + + int getIndexOfChild(Object parent, Object child); + + TreeNode[] getPathToRoot(TreeNode aNode); + + //-------------------------------------------------------------------------- + //-- Model modification + //-------------------------------------------------------------------------- + + void setRoot(N node); + + void insertNodeInto(N newChild, N parent, int index); + + void removeNodeFromParent(N node); + + void reload(N node); + + //-------------------------------------------------------------------------- + //-- Listeners notifications + //-------------------------------------------------------------------------- + + void valueForPathChanged(TreePath path, Object newValue); + + void nodeStructureChanged(TreeNode node); + + void nodeChanged(TreeNode node); + + void nodesChanged(TreeNode node, int[] childIndices); + + void nodesWereInserted(N parent, int[] indices); + + void nodeWereInserted(N parentNode, int childIndice, N node); + + void nodesWereRemoved(TreeNode node, int[] childIndices, Object[] removedChildren); + + /** + * Notifies that the {@code node} was inserted. + * <p/> + * <b>Note:</b> The method recurses on childs (always notify parent before child) + * + * @param node node inserted + */ + void notifyNodeInserted(N node); + + /** + * Notifies that all childs nodes of {@code node} were + * inserted. + * <p/> + * <b>Note:</b> The method recurses on childs (always notify parent before child) + * + * @param node node where all childs where inserted + */ + void notifyChildNodesInserted(N node); + + //-------------------------------------------------------------------------- + //-- TreeModelListener provider + //-------------------------------------------------------------------------- + + void addTreeModelListener(TreeModelListener l); + + void removeTreeModelListener(TreeModelListener l); + + TreeModelListener[] getTreeModelListeners(); + + <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 AbstractJaxxTreeCellRenderer} 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 AbstractJaxxTreeCellRenderer}. +// */ +// AbstractJaxxTreeCellRenderer<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(); + + void setModel(M delegate); +} Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxNavBridge.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxNavHelper.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxNavHelper.java 2010-06-29 22:50:39 UTC (rev 2010) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxNavHelper.java 2010-06-30 16:05:18 UTC (rev 2011) @@ -25,20 +25,15 @@ package jaxx.runtime.swing.nav; import jaxx.runtime.swing.nav.tree.AbstractJaxxTreeCellRenderer; -import jaxx.runtime.swing.nav.treetable.JaxxTreeTableModel; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.jdesktop.swingx.JXTreeTable; -import javax.swing.JTree; import javax.swing.event.TreeExpansionEvent; import javax.swing.event.TreeModelEvent; import javax.swing.event.TreeModelListener; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.event.TreeWillExpandListener; -import javax.swing.tree.DefaultTreeModel; -import javax.swing.tree.TreeCellRenderer; import javax.swing.tree.TreePath; import javax.swing.tree.TreeSelectionModel; import java.util.ArrayList; @@ -52,13 +47,13 @@ /** * Tree helper to deal with the build of trees and other usefull operations. * <p/> - * A helper acts as an handler for a {@code tree}. It owns the {@link #model} of - * the {@link #tree}. + * A helper acts as an handler for a {@code tree}. It owns the {@link #getModel()} of + * the {@code #tree}. * <p/> * <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(jaxx.runtime.swing.nav.JaxxNode)} given a + * To create the model, use method {@link #createModel(JaxxNode,Object...)} given a * root node. * <p/> * To obtain the model, use method {@link #getModel()}. @@ -69,13 +64,13 @@ * <h3>Internal tree</h3> * As said before, a helper matches exactly one tree. * <p/> - * To register the tree, use method {@link #setTree(JTree, boolean, TreeSelectionListener)}. + * To register the tree, use method {@link #setUI(Object, boolean, TreeSelectionListener)}. * <p/> - * To obtain the tree, use method {@link #getTree()}. + * To obtain the tree, use method {@link #getUI()}. * <h3>Internal data provider</h3> - * To populate childs nodes and render nodes, we use a {@link jaxx.runtime.swing.nav.DataProvider}. + * To populate childs nodes and render nodes, we use a {@link DataProvider}. * <p/> - * To register the data provider, use method {@link #setDataProvider(jaxx.runtime.swing.nav.DataProvider)}. + * To register the data provider, use method {@link #setDataProvider(DataProvider)}. * <p/> * To obtain the data provider, use method {@link #getDataProvider()}. * <h2>Internal listeners</h2> @@ -83,12 +78,12 @@ * <h3>{@link #expandListener}</h3> * This listener will load node's childs before node expands if the node is not loaded. * <p/> - * See the {@link jaxx.runtime.swing.nav.JaxxNode#isLoaded()} method. + * See the {@link JaxxNode#isLoaded()} method. * <h3>{@link #treeModelListener}</h3> * To listen modification of the model, it will mainly repopulate nodes when * required. * <p/> - * See the method {@link #populateNode(jaxx.runtime.swing.nav.JaxxNode , Object[], boolean)}. + * See the method {@link #populateNode(JaxxNode , Object[], boolean)}. * <h3>{@link #selectionListener}</h3> * To listen modification of the selection, it will mainly expand paths if required. * <p/> @@ -99,42 +94,74 @@ * The helper offers some methods to modify and query the internal tree model. * <h3>Model modification</h3> * <ul> - * <li>{@link #createModel(jaxx.runtime.swing.nav.JaxxNode)}</li> - * <li>{@link #insertNode(jaxx.runtime.swing.nav.JaxxNode , jaxx.runtime.swing.nav.JaxxNode)}</li> - * <li>{@link #removeNode(jaxx.runtime.swing.nav.JaxxNode)}</li> - * <li>{@link #moveNode(jaxx.runtime.swing.nav.JaxxNode , jaxx.runtime.swing.nav.JaxxNode , int)}</li> - * <li>{@link #refreshNode(jaxx.runtime.swing.nav.JaxxNode , boolean)}</li> - * <li>{@link #loadAllNodes(jaxx.runtime.swing.nav.JaxxDelegateTreeModel , jaxx.runtime.swing.nav.JaxxNode , jaxx.runtime.swing.nav.DataProvider)}</li> + * <li>{@link #createModel(JaxxNode,Object...)}</li> + * <li>{@link #insertNode(JaxxNode , JaxxNode)}</li> + * <li>{@link #removeNode(JaxxNode)}</li> + * <li>{@link #moveNode(JaxxNode , JaxxNode , int)}</li> + * <li>{@link #refreshNode(JaxxNode , boolean)}</li> + * <li>{@link #loadAllNodes(JaxxNode , DataProvider)}</li> * <p/> * </ul> * <h3>Model selection modification</h3> * <ul> - * <li>{@link #selectNode(jaxx.runtime.swing.nav.JaxxNode)}</li> + * <li>{@link #selectNode(JaxxNode)}</li> * <li>{@link #selectNode(String...)}</li> * <li>{@link #selectParentNode()}</li> * </ul> * <h3>Model query</h3> * <ul> - * <li>{@link #findNode(jaxx.runtime.swing.nav.JaxxNode , String...)}</li> + * <li>{@link #findNode(JaxxNode , String...)}</li> * </ul> * <h3>Child loadors factory</h3> - * The class offers a factory of {@link jaxx.runtime.swing.nav.JaxxNodeChildLoador}, use the method + * The class offers a factory of {@link JaxxNodeChildLoador}, use the method * {@link #getChildLoador(Class)} to obtain the correct child loador given his type. * * @author tchemit <chemit@codelutin.com> - * @see jaxx.runtime.swing.nav.JaxxNode - * @see jaxx.runtime.swing.nav.JaxxNodeChildLoador - * @see jaxx.runtime.swing.nav.tree.AbstractJaxxTreeCellRenderer + * @param <U> Type of ui to bridge + * @see JaxxNode + * @see JaxxNodeChildLoador + * @see AbstractJaxxTreeCellRenderer * @since 2.1 */ -public class JaxxNavHelper<N extends JaxxNode<N>> { +public abstract class JaxxNavHelper<M, U, B extends JaxxNavBridge<M, N>, N extends JaxxNode<M, N>> { /** Logger */ static private final Log log = LogFactory.getLog(JaxxNavHelper.class); + //-------------------------------------------------------------------------- + //-- Methods to implement in your helper (related only to ui) + //-------------------------------------------------------------------------- + + public abstract void scrollPathToVisible(TreePath path); + + public abstract void setSelectionPath(TreePath path); + + public abstract TreeSelectionModel getSelectionModel(); + + public abstract boolean isExpanded(TreePath pathToExpand); + + public abstract void expandPath(TreePath pathToExpand); + /** - * The shared instance of tree model. + * Register a new root node. * <p/> + * If internal {@link #getModel()} does not exists, creates a new one from his given root {@code node}, + * otherwise just set the new root on the existing model. + * <p/> + * <p/> + * <b>Note:</b> As a side-effect, the model will be keep in field {@link #getModel()} + * and the {@link #treeModelListener} will be registred on this model. + * + * @param node the root node of the new model + * @param extraArgs extra args to create initial model + * @return the new model + */ + @SuppressWarnings({"unchecked"}) + protected abstract M createModel(N node, Object... extraArgs); + + /** + * The shared bridge. + * <p/> * A helper deals with only ONE model (this one), becuase we add some * listeners on it, we prefer always to keep ONE instance (any way this is * a good thing). @@ -142,36 +169,14 @@ * If you want to create a new model, just creates the good root node and * push it in this model. * <p/> - * <b>Note:</b> The model of the registred {@link #tree} can be different - * from this one. - * <p/> * For example, if you wrap the shared model with a filter model... Anyway, all * listeners of this helper apply always of THIs model. */ - protected JaxxDelegateTreeModel<N> model; + private final B bridge; - /** - * The shared instance of tree. - * <p/> - * A helper deleas with only ONE tree (this one), becuase we add some listeners - * on it, we prefer always to kepp ONE safe instance. - * <p/> - * If you need to work with more than one helper, please instanciat a new - * helper for each tree. - */ - protected JTree tree; + /** the associated ui component */ + private U ui; - /** - * The shared instance of treeTable. - * <p/> - * A helper deleas with only ONE tree (this one), becuase we add some listeners - * on it, we prefer always to kepp ONE safe instance. - * <p/> - * If you need to work with more than one helper, please instanciat a new - * helper for each tree. - */ - protected JXTreeTable treeTable; - /** The shared data provider used to obtain datas to populate nodes and render them. */ protected DataProvider dataProvider; @@ -179,7 +184,7 @@ * A {@link TreeWillExpandListener} used to listen when tree should expand. * <p/> * If so, the listener will load selected node childs if required - * (says when the {@link jaxx.runtime.swing.nav.JaxxNode#isLoaded()} is sets to {@code false}). + * (says when the {@link JaxxNode#isLoaded()} is sets to {@code false}). */ protected TreeWillExpandListener expandListener; @@ -196,11 +201,11 @@ protected TreeModelListener treeModelListener; /** Cache of child loadors. */ - protected static Set<? super JaxxNodeChildLoador<?, ?, ?>> childLoadors; + protected static Set<? super JaxxNodeChildLoador<?, ?, ?, ?, ?>> childLoadors; - protected static Set<? super JaxxNodeChildLoador<?, ?, ?>> getChildLoadors() { + protected static Set<? super JaxxNodeChildLoador<?, ?, ?, ?, ?>> getChildLoadors() { if (childLoadors == null) { - childLoadors = new HashSet<JaxxNodeChildLoador<?, ?, ?>>(); + childLoadors = new HashSet<JaxxNodeChildLoador<?, ?, ?, ?, ?>>(); } return childLoadors; } @@ -216,12 +221,12 @@ * @return the loador from cache */ @SuppressWarnings({"unchecked"}) - public static <L extends JaxxNodeChildLoador<?, ?, ?>> L getChildLoador(Class<L> type) { - Set<? super JaxxNodeChildLoador<?, ?, ?>> cache = getChildLoadors(); - JaxxNodeChildLoador<?, ?, ?> result = null; + public static <L extends JaxxNodeChildLoador<?, ?, ?, ?, ?>> L getChildLoador(Class<L> type) { + Set<? super JaxxNodeChildLoador<?, ?, ?, ?, ?>> cache = getChildLoadors(); + JaxxNodeChildLoador<?, ?, ?, ?, ?> result = null; for (Object loador : cache) { if (type.equals(loador.getClass())) { - result = (JaxxNodeChildLoador<?, ?, ?>) loador; + result = (JaxxNodeChildLoador<?, ?, ?, ?, ?>) loador; break; } } @@ -240,7 +245,8 @@ return (L) result; } - public JaxxNavHelper() { + public JaxxNavHelper(B bridge) { + this.bridge = bridge; selectionListener = new TreeSelectionListener() { @@ -278,7 +284,7 @@ boolean isAdded = e.isAddedPath(path); - TreePath pathToExpand = new TreePath(model.getPathToRoot(node)); + TreePath pathToExpand = new TreePath(JaxxNavHelper.this.bridge.getPathToRoot(node)); boolean pathExpanded = isExpanded(pathToExpand); if (traceEnabled || isAdded && debugEnabled) { @@ -322,7 +328,7 @@ log.debug("will load childs of node [" + source + "]"); } // populate childs of node - source.populateChilds(model, getDataProvider()); + source.populateChilds(getBridge(), getDataProvider()); } @Override @@ -330,7 +336,6 @@ } }; - treeModelListener = new TreeModelListener() { @Override public void treeNodesInserted(TreeModelEvent e) { @@ -362,7 +367,7 @@ } // Invalidates nodes in renderer cache (if any) - AbstractJaxxTreeCellRenderer<N> renderer = getTreeCellRenderer(); + AbstractJaxxTreeCellRenderer<M, N> renderer = getTreeCellRenderer(); if (children != null && renderer != null) { for (Object child : children) { renderer.invalidateCache((N) child); @@ -435,55 +440,37 @@ } /** - * Obtains the registred tree. + * Obtains the jaxx delegate tree model * - * @return the registred tree for this helper or {@code null} if none was registred + * @return the internal tree model or {@code null} if none was created. */ - public JTree getTree() { - return tree; + public M getModel() { + return bridge.getModel(); } /** - * Obtains the registred tree table. - * - * @return the registred tree table for this helper or {@code null} if none was registred - */ - public JXTreeTable getTreeTable() { - return treeTable; - } - - /** * Obtains the jaxx delegate tree model * * @return the internal tree model or {@code null} if none was created. */ - public JaxxDelegateTreeModel<N> getModel() { - return model; + protected B getBridge() { + return bridge; } /** - * Obtains the internal tree table model. + * Obtains the ui associated with model in helper. * - * @return the internal tree table model or {@code null} if none was created. + * @return the ui (or {@code null} if no ui attached) */ - public DefaultTreeModel getTreeModel() { - return model.getTreeDelegateModel(); + public U getUI() { + return ui; } - /** - * Obtains the internal tree table model. - * - * @return the internal tree table model or {@code null} if none was created. - */ - public JaxxTreeTableModel getTreeTableModel() { - return model.getTreeTableDelegateModel(); - } - public N getRootNode() { if (!checkModel()) { return null; } - return model.getRoot(); + return bridge.getRoot(); } /** @@ -493,18 +480,7 @@ * @return the renderer of the registred tree or null if no tree was * registred nor the renderer is a {@link AbstractJaxxTreeCellRenderer}. */ - @SuppressWarnings({"unchecked"}) - public AbstractJaxxTreeCellRenderer<N> getTreeCellRenderer() { - JTree t = getTree(); - if (t == null) { - return null; - } - TreeCellRenderer r = t.getCellRenderer(); - if (r instanceof AbstractJaxxTreeCellRenderer<?>) { - return (AbstractJaxxTreeCellRenderer<N>) r; - } - return null; - } + public abstract AbstractJaxxTreeCellRenderer<M, N> getTreeCellRenderer(); /** * Obtains the selected node of the registred tree. @@ -512,18 +488,7 @@ * @return the selected tree or {@code null} if no registred tree nor * selection empty. */ - public N getSelectedNode() { - JTree tree = getTree(); - if (tree == null) { - return null; - } - TreePath path = tree.getSelectionPath(); - N node = null; - if (path != null) { - node = getNode(path); - } - return node; - } + public abstract N getSelectedNode(); /** * Obtains the path of ids fro the root node to the selected node on the @@ -544,24 +509,6 @@ } /** - * Registers the {@code dataProvider} for the helper. - * <p/> - * <b>Node:</b> As a side-effect, the provider will be propagate to the - * renderer of the registred tree (if any). - * - * @param dataProvider the data provider to use - */ - public void setDataProvider(DataProvider dataProvider) { - this.dataProvider = dataProvider; - AbstractJaxxTreeCellRenderer<N> renderer = getTreeCellRenderer(); - if (renderer != null) { - - // dispatch provider to renderer - renderer.setDataProvider(dataProvider); - } - } - - /** * Registers the given {@code tree} for this helper. * <p/> * <b>Note:</b> as a side-effect, it will register (if required) the @@ -571,40 +518,27 @@ * @param addExpandTreeListener a flag to add expand listener * @param listener the optional selection listener to add */ - public void setTree(JTree tree, - boolean addExpandTreeListener, - TreeSelectionListener listener) { - this.tree = tree; - if (addExpandTreeListener) { - this.tree.addTreeWillExpandListener(expandListener); - } - if (listener != null) { - this.tree.getSelectionModel().addTreeSelectionListener(listener); - } - this.tree.getSelectionModel().addTreeSelectionListener(selectionListener); - } + @SuppressWarnings({"unchecked"}) + public abstract void setUI(U tree, + boolean addExpandTreeListener, + TreeSelectionListener listener); /** - * Registers the given {@code treeTable} for this helper. + * Registers the {@code dataProvider} for the helper. * <p/> - * <b>Note:</b> as a side-effect, it will register (if required) the - * {@link #expandListener} listener and the {@link #selectionListener}. + * <b>Node:</b> As a side-effect, the provider will be propagate to the + * renderer of the registred tree (if any). * - * @param treeTable the tree table to register - * @param addExpandTreeListener a flag to add expand listener - * @param listener the optional selection listener to add + * @param dataProvider the data provider to use */ - public void setTreeTable(JXTreeTable treeTable, - boolean addExpandTreeListener, - TreeSelectionListener listener) { - this.treeTable = treeTable; - if (addExpandTreeListener) { - this.treeTable.addTreeWillExpandListener(expandListener); + public void setDataProvider(DataProvider dataProvider) { + this.dataProvider = dataProvider; + AbstractJaxxTreeCellRenderer<M, N> renderer = getTreeCellRenderer(); + if (renderer != null) { + + // dispatch provider to renderer + renderer.setDataProvider(dataProvider); } - if (listener != null) { - this.treeTable.addTreeSelectionListener(listener); - } - this.treeTable.addTreeSelectionListener(selectionListener); } /** @@ -618,11 +552,7 @@ */ public void insertNode(N parentNode, N newNode) { parentNode.add(newNode); - if (!model.isTreeTable()) { - model.notifyNodeInserted(newNode); - } else { - model.nodeStructureChanged(parentNode); - } + bridge.notifyNodeInserted(newNode); } /** @@ -634,7 +564,7 @@ */ public N removeNode(N node) { N parentNode = node.getParent(); - model.removeNodeFromParent(node); + bridge.removeNodeFromParent(node); return parentNode; } @@ -648,7 +578,7 @@ public void moveNode(N parentNode, N node, int position) { parentNode.remove(node); parentNode.insert(node, position); - model.nodeStructureChanged(parentNode); + bridge.nodeStructureChanged(parentNode); } /** @@ -663,14 +593,14 @@ * @param node the node to refresh * @param deep un flag pour activer la repainte de la descendance du * noeud - * @see jaxx.runtime.swing.nav.JaxxNode#isDirty() + * @see JaxxNode#isDirty() */ @SuppressWarnings({"unchecked"}) public void refreshNode(N node, boolean deep) { if (log.isDebugEnabled()) { log.debug("Will refresh (deep ? " + deep + ") node " + node); } - model.nodeChanged(node); + bridge.nodeChanged(node); if (deep) { // repaint childs nodes Enumeration<N> e = node.children(); @@ -684,23 +614,20 @@ /** * To load all nodes of a model. * - * @param model the tree model owner of nodes * @param node the root node to load * @param dataProvider the data provider used to populate nodes */ @SuppressWarnings({"unchecked"}) - public void loadAllNodes(JaxxDelegateTreeModel<N> model, - N node, - DataProvider dataProvider) { + public void loadAllNodes(N node, DataProvider dataProvider) { if (!checkModel()) { return; } if (!node.isLoaded()) { - node.populateChilds(model, dataProvider); - Enumeration<? extends JaxxNode<?>> enumeration = node.children(); + node.populateChilds(getBridge(), dataProvider); + Enumeration<? extends JaxxNode<?, ?>> enumeration = node.children(); while (enumeration.hasMoreElements()) { N jaxxNode = (N) enumeration.nextElement(); - loadAllNodes(model, jaxxNode, dataProvider); + loadAllNodes(jaxxNode, dataProvider); } } } @@ -739,7 +666,7 @@ if (log.isDebugEnabled()) { log.debug("try to select node [" + node + "]"); } - TreePath path = new TreePath(model.getPathToRoot(node)); + TreePath path = new TreePath(bridge.getPathToRoot(node)); setSelectionPath(path); scrollPathToVisible(path); @@ -759,7 +686,7 @@ if (log.isDebugEnabled()) { log.debug("try to select node from ids " + Arrays.toString(path)); } - N root = model.getRoot(); + N root = bridge.getRoot(); N node = findNode(root, path); if (log.isDebugEnabled()) { log.debug("selected node [" + node + "]"); @@ -786,7 +713,7 @@ N result = null; for (String id : ids) { - result = node.findNodeById(id, model, getDataProvider()); + result = node.findNodeById(id, getBridge(), getDataProvider()); if (result == null) { @@ -799,87 +726,12 @@ } /** - * Register a new root node. - * <p/> - * If internal {@link #model} does not exists, creates a new one from his given root {@code node}, - * otherwise just set the new root on the existing model. - * <p/> - * <p/> - * <b>Note:</b> As a side-effect, the model will be keep in field {@link #model} - * and the {@link #treeModelListener} will be registred on this model. - * - * @param node the root node of the new model - * @return the new model - * @deprecated use registerTreeModel - */ - @Deprecated - protected JaxxDelegateTreeModel createModel(N node) { - return createTreeModel(node); - } - - /** - * Register a new root node for tree. - * - * If internal {@link #model} does not exists, creates a new one from his given root {@code node}, - * otherwise just set the new root on the existing model. - * <p/> - * - * <b>Note:</b> As a side-effect, the model will be keep in field {@link #model} - * and the {@link #treeModelListener} will be registred on this model. - * - * @param node the root node of the new model - * @return the new model - */ - protected JaxxDelegateTreeModel<N> createTreeModel(N node) { - DefaultTreeModel delegate = new DefaultTreeModel(node); - if (model == null) { - model = new JaxxDelegateTreeModel<N>(delegate); - model.addTreeModelListener(treeModelListener); - } else { - model.setRoot(node); - } - - // notify structure has changed - model.nodeStructureChanged(getRootNode()); - return model; - } - - /** - * Register a new root node for tree table. - * - * If internal {@link #model} does not exists, creates a new one from his given root {@code node}, - * otherwise just set the new root on the existing model. - * <p/> - * - * <b>Note:</b> As a side-effect, the model will be keep in field {@link #model} - * and the {@link #treeModelListener} will be registred on this model. - * - * @param delegate model for tree table - * @param node the root node of the new model - * @return the tree model model - */ - protected JaxxDelegateTreeModel<N> createTreeTableModel(JaxxTreeTableModel.MyDefaultTreeTableModel delegate, N node) { - JaxxTreeTableModel tableModel = new JaxxTreeTableModel(delegate); - if (model == null) { - model = new JaxxDelegateTreeModel<N>(tableModel); - model.addTreeModelListener(treeModelListener); - } - model.setRoot(node); - - // notify structure has changed - model.nodeStructureChanged(getRootNode()); - return model; - } - - /** * Checks if internal model was created. * - * @return {@code true} if model was created - * (should be done via {@link #createModel(JaxxNode)} method), - * {@code false} otherwise. + * @return {@code true} if model was created, {@code false} otherwise. */ protected boolean checkModel() { - if (model == null) { + if (getModel() == null) { // no model set, log.warn("No model set in " + this); @@ -912,7 +764,7 @@ if (log.isDebugEnabled()) { log.debug("Will populate node : " + node); } - node.populateNode(model, dataProvider, false); + node.populateNode(getBridge(), dataProvider, false); } if (children != null) { for (Object o : children) { @@ -920,7 +772,7 @@ if (log.isDebugEnabled()) { log.debug("Will populate child node : " + child); } - child.populateNode(model, dataProvider, recurse); + child.populateNode(getBridge(), dataProvider, recurse); } } } @@ -937,50 +789,7 @@ return result; } - //-------------------------------------------------------------------------- - //-- Methode to switch between tree and tree table - //-------------------------------------------------------------------------- - - public void scrollPathToVisible(TreePath path) { - JTree tree = getTree(); - if (tree != null) { - tree.scrollPathToVisible(path); - return; - } - getTreeTable().scrollPathToVisible(path); + public void setUI(U ui) { + this.ui = ui; } - - public void setSelectionPath(TreePath path) { - JTree tree = getTree(); - if (tree != null) { - tree.setSelectionPath(path); - return; - } - getTreeTable().getTreeSelectionModel().setSelectionPath(path); - } - - public TreeSelectionModel getSelectionModel() { - JTree tree = getTree(); - if (tree != null) { - return tree.getSelectionModel(); - } - return getTreeTable().getTreeSelectionModel(); - } - - public boolean isExpanded(TreePath pathToExpand) { - JTree tree = getTree(); - if (tree != null) { - return tree.isExpanded(pathToExpand); - } - return getTreeTable().isExpanded(pathToExpand); - } - - public void expandPath(TreePath pathToExpand) { - JTree tree = getTree(); - if (tree != null) { - tree.expandPath(pathToExpand); - return; - } - getTreeTable().expandPath(pathToExpand); - } } Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxNode.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxNode.java 2010-06-29 22:50:39 UTC (rev 2010) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxNode.java 2010-06-30 16:05:18 UTC (rev 2011) @@ -24,6 +24,8 @@ */ package jaxx.runtime.swing.nav; +import jaxx.runtime.swing.nav.tree.AbstractJaxxTreeCellRenderer; + import javax.swing.tree.TreeNode; import java.io.Serializable; @@ -76,10 +78,10 @@ * 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(JaxxDelegateTreeModel , DataProvider, boolean)} - * and {@link #populateChilds(JaxxDelegateTreeModel , DataProvider)} methods. + * {@link #populateNode(JaxxNavBridge , DataProvider, boolean)} + * and {@link #populateChilds(JaxxNavBridge, DataProvider)} methods. * <h2>Node rendering</h2 - * the {@link jaxx.runtime.swing.nav.tree.AbstractJaxxTreeCellRenderer} looks the {@link #isDirty} state to + * the {@link AbstractJaxxTreeCellRenderer} looks the {@link #isDirty} state to * know when render should be (re-)compute and set back the state to {@code false}. * <p/> * Each time, a node is modified, the {@link #isDirty} should be set to {@code true}. @@ -87,7 +89,7 @@ * @author tchemit <chemit@codelutin.com> * @since 2.1 */ -public interface JaxxNode <N extends JaxxNode<N>> extends Cloneable, TreeNode, Serializable { +public interface JaxxNode<M, N extends JaxxNode<M, N>> extends Cloneable, TreeNode, Serializable { String getId(); @@ -128,17 +130,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(JaxxDelegateTreeModel, DataProvider)}) then do search + * {@link #populateChilds(JaxxNavBridge , DataProvider)}) then do search * on direct childs of the node. * * @param id the id of the researched node - * @param model 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 findNodeById(String id, - JaxxDelegateTreeModel<N> model, - DataProvider provider); + JaxxNavBridge<M,N> bridge, + DataProvider provider); /** * Changes the {@link #isDirty} state. @@ -169,11 +171,11 @@ * If {@code populateChilds} is set to {@code true}, then also populate * childs of the node using the given {@code dataProvider}. * - * @param model le delegate modèles content le noeud + * @param bridge le delegate modèles content le noeud * @param provider le provider de données * @param populateChilds un drapeau pour charger aussi les fils du noeud courant */ - void populateNode(JaxxDelegateTreeModel<N> model, + void populateNode(JaxxNavBridge<M,N> bridge, DataProvider provider, boolean populateChilds); @@ -183,10 +185,10 @@ * <p/> * For a static node, do nothing. * - * @param model model owner of the node + * @param bridge model owner of the node * @param provider data provider */ - void populateChilds(JaxxDelegateTreeModel<N> model, DataProvider provider); + void populateChilds(JaxxNavBridge<M,N> bridge, DataProvider provider); //-------------------------------------------------------------------------- //-- Overrides to use generic type as return Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxNodeChildLoador.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxNodeChildLoador.java 2010-06-29 22:50:39 UTC (rev 2010) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxNodeChildLoador.java 2010-06-30 16:05:18 UTC (rev 2011) @@ -34,7 +34,7 @@ * Object to load childs of a node. * <p/> * It uses {@link DataProvider} in method - * {@link #loadChilds(JaxxDelegateTreeModel , JaxxNode, DataProvider)} to obtain datas + * {@link #loadChilds(JaxxNavBridge , JaxxNode, DataProvider)} to obtain datas * then build childs nodes. * <p/> * A factory of such objects can be found in {@link JaxxNavHelper} to make @@ -52,7 +52,7 @@ * @see JaxxNode * @since 2.1 */ -public abstract class JaxxNodeChildLoador<T, O, N extends JaxxNode<N>> implements Serializable { +public abstract class JaxxNodeChildLoador<T, O, M, B extends JaxxNavBridge<M, N>, N extends JaxxNode<M, N>> implements Serializable { /** Logger */ static private final Log log = LogFactory.getLog(JaxxNodeChildLoador.class); @@ -100,12 +100,12 @@ /** * Load childs of the given {@code parentnode}. * - * @param model the model owner of nodes + * @param bridge the model owner of nodes * @param parentNode the parent node where to insert nodes * @param dataProvider data provider * @throws Exception pour tout probleme de recuperation de donnees */ - public void loadChilds(JaxxDelegateTreeModel<N> model, + public void loadChilds(B bridge, N parentNode, DataProvider dataProvider) throws Exception { @@ -136,14 +136,14 @@ addChildNodes(parentNode, datas, dataProvider); // notifie le modele d'un ajout de noeuds - model.notifyChildNodesInserted(parentNode); + bridge.notifyChildNodesInserted(parentNode); } /** * Add childs to given {@code parentNode} using retrive {@code datas} from * the data provider. * <p/> - * This method is invoked by the {@link #loadChilds(JaxxDelegateTreeModel , JaxxNode, DataProvider)}. + * This method is invoked by the {@link #loadChilds(JaxxNavBridge , JaxxNode, DataProvider)}. * * @param parentNode the node where to insert * @param datas the data used to create node Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/AbstractJaxxTreeCellRenderer.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/AbstractJaxxTreeCellRenderer.java 2010-06-29 22:50:39 UTC (rev 2010) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/AbstractJaxxTreeCellRenderer.java 2010-06-30 16:05:18 UTC (rev 2011) @@ -42,7 +42,7 @@ * @author chemit <chemit@codelutin.com> * @since 1.2 */ -public abstract class AbstractJaxxTreeCellRenderer<N extends JaxxNode<N>> extends DefaultTreeCellRenderer { +public abstract class AbstractJaxxTreeCellRenderer<M,N extends JaxxNode<M,N>> extends DefaultTreeCellRenderer { /** Logger */ protected static final Log log = Added: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/JaxxTreeBridge.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/JaxxTreeBridge.java (rev 0) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/JaxxTreeBridge.java 2010-06-30 16:05:18 UTC (rev 2011) @@ -0,0 +1,306 @@ +/* + * #%L + * JAXX :: Runtime + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2008 - 2010 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ +package jaxx.runtime.swing.nav.tree; + +import jaxx.runtime.swing.nav.JaxxNavBridge; +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; +import javax.swing.tree.TreePath; +import java.util.Enumeration; +import java.util.EventListener; + +/** + * Delegate model used to switch between tree model and tree table model api + * + * @author sletellier <letellier@codelutin.com> + * @since 2.1 + */ +public class JaxxTreeBridge<N extends JaxxTreeNode<N>> implements JaxxNavBridge<DefaultTreeModel, N> { + + /** Logger */ + static private final Log log = LogFactory.getLog(JaxxTreeBridge.class); + + /** bridge model */ + protected DefaultTreeModel model; + + /** bridge ui */ + protected JTree ui; + + public JaxxTreeBridge() { + } + + //-------------------------------------------------------------------------- + //-- Model Queries + //-------------------------------------------------------------------------- + + @Override + public DefaultTreeModel getModel() { + return model; + } + + @Override + @SuppressWarnings({"unchecked"}) + public N getRoot() { + return (N) model.getRoot(); + } + + @Override + public boolean isLeaf(Object node) { + return model.isLeaf(node); + } + + @Override + public int getChildCount(Object parent) { + return model.getChildCount(parent); + } + + @Override + @SuppressWarnings({"unchecked"}) + public N getChild(Object parent, int index) { + return (N) model.getChild(parent, index); + } + + @Override + public int getIndexOfChild(Object parent, Object child) { + return model.getIndexOfChild(parent, child); + } + + @Override + public TreeNode[] getPathToRoot(TreeNode aNode) { + return model.getPathToRoot(aNode); + } + + //-------------------------------------------------------------------------- + //-- Model modification + //-------------------------------------------------------------------------- + + @Override + public void setModel(DefaultTreeModel model) { + this.model = model; + } + + @Override + public void setRoot(N node) { + model.setRoot(node); + } + + @Override + public void insertNodeInto(N newChild, N parent, int index) { + model.insertNodeInto(newChild, parent, index); + } + + @Override + public void removeNodeFromParent(N node) { + model.removeNodeFromParent(node); + } + + @Override + public void reload(N node) { + model.reload(); + } + + //-------------------------------------------------------------------------- + //-- Listeners notifications + //-------------------------------------------------------------------------- + + @Override + public void valueForPathChanged(TreePath path, Object newValue) { + model.valueForPathChanged(path, newValue); + } + + @Override + public void nodesWereInserted(N parent, int[] indices) { + model.nodesWereInserted(parent, indices); + } + + @Override + public void nodeWereInserted(N parentNode, int childIndice, N node) { + int[] indices = new int[1]; + indices[0] = childIndice; + model.nodesWereInserted(parentNode, indices); + } + + @Override + public void nodeChanged(TreeNode node) { + model.nodeChanged(node); + } + + @Override + public void nodeStructureChanged(TreeNode node) { + model.nodeStructureChanged(node); + } + + @Override + public void nodesWereRemoved(TreeNode node, int[] childIndices, + Object[] removedChildren) { + model.nodesWereRemoved(node, childIndices, removedChildren); + } + + @Override + public void nodesChanged(TreeNode node, int[] childIndices) { + model.nodesChanged(node, childIndices); + } + + @Override + @SuppressWarnings({"unchecked"}) + public void notifyChildNodesInserted(N node) { + int count = node.getChildCount(); + if (count < 1) { + if (log.isDebugEnabled()) { + log.debug("Skip for leaf node : " + node); + } + return; + } + if (log.isDebugEnabled()) { + log.debug("Notify for node : " + node + ", " + count + " child(s) inserted."); + } + int[] indices = new int[count]; + for (int i = 0; i < count; i++) { + indices[i] = i; + } + + nodesWereInserted(node, indices); + + // recurse notify on childs + for (Enumeration<? extends JaxxTreeNode<?>> childs = node.children(); + childs.hasMoreElements();) { + N child = (N) childs.nextElement(); + notifyChildNodesInserted(child); + } + } + + @Override + public void notifyNodeInserted(N node) { + + N parent = node.getParent(); + if (parent != null) { + int indice = parent.getIndex(node); + if (log.isDebugEnabled()) { + log.debug("Notify for node : " + node + ", for parent [" + parent + "] child " + indice + " inserted."); + } + nodesWereInserted(parent, new int[]{indice}); + notifyChildNodesInserted(node); + } + } + + //-------------------------------------------------------------------------- + //-- TreeModelListener provider + //-------------------------------------------------------------------------- + + @Override + public void addTreeModelListener(TreeModelListener l) { + model.addTreeModelListener(l); + } + + @Override + public void removeTreeModelListener(TreeModelListener l) { + model.removeTreeModelListener(l); + } + + @Override + public TreeModelListener[] getTreeModelListeners() { + return model.getTreeModelListeners(); + } + + @Override + @SuppressWarnings({"unchecked"}) + public <T extends EventListener> T[] getListeners(Class<T> listenerType) { + return model.getListeners(listenerType); + } + + //-------------------------------------------------------------------------- + //-- UI + //-------------------------------------------------------------------------- + +// @Override +// public JTree getUI() { +// return ui; +// } +// +// @Override +// public void setUI(JTree ui) { +// this.ui = ui; +// } +// +// @Override +// public void scrollPathToVisible(TreePath path) { +// getUI().scrollPathToVisible(path); +// } +// +// @Override +// public void setSelectionPath(TreePath path) { +// getUI().setSelectionPath(path); +// } +// +// @Override +// public TreeSelectionModel getSelectionModel() { +// return getUI().getSelectionModel(); +// } +// +// @Override +// public boolean isExpanded(TreePath pathToExpand) { +// return getUI().isExpanded(pathToExpand); +// } +// +// @Override +// public void expandPath(TreePath pathToExpand) { +// getUI().expandPath(pathToExpand); +// } +// +// @SuppressWarnings({"unchecked"}) +// @Override +// public AbstractJaxxTreeCellRenderer<DefaultTreeModel, N> getTreeCellRenderer() { +// JTree t = getUI(); +// if (t == null) { +// return null; +// } +// TreeCellRenderer r = t.getCellRenderer(); +// if (r instanceof AbstractJaxxTreeCellRenderer) { +// return (AbstractJaxxTreeCellRenderer<DefaultTreeModel, N>) r; +// } +// return null; +// } +// +// @SuppressWarnings({"unchecked"}) +// @Override +// public N getSelectedNode() { +// JTree tree = getUI(); +// if (tree == null) { +// return null; +// } +// TreePath path = tree.getSelectionPath(); +// N node = null; +// if (path != null) { +// node = (N) path.getLastPathComponent(); +// } +// return node; +// } + +} \ No newline at end of file Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/JaxxTreeBridge.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/JaxxTreeHelper.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/JaxxTreeHelper.java (rev 0) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/JaxxTreeHelper.java 2010-06-30 16:05:18 UTC (rev 2011) @@ -0,0 +1,133 @@ +/* + * #%L + * JAXX :: Runtime + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2008 - 2010 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ +package jaxx.runtime.swing.nav.tree; + +import jaxx.runtime.swing.nav.JaxxNavHelper; + +import javax.swing.JTree; +import javax.swing.event.TreeSelectionListener; +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.TreeCellRenderer; +import javax.swing.tree.TreePath; +import javax.swing.tree.TreeSelectionModel; + +/** + * The implementation of {@link JaxxNavHelper} base on a {@link JTree} component. + * + * @author tchemit <chemit@codelutin.com> + * @since 2.1 + */ +public class JaxxTreeHelper<N extends JaxxTreeNode<N>> extends JaxxNavHelper<DefaultTreeModel, JTree, JaxxTreeBridge<N>, N> { + + public JaxxTreeHelper() { + super(new JaxxTreeBridge<N>()); + } + + @Override + public void scrollPathToVisible(TreePath path) { + getUI().scrollPathToVisible(path); + } + + @Override + public void setSelectionPath(TreePath path) { + getUI().setSelectionPath(path); + } + + @Override + public TreeSelectionModel getSelectionModel() { + return getUI().getSelectionModel(); + } + + @Override + public boolean isExpanded(TreePath pathToExpand) { + return getUI().isExpanded(pathToExpand); + } + + @Override + public void expandPath(TreePath pathToExpand) { + getUI().expandPath(pathToExpand); + } + + @SuppressWarnings({"unchecked"}) + @Override + public AbstractJaxxTreeCellRenderer<DefaultTreeModel, N> getTreeCellRenderer() { + JTree t = getUI(); + if (t == null) { + return null; + } + TreeCellRenderer r = t.getCellRenderer(); + if (r instanceof AbstractJaxxTreeCellRenderer) { + return (AbstractJaxxTreeCellRenderer<DefaultTreeModel, N>) r; + } + return null; + } + + @SuppressWarnings({"unchecked"}) + @Override + public N getSelectedNode() { + JTree tree = getUI(); + if (tree == null) { + return null; + } + TreePath path = tree.getSelectionPath(); + N node = null; + if (path != null) { + node = (N) path.getLastPathComponent(); + } + return node; + } + + @SuppressWarnings({"unchecked"}) + @Override + public void setUI(JTree tree, + boolean addExpandTreeListener, + TreeSelectionListener listener) { + setUI(tree); + if (addExpandTreeListener) { + tree.addTreeWillExpandListener(expandListener); + } + if (listener != null) { + tree.getSelectionModel().addTreeSelectionListener(listener); + } + tree.getSelectionModel().addTreeSelectionListener(selectionListener); + } + + @Override + protected DefaultTreeModel createModel(N node, Object... extraArgs) { + JaxxTreeBridge<N> bridge = getBridge(); + DefaultTreeModel model = bridge.getModel(); + if (model == null) { + model = new DefaultTreeModel(node); + bridge.setModel(model); + bridge.addTreeModelListener(treeModelListener); + } else { + bridge.setRoot(node); + } + + // notify structure has changed + bridge.nodeStructureChanged(getRootNode()); + return model; + } +} Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/JaxxTreeHelper.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/JaxxTreeNode.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/JaxxTreeNode.java 2010-06-29 22:50:39 UTC (rev 2010) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/JaxxTreeNode.java 2010-06-30 16:05:18 UTC (rev 2011) @@ -25,13 +25,13 @@ package jaxx.runtime.swing.nav.tree; import jaxx.runtime.swing.nav.DataProvider; -import jaxx.runtime.swing.nav.JaxxDelegateTreeModel; +import jaxx.runtime.swing.nav.JaxxNavBridge; import jaxx.runtime.swing.nav.JaxxNode; -import jaxx.runtime.swing.nav.JaxxNodeChildLoador; +import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.commons.logging.Log; import javax.swing.tree.DefaultMutableTreeNode; +import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreeNode; import java.util.Enumeration; @@ -42,7 +42,7 @@ * @author tchemit <chemit@codelutin.com> * @since 2.2 */ -public class JaxxTreeNode<N extends JaxxTreeNode<N>> extends DefaultMutableTreeNode implements JaxxNode<N> { +public class JaxxTreeNode<N extends JaxxTreeNode<N>> extends DefaultMutableTreeNode implements JaxxNode<DefaultTreeModel, N> { /** Logger */ static private final Log log = LogFactory.getLog(JaxxNode.class); @@ -68,16 +68,16 @@ protected boolean loaded; /** Optional child loador to lazy create childs of the node. */ - protected final JaxxNodeChildLoador<?, ?, N> childLoador; + protected final JaxxTreeNodeChildLoador<?, ?, N> childLoador; protected JaxxTreeNode(String id) { this(String.class, id, null, null); } public JaxxTreeNode(Class<?> internalClass, - String id, - String context, - JaxxNodeChildLoador<?, ?, N> childLoador) { + String id, + String context, + JaxxTreeNodeChildLoador<?, ?, N> childLoador) { this.internalClass = internalClass; this.id = id; this.context = context; @@ -148,7 +148,7 @@ @Override @SuppressWarnings({"unchecked"}) public N findNodeById(String id, - JaxxDelegateTreeModel<N> model, + JaxxNavBridge<DefaultTreeModel, N> model, DataProvider provider) { if (id == null) { @@ -218,7 +218,7 @@ //-------------------------------------------------------------------------- @Override - public void populateNode(JaxxDelegateTreeModel<N> model, + public void populateNode(JaxxNavBridge<DefaultTreeModel, N> model, DataProvider provider, boolean populateChilds) { @@ -234,7 +234,7 @@ @Override @SuppressWarnings({"unchecked"}) - public void populateChilds(JaxxDelegateTreeModel<N> model, DataProvider provider) { + public void populateChilds(JaxxNavBridge<DefaultTreeModel, N> model, DataProvider provider) { if (isStaticNode()) { log.debug("is static node " + this); @@ -248,7 +248,7 @@ if (log.isDebugEnabled()) { log.debug("Will load childs for " + this); } - childLoador.loadChilds(model, (N) this, provider); + childLoador.loadChilds((JaxxTreeBridge<N>) model, (N) this, provider); } catch (Exception e) { throw new RuntimeException(e.getMessage(), e); } finally { @@ -348,7 +348,7 @@ @SuppressWarnings({"unchecked"}) public N getSharedAncestor(N aNode) { - return (N) super.getSharedAncestor((DefaultMutableTreeNode)aNode); + return (N) getSharedAncestor((DefaultMutableTreeNode) aNode); } @SuppressWarnings({"unchecked"}) @@ -360,7 +360,7 @@ @SuppressWarnings({"unchecked"}) @Override public Enumeration<N> children() { - return (Enumeration<N>)super.children(); + return (Enumeration<N>) super.children(); } @Override Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/JaxxTreeNodeChildLoador.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/JaxxTreeNodeChildLoador.java 2010-06-29 22:50:39 UTC (rev 2010) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/JaxxTreeNodeChildLoador.java 2010-06-30 16:05:18 UTC (rev 2011) @@ -26,13 +26,15 @@ import jaxx.runtime.swing.nav.JaxxNodeChildLoador; +import javax.swing.tree.DefaultTreeModel; + /** * Implementation for tree of {@link JaxxNodeChildLoador} * * @author sletellier <letellier@codelutin.com> * @since 2.2 */ -public abstract class JaxxTreeNodeChildLoador<T, O, N extends JaxxTreeNode<N>> extends JaxxNodeChildLoador<T, O, N> { +public abstract class JaxxTreeNodeChildLoador<T, O, N extends JaxxTreeNode<N>> extends JaxxNodeChildLoador<T, O, DefaultTreeModel, JaxxTreeBridge<N>, N> { protected JaxxTreeNodeChildLoador(Class<O> beanType) { super(beanType); Added: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/JaxxTreeTableBridge.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/JaxxTreeTableBridge.java (rev 0) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/JaxxTreeTableBridge.java 2010-06-30 16:05:18 UTC (rev 2011) @@ -0,0 +1,289 @@ +/* + * #%L + * JAXX :: Runtime + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2008 - 2010 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ +package jaxx.runtime.swing.nav.treetable; + +import jaxx.runtime.swing.nav.JaxxNavBridge; +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; +import javax.swing.tree.TreeNode; +import javax.swing.tree.TreePath; +import java.util.ArrayList; +import java.util.EventListener; +import java.util.List; + +/** + * Delegate model used to switch between tree model and tree table model api + * + * @author sletellier <letellier@codelutin.com> + * @since 2.1 + */ +public class JaxxTreeTableBridge<N extends JaxxTreeTableNode<N>> implements JaxxNavBridge<JaxxTreeTableModel, N> { + + /** Logger */ + static private final Log log = LogFactory.getLog(JaxxTreeTableBridge.class); + + /** bridge model */ + protected JaxxTreeTableModel model; + + /** bridge ui */ + protected JXTreeTable ui; + + public JaxxTreeTableBridge() { + if (log.isDebugEnabled()) { + log.debug("New " + this); + } + } + + //-------------------------------------------------------------------------- + //-- Model Queries + //-------------------------------------------------------------------------- + + @Override + public JaxxTreeTableModel getModel() { + return model; + } + + @Override + @SuppressWarnings({"unchecked"}) + public N getRoot() { + return (N) model.getRoot(); + } + + @Override + public boolean isLeaf(Object node) { + return model.isLeaf(node); + } + + @Override + public int getChildCount(Object parent) { + return model.getChildCount(parent); + } + + @Override + @SuppressWarnings({"unchecked"}) + public N getChild(Object parent, int index) { + return (N) model.getChild(parent, index); + } + + @Override + public int getIndexOfChild(Object parent, Object child) { + return model.getIndexOfChild(parent, child); + } + + @Override + public TreeNode[] getPathToRoot(TreeNode aNode) { + return model.getPathToRoot((TreeTableNode) aNode); + } + + //-------------------------------------------------------------------------- + //-- Model modification + //-------------------------------------------------------------------------- + + + @Override + public void setModel(JaxxTreeTableModel model) { + this.model = model; + } + + @Override + public void setRoot(N node) { + model.setRoot(node); + } + + @Override + public void insertNodeInto(N newChild, N parent, int index) { + //FIXME c'est ca le code ? y'a rien d'ajoute au model c'est pas normal + model.nodeStructureChanged(parent); + } + + @Override + public void removeNodeFromParent(N node) { + //FIXME c'est ca le code ? y'a rien de supprimer au model c'est pas normal + model.nodeStructureChanged(node); + } + + @Override + public void reload(N node) { + model.getModelSupport().fireTreeStructureChanged(new TreePath(getPathToRoot(node))); + } + + //-------------------------------------------------------------------------- + //-- Listeners notifications + //-------------------------------------------------------------------------- + + @Override + public void valueForPathChanged(TreePath path, Object newValue) { + model.valueForPathChanged(path, newValue); + } + + @Override + public void nodeStructureChanged(TreeNode node) { + model.nodeStructureChanged((JaxxTreeTableNode<?>) node); + } + + @Override + public void nodeChanged(TreeNode node) { + model.nodeChanged((JaxxTreeTableNode<?>) node); + } + + @Override + public void nodesChanged(TreeNode node, int[] childIndices) { + //FIXME c'est plus fin que ça je pense, on indique juste que les fils ont + // changé par le node en lui meme + model.nodeChanged((JaxxTreeTableNode<?>) node); + } + + @Override + public void nodesWereInserted(N parent, int[] indices) { + //FIXME, hum c'est louche (on ne veut pas recharger tout le noeud sinon + // on peut perdre le positionnement de l'arbre + nodeStructureChanged(parent); + } + + @Override + public void nodeWereInserted(N parentNode, int childIndice, N node) { + //FIXME, hum c'est louche (on ne veut pas recharger tout le noeud sinon + // on peut perdre le positionnement de l'arbre + nodeStructureChanged(node); + } + + @Override + public void nodesWereRemoved(TreeNode node, int[] childIndices, + Object[] removedChildren) { + TreePath path = new TreePath(getPathToRoot(node)); + model.getModelSupport().fireChildrenRemoved(path, + childIndices, + removedChildren); + } + + @Override + @SuppressWarnings({"unchecked"}) + public void notifyChildNodesInserted(N node) { + //FIXME quel raccourci :) pour moi ça va pas trop de faire ça c'est + // trop violent, il faut affiner + nodeStructureChanged(node); + } + + @Override + public void notifyNodeInserted(N node) { + //FIXME quel raccourci :) pour moi ça va pas trop de faire ça c'est + // trop violent, il faut affiner + nodeStructureChanged(node); + } + + //-------------------------------------------------------------------------- + //-- TreeModelListener provider + //-------------------------------------------------------------------------- + + + @Override + public void addTreeModelListener(TreeModelListener l) { + model.addTreeModelListener(l); + } + + @Override + public void removeTreeModelListener(TreeModelListener l) { + model.removeTreeModelListener(l); + } + + @Override + public TreeModelListener[] getTreeModelListeners() { + return model.getModelSupport().getTreeModelListeners(); + } + + @Override + @SuppressWarnings({"unchecked"}) + public <T extends EventListener> T[] getListeners(Class<T> listenerType) { + TreeModelListener[] treeModelListeners = getTreeModelListeners(); + List<TreeModelListener> result = new ArrayList<TreeModelListener>(); + for (TreeModelListener listener : treeModelListeners) { + if (listener.getClass().isAssignableFrom(listenerType)) { + result.add(listener); + } + } + return (T[]) result.toArray(); + } + +// //-------------------------------------------------------------------------- +// //-- 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 AbstractJaxxTreeCellRenderer<JaxxTreeTableModel, 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 Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/JaxxTreeTableBridge.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/JaxxTreeTableHelper.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/JaxxTreeTableHelper.java (rev 0) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/JaxxTreeTableHelper.java 2010-06-30 16:05:18 UTC (rev 2011) @@ -0,0 +1,140 @@ +/* + * #%L + * JAXX :: Runtime + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2008 - 2010 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ +package jaxx.runtime.swing.nav.treetable; + +import jaxx.runtime.swing.nav.JaxxNavHelper; +import jaxx.runtime.swing.nav.tree.AbstractJaxxTreeCellRenderer; +import org.jdesktop.swingx.JXTreeTable; + +import javax.swing.event.TreeSelectionListener; +import javax.swing.tree.TreePath; +import javax.swing.tree.TreeSelectionModel; + +/** + * The implementation of {@link JaxxNavHelper} based on a {@link JXTreeTable} component. + * + * @author tchemit <chemit@codelutin.com> + * @since 2.1 + */ +public class JaxxTreeTableHelper<N extends JaxxTreeTableNode<N>> extends JaxxNavHelper<JaxxTreeTableModel, JXTreeTable, JaxxTreeTableBridge<N>, N> { + + public JaxxTreeTableHelper() { + super(new JaxxTreeTableBridge<N>()); + } + + @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 AbstractJaxxTreeCellRenderer<JaxxTreeTableModel, 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; + } + + /** + * Registers the given {@code treeTable} for this helper. + * <p/> + * <b>Note:</b> as a side-effect, it will register (if required) the + * {@link #expandListener} listener and the {@link #selectionListener}. + * + * @param treeTable the tree table to register + * @param addExpandTreeListener a flag to add expand listener + * @param listener the optional selection listener to add + */ + @SuppressWarnings({"unchecked"}) + @Override + public void setUI(JXTreeTable treeTable, + boolean addExpandTreeListener, + TreeSelectionListener listener) { + setUI(treeTable); + if (addExpandTreeListener) { + treeTable.addTreeWillExpandListener(expandListener); + } + if (listener != null) { + treeTable.addTreeSelectionListener(listener); + } + treeTable.addTreeSelectionListener(selectionListener); + } + + @Override + protected JaxxTreeTableModel createModel(N node, Object... extraArgs) { + + // must have a single extra params with delegate model + if (extraArgs.length != 1) { + throw new IllegalArgumentException("Should have exactly one extra parameter (delegate model)"); + } + if (!(extraArgs[0] instanceof JaxxTreeTableModel.MyDefaultTreeTableModel)) { + throw new IllegalArgumentException("extra parameter is not instance of " + JaxxTreeTableModel.MyDefaultTreeTableModel.class.getName()); + } + JaxxTreeTableModel.MyDefaultTreeTableModel delegate = (JaxxTreeTableModel.MyDefaultTreeTableModel) extraArgs[0]; + JaxxTreeTableBridge<N> bridge = getBridge(); + JaxxTreeTableModel model = bridge.getModel(); + if (model == null) { + model = new JaxxTreeTableModel(delegate); + bridge.setModel(model); +// model = new JaxxTreeTableBridge(tableModel); + bridge.addTreeModelListener(treeModelListener); +// ((JaxxTreeTableModel) model).addTreeModelListener(treeModelListener); + } + bridge.setRoot(node); + + // notify structure has changed + bridge.nodeStructureChanged(getRootNode()); + return model; + } +} \ No newline at end of file Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/JaxxTreeTableHelper.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/JaxxTreeTableModel.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/JaxxTreeTableModel.java 2010-06-29 22:50:39 UTC (rev 2010) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/JaxxTreeTableModel.java 2010-06-30 16:05:18 UTC (rev 2011) @@ -79,7 +79,7 @@ return null; } TreeNode[] treeNodes = getDelegate().getPathToRoot(aNode); - JaxxTreeTableNode[] result = new JaxxTreeTableNode[treeNodes.length]; + JaxxTreeTableNode<?>[] result = new JaxxTreeTableNode[treeNodes.length]; System.arraycopy(treeNodes, 0, result, 0, treeNodes.length); return result; } Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/JaxxTreeTableNode.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/JaxxTreeTableNode.java 2010-06-29 22:50:39 UTC (rev 2010) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/JaxxTreeTableNode.java 2010-06-30 16:05:18 UTC (rev 2011) @@ -25,23 +25,24 @@ package jaxx.runtime.swing.nav.treetable; import jaxx.runtime.swing.nav.DataProvider; -import jaxx.runtime.swing.nav.JaxxDelegateTreeModel; -import jaxx.runtime.swing.nav.JaxxNodeChildLoador; +import jaxx.runtime.swing.nav.JaxxNavBridge; import jaxx.runtime.swing.nav.JaxxNode; +import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.commons.logging.Log; +import org.jdesktop.swingx.JXTreeTable; import org.jdesktop.swingx.treetable.DefaultMutableTreeTableNode; + import java.util.Enumeration; /** * Implementation of {@link JaxxNode} used to create in tree table * This node extends {@link DefaultMutableTreeTableNode} used by - * {@link org.jdesktop.swingx.JXTreeTable} + * {@link JXTreeTable} * * @author sletellier <letellier@codelutin.com> * @since 2.2 */ -public class JaxxTreeTableNode<N extends JaxxTreeTableNode<N>> extends DefaultMutableTreeTableNode implements JaxxNode<N> { +public class JaxxTreeTableNode<N extends JaxxTreeTableNode<N>> extends DefaultMutableTreeTableNode implements JaxxNode<JaxxTreeTableModel, N> { /** Logger */ static private final Log log = LogFactory.getLog(JaxxNode.class); @@ -67,16 +68,16 @@ protected boolean loaded; /** Optional child loador to lazy create childs of the node. */ - protected final JaxxNodeChildLoador childLoador; + protected final JaxxTreeTableNodeChildLoador<?, ?, N> childLoador; protected JaxxTreeTableNode(String id) { this(String.class, id, null, null); } public JaxxTreeTableNode(Class<?> internalClass, - String id, - String context, - JaxxNodeChildLoador childLoador) { + String id, + String context, + JaxxTreeTableNodeChildLoador<?, ?, N> childLoador) { this.internalClass = internalClass; this.id = id; this.context = context; @@ -151,7 +152,7 @@ @Override @SuppressWarnings({"unchecked"}) public N findNodeById(String id, - JaxxDelegateTreeModel<N> model, + JaxxNavBridge<JaxxTreeTableModel, N> model, DataProvider provider) { if (id == null) { @@ -221,7 +222,7 @@ //-------------------------------------------------------------------------- @Override - public void populateNode(JaxxDelegateTreeModel<N> model, + public void populateNode(JaxxNavBridge<JaxxTreeTableModel, N> model, DataProvider provider, boolean populateChilds) { @@ -237,7 +238,8 @@ @Override @SuppressWarnings({"unchecked"}) - public void populateChilds(JaxxDelegateTreeModel<N> model, DataProvider provider) { + public void populateChilds(JaxxNavBridge<JaxxTreeTableModel, N> model, + DataProvider provider) { if (isStaticNode()) { // noeud static, rien a faire @@ -249,7 +251,7 @@ if (log.isDebugEnabled()) { log.debug("Will load childs for " + this); } - childLoador.loadChilds(model, this, provider); + childLoador.loadChilds((JaxxTreeTableBridge<N>) model, (N) this, provider); } catch (Exception e) { throw new RuntimeException(e.getMessage(), e); } finally { @@ -278,7 +280,7 @@ @SuppressWarnings({"unchecked"}) @Override public Enumeration<N> children() { - return (Enumeration<N>)super.children(); + return (Enumeration<N>) super.children(); } @Override @@ -287,8 +289,8 @@ } @SuppressWarnings({"unchecked"}) - public N[] getPathToRoot( - JaxxTreeTableNode aNode, int depth) { + public N[] getPathToRoot(JaxxTreeTableNode aNode, int depth) { + JaxxTreeTableNode[] retNodes; /* Check for null, in case someone passed in a null node, or Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/JaxxTreeTableNodeChildLoador.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/JaxxTreeTableNodeChildLoador.java 2010-06-29 22:50:39 UTC (rev 2010) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/JaxxTreeTableNodeChildLoador.java 2010-06-30 16:05:18 UTC (rev 2011) @@ -32,7 +32,7 @@ * @author sletellier <letellier@codelutin.com> * @since 2.2 */ -public abstract class JaxxTreeTableNodeChildLoador<T, O, N extends JaxxTreeTableNode<N>> extends JaxxNodeChildLoador<T, O, N> { +public abstract class JaxxTreeTableNodeChildLoador<T, O, N extends JaxxTreeTableNode<N>> extends JaxxNodeChildLoador<T, O, JaxxTreeTableModel, JaxxTreeTableBridge<N>, N> { protected JaxxTreeTableNodeChildLoador(Class<O> beanType) { super(beanType);