Jaxx-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
June 2010
- 2 participants
- 74 discussions
r2015 - in trunk/jaxx-demo/src/main: java/jaxx/demo java/jaxx/demo/component/jaxx java/jaxx/demo/feature java/jaxx/demo/feature/nav java/jaxx/demo/feature/nav/content java/jaxx/demo/feature/nav/tree java/jaxx/demo/feature/nav/treetable java/jaxx/demo/tree resources/i18n
by tchemit@users.nuiton.org 30 Jun '10
by tchemit@users.nuiton.org 30 Jun '10
30 Jun '10
Author: tchemit
Date: 2010-06-30 19:49:34 +0200 (Wed, 30 Jun 2010)
New Revision: 2015
Url: http://nuiton.org/repositories/revision/jaxx/2015
Log:
move nav demo to jaxx features
Added:
trunk/jaxx-demo/src/main/java/jaxx/demo/feature/nav/
Removed:
trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/
Modified:
trunk/jaxx-demo/src/main/java/jaxx/demo/DemoConfig.java
trunk/jaxx-demo/src/main/java/jaxx/demo/feature/nav/NavDemo.jaxx
trunk/jaxx-demo/src/main/java/jaxx/demo/feature/nav/NavDemoDataProvider.java
trunk/jaxx-demo/src/main/java/jaxx/demo/feature/nav/content/AbstractContentUI.jaxx
trunk/jaxx-demo/src/main/java/jaxx/demo/feature/nav/tree/ActorsTreeNodeLoador.java
trunk/jaxx-demo/src/main/java/jaxx/demo/feature/nav/tree/MoviesTreeNodeLoador.java
trunk/jaxx-demo/src/main/java/jaxx/demo/feature/nav/tree/NavDemoTreeCellRenderer.java
trunk/jaxx-demo/src/main/java/jaxx/demo/feature/nav/tree/NavDemoTreeHelper.java
trunk/jaxx-demo/src/main/java/jaxx/demo/feature/nav/tree/NavDemoTreeNode.java
trunk/jaxx-demo/src/main/java/jaxx/demo/feature/nav/treetable/ActorsTreeTableNodeLoador.java
trunk/jaxx-demo/src/main/java/jaxx/demo/feature/nav/treetable/MoviesTreeTableNodeLoador.java
trunk/jaxx-demo/src/main/java/jaxx/demo/feature/nav/treetable/NavDemoTreeTableHelper.java
trunk/jaxx-demo/src/main/java/jaxx/demo/feature/nav/treetable/NavDemoTreeTableModel.java
trunk/jaxx-demo/src/main/java/jaxx/demo/feature/nav/treetable/NavDemoTreeTableNode.java
trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoCellRenderer.java
trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoDataProvider.java
trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo-en_GB.properties
trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo-fr_FR.properties
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/DemoConfig.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/DemoConfig.java 2010-06-30 17:24:16 UTC (rev 2014)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/DemoConfig.java 2010-06-30 17:49:34 UTC (rev 2015)
@@ -25,7 +25,7 @@
package jaxx.demo;
-import jaxx.demo.component.jaxx.nav.NavDemo;
+import jaxx.demo.feature.nav.NavDemo;
import jaxx.runtime.JAXXUtil;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/feature/nav/NavDemo.jaxx
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/NavDemo.jaxx 2010-06-30 17:24:16 UTC (rev 2014)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/feature/nav/NavDemo.jaxx 2010-06-30 17:49:34 UTC (rev 2015)
@@ -25,9 +25,9 @@
<jaxx.demo.DemoPanel layout='{new BorderLayout()}'>
<import>
- jaxx.demo.component.jaxx.nav.content.*
- jaxx.demo.component.jaxx.nav.tree.*
- jaxx.demo.component.jaxx.nav.treetable.*
+ jaxx.demo.feature.nav.content.*
+ jaxx.demo.feature.nav.tree.*
+ jaxx.demo.feature.nav.treetable.*
jaxx.demo.entities.*
jaxx.runtime.decorator.DecoratorProvider
jaxx.runtime.swing.nav.NavNode
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/feature/nav/NavDemoDataProvider.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/NavDemoDataProvider.java 2010-06-30 17:24:16 UTC (rev 2014)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/feature/nav/NavDemoDataProvider.java 2010-06-30 17:49:34 UTC (rev 2015)
@@ -23,7 +23,7 @@
* #L%
*/
-package jaxx.demo.component.jaxx.nav;
+package jaxx.demo.feature.nav;
import jaxx.demo.entities.Movie;
import jaxx.demo.entities.People;
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/feature/nav/content/AbstractContentUI.jaxx
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/content/AbstractContentUI.jaxx 2010-06-30 17:24:16 UTC (rev 2014)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/feature/nav/content/AbstractContentUI.jaxx 2010-06-30 17:49:34 UTC (rev 2015)
@@ -27,8 +27,8 @@
genericType='B extends Object'>
<import>
- jaxx.demo.component.jaxx.nav.tree.NavDemoTreeHelper
- jaxx.demo.component.jaxx.nav.treetable.NavDemoTreeTableHelper
+ jaxx.demo.feature.nav.tree.NavDemoTreeHelper
+ jaxx.demo.feature.nav.treetable.NavDemoTreeTableHelper
</import>
<NavDemoTreeHelper id='treeHelper'
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/feature/nav/tree/ActorsTreeNodeLoador.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/ActorsTreeNodeLoador.java 2010-06-30 17:24:16 UTC (rev 2014)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/feature/nav/tree/ActorsTreeNodeLoador.java 2010-06-30 17:49:34 UTC (rev 2015)
@@ -23,9 +23,9 @@
* #L%
*/
-package jaxx.demo.component.jaxx.nav.tree;
+package jaxx.demo.feature.nav.tree;
-import jaxx.demo.component.jaxx.nav.NavDemoDataProvider;
+import jaxx.demo.feature.nav.NavDemoDataProvider;
import jaxx.demo.entities.People;
import jaxx.runtime.swing.nav.NavDataProvider;
import jaxx.runtime.swing.nav.tree.NavTreeNodeChildLoador;
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/feature/nav/tree/MoviesTreeNodeLoador.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/MoviesTreeNodeLoador.java 2010-06-30 17:24:16 UTC (rev 2014)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/feature/nav/tree/MoviesTreeNodeLoador.java 2010-06-30 17:49:34 UTC (rev 2015)
@@ -23,9 +23,9 @@
* #L%
*/
-package jaxx.demo.component.jaxx.nav.tree;
+package jaxx.demo.feature.nav.tree;
-import jaxx.demo.component.jaxx.nav.NavDemoDataProvider;
+import jaxx.demo.feature.nav.NavDemoDataProvider;
import jaxx.demo.entities.Movie;
import jaxx.runtime.swing.nav.NavDataProvider;
import jaxx.runtime.swing.nav.NavHelper;
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/feature/nav/tree/NavDemoTreeCellRenderer.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/NavDemoTreeCellRenderer.java 2010-06-30 17:24:16 UTC (rev 2014)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/feature/nav/tree/NavDemoTreeCellRenderer.java 2010-06-30 17:49:34 UTC (rev 2015)
@@ -23,9 +23,9 @@
* #L%
*/
-package jaxx.demo.component.jaxx.nav.tree;
+package jaxx.demo.feature.nav.tree;
-import jaxx.demo.component.jaxx.nav.NavDemoDataProvider;
+import jaxx.demo.feature.nav.NavDemoDataProvider;
import jaxx.demo.entities.Movie;
import jaxx.demo.entities.People;
import jaxx.runtime.decorator.Decorator;
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/feature/nav/tree/NavDemoTreeHelper.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/NavDemoTreeHelper.java 2010-06-30 17:24:16 UTC (rev 2014)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/feature/nav/tree/NavDemoTreeHelper.java 2010-06-30 17:49:34 UTC (rev 2015)
@@ -23,9 +23,9 @@
* #L%
*/
-package jaxx.demo.component.jaxx.nav.tree;
+package jaxx.demo.feature.nav.tree;
-import jaxx.demo.component.jaxx.nav.NavDemoDataProvider;
+import jaxx.demo.feature.nav.NavDemoDataProvider;
import jaxx.runtime.swing.nav.tree.NavTreeHelper;
import javax.swing.tree.DefaultTreeModel;
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/feature/nav/tree/NavDemoTreeNode.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/NavDemoTreeNode.java 2010-06-30 17:24:16 UTC (rev 2014)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/feature/nav/tree/NavDemoTreeNode.java 2010-06-30 17:49:34 UTC (rev 2015)
@@ -23,7 +23,7 @@
* #L%
*/
-package jaxx.demo.component.jaxx.nav.tree;
+package jaxx.demo.feature.nav.tree;
import jaxx.runtime.swing.nav.tree.NavTreeNode;
import jaxx.runtime.swing.nav.tree.NavTreeNodeChildLoador;
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/feature/nav/treetable/ActorsTreeTableNodeLoador.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/ActorsTreeTableNodeLoador.java 2010-06-30 17:24:16 UTC (rev 2014)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/feature/nav/treetable/ActorsTreeTableNodeLoador.java 2010-06-30 17:49:34 UTC (rev 2015)
@@ -23,9 +23,9 @@
* #L%
*/
-package jaxx.demo.component.jaxx.nav.treetable;
+package jaxx.demo.feature.nav.treetable;
-import jaxx.demo.component.jaxx.nav.NavDemoDataProvider;
+import jaxx.demo.feature.nav.NavDemoDataProvider;
import jaxx.demo.entities.People;
import jaxx.runtime.swing.nav.NavDataProvider;
import jaxx.runtime.swing.nav.treetable.NavTreeTableNodeChildLoador;
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/feature/nav/treetable/MoviesTreeTableNodeLoador.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/MoviesTreeTableNodeLoador.java 2010-06-30 17:24:16 UTC (rev 2014)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/feature/nav/treetable/MoviesTreeTableNodeLoador.java 2010-06-30 17:49:34 UTC (rev 2015)
@@ -23,9 +23,9 @@
* #L%
*/
-package jaxx.demo.component.jaxx.nav.treetable;
+package jaxx.demo.feature.nav.treetable;
-import jaxx.demo.component.jaxx.nav.NavDemoDataProvider;
+import jaxx.demo.feature.nav.NavDemoDataProvider;
import jaxx.demo.entities.Movie;
import jaxx.runtime.swing.nav.NavDataProvider;
import jaxx.runtime.swing.nav.NavHelper;
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/feature/nav/treetable/NavDemoTreeTableHelper.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/NavDemoTreeTableHelper.java 2010-06-30 17:24:16 UTC (rev 2014)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/feature/nav/treetable/NavDemoTreeTableHelper.java 2010-06-30 17:49:34 UTC (rev 2015)
@@ -23,9 +23,9 @@
* #L%
*/
-package jaxx.demo.component.jaxx.nav.treetable;
+package jaxx.demo.feature.nav.treetable;
-import jaxx.demo.component.jaxx.nav.NavDemoDataProvider;
+import jaxx.demo.feature.nav.NavDemoDataProvider;
import jaxx.runtime.swing.nav.treetable.NavTreeTableHelper;
import jaxx.runtime.swing.nav.treetable.NavTreeTableModel;
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/feature/nav/treetable/NavDemoTreeTableModel.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/NavDemoTreeTableModel.java 2010-06-30 17:24:16 UTC (rev 2014)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/feature/nav/treetable/NavDemoTreeTableModel.java 2010-06-30 17:49:34 UTC (rev 2015)
@@ -22,9 +22,9 @@
* <http://www.gnu.org/licenses/lgpl-3.0.html>.
* #L%
*/
-package jaxx.demo.component.jaxx.nav.treetable;
+package jaxx.demo.feature.nav.treetable;
-import jaxx.demo.component.jaxx.nav.NavDemoDataProvider;
+import jaxx.demo.feature.nav.NavDemoDataProvider;
import jaxx.demo.entities.Movie;
import jaxx.demo.entities.People;
import jaxx.runtime.swing.nav.NavNode;
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/feature/nav/treetable/NavDemoTreeTableNode.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/NavDemoTreeTableNode.java 2010-06-30 17:24:16 UTC (rev 2014)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/feature/nav/treetable/NavDemoTreeTableNode.java 2010-06-30 17:49:34 UTC (rev 2015)
@@ -22,7 +22,7 @@
* <http://www.gnu.org/licenses/lgpl-3.0.html>.
* #L%
*/
-package jaxx.demo.component.jaxx.nav.treetable;
+package jaxx.demo.feature.nav.treetable;
import jaxx.runtime.swing.nav.treetable.NavTreeTableNode;
import jaxx.runtime.swing.nav.treetable.NavTreeTableNodeChildLoador;
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-30 17:24:16 UTC (rev 2014)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoCellRenderer.java 2010-06-30 17:49:34 UTC (rev 2015)
@@ -25,7 +25,7 @@
package jaxx.demo.tree;
-import jaxx.demo.component.jaxx.nav.NavDemoDataProvider;
+import jaxx.demo.feature.nav.NavDemoDataProvider;
import jaxx.runtime.swing.nav.tree.AbstractNavTreeCellRenderer;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoDataProvider.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoDataProvider.java 2010-06-30 17:24:16 UTC (rev 2014)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoDataProvider.java 2010-06-30 17:49:34 UTC (rev 2015)
@@ -30,7 +30,6 @@
import jaxx.demo.component.jaxx.editor.ComboEditorDemo;
import jaxx.demo.component.jaxx.editor.I18nEditorDemo;
import jaxx.demo.component.jaxx.editor.NumberEditorDemo;
-import jaxx.demo.component.jaxx.nav.NavDemo;
import jaxx.demo.component.swing.HidorButtonDemo;
import jaxx.demo.component.swing.JButtonDemo;
import jaxx.demo.component.swing.JCheckBoxDemo;
@@ -51,6 +50,7 @@
import jaxx.demo.component.swing.JToggleButtonDemo;
import jaxx.demo.feature.databinding.BeanDataBindingDemo;
import jaxx.demo.feature.databinding.BindingExtremeDemo;
+import jaxx.demo.feature.nav.NavDemo;
import jaxx.demo.feature.validation.ValidationListDemo;
import jaxx.demo.feature.validation.ValidationTableDemo;
import jaxx.demo.fun.CalculatorDemo;
@@ -88,88 +88,91 @@
log.info("for " + this);
addMapping("jaxxdemo.tree",
- n_("jaxxdemo.tree.component.swing"),
- n_("jaxxdemo.tree.component.jaxx"),
- n_("jaxxdemo.tree.feature"),
- n_("jaxxdemo.tree.fun")
+ n_("jaxxdemo.component.swing"),
+ n_("jaxxdemo.component.jaxx"),
+ n_("jaxxdemo.feature"),
+ n_("jaxxdemo.fun")
);
- addMapping(n_("jaxxdemo.tree.component.swing"),
- n_("jaxxdemo.tree.component.swing.buttons"),
- n_("jaxxdemo.tree.component.swing.form"),
- n_("jaxxdemo.tree.component.swing.layout"),
- n_("jaxxdemo.tree.component.swing.menu"),
- n_("jaxxdemo.tree.component.swing.window"),
+ addMapping(n_("jaxxdemo.component.swing"),
+ n_("jaxxdemo.component.swing.buttons"),
+ n_("jaxxdemo.component.swing.form"),
+ n_("jaxxdemo.component.swing.layout"),
+ n_("jaxxdemo.component.swing.menu"),
+ n_("jaxxdemo.component.swing.window"),
JProgressBarDemo.class
);
- addMapping(n_("jaxxdemo.tree.component.swing.buttons"),
+ addMapping(n_("jaxxdemo.component.swing.buttons"),
JButtonDemo.class,
JCheckBoxDemo.class,
JRadioButtonDemo.class,
JToggleButtonDemo.class
);
- addMapping(n_("jaxxdemo.tree.component.swing.form"),
- n_("jaxxdemo.tree.component.swing.form.text"),
+ addMapping(n_("jaxxdemo.component.swing.form"),
+ n_("jaxxdemo.component.swing.form.text"),
JComboBoxDemo.class,
JListDemo.class,
JSliderDemo.class,
JSpinnerDemo.class
);
- addMapping(n_("jaxxdemo.tree.component.swing.form.text"),
+ addMapping(n_("jaxxdemo.component.swing.form.text"),
JPasswordFieldDemo.class,
JTextFieldDemo.class,
JTextAreaDemo.class
);
- addMapping(n_("jaxxdemo.tree.component.swing.layout"),
+ addMapping(n_("jaxxdemo.component.swing.layout"),
JSplitPaneDemo.class
);
- addMapping(n_("jaxxdemo.tree.component.swing.menu"),
+ addMapping(n_("jaxxdemo.component.swing.menu"),
JMenuItemDemo.class,
JCheckBoxMenuItemDemo.class,
JRadioButtonMenuItemDemo.class
);
- addMapping(n_("jaxxdemo.tree.component.swing.window"),
+ addMapping(n_("jaxxdemo.component.swing.window"),
JDialogDemo.class
);
- addMapping(n_("jaxxdemo.tree.component.jaxx"),
+ addMapping(n_("jaxxdemo.component.jaxx"),
HidorButtonDemo.class,
- n_("jaxxdemo.tree.component.jaxx.editor"),
- n_("jaxxdemo.tree.component.jaxx.tree"),
+ n_("jaxxdemo.component.jaxx.editor"),
+ n_("jaxxdemo.component.jaxx.tree"),
StatusMessagePanelDemo.class,
BoxedDecoratorDemo.class
);
- addMapping(n_("jaxxdemo.tree.component.jaxx.editor"),
+ addMapping(n_("jaxxdemo.component.jaxx.editor"),
NumberEditorDemo.class,
ComboEditorDemo.class,
I18nEditorDemo.class
);
- addMapping(n_("jaxxdemo.tree.component.jaxx.tree"),
- NavDemo.class
- );
- addMapping(n_("jaxxdemo.tree.feature"),
- n_("jaxxdemo.tree.feature.databinding"),
- n_("jaxxdemo.tree.feature.validation")
+ addMapping(n_("jaxxdemo.feature"),
+ n_("jaxxdemo.feature.databinding"),
+ n_("jaxxdemo.feature.validation"),
+ n_("jaxxdemo.feature.nav")
);
- addMapping(n_("jaxxdemo.tree.feature.databinding"),
+ addMapping(n_("jaxxdemo.feature.databinding"),
BindingExtremeDemo.class,
BeanDataBindingDemo.class
);
- addMapping(n_("jaxxdemo.tree.feature.validation"),
+ addMapping(n_("jaxxdemo.feature.validation"),
ValidationListDemo.class,
ValidationTableDemo.class
);
- addMapping(n_("jaxxdemo.tree.fun"),
+
+ addMapping(n_("jaxxdemo.feature.nav"),
+ NavDemo.class
+ );
+
+ addMapping(n_("jaxxdemo.fun"),
LabelStyleDemo.class,
CounterDemo.class,
CalculatorDemo.class
Modified: trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo-en_GB.properties
===================================================================
--- trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo-en_GB.properties 2010-06-30 17:24:16 UTC (rev 2014)
+++ trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo-en_GB.properties 2010-06-30 17:49:34 UTC (rev 2015)
@@ -138,14 +138,14 @@
jaxxdemo.about.message=<h3>JAXX Demo</h3><hr/>For more informations, viste the <a href\="http\://maven-site.nuiton.org/jaxx/jaxx-demo">website of the project</a>.
jaxxdemo.action.about=About...
jaxxdemo.action.about.tip=About JAXXDemo...
-jaxxdemo.action.add=
+jaxxdemo.action.add=Add
jaxxdemo.action.configuration=Preferences
jaxxdemo.action.configuration.tip=Change the preferences of the application
jaxxdemo.action.exit=Quit
jaxxdemo.action.exit.tip=Quit JAXXDemo
jaxxdemo.action.fullscreen=Full screen
jaxxdemo.action.fullscreen.tip=Change to full screen mode
-jaxxdemo.action.help=
+jaxxdemo.action.help=Help
jaxxdemo.action.help.tip=Display help
jaxxdemo.action.locale.fr=French
jaxxdemo.action.locale.fr.tip=Change to french language
@@ -157,6 +157,16 @@
jaxxdemo.action.show=show
jaxxdemo.action.site=Web site
jaxxdemo.action.site.tip=Go to the web site
+jaxxdemo.component.jaxx=JAXX Components
+jaxxdemo.component.jaxx.editor=Editors
+jaxxdemo.component.jaxx.tree=
+jaxxdemo.component.swing=Swing Components
+jaxxdemo.component.swing.buttons=Buttons
+jaxxdemo.component.swing.form=Form elements
+jaxxdemo.component.swing.form.text=Text
+jaxxdemo.component.swing.layout=Layouts
+jaxxdemo.component.swing.menu=Menus
+jaxxdemo.component.swing.window=windows
jaxxdemo.config.category.directories=Files
jaxxdemo.config.category.directories.description=Files used by application
jaxxdemo.config.category.other=Others
@@ -166,6 +176,11 @@
jaxxdemo.config.ui.fontSize=default font size to use in sources
jaxxdemo.config.ui.fullscreen=To change the screen mode (true for full screen)
jaxxdemo.config.ui.locale=Language used in application
+jaxxdemo.feature=Features
+jaxxdemo.feature.databinding=Data Binding
+jaxxdemo.feature.nav=Jaxx nav API
+jaxxdemo.feature.validation=Validation
+jaxxdemo.fun=Fun
jaxxdemo.i18neditor.configuration=Configuration
jaxxdemo.i18neditor.popupBorderText=Popup title
jaxxdemo.i18neditor.selected.locale=Selected Language
@@ -178,13 +193,13 @@
jaxxdemo.init.ui.done=UI initialized.
jaxxdemo.menu.file=File
jaxxdemo.menu.file.locale=Languages
-jaxxdemo.menu.help=
+jaxxdemo.menu.help=Help
jaxxdemo.message.config.loaded=Configuration of JAXXDemo v. %1$s loaded.
jaxxdemo.message.goto.site=Go to JAXXDemo Web site
-jaxxdemo.navigation.actor.title=
-jaxxdemo.navigation.actors.title=
-jaxxdemo.navigation.movie.title=
-jaxxdemo.navigation.movies.title=
+jaxxdemo.navigation.actor.title=Actor
+jaxxdemo.navigation.actors.title=Actors
+jaxxdemo.navigation.movie.title=Movie
+jaxxdemo.navigation.movies.title=Movies
jaxxdemo.numbereditor.autoPopup=
jaxxdemo.numbereditor.configuration=
jaxxdemo.numbereditor.model=
@@ -195,24 +210,9 @@
jaxxdemo.numbereditor.useFloat=
jaxxdemo.numbereditor.useSign=
jaxxdemo.title.about=About JAXXDemo...
-jaxxdemo.tree.age=
-jaxxdemo.tree.component.jaxx=JAXX Components
-jaxxdemo.tree.component.jaxx.editor=Editors
-jaxxdemo.tree.component.jaxx.tree=Jaxx tree API
-jaxxdemo.tree.component.jaxx.tree.navigation=Navigation trees
-jaxxdemo.tree.component.swing=Swing Components
-jaxxdemo.tree.component.swing.buttons=Buttons
-jaxxdemo.tree.component.swing.form=Form elements
-jaxxdemo.tree.component.swing.form.text=Text
-jaxxdemo.tree.component.swing.layout=Layouts
-jaxxdemo.tree.component.swing.menu=Menus
-jaxxdemo.tree.component.swing.window=windows
-jaxxdemo.tree.feature=Features
-jaxxdemo.tree.feature.databinding=Data Binding
-jaxxdemo.tree.feature.validation=Validation
-jaxxdemo.tree.firstName=
-jaxxdemo.tree.fun=Fun
-jaxxdemo.tree.lastName=
+jaxxdemo.tree.age=Age
+jaxxdemo.tree.firstName=First name
+jaxxdemo.tree.lastName=Last name
jaxxdemo.tree.tabtitle=
jaxxdemo.treeTable.tabtitle=
jaxxdemo.warning.nimbus.landf=Could not init nymbus look and feel, you need at leasr version 1.6u10 of java.
Modified: trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo-fr_FR.properties
===================================================================
--- trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo-fr_FR.properties 2010-06-30 17:24:16 UTC (rev 2014)
+++ trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo-fr_FR.properties 2010-06-30 17:49:34 UTC (rev 2015)
@@ -138,7 +138,7 @@
jaxxdemo.about.message=<h3>JAXX Demo</h3><hr/>Pour plus d'informations, vous pouvez visiter le <a href\="http\://maven-site.nuiton.org/jaxx/jaxx-demo">site du projet</a>.
jaxxdemo.action.about=A propos
jaxxdemo.action.about.tip=A propos de JAXX Demo...
-jaxxdemo.action.add=
+jaxxdemo.action.add=Ajouter
jaxxdemo.action.configuration=Configuration
jaxxdemo.action.configuration.tip=Modifier la configuration
jaxxdemo.action.exit=Quitter
@@ -153,10 +153,20 @@
jaxxdemo.action.locale.uk.tip=Changer la langue en anglais
jaxxdemo.action.normalscreen=Ecran normal
jaxxdemo.action.normalscreen.tip=Revenir en mode normal
-jaxxdemo.action.remove=
-jaxxdemo.action.show=
+jaxxdemo.action.remove=Supprimer
+jaxxdemo.action.show=Voir
jaxxdemo.action.site=Site internet
jaxxdemo.action.site.tip=Acc\u00E9der au site de l'application sur internet
+jaxxdemo.component.jaxx=Composants JAXX
+jaxxdemo.component.jaxx.editor=Editeurs
+jaxxdemo.component.jaxx.tree=
+jaxxdemo.component.swing=Composants Swing
+jaxxdemo.component.swing.buttons=Boutons
+jaxxdemo.component.swing.form=Elements de formulaire
+jaxxdemo.component.swing.form.text=Texte
+jaxxdemo.component.swing.layout=Layouts
+jaxxdemo.component.swing.menu=Menus
+jaxxdemo.component.swing.window=Fen\u00EAtres
jaxxdemo.config.category.directories=R\u00E9pertoires
jaxxdemo.config.category.directories.description=R\u00E9pertoires de l'application
jaxxdemo.config.category.other=Autre
@@ -166,6 +176,11 @@
jaxxdemo.config.ui.fontSize=La taille de la police \u00E0 utiliser pour visualiser dans les sources
jaxxdemo.config.ui.fullscreen=Pour afficher l'aplication en mode pleine \u00E9cran
jaxxdemo.config.ui.locale=La langue utilis\u00E9e par l'application
+jaxxdemo.feature=Fonctionnalit\u00E9s
+jaxxdemo.feature.databinding=Data binding
+jaxxdemo.feature.nav=API JAXX pour les arbres
+jaxxdemo.feature.validation=Validation
+jaxxdemo.fun=Fun
jaxxdemo.i18neditor.configuration=Configuration
jaxxdemo.i18neditor.popupBorderText=Titre de la popup
jaxxdemo.i18neditor.selected.locale=Langue s\u00E9lectionn\u00E9e
@@ -181,10 +196,10 @@
jaxxdemo.menu.help=Aide
jaxxdemo.message.config.loaded=Configuration de JAXX Demo v. %1$s charg\u00E9e.
jaxxdemo.message.goto.site=Acc\u00E9der au site de JAXX Demo (%1$s)
-jaxxdemo.navigation.actor.title=
-jaxxdemo.navigation.actors.title=
-jaxxdemo.navigation.movie.title=
-jaxxdemo.navigation.movies.title=
+jaxxdemo.navigation.actor.title=Acteur
+jaxxdemo.navigation.actors.title=Acteurs
+jaxxdemo.navigation.movie.title=Film
+jaxxdemo.navigation.movies.title=Films
jaxxdemo.numbereditor.autoPopup=Affichage automatique popup
jaxxdemo.numbereditor.configuration=Configuration
jaxxdemo.numbereditor.model=R\u00E9sultat
@@ -196,22 +211,7 @@
jaxxdemo.numbereditor.useSign=Utiliser le signe
jaxxdemo.title.about=A propos de JAXX Demo...
jaxxdemo.tree.age=Age / ann\u00E9e
-jaxxdemo.tree.component.jaxx=Composants JAXX
-jaxxdemo.tree.component.jaxx.editor=Editeurs
-jaxxdemo.tree.component.jaxx.tree=API JAXX pour les arbres
-jaxxdemo.tree.component.jaxx.tree.navigation=Arbre de navigation
-jaxxdemo.tree.component.swing=Composants Swing
-jaxxdemo.tree.component.swing.buttons=Boutons
-jaxxdemo.tree.component.swing.form=Elements de formulaire
-jaxxdemo.tree.component.swing.form.text=Texte
-jaxxdemo.tree.component.swing.layout=Layouts
-jaxxdemo.tree.component.swing.menu=Menus
-jaxxdemo.tree.component.swing.window=Fen\u00EAtres
-jaxxdemo.tree.feature=Fonctionnalit\u00E9s
-jaxxdemo.tree.feature.databinding=Data binding
-jaxxdemo.tree.feature.validation=Validation
jaxxdemo.tree.firstName=Prenom
-jaxxdemo.tree.fun=Fun
jaxxdemo.tree.lastName=Nom
jaxxdemo.tree.tabtitle=Arbre
jaxxdemo.treeTable.tabtitle=Arbre tableau
1
0
30 Jun '10
Author: tchemit
Date: 2010-06-30 19:24:16 +0200 (Wed, 30 Jun 2010)
New Revision: 2014
Url: http://nuiton.org/repositories/revision/jaxx/2014
Log:
normalize nav api
Added:
trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/NavDemo.jaxx
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/NavBridge.java
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/NavDataProvider.java
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/NavHelper.java
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/NavNode.java
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/NavNodeChildLoador.java
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/AbstractNavTreeCellRenderer.java
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/NavTreeBridge.java
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/NavTreeHelper.java
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/NavTreeNode.java
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/NavTreeNodeChildLoador.java
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/package.html
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/NavTreeTableBridge.java
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/NavTreeTableHelper.java
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/NavTreeTableModel.java
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/NavTreeTableNode.java
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/NavTreeTableNodeChildLoador.java
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/package.html
Removed:
trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/JaxxNavDemo.jaxx
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/DataProvider.java
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxNavBridge.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/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/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/JaxxTreeTableBridge.java
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/JaxxTreeTableHelper.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/main/java/jaxx/demo/DemoConfig.java
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-demo/src/main/java/jaxx/demo/tree/DemoCellRenderer.java
trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoDataProvider.java
trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoNode.java
trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoNodeLoador.java
trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoTreeHelper.java
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/package.html
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/DemoConfig.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/DemoConfig.java 2010-06-30 16:48:34 UTC (rev 2013)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/DemoConfig.java 2010-06-30 17:24:16 UTC (rev 2014)
@@ -25,7 +25,7 @@
package jaxx.demo;
-import jaxx.demo.component.jaxx.nav.JaxxNavDemo;
+import jaxx.demo.component.jaxx.nav.NavDemo;
import jaxx.runtime.JAXXUtil;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -228,7 +228,7 @@
DEMO_PATH(
"ui.demo.path",
_("jaxxdemo.config.ui.demo.path"),
- "jaxxdemo.tree/jaxxdemo.tree.component.jaxx/jaxxdemo.tree.component.jaxx.tree/" + JaxxNavDemo.class.getSimpleName(),
+ "jaxxdemo.tree/jaxxdemo.tree.component.jaxx/jaxxdemo.tree.component.jaxx.tree/" + NavDemo.class.getSimpleName(),
String.class,
false,
true);
Deleted: 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-30 16:48:34 UTC (rev 2013)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/JaxxNavDemo.jaxx 2010-06-30 17:24:16 UTC (rev 2014)
@@ -1,256 +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%
- -->
-
-<jaxx.demo.DemoPanel layout='{new BorderLayout()}'>
-
- <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
-
- org.jdesktop.swingx.JXTreeTable
- javax.swing.tree.TreePath
- java.lang.reflect.Constructor
- </import>
-
- <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(),
- "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() {
- setContextValue(treeHelper, "treeHelper");
- setContextValue(treeTableHelper, "treeTableHelper");
-
- // Creation of selection listener to open ui when tree selection change
- TreeSelectionListener treeSelectionListener = new TreeSelectionListener() {
- @Override
- public void valueChanged(TreeSelectionEvent event) {
- TreePath path = event.getPath();
- NavDemoTreeNode demoNode = (NavDemoTreeNode) path.getLastPathComponent();
-
- if (log.isDebugEnabled()) {
- log.debug("Select demoNode " + demoNode);
- }
-
- // Do nothing for root
- if (demoNode.isRoot()) {
- return;
- }
- openUI(demoNode);
- }
- };
-
- // Creation of selection listener to open ui when tree selection change
- TreeSelectionListener treeTableSelectionListener = new TreeSelectionListener() {
- @Override
- public void valueChanged(TreeSelectionEvent event) {
- TreePath path = event.getPath();
- NavDemoTreeTableNode demoNode = (NavDemoTreeTableNode) path.getLastPathComponent();
-
- if (log.isDebugEnabled()) {
- log.debug("Select demoNode " + demoNode);
- }
-
- // Do nothing for root
- if (demoNode.isRoot()) {
- return;
- }
- openUI(demoNode);
- }
- };
-
- // Register decorator
- DecoratorProvider decoratorProvider = getContextValue(DecoratorProvider.class);
-
- // Attach renderer
- navigationTree.setCellRenderer(new NavDemoTreeCellRenderer(decoratorProvider, dataProvider));
-
- // Register tree
- treeHelper.setUI(navigationTree, true, treeSelectionListener);
-
- // Register tree table
- treeTableHelper.setUI(navigationTreeTable, true, treeTableSelectionListener);
-
- SwingUtilities.invokeLater(new Runnable() {
-
- @Override
- public void run() {
- navigationTree.setSelectionInterval(0, 0);
- splitPane.resetToPreferredSizes();
- }
- });
-
- // expand the tree
- SwingUtil.expandTree(navigationTree);
- SwingUtil.expandTreeTable(navigationTreeTable);
-
- // auto-expand demoNode when selected
- SwingUtil.addExpandOnClickListener(navigationTree);
- SwingUtil.addExpandOnClickListener(navigationTreeTable);
-}
-
-protected void openUI(JaxxNode demoNode) {
-
- // Get demoNode type
- Class<?> editType = demoNode.getInternalClass();
- String id = demoNode.getId();
-
- // If it's category demoNode
- if (editType.equals(String.class)) {
-
- // Actors categorie demoNode
- if (NavDemoTreeHelper.ACTORS_CATEGORY_NODE.equals(id)) {
-
- java.util.List<People> peoples = dataProvider.getPeoples();
- showUI(peoples, ActorsContentUI.class);
-
- // Movies categorie demoNode
- } else if (NavDemoTreeHelper.MOVIES_CATEGORY_NODE.equals(id)) {
-
- java.util.List<Movie> movies = dataProvider.getMovies();
- showUI(movies, MoviesContentUI.class);
- }
-
- // People demoNode
- } else if (editType.equals(People.class)) {
- People people = dataProvider.getPeople(id);
- showUI(people, ActorContentUI.class);
-
- // Movie demoNode
- } else if (editType.equals(Movie.class)) {
- Movie movie = dataProvider.getMovie(id);
- showUI(movie, MovieContentUI.class);
- }
-}
-
-// Create by introspection content ui
-protected <B> void showUI(B bean, Class<? extends AbstractContentUI> uiClass) {
-
- // Verify if instance is existing
- AbstractContentUI ui = getContentIfExist(uiClass);
-
- // Get layout identifier
- String contentName = uiClass.getName();
-
- if (ui == null) {
- try {
- // Get constructor
- Constructor<? extends AbstractContentUI> constructor =
- uiClass.getConstructor(JAXXContext.class);
-
- // Invoke instance creation
- ui = constructor.newInstance(this);
- } catch (Exception eee) {
- log.error(eee);
- ErrorDialogUI.showError(eee);
- }
-
- // Add to content panel
- content.add(ui, contentName);
- }
-
- // Attach bean
- ui.setData(bean);
-
- // show ui
- contentLayout.show(content, contentName);
-}
-
-// Get content if exist in content, else return null
-protected <E extends Component> E getContentIfExist(Class<E> uiClass) {
- String contentName = uiClass.getName();
- if (log.isDebugEnabled()) {
- log.debug("Get content if exist " + contentName);
- }
- if (!contentLayout.contains(contentName)) {
- return null;
- }
- return (E) contentLayout.getComponent(content, contentName);
-}
- ]]>
- </script>
-
- <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}'>
-
- <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}'>
-
- <JXTreeTable id="navigationTreeTable"
- font-size='11'
- rootVisible='false'
- showsRootHandles='false'
- treeTableModel='{treeTableHelper.createModel()}'/>
-
- </JScrollPane>
- </tab>
- </JTabbedPane>
-
- <JPanel id="content" layout="{contentLayout}"/>
-
- </JSplitPane>
-
-</jaxx.demo.DemoPanel>
Copied: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/NavDemo.jaxx (from rev 2012, trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/JaxxNavDemo.jaxx)
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/NavDemo.jaxx (rev 0)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/NavDemo.jaxx 2010-06-30 17:24:16 UTC (rev 2014)
@@ -0,0 +1,256 @@
+<!--
+ #%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%
+ -->
+
+<jaxx.demo.DemoPanel layout='{new BorderLayout()}'>
+
+ <import>
+ 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
+ jaxx.runtime.swing.nav.NavNode
+
+ org.jdesktop.swingx.JXTreeTable
+ javax.swing.tree.TreePath
+ java.lang.reflect.Constructor
+ </import>
+
+ <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(),
+ "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() {
+ setContextValue(treeHelper, "treeHelper");
+ setContextValue(treeTableHelper, "treeTableHelper");
+
+ // Creation of selection listener to open ui when tree selection change
+ TreeSelectionListener treeSelectionListener = new TreeSelectionListener() {
+ @Override
+ public void valueChanged(TreeSelectionEvent event) {
+ TreePath path = event.getPath();
+ NavDemoTreeNode demoNode = (NavDemoTreeNode) path.getLastPathComponent();
+
+ if (log.isDebugEnabled()) {
+ log.debug("Select demoNode " + demoNode);
+ }
+
+ // Do nothing for root
+ if (demoNode.isRoot()) {
+ return;
+ }
+ openUI(demoNode);
+ }
+ };
+
+ // Creation of selection listener to open ui when tree selection change
+ TreeSelectionListener treeTableSelectionListener = new TreeSelectionListener() {
+ @Override
+ public void valueChanged(TreeSelectionEvent event) {
+ TreePath path = event.getPath();
+ NavDemoTreeTableNode demoNode = (NavDemoTreeTableNode) path.getLastPathComponent();
+
+ if (log.isDebugEnabled()) {
+ log.debug("Select demoNode " + demoNode);
+ }
+
+ // Do nothing for root
+ if (demoNode.isRoot()) {
+ return;
+ }
+ openUI(demoNode);
+ }
+ };
+
+ // Register decorator
+ DecoratorProvider decoratorProvider = getContextValue(DecoratorProvider.class);
+
+ // Attach renderer
+ navigationTree.setCellRenderer(new NavDemoTreeCellRenderer(decoratorProvider, dataProvider));
+
+ // Register tree
+ treeHelper.setUI(navigationTree, true, treeSelectionListener);
+
+ // Register tree table
+ treeTableHelper.setUI(navigationTreeTable, true, treeTableSelectionListener);
+
+ SwingUtilities.invokeLater(new Runnable() {
+
+ @Override
+ public void run() {
+ navigationTree.setSelectionInterval(0, 0);
+ splitPane.resetToPreferredSizes();
+ }
+ });
+
+ // expand the tree
+ SwingUtil.expandTree(navigationTree);
+ SwingUtil.expandTreeTable(navigationTreeTable);
+
+ // auto-expand demoNode when selected
+ SwingUtil.addExpandOnClickListener(navigationTree);
+ SwingUtil.addExpandOnClickListener(navigationTreeTable);
+}
+
+protected void openUI(NavNode demoNode) {
+
+ // Get demoNode type
+ Class<?> editType = demoNode.getInternalClass();
+ String id = demoNode.getId();
+
+ // If it's category demoNode
+ if (editType.equals(String.class)) {
+
+ // Actors categorie demoNode
+ if (NavDemoTreeHelper.ACTORS_CATEGORY_NODE.equals(id)) {
+
+ java.util.List<People> peoples = dataProvider.getPeoples();
+ showUI(peoples, ActorsContentUI.class);
+
+ // Movies categorie demoNode
+ } else if (NavDemoTreeHelper.MOVIES_CATEGORY_NODE.equals(id)) {
+
+ java.util.List<Movie> movies = dataProvider.getMovies();
+ showUI(movies, MoviesContentUI.class);
+ }
+
+ // People demoNode
+ } else if (editType.equals(People.class)) {
+ People people = dataProvider.getPeople(id);
+ showUI(people, ActorContentUI.class);
+
+ // Movie demoNode
+ } else if (editType.equals(Movie.class)) {
+ Movie movie = dataProvider.getMovie(id);
+ showUI(movie, MovieContentUI.class);
+ }
+}
+
+// Create by introspection content ui
+protected <B> void showUI(B bean, Class<? extends AbstractContentUI> uiClass) {
+
+ // Verify if instance is existing
+ AbstractContentUI ui = getContentIfExist(uiClass);
+
+ // Get layout identifier
+ String contentName = uiClass.getName();
+
+ if (ui == null) {
+ try {
+ // Get constructor
+ Constructor<? extends AbstractContentUI> constructor =
+ uiClass.getConstructor(JAXXContext.class);
+
+ // Invoke instance creation
+ ui = constructor.newInstance(this);
+ } catch (Exception eee) {
+ log.error(eee);
+ ErrorDialogUI.showError(eee);
+ }
+
+ // Add to content panel
+ content.add(ui, contentName);
+ }
+
+ // Attach bean
+ ui.setData(bean);
+
+ // show ui
+ contentLayout.show(content, contentName);
+}
+
+// Get content if exist in content, else return null
+protected <E extends Component> E getContentIfExist(Class<E> uiClass) {
+ String contentName = uiClass.getName();
+ if (log.isDebugEnabled()) {
+ log.debug("Get content if exist " + contentName);
+ }
+ if (!contentLayout.contains(contentName)) {
+ return null;
+ }
+ return (E) contentLayout.getComponent(content, contentName);
+}
+ ]]>
+ </script>
+
+ <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}'>
+
+ <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}'>
+
+ <JXTreeTable id="navigationTreeTable"
+ font-size='11'
+ rootVisible='false'
+ showsRootHandles='false'
+ treeTableModel='{treeTableHelper.createModel()}'/>
+
+ </JScrollPane>
+ </tab>
+ </JTabbedPane>
+
+ <JPanel id="content" layout="{contentLayout}"/>
+
+ </JSplitPane>
+
+</jaxx.demo.DemoPanel>
Property changes on: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/NavDemo.jaxx
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/NavDemoDataProvider.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/NavDemoDataProvider.java 2010-06-30 16:48:34 UTC (rev 2013)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/NavDemoDataProvider.java 2010-06-30 17:24:16 UTC (rev 2014)
@@ -27,7 +27,7 @@
import jaxx.demo.entities.Movie;
import jaxx.demo.entities.People;
-import jaxx.runtime.swing.nav.DataProvider;
+import jaxx.runtime.swing.nav.NavDataProvider;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -40,7 +40,7 @@
* @author sletellier <letellier(a)codelutin.com>
* @since 2.1
*/
-public class NavDemoDataProvider implements DataProvider {
+public class NavDemoDataProvider implements NavDataProvider {
/** Logger */
static private final Log log = LogFactory.getLog(NavDemoDataProvider.class);
Modified: 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 2010-06-30 16:48:34 UTC (rev 2013)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/ActorsTreeNodeLoador.java 2010-06-30 17:24:16 UTC (rev 2014)
@@ -27,8 +27,8 @@
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 jaxx.runtime.swing.nav.NavDataProvider;
+import jaxx.runtime.swing.nav.tree.NavTreeNodeChildLoador;
import java.util.List;
@@ -36,7 +36,7 @@
* @author sletellier <letellier(a)codelutin.com>
* @since 2.1
*/
-public class ActorsTreeNodeLoador extends JaxxTreeNodeChildLoador<People, People, NavDemoTreeNode> {
+public class ActorsTreeNodeLoador extends NavTreeNodeChildLoador<People, People, NavDemoTreeNode> {
private static final long serialVersionUID = 1L;
@@ -47,7 +47,7 @@
@Override
public List<People> getData(Class<?> parentClass,
String moviesId,
- DataProvider dataProvider) throws Exception {
+ NavDataProvider dataProvider) throws Exception {
// Get people for parentId
NavDemoDataProvider provider = (NavDemoDataProvider) dataProvider;
@@ -65,7 +65,7 @@
@SuppressWarnings({"unchecked"})
@Override
- public NavDemoTreeNode createNode(People data, DataProvider dataProvider) {
+ public NavDemoTreeNode createNode(People data, NavDataProvider dataProvider) {
NavDemoTreeNode actorNode;
Modified: 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 2010-06-30 16:48:34 UTC (rev 2013)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/MoviesTreeNodeLoador.java 2010-06-30 17:24:16 UTC (rev 2014)
@@ -27,9 +27,9 @@
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 jaxx.runtime.swing.nav.NavDataProvider;
+import jaxx.runtime.swing.nav.NavHelper;
+import jaxx.runtime.swing.nav.tree.NavTreeNodeChildLoador;
import java.util.List;
@@ -39,7 +39,7 @@
* @author sletellier <letellier(a)codelutin.com>
* @since 2.1
*/
-public class MoviesTreeNodeLoador extends JaxxTreeNodeChildLoador<Movie, Movie, NavDemoTreeNode> {
+public class MoviesTreeNodeLoador extends NavTreeNodeChildLoador<Movie, Movie, NavDemoTreeNode> {
private static final long serialVersionUID = 1L;
@@ -57,7 +57,7 @@
@Override
public List<Movie> getData(Class<?> parentClass,
String parentId,
- DataProvider dataProvider) throws Exception {
+ NavDataProvider dataProvider) throws Exception {
NavDemoDataProvider provider = (NavDemoDataProvider) dataProvider;
@@ -67,7 +67,7 @@
@SuppressWarnings({"unchecked"})
@Override
- public NavDemoTreeNode createNode(Movie data, DataProvider dataProvider) {
+ public NavDemoTreeNode createNode(Movie data, NavDataProvider dataProvider) {
NavDemoTreeNode moviesNode;
NavDemoTreeNode actorsCategoryNode;
@@ -85,7 +85,7 @@
String.class,
n_(NavDemoTreeHelper.ACTORS_CATEGORY_NODE),
null,
- JaxxNavHelper.getChildLoador(ActorsTreeNodeLoador.class)
+ NavHelper.getChildLoador(ActorsTreeNodeLoador.class)
);
// Add actors nodes to movies node
Modified: 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/NavDemoTreeCellRenderer.java 2010-06-30 16:48:34 UTC (rev 2013)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/NavDemoTreeCellRenderer.java 2010-06-30 17:24:16 UTC (rev 2014)
@@ -30,7 +30,7 @@
import jaxx.demo.entities.People;
import jaxx.runtime.decorator.Decorator;
import jaxx.runtime.decorator.DecoratorProvider;
-import jaxx.runtime.swing.nav.tree.AbstractJaxxTreeCellRenderer;
+import jaxx.runtime.swing.nav.tree.AbstractNavTreeCellRenderer;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -42,7 +42,7 @@
* @author sletellier <letellier(a)codelutin.com>
* @since 2.1
*/
-public class NavDemoTreeCellRenderer extends AbstractJaxxTreeCellRenderer<DefaultTreeModel, NavDemoTreeNode> {
+public class NavDemoTreeCellRenderer extends AbstractNavTreeCellRenderer<DefaultTreeModel, NavDemoTreeNode> {
/** Logger */
protected static final Log log =
Modified: 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 2010-06-30 16:48:34 UTC (rev 2013)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/NavDemoTreeHelper.java 2010-06-30 17:24:16 UTC (rev 2014)
@@ -26,7 +26,7 @@
package jaxx.demo.component.jaxx.nav.tree;
import jaxx.demo.component.jaxx.nav.NavDemoDataProvider;
-import jaxx.runtime.swing.nav.tree.JaxxTreeHelper;
+import jaxx.runtime.swing.nav.tree.NavTreeHelper;
import javax.swing.tree.DefaultTreeModel;
@@ -36,7 +36,7 @@
* @author sletellier <letellier(a)codelutin.com>
* @since 2.1
*/
-public class NavDemoTreeHelper extends JaxxTreeHelper<NavDemoTreeNode> {
+public class NavDemoTreeHelper extends NavTreeHelper<NavDemoTreeNode> {
public static String MOVIES_CATEGORY_NODE = "movies";
Modified: 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/tree/NavDemoTreeNode.java 2010-06-30 16:48:34 UTC (rev 2013)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/NavDemoTreeNode.java 2010-06-30 17:24:16 UTC (rev 2014)
@@ -25,14 +25,14 @@
package jaxx.demo.component.jaxx.nav.tree;
-import jaxx.runtime.swing.nav.tree.JaxxTreeNode;
-import jaxx.runtime.swing.nav.tree.JaxxTreeNodeChildLoador;
+import jaxx.runtime.swing.nav.tree.NavTreeNode;
+import jaxx.runtime.swing.nav.tree.NavTreeNodeChildLoador;
/**
* @author sletellier <letellier(a)codelutin.com>
* @since 2.1
*/
-public class NavDemoTreeNode extends JaxxTreeNode<NavDemoTreeNode> {
+public class NavDemoTreeNode extends NavTreeNode<NavDemoTreeNode> {
private static final long serialVersionUID = 1L;
@@ -43,7 +43,7 @@
public NavDemoTreeNode(Class<?> internalClass,
String id,
String context,
- JaxxTreeNodeChildLoador<?, ?, NavDemoTreeNode> loador) {
+ NavTreeNodeChildLoador<?, ?, NavDemoTreeNode> loador) {
super(internalClass, id, context, loador);
}
}
Modified: 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 2010-06-30 16:48:34 UTC (rev 2013)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/ActorsTreeTableNodeLoador.java 2010-06-30 17:24:16 UTC (rev 2014)
@@ -27,8 +27,8 @@
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 jaxx.runtime.swing.nav.NavDataProvider;
+import jaxx.runtime.swing.nav.treetable.NavTreeTableNodeChildLoador;
import java.util.List;
@@ -36,7 +36,7 @@
* @author sletellier <letellier(a)codelutin.com>
* @since 2.1
*/
-public class ActorsTreeTableNodeLoador extends JaxxTreeTableNodeChildLoador<People, People, NavDemoTreeTableNode> {
+public class ActorsTreeTableNodeLoador extends NavTreeTableNodeChildLoador<People, People, NavDemoTreeTableNode> {
private static final long serialVersionUID = 1L;
@@ -47,7 +47,7 @@
@Override
public List<People> getData(Class<?> parentClass,
String moviesId,
- DataProvider dataProvider) throws Exception {
+ NavDataProvider dataProvider) throws Exception {
// Get people for parentId
NavDemoDataProvider provider = (NavDemoDataProvider) dataProvider;
@@ -65,7 +65,7 @@
@SuppressWarnings({"unchecked"})
@Override
- public NavDemoTreeTableNode createNode(People data, DataProvider dataProvider) {
+ public NavDemoTreeTableNode createNode(People data, NavDataProvider dataProvider) {
NavDemoTreeTableNode actorNode;
Modified: 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 2010-06-30 16:48:34 UTC (rev 2013)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/MoviesTreeTableNodeLoador.java 2010-06-30 17:24:16 UTC (rev 2014)
@@ -27,9 +27,9 @@
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 jaxx.runtime.swing.nav.NavDataProvider;
+import jaxx.runtime.swing.nav.NavHelper;
+import jaxx.runtime.swing.nav.treetable.NavTreeTableNodeChildLoador;
import java.util.List;
@@ -39,7 +39,7 @@
* @author sletellier <letellier(a)codelutin.com>
* @since 2.1
*/
-public class MoviesTreeTableNodeLoador extends JaxxTreeTableNodeChildLoador<Movie, Movie, NavDemoTreeTableNode> {
+public class MoviesTreeTableNodeLoador extends NavTreeTableNodeChildLoador<Movie, Movie, NavDemoTreeTableNode> {
private static final long serialVersionUID = 1L;
@@ -57,7 +57,7 @@
@Override
public List<Movie> getData(Class<?> parentClass,
String parentId,
- DataProvider dataProvider) throws Exception {
+ NavDataProvider dataProvider) throws Exception {
NavDemoDataProvider provider = (NavDemoDataProvider) dataProvider;
@@ -67,7 +67,7 @@
@SuppressWarnings({"unchecked"})
@Override
- public NavDemoTreeTableNode createNode(Movie data, DataProvider dataProvider) {
+ public NavDemoTreeTableNode createNode(Movie data, NavDataProvider dataProvider) {
NavDemoTreeTableNode moviesNode;
NavDemoTreeTableNode actorsCategoryNode;
@@ -85,7 +85,7 @@
String.class,
n_(NavDemoTreeTableHelper.ACTORS_CATEGORY_NODE),
null,
- JaxxNavHelper.getChildLoador(ActorsTreeTableNodeLoador.class)
+ NavHelper.getChildLoador(ActorsTreeTableNodeLoador.class)
);
// Add actors nodes to movies node
Modified: 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 2010-06-30 16:48:34 UTC (rev 2013)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/NavDemoTreeTableHelper.java 2010-06-30 17:24:16 UTC (rev 2014)
@@ -26,8 +26,8 @@
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 jaxx.runtime.swing.nav.treetable.NavTreeTableHelper;
+import jaxx.runtime.swing.nav.treetable.NavTreeTableModel;
import static org.nuiton.i18n.I18n.n_;
@@ -35,7 +35,7 @@
* @author sletellier <letellier(a)codelutin.com>
* @since 2.1
*/
-public class NavDemoTreeTableHelper extends JaxxTreeTableHelper<NavDemoTreeTableNode> {
+public class NavDemoTreeTableHelper extends NavTreeTableHelper<NavDemoTreeTableNode> {
public static String MOVIES_CATEGORY_NODE = "movies";
@@ -52,7 +52,7 @@
@SuppressWarnings({"unchecked"})
- public JaxxTreeTableModel createModel() {
+ public NavTreeTableModel createModel() {
// Create root static node
NavDemoTreeTableNode root = new NavDemoTreeTableNode(
@@ -84,7 +84,7 @@
// Create model
NavDemoTreeTableModel delegate = new NavDemoTreeTableModel(getDataProvider());
- JaxxTreeTableModel model = createModel(root, delegate);
+ NavTreeTableModel model = createModel(root, delegate);
// Populate childs nodes
root.populateChilds(getBridge(), getDataProvider());
Modified: 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/NavDemoTreeTableModel.java 2010-06-30 16:48:34 UTC (rev 2013)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/NavDemoTreeTableModel.java 2010-06-30 17:24:16 UTC (rev 2014)
@@ -27,8 +27,8 @@
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 jaxx.runtime.swing.nav.NavNode;
+import jaxx.runtime.swing.nav.treetable.NavTreeTableModel;
import static org.nuiton.i18n.I18n._;
@@ -36,7 +36,7 @@
* @author sletellier <letellier(a)codelutin.com>
* @since 2.1
*/
-public class NavDemoTreeTableModel extends JaxxTreeTableModel.MyDefaultTreeTableModel {
+public class NavDemoTreeTableModel extends NavTreeTableModel.MyDefaultTreeTableModel {
protected NavDemoDataProvider dataProvider;
@@ -46,7 +46,7 @@
@Override
public Object getValueAt(Object o, int i) {
- JaxxNode node = (JaxxNode)o;
+ NavNode node = (NavNode)o;
// Get node type
Class<?> editType = node.getInternalClass();
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/NavDemoTreeTableNode.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/NavDemoTreeTableNode.java 2010-06-30 16:48:34 UTC (rev 2013)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/NavDemoTreeTableNode.java 2010-06-30 17:24:16 UTC (rev 2014)
@@ -24,14 +24,14 @@
*/
package jaxx.demo.component.jaxx.nav.treetable;
-import jaxx.runtime.swing.nav.treetable.JaxxTreeTableNode;
-import jaxx.runtime.swing.nav.treetable.JaxxTreeTableNodeChildLoador;
+import jaxx.runtime.swing.nav.treetable.NavTreeTableNode;
+import jaxx.runtime.swing.nav.treetable.NavTreeTableNodeChildLoador;
/**
* @author sletellier <letellier(a)codelutin.com>
* @since 2.1
*/
-public class NavDemoTreeTableNode extends JaxxTreeTableNode<NavDemoTreeTableNode> {
+public class NavDemoTreeTableNode extends NavTreeTableNode<NavDemoTreeTableNode> {
private static final long serialVersionUID = 1L;
protected NavDemoTreeTableNode(String id) {
@@ -41,7 +41,7 @@
public NavDemoTreeTableNode(Class<?> internalClass,
String id,
String context,
- JaxxTreeTableNodeChildLoador<?, ?, NavDemoTreeTableNode> childLoador) {
+ NavTreeTableNodeChildLoador<?, ?, 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-30 16:48:34 UTC (rev 2013)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoCellRenderer.java 2010-06-30 17:24:16 UTC (rev 2014)
@@ -26,7 +26,7 @@
package jaxx.demo.tree;
import jaxx.demo.component.jaxx.nav.NavDemoDataProvider;
-import jaxx.runtime.swing.nav.tree.AbstractJaxxTreeCellRenderer;
+import jaxx.runtime.swing.nav.tree.AbstractNavTreeCellRenderer;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -40,7 +40,7 @@
* @author sletellier <letellier(a)codelutin.com>
* @since 2.1
*/
-public class DemoCellRenderer extends AbstractJaxxTreeCellRenderer<DefaultTreeModel, DemoNode> {
+public class DemoCellRenderer extends AbstractNavTreeCellRenderer<DefaultTreeModel, DemoNode> {
/** Logger */
protected static final Log log =
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoDataProvider.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoDataProvider.java 2010-06-30 16:48:34 UTC (rev 2013)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoDataProvider.java 2010-06-30 17:24:16 UTC (rev 2014)
@@ -30,7 +30,7 @@
import jaxx.demo.component.jaxx.editor.ComboEditorDemo;
import jaxx.demo.component.jaxx.editor.I18nEditorDemo;
import jaxx.demo.component.jaxx.editor.NumberEditorDemo;
-import jaxx.demo.component.jaxx.nav.JaxxNavDemo;
+import jaxx.demo.component.jaxx.nav.NavDemo;
import jaxx.demo.component.swing.HidorButtonDemo;
import jaxx.demo.component.swing.JButtonDemo;
import jaxx.demo.component.swing.JCheckBoxDemo;
@@ -56,7 +56,7 @@
import jaxx.demo.fun.CalculatorDemo;
import jaxx.demo.fun.CounterDemo;
import jaxx.demo.fun.LabelStyleDemo;
-import jaxx.runtime.swing.nav.DataProvider;
+import jaxx.runtime.swing.nav.NavDataProvider;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -73,7 +73,7 @@
* @author tchemit <chemit(a)codelutin.com>
* @since 2.1
*/
-public class DemoDataProvider implements DataProvider {
+public class DemoDataProvider implements NavDataProvider {
/** Logger */
static private final Log log = LogFactory.getLog(DemoDataProvider.class);
@@ -152,7 +152,7 @@
I18nEditorDemo.class
);
addMapping(n_("jaxxdemo.tree.component.jaxx.tree"),
- JaxxNavDemo.class
+ NavDemo.class
);
addMapping(n_("jaxxdemo.tree.feature"),
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoNode.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoNode.java 2010-06-30 16:48:34 UTC (rev 2013)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoNode.java 2010-06-30 17:24:16 UTC (rev 2014)
@@ -25,7 +25,7 @@
package jaxx.demo.tree;
-import jaxx.runtime.swing.nav.tree.JaxxTreeNode;
+import jaxx.runtime.swing.nav.tree.NavTreeNode;
/**
* Basic node of the demo.
@@ -33,7 +33,7 @@
* @author tchemit <chemit(a)codelutin.com>
* @since 2.1
*/
-public class DemoNode extends JaxxTreeNode<DemoNode> {
+public class DemoNode extends NavTreeNode<DemoNode> {
private static final long serialVersionUID = 1L;
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoNodeLoador.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoNodeLoador.java 2010-06-30 16:48:34 UTC (rev 2013)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoNodeLoador.java 2010-06-30 17:24:16 UTC (rev 2014)
@@ -25,9 +25,9 @@
package jaxx.demo.tree;
-import jaxx.runtime.swing.nav.tree.JaxxTreeNodeChildLoador;
-import jaxx.runtime.swing.nav.DataProvider;
-import jaxx.runtime.swing.nav.JaxxNodeChildLoador;
+import jaxx.runtime.swing.nav.tree.NavTreeNodeChildLoador;
+import jaxx.runtime.swing.nav.NavDataProvider;
+import jaxx.runtime.swing.nav.NavNodeChildLoador;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -37,12 +37,12 @@
* @author tchemit <tchemit(a)codelutin.com>
* @since 2.1
*/
-public class DemoNodeLoador extends JaxxTreeNodeChildLoador<Object,Object, DemoNode> {
+public class DemoNodeLoador extends NavTreeNodeChildLoador<Object,Object, DemoNode> {
private static final long serialVersionUID = 1L;
/** Logger */
- static private final Log log = LogFactory.getLog(JaxxNodeChildLoador.class);
+ static private final Log log = LogFactory.getLog(NavNodeChildLoador.class);
public DemoNodeLoador() {
super(Object.class);
@@ -51,7 +51,7 @@
@Override
public List<Object> getData(Class<?> parentClass,
String packageName,
- DataProvider dataProvider) throws Exception {
+ NavDataProvider dataProvider) throws Exception {
DemoDataProvider provider = (DemoDataProvider) dataProvider;
List<Object> implementations = provider.getImplementations(packageName);
@@ -59,7 +59,7 @@
}
@Override
- public DemoNode createNode(Object data, DataProvider dataProvider) {
+ public DemoNode createNode(Object data, NavDataProvider dataProvider) {
if (log.isDebugEnabled()) {
log.debug("Creating node for object : " + data);
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-30 16:48:34 UTC (rev 2013)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoTreeHelper.java 2010-06-30 17:24:16 UTC (rev 2014)
@@ -25,7 +25,7 @@
package jaxx.demo.tree;
-import jaxx.runtime.swing.nav.tree.JaxxTreeHelper;
+import jaxx.runtime.swing.nav.tree.NavTreeHelper;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeModel;
@@ -34,7 +34,7 @@
* @author tchemit <tchemit(a)codelutin.com>
* @since 2.1
*/
-public class DemoTreeHelper extends JaxxTreeHelper<DemoNode> {
+public class DemoTreeHelper extends NavTreeHelper<DemoNode> {
public DemoTreeHelper(DemoDataProvider provider) {
setDataProvider(provider);
Deleted: 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-30 16:48:34 UTC (rev 2013)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/DataProvider.java 2010-06-30 17:24:16 UTC (rev 2014)
@@ -1,46 +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.AbstractJaxxTreeCellRenderer;
-
-/**
- * Contract of provider of data.
- * <p/>
- * This object is used by {@link JaxxNodeChildLoador} to populate childs of node
- * and by {@link AbstractJaxxTreeCellRenderer} to render nodes.
- *
- * @author tchemit <chemit(a)codelutin.com>
- * @since 2.1
- */
-public interface DataProvider {
-
- /**
- * @return {@code true} is provider is enabled and can provide datas,
- * {@code false} otherwise.
- */
- boolean isEnabled();
-
-}
Deleted: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxNavBridge.java
===================================================================
--- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxNavBridge.java 2010-06-30 16:48:34 UTC (rev 2013)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxNavBridge.java 2010-06-30 17:24:16 UTC (rev 2014)
@@ -1,159 +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 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(a)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);
-}
Deleted: 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-30 16:48:34 UTC (rev 2013)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxNavHelper.java 2010-06-30 17:24:16 UTC (rev 2014)
@@ -1,795 +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.AbstractJaxxTreeCellRenderer;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-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.TreePath;
-import javax.swing.tree.TreeSelectionModel;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-/**
- * 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 #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(JaxxNode,Object...)} given a
- * root node.
- * <p/>
- * To obtain the model, use method {@link #getModel()}.
- * <p/>
- * <b>Note:</b> The helper internal model can be different from the tree model,
- * but must be the <b>lowest</b> model, other models must listen nicely this
- * model to obtain model modification and selection notifications.
- * <h3>Internal tree</h3>
- * As said before, a helper matches exactly one tree.
- * <p/>
- * To register the tree, use method {@link #setUI(Object, boolean, TreeSelectionListener)}.
- * <p/>
- * To obtain the tree, use method {@link #getUI()}.
- * <h3>Internal data provider</h3>
- * To populate childs nodes and render nodes, we use a {@link DataProvider}.
- * <p/>
- * To register the data provider, use method {@link #setDataProvider(DataProvider)}.
- * <p/>
- * To obtain the data provider, use method {@link #getDataProvider()}.
- * <h2>Internal listeners</h2>
- * Several listeners are used to manage the auto-loading of nodes in model :
- * <h3>{@link #expandListener}</h3>
- * This listener will load node's childs before node expands if the node is not loaded.
- * <p/>
- * 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(JaxxNode , Object[], boolean)}.
- * <h3>{@link #selectionListener}</h3>
- * To listen modification of the selection, it will mainly expand paths if required.
- * <p/>
- * This is a requirement, since childs of a node should NOT be loaded, so when
- * selects a node, always check the path from root to selected node are all fully
- * loaded.
- * <h2>Model methods</h2>
- * The helper offers some methods to modify and query the internal tree model.
- * <h3>Model modification</h3>
- * <ul>
- * <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(JaxxNode)}</li>
- * <li>{@link #selectNode(String...)}</li>
- * <li>{@link #selectParentNode()}</li>
- * </ul>
- * <h3>Model query</h3>
- * <ul>
- * <li>{@link #findNode(JaxxNode , String...)}</li>
- * </ul>
- * <h3>Child loadors factory</h3>
- * 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(a)codelutin.com>
- * @param <U> Type of ui to bridge
- * @see JaxxNode
- * @see JaxxNodeChildLoador
- * @see AbstractJaxxTreeCellRenderer
- * @since 2.1
- */
-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);
-
- /**
- * 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).
- * <p/>
- * If you want to create a new model, just creates the good root node and
- * push it in this model.
- * <p/>
- * For example, if you wrap the shared model with a filter model... Anyway, all
- * listeners of this helper apply always of THIs model.
- */
- private final B bridge;
-
- /** the associated ui component */
- private U ui;
-
- /** The shared data provider used to obtain datas to populate nodes and render them. */
- protected DataProvider dataProvider;
-
- /**
- * 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 JaxxNode#isLoaded()} is sets to {@code false}).
- */
- protected TreeWillExpandListener expandListener;
-
- /**
- * pour ouvrir les fils d'un noeud que l'on vient de sélectionner pour
- * éviter d'avoir à faire des doubles clics.
- */
- protected TreeSelectionListener selectionListener;
-
- /**
- * pour recharger le rendu des noeuds (et charger les fils si nécessaires)
- * lors d'une modification dans le modèle de l'arbre.
- */
- protected TreeModelListener treeModelListener;
-
- /** Cache of child loadors. */
- protected static Set<? super JaxxNodeChildLoador<?, ?, ?, ?, ?>> childLoadors;
-
- protected static Set<? super JaxxNodeChildLoador<?, ?, ?, ?, ?>> getChildLoadors() {
- if (childLoadors == null) {
- childLoadors = new HashSet<JaxxNodeChildLoador<?, ?, ?, ?, ?>>();
- }
- return childLoadors;
- }
-
- /**
- * Obtains the {@link JaxxNodeChildLoador} of the given {@code type} from
- * internal cache.
- * <p/>
- * <b>Note:</b> The loador will be instanciated if not found, and push in cache.
- *
- * @param type the type of loador to get
- * @param <L> the type of loador to get
- * @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;
- for (Object loador : cache) {
- if (type.equals(loador.getClass())) {
- result = (JaxxNodeChildLoador<?, ?, ?, ?, ?>) loador;
- break;
- }
- }
- if (result == null) {
- // add it in cache
- try {
- result = type.newInstance();
- cache.add(result);
- if (log.isDebugEnabled()) {
- log.debug("Add " + result + " in loadors cache (new size:" + cache.size() + ").");
- }
- } catch (Exception e) {
- throw new IllegalArgumentException("Could not instanciate loador [" + type.getName() + "]", e);
- }
- }
- return (L) result;
- }
-
- public JaxxNavHelper(B bridge) {
- this.bridge = bridge;
-
- selectionListener = new TreeSelectionListener() {
-
- @Override
- public void valueChanged(TreeSelectionEvent e) {
- if (!checkModel()) {
- return;
- }
-
- // Hack, because event.getSource for TreeTable doesnt return selectionModel
- TreeSelectionModel source = getSelectionModel();
-
- if (source.isSelectionEmpty()) {
-
- // empty selection
- if (log.isDebugEnabled()) {
- log.debug("Selection is empty.");
- }
- return;
- }
-
- boolean debugEnabled = log.isDebugEnabled();
- boolean traceEnabled = log.isTraceEnabled();
- for (TreePath path : e.getPaths()) {
-
- N node = getNode(path);
- if (node == null) {
-
- // pas de noeud selectionne
- if (debugEnabled) {
- log.debug("Skip for null node.");
- }
- continue;
- }
-
- boolean isAdded = e.isAddedPath(path);
-
- TreePath pathToExpand = new TreePath(JaxxNavHelper.this.bridge.getPathToRoot(node));
- boolean pathExpanded = isExpanded(pathToExpand);
-
- if (traceEnabled || isAdded && debugEnabled) {
- log.debug("==== Node selection ====================================");
- log.debug("node ? " + node);
- log.debug("is added ? " + isAdded);
- log.debug("is path expanded ? " + pathExpanded);
- log.debug("is node static ? " + node.isStaticNode());
- log.debug("is node loaded ? " + node.isLoaded());
- log.debug("is node leaf ? " + node.isLeaf());
- log.debug("node nb childs ? " + node.getChildCount());
- }
-
- if (isAdded && !pathExpanded) {
-
- // ask to expand path
- log.info("expand node [" + pathToExpand + "]");
- expandPath(pathToExpand);
- }
- }
- }
- };
- expandListener = new TreeWillExpandListener() {
- @Override
- public void treeWillExpand(TreeExpansionEvent event) {
-
- if (!checkModel()) {
- // no model
- return;
- }
-
- N source = getNode(event.getPath());
-
- if (source.isLoaded()) {
-
- // node is already loaded, nothing to do
- return;
- }
-
- if (log.isDebugEnabled()) {
- log.debug("will load childs of node [" + source + "]");
- }
- // populate childs of node
- source.populateChilds(getBridge(), getDataProvider());
- }
-
- @Override
- public void treeWillCollapse(TreeExpansionEvent event) {
- }
- };
-
- treeModelListener = new TreeModelListener() {
- @Override
- public void treeNodesInserted(TreeModelEvent e) {
- if (!checkModel()) {
- // no model
- return;
- }
- N source = getNode(e.getTreePath());
- Object[] children = e.getChildren();
- if (log.isDebugEnabled()) {
- log.debug(getMessage("inserted ", source, children));
- }
-
- // ask to populate children nodes
- populateNode(null, children, false);
- }
-
- @SuppressWarnings({"unchecked"})
- @Override
- public void treeNodesRemoved(TreeModelEvent e) {
- if (!checkModel()) {
- // no model
- return;
- }
- N source = getNode(e.getTreePath());
- Object[] children = e.getChildren();
- if (log.isDebugEnabled()) {
- log.debug(getMessage("removed ", source, children));
- }
-
- // Invalidates nodes in renderer cache (if any)
- AbstractJaxxTreeCellRenderer<M, N> renderer = getTreeCellRenderer();
- if (children != null && renderer != null) {
- for (Object child : children) {
- renderer.invalidateCache((N) child);
- }
- }
- }
-
- @Override
- public void treeNodesChanged(TreeModelEvent e) {
- if (!checkModel()) {
- // no model
- return;
- }
-
- N source = getNode(e.getTreePath());
- Object[] children = e.getChildren();
- if (log.isDebugEnabled()) {
- log.debug(getMessage("changed ", source, children));
- }
-
- // ask to populate modified child nodes
- populateNode(null, children, false);
- }
-
- @Override
- public void treeStructureChanged(TreeModelEvent e) {
- if (!checkModel()) {
- // no model
- return;
- }
- N source = getNode(e.getTreePath());
- Object[] children = e.getChildren();
- if (log.isDebugEnabled()) {
- log.debug(getMessage("structure changed", source, children));
- }
-
- // ask to populate structure modified node and nodes recursively
- populateNode(source, children, true);
- }
-
- protected String getMessage(String action, N source, Object[] children) {
- StringBuilder sb = new StringBuilder();
- sb.append("==== Nodes ");
- sb.append(action);
- sb.append(" =================");
- sb.append("\nsource : ").append(source);
- sb.append("\nnb nodes : ");
- sb.append(children == null ? 0 : children.length);
- if (children != null) {
- int i = 0;
- for (Object child : children) {
- sb.append("\n [");
- sb.append(i++);
- sb.append("] - ");
- sb.append(child);
- }
- }
- return sb.toString();
- }
- };
- }
-
- /**
- * Obtains the attached data provider used to populate and render nodes.
- *
- * @return the attached data provider
- */
- protected DataProvider getDataProvider() {
- return dataProvider;
- }
-
- /**
- * Obtains the jaxx delegate tree model
- *
- * @return the internal tree model or {@code null} if none was created.
- */
- public M getModel() {
- return bridge.getModel();
- }
-
- /**
- * Obtains the jaxx delegate tree model
- *
- * @return the internal tree model or {@code null} if none was created.
- */
- protected B getBridge() {
- return bridge;
- }
-
- /**
- * Obtains the ui associated with model in helper.
- *
- * @return the ui (or {@code null} if no ui attached)
- */
- public U getUI() {
- return ui;
- }
-
- public N getRootNode() {
- if (!checkModel()) {
- return null;
- }
- return bridge.getRoot();
- }
-
- /**
- * 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}.
- */
- public abstract 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.
- */
- public abstract N getSelectedNode();
-
- /**
- * Obtains the path of ids fro the root node to the selected node on the
- * registred tree.
- *
- * @return the array of ids from root node to selected node.
- */
- public String[] getSelectedIds() {
- List<String> result = new ArrayList<String>();
- N selectedNode = getSelectedNode();
- while (selectedNode != null && !selectedNode.isRoot()) {
-
- result.add(selectedNode.getId());
- selectedNode = selectedNode.getParent();
- }
- Collections.reverse(result);
- return result.toArray(new String[result.size()]);
- }
-
- /**
- * Registers the given {@code tree} 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 tree the tree to register
- * @param addExpandTreeListener a flag to add expand listener
- * @param listener the optional selection listener to add
- */
- @SuppressWarnings({"unchecked"})
- public abstract void setUI(U tree,
- boolean addExpandTreeListener,
- TreeSelectionListener listener);
-
- /**
- * 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<M, N> renderer = getTreeCellRenderer();
- if (renderer != null) {
-
- // dispatch provider to renderer
- renderer.setDataProvider(dataProvider);
- }
- }
-
- /**
- * Inserts the given node to the given {@code parentNode}.
- * <p/>
- * The node will be added to his parent, then creation listeners will be
- * fired.
- *
- * @param parentNode the parent node where to insert the new node *
- * @param newNode the node to insert
- */
- public void insertNode(N parentNode, N newNode) {
- parentNode.add(newNode);
- bridge.notifyNodeInserted(newNode);
- }
-
- /**
- * Removes the given {@code node} from the registred tree model and returns
- * his parent.
- *
- * @param node the node to remove
- * @return the parent node of the removed node.
- */
- public N removeNode(N node) {
- N parentNode = node.getParent();
- bridge.removeNodeFromParent(node);
- return parentNode;
- }
-
- /**
- * Moves the given {@code node} to the new {@code position}.
- *
- * @param parentNode the parent node
- * @param node the node to move
- * @param position the new position of the node
- */
- public void moveNode(N parentNode, N node, int position) {
- parentNode.remove(node);
- parentNode.insert(node, position);
- bridge.nodeStructureChanged(parentNode);
- }
-
- /**
- * Refreshs the given {@code node}.
- * <p/>
- * If flag {@code deep} is set to {@code true}, then it will refresh
- * recursively children nodes.
- * <p/>
- * <b>Note:</b>As a side-effect, evvery node involved will become
- * {@code dirty}.
- *
- * @param node the node to refresh
- * @param deep un flag pour activer la repainte de la descendance du
- * noeud
- * @see JaxxNode#isDirty()
- */
- @SuppressWarnings({"unchecked"})
- public void refreshNode(N node, boolean deep) {
- if (log.isDebugEnabled()) {
- log.debug("Will refresh (deep ? " + deep + ") node " + node);
- }
- bridge.nodeChanged(node);
- if (deep) {
- // repaint childs nodes
- Enumeration<N> e = node.children();
- while (e.hasMoreElements()) {
- N child = e.nextElement();
- refreshNode(child, true);
- }
- }
- }
-
- /**
- * To load all nodes of a model.
- *
- * @param node the root node to load
- * @param dataProvider the data provider used to populate nodes
- */
- @SuppressWarnings({"unchecked"})
- public void loadAllNodes(N node, DataProvider dataProvider) {
- if (!checkModel()) {
- return;
- }
- if (!node.isLoaded()) {
- node.populateChilds(getBridge(), dataProvider);
- Enumeration<? extends JaxxNode<?, ?>> enumeration = node.children();
- while (enumeration.hasMoreElements()) {
- N jaxxNode = (N) enumeration.nextElement();
- loadAllNodes(jaxxNode, dataProvider);
- }
- }
- }
-
- /**
- * Selects the parent of the currently selected node.
- * <p/>
- * <b>Note:</> If selection is empty, then throws a NPE.
- *
- * @throws NullPointerException if selection is empty
- */
- public void selectParentNode() throws NullPointerException {
-
- N node = getSelectedNode();
-
- if (node == null) {
- // pas de noeud selectionne
- throw new NullPointerException("no selected node in context");
- }
- node = node.getParent();
-
- selectNode(node);
- }
-
- /**
- * Selects the given {@code node} in the registred tree.
- *
- * @param node the node to select
- */
- public void selectNode(N node) {
- if (!checkModel()) {
-
- // no model
- return;
- }
- if (log.isDebugEnabled()) {
- log.debug("try to select node [" + node + "]");
- }
- TreePath path = new TreePath(bridge.getPathToRoot(node));
-
- setSelectionPath(path);
- scrollPathToVisible(path);
- }
-
- /**
- * Selects the node described by his given {@code path} of ids.
- *
- * @param path the absolute path of ids from root node to node to select.
- */
- public void selectNode(String... path) {
- if (!checkModel()) {
-
- // no model
- return;
- }
- if (log.isDebugEnabled()) {
- log.debug("try to select node from ids " + Arrays.toString(path));
- }
- N root = bridge.getRoot();
- N node = findNode(root, path);
- if (log.isDebugEnabled()) {
- log.debug("selected node [" + node + "]");
- }
- if (node != null) {
- selectNode(node);
- }
- }
-
- /**
- * Finds a node from the given root {@code node}, applying the path given
- * by {@code ids}.
- *
- * @param node the starting node
- * @param ids the path of ids to apply on the node.
- * @return the find node or {@code null} if no node matchs.
- */
- public N findNode(N node, String... ids) {
- if (!checkModel()) {
-
- // no model
- return null;
- }
- N result = null;
- for (String id : ids) {
-
- result = node.findNodeById(id, getBridge(), getDataProvider());
-
- if (result == null) {
-
- // un des noeud n'a pas ete trouve, on sort
- break;
- }
- node = result;
- }
- return result;
- }
-
- /**
- * Checks if internal model was created.
- *
- * @return {@code true} if model was created, {@code false} otherwise.
- */
- protected boolean checkModel() {
- if (getModel() == null) {
-
- // no model set,
- log.warn("No model set in " + this);
- return false;
- }
- // model is set
- return true;
- }
-
- /**
- * Populates nodes.
- * <p/>
- * If {@code node} is not {@code null}, then populate it.
- * <p/>
- * If {@code children} is not {@code null}, then populate them, moreover
- * if {@code recurse} is set to {@code true} then do a recurse refresh on
- * children.
- *
- * @param node the parent node to populate (optional)
- * @param children the child nodes to populate (optional)
- * @param recurse flag sets to {@code true} if should do recurse refresh on
- * given {@code children} nodes.
- */
- @SuppressWarnings({"unchecked"})
- protected void populateNode(N node,
- Object[] children,
- boolean recurse) {
- DataProvider dataProvider = getDataProvider();
- if (node != null) {
- if (log.isDebugEnabled()) {
- log.debug("Will populate node : " + node);
- }
- node.populateNode(getBridge(), dataProvider, false);
- }
- if (children != null) {
- for (Object o : children) {
- N child = (N) o;
- if (log.isDebugEnabled()) {
- log.debug("Will populate child node : " + child);
- }
- child.populateNode(getBridge(), dataProvider, recurse);
- }
- }
- }
-
- /**
- * Convinient method to objet the casted node of a {@link TreePath}.
- *
- * @param path the path contaning the node.
- * @return the casted node from the path.
- */
- @SuppressWarnings({"unchecked"})
- protected N getNode(TreePath path) {
- N result = (N) path.getLastPathComponent();
- return result;
- }
-
- public void setUI(U ui) {
- this.ui = ui;
- }
-}
Deleted: 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-30 16:48:34 UTC (rev 2013)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxNode.java 2010-06-30 17:24:16 UTC (rev 2014)
@@ -1,207 +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.AbstractJaxxTreeCellRenderer;
-
-import javax.swing.tree.TreeNode;
-import java.io.Serializable;
-
-/**
- * Definition of a node with a optional {@code childLoador} to build childs of
- * node.
- * <p/>
- * A node is identified by an {@link #getId} of an associated data of type
- * {@link #getInternalClass}.
- * <p/>
- * <b>Note:</b>
- * <p><i> While using a {@code childLoador}, we can not know before node
- * was loaded the exact count of his childs. As a matter of facts, real leaf
- * nodes appears at the beginning in ui as a not leaf (there is a root handler).
- * When node was loaded, a leaf node will be then displayed as required.
- * </i></p>
- * <p/>
- * <h2>Why JaxxNode is generic ?</h2>
- * In a project, you should implements your own Node extending with one like this :
- * <pre>
- * class MyNode extends JaxxNode<MyNode> { ... }
- * </pre>
- * While in this class, you overrides every method with a node return type,
- * co-variance you'll be able to use this code :
- * <pre>
- * MyNode parentNode = new MyNode();
- * MyNode node = parentNode.getFirstNode();
- * </pre>
- * So for final application this generic type avoid any cast for your own node
- * type, this is quite convinient.
- * <p/>
- * Even if in your project, you wants to have a heriarchy of nodes, this will
- * still works (if you use a genercic type on your abstract nodes).
- * <h2>Internal states</h2>
- * <ul>
- * <li><b>internalClass</b> : the type of data associated with the node</li>
- * <li><b>context</b> : an optinal context to distinguish different types of
- * node with same {@code internalclass}</li>
- * <li><b>id</b> : id of the data associated with the node</li>
- * <li><b>dirty</b> : flag sets to {@code true} when node render MUST be recomputed</li>
- * <li><b>loaded</b> : flag sets to {@code true} when node was loaded</li>
- * <li><b>childLoador</b> : optional loador of childs</li>
- * </ul>
- * <h2>Static nodes</h2>
- * Some nodes do not need auto-loading, we call them {@code static nodes}.
- * The method {@link #isStaticNode()} gives this state.
- * <p/>
- * <b>Note:</b> A static node has no {@code childLoador}.
- * <h2>Node loading</h2>
- * 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(JaxxNavBridge , DataProvider, boolean)}
- * and {@link #populateChilds(JaxxNavBridge, DataProvider)} methods.
- * <h2>Node rendering</h2
- * 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}.
- *
- * @author tchemit <chemit(a)codelutin.com>
- * @since 2.1
- */
-public interface JaxxNode<M, N extends JaxxNode<M, N>> extends Cloneable, TreeNode, Serializable {
-
- String getId();
-
- String getContext();
-
- Class<?> getInternalClass();
-
- boolean isLoaded();
-
- boolean isDirty();
-
- /**
- * Convinient method to known if the node is a {@code String} typed.
- *
- * @return {@code true} if the type of node if
- */
- boolean isStringNode();
-
- /**
- * To know if the node is static.
- * <p/>
- * A {@code static} node has no {@code childLoador}.
- *
- * @return {@code true} when the node is static : says, the node has
- * no {@code childLoador}.
- */
- boolean isStaticNode();
-
- /**
- * Gets the first node form this one to the root which has a none
- * {@code String} type.
- *
- * @return the first concrete node type
- */
- N getContainerNode();
-
- /**
- * Given an {@code id}, obtain the child with matching id.
- * <p/>
- * If node is NOT {@code loaded}, then first loads it (method
- * {@link #populateChilds(JaxxNavBridge , DataProvider)}) then do search
- * on direct childs of the node.
- *
- * @param id the id of the researched node
- * @param bridge model owner of nodes
- * @param provider data provider
- * @return the found node or {@code null} if not found
- */
- N findNodeById(String id,
- JaxxNavBridge<M,N> bridge,
- DataProvider provider);
-
- /**
- * Changes the {@link #isDirty} state.
- * <p/>
- * As a side effect, when a renderer will use this node, it will force to
- * reload the render from the {@link DataProvider}.
- *
- * @param dirty the new dirty value
- */
- void setDirty(boolean dirty);
-
- @Override
- boolean isLeaf();
-
- Object getUserObject();
-
- @Override
- String toString();
-
- //--------------------------------------------------------------------------
- //-- Populate methods
- //--------------------------------------------------------------------------
-
- /**
- * To populate the node. A side-effect of this method is to set {@code dirty}
- * the node (renderer will recompute the render of the node).
- * <p/>
- * If {@code populateChilds} is set to {@code true}, then also populate
- * childs of the node using the given {@code dataProvider}.
- *
- * @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(JaxxNavBridge<M,N> bridge,
- DataProvider provider,
- boolean populateChilds);
-
- /**
- * To populate childs of the node (only when a none static node).
- * A side-effect of this method is to set {@code loaded} of the node.
- * <p/>
- * For a static node, do nothing.
- *
- * @param bridge model owner of the node
- * @param provider data provider
- */
- void populateChilds(JaxxNavBridge<M,N> bridge, DataProvider provider);
-
- //--------------------------------------------------------------------------
- //-- Overrides to use generic type as return
- //--------------------------------------------------------------------------
-
- boolean isRoot();
-
- @Override
- N getParent();
-
- void add(N node);
-
- void remove(N node);
-
- void insert(N node, int position);
-}
Deleted: 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-30 16:48:34 UTC (rev 2013)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxNodeChildLoador.java 2010-06-30 17:24:16 UTC (rev 2014)
@@ -1,168 +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 org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import java.io.Serializable;
-import java.util.List;
-
-/**
- * Object to load childs of a node.
- * <p/>
- * It uses {@link DataProvider} in method
- * {@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
- * them reusable in other places than inside a {@link JaxxNode} to auto-load
- * childs.
- * <p/>
- * For example when you want to creat by hand a new node, always prefer to reuse
- * a such object rathen than duplicate same code in helper...
- *
- * @author tchemit <chemit(a)codelutin.com>
- * @param <T> type of data used to create nodes (can be just a String type to use only ids)
- * @param <O> type of data associated with nodes
- * @param <N> type of node to used (to make possible full co-variance and no cast in fal implementations).
- * @see JaxxNavHelper
- * @see JaxxNode
- * @since 2.1
- */
-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);
-
- /** Type of data of the node */
- protected final Class<O> beanType;
-
- protected JaxxNodeChildLoador(Class<O> beanType) {
- this.beanType = beanType;
- }
-
- /**
- * Obtain the list of data used to create nodes.
- * <p/>
- * If type {@code T} is {@code O}, we directly use the data associated with nodes.
- *
- * @param parentClass type of parent
- * @param parentId id of parent
- * @param dataProvider the data provider
- * @return the list of data
- * @throws Exception if any problem
- */
- public abstract List<T> getData(Class<?> parentClass,
- String parentId,
- DataProvider dataProvider) throws Exception;
-
- /**
- * Hook to create a child node given his {@code data}.
- *
- * @param data the data of the node to create
- * @param dataProvider the data provider
- * @return the created node
- */
- public abstract N createNode(T data, DataProvider dataProvider);
-
- /**
- * Returns the type of data associated with nodes to create.
- *
- * @return the type of data associated with created nodes.
- */
- public Class<O> getBeanType() {
- return beanType;
- }
-
- /**
- * Load childs of the given {@code parentnode}.
- *
- * @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(B bridge,
- N parentNode,
- DataProvider dataProvider) throws Exception {
-
- N containerNode = parentNode.getContainerNode();
-
- List<T> datas;
- if (containerNode == null) {
-
- // pas d'ancetre, il doit s'agir d'un premier noeud de données
- // depuis le noeud root
-
- // recuperation des objets fils (sans connaitre de parent)
- datas = getData(null, null, dataProvider);
-
- } else {
- if (log.isDebugEnabled()) {
- log.debug("search data for " + containerNode.getInternalClass() +
- " : " + containerNode.getId());
- }
-
- // recuperation des objets fils
- datas = getData(containerNode.getInternalClass(),
- containerNode.getId(),
- dataProvider);
- }
-
- // on charge les fils
- addChildNodes(parentNode, datas, dataProvider);
-
- // notifie le modele d'un ajout de noeuds
- 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(JaxxNavBridge , JaxxNode, DataProvider)}.
- *
- * @param parentNode the node where to insert
- * @param datas the data used to create node
- * @param dataProvider the data provider
- */
- protected void addChildNodes(N parentNode,
- List<T> datas,
- DataProvider dataProvider) {
-
- // creation des noeuds fils
- if (datas != null) {
- for (T o : datas) {
- if (log.isInfoEnabled()) {
- log.info("[" + parentNode + "] Will add child node for " + o);
- }
- N node = createNode(o, dataProvider);
- parentNode.add(node);
- }
- }
- }
-
-}
\ No newline at end of file
Copied: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/NavBridge.java (from rev 2012, trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxNavBridge.java)
===================================================================
--- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/NavBridge.java (rev 0)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/NavBridge.java 2010-06-30 17:24:16 UTC (rev 2014)
@@ -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 NavHelper} to hold model and ui.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @param <M> Type of model to bridge
+ * @param <N> Type of nodes of the model
+ * @since 2.1
+ */
+public interface NavBridge<M, N extends NavNode<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 AbstractNavTreeCellRenderer} renderer of the
+// * registred tree.
+// *
+// * @return the renderer of the registred tree or null if no tree was
+// * registred nor the renderer is a {@link AbstractNavTreeCellRenderer}.
+// */
+// AbstractNavTreeCellRenderer<M, N> getTreeCellRenderer();
+//
+// /**
+// * Obtains the selected node of the registred tree.
+// *
+// * @return the selected tree or {@code null} if no registred tree nor
+// * selection empty.
+// */
+// N getSelectedNode();
+
+ void setModel(M delegate);
+}
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/NavBridge.java
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Copied: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/NavDataProvider.java (from rev 2012, trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/DataProvider.java)
===================================================================
--- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/NavDataProvider.java (rev 0)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/NavDataProvider.java 2010-06-30 17:24:16 UTC (rev 2014)
@@ -0,0 +1,46 @@
+/*
+ * #%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.AbstractNavTreeCellRenderer;
+
+/**
+ * Contract of provider of data.
+ * <p/>
+ * This object is used by {@link NavNodeChildLoador} to populate childs of node
+ * and by {@link AbstractNavTreeCellRenderer} to render nodes.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 2.1
+ */
+public interface NavDataProvider {
+
+ /**
+ * @return {@code true} is provider is enabled and can provide datas,
+ * {@code false} otherwise.
+ */
+ boolean isEnabled();
+
+}
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/NavDataProvider.java
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Copied: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/NavHelper.java (from rev 2012, trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxNavHelper.java)
===================================================================
--- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/NavHelper.java (rev 0)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/NavHelper.java 2010-06-30 17:24:16 UTC (rev 2014)
@@ -0,0 +1,795 @@
+/*
+ * #%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.AbstractNavTreeCellRenderer;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+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.TreePath;
+import javax.swing.tree.TreeSelectionModel;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * 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 #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(NavNode ,Object...)} given a
+ * root node.
+ * <p/>
+ * To obtain the model, use method {@link #getModel()}.
+ * <p/>
+ * <b>Note:</b> The helper internal model can be different from the tree model,
+ * but must be the <b>lowest</b> model, other models must listen nicely this
+ * model to obtain model modification and selection notifications.
+ * <h3>Internal tree</h3>
+ * As said before, a helper matches exactly one tree.
+ * <p/>
+ * To register the tree, use method {@link #setUI(Object, boolean, TreeSelectionListener)}.
+ * <p/>
+ * To obtain the tree, use method {@link #getUI()}.
+ * <h3>Internal data provider</h3>
+ * To populate childs nodes and render nodes, we use a {@link NavDataProvider}.
+ * <p/>
+ * To register the data provider, use method {@link #setDataProvider(NavDataProvider)}.
+ * <p/>
+ * To obtain the data provider, use method {@link #getDataProvider()}.
+ * <h2>Internal listeners</h2>
+ * Several listeners are used to manage the auto-loading of nodes in model :
+ * <h3>{@link #expandListener}</h3>
+ * This listener will load node's childs before node expands if the node is not loaded.
+ * <p/>
+ * See the {@link NavNode#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(NavNode , Object[], boolean)}.
+ * <h3>{@link #selectionListener}</h3>
+ * To listen modification of the selection, it will mainly expand paths if required.
+ * <p/>
+ * This is a requirement, since childs of a node should NOT be loaded, so when
+ * selects a node, always check the path from root to selected node are all fully
+ * loaded.
+ * <h2>Model methods</h2>
+ * The helper offers some methods to modify and query the internal tree model.
+ * <h3>Model modification</h3>
+ * <ul>
+ * <li>{@link #createModel(NavNode ,Object...)}</li>
+ * <li>{@link #insertNode(NavNode , NavNode)}</li>
+ * <li>{@link #removeNode(NavNode)}</li>
+ * <li>{@link #moveNode(NavNode , NavNode , int)}</li>
+ * <li>{@link #refreshNode(NavNode , boolean)}</li>
+ * <li>{@link #loadAllNodes(NavNode , NavDataProvider)}</li>
+ * <p/>
+ * </ul>
+ * <h3>Model selection modification</h3>
+ * <ul>
+ * <li>{@link #selectNode(NavNode)}</li>
+ * <li>{@link #selectNode(String...)}</li>
+ * <li>{@link #selectParentNode()}</li>
+ * </ul>
+ * <h3>Model query</h3>
+ * <ul>
+ * <li>{@link #findNode(NavNode , String...)}</li>
+ * </ul>
+ * <h3>Child loadors factory</h3>
+ * The class offers a factory of {@link NavNodeChildLoador}, use the method
+ * {@link #getChildLoador(Class)} to obtain the correct child loador given his type.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @param <U> Type of ui to bridge
+ * @see NavNode
+ * @see NavNodeChildLoador
+ * @see AbstractNavTreeCellRenderer
+ * @since 2.1
+ */
+public abstract class NavHelper<M, U, B extends NavBridge<M, N>, N extends NavNode<M, N>> {
+
+ /** Logger */
+ static private final Log log = LogFactory.getLog(NavHelper.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);
+
+ /**
+ * 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).
+ * <p/>
+ * If you want to create a new model, just creates the good root node and
+ * push it in this model.
+ * <p/>
+ * For example, if you wrap the shared model with a filter model... Anyway, all
+ * listeners of this helper apply always of THIs model.
+ */
+ private final B bridge;
+
+ /** the associated ui component */
+ private U ui;
+
+ /** The shared data provider used to obtain datas to populate nodes and render them. */
+ protected NavDataProvider dataProvider;
+
+ /**
+ * 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 NavNode#isLoaded()} is sets to {@code false}).
+ */
+ protected TreeWillExpandListener expandListener;
+
+ /**
+ * pour ouvrir les fils d'un noeud que l'on vient de sélectionner pour
+ * éviter d'avoir à faire des doubles clics.
+ */
+ protected TreeSelectionListener selectionListener;
+
+ /**
+ * pour recharger le rendu des noeuds (et charger les fils si nécessaires)
+ * lors d'une modification dans le modèle de l'arbre.
+ */
+ protected TreeModelListener treeModelListener;
+
+ /** Cache of child loadors. */
+ protected static Set<? super NavNodeChildLoador<?, ?, ?, ?, ?>> childLoadors;
+
+ protected static Set<? super NavNodeChildLoador<?, ?, ?, ?, ?>> getChildLoadors() {
+ if (childLoadors == null) {
+ childLoadors = new HashSet<NavNodeChildLoador<?, ?, ?, ?, ?>>();
+ }
+ return childLoadors;
+ }
+
+ /**
+ * Obtains the {@link NavNodeChildLoador} of the given {@code type} from
+ * internal cache.
+ * <p/>
+ * <b>Note:</b> The loador will be instanciated if not found, and push in cache.
+ *
+ * @param type the type of loador to get
+ * @param <L> the type of loador to get
+ * @return the loador from cache
+ */
+ @SuppressWarnings({"unchecked"})
+ public static <L extends NavNodeChildLoador<?, ?, ?, ?, ?>> L getChildLoador(Class<L> type) {
+ Set<? super NavNodeChildLoador<?, ?, ?, ?, ?>> cache = getChildLoadors();
+ NavNodeChildLoador<?, ?, ?, ?, ?> result = null;
+ for (Object loador : cache) {
+ if (type.equals(loador.getClass())) {
+ result = (NavNodeChildLoador<?, ?, ?, ?, ?>) loador;
+ break;
+ }
+ }
+ if (result == null) {
+ // add it in cache
+ try {
+ result = type.newInstance();
+ cache.add(result);
+ if (log.isDebugEnabled()) {
+ log.debug("Add " + result + " in loadors cache (new size:" + cache.size() + ").");
+ }
+ } catch (Exception e) {
+ throw new IllegalArgumentException("Could not instanciate loador [" + type.getName() + "]", e);
+ }
+ }
+ return (L) result;
+ }
+
+ public NavHelper(B bridge) {
+ this.bridge = bridge;
+
+ selectionListener = new TreeSelectionListener() {
+
+ @Override
+ public void valueChanged(TreeSelectionEvent e) {
+ if (!checkModel()) {
+ return;
+ }
+
+ // Hack, because event.getSource for TreeTable doesnt return selectionModel
+ TreeSelectionModel source = getSelectionModel();
+
+ if (source.isSelectionEmpty()) {
+
+ // empty selection
+ if (log.isDebugEnabled()) {
+ log.debug("Selection is empty.");
+ }
+ return;
+ }
+
+ boolean debugEnabled = log.isDebugEnabled();
+ boolean traceEnabled = log.isTraceEnabled();
+ for (TreePath path : e.getPaths()) {
+
+ N node = getNode(path);
+ if (node == null) {
+
+ // pas de noeud selectionne
+ if (debugEnabled) {
+ log.debug("Skip for null node.");
+ }
+ continue;
+ }
+
+ boolean isAdded = e.isAddedPath(path);
+
+ TreePath pathToExpand = new TreePath(NavHelper.this.bridge.getPathToRoot(node));
+ boolean pathExpanded = isExpanded(pathToExpand);
+
+ if (traceEnabled || isAdded && debugEnabled) {
+ log.debug("==== Node selection ====================================");
+ log.debug("node ? " + node);
+ log.debug("is added ? " + isAdded);
+ log.debug("is path expanded ? " + pathExpanded);
+ log.debug("is node static ? " + node.isStaticNode());
+ log.debug("is node loaded ? " + node.isLoaded());
+ log.debug("is node leaf ? " + node.isLeaf());
+ log.debug("node nb childs ? " + node.getChildCount());
+ }
+
+ if (isAdded && !pathExpanded) {
+
+ // ask to expand path
+ log.info("expand node [" + pathToExpand + "]");
+ expandPath(pathToExpand);
+ }
+ }
+ }
+ };
+ expandListener = new TreeWillExpandListener() {
+ @Override
+ public void treeWillExpand(TreeExpansionEvent event) {
+
+ if (!checkModel()) {
+ // no model
+ return;
+ }
+
+ N source = getNode(event.getPath());
+
+ if (source.isLoaded()) {
+
+ // node is already loaded, nothing to do
+ return;
+ }
+
+ if (log.isDebugEnabled()) {
+ log.debug("will load childs of node [" + source + "]");
+ }
+ // populate childs of node
+ source.populateChilds(getBridge(), getDataProvider());
+ }
+
+ @Override
+ public void treeWillCollapse(TreeExpansionEvent event) {
+ }
+ };
+
+ treeModelListener = new TreeModelListener() {
+ @Override
+ public void treeNodesInserted(TreeModelEvent e) {
+ if (!checkModel()) {
+ // no model
+ return;
+ }
+ N source = getNode(e.getTreePath());
+ Object[] children = e.getChildren();
+ if (log.isDebugEnabled()) {
+ log.debug(getMessage("inserted ", source, children));
+ }
+
+ // ask to populate children nodes
+ populateNode(null, children, false);
+ }
+
+ @SuppressWarnings({"unchecked"})
+ @Override
+ public void treeNodesRemoved(TreeModelEvent e) {
+ if (!checkModel()) {
+ // no model
+ return;
+ }
+ N source = getNode(e.getTreePath());
+ Object[] children = e.getChildren();
+ if (log.isDebugEnabled()) {
+ log.debug(getMessage("removed ", source, children));
+ }
+
+ // Invalidates nodes in renderer cache (if any)
+ AbstractNavTreeCellRenderer<M, N> renderer = getTreeCellRenderer();
+ if (children != null && renderer != null) {
+ for (Object child : children) {
+ renderer.invalidateCache((N) child);
+ }
+ }
+ }
+
+ @Override
+ public void treeNodesChanged(TreeModelEvent e) {
+ if (!checkModel()) {
+ // no model
+ return;
+ }
+
+ N source = getNode(e.getTreePath());
+ Object[] children = e.getChildren();
+ if (log.isDebugEnabled()) {
+ log.debug(getMessage("changed ", source, children));
+ }
+
+ // ask to populate modified child nodes
+ populateNode(null, children, false);
+ }
+
+ @Override
+ public void treeStructureChanged(TreeModelEvent e) {
+ if (!checkModel()) {
+ // no model
+ return;
+ }
+ N source = getNode(e.getTreePath());
+ Object[] children = e.getChildren();
+ if (log.isDebugEnabled()) {
+ log.debug(getMessage("structure changed", source, children));
+ }
+
+ // ask to populate structure modified node and nodes recursively
+ populateNode(source, children, true);
+ }
+
+ protected String getMessage(String action, N source, Object[] children) {
+ StringBuilder sb = new StringBuilder();
+ sb.append("==== Nodes ");
+ sb.append(action);
+ sb.append(" =================");
+ sb.append("\nsource : ").append(source);
+ sb.append("\nnb nodes : ");
+ sb.append(children == null ? 0 : children.length);
+ if (children != null) {
+ int i = 0;
+ for (Object child : children) {
+ sb.append("\n [");
+ sb.append(i++);
+ sb.append("] - ");
+ sb.append(child);
+ }
+ }
+ return sb.toString();
+ }
+ };
+ }
+
+ /**
+ * Obtains the attached data provider used to populate and render nodes.
+ *
+ * @return the attached data provider
+ */
+ protected NavDataProvider getDataProvider() {
+ return dataProvider;
+ }
+
+ /**
+ * Obtains the jaxx delegate tree model
+ *
+ * @return the internal tree model or {@code null} if none was created.
+ */
+ public M getModel() {
+ return bridge.getModel();
+ }
+
+ /**
+ * Obtains the jaxx delegate tree model
+ *
+ * @return the internal tree model or {@code null} if none was created.
+ */
+ protected B getBridge() {
+ return bridge;
+ }
+
+ /**
+ * Obtains the ui associated with model in helper.
+ *
+ * @return the ui (or {@code null} if no ui attached)
+ */
+ public U getUI() {
+ return ui;
+ }
+
+ public N getRootNode() {
+ if (!checkModel()) {
+ return null;
+ }
+ return bridge.getRoot();
+ }
+
+ /**
+ * Obtains the {@link AbstractNavTreeCellRenderer} renderer of the
+ * registred tree.
+ *
+ * @return the renderer of the registred tree or null if no tree was
+ * registred nor the renderer is a {@link AbstractNavTreeCellRenderer}.
+ */
+ public abstract AbstractNavTreeCellRenderer<M, N> getTreeCellRenderer();
+
+ /**
+ * Obtains the selected node of the registred tree.
+ *
+ * @return the selected tree or {@code null} if no registred tree nor
+ * selection empty.
+ */
+ public abstract N getSelectedNode();
+
+ /**
+ * Obtains the path of ids fro the root node to the selected node on the
+ * registred tree.
+ *
+ * @return the array of ids from root node to selected node.
+ */
+ public String[] getSelectedIds() {
+ List<String> result = new ArrayList<String>();
+ N selectedNode = getSelectedNode();
+ while (selectedNode != null && !selectedNode.isRoot()) {
+
+ result.add(selectedNode.getId());
+ selectedNode = selectedNode.getParent();
+ }
+ Collections.reverse(result);
+ return result.toArray(new String[result.size()]);
+ }
+
+ /**
+ * Registers the given {@code tree} 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 tree the tree to register
+ * @param addExpandTreeListener a flag to add expand listener
+ * @param listener the optional selection listener to add
+ */
+ @SuppressWarnings({"unchecked"})
+ public abstract void setUI(U tree,
+ boolean addExpandTreeListener,
+ TreeSelectionListener listener);
+
+ /**
+ * 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(NavDataProvider dataProvider) {
+ this.dataProvider = dataProvider;
+ AbstractNavTreeCellRenderer<M, N> renderer = getTreeCellRenderer();
+ if (renderer != null) {
+
+ // dispatch provider to renderer
+ renderer.setDataProvider(dataProvider);
+ }
+ }
+
+ /**
+ * Inserts the given node to the given {@code parentNode}.
+ * <p/>
+ * The node will be added to his parent, then creation listeners will be
+ * fired.
+ *
+ * @param parentNode the parent node where to insert the new node *
+ * @param newNode the node to insert
+ */
+ public void insertNode(N parentNode, N newNode) {
+ parentNode.add(newNode);
+ bridge.notifyNodeInserted(newNode);
+ }
+
+ /**
+ * Removes the given {@code node} from the registred tree model and returns
+ * his parent.
+ *
+ * @param node the node to remove
+ * @return the parent node of the removed node.
+ */
+ public N removeNode(N node) {
+ N parentNode = node.getParent();
+ bridge.removeNodeFromParent(node);
+ return parentNode;
+ }
+
+ /**
+ * Moves the given {@code node} to the new {@code position}.
+ *
+ * @param parentNode the parent node
+ * @param node the node to move
+ * @param position the new position of the node
+ */
+ public void moveNode(N parentNode, N node, int position) {
+ parentNode.remove(node);
+ parentNode.insert(node, position);
+ bridge.nodeStructureChanged(parentNode);
+ }
+
+ /**
+ * Refreshs the given {@code node}.
+ * <p/>
+ * If flag {@code deep} is set to {@code true}, then it will refresh
+ * recursively children nodes.
+ * <p/>
+ * <b>Note:</b>As a side-effect, evvery node involved will become
+ * {@code dirty}.
+ *
+ * @param node the node to refresh
+ * @param deep un flag pour activer la repainte de la descendance du
+ * noeud
+ * @see NavNode#isDirty()
+ */
+ @SuppressWarnings({"unchecked"})
+ public void refreshNode(N node, boolean deep) {
+ if (log.isDebugEnabled()) {
+ log.debug("Will refresh (deep ? " + deep + ") node " + node);
+ }
+ bridge.nodeChanged(node);
+ if (deep) {
+ // repaint childs nodes
+ Enumeration<N> e = node.children();
+ while (e.hasMoreElements()) {
+ N child = e.nextElement();
+ refreshNode(child, true);
+ }
+ }
+ }
+
+ /**
+ * To load all nodes of a model.
+ *
+ * @param node the root node to load
+ * @param dataProvider the data provider used to populate nodes
+ */
+ @SuppressWarnings({"unchecked"})
+ public void loadAllNodes(N node, NavDataProvider dataProvider) {
+ if (!checkModel()) {
+ return;
+ }
+ if (!node.isLoaded()) {
+ node.populateChilds(getBridge(), dataProvider);
+ Enumeration<? extends NavNode<?, ?>> enumeration = node.children();
+ while (enumeration.hasMoreElements()) {
+ N jaxxNode = (N) enumeration.nextElement();
+ loadAllNodes(jaxxNode, dataProvider);
+ }
+ }
+ }
+
+ /**
+ * Selects the parent of the currently selected node.
+ * <p/>
+ * <b>Note:</> If selection is empty, then throws a NPE.
+ *
+ * @throws NullPointerException if selection is empty
+ */
+ public void selectParentNode() throws NullPointerException {
+
+ N node = getSelectedNode();
+
+ if (node == null) {
+ // pas de noeud selectionne
+ throw new NullPointerException("no selected node in context");
+ }
+ node = node.getParent();
+
+ selectNode(node);
+ }
+
+ /**
+ * Selects the given {@code node} in the registred tree.
+ *
+ * @param node the node to select
+ */
+ public void selectNode(N node) {
+ if (!checkModel()) {
+
+ // no model
+ return;
+ }
+ if (log.isDebugEnabled()) {
+ log.debug("try to select node [" + node + "]");
+ }
+ TreePath path = new TreePath(bridge.getPathToRoot(node));
+
+ setSelectionPath(path);
+ scrollPathToVisible(path);
+ }
+
+ /**
+ * Selects the node described by his given {@code path} of ids.
+ *
+ * @param path the absolute path of ids from root node to node to select.
+ */
+ public void selectNode(String... path) {
+ if (!checkModel()) {
+
+ // no model
+ return;
+ }
+ if (log.isDebugEnabled()) {
+ log.debug("try to select node from ids " + Arrays.toString(path));
+ }
+ N root = bridge.getRoot();
+ N node = findNode(root, path);
+ if (log.isDebugEnabled()) {
+ log.debug("selected node [" + node + "]");
+ }
+ if (node != null) {
+ selectNode(node);
+ }
+ }
+
+ /**
+ * Finds a node from the given root {@code node}, applying the path given
+ * by {@code ids}.
+ *
+ * @param node the starting node
+ * @param ids the path of ids to apply on the node.
+ * @return the find node or {@code null} if no node matchs.
+ */
+ public N findNode(N node, String... ids) {
+ if (!checkModel()) {
+
+ // no model
+ return null;
+ }
+ N result = null;
+ for (String id : ids) {
+
+ result = node.findNodeById(id, getBridge(), getDataProvider());
+
+ if (result == null) {
+
+ // un des noeud n'a pas ete trouve, on sort
+ break;
+ }
+ node = result;
+ }
+ return result;
+ }
+
+ /**
+ * Checks if internal model was created.
+ *
+ * @return {@code true} if model was created, {@code false} otherwise.
+ */
+ protected boolean checkModel() {
+ if (getModel() == null) {
+
+ // no model set,
+ log.warn("No model set in " + this);
+ return false;
+ }
+ // model is set
+ return true;
+ }
+
+ /**
+ * Populates nodes.
+ * <p/>
+ * If {@code node} is not {@code null}, then populate it.
+ * <p/>
+ * If {@code children} is not {@code null}, then populate them, moreover
+ * if {@code recurse} is set to {@code true} then do a recurse refresh on
+ * children.
+ *
+ * @param node the parent node to populate (optional)
+ * @param children the child nodes to populate (optional)
+ * @param recurse flag sets to {@code true} if should do recurse refresh on
+ * given {@code children} nodes.
+ */
+ @SuppressWarnings({"unchecked"})
+ protected void populateNode(N node,
+ Object[] children,
+ boolean recurse) {
+ NavDataProvider dataProvider = getDataProvider();
+ if (node != null) {
+ if (log.isDebugEnabled()) {
+ log.debug("Will populate node : " + node);
+ }
+ node.populateNode(getBridge(), dataProvider, false);
+ }
+ if (children != null) {
+ for (Object o : children) {
+ N child = (N) o;
+ if (log.isDebugEnabled()) {
+ log.debug("Will populate child node : " + child);
+ }
+ child.populateNode(getBridge(), dataProvider, recurse);
+ }
+ }
+ }
+
+ /**
+ * Convinient method to objet the casted node of a {@link TreePath}.
+ *
+ * @param path the path contaning the node.
+ * @return the casted node from the path.
+ */
+ @SuppressWarnings({"unchecked"})
+ protected N getNode(TreePath path) {
+ N result = (N) path.getLastPathComponent();
+ return result;
+ }
+
+ public void setUI(U ui) {
+ this.ui = ui;
+ }
+}
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/NavHelper.java
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Copied: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/NavNode.java (from rev 2012, trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxNode.java)
===================================================================
--- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/NavNode.java (rev 0)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/NavNode.java 2010-06-30 17:24:16 UTC (rev 2014)
@@ -0,0 +1,207 @@
+/*
+ * #%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.AbstractNavTreeCellRenderer;
+
+import javax.swing.tree.TreeNode;
+import java.io.Serializable;
+
+/**
+ * Definition of a node with a optional {@code childLoador} to build childs of
+ * node.
+ * <p/>
+ * A node is identified by an {@link #getId} of an associated data of type
+ * {@link #getInternalClass}.
+ * <p/>
+ * <b>Note:</b>
+ * <p><i> While using a {@code childLoador}, we can not know before node
+ * was loaded the exact count of his childs. As a matter of facts, real leaf
+ * nodes appears at the beginning in ui as a not leaf (there is a root handler).
+ * When node was loaded, a leaf node will be then displayed as required.
+ * </i></p>
+ * <p/>
+ * <h2>Why NavNode is generic ?</h2>
+ * In a project, you should implements your own Node extending with one like this :
+ * <pre>
+ * class MyNode extends NavNode<MyNode> { ... }
+ * </pre>
+ * While in this class, you overrides every method with a node return type,
+ * co-variance you'll be able to use this code :
+ * <pre>
+ * MyNode parentNode = new MyNode();
+ * MyNode node = parentNode.getFirstNode();
+ * </pre>
+ * So for final application this generic type avoid any cast for your own node
+ * type, this is quite convinient.
+ * <p/>
+ * Even if in your project, you wants to have a heriarchy of nodes, this will
+ * still works (if you use a genercic type on your abstract nodes).
+ * <h2>Internal states</h2>
+ * <ul>
+ * <li><b>internalClass</b> : the type of data associated with the node</li>
+ * <li><b>context</b> : an optinal context to distinguish different types of
+ * node with same {@code internalclass}</li>
+ * <li><b>id</b> : id of the data associated with the node</li>
+ * <li><b>dirty</b> : flag sets to {@code true} when node render MUST be recomputed</li>
+ * <li><b>loaded</b> : flag sets to {@code true} when node was loaded</li>
+ * <li><b>childLoador</b> : optional loador of childs</li>
+ * </ul>
+ * <h2>Static nodes</h2>
+ * Some nodes do not need auto-loading, we call them {@code static nodes}.
+ * The method {@link #isStaticNode()} gives this state.
+ * <p/>
+ * <b>Note:</b> A static node has no {@code childLoador}.
+ * <h2>Node loading</h2>
+ * Initialy node has no data child nodes, ({@link #isLoaded()} equals
+ * {@code false}).
+ * when model requires node's childs, it can load them via method
+ * {@link #populateNode(NavBridge , NavDataProvider , boolean)}
+ * and {@link #populateChilds(NavBridge , NavDataProvider)} methods.
+ * <h2>Node rendering</h2
+ * the {@link AbstractNavTreeCellRenderer} looks the {@link #isDirty} state to
+ * know when render should be (re-)compute and set back the state to {@code false}.
+ * <p/>
+ * Each time, a node is modified, the {@link #isDirty} should be set to {@code true}.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 2.1
+ */
+public interface NavNode<M, N extends NavNode<M, N>> extends Cloneable, TreeNode, Serializable {
+
+ String getId();
+
+ String getContext();
+
+ Class<?> getInternalClass();
+
+ boolean isLoaded();
+
+ boolean isDirty();
+
+ /**
+ * Convinient method to known if the node is a {@code String} typed.
+ *
+ * @return {@code true} if the type of node if
+ */
+ boolean isStringNode();
+
+ /**
+ * To know if the node is static.
+ * <p/>
+ * A {@code static} node has no {@code childLoador}.
+ *
+ * @return {@code true} when the node is static : says, the node has
+ * no {@code childLoador}.
+ */
+ boolean isStaticNode();
+
+ /**
+ * Gets the first node form this one to the root which has a none
+ * {@code String} type.
+ *
+ * @return the first concrete node type
+ */
+ N getContainerNode();
+
+ /**
+ * Given an {@code id}, obtain the child with matching id.
+ * <p/>
+ * If node is NOT {@code loaded}, then first loads it (method
+ * {@link #populateChilds(NavBridge , NavDataProvider)}) then do search
+ * on direct childs of the node.
+ *
+ * @param id the id of the researched node
+ * @param bridge model owner of nodes
+ * @param provider data provider
+ * @return the found node or {@code null} if not found
+ */
+ N findNodeById(String id,
+ NavBridge<M,N> bridge,
+ NavDataProvider provider);
+
+ /**
+ * Changes the {@link #isDirty} state.
+ * <p/>
+ * As a side effect, when a renderer will use this node, it will force to
+ * reload the render from the {@link NavDataProvider}.
+ *
+ * @param dirty the new dirty value
+ */
+ void setDirty(boolean dirty);
+
+ @Override
+ boolean isLeaf();
+
+ Object getUserObject();
+
+ @Override
+ String toString();
+
+ //--------------------------------------------------------------------------
+ //-- Populate methods
+ //--------------------------------------------------------------------------
+
+ /**
+ * To populate the node. A side-effect of this method is to set {@code dirty}
+ * the node (renderer will recompute the render of the node).
+ * <p/>
+ * If {@code populateChilds} is set to {@code true}, then also populate
+ * childs of the node using the given {@code dataProvider}.
+ *
+ * @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(NavBridge<M,N> bridge,
+ NavDataProvider provider,
+ boolean populateChilds);
+
+ /**
+ * To populate childs of the node (only when a none static node).
+ * A side-effect of this method is to set {@code loaded} of the node.
+ * <p/>
+ * For a static node, do nothing.
+ *
+ * @param bridge model owner of the node
+ * @param provider data provider
+ */
+ void populateChilds(NavBridge<M,N> bridge, NavDataProvider provider);
+
+ //--------------------------------------------------------------------------
+ //-- Overrides to use generic type as return
+ //--------------------------------------------------------------------------
+
+ boolean isRoot();
+
+ @Override
+ N getParent();
+
+ void add(N node);
+
+ void remove(N node);
+
+ void insert(N node, int position);
+}
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/NavNode.java
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Copied: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/NavNodeChildLoador.java (from rev 2012, trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxNodeChildLoador.java)
===================================================================
--- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/NavNodeChildLoador.java (rev 0)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/NavNodeChildLoador.java 2010-06-30 17:24:16 UTC (rev 2014)
@@ -0,0 +1,168 @@
+/*
+ * #%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 org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * Object to load childs of a node.
+ * <p/>
+ * It uses {@link NavDataProvider} in method
+ * {@link #loadChilds(NavBridge , NavNode , NavDataProvider)} to obtain datas
+ * then build childs nodes.
+ * <p/>
+ * A factory of such objects can be found in {@link NavHelper} to make
+ * them reusable in other places than inside a {@link NavNode} to auto-load
+ * childs.
+ * <p/>
+ * For example when you want to creat by hand a new node, always prefer to reuse
+ * a such object rathen than duplicate same code in helper...
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @param <T> type of data used to create nodes (can be just a String type to use only ids)
+ * @param <O> type of data associated with nodes
+ * @param <N> type of node to used (to make possible full co-variance and no cast in fal implementations).
+ * @see NavHelper
+ * @see NavNode
+ * @since 2.1
+ */
+public abstract class NavNodeChildLoador<T, O, M, B extends NavBridge<M, N>, N extends NavNode<M, N>> implements Serializable {
+
+ /** Logger */
+ static private final Log log = LogFactory.getLog(NavNodeChildLoador.class);
+
+ /** Type of data of the node */
+ protected final Class<O> beanType;
+
+ protected NavNodeChildLoador(Class<O> beanType) {
+ this.beanType = beanType;
+ }
+
+ /**
+ * Obtain the list of data used to create nodes.
+ * <p/>
+ * If type {@code T} is {@code O}, we directly use the data associated with nodes.
+ *
+ * @param parentClass type of parent
+ * @param parentId id of parent
+ * @param dataProvider the data provider
+ * @return the list of data
+ * @throws Exception if any problem
+ */
+ public abstract List<T> getData(Class<?> parentClass,
+ String parentId,
+ NavDataProvider dataProvider) throws Exception;
+
+ /**
+ * Hook to create a child node given his {@code data}.
+ *
+ * @param data the data of the node to create
+ * @param dataProvider the data provider
+ * @return the created node
+ */
+ public abstract N createNode(T data, NavDataProvider dataProvider);
+
+ /**
+ * Returns the type of data associated with nodes to create.
+ *
+ * @return the type of data associated with created nodes.
+ */
+ public Class<O> getBeanType() {
+ return beanType;
+ }
+
+ /**
+ * Load childs of the given {@code parentnode}.
+ *
+ * @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(B bridge,
+ N parentNode,
+ NavDataProvider dataProvider) throws Exception {
+
+ N containerNode = parentNode.getContainerNode();
+
+ List<T> datas;
+ if (containerNode == null) {
+
+ // pas d'ancetre, il doit s'agir d'un premier noeud de données
+ // depuis le noeud root
+
+ // recuperation des objets fils (sans connaitre de parent)
+ datas = getData(null, null, dataProvider);
+
+ } else {
+ if (log.isDebugEnabled()) {
+ log.debug("search data for " + containerNode.getInternalClass() +
+ " : " + containerNode.getId());
+ }
+
+ // recuperation des objets fils
+ datas = getData(containerNode.getInternalClass(),
+ containerNode.getId(),
+ dataProvider);
+ }
+
+ // on charge les fils
+ addChildNodes(parentNode, datas, dataProvider);
+
+ // notifie le modele d'un ajout de noeuds
+ 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(NavBridge , NavNode , NavDataProvider)}.
+ *
+ * @param parentNode the node where to insert
+ * @param datas the data used to create node
+ * @param dataProvider the data provider
+ */
+ protected void addChildNodes(N parentNode,
+ List<T> datas,
+ NavDataProvider dataProvider) {
+
+ // creation des noeuds fils
+ if (datas != null) {
+ for (T o : datas) {
+ if (log.isInfoEnabled()) {
+ log.info("[" + parentNode + "] Will add child node for " + o);
+ }
+ N node = createNode(o, dataProvider);
+ parentNode.add(node);
+ }
+ }
+ }
+
+}
\ No newline at end of file
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/NavNodeChildLoador.java
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/package.html
===================================================================
--- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/package.html 2010-06-30 16:48:34 UTC (rev 2013)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/package.html 2010-06-30 17:24:16 UTC (rev 2014)
@@ -1,9 +1,17 @@
<html>
<body>
-<h1>JAXX - tree utilities</h1>
+<h1>JAXX - nav api</h1>
-This package contains all the classes of the new tree and treeTable framework.
+This package contains a little framework to build dynamci nodes.
+Tow implementations are offers :
+
+<ul>
+ <li>One for the <b>JTree</b> in <b>jaxx.runtime.swing.nav.tree</b></li>
+ <li>One for the <b>JXTreeTable</b> in
+ <b>jaxx.runtime.swing.nav.treetable</b></li>
+</ul>
+
<p>
Replace the previous framework from package
<code>jaxx.runtime.swing.navigation</code>
@@ -38,11 +46,11 @@
<h2>DataProvider</h2>
-Contract of objet responsible of acquiring data to populate nodes and render them.
+Contract of objet responsible of acquiring data to populate nodes and render
+them.
<h2>JaxxNode</h2>
-Jaxx node contract customized for our purpose (loaded, dirty
-states,...).
+Jaxx node contract customized for our purpose (loaded, dirty states,...).
<h2>JaxxNodeChildLoador</h2>
Contract to load childs of a JaxxNode using DataProvider.
@@ -50,34 +58,8 @@
<h2>JaxxNavHelper</h2>
Helper to manage a tree or a tree table using auto-loading nodes.
-<h2>JaxxDelegateTreeModel</h2>
-Model to switch between tree model and tree table model.
+<h2>JaxxNavBridge</h2>
+Bridge to encapsulate models.
-
-<h1>Tree api</h1>
-
-
-<h2>JaxxTreeNode</h2>
-An override of DefaultMutableTreeNode implement JaxxNode.
-
-<h2>JaxxTreeNodeChildLoador</h2>
-Object to load childs of a tree node using DataProvider.
-
-<h2>AbstractJaxxTreeCellRenderer</h2>
-Abstract renderer using DataProvider to acquire node render.
-
-
-<h1>Tree table api</h1>
-
-
-<h2>JaxxTreeTableNode</h2>
-An override of DefaultMutableTreeTableNode implement JaxxNode
-
-<h2>JaxxTreeTableNodeChildLoador</h2>
-Object to load childs of a tree table node using DataProvider.
-
-<h2>JaxxTreeTableModel</h2>
-Implementation of TreeTableModel used by JaxxDelegateTreeModel
-
</body>
</html>
Deleted: 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-30 16:48:34 UTC (rev 2013)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/AbstractJaxxTreeCellRenderer.java 2010-06-30 17:24:16 UTC (rev 2014)
@@ -1,128 +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.tree;
-
-import jaxx.runtime.swing.nav.DataProvider;
-import jaxx.runtime.swing.nav.JaxxNode;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import javax.swing.tree.DefaultTreeCellRenderer;
-import java.util.HashMap;
-import java.util.Map;
-
-import static org.nuiton.i18n.I18n._;
-
-/**
- * Le renderer abstrait (qui a toutes les methodes qui aident) pour implanter de
- * vrai renderer pour les différents cas d'utilisation de l'abre de navigation.
- *
- * @author chemit <chemit(a)codelutin.com>
- * @since 1.2
- */
-public abstract class AbstractJaxxTreeCellRenderer<M,N extends JaxxNode<M,N>> extends DefaultTreeCellRenderer {
-
- /** Logger */
- protected static final Log log =
- LogFactory.getLog(AbstractJaxxTreeCellRenderer.class);
-
- /** source de donnée */
- protected DataProvider dataProvider;
-
- /** le cache de rendu */
- protected final Map<N, String> renderCache = new HashMap<N, String>();
-
- /**
- * Determines the text render of a node using the {@link #dataProvider}.
- *
- * @param node the node to render
- * @return the text render of the node
- */
- protected abstract String computeNodeText(N node);
-
- protected AbstractJaxxTreeCellRenderer() {
- }
-
- public DataProvider getDataProvider() {
- return dataProvider;
- }
-
- public void setDataProvider(DataProvider dataProvider) {
- this.dataProvider = dataProvider;
-
- // une nouvelle source utilisée, on vide le cache
- clearCache();
- }
-
- public void clearCache() {
- renderCache.clear();
- }
-
- public void invalidateCache(N node) {
- renderCache.remove(node);
- }
-
- @Override
- protected void finalize() throws Throwable {
- super.finalize();
- clearCache();
- }
-
- public String getNodeText(N node) {
- if (node == null) {
- return null;
- }
- String text;
-
- if (node.isDirty() || !renderCache.containsKey(node)) {
-
- // calculer le rendu du noeud
- if (node.isStringNode()) {
- text = _(node.getId());
-
- } else {
-
- text = computeNodeText(node);
- }
-
- if (log.isDebugEnabled()) {
- log.debug("text for node [" + node + "] = <" + text + ">");
- }
-
- // sauvegarde dans le cache
- renderCache.put(node, text);
-
- // le noeud est de nouveau propre
- node.setDirty(false);
-
- } else {
-
- // recupération directement du rendu dans le cache
- text = renderCache.get(node);
- }
-
- return text;
- }
-}
Copied: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/AbstractNavTreeCellRenderer.java (from rev 2012, trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/AbstractJaxxTreeCellRenderer.java)
===================================================================
--- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/AbstractNavTreeCellRenderer.java (rev 0)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/AbstractNavTreeCellRenderer.java 2010-06-30 17:24:16 UTC (rev 2014)
@@ -0,0 +1,128 @@
+/*
+ * #%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.NavDataProvider;
+import jaxx.runtime.swing.nav.NavNode;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import javax.swing.tree.DefaultTreeCellRenderer;
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.nuiton.i18n.I18n._;
+
+/**
+ * Le renderer abstrait (qui a toutes les methodes qui aident) pour implanter de
+ * vrai renderer pour les différents cas d'utilisation de l'abre de navigation.
+ *
+ * @author chemit <chemit(a)codelutin.com>
+ * @since 1.2
+ */
+public abstract class AbstractNavTreeCellRenderer<M, N extends NavNode<M, N>> extends DefaultTreeCellRenderer {
+
+ /** Logger */
+ protected static final Log log =
+ LogFactory.getLog(AbstractNavTreeCellRenderer.class);
+
+ /** source de donnée */
+ protected NavDataProvider dataProvider;
+
+ /** le cache de rendu */
+ protected final Map<N, String> renderCache = new HashMap<N, String>();
+
+ /**
+ * Determines the text render of a node using the {@link #dataProvider}.
+ *
+ * @param node the node to render
+ * @return the text render of the node
+ */
+ protected abstract String computeNodeText(N node);
+
+ protected AbstractNavTreeCellRenderer() {
+ }
+
+ public NavDataProvider getDataProvider() {
+ return dataProvider;
+ }
+
+ public void setDataProvider(NavDataProvider dataProvider) {
+ this.dataProvider = dataProvider;
+
+ // une nouvelle source utilisée, on vide le cache
+ clearCache();
+ }
+
+ public void clearCache() {
+ renderCache.clear();
+ }
+
+ public void invalidateCache(N node) {
+ renderCache.remove(node);
+ }
+
+ @Override
+ protected void finalize() throws Throwable {
+ super.finalize();
+ clearCache();
+ }
+
+ public String getNodeText(N node) {
+ if (node == null) {
+ return null;
+ }
+ String text;
+
+ if (node.isDirty() || !renderCache.containsKey(node)) {
+
+ // calculer le rendu du noeud
+ if (node.isStringNode()) {
+ text = _(node.getId());
+
+ } else {
+
+ text = computeNodeText(node);
+ }
+
+ if (log.isDebugEnabled()) {
+ log.debug("text for node [" + node + "] = <" + text + ">");
+ }
+
+ // sauvegarde dans le cache
+ renderCache.put(node, text);
+
+ // le noeud est de nouveau propre
+ node.setDirty(false);
+
+ } else {
+
+ // recupération directement du rendu dans le cache
+ text = renderCache.get(node);
+ }
+
+ return text;
+ }
+}
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/AbstractNavTreeCellRenderer.java
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Deleted: 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 2010-06-30 16:48:34 UTC (rev 2013)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/JaxxTreeBridge.java 2010-06-30 17:24:16 UTC (rev 2014)
@@ -1,306 +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.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(a)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
Deleted: 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 2010-06-30 16:48:34 UTC (rev 2013)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/JaxxTreeHelper.java 2010-06-30 17:24:16 UTC (rev 2014)
@@ -1,133 +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.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(a)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;
- }
-}
Deleted: 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-30 16:48:34 UTC (rev 2013)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/JaxxTreeNode.java 2010-06-30 17:24:16 UTC (rev 2014)
@@ -1,380 +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.tree;
-
-import jaxx.runtime.swing.nav.DataProvider;
-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 javax.swing.tree.DefaultMutableTreeNode;
-import javax.swing.tree.DefaultTreeModel;
-import javax.swing.tree.TreeNode;
-import java.util.Enumeration;
-
-/**
- * Implementation of {@link JaxxNode} used to create in tree table
- * This node extends {@link DefaultMutableTreeNode}
- *
- * @author tchemit <chemit(a)codelutin.com>
- * @since 2.2
- */
-public class JaxxTreeNode<N extends JaxxTreeNode<N>> extends DefaultMutableTreeNode implements JaxxNode<DefaultTreeModel, N> {
-
- /** Logger */
- static private final Log log = LogFactory.getLog(JaxxNode.class);
-
- private static final long serialVersionUID = 1L;
-
- /** Type of data associated with the node */
- protected final Class<?> internalClass;
-
- /**
- * Optinal context to distinguish different nodes with same
- * {@link #internalClass}.
- */
- protected final String context;
-
- /** Id of the data associated with the node. */
- protected final String id;
-
- /** Flag to know when renderer should (re-)compute render of the node. */
- protected boolean dirty = true;
-
- /** Flag to know when the none static node was loaded. */
- protected boolean loaded;
-
- /** Optional child loador to lazy create childs of the node. */
- protected final JaxxTreeNodeChildLoador<?, ?, N> childLoador;
-
- protected JaxxTreeNode(String id) {
- this(String.class, id, null, null);
- }
-
- public JaxxTreeNode(Class<?> internalClass,
- String id,
- String context,
- JaxxTreeNodeChildLoador<?, ?, N> childLoador) {
- this.internalClass = internalClass;
- this.id = id;
- this.context = context;
- this.childLoador = childLoador;
- if (isStaticNode()) {
-
- // A static node is always full loaded
- loaded = true;
- }
- if (log.isDebugEnabled()) {
- log.debug("new node : " + this);
- }
- }
-
- @Override
- public String getId() {
- return id;
- }
-
- @Override
- public String getContext() {
- return context;
- }
-
- @Override
- public Class<?> getInternalClass() {
- return internalClass;
- }
-
- @Override
- public boolean isLoaded() {
- return loaded;
- }
-
- @Override
- public boolean isDirty() {
- return dirty;
- }
-
- @Override
- public boolean isStringNode() {
- return String.class.equals(internalClass);
- }
-
- @Override
- public boolean isStaticNode() {
- return childLoador == null;
- }
-
- @Override
- @SuppressWarnings({"unchecked"})
- public N getContainerNode() {
- if (isRoot()) {
- // si on arrive sur le root, quelque chose ne va pas,
- // on bloque par null, a defaut de declancher une exception
- return null;
- }
-
- if (isStringNode()) {
- // on est sur un noeud de type String, donc on regarde sur le parent
- return getParent().getContainerNode();
- }
-
- // cas final : sur un noeud de donnee + classe interne de donnee
- return (N) this;
- }
-
- @Override
- @SuppressWarnings({"unchecked"})
- public N findNodeById(String id,
- JaxxNavBridge<DefaultTreeModel, N> model,
- DataProvider provider) {
- if (id == null) {
-
- // id null ? donc rien a faire
- return null;
- }
- if (id.equals(getId())) {
-
- // on a trouve le bon noeud
- return (N) this;
- }
-
- if (!isLoaded()) {
-
- // il faut charger les fils du noeud pour effectuer la recherche
- populateChilds(model, provider);
- }
-
- if (isLeaf()) {
-
- // au final le noeud est une feuille, donc ne convient pas
- return null;
- }
-
- // on recherche dans les fils
- Enumeration<N> enumeration = children();
- while (enumeration.hasMoreElements()) {
- N node = enumeration.nextElement();
- N nodeById = node.findNodeById(id, model, provider);
- if (nodeById != null) {
- return nodeById;
- }
- }
-
- // aucun des noeud fils ne convient
- return null;
- }
-
- @Override
- public void setDirty(boolean dirty) {
- this.dirty = dirty;
- }
-
- @Override
- public boolean isLeaf() {
- // there is two behaviours for the test :
- // 1 - when the node is static, then can directly use his number of child
- // to determine if node is a leaf (no child)
- // 2 - when the node is dynamic, then ALWAYS says the node is NOT a leaf until
- // it was loaded, otherwise the WillExpand listener will not load the childs...
- // Once the node is loaded, use back the normal behaviour (count number of childs)
- return isStaticNode() ? super.isLeaf() : isLoaded() && getChildCount() == 0;
- }
-
- @Override
- public Object getUserObject() {
- return id;
- }
-
- @Override
- public String toString() {
- return System.identityHashCode(this) + "-" + id;
- }
-
- //--------------------------------------------------------------------------
- //-- Populate methods
- //--------------------------------------------------------------------------
-
- @Override
- public void populateNode(JaxxNavBridge<DefaultTreeModel, N> model,
- DataProvider provider,
- boolean populateChilds) {
-
- // on indique que le noeud n'est plus propre
- setDirty(true);
-
- if (populateChilds) {
-
- // chargement des fils
- populateChilds(model, provider);
- }
- }
-
- @Override
- @SuppressWarnings({"unchecked"})
- public void populateChilds(JaxxNavBridge<DefaultTreeModel, N> model, DataProvider provider) {
- if (isStaticNode()) {
-
- log.debug("is static node " + this);
-
- // noeud static, rien a faire
- return;
- }
-
- // chargement des noeuds fils du noeud courant
- try {
- if (log.isDebugEnabled()) {
- log.debug("Will load childs for " + this);
- }
- childLoador.loadChilds((JaxxTreeBridge<N>) model, (N) this, provider);
- } catch (Exception e) {
- throw new RuntimeException(e.getMessage(), e);
- } finally {
-
- // au final, on passe le noeud a l'état chargé
- loaded = true;
- }
- }
-
- //--------------------------------------------------------------------------
- //-- Overrides to use generic type as return
- //--------------------------------------------------------------------------
-
- @SuppressWarnings({"unchecked"})
- @Override
- public N getParent() {
- return (N) super.getParent();
- }
-
- @SuppressWarnings({"unchecked"})
- @Override
- public N getRoot() {
- return (N) super.getRoot();
- }
-
- @SuppressWarnings({"unchecked"})
- @Override
- public N getFirstChild() {
- return (N) super.getFirstChild();
- }
-
- @SuppressWarnings({"unchecked"})
- @Override
- public N getLastChild() {
- return (N) super.getLastChild();
- }
-
- @SuppressWarnings({"unchecked"})
- @Override
- public N getChildAfter(TreeNode aChild) {
- return (N) super.getChildAfter(aChild);
- }
-
- @SuppressWarnings({"unchecked"})
- @Override
- public N getChildBefore(TreeNode aChild) {
- return (N) super.getChildBefore(aChild);
- }
-
- @SuppressWarnings({"unchecked"})
- @Override
- public N getNextSibling() {
- return (N) super.getNextSibling();
- }
-
- @SuppressWarnings({"unchecked"})
- @Override
- public N getPreviousSibling() {
- return (N) super.getPreviousSibling();
- }
-
- @SuppressWarnings({"unchecked"})
- @Override
- public N getFirstLeaf() {
- return (N) super.getFirstLeaf();
- }
-
- @SuppressWarnings({"unchecked"})
- @Override
- public N getLastLeaf() {
- return (N) super.getLastLeaf();
- }
-
- @SuppressWarnings({"unchecked"})
- @Override
- public N getNextLeaf() {
- return (N) super.getNextLeaf();
- }
-
- @SuppressWarnings({"unchecked"})
- @Override
- public N getPreviousLeaf() {
- return (N) super.getPreviousLeaf();
- }
-
- @SuppressWarnings({"unchecked"})
- @Override
- public N getNextNode() {
- return (N) super.getNextNode();
- }
-
- @SuppressWarnings({"unchecked"})
- @Override
- public N getPreviousNode() {
- return (N) super.getPreviousNode();
- }
-
- @SuppressWarnings({"unchecked"})
- public N getSharedAncestor(N aNode) {
- return (N) getSharedAncestor((DefaultMutableTreeNode) aNode);
- }
-
- @SuppressWarnings({"unchecked"})
- @Override
- public N getChildAt(int index) {
- return (N) super.getChildAt(index);
- }
-
- @SuppressWarnings({"unchecked"})
- @Override
- public Enumeration<N> children() {
- return (Enumeration<N>) super.children();
- }
-
- @Override
- public void add(N node) {
- super.add(node);
- }
-
- @Override
- public void remove(N node) {
- super.remove(node);
- }
-
- @Override
- public void insert(N node, int position) {
- super.insert(node, position);
- }
-}
Deleted: 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-30 16:48:34 UTC (rev 2013)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/JaxxTreeNodeChildLoador.java 2010-06-30 17:24:16 UTC (rev 2014)
@@ -1,42 +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.tree;
-
-import jaxx.runtime.swing.nav.JaxxNodeChildLoador;
-
-import javax.swing.tree.DefaultTreeModel;
-
-/**
- * Implementation for tree of {@link JaxxNodeChildLoador}
- *
- * @author sletellier <letellier(a)codelutin.com>
- * @since 2.2
- */
-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);
- }
-}
Copied: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/NavTreeBridge.java (from rev 2012, trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/JaxxTreeBridge.java)
===================================================================
--- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/NavTreeBridge.java (rev 0)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/NavTreeBridge.java 2010-06-30 17:24:16 UTC (rev 2014)
@@ -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.NavBridge;
+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(a)codelutin.com>
+ * @since 2.1
+ */
+public class NavTreeBridge<N extends NavTreeNode<N>> implements NavBridge<DefaultTreeModel, N> {
+
+ /** Logger */
+ static private final Log log = LogFactory.getLog(NavTreeBridge.class);
+
+ /** bridge model */
+ protected DefaultTreeModel model;
+
+ /** bridge ui */
+ protected JTree ui;
+
+ public NavTreeBridge() {
+ }
+
+ //--------------------------------------------------------------------------
+ //-- 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 NavTreeNode<?>> 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 AbstractNavTreeCellRenderer<DefaultTreeModel, N> getTreeCellRenderer() {
+// JTree t = getUI();
+// if (t == null) {
+// return null;
+// }
+// TreeCellRenderer r = t.getCellRenderer();
+// if (r instanceof AbstractNavTreeCellRenderer) {
+// return (AbstractNavTreeCellRenderer<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/NavTreeBridge.java
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Copied: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/NavTreeHelper.java (from rev 2012, trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/JaxxTreeHelper.java)
===================================================================
--- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/NavTreeHelper.java (rev 0)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/NavTreeHelper.java 2010-06-30 17:24:16 UTC (rev 2014)
@@ -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.NavHelper;
+
+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 NavHelper} base on a {@link JTree} component.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 2.1
+ */
+public class NavTreeHelper<N extends NavTreeNode<N>> extends NavHelper<DefaultTreeModel, JTree, NavTreeBridge<N>, N> {
+
+ public NavTreeHelper() {
+ super(new NavTreeBridge<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 AbstractNavTreeCellRenderer<DefaultTreeModel, N> getTreeCellRenderer() {
+ JTree t = getUI();
+ if (t == null) {
+ return null;
+ }
+ TreeCellRenderer r = t.getCellRenderer();
+ if (r instanceof AbstractNavTreeCellRenderer) {
+ return (AbstractNavTreeCellRenderer<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) {
+ NavTreeBridge<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/NavTreeHelper.java
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Copied: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/NavTreeNode.java (from rev 2012, trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/JaxxTreeNode.java)
===================================================================
--- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/NavTreeNode.java (rev 0)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/NavTreeNode.java 2010-06-30 17:24:16 UTC (rev 2014)
@@ -0,0 +1,380 @@
+/*
+ * #%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.NavDataProvider;
+import jaxx.runtime.swing.nav.NavBridge;
+import jaxx.runtime.swing.nav.NavNode;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeModel;
+import javax.swing.tree.TreeNode;
+import java.util.Enumeration;
+
+/**
+ * Implementation of {@link NavNode} used to create in tree table
+ * This node extends {@link DefaultMutableTreeNode}
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 2.2
+ */
+public class NavTreeNode<N extends NavTreeNode<N>> extends DefaultMutableTreeNode implements NavNode<DefaultTreeModel, N> {
+
+ /** Logger */
+ static private final Log log = LogFactory.getLog(NavNode.class);
+
+ private static final long serialVersionUID = 1L;
+
+ /** Type of data associated with the node */
+ protected final Class<?> internalClass;
+
+ /**
+ * Optinal context to distinguish different nodes with same
+ * {@link #internalClass}.
+ */
+ protected final String context;
+
+ /** Id of the data associated with the node. */
+ protected final String id;
+
+ /** Flag to know when renderer should (re-)compute render of the node. */
+ protected boolean dirty = true;
+
+ /** Flag to know when the none static node was loaded. */
+ protected boolean loaded;
+
+ /** Optional child loador to lazy create childs of the node. */
+ protected final NavTreeNodeChildLoador<?, ?, N> childLoador;
+
+ protected NavTreeNode(String id) {
+ this(String.class, id, null, null);
+ }
+
+ public NavTreeNode(Class<?> internalClass,
+ String id,
+ String context,
+ NavTreeNodeChildLoador<?, ?, N> childLoador) {
+ this.internalClass = internalClass;
+ this.id = id;
+ this.context = context;
+ this.childLoador = childLoador;
+ if (isStaticNode()) {
+
+ // A static node is always full loaded
+ loaded = true;
+ }
+ if (log.isDebugEnabled()) {
+ log.debug("new node : " + this);
+ }
+ }
+
+ @Override
+ public String getId() {
+ return id;
+ }
+
+ @Override
+ public String getContext() {
+ return context;
+ }
+
+ @Override
+ public Class<?> getInternalClass() {
+ return internalClass;
+ }
+
+ @Override
+ public boolean isLoaded() {
+ return loaded;
+ }
+
+ @Override
+ public boolean isDirty() {
+ return dirty;
+ }
+
+ @Override
+ public boolean isStringNode() {
+ return String.class.equals(internalClass);
+ }
+
+ @Override
+ public boolean isStaticNode() {
+ return childLoador == null;
+ }
+
+ @Override
+ @SuppressWarnings({"unchecked"})
+ public N getContainerNode() {
+ if (isRoot()) {
+ // si on arrive sur le root, quelque chose ne va pas,
+ // on bloque par null, a defaut de declancher une exception
+ return null;
+ }
+
+ if (isStringNode()) {
+ // on est sur un noeud de type String, donc on regarde sur le parent
+ return getParent().getContainerNode();
+ }
+
+ // cas final : sur un noeud de donnee + classe interne de donnee
+ return (N) this;
+ }
+
+ @Override
+ @SuppressWarnings({"unchecked"})
+ public N findNodeById(String id,
+ NavBridge<DefaultTreeModel, N> model,
+ NavDataProvider provider) {
+ if (id == null) {
+
+ // id null ? donc rien a faire
+ return null;
+ }
+ if (id.equals(getId())) {
+
+ // on a trouve le bon noeud
+ return (N) this;
+ }
+
+ if (!isLoaded()) {
+
+ // il faut charger les fils du noeud pour effectuer la recherche
+ populateChilds(model, provider);
+ }
+
+ if (isLeaf()) {
+
+ // au final le noeud est une feuille, donc ne convient pas
+ return null;
+ }
+
+ // on recherche dans les fils
+ Enumeration<N> enumeration = children();
+ while (enumeration.hasMoreElements()) {
+ N node = enumeration.nextElement();
+ N nodeById = node.findNodeById(id, model, provider);
+ if (nodeById != null) {
+ return nodeById;
+ }
+ }
+
+ // aucun des noeud fils ne convient
+ return null;
+ }
+
+ @Override
+ public void setDirty(boolean dirty) {
+ this.dirty = dirty;
+ }
+
+ @Override
+ public boolean isLeaf() {
+ // there is two behaviours for the test :
+ // 1 - when the node is static, then can directly use his number of child
+ // to determine if node is a leaf (no child)
+ // 2 - when the node is dynamic, then ALWAYS says the node is NOT a leaf until
+ // it was loaded, otherwise the WillExpand listener will not load the childs...
+ // Once the node is loaded, use back the normal behaviour (count number of childs)
+ return isStaticNode() ? super.isLeaf() : isLoaded() && getChildCount() == 0;
+ }
+
+ @Override
+ public Object getUserObject() {
+ return id;
+ }
+
+ @Override
+ public String toString() {
+ return System.identityHashCode(this) + "-" + id;
+ }
+
+ //--------------------------------------------------------------------------
+ //-- Populate methods
+ //--------------------------------------------------------------------------
+
+ @Override
+ public void populateNode(NavBridge<DefaultTreeModel, N> model,
+ NavDataProvider provider,
+ boolean populateChilds) {
+
+ // on indique que le noeud n'est plus propre
+ setDirty(true);
+
+ if (populateChilds) {
+
+ // chargement des fils
+ populateChilds(model, provider);
+ }
+ }
+
+ @Override
+ @SuppressWarnings({"unchecked"})
+ public void populateChilds(NavBridge<DefaultTreeModel, N> model, NavDataProvider provider) {
+ if (isStaticNode()) {
+
+ log.debug("is static node " + this);
+
+ // noeud static, rien a faire
+ return;
+ }
+
+ // chargement des noeuds fils du noeud courant
+ try {
+ if (log.isDebugEnabled()) {
+ log.debug("Will load childs for " + this);
+ }
+ childLoador.loadChilds((NavTreeBridge<N>) model, (N) this, provider);
+ } catch (Exception e) {
+ throw new RuntimeException(e.getMessage(), e);
+ } finally {
+
+ // au final, on passe le noeud a l'état chargé
+ loaded = true;
+ }
+ }
+
+ //--------------------------------------------------------------------------
+ //-- Overrides to use generic type as return
+ //--------------------------------------------------------------------------
+
+ @SuppressWarnings({"unchecked"})
+ @Override
+ public N getParent() {
+ return (N) super.getParent();
+ }
+
+ @SuppressWarnings({"unchecked"})
+ @Override
+ public N getRoot() {
+ return (N) super.getRoot();
+ }
+
+ @SuppressWarnings({"unchecked"})
+ @Override
+ public N getFirstChild() {
+ return (N) super.getFirstChild();
+ }
+
+ @SuppressWarnings({"unchecked"})
+ @Override
+ public N getLastChild() {
+ return (N) super.getLastChild();
+ }
+
+ @SuppressWarnings({"unchecked"})
+ @Override
+ public N getChildAfter(TreeNode aChild) {
+ return (N) super.getChildAfter(aChild);
+ }
+
+ @SuppressWarnings({"unchecked"})
+ @Override
+ public N getChildBefore(TreeNode aChild) {
+ return (N) super.getChildBefore(aChild);
+ }
+
+ @SuppressWarnings({"unchecked"})
+ @Override
+ public N getNextSibling() {
+ return (N) super.getNextSibling();
+ }
+
+ @SuppressWarnings({"unchecked"})
+ @Override
+ public N getPreviousSibling() {
+ return (N) super.getPreviousSibling();
+ }
+
+ @SuppressWarnings({"unchecked"})
+ @Override
+ public N getFirstLeaf() {
+ return (N) super.getFirstLeaf();
+ }
+
+ @SuppressWarnings({"unchecked"})
+ @Override
+ public N getLastLeaf() {
+ return (N) super.getLastLeaf();
+ }
+
+ @SuppressWarnings({"unchecked"})
+ @Override
+ public N getNextLeaf() {
+ return (N) super.getNextLeaf();
+ }
+
+ @SuppressWarnings({"unchecked"})
+ @Override
+ public N getPreviousLeaf() {
+ return (N) super.getPreviousLeaf();
+ }
+
+ @SuppressWarnings({"unchecked"})
+ @Override
+ public N getNextNode() {
+ return (N) super.getNextNode();
+ }
+
+ @SuppressWarnings({"unchecked"})
+ @Override
+ public N getPreviousNode() {
+ return (N) super.getPreviousNode();
+ }
+
+ @SuppressWarnings({"unchecked"})
+ public N getSharedAncestor(N aNode) {
+ return (N) getSharedAncestor((DefaultMutableTreeNode) aNode);
+ }
+
+ @SuppressWarnings({"unchecked"})
+ @Override
+ public N getChildAt(int index) {
+ return (N) super.getChildAt(index);
+ }
+
+ @SuppressWarnings({"unchecked"})
+ @Override
+ public Enumeration<N> children() {
+ return (Enumeration<N>) super.children();
+ }
+
+ @Override
+ public void add(N node) {
+ super.add(node);
+ }
+
+ @Override
+ public void remove(N node) {
+ super.remove(node);
+ }
+
+ @Override
+ public void insert(N node, int position) {
+ super.insert(node, position);
+ }
+}
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/NavTreeNode.java
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Copied: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/NavTreeNodeChildLoador.java (from rev 2012, trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/JaxxTreeNodeChildLoador.java)
===================================================================
--- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/NavTreeNodeChildLoador.java (rev 0)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/NavTreeNodeChildLoador.java 2010-06-30 17:24:16 UTC (rev 2014)
@@ -0,0 +1,42 @@
+/*
+ * #%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.NavNodeChildLoador;
+
+import javax.swing.tree.DefaultTreeModel;
+
+/**
+ * Implementation for tree of {@link NavNodeChildLoador}
+ *
+ * @author sletellier <letellier(a)codelutin.com>
+ * @since 2.2
+ */
+public abstract class NavTreeNodeChildLoador<T, O, N extends NavTreeNode<N>> extends NavNodeChildLoador<T, O, DefaultTreeModel, NavTreeBridge<N>, N> {
+
+ protected NavTreeNodeChildLoador(Class<O> beanType) {
+ super(beanType);
+ }
+}
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/NavTreeNodeChildLoador.java
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Added: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/package.html
===================================================================
--- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/package.html (rev 0)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/package.html 2010-06-30 17:24:16 UTC (rev 2014)
@@ -0,0 +1,20 @@
+package.html<html>
+<body>
+<h1>JAXX - nav tree implementation</h1>
+
+This package contains the implementation of nav api for the <b>JTree</b>
+
+<h2>NavTreeNode</h2>
+An override of DefaultMutableTreeNode implement JaxxNode.
+
+<h2>NavTreeChildLoador</h2>
+Object to load childs of a tree node using DataProvider.
+
+<h2>NavTreeHelper</h2>
+Helper to manage a tree using auto-loading nodes.
+
+<h2>AbstractNavTreeCellRenderer</h2>
+Abstract renderer using DataProvider to acquire node render.
+
+</body>
+</html>
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/package.html
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Deleted: 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 2010-06-30 16:48:34 UTC (rev 2013)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/JaxxTreeTableBridge.java 2010-06-30 17:24:16 UTC (rev 2014)
@@ -1,289 +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.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(a)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
Deleted: 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 2010-06-30 16:48:34 UTC (rev 2013)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/JaxxTreeTableHelper.java 2010-06-30 17:24:16 UTC (rev 2014)
@@ -1,140 +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.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(a)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
Deleted: 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-30 16:48:34 UTC (rev 2013)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/JaxxTreeTableModel.java 2010-06-30 17:24:16 UTC (rev 2014)
@@ -1,219 +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.treetable;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.jdesktop.swingx.tree.TreeModelSupport;
-import org.jdesktop.swingx.treetable.DefaultTreeTableModel;
-import org.jdesktop.swingx.treetable.TreeTableModel;
-import org.jdesktop.swingx.treetable.TreeTableNode;
-
-import javax.swing.event.TreeModelListener;
-import javax.swing.tree.TreeNode;
-import javax.swing.tree.TreePath;
-
-/**
- * Model of the tree table used for a jaxx tree table api.
- *
- * @author sletellier <letellier(a)codelutin.com>
- * @since 2.2
- */
-public class JaxxTreeTableModel implements TreeTableModel {
-
- /**
- * Logger
- */
- static private final Log log = LogFactory.getLog(JaxxTreeTableModel.class);
-
- /**
- * Hack to acces to the modelSupport
- *
- * @author sletellier
- * @since 2.2
- */
- public static abstract class MyDefaultTreeTableModel extends DefaultTreeTableModel {
-
- public TreeModelSupport getModelSupport() {
- return modelSupport;
- }
-
- public abstract String[] getColumnsNames();
-
- }
-
- /**
- * the delegate model
- */
- protected MyDefaultTreeTableModel delegate;
-
- public JaxxTreeTableModel(MyDefaultTreeTableModel delegate) {
- this.delegate = delegate;
- }
-
- @SuppressWarnings({"SuspiciousSystemArraycopy"})
- public TreeTableNode[] getPathToRoot(TreeTableNode aNode) {
- if (aNode == null) {
- return null;
- }
- TreeNode[] treeNodes = getDelegate().getPathToRoot(aNode);
- JaxxTreeTableNode<?>[] result = new JaxxTreeTableNode[treeNodes.length];
- System.arraycopy(treeNodes, 0, result, 0, treeNodes.length);
- return result;
- }
-
- public void nodeStructureChanged(JaxxTreeTableNode<?> node) {
- if (node != null) {
- JaxxTreeTableNode<?> parentNode = node.getParent();
- if (parentNode == null || parentNode.isRoot()) {
- getModelSupport().fireNewRoot();
- } else {
- TreeNode[] treeNodes = getPathToRoot(parentNode);
- if (treeNodes != null) {
- getModelSupport().fireTreeStructureChanged(new TreePath(treeNodes));
- }
- // FIXME : it's append....
-// else {
-// log.error("[Node structure changed] Path to root is null !");
-// }
- }
- } else {
- log.error("Node is null !");
- }
- }
-
- public void nodeChanged(JaxxTreeTableNode<?> node) {
- if (node != null) {
- JaxxTreeTableNode<?> parent = node.getParent();
- TreeNode[] treeNodes = getPathToRoot(parent);
- if (treeNodes != null) {
- getModelSupport().fireChildChanged(
- new TreePath(treeNodes), parent.getIndex(node), node);
- // FIXME : it's append....
-// else {
-// log.error("[Node changed] Path to root is null !");
-// }
- }
- } else {
- log.error("Node is null !");
- }
- }
-
- public MyDefaultTreeTableModel getDelegate() {
- return delegate;
- }
-
- public TreeModelSupport getModelSupport() {
- return delegate.getModelSupport();
- }
-
- public String[] getColomnsNames() {
- return delegate.getColumnsNames();
- }
-
- public void setRoot(TreeTableNode root) {
- delegate.setRoot(root);
- }
-
- //--------------------------------------------------------------------------
- //-- Overrides delegate methode
- //--------------------------------------------------------------------------
-
- @Override
- public TreeTableNode getRoot() {
- return delegate.getRoot();
- }
-
- @Override
- public Object getChild(Object parent, int index) {
- return delegate.getChild(parent, index);
- }
-
- @Override
- public int getChildCount(Object parent) {
- return delegate.getChildCount(parent);
- }
-
- @Override
- public boolean isLeaf(Object node) {
- return delegate.isLeaf(node);
- }
-
- @Override
- public void valueForPathChanged(TreePath path, Object newValue) {
- delegate.valueForPathChanged(path, newValue);
- }
-
- @Override
- public int getIndexOfChild(Object parent, Object child) {
- return delegate.getIndexOfChild(parent, child);
- }
-
- @Override
- public void addTreeModelListener(TreeModelListener l) {
- delegate.addTreeModelListener(l);
- }
-
- @Override
- public void removeTreeModelListener(TreeModelListener l) {
- delegate.removeTreeModelListener(l);
- }
-
- @Override
- public Class<?> getColumnClass(int i) {
- return getDelegate().getColumnClass(i);
- }
-
- @Override
- public int getColumnCount() {
- return getColomnsNames().length;
- }
-
- @Override
- public String getColumnName(int column) {
- return getColomnsNames()[column];
- }
-
- @Override
- public int getHierarchicalColumn() {
- return getDelegate().getHierarchicalColumn();
- }
-
- @Override
- public Object getValueAt(Object o, int i) {
- return getDelegate().getValueAt(o, i);
- }
-
- @Override
- public boolean isCellEditable(Object o, int i) {
- return getDelegate().isCellEditable(o, i);
- }
-
- @Override
- public void setValueAt(Object o, Object o1, int i) {
- getDelegate().setValueAt(o, o1, i);
- }
-
-}
Deleted: 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-30 16:48:34 UTC (rev 2013)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/JaxxTreeTableNode.java 2010-06-30 17:24:16 UTC (rev 2014)
@@ -1,321 +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.treetable;
-
-import jaxx.runtime.swing.nav.DataProvider;
-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.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 JXTreeTable}
- *
- * @author sletellier <letellier(a)codelutin.com>
- * @since 2.2
- */
-public class JaxxTreeTableNode<N extends JaxxTreeTableNode<N>> extends DefaultMutableTreeTableNode implements JaxxNode<JaxxTreeTableModel, N> {
-
- /** Logger */
- static private final Log log = LogFactory.getLog(JaxxNode.class);
-
- private static final long serialVersionUID = 1L;
-
- /** Type of data associated with the node */
- protected final Class<?> internalClass;
-
- /**
- * Optinal context to distinguish different nodes with same
- * {@link #internalClass}.
- */
- protected final String context;
-
- /** Id of the data associated with the node. */
- protected final String id;
-
- /** Flag to know when renderer should (re-)compute render of the node. */
- protected boolean dirty = true;
-
- /** Flag to know when the none static node was loaded. */
- protected boolean loaded;
-
- /** Optional child loador to lazy create childs of the node. */
- protected final JaxxTreeTableNodeChildLoador<?, ?, N> childLoador;
-
- protected JaxxTreeTableNode(String id) {
- this(String.class, id, null, null);
- }
-
- public JaxxTreeTableNode(Class<?> internalClass,
- String id,
- String context,
- JaxxTreeTableNodeChildLoador<?, ?, N> childLoador) {
- this.internalClass = internalClass;
- this.id = id;
- this.context = context;
- this.childLoador = childLoador;
- if (isStaticNode()) {
-
- // A static node is always full loaded
- loaded = true;
- }
- if (log.isDebugEnabled()) {
- log.debug("new node : " + this);
- }
- }
-
- @Override
- public String getId() {
- return id;
- }
-
- @Override
- public String getContext() {
- return context;
- }
-
- @Override
- public Class<?> getInternalClass() {
- return internalClass;
- }
-
- @Override
- public boolean isLoaded() {
- return loaded;
- }
-
- @Override
- public boolean isDirty() {
- return dirty;
- }
-
- @Override
- public boolean isStringNode() {
- return String.class.equals(internalClass);
- }
-
- @Override
- public boolean isStaticNode() {
- return childLoador == null;
- }
-
- @Override
- @SuppressWarnings({"unchecked"})
- public N getContainerNode() {
- if (isRoot()) {
- // si on arrive sur le root, quelque chose ne va pas,
- // on bloque par null, a defaut de declancher une exception
- return null;
- }
-
- if (isStringNode()) {
- // on est sur un noeud de type String, donc on regarde sur le parent
- return getParent().getContainerNode();
- }
-
- // cas final : sur un noeud de donnee + classe interne de donnee
- return (N) this;
- }
-
- public boolean isRoot() {
- return getParent() == null;
- }
-
- @Override
- @SuppressWarnings({"unchecked"})
- public N findNodeById(String id,
- JaxxNavBridge<JaxxTreeTableModel, N> model,
- DataProvider provider) {
- if (id == null) {
-
- // id null ? donc rien a faire
- return null;
- }
- if (id.equals(getId())) {
-
- // on a trouve le bon noeud
- return (N) this;
- }
-
- if (!isLoaded()) {
-
- // il faut charger les fils du noeud pour effectuer la recherche
- populateChilds(model, provider);
- }
-
- if (isLeaf()) {
-
- // au final le noeud est une feuille, donc ne convient pas
- return null;
- }
-
- // on recherche dans les fils
- Enumeration<N> enumeration = children();
- while (enumeration.hasMoreElements()) {
- N node = enumeration.nextElement();
- N nodeById = node.findNodeById(id, model, provider);
- if (nodeById != null) {
- return nodeById;
- }
- }
-
- // aucun des noeud fils ne convient
- return null;
- }
-
- @Override
- public void setDirty(boolean dirty) {
- this.dirty = dirty;
- }
-
- @Override
- public boolean isLeaf() {
- // there is two behaviours for the test :
- // 1 - when the node is static, then can directly use his number of child
- // to determine if node is a leaf (no child)
- // 2 - when the node is dynamic, then ALWAYS says the node is NOT a leaf until
- // it was loaded, otherwise the WillExpand listener will not load the childs...
- // Once the node is loaded, use back the normal behaviour (count number of childs)
- return isStaticNode() ? super.isLeaf() : isLoaded() && getChildCount() == 0;
- }
-
- @Override
- public Object getUserObject() {
- return id;
- }
-
- @Override
- public String toString() {
- return System.identityHashCode(this) + "-" + id;
- }
-
- //--------------------------------------------------------------------------
- //-- Populate methods
- //--------------------------------------------------------------------------
-
- @Override
- public void populateNode(JaxxNavBridge<JaxxTreeTableModel, N> model,
- DataProvider provider,
- boolean populateChilds) {
-
- // on indique que le noeud n'est plus propre
- setDirty(true);
-
- if (populateChilds) {
-
- // chargement des fils
- populateChilds(model, provider);
- }
- }
-
- @Override
- @SuppressWarnings({"unchecked"})
- public void populateChilds(JaxxNavBridge<JaxxTreeTableModel, N> model,
- DataProvider provider) {
- if (isStaticNode()) {
-
- // noeud static, rien a faire
- return;
- }
-
- // chargement des noeuds fils du noeud courant
- try {
- if (log.isDebugEnabled()) {
- log.debug("Will load childs for " + this);
- }
- childLoador.loadChilds((JaxxTreeTableBridge<N>) model, (N) this, provider);
- } catch (Exception e) {
- throw new RuntimeException(e.getMessage(), e);
- } finally {
-
- // au final, on passe le noeud a l'état chargé
- loaded = true;
- }
- }
-
- //--------------------------------------------------------------------------
- //-- Overrides to use generic type as return
- //--------------------------------------------------------------------------
-
- @SuppressWarnings({"unchecked"})
- @Override
- public N getParent() {
- return (N) super.getParent();
- }
-
- @SuppressWarnings({"unchecked"})
- @Override
- public N getChildAt(int index) {
- return (N) super.getChildAt(index);
- }
-
- @SuppressWarnings({"unchecked"})
- @Override
- public Enumeration<N> children() {
- return (Enumeration<N>) super.children();
- }
-
- @Override
- public void add(N node) {
- super.add(node);
- }
-
- @SuppressWarnings({"unchecked"})
- public N[] getPathToRoot(JaxxTreeTableNode aNode, int depth) {
-
- JaxxTreeTableNode[] retNodes;
-
- /* Check for null, in case someone passed in a null node, or
- they passed in an element that isn't rooted at root. */
- if (aNode == null) {
- if (depth == 0) {
- return null;
- } else {
- retNodes = new JaxxTreeTableNode[depth];
- }
- } else {
- depth++;
- retNodes = getPathToRoot(aNode.getParent(), depth);
- retNodes[retNodes.length - depth] = aNode;
- }
- return (N[]) retNodes;
- }
-
- @Override
- public void remove(N node) {
- super.remove(node);
- }
-
- @Override
- public void insert(N node, int position) {
- super.insert(node, position);
- }
-}
Deleted: 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-30 16:48:34 UTC (rev 2013)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/JaxxTreeTableNodeChildLoador.java 2010-06-30 17:24:16 UTC (rev 2014)
@@ -1,40 +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.treetable;
-
-import jaxx.runtime.swing.nav.JaxxNodeChildLoador;
-
-/**
- * Implementation for tree table of {@link JaxxNodeChildLoador}
- *
- * @author sletellier <letellier(a)codelutin.com>
- * @since 2.2
- */
-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);
- }
-}
Copied: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/NavTreeTableBridge.java (from rev 2012, trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/JaxxTreeTableBridge.java)
===================================================================
--- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/NavTreeTableBridge.java (rev 0)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/NavTreeTableBridge.java 2010-06-30 17:24:16 UTC (rev 2014)
@@ -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.NavBridge;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.jdesktop.swingx.JXTreeTable;
+import org.jdesktop.swingx.treetable.TreeTableNode;
+
+import javax.swing.event.TreeModelListener;
+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(a)codelutin.com>
+ * @since 2.1
+ */
+public class NavTreeTableBridge<N extends NavTreeTableNode<N>> implements NavBridge<NavTreeTableModel, N> {
+
+ /** Logger */
+ static private final Log log = LogFactory.getLog(NavTreeTableBridge.class);
+
+ /** bridge model */
+ protected NavTreeTableModel model;
+
+ /** bridge ui */
+ protected JXTreeTable ui;
+
+ public NavTreeTableBridge() {
+ if (log.isDebugEnabled()) {
+ log.debug("New " + this);
+ }
+ }
+
+ //--------------------------------------------------------------------------
+ //-- Model Queries
+ //--------------------------------------------------------------------------
+
+ @Override
+ public NavTreeTableModel 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(NavTreeTableModel 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((NavTreeTableNode<?>) node);
+ }
+
+ @Override
+ public void nodeChanged(TreeNode node) {
+ model.nodeChanged((NavTreeTableNode<?>) 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((NavTreeTableNode<?>) 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 AbstractNavTreeCellRenderer<NavTreeTableModel, N> getTreeCellRenderer() {
+// //FIXME Implements it if possible
+// return null;
+// }
+//
+// @SuppressWarnings({"unchecked"})
+// @Override
+// public N getSelectedNode() {
+// TreePath path = getSelectionModel().getSelectionPath();
+// N node = null;
+// if (path != null) {
+// node = (N) path.getLastPathComponent();
+// }
+// return node;
+// }
+
+}
\ No newline at end of file
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/NavTreeTableBridge.java
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Copied: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/NavTreeTableHelper.java (from rev 2012, trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/JaxxTreeTableHelper.java)
===================================================================
--- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/NavTreeTableHelper.java (rev 0)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/NavTreeTableHelper.java 2010-06-30 17:24:16 UTC (rev 2014)
@@ -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.NavHelper;
+import jaxx.runtime.swing.nav.tree.AbstractNavTreeCellRenderer;
+import org.jdesktop.swingx.JXTreeTable;
+
+import javax.swing.event.TreeSelectionListener;
+import javax.swing.tree.TreePath;
+import javax.swing.tree.TreeSelectionModel;
+
+/**
+ * The implementation of {@link NavHelper} based on a {@link JXTreeTable} component.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 2.1
+ */
+public class NavTreeTableHelper<N extends NavTreeTableNode<N>> extends NavHelper<NavTreeTableModel, JXTreeTable, NavTreeTableBridge<N>, N> {
+
+ public NavTreeTableHelper() {
+ super(new NavTreeTableBridge<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 AbstractNavTreeCellRenderer<NavTreeTableModel, N> getTreeCellRenderer() {
+ //FIXME Implements it if possible
+ return null;
+ }
+
+ @SuppressWarnings({"unchecked"})
+ @Override
+ public N getSelectedNode() {
+ TreePath path = getSelectionModel().getSelectionPath();
+ N node = null;
+ if (path != null) {
+ node = (N) path.getLastPathComponent();
+ }
+ return node;
+ }
+
+ /**
+ * 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 NavTreeTableModel 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 NavTreeTableModel.MyDefaultTreeTableModel)) {
+ throw new IllegalArgumentException("extra parameter is not instance of " + NavTreeTableModel.MyDefaultTreeTableModel.class.getName());
+ }
+ NavTreeTableModel.MyDefaultTreeTableModel delegate = (NavTreeTableModel.MyDefaultTreeTableModel) extraArgs[0];
+ NavTreeTableBridge<N> bridge = getBridge();
+ NavTreeTableModel model = bridge.getModel();
+ if (model == null) {
+ model = new NavTreeTableModel(delegate);
+ bridge.setModel(model);
+// model = new NavTreeTableBridge(tableModel);
+ bridge.addTreeModelListener(treeModelListener);
+// ((NavTreeTableModel) 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/NavTreeTableHelper.java
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Copied: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/NavTreeTableModel.java (from rev 2012, trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/JaxxTreeTableModel.java)
===================================================================
--- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/NavTreeTableModel.java (rev 0)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/NavTreeTableModel.java 2010-06-30 17:24:16 UTC (rev 2014)
@@ -0,0 +1,219 @@
+/*
+ * #%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 org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.jdesktop.swingx.tree.TreeModelSupport;
+import org.jdesktop.swingx.treetable.DefaultTreeTableModel;
+import org.jdesktop.swingx.treetable.TreeTableModel;
+import org.jdesktop.swingx.treetable.TreeTableNode;
+
+import javax.swing.event.TreeModelListener;
+import javax.swing.tree.TreeNode;
+import javax.swing.tree.TreePath;
+
+/**
+ * Model of the tree table used for a jaxx tree table api.
+ *
+ * @author sletellier <letellier(a)codelutin.com>
+ * @since 2.2
+ */
+public class NavTreeTableModel implements TreeTableModel {
+
+ /**
+ * Logger
+ */
+ static private final Log log = LogFactory.getLog(NavTreeTableModel.class);
+
+ /**
+ * Hack to acces to the modelSupport
+ *
+ * @author sletellier
+ * @since 2.2
+ */
+ public static abstract class MyDefaultTreeTableModel extends DefaultTreeTableModel {
+
+ public TreeModelSupport getModelSupport() {
+ return modelSupport;
+ }
+
+ public abstract String[] getColumnsNames();
+
+ }
+
+ /**
+ * the delegate model
+ */
+ protected MyDefaultTreeTableModel delegate;
+
+ public NavTreeTableModel(MyDefaultTreeTableModel delegate) {
+ this.delegate = delegate;
+ }
+
+ @SuppressWarnings({"SuspiciousSystemArraycopy"})
+ public TreeTableNode[] getPathToRoot(TreeTableNode aNode) {
+ if (aNode == null) {
+ return null;
+ }
+ TreeNode[] treeNodes = getDelegate().getPathToRoot(aNode);
+ NavTreeTableNode<?>[] result = new NavTreeTableNode[treeNodes.length];
+ System.arraycopy(treeNodes, 0, result, 0, treeNodes.length);
+ return result;
+ }
+
+ public void nodeStructureChanged(NavTreeTableNode<?> node) {
+ if (node != null) {
+ NavTreeTableNode<?> parentNode = node.getParent();
+ if (parentNode == null || parentNode.isRoot()) {
+ getModelSupport().fireNewRoot();
+ } else {
+ TreeNode[] treeNodes = getPathToRoot(parentNode);
+ if (treeNodes != null) {
+ getModelSupport().fireTreeStructureChanged(new TreePath(treeNodes));
+ }
+ // FIXME : it's append....
+// else {
+// log.error("[Node structure changed] Path to root is null !");
+// }
+ }
+ } else {
+ log.error("Node is null !");
+ }
+ }
+
+ public void nodeChanged(NavTreeTableNode<?> node) {
+ if (node != null) {
+ NavTreeTableNode<?> parent = node.getParent();
+ TreeNode[] treeNodes = getPathToRoot(parent);
+ if (treeNodes != null) {
+ getModelSupport().fireChildChanged(
+ new TreePath(treeNodes), parent.getIndex(node), node);
+ // FIXME : it's append....
+// else {
+// log.error("[Node changed] Path to root is null !");
+// }
+ }
+ } else {
+ log.error("Node is null !");
+ }
+ }
+
+ public MyDefaultTreeTableModel getDelegate() {
+ return delegate;
+ }
+
+ public TreeModelSupport getModelSupport() {
+ return delegate.getModelSupport();
+ }
+
+ public String[] getColomnsNames() {
+ return delegate.getColumnsNames();
+ }
+
+ public void setRoot(TreeTableNode root) {
+ delegate.setRoot(root);
+ }
+
+ //--------------------------------------------------------------------------
+ //-- Overrides delegate methode
+ //--------------------------------------------------------------------------
+
+ @Override
+ public TreeTableNode getRoot() {
+ return delegate.getRoot();
+ }
+
+ @Override
+ public Object getChild(Object parent, int index) {
+ return delegate.getChild(parent, index);
+ }
+
+ @Override
+ public int getChildCount(Object parent) {
+ return delegate.getChildCount(parent);
+ }
+
+ @Override
+ public boolean isLeaf(Object node) {
+ return delegate.isLeaf(node);
+ }
+
+ @Override
+ public void valueForPathChanged(TreePath path, Object newValue) {
+ delegate.valueForPathChanged(path, newValue);
+ }
+
+ @Override
+ public int getIndexOfChild(Object parent, Object child) {
+ return delegate.getIndexOfChild(parent, child);
+ }
+
+ @Override
+ public void addTreeModelListener(TreeModelListener l) {
+ delegate.addTreeModelListener(l);
+ }
+
+ @Override
+ public void removeTreeModelListener(TreeModelListener l) {
+ delegate.removeTreeModelListener(l);
+ }
+
+ @Override
+ public Class<?> getColumnClass(int i) {
+ return getDelegate().getColumnClass(i);
+ }
+
+ @Override
+ public int getColumnCount() {
+ return getColomnsNames().length;
+ }
+
+ @Override
+ public String getColumnName(int column) {
+ return getColomnsNames()[column];
+ }
+
+ @Override
+ public int getHierarchicalColumn() {
+ return getDelegate().getHierarchicalColumn();
+ }
+
+ @Override
+ public Object getValueAt(Object o, int i) {
+ return getDelegate().getValueAt(o, i);
+ }
+
+ @Override
+ public boolean isCellEditable(Object o, int i) {
+ return getDelegate().isCellEditable(o, i);
+ }
+
+ @Override
+ public void setValueAt(Object o, Object o1, int i) {
+ getDelegate().setValueAt(o, o1, i);
+ }
+
+}
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/NavTreeTableModel.java
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Copied: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/NavTreeTableNode.java (from rev 2012, trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/JaxxTreeTableNode.java)
===================================================================
--- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/NavTreeTableNode.java (rev 0)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/NavTreeTableNode.java 2010-06-30 17:24:16 UTC (rev 2014)
@@ -0,0 +1,321 @@
+/*
+ * #%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.NavDataProvider;
+import jaxx.runtime.swing.nav.NavBridge;
+import jaxx.runtime.swing.nav.NavNode;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.jdesktop.swingx.JXTreeTable;
+import org.jdesktop.swingx.treetable.DefaultMutableTreeTableNode;
+
+import java.util.Enumeration;
+
+/**
+ * Implementation of {@link NavNode} used to create in tree table
+ * This node extends {@link DefaultMutableTreeTableNode} used by
+ * {@link JXTreeTable}
+ *
+ * @author sletellier <letellier(a)codelutin.com>
+ * @since 2.2
+ */
+public class NavTreeTableNode<N extends NavTreeTableNode<N>> extends DefaultMutableTreeTableNode implements NavNode<NavTreeTableModel, N> {
+
+ /** Logger */
+ static private final Log log = LogFactory.getLog(NavNode.class);
+
+ private static final long serialVersionUID = 1L;
+
+ /** Type of data associated with the node */
+ protected final Class<?> internalClass;
+
+ /**
+ * Optinal context to distinguish different nodes with same
+ * {@link #internalClass}.
+ */
+ protected final String context;
+
+ /** Id of the data associated with the node. */
+ protected final String id;
+
+ /** Flag to know when renderer should (re-)compute render of the node. */
+ protected boolean dirty = true;
+
+ /** Flag to know when the none static node was loaded. */
+ protected boolean loaded;
+
+ /** Optional child loador to lazy create childs of the node. */
+ protected final NavTreeTableNodeChildLoador<?, ?, N> childLoador;
+
+ protected NavTreeTableNode(String id) {
+ this(String.class, id, null, null);
+ }
+
+ public NavTreeTableNode(Class<?> internalClass,
+ String id,
+ String context,
+ NavTreeTableNodeChildLoador<?, ?, N> childLoador) {
+ this.internalClass = internalClass;
+ this.id = id;
+ this.context = context;
+ this.childLoador = childLoador;
+ if (isStaticNode()) {
+
+ // A static node is always full loaded
+ loaded = true;
+ }
+ if (log.isDebugEnabled()) {
+ log.debug("new node : " + this);
+ }
+ }
+
+ @Override
+ public String getId() {
+ return id;
+ }
+
+ @Override
+ public String getContext() {
+ return context;
+ }
+
+ @Override
+ public Class<?> getInternalClass() {
+ return internalClass;
+ }
+
+ @Override
+ public boolean isLoaded() {
+ return loaded;
+ }
+
+ @Override
+ public boolean isDirty() {
+ return dirty;
+ }
+
+ @Override
+ public boolean isStringNode() {
+ return String.class.equals(internalClass);
+ }
+
+ @Override
+ public boolean isStaticNode() {
+ return childLoador == null;
+ }
+
+ @Override
+ @SuppressWarnings({"unchecked"})
+ public N getContainerNode() {
+ if (isRoot()) {
+ // si on arrive sur le root, quelque chose ne va pas,
+ // on bloque par null, a defaut de declancher une exception
+ return null;
+ }
+
+ if (isStringNode()) {
+ // on est sur un noeud de type String, donc on regarde sur le parent
+ return getParent().getContainerNode();
+ }
+
+ // cas final : sur un noeud de donnee + classe interne de donnee
+ return (N) this;
+ }
+
+ public boolean isRoot() {
+ return getParent() == null;
+ }
+
+ @Override
+ @SuppressWarnings({"unchecked"})
+ public N findNodeById(String id,
+ NavBridge<NavTreeTableModel, N> model,
+ NavDataProvider provider) {
+ if (id == null) {
+
+ // id null ? donc rien a faire
+ return null;
+ }
+ if (id.equals(getId())) {
+
+ // on a trouve le bon noeud
+ return (N) this;
+ }
+
+ if (!isLoaded()) {
+
+ // il faut charger les fils du noeud pour effectuer la recherche
+ populateChilds(model, provider);
+ }
+
+ if (isLeaf()) {
+
+ // au final le noeud est une feuille, donc ne convient pas
+ return null;
+ }
+
+ // on recherche dans les fils
+ Enumeration<N> enumeration = children();
+ while (enumeration.hasMoreElements()) {
+ N node = enumeration.nextElement();
+ N nodeById = node.findNodeById(id, model, provider);
+ if (nodeById != null) {
+ return nodeById;
+ }
+ }
+
+ // aucun des noeud fils ne convient
+ return null;
+ }
+
+ @Override
+ public void setDirty(boolean dirty) {
+ this.dirty = dirty;
+ }
+
+ @Override
+ public boolean isLeaf() {
+ // there is two behaviours for the test :
+ // 1 - when the node is static, then can directly use his number of child
+ // to determine if node is a leaf (no child)
+ // 2 - when the node is dynamic, then ALWAYS says the node is NOT a leaf until
+ // it was loaded, otherwise the WillExpand listener will not load the childs...
+ // Once the node is loaded, use back the normal behaviour (count number of childs)
+ return isStaticNode() ? super.isLeaf() : isLoaded() && getChildCount() == 0;
+ }
+
+ @Override
+ public Object getUserObject() {
+ return id;
+ }
+
+ @Override
+ public String toString() {
+ return System.identityHashCode(this) + "-" + id;
+ }
+
+ //--------------------------------------------------------------------------
+ //-- Populate methods
+ //--------------------------------------------------------------------------
+
+ @Override
+ public void populateNode(NavBridge<NavTreeTableModel, N> model,
+ NavDataProvider provider,
+ boolean populateChilds) {
+
+ // on indique que le noeud n'est plus propre
+ setDirty(true);
+
+ if (populateChilds) {
+
+ // chargement des fils
+ populateChilds(model, provider);
+ }
+ }
+
+ @Override
+ @SuppressWarnings({"unchecked"})
+ public void populateChilds(NavBridge<NavTreeTableModel, N> model,
+ NavDataProvider provider) {
+ if (isStaticNode()) {
+
+ // noeud static, rien a faire
+ return;
+ }
+
+ // chargement des noeuds fils du noeud courant
+ try {
+ if (log.isDebugEnabled()) {
+ log.debug("Will load childs for " + this);
+ }
+ childLoador.loadChilds((NavTreeTableBridge<N>) model, (N) this, provider);
+ } catch (Exception e) {
+ throw new RuntimeException(e.getMessage(), e);
+ } finally {
+
+ // au final, on passe le noeud a l'état chargé
+ loaded = true;
+ }
+ }
+
+ //--------------------------------------------------------------------------
+ //-- Overrides to use generic type as return
+ //--------------------------------------------------------------------------
+
+ @SuppressWarnings({"unchecked"})
+ @Override
+ public N getParent() {
+ return (N) super.getParent();
+ }
+
+ @SuppressWarnings({"unchecked"})
+ @Override
+ public N getChildAt(int index) {
+ return (N) super.getChildAt(index);
+ }
+
+ @SuppressWarnings({"unchecked"})
+ @Override
+ public Enumeration<N> children() {
+ return (Enumeration<N>) super.children();
+ }
+
+ @Override
+ public void add(N node) {
+ super.add(node);
+ }
+
+ @SuppressWarnings({"unchecked"})
+ public N[] getPathToRoot(NavTreeTableNode aNode, int depth) {
+
+ NavTreeTableNode[] retNodes;
+
+ /* Check for null, in case someone passed in a null node, or
+ they passed in an element that isn't rooted at root. */
+ if (aNode == null) {
+ if (depth == 0) {
+ return null;
+ } else {
+ retNodes = new NavTreeTableNode[depth];
+ }
+ } else {
+ depth++;
+ retNodes = getPathToRoot(aNode.getParent(), depth);
+ retNodes[retNodes.length - depth] = aNode;
+ }
+ return (N[]) retNodes;
+ }
+
+ @Override
+ public void remove(N node) {
+ super.remove(node);
+ }
+
+ @Override
+ public void insert(N node, int position) {
+ super.insert(node, position);
+ }
+}
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/NavTreeTableNode.java
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Copied: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/NavTreeTableNodeChildLoador.java (from rev 2012, trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/JaxxTreeTableNodeChildLoador.java)
===================================================================
--- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/NavTreeTableNodeChildLoador.java (rev 0)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/NavTreeTableNodeChildLoador.java 2010-06-30 17:24:16 UTC (rev 2014)
@@ -0,0 +1,40 @@
+/*
+ * #%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.NavNodeChildLoador;
+
+/**
+ * Implementation for tree table of {@link NavNodeChildLoador}
+ *
+ * @author sletellier <letellier(a)codelutin.com>
+ * @since 2.2
+ */
+public abstract class NavTreeTableNodeChildLoador<T, O, N extends NavTreeTableNode<N>> extends NavNodeChildLoador<T, O, NavTreeTableModel, NavTreeTableBridge<N>, N> {
+
+ protected NavTreeTableNodeChildLoador(Class<O> beanType) {
+ super(beanType);
+ }
+}
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/NavTreeTableNodeChildLoador.java
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Added: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/package.html
===================================================================
--- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/package.html (rev 0)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/package.html 2010-06-30 17:24:16 UTC (rev 2014)
@@ -0,0 +1,21 @@
+package.html
+<html>
+<body>
+<h1>JAXX - nav tree table implementation</h1>
+
+This package contains the implementation of nav api for the <b>JXTreeTable</b>
+
+<h2>NavTreeTableNode</h2>
+An override of DefaultMutableTreeTableNode implement JaxxNode
+
+<h2>NavTreeTableChildLoador</h2>
+Object to load childs of a tree table node using DataProvider.
+
+<h2>NavTreeTableHelper</h2>
+Helper to manage a tree table using auto-loading nodes.
+
+<h2>JaxxTreeTableModel</h2>
+Implementation of TreeTableModel used by JaxxDelegateTreeModel
+
+</body>
+</html>
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/package.html
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
1
0
r2013 - trunk/jaxx-runtime/src/main/java/jaxx/runtime/binding
by tchemit@users.nuiton.org 30 Jun '10
by tchemit@users.nuiton.org 30 Jun '10
30 Jun '10
Author: tchemit
Date: 2010-06-30 18:48:34 +0200 (Wed, 30 Jun 2010)
New Revision: 2013
Url: http://nuiton.org/repositories/revision/jaxx/2013
Log:
update javadoc
Modified:
trunk/jaxx-runtime/src/main/java/jaxx/runtime/binding/SimpleJAXXObjectBinding.java
Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/binding/SimpleJAXXObjectBinding.java
===================================================================
--- trunk/jaxx-runtime/src/main/java/jaxx/runtime/binding/SimpleJAXXObjectBinding.java 2010-06-30 16:47:57 UTC (rev 2012)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/binding/SimpleJAXXObjectBinding.java 2010-06-30 16:48:34 UTC (rev 2013)
@@ -43,7 +43,7 @@
* Creates a new Data binding which will run the given data binding
* when it receives a <code>PropertyChangeEvent</code>.
*
- * @param source the {@link jaxx.runtime.JAXXObject} source of the binding
+ * @param source the {@link JAXXObject} source of the binding
* @param id the name of the data binding to run
* @param defaultBinding flag to knwon if binding is coming from a generated jaxx object ({@code true}).
* @param propertyNames the name of properties to listen on source
1
0
Author: tchemit
Date: 2010-06-30 18:47:57 +0200 (Wed, 30 Jun 2010)
New Revision: 2012
Url: http://nuiton.org/repositories/revision/jaxx/2012
Log:
update svn:keywords
Modified:
trunk/jaxx-compiler/src/license/THIRD-PARTY.properties
trunk/jaxx-compiler/src/main/java/jaxx/compiler/JAXXCompilerFile.java
trunk/jaxx-compiler/src/main/java/jaxx/compiler/JAXXFactory.java
trunk/jaxx-compiler/src/main/java/jaxx/compiler/reflect/ClassDescriptorHelper.java
trunk/jaxx-compiler/src/main/java/jaxx/compiler/reflect/ClassDescriptorResolver.java
trunk/jaxx-compiler/src/main/java/jaxx/compiler/reflect/resolvers/ClassDescriptorResolverFromJavaClass.java
trunk/jaxx-compiler/src/main/java/jaxx/compiler/reflect/resolvers/ClassDescriptorResolverFromJavaFile.java
trunk/jaxx-compiler/src/main/java/jaxx/compiler/reflect/resolvers/ClassDescriptorResolverFromJaxxFile.java
trunk/jaxx-compiler/src/main/java/jaxx/compiler/tags/ImportHandler.java
trunk/jaxx-compiler/src/main/java/jaxx/compiler/tasks/CompileFirstPassTask.java
trunk/jaxx-compiler/src/main/java/jaxx/compiler/tasks/CompileSecondPassTask.java
trunk/jaxx-compiler/src/main/java/jaxx/compiler/tasks/FinalizeTask.java
trunk/jaxx-compiler/src/main/java/jaxx/compiler/tasks/GenerateTask.java
trunk/jaxx-compiler/src/main/java/jaxx/compiler/tasks/InitTask.java
trunk/jaxx-compiler/src/main/java/jaxx/compiler/tasks/JAXXEngineTask.java
trunk/jaxx-compiler/src/main/java/jaxx/compiler/tasks/ProfileTask.java
trunk/jaxx-compiler/src/main/java/jaxx/compiler/tasks/StyleSheetTask.java
trunk/jaxx-compiler/src/test/java/jaxx/compiler/reflect/MyAbstractClass.java
trunk/jaxx-compiler/src/test/java/jaxx/compiler/reflect/MyClass.java
trunk/jaxx-compiler/src/test/java/jaxx/compiler/reflect/MyInterface.java
trunk/jaxx-compiler/src/test/java/jaxx/compiler/reflect/MyInterface2.java
trunk/jaxx-compiler/src/test/java/jaxx/compiler/reflect/MyInterface3.java
trunk/jaxx-compiler/src/test/java/jaxx/compiler/reflect/resolvers/ClassDescriptorResolverFromJavaFileTest.java
trunk/jaxx-demo/src/license/THIRD-PARTY.properties
trunk/jaxx-demo/src/main/java/jaxx/demo/DemoTab.jaxx
trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/JaxxNavDemo.jaxx
trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/NavDemoDataProvider.java
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/component/jaxx/nav/content/MoviesContentUI.jaxx
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-demo/src/main/java/jaxx/demo/entities/Identity.java
trunk/jaxx-demo/src/main/java/jaxx/demo/entities/Model.java
trunk/jaxx-demo/src/main/java/jaxx/demo/entities/Movie.java
trunk/jaxx-demo/src/main/java/jaxx/demo/entities/People.java
trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoCellRenderer.java
trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoDataProvider.java
trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoNode.java
trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoNodeLoador.java
trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoTreeHelper.java
trunk/jaxx-demo/src/main/resources/jaxx/demo/entities/Identity-error-validation.xml
trunk/jaxx-demo/src/main/resources/jaxx/demo/entities/Identity-info-validation.xml
trunk/jaxx-demo/src/main/resources/jaxx/demo/entities/Identity-warning-validation.xml
trunk/jaxx-demo/src/main/resources/jaxx/demo/entities/Model-error-validation.xml
trunk/jaxx-demo/src/main/resources/jaxx/demo/entities/Model-info-validation.xml
trunk/jaxx-demo/src/main/resources/jaxx/demo/entities/Model-warning-validation.xml
trunk/jaxx-runtime/src/license/THIRD-PARTY.properties
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/application/ActionExecutor.java
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/application/ActionWorker.java
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/application/ApplicationRunner.java
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/DataProvider.java
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxNavBridge.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/package.html
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/AbstractJaxxTreeCellRenderer.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/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/JaxxTreeTableBridge.java
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/JaxxTreeTableHelper.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
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/wizard/BusyChangeListener.java
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/wizard/ext/WizardExtModel.java
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/wizard/ext/WizardExtStep.java
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/wizard/ext/WizardExtStepModel.java
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/wizard/ext/WizardExtUI.java
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/wizard/ext/WizardExtUtil.java
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/wizard/ext/package.html
trunk/jaxx-tutorial-config/LICENSE.txt
trunk/jaxx-tutorial-config/README.txt
trunk/jaxx-tutorial-config/changelog.txt
trunk/jaxx-tutorial-config/pom.xml
trunk/jaxx-tutorial-config/src/license/THIRD-PARTY.properties
trunk/jaxx-tutorial-config/src/main/java/jaxx/demo/config/DemoConfig.java
trunk/jaxx-tutorial-config/src/main/java/jaxx/demo/config/RunDemo.java
trunk/jaxx-tutorial-config/src/main/resources/i18n/jaxx-tutorial-config-en_GB.properties
trunk/jaxx-tutorial-config/src/main/resources/i18n/jaxx-tutorial-config-fr_FR.properties
trunk/jaxx-tutorial-config/src/main/resources/icons/action-about.png
trunk/jaxx-tutorial-config/src/main/resources/icons/action-accept.png
trunk/jaxx-tutorial-config/src/main/resources/icons/action-block.png
trunk/jaxx-tutorial-config/src/main/resources/icons/action-close.png
trunk/jaxx-tutorial-config/src/main/resources/icons/action-config.png
trunk/jaxx-tutorial-config/src/main/resources/icons/action-exit.png
trunk/jaxx-tutorial-config/src/main/resources/icons/action-fullscreen.png
trunk/jaxx-tutorial-config/src/main/resources/icons/action-help.png
trunk/jaxx-tutorial-config/src/main/resources/icons/action-i18n-fr.png
trunk/jaxx-tutorial-config/src/main/resources/icons/action-i18n-uk.png
trunk/jaxx-tutorial-config/src/main/resources/icons/action-leave-fullscreen.png
trunk/jaxx-tutorial-config/src/main/resources/icons/action-reload-application.png
trunk/jaxx-tutorial-config/src/main/resources/icons/action-reload-ui.png
trunk/jaxx-tutorial-config/src/main/resources/icons/action-show-help.png
trunk/jaxx-tutorial-config/src/main/resources/icons/action-site.png
trunk/jaxx-tutorial-config/src/main/resources/icons/action-translate.png
trunk/jaxx-tutorial-config/src/main/resources/icons/jaxx.png
trunk/jaxx-tutorial-config/src/main/resources/log4j.properties
trunk/jaxx-tutorial-config/src/site/rst/images/webstart.gif
trunk/jaxx-tutorial-config/src/site/rst/index.rst
trunk/jaxx-tutorial-config/src/site/site_fr.xml
trunk/jaxx-tutorial-css/LICENSE.txt
trunk/jaxx-tutorial-css/README.txt
trunk/jaxx-tutorial-css/changelog.txt
trunk/jaxx-tutorial-css/pom.xml
trunk/jaxx-tutorial-css/src/license/THIRD-PARTY.properties
trunk/jaxx-tutorial-css/src/main/java/org/nuiton/jaxx/tutorials/css/css.jaxx
trunk/jaxx-tutorial-css/src/main/java/org/nuiton/jaxx/tutorials/css/tuto.css
trunk/jaxx-tutorial-css/src/site/rst/images/webstart.gif
trunk/jaxx-tutorial-css/src/site/rst/index.rst
trunk/jaxx-tutorial-css/src/site/site_fr.xml
trunk/jaxx-tutorial-databinding/LICENSE.txt
trunk/jaxx-tutorial-databinding/README.txt
trunk/jaxx-tutorial-databinding/changelog.txt
trunk/jaxx-tutorial-databinding/pom.xml
trunk/jaxx-tutorial-databinding/src/license/THIRD-PARTY.properties
trunk/jaxx-tutorial-databinding/src/main/java/org/nuiton/jaxx/tutorials/databinding/data-binding.css
trunk/jaxx-tutorial-databinding/src/main/java/org/nuiton/jaxx/tutorials/databinding/databinding.jaxx
trunk/jaxx-tutorial-databinding/src/site/rst/images/webstart.gif
trunk/jaxx-tutorial-databinding/src/site/rst/index.rst
trunk/jaxx-tutorial-databinding/src/site/site_fr.xml
trunk/jaxx-tutorial-helloworld/LICENSE.txt
trunk/jaxx-tutorial-helloworld/README.txt
trunk/jaxx-tutorial-helloworld/changelog.txt
trunk/jaxx-tutorial-helloworld/pom.xml
trunk/jaxx-tutorial-helloworld/src/license/THIRD-PARTY.properties
trunk/jaxx-tutorial-helloworld/src/main/java/org/nuiton/jaxx/tutorials/helloworld/helloworld.jaxx
trunk/jaxx-tutorial-helloworld/src/site/rst/images/webstart.gif
trunk/jaxx-tutorial-helloworld/src/site/rst/index.rst
trunk/jaxx-tutorial-helloworld/src/site/site_fr.xml
trunk/jaxx-tutorial-helloworld2/LICENSE.txt
trunk/jaxx-tutorial-helloworld2/README.txt
trunk/jaxx-tutorial-helloworld2/changelog.txt
trunk/jaxx-tutorial-helloworld2/pom.xml
trunk/jaxx-tutorial-helloworld2/src/license/THIRD-PARTY.properties
trunk/jaxx-tutorial-helloworld2/src/main/java/org/nuiton/jaxx/tutorials/helloworld/helloworld.jaxx
trunk/jaxx-tutorial-helloworld2/src/site/rst/images/webstart.gif
trunk/jaxx-tutorial-helloworld2/src/site/rst/index.rst
trunk/jaxx-tutorial-helloworld2/src/site/site_fr.xml
trunk/jaxx-tutorial/LICENSE.txt
trunk/jaxx-tutorial/README.txt
trunk/jaxx-tutorial/changelog.txt
trunk/jaxx-tutorial/pom.xml
trunk/jaxx-tutorial/src/site/rst/index.rst
trunk/jaxx-tutorial/src/site/site_fr.xml
trunk/jaxx-widgets/src/license/THIRD-PARTY.properties
trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/config/ConfigUIHandler.java
trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/config/ConfigUIHelper.java
trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/config/model/CallBackFinalizer.java
trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/config/model/CallBackMap.java
trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/config/model/MainCallBackFinalizer.java
trunk/maven-jaxx-plugin/src/license/THIRD-PARTY.properties
trunk/maven-jaxx-plugin/src/test/resources/org/nuiton/jaxx/plugin/compilerTest/ErrorsCss.xml
trunk/maven-jaxx-plugin/src/test/resources/org/nuiton/jaxx/plugin/compilerTest/ImportTag.xml
trunk/maven-jaxx-plugin/src/test/resources/org/nuiton/jaxx/plugin/compilerTest/errors/css/UnsupportedPseudoclass.jaxx
trunk/maven-jaxx-plugin/src/test/resources/org/nuiton/jaxx/plugin/compilerTest/importTag/ImportTag.jaxx
trunk/src/license/project.xml
trunk/src/site/resources/demo1.png
trunk/src/site/resources/demo2.png
trunk/src/site/resources/tutos/alwaysEnabledButton.png
trunk/src/site/resources/tutos/disabledButton.png
trunk/src/site/resources/tutos/enabledButton.png
trunk/src/site/resources/tutos/helloworld.png
trunk/src/site/resources/tutos/helloworld2-red-big-button.png
trunk/src/site/resources/tutos/helloworld2-red-big.png
trunk/src/site/resources/tutos/helloworld2-red.png
trunk/src/site/resources/tutos/sliderAfter100.png
trunk/src/site/resources/tutos/sliderBefore100.png
trunk/src/site/resources/tutos/webstart.gif
trunk/src/site/rst/JAXXFile.rst
trunk/src/site/rst/contractProgramming.rst
trunk/src/site/rst/dataBinding.rst
trunk/src/site/rst/demo.rst
trunk/src/site/rst/javaBeans.rst
trunk/src/site/rst/old-compiler-doc/BeanValidator.rst
trunk/src/site/rst/old-compiler-doc/I18n.rst
trunk/src/site/rst/old-compiler-doc/Interface.rst
trunk/src/site/rst/old-compiler-doc/JAXXContext.rst
trunk/src/site/rst/old-compiler-doc/JavaBean.rst
trunk/src/site/rst/old-compiler-doc/NavigationTreeModel.rst
trunk/src/site/rst/presentation.rst
trunk/src/site/rst/scripting.rst
trunk/src/site/rst/tutos/config.rst
trunk/src/site/rst/tutos/css.rst
trunk/src/site/rst/tutos/data-binding.rst
trunk/src/site/rst/tutos/helloworld.rst
trunk/src/site/rst/tutos/helloworld2.rst
trunk/src/site/rst/useStylesheets.rst
trunk/src/site/rst/useSwingObjects.rst
Property changes on: trunk/jaxx-compiler/src/license/THIRD-PARTY.properties
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-compiler/src/main/java/jaxx/compiler/JAXXCompilerFile.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-compiler/src/main/java/jaxx/compiler/JAXXFactory.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-compiler/src/main/java/jaxx/compiler/reflect/ClassDescriptorHelper.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-compiler/src/main/java/jaxx/compiler/reflect/ClassDescriptorResolver.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-compiler/src/main/java/jaxx/compiler/reflect/resolvers/ClassDescriptorResolverFromJavaClass.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-compiler/src/main/java/jaxx/compiler/reflect/resolvers/ClassDescriptorResolverFromJavaFile.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-compiler/src/main/java/jaxx/compiler/reflect/resolvers/ClassDescriptorResolverFromJaxxFile.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-compiler/src/main/java/jaxx/compiler/tags/ImportHandler.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-compiler/src/main/java/jaxx/compiler/tasks/CompileFirstPassTask.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-compiler/src/main/java/jaxx/compiler/tasks/CompileSecondPassTask.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-compiler/src/main/java/jaxx/compiler/tasks/FinalizeTask.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-compiler/src/main/java/jaxx/compiler/tasks/GenerateTask.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-compiler/src/main/java/jaxx/compiler/tasks/InitTask.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-compiler/src/main/java/jaxx/compiler/tasks/JAXXEngineTask.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-compiler/src/main/java/jaxx/compiler/tasks/ProfileTask.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-compiler/src/main/java/jaxx/compiler/tasks/StyleSheetTask.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-compiler/src/test/java/jaxx/compiler/reflect/MyAbstractClass.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-compiler/src/test/java/jaxx/compiler/reflect/MyClass.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-compiler/src/test/java/jaxx/compiler/reflect/MyInterface.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-compiler/src/test/java/jaxx/compiler/reflect/MyInterface2.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-compiler/src/test/java/jaxx/compiler/reflect/MyInterface3.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-compiler/src/test/java/jaxx/compiler/reflect/resolvers/ClassDescriptorResolverFromJavaFileTest.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-demo/src/license/THIRD-PARTY.properties
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-demo/src/main/java/jaxx/demo/DemoTab.jaxx
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
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-30 16:05:18 UTC (rev 2011)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/JaxxNavDemo.jaxx 2010-06-30 16:47:57 UTC (rev 2012)
@@ -1,8 +1,8 @@
<!--
#%L
JAXX :: Demo
- $Id: FullNavigationTreeDemo.jaxx 1861 2010-04-29 14:16:39Z tchemit $
- $HeadURL: http://svn.nuiton.org/svn/jaxx/trunk/jaxx-demo/src/main/java/jaxx/demo/comp… $
+ $Id$
+ $HeadURL$
%%
Copyright (C) 2008 - 2010 CodeLutin
%%
Property changes on: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/JaxxNavDemo.jaxx
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/NavDemoDataProvider.java
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
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-30 16:05:18 UTC (rev 2011)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/content/AbstractContentUI.jaxx 2010-06-30 16:47:57 UTC (rev 2012)
@@ -1,8 +1,8 @@
<!--
#%L
JAXX :: Demo
- $Id: AbstractContentUI.jaxx 1861 2010-04-29 14:16:39Z tchemit $
- $HeadURL: http://svn.nuiton.org/svn/jaxx/trunk/jaxx-demo/src/main/java/jaxx/demo/comp… $
+ $Id$
+ $HeadURL$
%%
Copyright (C) 2008 - 2010 CodeLutin
%%
Property changes on: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/content/AbstractContentUI.jaxx
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
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-30 16:05:18 UTC (rev 2011)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/content/ActorContentUI.jaxx 2010-06-30 16:47:57 UTC (rev 2012)
@@ -1,8 +1,8 @@
<!--
#%L
JAXX :: Demo
- $Id: ActorContentUI.jaxx 1861 2010-04-29 14:16:39Z tchemit $
- $HeadURL: http://svn.nuiton.org/svn/jaxx/trunk/jaxx-demo/src/main/java/jaxx/demo/comp… $
+ $Id$
+ $HeadURL$
%%
Copyright (C) 2008 - 2010 CodeLutin
%%
Property changes on: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/content/ActorContentUI.jaxx
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
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-30 16:05:18 UTC (rev 2011)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/content/ActorsContentUI.jaxx 2010-06-30 16:47:57 UTC (rev 2012)
@@ -1,8 +1,8 @@
<!--
#%L
JAXX :: Demo
- $Id: ActorsContentUI.jaxx 1861 2010-04-29 14:16:39Z tchemit $
- $HeadURL: http://svn.nuiton.org/svn/jaxx/trunk/jaxx-demo/src/main/java/jaxx/demo/comp… $
+ $Id$
+ $HeadURL$
%%
Copyright (C) 2008 - 2010 CodeLutin
%%
Property changes on: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/content/ActorsContentUI.jaxx
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
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-30 16:05:18 UTC (rev 2011)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/content/MovieContentUI.jaxx 2010-06-30 16:47:57 UTC (rev 2012)
@@ -1,8 +1,8 @@
<!--
#%L
JAXX :: Demo
- $Id: MovieContentUI.jaxx 1861 2010-04-29 14:16:39Z tchemit $
- $HeadURL: http://svn.nuiton.org/svn/jaxx/trunk/jaxx-demo/src/main/java/jaxx/demo/comp… $
+ $Id$
+ $HeadURL$
%%
Copyright (C) 2008 - 2010 CodeLutin
%%
Property changes on: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/content/MovieContentUI.jaxx
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/content/MoviesContentUI.jaxx
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/content/MoviesContentUI.jaxx 2010-06-30 16:05:18 UTC (rev 2011)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/content/MoviesContentUI.jaxx 2010-06-30 16:47:57 UTC (rev 2012)
@@ -1,8 +1,8 @@
<!--
#%L
JAXX :: Demo
- $Id: MoviesContentUI.jaxx 1861 2010-04-29 14:16:39Z tchemit $
- $HeadURL: http://svn.nuiton.org/svn/jaxx/trunk/jaxx-demo/src/main/java/jaxx/demo/comp… $
+ $Id$
+ $HeadURL$
%%
Copyright (C) 2008 - 2010 CodeLutin
%%
Property changes on: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/content/MoviesContentUI.jaxx
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/ActorsTreeNodeLoador.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/MoviesTreeNodeLoador.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/NavDemoTreeCellRenderer.java
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/NavDemoTreeHelper.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/NavDemoTreeNode.java
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/ActorsTreeTableNodeLoador.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/MoviesTreeTableNodeLoador.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/NavDemoTreeTableHelper.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/NavDemoTreeTableModel.java
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/NavDemoTreeTableNode.java
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/entities/Identity.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/entities/Identity.java 2010-06-30 16:05:18 UTC (rev 2011)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/entities/Identity.java 2010-06-30 16:47:57 UTC (rev 2012)
@@ -2,8 +2,8 @@
* #%L
* JAXX :: Demo
*
- * $Id: Identity.java 1847 2010-04-16 12:27:48Z tchemit $
- * $HeadURL: http://svn.nuiton.org/svn/jaxx/trunk/jaxx-demo/src/main/java/jaxx/demo/feat… $
+ * $Id$
+ * $HeadURL$
* %%
* Copyright (C) 2008 - 2010 CodeLutin
* %%
Property changes on: trunk/jaxx-demo/src/main/java/jaxx/demo/entities/Identity.java
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/entities/Model.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/entities/Model.java 2010-06-30 16:05:18 UTC (rev 2011)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/entities/Model.java 2010-06-30 16:47:57 UTC (rev 2012)
@@ -2,8 +2,8 @@
* #%L
* JAXX :: Demo
*
- * $Id: Model.java 1847 2010-04-16 12:27:48Z tchemit $
- * $HeadURL: http://svn.nuiton.org/svn/jaxx/trunk/jaxx-demo/src/main/java/jaxx/demo/enti… $
+ * $Id$
+ * $HeadURL$
* %%
* Copyright (C) 2008 - 2010 CodeLutin
* %%
Property changes on: trunk/jaxx-demo/src/main/java/jaxx/demo/entities/Model.java
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/entities/Movie.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/entities/Movie.java 2010-06-30 16:05:18 UTC (rev 2011)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/entities/Movie.java 2010-06-30 16:47:57 UTC (rev 2012)
@@ -2,8 +2,8 @@
* #%L
* JAXX :: Demo
*
- * $Id: Movie.java 1847 2010-04-16 12:27:48Z tchemit $
- * $HeadURL: http://svn.nuiton.org/svn/jaxx/trunk/jaxx-demo/src/main/java/jaxx/demo/enti… $
+ * $Id$
+ * $HeadURL$
* %%
* Copyright (C) 2008 - 2010 CodeLutin
* %%
Property changes on: trunk/jaxx-demo/src/main/java/jaxx/demo/entities/Movie.java
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/entities/People.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/entities/People.java 2010-06-30 16:05:18 UTC (rev 2011)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/entities/People.java 2010-06-30 16:47:57 UTC (rev 2012)
@@ -2,8 +2,8 @@
* #%L
* JAXX :: Demo
*
- * $Id: People.java 1847 2010-04-16 12:27:48Z tchemit $
- * $HeadURL: http://svn.nuiton.org/svn/jaxx/trunk/jaxx-demo/src/main/java/jaxx/demo/comp… $
+ * $Id$
+ * $HeadURL$
* %%
* Copyright (C) 2008 - 2010 CodeLutin
* %%
Property changes on: trunk/jaxx-demo/src/main/java/jaxx/demo/entities/People.java
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoCellRenderer.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoDataProvider.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoNode.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoNodeLoador.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
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-30 16:05:18 UTC (rev 2011)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoTreeHelper.java 2010-06-30 16:47:57 UTC (rev 2012)
@@ -2,8 +2,8 @@
* #%L
* JAXX :: Demo
*
- * $Id: DemoTreeHelper.java 2009 2010-06-29 16:09:09Z sletellier $
- * $HeadURL: http://svn.nuiton.org/svn/jaxx/trunk/jaxx-demo/src/main/java/jaxx/demo/tree… $
+ * $Id$
+ * $HeadURL$
* %%
* Copyright (C) 2008 - 2010 CodeLutin
* %%
Property changes on: trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoTreeHelper.java
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-demo/src/main/resources/jaxx/demo/entities/Identity-error-validation.xml
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-demo/src/main/resources/jaxx/demo/entities/Identity-info-validation.xml
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-demo/src/main/resources/jaxx/demo/entities/Identity-warning-validation.xml
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-demo/src/main/resources/jaxx/demo/entities/Model-error-validation.xml
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-demo/src/main/resources/jaxx/demo/entities/Model-info-validation.xml
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-demo/src/main/resources/jaxx/demo/entities/Model-warning-validation.xml
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-runtime/src/license/THIRD-PARTY.properties
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/application/ActionExecutor.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/application/ActionWorker.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/application/ApplicationRunner.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/DataProvider.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxNavBridge.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxNavHelper.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxNode.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxNodeChildLoador.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/package.html
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/AbstractJaxxTreeCellRenderer.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/JaxxTreeBridge.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/JaxxTreeHelper.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/JaxxTreeNode.java
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/JaxxTreeNodeChildLoador.java
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/JaxxTreeTableBridge.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/JaxxTreeTableHelper.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/JaxxTreeTableModel.java
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/JaxxTreeTableNode.java
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/JaxxTreeTableNodeChildLoador.java
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/wizard/BusyChangeListener.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/wizard/ext/WizardExtModel.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/wizard/ext/WizardExtStep.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/wizard/ext/WizardExtStepModel.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/wizard/ext/WizardExtUI.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/wizard/ext/WizardExtUtil.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/wizard/ext/package.html
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial/LICENSE.txt
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial/README.txt
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial/changelog.txt
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial/pom.xml
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial/src/site/rst/index.rst
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial/src/site/site_fr.xml
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-config/LICENSE.txt
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-config/README.txt
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-config/changelog.txt
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-config/pom.xml
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-config/src/license/THIRD-PARTY.properties
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-config/src/main/java/jaxx/demo/config/DemoConfig.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-config/src/main/java/jaxx/demo/config/RunDemo.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-config/src/main/resources/i18n/jaxx-tutorial-config-en_GB.properties
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-config/src/main/resources/i18n/jaxx-tutorial-config-fr_FR.properties
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-config/src/main/resources/icons/action-about.png
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-config/src/main/resources/icons/action-accept.png
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-config/src/main/resources/icons/action-block.png
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-config/src/main/resources/icons/action-close.png
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-config/src/main/resources/icons/action-config.png
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-config/src/main/resources/icons/action-exit.png
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-config/src/main/resources/icons/action-fullscreen.png
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-config/src/main/resources/icons/action-help.png
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-config/src/main/resources/icons/action-i18n-fr.png
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-config/src/main/resources/icons/action-i18n-uk.png
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-config/src/main/resources/icons/action-leave-fullscreen.png
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-config/src/main/resources/icons/action-reload-application.png
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-config/src/main/resources/icons/action-reload-ui.png
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-config/src/main/resources/icons/action-show-help.png
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-config/src/main/resources/icons/action-site.png
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-config/src/main/resources/icons/action-translate.png
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-config/src/main/resources/icons/jaxx.png
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-config/src/main/resources/log4j.properties
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-config/src/site/rst/images/webstart.gif
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-config/src/site/rst/index.rst
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-config/src/site/site_fr.xml
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-css/LICENSE.txt
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-css/README.txt
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-css/changelog.txt
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-css/pom.xml
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-css/src/license/THIRD-PARTY.properties
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-css/src/main/java/org/nuiton/jaxx/tutorials/css/css.jaxx
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-css/src/main/java/org/nuiton/jaxx/tutorials/css/tuto.css
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-css/src/site/rst/images/webstart.gif
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-css/src/site/rst/index.rst
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-css/src/site/site_fr.xml
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-databinding/LICENSE.txt
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-databinding/README.txt
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-databinding/changelog.txt
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-databinding/pom.xml
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-databinding/src/license/THIRD-PARTY.properties
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-databinding/src/main/java/org/nuiton/jaxx/tutorials/databinding/data-binding.css
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-databinding/src/main/java/org/nuiton/jaxx/tutorials/databinding/databinding.jaxx
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-databinding/src/site/rst/images/webstart.gif
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-databinding/src/site/rst/index.rst
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-databinding/src/site/site_fr.xml
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-helloworld/LICENSE.txt
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-helloworld/README.txt
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-helloworld/changelog.txt
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-helloworld/pom.xml
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-helloworld/src/license/THIRD-PARTY.properties
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-helloworld/src/main/java/org/nuiton/jaxx/tutorials/helloworld/helloworld.jaxx
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-helloworld/src/site/rst/images/webstart.gif
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-helloworld/src/site/rst/index.rst
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-helloworld/src/site/site_fr.xml
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-helloworld2/LICENSE.txt
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-helloworld2/README.txt
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-helloworld2/changelog.txt
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-helloworld2/pom.xml
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-helloworld2/src/license/THIRD-PARTY.properties
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-helloworld2/src/main/java/org/nuiton/jaxx/tutorials/helloworld/helloworld.jaxx
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-helloworld2/src/site/rst/images/webstart.gif
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-helloworld2/src/site/rst/index.rst
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-tutorial-helloworld2/src/site/site_fr.xml
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-widgets/src/license/THIRD-PARTY.properties
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/config/ConfigUIHandler.java
___________________________________________________________________
Modified: svn:keywords
- "Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/config/ConfigUIHelper.java
___________________________________________________________________
Modified: svn:keywords
- "Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/config/model/CallBackFinalizer.java
___________________________________________________________________
Modified: svn:keywords
- "Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/config/model/CallBackMap.java
___________________________________________________________________
Modified: svn:keywords
- "Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/config/model/MainCallBackFinalizer.java
___________________________________________________________________
Modified: svn:keywords
- "Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/maven-jaxx-plugin/src/license/THIRD-PARTY.properties
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/maven-jaxx-plugin/src/test/resources/org/nuiton/jaxx/plugin/compilerTest/ErrorsCss.xml
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/maven-jaxx-plugin/src/test/resources/org/nuiton/jaxx/plugin/compilerTest/ImportTag.xml
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/maven-jaxx-plugin/src/test/resources/org/nuiton/jaxx/plugin/compilerTest/errors/css/UnsupportedPseudoclass.jaxx
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/maven-jaxx-plugin/src/test/resources/org/nuiton/jaxx/plugin/compilerTest/importTag/ImportTag.jaxx
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/src/license/project.xml
___________________________________________________________________
Modified: svn:keywords
- "Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/src/site/resources/demo1.png
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/src/site/resources/demo2.png
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/src/site/resources/tutos/alwaysEnabledButton.png
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/src/site/resources/tutos/disabledButton.png
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/src/site/resources/tutos/enabledButton.png
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/src/site/resources/tutos/helloworld.png
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/src/site/resources/tutos/helloworld2-red-big-button.png
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/src/site/resources/tutos/helloworld2-red-big.png
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/src/site/resources/tutos/helloworld2-red.png
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/src/site/resources/tutos/sliderAfter100.png
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/src/site/resources/tutos/sliderBefore100.png
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/src/site/resources/tutos/webstart.gif
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/src/site/rst/JAXXFile.rst
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/src/site/rst/contractProgramming.rst
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/src/site/rst/dataBinding.rst
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/src/site/rst/demo.rst
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/src/site/rst/javaBeans.rst
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/src/site/rst/old-compiler-doc/BeanValidator.rst
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/src/site/rst/old-compiler-doc/I18n.rst
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/src/site/rst/old-compiler-doc/Interface.rst
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/src/site/rst/old-compiler-doc/JAXXContext.rst
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/src/site/rst/old-compiler-doc/JavaBean.rst
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/src/site/rst/old-compiler-doc/NavigationTreeModel.rst
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/src/site/rst/presentation.rst
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/src/site/rst/scripting.rst
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/src/site/rst/tutos/config.rst
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision HeadURL
+ HeadURL Id Date Revision Author
Property changes on: trunk/src/site/rst/tutos/css.rst
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/src/site/rst/tutos/data-binding.rst
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/src/site/rst/tutos/helloworld.rst
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/src/site/rst/tutos/helloworld2.rst
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/src/site/rst/useStylesheets.rst
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Property changes on: trunk/src/site/rst/useSwingObjects.rst
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
1
0
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(a)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(a)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(a)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(a)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(a)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(a)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(a)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(a)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(a)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(a)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(a)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(a)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(a)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(a)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(a)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(a)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(a)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(a)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(a)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(a)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(a)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(a)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(a)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(a)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(a)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(a)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(a)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(a)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(a)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(a)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(a)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(a)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(a)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);
1
0
Author: sletellier
Date: 2010-06-30 00:50:39 +0200 (Wed, 30 Jun 2010)
New Revision: 2010
Url: http://nuiton.org/repositories/revision/jaxx/2010
Log:
- Refactor tree package to nav pakage
- Rename classes with nav in name
- Fix javadocs (first pass)
Added:
trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/
trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/JaxxNavDemo.jaxx
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/content/
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/component/jaxx/nav/content/MoviesContentUI.jaxx
trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/loadors/
trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/loadors/ActorsNodeLoadors.java
trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/loadors/MoviesNodeLoadors.java
trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/
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/
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-demo/src/main/java/jaxx/demo/tree/DemoTreeHelper.java
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxNavHelper.java
Removed:
trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/
trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoTreeHelper.java
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/JaxxTreeHelper.java
Modified:
trunk/jaxx-demo/src/main/java/jaxx/demo/DemoConfig.java
trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoCellRenderer.java
trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoDataProvider.java
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxDelegateTreeModel.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/package.html
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/main/java/jaxx/demo/DemoConfig.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/DemoConfig.java 2010-06-29 16:09:09 UTC (rev 2009)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/DemoConfig.java 2010-06-29 22:50:39 UTC (rev 2010)
@@ -25,7 +25,7 @@
package jaxx.demo;
-import jaxx.demo.component.jaxx.tree.JaxxTreeDemo;
+import jaxx.demo.component.jaxx.nav.JaxxNavDemo;
import jaxx.runtime.JAXXUtil;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -228,7 +228,7 @@
DEMO_PATH(
"ui.demo.path",
_("jaxxdemo.config.ui.demo.path"),
- "jaxxdemo.tree/jaxxdemo.tree.component.jaxx/jaxxdemo.tree.component.jaxx.tree/" + JaxxTreeDemo.class.getSimpleName(),
+ "jaxxdemo.tree/jaxxdemo.tree.component.jaxx/jaxxdemo.tree.component.jaxx.tree/" + JaxxNavDemo.class.getSimpleName(),
String.class,
false,
true);
Added: 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 (rev 0)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/JaxxNavDemo.jaxx 2010-06-29 22:50:39 UTC (rev 2010)
@@ -0,0 +1,254 @@
+<!--
+ #%L
+ JAXX :: Demo
+ $Id: FullNavigationTreeDemo.jaxx 1861 2010-04-29 14:16:39Z tchemit $
+ $HeadURL: http://svn.nuiton.org/svn/jaxx/trunk/jaxx-demo/src/main/java/jaxx/demo/comp… $
+ %%
+ 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%
+ -->
+
+<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>
+
+ <CardLayout2 id='contentLayout'/>
+
+ <script><![CDATA[
+private JaxxNavDemoDataProvider dataProvider = new JaxxNavDemoDataProvider();
+private JaxxNavDemoHelper<JaxxTreeDemoNode> treeHelper = new JaxxNavDemoHelper<JaxxTreeDemoNode>(dataProvider);
+private JaxxNavDemoHelper<JaxxTreeTableDemoNode> treeTableHelper = new JaxxNavDemoHelper<JaxxTreeTableDemoNode>(dataProvider);
+
+@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"};
+}
+
+private void $afterCompleteSetup() {
+ setContextValue(treeHelper, "treeHelper");
+ setContextValue(treeTableHelper, "treeTableHelper");
+
+ // Creation of selection listener to open ui when tree selection change
+ TreeSelectionListener treeSelectionListener = new TreeSelectionListener() {
+ @Override
+ public void valueChanged(TreeSelectionEvent event) {
+ TreePath path = event.getPath();
+ JaxxTreeDemoNode demoNode = (JaxxTreeDemoNode) path.getLastPathComponent();
+
+ if (log.isDebugEnabled()) {
+ log.debug("Select demoNode " + demoNode);
+ }
+
+ // Do nothing for root
+ if (demoNode.isRoot()) {
+ return;
+ }
+ openUI(demoNode);
+ }
+ };
+
+ // Creation of selection listener to open ui when tree selection change
+ TreeSelectionListener treeTableSelectionListener = new TreeSelectionListener() {
+ @Override
+ public void valueChanged(TreeSelectionEvent event) {
+ TreePath path = event.getPath();
+ JaxxTreeTableDemoNode demoNode = (JaxxTreeTableDemoNode) path.getLastPathComponent();
+
+ if (log.isDebugEnabled()) {
+ log.debug("Select demoNode " + demoNode);
+ }
+
+ // Do nothing for root
+ if (demoNode.isRoot()) {
+ return;
+ }
+ openUI(demoNode);
+ }
+ };
+
+ // Register decorator
+ DecoratorProvider decoratorProvider = getContextValue(DecoratorProvider.class);
+
+ // Attach renderer
+ navigationTree.setCellRenderer(new JaxxTreeDemoCellRenderer(decoratorProvider, dataProvider));
+
+ // Register tree
+ treeHelper.setTree(navigationTree, true, treeSelectionListener);
+
+ // Register tree table
+ treeTableHelper.setTreeTable(navigationTreeTable, true, treeTableSelectionListener);
+
+ SwingUtilities.invokeLater(new Runnable() {
+
+ @Override
+ public void run() {
+ navigationTree.setSelectionInterval(0, 0);
+ splitPane.resetToPreferredSizes();
+ }
+ });
+
+ // expand the tree
+ SwingUtil.expandTree(navigationTree);
+ SwingUtil.expandTreeTable(navigationTreeTable);
+
+ // auto-expand demoNode when selected
+ SwingUtil.addExpandOnClickListener(navigationTree);
+ SwingUtil.addExpandOnClickListener(navigationTreeTable);
+}
+
+protected void openUI(JaxxNode demoNode) {
+
+ // Get demoNode type
+ Class<?> editType = demoNode.getInternalClass();
+ String id = demoNode.getId();
+
+ // If it's category demoNode
+ if (editType.equals(String.class)) {
+
+ // Actors categorie demoNode
+ if (JaxxNavDemoHelper.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)) {
+
+ java.util.List<Movie> movies = dataProvider.getMovies();
+ showUI(movies, MoviesContentUI.class);
+ }
+
+ // People demoNode
+ } else if (editType.equals(People.class)) {
+ People people = dataProvider.getPeople(id);
+ showUI(people, ActorContentUI.class);
+
+ // Movie demoNode
+ } else if (editType.equals(Movie.class)) {
+ Movie movie = dataProvider.getMovie(id);
+ showUI(movie, MovieContentUI.class);
+ }
+}
+
+// Create by introspection content ui
+protected <B> void showUI(B bean, Class<? extends AbstractContentUI> uiClass) {
+
+ // Verify if instance is existing
+ AbstractContentUI ui = getContentIfExist(uiClass);
+
+ // Get layout identifier
+ String contentName = uiClass.getName();
+
+ if (ui == null) {
+ try {
+ // Get constructor
+ Constructor<? extends AbstractContentUI> constructor =
+ uiClass.getConstructor(JAXXContext.class);
+
+ // Invoke instance creation
+ ui = constructor.newInstance(this);
+ } catch (Exception eee) {
+ log.error(eee);
+ ErrorDialogUI.showError(eee);
+ }
+
+ // Add to content panel
+ content.add(ui, contentName);
+ }
+
+ // Attach bean
+ ui.setData(bean);
+
+ // show ui
+ contentLayout.show(content, contentName);
+}
+
+// Get content if exist in content, else return null
+protected <E extends Component> E getContentIfExist(Class<E> uiClass) {
+ String contentName = uiClass.getName();
+ if (log.isDebugEnabled()) {
+ log.debug("Get content if exist " + contentName);
+ }
+ if (!contentLayout.contains(contentName)) {
+ return null;
+ }
+ return (E) contentLayout.getComponent(content, contentName);
+}
+ ]]>
+ </script>
+
+ <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}'>
+
+ <JTree id="navigationTree"
+ font-size='11'
+ rootVisible='false'
+ showsRootHandles='false'
+ model='{treeHelper.createTreeModel()}'/>
+
+ </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()}'/>
+
+ </JScrollPane>
+ </tab>
+ </JTabbedPane>
+
+ <JPanel id="content" layout="{contentLayout}"/>
+
+ </JSplitPane>
+
+</jaxx.demo.DemoPanel>
Added: 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 (rev 0)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/JaxxNavDemoDataProvider.java 2010-06-29 22:50:39 UTC (rev 2010)
@@ -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(a)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();
+ }
+}
Added: 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 (rev 0)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/JaxxNavDemoHelper.java 2010-06-29 22:50:39 UTC (rev 2010)
@@ -0,0 +1,141 @@
+/*
+ * #%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(a)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();
+ }
+}
Added: 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 (rev 0)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/content/AbstractContentUI.jaxx 2010-06-29 22:50:39 UTC (rev 2010)
@@ -0,0 +1,45 @@
+<!--
+ #%L
+ JAXX :: Demo
+ $Id: AbstractContentUI.jaxx 1861 2010-04-29 14:16:39Z tchemit $
+ $HeadURL: http://svn.nuiton.org/svn/jaxx/trunk/jaxx-demo/src/main/java/jaxx/demo/comp… $
+ %%
+ 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%
+ -->
+
+<JPanel abstract='true'
+ layout='{new BorderLayout()}'
+ genericType='B extends Object'>
+
+ <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);
+ ]]>
+ </script>
+</JPanel>
Added: 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 (rev 0)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/content/ActorContentUI.jaxx 2010-06-29 22:50:39 UTC (rev 2010)
@@ -0,0 +1,78 @@
+<!--
+ #%L
+ JAXX :: Demo
+ $Id: ActorContentUI.jaxx 1861 2010-04-29 14:16:39Z tchemit $
+ $HeadURL: http://svn.nuiton.org/svn/jaxx/trunk/jaxx-demo/src/main/java/jaxx/demo/comp… $
+ %%
+ 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%
+ -->
+
+<AbstractContentUI superGenericType='People'>
+
+ <import>
+ jaxx.demo.entities.*
+ </import>
+ <script><![CDATA[
+import jaxx.demo.entities.*;
+
+String getContent(People data) {
+ if (data == null) {
+ return "no content";
+ }
+ StringBuilder buffer = new StringBuilder();
+ buffer.append(data);
+ return buffer.toString();
+}
+
+ImageIcon getImage(People data) {
+ return data == null? null :SwingUtil.createIcon(data.getImage());
+}
+
+]]></script>
+
+ <JSplitPane id='splitPane'
+ orientation='{JSplitPane.VERTICAL_SPLIT}'
+ resizeWeight='0.5'
+ constraints='BorderLayout.CENTER'
+ oneTouchExpandable='true'>
+
+ <People id='data' javaBean='null'/>
+
+ <JScrollPane border='{null}'
+ horizontalScrollBarPolicy='{JScrollPane.HORIZONTAL_SCROLLBAR_NEVER}'
+ verticalScrollBarPolicy='{JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED}'>
+
+ <JTextPane
+ border='{new TitledBorder(_("jaxxdemo.navigation.actor.title"))}'
+ editable='false'
+ font-size='11'
+ text='{getContent(getData())}'/>
+ </JScrollPane>
+
+ <JScrollPane border='{new TitledBorder("Picture")}'
+ horizontalScrollBarPolicy='{JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED}'
+ verticalScrollBarPolicy='{JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED}'
+ minimumSize='{SwingUtil.newMinDimension()}'>
+
+ <JLabel horizontalAlignment='center'
+ icon='{getImage(getData())}'/>
+
+ </JScrollPane>
+
+ </JSplitPane>
+</AbstractContentUI>
\ No newline at end of file
Added: 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 (rev 0)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/content/ActorsContentUI.jaxx 2010-06-29 22:50:39 UTC (rev 2010)
@@ -0,0 +1,88 @@
+<!--
+ #%L
+ JAXX :: Demo
+ $Id: ActorsContentUI.jaxx 1861 2010-04-29 14:16:39Z tchemit $
+ $HeadURL: http://svn.nuiton.org/svn/jaxx/trunk/jaxx-demo/src/main/java/jaxx/demo/comp… $
+ %%
+ 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%
+ -->
+
+<AbstractContentUI superGenericType='java.util.List<People>'>
+
+ <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() {
+
+ addPropertyChangeListener(PROPERTY_DATA, new PropertyChangeListener(){
+ @Override
+ public void propertyChange(PropertyChangeEvent evt) {
+ java.util.List<People> ps = getData();
+
+ if (ps != null) {
+ DefaultListModel model = (DefaultListModel) list.getModel();
+ for (People p : ps) {
+ model.addElement(p);
+ }
+ } else {
+ // clean list model
+ DefaultListModel model = (DefaultListModel) list.getModel();
+ model.removeAllElements();
+ }
+ }
+ });
+}
+
+protected void selectChild() {
+ People selected = (People)list.getSelectedValue();
+ getTreeHelper().selectNode(selected.getId());
+ getTreeTableHelper().selectNode(selected.getId());
+}
+ ]]></script>
+
+ <java.util.List id='data' genericType='People' javaBean='null'/>
+
+ <JPanel layout='{new BorderLayout()}'>
+
+ <JScrollPane
+ border='{new TitledBorder(_("jaxxdemo.navigation.actors.title"))}'
+ constraints='BorderLayout.CENTER'
+ columnHeaderView='{toolbar}'
+ horizontalScrollBarPolicy='{JScrollPane.HORIZONTAL_SCROLLBAR_NEVER}'
+ verticalScrollBarPolicy='{JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED}'>
+ <JList id='list' model='{new DefaultListModel()}'
+ cellRenderer='{getContextValue(DecoratorProviderListCellRenderer.class)}'/>
+ </JScrollPane>
+ <JToolBar id='toolbar' constraints='BorderLayout.SOUTH'
+ floatable='false'>
+ <JPanel layout='{new GridLayout(1,0)}'>
+ <JButton text='jaxxdemo.action.show'
+ enabled='{list.getSelectedIndex()!=-1}'
+ onActionPerformed='selectChild()'/>
+ <JButton text='jaxxdemo.action.add'/>
+ <JButton text='jaxxdemo.action.remove'
+ enabled='{list.getSelectedIndex()!=-1}'/>
+ </JPanel>
+ </JToolBar>
+
+ </JPanel>
+</AbstractContentUI>
\ No newline at end of file
Added: 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 (rev 0)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/content/MovieContentUI.jaxx 2010-06-29 22:50:39 UTC (rev 2010)
@@ -0,0 +1,74 @@
+<!--
+ #%L
+ JAXX :: Demo
+ $Id: MovieContentUI.jaxx 1861 2010-04-29 14:16:39Z tchemit $
+ $HeadURL: http://svn.nuiton.org/svn/jaxx/trunk/jaxx-demo/src/main/java/jaxx/demo/comp… $
+ %%
+ 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%
+ -->
+
+<AbstractContentUI superGenericType='Movie'>
+
+ <script><![CDATA[
+import jaxx.demo.entities.*;
+
+String getContent(Movie data) {
+ if (data == null) {
+ return "no content";
+ }
+ StringBuilder buffer = new StringBuilder();
+ buffer.append(data);
+ return buffer.toString();
+}
+
+ImageIcon getImage(Movie data) {
+ return data == null? null :SwingUtil.createIcon(data.getImage());
+}
+]]></script>
+
+ <JSplitPane id='splitPane'
+ orientation='{JSplitPane.VERTICAL_SPLIT}'
+ resizeWeight='0.5'
+ constraints='BorderLayout.CENTER'
+ oneTouchExpandable='true'>
+
+ <Movie id='data' javaBean='null'/>
+
+ <JScrollPane border='{null}'
+ horizontalScrollBarPolicy='{JScrollPane.HORIZONTAL_SCROLLBAR_NEVER}'
+ verticalScrollBarPolicy='{JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED}'>
+
+ <JTextPane
+ border='{new TitledBorder(_("jaxxdemo.navigation.movie.title"))}'
+ editable='false'
+ font-size='11'
+ text='{getContent(getData())}'/>
+ </JScrollPane>
+
+ <JScrollPane border='{new TitledBorder("Picture")}'
+ horizontalScrollBarPolicy='{JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED}'
+ verticalScrollBarPolicy='{JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED}'
+ minimumSize='{SwingUtil.newMinDimension()}'>
+
+ <JLabel horizontalAlignment='center'
+ icon='{getImage(getData())}'/>
+
+ </JScrollPane>
+
+ </JSplitPane>
+</AbstractContentUI>
\ No newline at end of file
Added: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/content/MoviesContentUI.jaxx
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/content/MoviesContentUI.jaxx (rev 0)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/content/MoviesContentUI.jaxx 2010-06-29 22:50:39 UTC (rev 2010)
@@ -0,0 +1,95 @@
+<!--
+ #%L
+ JAXX :: Demo
+ $Id: MoviesContentUI.jaxx 1861 2010-04-29 14:16:39Z tchemit $
+ $HeadURL: http://svn.nuiton.org/svn/jaxx/trunk/jaxx-demo/src/main/java/jaxx/demo/comp… $
+ %%
+ 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%
+ -->
+
+<AbstractContentUI
+ superGenericType='java.util.List<Movie>'>
+
+ <import>
+ jaxx.runtime.swing.renderer.DecoratorProviderListCellRenderer
+ jaxx.demo.entities.*
+ jaxx.runtime.binding.SimpleJAXXObjectBinding
+ java.beans.PropertyChangeEvent
+ java.beans.PropertyChangeListener
+ </import>
+ <script><![CDATA[
+
+private void $afterCompleteSetup() {
+
+ addPropertyChangeListener(PROPERTY_DATA, new PropertyChangeListener(){
+ @Override
+ public void propertyChange(PropertyChangeEvent evt) {
+ java.util.List<Movie> ms = getData();
+
+ if (ms != null) {
+ DefaultListModel model = (DefaultListModel) list.getModel();
+ for (Movie m : ms) {
+ model.addElement(m);
+ }
+ } else {
+ // clean list model
+ DefaultListModel model = (DefaultListModel) list.getModel();
+ model.removeAllElements();
+ }
+ }
+ });
+}
+
+protected void selectChild() {
+ Movie selected = (Movie)list.getSelectedValue();
+ getTreeHelper().selectNode(selected.getId());
+ getTreeTableHelper().selectNode(selected.getId());
+}
+ ]]></script>
+
+ <java.util.List id='data' genericType='Movie' javaBean='null'/>
+
+ <JPanel layout='{new BorderLayout()}'>
+
+ <JScrollPane
+ border='{new TitledBorder(_("jaxxdemo.navigation.movies.title"))}'
+ constraints='BorderLayout.CENTER'
+ columnHeaderView='{toolbar}'
+ horizontalScrollBarPolicy='{JScrollPane.HORIZONTAL_SCROLLBAR_NEVER}'
+ verticalScrollBarPolicy='{JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED}'>
+
+ <JList id='list' model='{new DefaultListModel()}'
+ cellRenderer='{getContextValue(DecoratorProviderListCellRenderer.class)}'/>
+
+ </JScrollPane>
+
+ <JToolBar id='toolbar' opaque='false' constraints='BorderLayout.SOUTH'
+ floatable='false'>
+
+ <JPanel layout='{new GridLayout(1,0)}'>
+ <JButton text='jaxxdemo.action.show'
+ enabled='{list.getSelectedIndex()!=-1}'
+ onActionPerformed='selectChild()'/>
+ <JButton text='jaxxdemo.action.add'/>
+ <JButton text='jaxxdemo.action.remove'
+ enabled='{list.getSelectedIndex()!=-1}'/>
+ </JPanel>
+ </JToolBar>
+
+ </JPanel>
+</AbstractContentUI>
\ No newline at end of file
Added: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/loadors/ActorsNodeLoadors.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/loadors/ActorsNodeLoadors.java (rev 0)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/loadors/ActorsNodeLoadors.java 2010-06-29 22:50:39 UTC (rev 2010)
@@ -0,0 +1,101 @@
+/*
+ * #%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.loadors;
+
+import jaxx.demo.component.jaxx.nav.JaxxNavDemoDataProvider;
+import jaxx.demo.component.jaxx.nav.treetable.JaxxTreeTableDemoNode;
+import jaxx.demo.component.jaxx.nav.tree.JaxxTreeDemoNode;
+import jaxx.demo.entities.People;
+import jaxx.runtime.swing.nav.DataProvider;
+import jaxx.runtime.swing.nav.JaxxNode;
+import jaxx.runtime.swing.nav.JaxxNodeChildLoador;
+
+import java.util.List;
+
+/**
+ * @author sletellier <letellier(a)codelutin.com>
+ * @since 2.1
+ */
+public class ActorsNodeLoadors<N extends JaxxNode<N>> extends JaxxNodeChildLoador<People,People, N> {
+
+ private static final long serialVersionUID = 1L;
+
+ protected boolean isTreeTable;
+
+ public ActorsNodeLoadors() {
+ this(false);
+ }
+
+ public ActorsNodeLoadors(boolean isTreeTable) {
+ super(People.class);
+ this.isTreeTable = isTreeTable;
+ }
+
+ @Override
+ public List<People> getData(Class<?> parentClass,
+ String moviesId,
+ DataProvider dataProvider) throws Exception {
+
+ // Get people for parentId
+ JaxxNavDemoDataProvider provider = (JaxxNavDemoDataProvider) 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 N createNode(People data, DataProvider dataProvider) {
+
+ JaxxNode actorNode;
+
+ // Create actor static nodes
+ if (!isTreeTable) {
+ actorNode = new JaxxTreeDemoNode(
+ getBeanType(),
+ data.getId(),
+ null,
+ null
+ );
+ } else {
+ actorNode = new JaxxTreeTableDemoNode(
+ getBeanType(),
+ data.getId(),
+ null,
+ null
+ );
+ }
+
+ return (N) actorNode;
+ }
+}
Added: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/loadors/MoviesNodeLoadors.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/loadors/MoviesNodeLoadors.java (rev 0)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/loadors/MoviesNodeLoadors.java 2010-06-29 22:50:39 UTC (rev 2010)
@@ -0,0 +1,117 @@
+/*
+ * #%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.loadors;
+
+import jaxx.demo.component.jaxx.nav.JaxxNavDemoDataProvider;
+import jaxx.demo.component.jaxx.nav.JaxxNavDemoHelper;
+import jaxx.demo.component.jaxx.nav.tree.JaxxTreeDemoNode;
+import jaxx.demo.component.jaxx.nav.treetable.JaxxTreeTableDemoNode;
+import jaxx.demo.entities.Movie;
+import jaxx.runtime.swing.nav.JaxxNode;
+import jaxx.runtime.swing.nav.JaxxNodeChildLoador;
+import jaxx.runtime.swing.nav.DataProvider;
+
+import java.util.List;
+
+import static org.nuiton.i18n.I18n.n_;
+
+/**
+ * @author sletellier <letellier(a)codelutin.com>
+ * @since 2.1
+ */
+public class MoviesNodeLoadors<N extends JaxxNode<N>> extends JaxxNodeChildLoador<Movie, Movie, N> {
+
+ private static final long serialVersionUID = 1L;
+
+ protected boolean isTreeTable;
+
+ public MoviesNodeLoadors() {
+ this(false);
+ }
+
+ public MoviesNodeLoadors(boolean isTreeTable) {
+ super(Movie.class);
+ this.isTreeTable = isTreeTable;
+ }
+
+ @Override
+ public List<Movie> getData(Class<?> parentClass,
+ String parentId,
+ DataProvider dataProvider) throws Exception {
+
+ JaxxNavDemoDataProvider provider = (JaxxNavDemoDataProvider) dataProvider;
+
+ // Return all movies
+ return provider.getMovies();
+ }
+
+ @SuppressWarnings({"unchecked"})
+ @Override
+ public N createNode(Movie data, DataProvider dataProvider) {
+
+ JaxxNode moviesNode;
+ JaxxNode actorsCategoryNode;
+
+ if (!isTreeTable) {
+ // Create movies static nodes
+ moviesNode = new JaxxTreeDemoNode(
+ getBeanType(),
+ data.getId(),
+ null,
+ null
+ );
+
+ // Create clients category node
+ actorsCategoryNode = new JaxxTreeDemoNode(
+ String.class,
+ n_(JaxxNavDemoHelper.ACTORS_CATEGORY_NODE),
+ null,
+ new ActorsNodeLoadors<JaxxTreeDemoNode>(false)
+ );
+ } else {
+ // Create movies static nodes
+ moviesNode = new JaxxTreeTableDemoNode(
+ getBeanType(),
+ data.getId(),
+ null,
+ null
+ );
+
+ // Create clients category node
+ actorsCategoryNode = new JaxxTreeTableDemoNode(
+ String.class,
+ n_(JaxxNavDemoHelper.ACTORS_CATEGORY_NODE),
+ null,
+ new ActorsNodeLoadors<JaxxTreeDemoNode>(true)
+ );
+ }
+
+ // Add actors nodes to movies node
+ moviesNode.add(actorsCategoryNode);
+
+ return (N) moviesNode;
+ }
+}
Added: 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 (rev 0)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/JaxxTreeDemoCellRenderer.java 2010-06-29 22:50:39 UTC (rev 2010)
@@ -0,0 +1,114 @@
+/*
+ * #%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(a)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);
+ }
+}
Added: 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 (rev 0)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/tree/JaxxTreeDemoNode.java 2010-06-29 22:50:39 UTC (rev 2010)
@@ -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.JaxxNodeChildLoador;
+import jaxx.runtime.swing.nav.tree.JaxxTreeNode;
+
+/**
+ * @author sletellier <letellier(a)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/treetable/JaxxTreeTableDemoModel.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/JaxxTreeTableDemoModel.java (rev 0)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/JaxxTreeTableDemoModel.java 2010-06-29 22:50:39 UTC (rev 2010)
@@ -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.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(a)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;
+ }
+}
Added: 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 (rev 0)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/nav/treetable/JaxxTreeTableDemoNode.java 2010-06-29 22:50:39 UTC (rev 2010)
@@ -0,0 +1,43 @@
+/*
+ * #%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(a)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);
+ }
+}
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 16:09:09 UTC (rev 2009)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoCellRenderer.java 2010-06-29 22:50:39 UTC (rev 2010)
@@ -25,7 +25,7 @@
package jaxx.demo.tree;
-import jaxx.demo.component.jaxx.tree.JaxxTreeDemoDataProvider;
+import jaxx.demo.component.jaxx.nav.JaxxNavDemoDataProvider;
import jaxx.runtime.swing.nav.tree.AbstractJaxxTreeCellRenderer;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -51,8 +51,8 @@
}
@Override
- public JaxxTreeDemoDataProvider getDataProvider() {
- return (JaxxTreeDemoDataProvider) super.getDataProvider();
+ public JaxxNavDemoDataProvider getDataProvider() {
+ return (JaxxNavDemoDataProvider) super.getDataProvider();
}
@Override
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoDataProvider.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoDataProvider.java 2010-06-29 16:09:09 UTC (rev 2009)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoDataProvider.java 2010-06-29 22:50:39 UTC (rev 2010)
@@ -30,7 +30,7 @@
import jaxx.demo.component.jaxx.editor.ComboEditorDemo;
import jaxx.demo.component.jaxx.editor.I18nEditorDemo;
import jaxx.demo.component.jaxx.editor.NumberEditorDemo;
-import jaxx.demo.component.jaxx.tree.JaxxTreeDemo;
+import jaxx.demo.component.jaxx.nav.JaxxNavDemo;
import jaxx.demo.component.swing.HidorButtonDemo;
import jaxx.demo.component.swing.JButtonDemo;
import jaxx.demo.component.swing.JCheckBoxDemo;
@@ -152,7 +152,7 @@
I18nEditorDemo.class
);
addMapping(n_("jaxxdemo.tree.component.jaxx.tree"),
- JaxxTreeDemo.class
+ JaxxNavDemo.class
);
addMapping(n_("jaxxdemo.tree.feature"),
Deleted: 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 16:09:09 UTC (rev 2009)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoTreeHelper.java 2010-06-29 22:50:39 UTC (rev 2010)
@@ -1,61 +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.tree;
-
-import jaxx.runtime.swing.nav.JaxxDelegateTreeModel;
-import jaxx.runtime.swing.nav.tree.JaxxTreeHelper;
-
-import javax.swing.tree.TreeModel;
-
-/**
- * @author sletellier <letellier(a)codelutin.com>
- * @since 2.1
- */
-public class DemoTreeHelper extends JaxxTreeHelper<DemoNode> {
-
- public DemoTreeHelper(DemoDataProvider provider) {
- setDataProvider(provider);
- }
-
- @Override
- public DemoDataProvider getDataProvider() {
- return (DemoDataProvider) super.getDataProvider();
- }
-
- public TreeModel createTreeModel() {
-
- // Create root static node
- DemoNode root = new DemoNode("jaxxdemo.tree");
-
- // Create model
- JaxxDelegateTreeModel<DemoNode> model = createTreeModel(root);
-
- // load all nodes of model
- loadAllNodes(model, root, getDataProvider());
-
- return getTreeModel();
- }
-}
\ No newline at end of file
Added: trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoTreeHelper.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoTreeHelper.java (rev 0)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoTreeHelper.java 2010-06-29 22:50:39 UTC (rev 2010)
@@ -0,0 +1,61 @@
+/*
+ * #%L
+ * JAXX :: Demo
+ *
+ * $Id: DemoTreeHelper.java 2009 2010-06-29 16:09:09Z sletellier $
+ * $HeadURL: http://svn.nuiton.org/svn/jaxx/trunk/jaxx-demo/src/main/java/jaxx/demo/tree… $
+ * %%
+ * 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.tree;
+
+import jaxx.runtime.swing.nav.JaxxDelegateTreeModel;
+import jaxx.runtime.swing.nav.JaxxNavHelper;
+
+import javax.swing.tree.TreeModel;
+
+/**
+ * @author tchemit <tchemit(a)codelutin.com>
+ * @since 2.1
+ */
+public class DemoTreeHelper extends JaxxNavHelper<DemoNode> {
+
+ public DemoTreeHelper(DemoDataProvider provider) {
+ setDataProvider(provider);
+ }
+
+ @Override
+ public DemoDataProvider getDataProvider() {
+ return (DemoDataProvider) super.getDataProvider();
+ }
+
+ public TreeModel createTreeModel() {
+
+ // Create root static node
+ DemoNode root = new DemoNode("jaxxdemo.tree");
+
+ // Create model
+ JaxxDelegateTreeModel<DemoNode> model = createTreeModel(root);
+
+ // load all nodes of model
+ loadAllNodes(model, root, getDataProvider());
+
+ return getTreeModel();
+ }
+}
\ No newline at end of file
Modified: 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 16:09:09 UTC (rev 2009)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxDelegateTreeModel.java 2010-06-29 22:50:39 UTC (rev 2010)
@@ -41,21 +41,40 @@
import java.util.EventListener;
import java.util.List;
+/**
+ * Delegate model used to switch between tree model and tree table model api
+ *
+ * @author sletellier <letellier(a)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;
Copied: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxNavHelper.java (from rev 2009, trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/JaxxTreeHelper.java)
===================================================================
--- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxNavHelper.java (rev 0)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxNavHelper.java 2010-06-29 22:50:39 UTC (rev 2010)
@@ -0,0 +1,986 @@
+/*
+ * #%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.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;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * 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}.
+ * <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
+ * root node.
+ * <p/>
+ * To obtain the model, use method {@link #getModel()}.
+ * <p/>
+ * <b>Note:</b> The helper internal model can be different from the tree model,
+ * but must be the <b>lowest</b> model, other models must listen nicely this
+ * model to obtain model modification and selection notifications.
+ * <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)}.
+ * <p/>
+ * To obtain the tree, use method {@link #getTree()}.
+ * <h3>Internal data provider</h3>
+ * To populate childs nodes and render nodes, we use a {@link jaxx.runtime.swing.nav.DataProvider}.
+ * <p/>
+ * To register the data provider, use method {@link #setDataProvider(jaxx.runtime.swing.nav.DataProvider)}.
+ * <p/>
+ * To obtain the data provider, use method {@link #getDataProvider()}.
+ * <h2>Internal listeners</h2>
+ * Several listeners are used to manage the auto-loading of nodes in model :
+ * <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.
+ * <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)}.
+ * <h3>{@link #selectionListener}</h3>
+ * To listen modification of the selection, it will mainly expand paths if required.
+ * <p/>
+ * This is a requirement, since childs of a node should NOT be loaded, so when
+ * selects a node, always check the path from root to selected node are all fully
+ * loaded.
+ * <h2>Model methods</h2>
+ * 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>
+ * <p/>
+ * </ul>
+ * <h3>Model selection modification</h3>
+ * <ul>
+ * <li>{@link #selectNode(jaxx.runtime.swing.nav.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>
+ * </ul>
+ * <h3>Child loadors factory</h3>
+ * The class offers a factory of {@link jaxx.runtime.swing.nav.JaxxNodeChildLoador}, use the method
+ * {@link #getChildLoador(Class)} to obtain the correct child loador given his type.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @see jaxx.runtime.swing.nav.JaxxNode
+ * @see jaxx.runtime.swing.nav.JaxxNodeChildLoador
+ * @see jaxx.runtime.swing.nav.tree.AbstractJaxxTreeCellRenderer
+ * @since 2.1
+ */
+public class JaxxNavHelper<N extends JaxxNode<N>> {
+
+ /** Logger */
+ static private final Log log = LogFactory.getLog(JaxxNavHelper.class);
+
+ /**
+ * The shared instance of tree model.
+ * <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).
+ * <p/>
+ * 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;
+
+ /**
+ * 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 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;
+
+ /**
+ * 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}).
+ */
+ protected TreeWillExpandListener expandListener;
+
+ /**
+ * pour ouvrir les fils d'un noeud que l'on vient de sélectionner pour
+ * éviter d'avoir à faire des doubles clics.
+ */
+ protected TreeSelectionListener selectionListener;
+
+ /**
+ * pour recharger le rendu des noeuds (et charger les fils si nécessaires)
+ * lors d'une modification dans le modèle de l'arbre.
+ */
+ protected TreeModelListener treeModelListener;
+
+ /** Cache of child loadors. */
+ protected static Set<? super JaxxNodeChildLoador<?, ?, ?>> childLoadors;
+
+ protected static Set<? super JaxxNodeChildLoador<?, ?, ?>> getChildLoadors() {
+ if (childLoadors == null) {
+ childLoadors = new HashSet<JaxxNodeChildLoador<?, ?, ?>>();
+ }
+ return childLoadors;
+ }
+
+ /**
+ * Obtains the {@link JaxxNodeChildLoador} of the given {@code type} from
+ * internal cache.
+ * <p/>
+ * <b>Note:</b> The loador will be instanciated if not found, and push in cache.
+ *
+ * @param type the type of loador to get
+ * @param <L> the type of loador to get
+ * @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;
+ for (Object loador : cache) {
+ if (type.equals(loador.getClass())) {
+ result = (JaxxNodeChildLoador<?, ?, ?>) loador;
+ break;
+ }
+ }
+ if (result == null) {
+ // add it in cache
+ try {
+ result = type.newInstance();
+ cache.add(result);
+ if (log.isDebugEnabled()) {
+ log.debug("Add " + result + " in loadors cache (new size:" + cache.size() + ").");
+ }
+ } catch (Exception e) {
+ throw new IllegalArgumentException("Could not instanciate loador [" + type.getName() + "]", e);
+ }
+ }
+ return (L) result;
+ }
+
+ public JaxxNavHelper() {
+
+ selectionListener = new TreeSelectionListener() {
+
+ @Override
+ public void valueChanged(TreeSelectionEvent e) {
+ if (!checkModel()) {
+ return;
+ }
+
+ // Hack, because event.getSource for TreeTable doesnt return selectionModel
+ TreeSelectionModel source = getSelectionModel();
+
+ if (source.isSelectionEmpty()) {
+
+ // empty selection
+ if (log.isDebugEnabled()) {
+ log.debug("Selection is empty.");
+ }
+ return;
+ }
+
+ boolean debugEnabled = log.isDebugEnabled();
+ boolean traceEnabled = log.isTraceEnabled();
+ for (TreePath path : e.getPaths()) {
+
+ N node = getNode(path);
+ if (node == null) {
+
+ // pas de noeud selectionne
+ if (debugEnabled) {
+ log.debug("Skip for null node.");
+ }
+ continue;
+ }
+
+ boolean isAdded = e.isAddedPath(path);
+
+ TreePath pathToExpand = new TreePath(model.getPathToRoot(node));
+ boolean pathExpanded = isExpanded(pathToExpand);
+
+ if (traceEnabled || isAdded && debugEnabled) {
+ log.debug("==== Node selection ====================================");
+ log.debug("node ? " + node);
+ log.debug("is added ? " + isAdded);
+ log.debug("is path expanded ? " + pathExpanded);
+ log.debug("is node static ? " + node.isStaticNode());
+ log.debug("is node loaded ? " + node.isLoaded());
+ log.debug("is node leaf ? " + node.isLeaf());
+ log.debug("node nb childs ? " + node.getChildCount());
+ }
+
+ if (isAdded && !pathExpanded) {
+
+ // ask to expand path
+ log.info("expand node [" + pathToExpand + "]");
+ expandPath(pathToExpand);
+ }
+ }
+ }
+ };
+ expandListener = new TreeWillExpandListener() {
+ @Override
+ public void treeWillExpand(TreeExpansionEvent event) {
+
+ if (!checkModel()) {
+ // no model
+ return;
+ }
+
+ N source = getNode(event.getPath());
+
+ if (source.isLoaded()) {
+
+ // node is already loaded, nothing to do
+ return;
+ }
+
+ if (log.isDebugEnabled()) {
+ log.debug("will load childs of node [" + source + "]");
+ }
+ // populate childs of node
+ source.populateChilds(model, getDataProvider());
+ }
+
+ @Override
+ public void treeWillCollapse(TreeExpansionEvent event) {
+ }
+ };
+
+
+ treeModelListener = new TreeModelListener() {
+ @Override
+ public void treeNodesInserted(TreeModelEvent e) {
+ if (!checkModel()) {
+ // no model
+ return;
+ }
+ N source = getNode(e.getTreePath());
+ Object[] children = e.getChildren();
+ if (log.isDebugEnabled()) {
+ log.debug(getMessage("inserted ", source, children));
+ }
+
+ // ask to populate children nodes
+ populateNode(null, children, false);
+ }
+
+ @SuppressWarnings({"unchecked"})
+ @Override
+ public void treeNodesRemoved(TreeModelEvent e) {
+ if (!checkModel()) {
+ // no model
+ return;
+ }
+ N source = getNode(e.getTreePath());
+ Object[] children = e.getChildren();
+ if (log.isDebugEnabled()) {
+ log.debug(getMessage("removed ", source, children));
+ }
+
+ // Invalidates nodes in renderer cache (if any)
+ AbstractJaxxTreeCellRenderer<N> renderer = getTreeCellRenderer();
+ if (children != null && renderer != null) {
+ for (Object child : children) {
+ renderer.invalidateCache((N) child);
+ }
+ }
+ }
+
+ @Override
+ public void treeNodesChanged(TreeModelEvent e) {
+ if (!checkModel()) {
+ // no model
+ return;
+ }
+
+ N source = getNode(e.getTreePath());
+ Object[] children = e.getChildren();
+ if (log.isDebugEnabled()) {
+ log.debug(getMessage("changed ", source, children));
+ }
+
+ // ask to populate modified child nodes
+ populateNode(null, children, false);
+ }
+
+ @Override
+ public void treeStructureChanged(TreeModelEvent e) {
+ if (!checkModel()) {
+ // no model
+ return;
+ }
+ N source = getNode(e.getTreePath());
+ Object[] children = e.getChildren();
+ if (log.isDebugEnabled()) {
+ log.debug(getMessage("structure changed", source, children));
+ }
+
+ // ask to populate structure modified node and nodes recursively
+ populateNode(source, children, true);
+ }
+
+ protected String getMessage(String action, N source, Object[] children) {
+ StringBuilder sb = new StringBuilder();
+ sb.append("==== Nodes ");
+ sb.append(action);
+ sb.append(" =================");
+ sb.append("\nsource : ").append(source);
+ sb.append("\nnb nodes : ");
+ sb.append(children == null ? 0 : children.length);
+ if (children != null) {
+ int i = 0;
+ for (Object child : children) {
+ sb.append("\n [");
+ sb.append(i++);
+ sb.append("] - ");
+ sb.append(child);
+ }
+ }
+ return sb.toString();
+ }
+ };
+ }
+
+ /**
+ * Obtains the attached data provider used to populate and render nodes.
+ *
+ * @return the attached data provider
+ */
+ protected DataProvider getDataProvider() {
+ return dataProvider;
+ }
+
+ /**
+ * Obtains the registred tree.
+ *
+ * @return the registred tree for this helper or {@code null} if none was registred
+ */
+ public JTree getTree() {
+ return tree;
+ }
+
+ /**
+ * 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;
+ }
+
+ /**
+ * Obtains the internal tree table model.
+ *
+ * @return the internal tree table model or {@code null} if none was created.
+ */
+ public DefaultTreeModel getTreeModel() {
+ return model.getTreeDelegateModel();
+ }
+
+ /**
+ * 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();
+ }
+
+ /**
+ * 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}.
+ */
+ @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;
+ }
+
+ /**
+ * Obtains the selected node of the registred tree.
+ *
+ * @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;
+ }
+
+ /**
+ * Obtains the path of ids fro the root node to the selected node on the
+ * registred tree.
+ *
+ * @return the array of ids from root node to selected node.
+ */
+ public String[] getSelectedIds() {
+ List<String> result = new ArrayList<String>();
+ N selectedNode = getSelectedNode();
+ while (selectedNode != null && !selectedNode.isRoot()) {
+
+ result.add(selectedNode.getId());
+ selectedNode = selectedNode.getParent();
+ }
+ Collections.reverse(result);
+ return result.toArray(new String[result.size()]);
+ }
+
+ /**
+ * 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
+ * {@link #expandListener} listener and the {@link #selectionListener}.
+ *
+ * @param tree the tree to register
+ * @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);
+ }
+
+ /**
+ * 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
+ */
+ public void setTreeTable(JXTreeTable treeTable,
+ boolean addExpandTreeListener,
+ TreeSelectionListener listener) {
+ this.treeTable = treeTable;
+ if (addExpandTreeListener) {
+ this.treeTable.addTreeWillExpandListener(expandListener);
+ }
+ if (listener != null) {
+ this.treeTable.addTreeSelectionListener(listener);
+ }
+ this.treeTable.addTreeSelectionListener(selectionListener);
+ }
+
+ /**
+ * Inserts the given node to the given {@code parentNode}.
+ * <p/>
+ * The node will be added to his parent, then creation listeners will be
+ * fired.
+ *
+ * @param parentNode the parent node where to insert the new node *
+ * @param newNode the node to insert
+ */
+ public void insertNode(N parentNode, N newNode) {
+ parentNode.add(newNode);
+ if (!model.isTreeTable()) {
+ model.notifyNodeInserted(newNode);
+ } else {
+ model.nodeStructureChanged(parentNode);
+ }
+ }
+
+ /**
+ * Removes the given {@code node} from the registred tree model and returns
+ * his parent.
+ *
+ * @param node the node to remove
+ * @return the parent node of the removed node.
+ */
+ public N removeNode(N node) {
+ N parentNode = node.getParent();
+ model.removeNodeFromParent(node);
+ return parentNode;
+ }
+
+ /**
+ * Moves the given {@code node} to the new {@code position}.
+ *
+ * @param parentNode the parent node
+ * @param node the node to move
+ * @param position the new position of the node
+ */
+ public void moveNode(N parentNode, N node, int position) {
+ parentNode.remove(node);
+ parentNode.insert(node, position);
+ model.nodeStructureChanged(parentNode);
+ }
+
+ /**
+ * Refreshs the given {@code node}.
+ * <p/>
+ * If flag {@code deep} is set to {@code true}, then it will refresh
+ * recursively children nodes.
+ * <p/>
+ * <b>Note:</b>As a side-effect, evvery node involved will become
+ * {@code dirty}.
+ *
+ * @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()
+ */
+ @SuppressWarnings({"unchecked"})
+ public void refreshNode(N node, boolean deep) {
+ if (log.isDebugEnabled()) {
+ log.debug("Will refresh (deep ? " + deep + ") node " + node);
+ }
+ model.nodeChanged(node);
+ if (deep) {
+ // repaint childs nodes
+ Enumeration<N> e = node.children();
+ while (e.hasMoreElements()) {
+ N child = e.nextElement();
+ refreshNode(child, true);
+ }
+ }
+ }
+
+ /**
+ * 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) {
+ if (!checkModel()) {
+ return;
+ }
+ if (!node.isLoaded()) {
+ node.populateChilds(model, dataProvider);
+ Enumeration<? extends JaxxNode<?>> enumeration = node.children();
+ while (enumeration.hasMoreElements()) {
+ N jaxxNode = (N) enumeration.nextElement();
+ loadAllNodes(model, jaxxNode, dataProvider);
+ }
+ }
+ }
+
+ /**
+ * Selects the parent of the currently selected node.
+ * <p/>
+ * <b>Note:</> If selection is empty, then throws a NPE.
+ *
+ * @throws NullPointerException if selection is empty
+ */
+ public void selectParentNode() throws NullPointerException {
+
+ N node = getSelectedNode();
+
+ if (node == null) {
+ // pas de noeud selectionne
+ throw new NullPointerException("no selected node in context");
+ }
+ node = node.getParent();
+
+ selectNode(node);
+ }
+
+ /**
+ * Selects the given {@code node} in the registred tree.
+ *
+ * @param node the node to select
+ */
+ public void selectNode(N node) {
+ if (!checkModel()) {
+
+ // no model
+ return;
+ }
+ if (log.isDebugEnabled()) {
+ log.debug("try to select node [" + node + "]");
+ }
+ TreePath path = new TreePath(model.getPathToRoot(node));
+
+ setSelectionPath(path);
+ scrollPathToVisible(path);
+ }
+
+ /**
+ * Selects the node described by his given {@code path} of ids.
+ *
+ * @param path the absolute path of ids from root node to node to select.
+ */
+ public void selectNode(String... path) {
+ if (!checkModel()) {
+
+ // no model
+ return;
+ }
+ if (log.isDebugEnabled()) {
+ log.debug("try to select node from ids " + Arrays.toString(path));
+ }
+ N root = model.getRoot();
+ N node = findNode(root, path);
+ if (log.isDebugEnabled()) {
+ log.debug("selected node [" + node + "]");
+ }
+ if (node != null) {
+ selectNode(node);
+ }
+ }
+
+ /**
+ * Finds a node from the given root {@code node}, applying the path given
+ * by {@code ids}.
+ *
+ * @param node the starting node
+ * @param ids the path of ids to apply on the node.
+ * @return the find node or {@code null} if no node matchs.
+ */
+ public N findNode(N node, String... ids) {
+ if (!checkModel()) {
+
+ // no model
+ return null;
+ }
+ N result = null;
+ for (String id : ids) {
+
+ result = node.findNodeById(id, model, getDataProvider());
+
+ if (result == null) {
+
+ // un des noeud n'a pas ete trouve, on sort
+ break;
+ }
+ node = result;
+ }
+ return result;
+ }
+
+ /**
+ * 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.
+ */
+ protected boolean checkModel() {
+ if (model == null) {
+
+ // no model set,
+ log.warn("No model set in " + this);
+ return false;
+ }
+ // model is set
+ return true;
+ }
+
+ /**
+ * Populates nodes.
+ * <p/>
+ * If {@code node} is not {@code null}, then populate it.
+ * <p/>
+ * If {@code children} is not {@code null}, then populate them, moreover
+ * if {@code recurse} is set to {@code true} then do a recurse refresh on
+ * children.
+ *
+ * @param node the parent node to populate (optional)
+ * @param children the child nodes to populate (optional)
+ * @param recurse flag sets to {@code true} if should do recurse refresh on
+ * given {@code children} nodes.
+ */
+ @SuppressWarnings({"unchecked"})
+ protected void populateNode(N node,
+ Object[] children,
+ boolean recurse) {
+ DataProvider dataProvider = getDataProvider();
+ if (node != null) {
+ if (log.isDebugEnabled()) {
+ log.debug("Will populate node : " + node);
+ }
+ node.populateNode(model, dataProvider, false);
+ }
+ if (children != null) {
+ for (Object o : children) {
+ N child = (N) o;
+ if (log.isDebugEnabled()) {
+ log.debug("Will populate child node : " + child);
+ }
+ child.populateNode(model, dataProvider, recurse);
+ }
+ }
+ }
+
+ /**
+ * Convinient method to objet the casted node of a {@link TreePath}.
+ *
+ * @param path the path contaning the node.
+ * @return the casted node from the path.
+ */
+ @SuppressWarnings({"unchecked"})
+ protected N getNode(TreePath path) {
+ N result = (N) path.getLastPathComponent();
+ 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 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);
+ }
+}
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxNavHelper.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
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 16:09:09 UTC (rev 2009)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxNode.java 2010-06-29 22:50:39 UTC (rev 2010)
@@ -24,19 +24,18 @@
*/
package jaxx.runtime.swing.nav;
-import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeNode;
import java.io.Serializable;
/**
- * Definition of a node with a optional {@link #childLoador} to build childs of
+ * Definition of a node with a optional {@code childLoador} to build childs of
* node.
* <p/>
- * A node is identified by an {@link #id} of an associated data of type
- * {@link #internalClass}.
+ * A node is identified by an {@link #getId} of an associated data of type
+ * {@link #getInternalClass}.
* <p/>
* <b>Note:</b>
- * <p><i> While using a {@link #childLoador}, we can not know before node
+ * <p><i> While using a {@code childLoador}, we can not know before node
* was loaded the exact count of his childs. As a matter of facts, real leaf
* nodes appears at the beginning in ui as a not leaf (there is a root handler).
* When node was loaded, a leaf node will be then displayed as required.
@@ -72,7 +71,7 @@
* Some nodes do not need auto-loading, we call them {@code static nodes}.
* The method {@link #isStaticNode()} gives this state.
* <p/>
- * <b>Note:</b> A static node has no {@link #childLoador}.
+ * <b>Note:</b> A static node has no {@code childLoador}.
* <h2>Node loading</h2>
* Initialy node has no data child nodes, ({@link #isLoaded()} equals
* {@code false}).
@@ -80,10 +79,10 @@
* {@link #populateNode(JaxxDelegateTreeModel , DataProvider, boolean)}
* and {@link #populateChilds(JaxxDelegateTreeModel , DataProvider)} methods.
* <h2>Node rendering</h2
- * the {@link jaxx.runtime.swing.nav.tree.AbstractJaxxTreeCellRenderer} looks the {@link #dirty} state to
+ * the {@link jaxx.runtime.swing.nav.tree.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 #dirty} should be set to {@code true}.
+ * Each time, a node is modified, the {@link #isDirty} should be set to {@code true}.
*
* @author tchemit <chemit(a)codelutin.com>
* @since 2.1
@@ -110,10 +109,10 @@
/**
* To know if the node is static.
* <p/>
- * A {@code static} node has no {@link #childLoador}.
+ * A {@code static} node has no {@code childLoador}.
*
* @return {@code true} when the node is static : says, the node has
- * no {@link #childLoador}.
+ * no {@code childLoador}.
*/
boolean isStaticNode();
@@ -129,7 +128,7 @@
* Given an {@code id}, obtain the child with matching id.
* <p/>
* If node is NOT {@code loaded}, then first loads it (method
- * {@link #populateChilds(DefaultTreeModel, DataProvider)}) then do search
+ * {@link #populateChilds(JaxxDelegateTreeModel, DataProvider)}) then do search
* on direct childs of the node.
*
* @param id the id of the researched node
@@ -142,7 +141,7 @@
DataProvider provider);
/**
- * Changes the {@link #dirty} state.
+ * Changes the {@link #isDirty} state.
* <p/>
* As a side effect, when a renderer will use this node, it will force to
* reload the render from the {@link DataProvider}.
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 16:09:09 UTC (rev 2009)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxNodeChildLoador.java 2010-06-29 22:50:39 UTC (rev 2010)
@@ -37,7 +37,7 @@
* {@link #loadChilds(JaxxDelegateTreeModel , JaxxNode, DataProvider)} to obtain datas
* then build childs nodes.
* <p/>
- * A factory of such objects can be found in {@link jaxx.runtime.swing.nav.tree.JaxxTreeHelper} to make
+ * A factory of such objects can be found in {@link JaxxNavHelper} to make
* them reusable in other places than inside a {@link JaxxNode} to auto-load
* childs.
* <p/>
@@ -48,7 +48,7 @@
* @param <T> type of data used to create nodes (can be just a String type to use only ids)
* @param <O> type of data associated with nodes
* @param <N> type of node to used (to make possible full co-variance and no cast in fal implementations).
- * @see jaxx.runtime.swing.nav.tree.JaxxTreeHelper
+ * @see JaxxNavHelper
* @see JaxxNode
* @since 2.1
*/
Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/package.html
===================================================================
--- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/package.html 2010-06-29 16:09:09 UTC (rev 2009)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/package.html 2010-06-29 22:50:39 UTC (rev 2010)
@@ -2,7 +2,7 @@
<body>
<h1>JAXX - tree utilities</h1>
-This package contains all the classes of the new tree framework.
+This package contains all the classes of the new tree and treeTable framework.
<p>
Replace the previous framework from package
@@ -28,23 +28,56 @@
were loaded, if not, load them then give by hand to system.
</p>
+<p>
+ This api allow to switch easily between tree implementation and tree table
+ api.
+</p>
+
+
<h1>Api</h1>
+
<h2>DataProvider</h2>
Contract of objet responsible of acquiring data to populate nodes and render them.
<h2>JaxxNode</h2>
-An override of DefaultMutableTreeNode customized for our purpose (loaded, dirty
-states,...)
+Jaxx node contract customized for our purpose (loaded, dirty
+states,...).
<h2>JaxxNodeChildLoador</h2>
-Object to load childs of a node using DataProvider.
+Contract to load childs of a JaxxNode using DataProvider.
-<h2>JaxxTreeHelper</h2>
-Helper to manage a tree using auto-loading nodes.
+<h2>JaxxNavHelper</h2>
+Helper to manage a tree or a tree table using auto-loading nodes.
+<h2>JaxxDelegateTreeModel</h2>
+Model to switch between tree model and tree table model.
+
+
+<h1>Tree api</h1>
+
+
+<h2>JaxxTreeNode</h2>
+An override of DefaultMutableTreeNode implement JaxxNode.
+
+<h2>JaxxTreeNodeChildLoador</h2>
+Object to load childs of a tree node using DataProvider.
+
<h2>AbstractJaxxTreeCellRenderer</h2>
Abstract renderer using DataProvider to acquire node render.
+
+<h1>Tree table api</h1>
+
+
+<h2>JaxxTreeTableNode</h2>
+An override of DefaultMutableTreeTableNode implement JaxxNode
+
+<h2>JaxxTreeTableNodeChildLoador</h2>
+Object to load childs of a tree table node using DataProvider.
+
+<h2>JaxxTreeTableModel</h2>
+Implementation of TreeTableModel used by JaxxDelegateTreeModel
+
</body>
</html>
Deleted: 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 2010-06-29 16:09:09 UTC (rev 2009)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/JaxxTreeHelper.java 2010-06-29 22:50:39 UTC (rev 2010)
@@ -1,989 +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.tree;
-
-import jaxx.runtime.swing.nav.JaxxDelegateTreeModel;
-import jaxx.runtime.swing.nav.treetable.JaxxTreeTableModel;
-import jaxx.runtime.swing.nav.DataProvider;
-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.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;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-/**
- * 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}.
- * <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
- * root node.
- * <p/>
- * To obtain the model, use method {@link #getModel()}.
- * <p/>
- * <b>Note:</b> The helper internal model can be different from the tree model,
- * but must be the <b>lowest</b> model, other models must listen nicely this
- * model to obtain model modification and selection notifications.
- * <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)}.
- * <p/>
- * To obtain the tree, use method {@link #getTree()}.
- * <h3>Internal data provider</h3>
- * To populate childs nodes and render nodes, we use a {@link jaxx.runtime.swing.nav.DataProvider}.
- * <p/>
- * To register the data provider, use method {@link #setDataProvider(jaxx.runtime.swing.nav.DataProvider)}.
- * <p/>
- * To obtain the data provider, use method {@link #getDataProvider()}.
- * <h2>Internal listeners</h2>
- * Several listeners are used to manage the auto-loading of nodes in model :
- * <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.
- * <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)}.
- * <h3>{@link #selectionListener}</h3>
- * To listen modification of the selection, it will mainly expand paths if required.
- * <p/>
- * This is a requirement, since childs of a node should NOT be loaded, so when
- * selects a node, always check the path from root to selected node are all fully
- * loaded.
- * <h2>Model methods</h2>
- * 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>
- * <p/>
- * </ul>
- * <h3>Model selection modification</h3>
- * <ul>
- * <li>{@link #selectNode(jaxx.runtime.swing.nav.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>
- * </ul>
- * <h3>Child loadors factory</h3>
- * The class offers a factory of {@link jaxx.runtime.swing.nav.JaxxNodeChildLoador}, use the method
- * {@link #getChildLoador(Class)} to obtain the correct child loador given his type.
- *
- * @author tchemit <chemit(a)codelutin.com>
- * @see jaxx.runtime.swing.nav.JaxxNode
- * @see jaxx.runtime.swing.nav.JaxxNodeChildLoador
- * @see AbstractJaxxTreeCellRenderer
- * @since 2.1
- */
-public class JaxxTreeHelper<N extends JaxxNode<N>> {
-
- /** Logger */
- static private final Log log = LogFactory.getLog(JaxxTreeHelper.class);
-
- /**
- * The shared instance of tree model.
- * <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).
- * <p/>
- * 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;
-
- /**
- * 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 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;
-
- /**
- * 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}).
- */
- protected TreeWillExpandListener expandListener;
-
- /**
- * pour ouvrir les fils d'un noeud que l'on vient de sélectionner pour
- * éviter d'avoir à faire des doubles clics.
- */
- protected TreeSelectionListener selectionListener;
-
- /**
- * pour recharger le rendu des noeuds (et charger les fils si nécessaires)
- * lors d'une modification dans le modèle de l'arbre.
- */
- protected TreeModelListener treeModelListener;
-
- /** Cache of child loadors. */
- protected static Set<? super JaxxNodeChildLoador<?, ?, ?>> childLoadors;
-
- protected static Set<? super JaxxNodeChildLoador<?, ?, ?>> getChildLoadors() {
- if (childLoadors == null) {
- childLoadors = new HashSet<JaxxNodeChildLoador<?, ?, ?>>();
- }
- return childLoadors;
- }
-
- /**
- * Obtains the {@link JaxxNodeChildLoador} of the given {@code type} from
- * internal cache.
- * <p/>
- * <b>Note:</b> The loador will be instanciated if not found, and push in cache.
- *
- * @param type the type of loador to get
- * @param <L> the type of loador to get
- * @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;
- for (Object loador : cache) {
- if (type.equals(loador.getClass())) {
- result = (JaxxNodeChildLoador<?, ?, ?>) loador;
- break;
- }
- }
- if (result == null) {
- // add it in cache
- try {
- result = type.newInstance();
- cache.add(result);
- if (log.isDebugEnabled()) {
- log.debug("Add " + result + " in loadors cache (new size:" + cache.size() + ").");
- }
- } catch (Exception e) {
- throw new IllegalArgumentException("Could not instanciate loador [" + type.getName() + "]", e);
- }
- }
- return (L) result;
- }
-
- public JaxxTreeHelper() {
-
- selectionListener = new TreeSelectionListener() {
-
- @Override
- public void valueChanged(TreeSelectionEvent e) {
- if (!checkModel()) {
- return;
- }
-
- // Hack, because event.getSource for TreeTable doesnt return selectionModel
- TreeSelectionModel source = getSelectionModel();
-
- if (source.isSelectionEmpty()) {
-
- // empty selection
- if (log.isDebugEnabled()) {
- log.debug("Selection is empty.");
- }
- return;
- }
-
- boolean debugEnabled = log.isDebugEnabled();
- boolean traceEnabled = log.isTraceEnabled();
- for (TreePath path : e.getPaths()) {
-
- N node = getNode(path);
- if (node == null) {
-
- // pas de noeud selectionne
- if (debugEnabled) {
- log.debug("Skip for null node.");
- }
- continue;
- }
-
- boolean isAdded = e.isAddedPath(path);
-
- TreePath pathToExpand = new TreePath(model.getPathToRoot(node));
- boolean pathExpanded = isExpanded(pathToExpand);
-
- if (traceEnabled || isAdded && debugEnabled) {
- log.debug("==== Node selection ====================================");
- log.debug("node ? " + node);
- log.debug("is added ? " + isAdded);
- log.debug("is path expanded ? " + pathExpanded);
- log.debug("is node static ? " + node.isStaticNode());
- log.debug("is node loaded ? " + node.isLoaded());
- log.debug("is node leaf ? " + node.isLeaf());
- log.debug("node nb childs ? " + node.getChildCount());
- }
-
- if (isAdded && !pathExpanded) {
-
- // ask to expand path
- log.info("expand node [" + pathToExpand + "]");
- expandPath(pathToExpand);
- }
- }
- }
- };
- expandListener = new TreeWillExpandListener() {
- @Override
- public void treeWillExpand(TreeExpansionEvent event) {
-
- if (!checkModel()) {
- // no model
- return;
- }
-
- N source = getNode(event.getPath());
-
- if (source.isLoaded()) {
-
- // node is already loaded, nothing to do
- return;
- }
-
- if (log.isDebugEnabled()) {
- log.debug("will load childs of node [" + source + "]");
- }
- // populate childs of node
- source.populateChilds(model, getDataProvider());
- }
-
- @Override
- public void treeWillCollapse(TreeExpansionEvent event) {
- }
- };
-
-
- treeModelListener = new TreeModelListener() {
- @Override
- public void treeNodesInserted(TreeModelEvent e) {
- if (!checkModel()) {
- // no model
- return;
- }
- N source = getNode(e.getTreePath());
- Object[] children = e.getChildren();
- if (log.isDebugEnabled()) {
- log.debug(getMessage("inserted ", source, children));
- }
-
- // ask to populate children nodes
- populateNode(null, children, false);
- }
-
- @SuppressWarnings({"unchecked"})
- @Override
- public void treeNodesRemoved(TreeModelEvent e) {
- if (!checkModel()) {
- // no model
- return;
- }
- N source = getNode(e.getTreePath());
- Object[] children = e.getChildren();
- if (log.isDebugEnabled()) {
- log.debug(getMessage("removed ", source, children));
- }
-
- // Invalidates nodes in renderer cache (if any)
- AbstractJaxxTreeCellRenderer<N> renderer = getTreeCellRenderer();
- if (children != null && renderer != null) {
- for (Object child : children) {
- renderer.invalidateCache((N) child);
- }
- }
- }
-
- @Override
- public void treeNodesChanged(TreeModelEvent e) {
- if (!checkModel()) {
- // no model
- return;
- }
-
- N source = getNode(e.getTreePath());
- Object[] children = e.getChildren();
- if (log.isDebugEnabled()) {
- log.debug(getMessage("changed ", source, children));
- }
-
- // ask to populate modified child nodes
- populateNode(null, children, false);
- }
-
- @Override
- public void treeStructureChanged(TreeModelEvent e) {
- if (!checkModel()) {
- // no model
- return;
- }
- N source = getNode(e.getTreePath());
- Object[] children = e.getChildren();
- if (log.isDebugEnabled()) {
- log.debug(getMessage("structure changed", source, children));
- }
-
- // ask to populate structure modified node and nodes recursively
- populateNode(source, children, true);
- }
-
- protected String getMessage(String action, N source, Object[] children) {
- StringBuilder sb = new StringBuilder();
- sb.append("==== Nodes ");
- sb.append(action);
- sb.append(" =================");
- sb.append("\nsource : ").append(source);
- sb.append("\nnb nodes : ");
- sb.append(children == null ? 0 : children.length);
- if (children != null) {
- int i = 0;
- for (Object child : children) {
- sb.append("\n [");
- sb.append(i++);
- sb.append("] - ");
- sb.append(child);
- }
- }
- return sb.toString();
- }
- };
- }
-
- /**
- * Obtains the attached data provider used to populate and render nodes.
- *
- * @return the attached data provider
- */
- protected DataProvider getDataProvider() {
- return dataProvider;
- }
-
- /**
- * Obtains the registred tree.
- *
- * @return the registred tree for this helper or {@code null} if none was registred
- */
- public JTree getTree() {
- return tree;
- }
-
- /**
- * 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;
- }
-
- /**
- * Obtains the internal tree table model.
- *
- * @return the internal tree table model or {@code null} if none was created.
- */
- public DefaultTreeModel getTreeModel() {
- return model.getTreeDelegateModel();
- }
-
- /**
- * 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();
- }
-
- /**
- * 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}.
- */
- @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;
- }
-
- /**
- * Obtains the selected node of the registred tree.
- *
- * @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;
- }
-
- /**
- * Obtains the path of ids fro the root node to the selected node on the
- * registred tree.
- *
- * @return the array of ids from root node to selected node.
- */
- public String[] getSelectedIds() {
- List<String> result = new ArrayList<String>();
- N selectedNode = getSelectedNode();
- while (selectedNode != null && !selectedNode.isRoot()) {
-
- result.add(selectedNode.getId());
- selectedNode = selectedNode.getParent();
- }
- Collections.reverse(result);
- return result.toArray(new String[result.size()]);
- }
-
- /**
- * 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
- * {@link #expandListener} listener and the {@link #selectionListener}.
- *
- * @param tree the tree to register
- * @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);
- }
-
- /**
- * 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
- */
- public void setTreeTable(JXTreeTable treeTable,
- boolean addExpandTreeListener,
- TreeSelectionListener listener) {
- this.treeTable = treeTable;
- if (addExpandTreeListener) {
- this.treeTable.addTreeWillExpandListener(expandListener);
- }
- if (listener != null) {
- this.treeTable.addTreeSelectionListener(listener);
- }
- this.treeTable.addTreeSelectionListener(selectionListener);
- }
-
- /**
- * Inserts the given node to the given {@code parentNode}.
- * <p/>
- * The node will be added to his parent, then creation listeners will be
- * fired.
- *
- * @param parentNode the parent node where to insert the new node *
- * @param newNode the node to insert
- */
- public void insertNode(N parentNode, N newNode) {
- parentNode.add(newNode);
- if (!model.isTreeTable()) {
- model.notifyNodeInserted(newNode);
- } else {
- model.nodeStructureChanged(parentNode);
- }
- }
-
- /**
- * Removes the given {@code node} from the registred tree model and returns
- * his parent.
- *
- * @param node the node to remove
- * @return the parent node of the removed node.
- */
- public N removeNode(N node) {
- N parentNode = node.getParent();
- model.removeNodeFromParent(node);
- return parentNode;
- }
-
- /**
- * Moves the given {@code node} to the new {@code position}.
- *
- * @param parentNode the parent node
- * @param node the node to move
- * @param position the new position of the node
- */
- public void moveNode(N parentNode, N node, int position) {
- parentNode.remove(node);
- parentNode.insert(node, position);
- model.nodeStructureChanged(parentNode);
- }
-
- /**
- * Refreshs the given {@code node}.
- * <p/>
- * If flag {@code deep} is set to {@code true}, then it will refresh
- * recursively children nodes.
- * <p/>
- * <b>Note:</b>As a side-effect, evvery node involved will become
- * {@code dirty}.
- *
- * @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()
- */
- @SuppressWarnings({"unchecked"})
- public void refreshNode(N node, boolean deep) {
- if (log.isDebugEnabled()) {
- log.debug("Will refresh (deep ? " + deep + ") node " + node);
- }
- model.nodeChanged(node);
- if (deep) {
- // repaint childs nodes
- Enumeration<N> e = node.children();
- while (e.hasMoreElements()) {
- N child = e.nextElement();
- refreshNode(child, true);
- }
- }
- }
-
- /**
- * 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) {
- if (!checkModel()) {
- return;
- }
- if (!node.isLoaded()) {
- node.populateChilds(model, dataProvider);
- Enumeration<? extends JaxxNode<?>> enumeration = node.children();
- while (enumeration.hasMoreElements()) {
- N jaxxNode = (N) enumeration.nextElement();
- loadAllNodes(model, jaxxNode, dataProvider);
- }
- }
- }
-
- /**
- * Selects the parent of the currently selected node.
- * <p/>
- * <b>Note:</> If selection is empty, then throws a NPE.
- *
- * @throws NullPointerException if selection is empty
- */
- public void selectParentNode() throws NullPointerException {
-
- N node = getSelectedNode();
-
- if (node == null) {
- // pas de noeud selectionne
- throw new NullPointerException("no selected node in context");
- }
- node = node.getParent();
-
- selectNode(node);
- }
-
- /**
- * Selects the given {@code node} in the registred tree.
- *
- * @param node the node to select
- */
- public void selectNode(N node) {
- if (!checkModel()) {
-
- // no model
- return;
- }
- if (log.isDebugEnabled()) {
- log.debug("try to select node [" + node + "]");
- }
- TreePath path = new TreePath(model.getPathToRoot(node));
-
- setSelectionPath(path);
- scrollPathToVisible(path);
- }
-
- /**
- * Selects the node described by his given {@code path} of ids.
- *
- * @param path the absolute path of ids from root node to node to select.
- */
- public void selectNode(String... path) {
- if (!checkModel()) {
-
- // no model
- return;
- }
- if (log.isDebugEnabled()) {
- log.debug("try to select node from ids " + Arrays.toString(path));
- }
- N root = model.getRoot();
- N node = findNode(root, path);
- if (log.isDebugEnabled()) {
- log.debug("selected node [" + node + "]");
- }
- if (node != null) {
- selectNode(node);
- }
- }
-
- /**
- * Finds a node from the given root {@code node}, applying the path given
- * by {@code ids}.
- *
- * @param node the starting node
- * @param ids the path of ids to apply on the node.
- * @return the find node or {@code null} if no node matchs.
- */
- public N findNode(N node, String... ids) {
- if (!checkModel()) {
-
- // no model
- return null;
- }
- N result = null;
- for (String id : ids) {
-
- result = node.findNodeById(id, model, getDataProvider());
-
- if (result == null) {
-
- // un des noeud n'a pas ete trouve, on sort
- break;
- }
- node = result;
- }
- return result;
- }
-
- /**
- * 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.
- */
- protected boolean checkModel() {
- if (model == null) {
-
- // no model set,
- log.warn("No model set in " + this);
- return false;
- }
- // model is set
- return true;
- }
-
- /**
- * Populates nodes.
- * <p/>
- * If {@code node} is not {@code null}, then populate it.
- * <p/>
- * If {@code children} is not {@code null}, then populate them, moreover
- * if {@code recurse} is set to {@code true} then do a recurse refresh on
- * children.
- *
- * @param node the parent node to populate (optional)
- * @param children the child nodes to populate (optional)
- * @param recurse flag sets to {@code true} if should do recurse refresh on
- * given {@code children} nodes.
- */
- @SuppressWarnings({"unchecked"})
- protected void populateNode(N node,
- Object[] children,
- boolean recurse) {
- DataProvider dataProvider = getDataProvider();
- if (node != null) {
- if (log.isDebugEnabled()) {
- log.debug("Will populate node : " + node);
- }
- node.populateNode(model, dataProvider, false);
- }
- if (children != null) {
- for (Object o : children) {
- N child = (N) o;
- if (log.isDebugEnabled()) {
- log.debug("Will populate child node : " + child);
- }
- child.populateNode(model, dataProvider, recurse);
- }
- }
- }
-
- /**
- * Convinient method to objet the casted node of a {@link TreePath}.
- *
- * @param path the path contaning the node.
- * @return the casted node from the path.
- */
- @SuppressWarnings({"unchecked"})
- protected N getNode(TreePath path) {
- N result = (N) path.getLastPathComponent();
- 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 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/tree/JaxxTreeNode.java
===================================================================
--- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/JaxxTreeNode.java 2010-06-29 16:09:09 UTC (rev 2009)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/JaxxTreeNode.java 2010-06-29 22:50:39 UTC (rev 2010)
@@ -36,64 +36,11 @@
import java.util.Enumeration;
/**
- * Definition of a node with a optional {@link #childLoador} to build childs of
- * node.
- * <p/>
- * A node is identified by an {@link #id} of an associated data of type
- * {@link #internalClass}.
- * <p/>
- * <b>Note:</b>
- * <p><i> While using a {@link #childLoador}, we can not know before node
- * was loaded the exact count of his childs. As a matter of facts, real leaf
- * nodes appears at the beginning in ui as a not leaf (there is a root handler).
- * When node was loaded, a leaf node will be then displayed as required.
- * </i></p>
- * <p/>
- * <h2>Why JaxxNode is generic ?</h2>
- * In a project, you should implements your own Node extending with one like this :
- * <pre>
- * class MyNode extends JaxxNode<MyNode> { ... }
- * </pre>
- * While in this class, you overrides every method with a node return type,
- * co-variance you'll be able to use this code :
- * <pre>
- * MyNode parentNode = new MyNode();
- * MyNode node = parentNode.getFirstNode();
- * </pre>
- * So for final application this generic type avoid any cast for your own node
- * type, this is quite convinient.
- * <p/>
- * Even if in your project, you wants to have a heriarchy of nodes, this will
- * still works (if you use a genercic type on your abstract nodes).
- * <h2>Internal states</h2>
- * <ul>
- * <li><b>internalClass</b> : the type of data associated with the node</li>
- * <li><b>context</b> : an optinal context to distinguish different types of
- * node with same {@code internalclass}</li>
- * <li><b>id</b> : id of the data associated with the node</li>
- * <li><b>dirty</b> : flag sets to {@code true} when node render MUST be recomputed</li>
- * <li><b>loaded</b> : flag sets to {@code true} when node was loaded</li>
- * <li><b>childLoador</b> : optional loador of childs</li>
- * </ul>
- * <h2>Static nodes</h2>
- * Some nodes do not need auto-loading, we call them {@code static nodes}.
- * The method {@link #isStaticNode()} gives this state.
- * <p/>
- * <b>Note:</b> A static node has no {@link #childLoador}.
- * <h2>Node loading</h2>
- * 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(javax.swing.tree.DefaultTreeModel , jaxx.runtime.swing.nav.DataProvider , boolean)}
- * and {@link #populateChilds(javax.swing.tree.DefaultTreeModel , jaxx.runtime.swing.nav.DataProvider)} methods.
- * <h2>Node rendering</h2
- * the {@link AbstractJaxxTreeCellRenderer} looks the {@link #dirty} 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 #dirty} should be set to {@code true}.
+ * Implementation of {@link JaxxNode} used to create in tree table
+ * This node extends {@link DefaultMutableTreeNode}
*
* @author tchemit <chemit(a)codelutin.com>
- * @since 2.1
+ * @since 2.2
*/
public class JaxxTreeNode<N extends JaxxTreeNode<N>> extends DefaultMutableTreeNode implements JaxxNode<N> {
@@ -145,53 +92,42 @@
}
}
+ @Override
public String getId() {
return id;
}
+ @Override
public String getContext() {
return context;
}
+ @Override
public Class<?> getInternalClass() {
return internalClass;
}
+ @Override
public boolean isLoaded() {
return loaded;
}
+ @Override
public boolean isDirty() {
return dirty;
}
- /**
- * Convinient method to known if the node is a {@code String} typed.
- *
- * @return {@code true} if the type of node if
- */
+ @Override
public boolean isStringNode() {
return String.class.equals(internalClass);
}
- /**
- * To know if the node is static.
- * <p/>
- * A {@code static} node has no {@link #childLoador}.
- *
- * @return {@code true} when the node is static : says, the node has
- * no {@link #childLoador}.
- */
+ @Override
public boolean isStaticNode() {
return childLoador == null;
}
- /**
- * Gets the first node form this one to the root which has a none
- * {@code String} type.
- *
- * @return the first concrete node type
- */
+ @Override
@SuppressWarnings({"unchecked"})
public N getContainerNode() {
if (isRoot()) {
@@ -209,18 +145,7 @@
return (N) this;
}
- /**
- * Given an {@code id}, obtain the child with matching id.
- * <p/>
- * If node is NOT {@code loaded}, then first loads it (method
- * {@link #populateChilds(jaxx.runtime.swing.nav.JaxxDelegateTreeModel , jaxx.runtime.swing.nav.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 provider data provider
- * @return the found node or {@code null} if not found
- */
+ @Override
@SuppressWarnings({"unchecked"})
public N findNodeById(String id,
JaxxDelegateTreeModel<N> model,
@@ -262,14 +187,7 @@
return null;
}
- /**
- * Changes the {@link #dirty} state.
- * <p/>
- * As a side effect, when a renderer will use this node, it will force to
- * reload the render from the {@link DataProvider}.
- *
- * @param dirty the new dirty value
- */
+ @Override
public void setDirty(boolean dirty) {
this.dirty = dirty;
}
@@ -299,17 +217,7 @@
//-- Populate methods
//--------------------------------------------------------------------------
- /**
- * To populate the node. A side-effect of this method is to set {@code dirty}
- * the node (renderer will recompute the render of the node).
- * <p/>
- * If {@code populateChilds} is set to {@code true}, then also populate
- * childs of the node using the given {@code dataProvider}.
- *
- * @param model le modèles content le noeud
- * @param provider le provider de données
- * @param populateChilds un drapeau pour charger aussi les fils du noeud courant
- */
+ @Override
public void populateNode(JaxxDelegateTreeModel<N> model,
DataProvider provider,
boolean populateChilds) {
@@ -324,15 +232,7 @@
}
}
- /**
- * To populate childs of the node (only when a none static node).
- * A side-effect of this method is to set {@code loaded} of the node.
- * <p/>
- * For a static node, do nothing.
- *
- * @param model model owner of the node
- * @param provider data provider
- */
+ @Override
@SuppressWarnings({"unchecked"})
public void populateChilds(JaxxDelegateTreeModel<N> model, DataProvider provider) {
if (isStaticNode()) {
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 16:09:09 UTC (rev 2009)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/JaxxTreeNodeChildLoador.java 2010-06-29 22:50:39 UTC (rev 2010)
@@ -26,6 +26,12 @@
import jaxx.runtime.swing.nav.JaxxNodeChildLoador;
+/**
+ * Implementation for tree of {@link JaxxNodeChildLoador}
+ *
+ * @author sletellier <letellier(a)codelutin.com>
+ * @since 2.2
+ */
public abstract class JaxxTreeNodeChildLoador<T, O, N extends JaxxTreeNode<N>> extends JaxxNodeChildLoador<T, O, N> {
protected JaxxTreeNodeChildLoador(Class<O> beanType) {
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 16:09:09 UTC (rev 2009)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/JaxxTreeTableModel.java 2010-06-29 22:50:39 UTC (rev 2010)
@@ -38,7 +38,7 @@
/**
* Model of the tree table used for a jaxx tree table api.
*
- * @author sletellier
+ * @author sletellier <letellier(a)codelutin.com>
* @since 2.2
*/
public class JaxxTreeTableModel implements TreeTableModel {
@@ -46,10 +46,8 @@
/**
* Logger
*/
- static private final Log log =
- LogFactory.getLog(JaxxTreeTableModel.class);
+ static private final Log log = LogFactory.getLog(JaxxTreeTableModel.class);
-
/**
* Hack to acces to the modelSupport
*
@@ -139,6 +137,10 @@
delegate.setRoot(root);
}
+ //--------------------------------------------------------------------------
+ //-- Overrides delegate methode
+ //--------------------------------------------------------------------------
+
@Override
public TreeTableNode getRoot() {
return delegate.getRoot();
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 16:09:09 UTC (rev 2009)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/JaxxTreeTableNode.java 2010-06-29 22:50:39 UTC (rev 2010)
@@ -34,64 +34,12 @@
import java.util.Enumeration;
/**
- * Definition of a node with a optional {@link #childLoador} to build childs of
- * node.
- * <p/>
- * A node is identified by an {@link #id} of an associated data of type
- * {@link #internalClass}.
- * <p/>
- * <b>Note:</b>
- * <p><i> While using a {@link #childLoador}, we can not know before node
- * was loaded the exact count of his childs. As a matter of facts, real leaf
- * nodes appears at the beginning in ui as a not leaf (there is a root handler).
- * When node was loaded, a leaf node will be then displayed as required.
- * </i></p>
- * <p/>
- * <h2>Why JaxxNode is generic ?</h2>
- * In a project, you should implements your own Node extending with one like this :
- * <pre>
- * class MyNode extends JaxxNode<MyNode> { ... }
- * </pre>
- * While in this class, you overrides every method with a node return type,
- * co-variance you'll be able to use this code :
- * <pre>
- * MyNode parentNode = new MyNode();
- * MyNode node = parentNode.getFirstNode();
- * </pre>
- * So for final application this generic type avoid any cast for your own node
- * type, this is quite convinient.
- * <p/>
- * Even if in your project, you wants to have a heriarchy of nodes, this will
- * still works (if you use a genercic type on your abstract nodes).
- * <h2>Internal states</h2>
- * <ul>
- * <li><b>internalClass</b> : the type of data associated with the node</li>
- * <li><b>context</b> : an optinal context to distinguish different types of
- * node with same {@code internalclass}</li>
- * <li><b>id</b> : id of the data associated with the node</li>
- * <li><b>dirty</b> : flag sets to {@code true} when node render MUST be recomputed</li>
- * <li><b>loaded</b> : flag sets to {@code true} when node was loaded</li>
- * <li><b>childLoador</b> : optional loador of childs</li>
- * </ul>
- * <h2>Static nodes</h2>
- * Some nodes do not need auto-loading, we call them {@code static nodes}.
- * The method {@link #isStaticNode()} gives this state.
- * <p/>
- * <b>Note:</b> A static node has no {@link #childLoador}.
- * <h2>Node loading</h2>
- * 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(javax.swing.tree.DefaultTreeModel , DataProvider, boolean)}
- * and {@link #populateChilds(javax.swing.tree.DefaultTreeModel , DataProvider)} methods.
- * <h2>Node rendering</h2
- * the {@link jaxx.runtime.swing.nav.tree.AbstractJaxxTreeCellRenderer} looks the {@link #dirty} 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 #dirty} should be set to {@code true}.
+ * Implementation of {@link JaxxNode} used to create in tree table
+ * This node extends {@link DefaultMutableTreeTableNode} used by
+ * {@link org.jdesktop.swingx.JXTreeTable}
*
- * @author tchemit <chemit(a)codelutin.com>
- * @since 2.1
+ * @author sletellier <letellier(a)codelutin.com>
+ * @since 2.2
*/
public class JaxxTreeTableNode<N extends JaxxTreeTableNode<N>> extends DefaultMutableTreeTableNode implements JaxxNode<N> {
@@ -143,53 +91,42 @@
}
}
+ @Override
public String getId() {
return id;
}
+ @Override
public String getContext() {
return context;
}
+ @Override
public Class<?> getInternalClass() {
return internalClass;
}
+ @Override
public boolean isLoaded() {
return loaded;
}
+ @Override
public boolean isDirty() {
return dirty;
}
- /**
- * Convinient method to known if the node is a {@code String} typed.
- *
- * @return {@code true} if the type of node if
- */
+ @Override
public boolean isStringNode() {
return String.class.equals(internalClass);
}
- /**
- * To know if the node is static.
- * <p/>
- * A {@code static} node has no {@link #childLoador}.
- *
- * @return {@code true} when the node is static : says, the node has
- * no {@link #childLoador}.
- */
+ @Override
public boolean isStaticNode() {
return childLoador == null;
}
- /**
- * Gets the first node form this one to the root which has a none
- * {@code String} type.
- *
- * @return the first concrete node type
- */
+ @Override
@SuppressWarnings({"unchecked"})
public N getContainerNode() {
if (isRoot()) {
@@ -211,18 +148,7 @@
return getParent() == null;
}
- /**
- * Given an {@code id}, obtain the child with matching id.
- * <p/>
- * If node is NOT {@code loaded}, then first loads it (method
- * {@link #populateChilds(jaxx.runtime.swing.nav.JaxxDelegateTreeModel , 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 provider data provider
- * @return the found node or {@code null} if not found
- */
+ @Override
@SuppressWarnings({"unchecked"})
public N findNodeById(String id,
JaxxDelegateTreeModel<N> model,
@@ -264,14 +190,7 @@
return null;
}
- /**
- * Changes the {@link #dirty} state.
- * <p/>
- * As a side effect, when a renderer will use this node, it will force to
- * reload the render from the {@link DataProvider}.
- *
- * @param dirty the new dirty value
- */
+ @Override
public void setDirty(boolean dirty) {
this.dirty = dirty;
}
@@ -301,17 +220,7 @@
//-- Populate methods
//--------------------------------------------------------------------------
- /**
- * To populate the node. A side-effect of this method is to set {@code dirty}
- * the node (renderer will recompute the render of the node).
- * <p/>
- * If {@code populateChilds} is set to {@code true}, then also populate
- * childs of the node using the given {@code dataProvider}.
- *
- * @param model le modèles content le noeud
- * @param provider le provider de données
- * @param populateChilds un drapeau pour charger aussi les fils du noeud courant
- */
+ @Override
public void populateNode(JaxxDelegateTreeModel<N> model,
DataProvider provider,
boolean populateChilds) {
@@ -326,15 +235,7 @@
}
}
- /**
- * To populate childs of the node (only when a none static node).
- * A side-effect of this method is to set {@code loaded} of the node.
- * <p/>
- * For a static node, do nothing.
- *
- * @param model model owner of the node
- * @param provider data provider
- */
+ @Override
@SuppressWarnings({"unchecked"})
public void populateChilds(JaxxDelegateTreeModel<N> model, DataProvider provider) {
if (isStaticNode()) {
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 16:09:09 UTC (rev 2009)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/JaxxTreeTableNodeChildLoador.java 2010-06-29 22:50:39 UTC (rev 2010)
@@ -26,6 +26,12 @@
import jaxx.runtime.swing.nav.JaxxNodeChildLoador;
+/**
+ * Implementation for tree table of {@link JaxxNodeChildLoador}
+ *
+ * @author sletellier <letellier(a)codelutin.com>
+ * @since 2.2
+ */
public abstract class JaxxTreeTableNodeChildLoador<T, O, N extends JaxxTreeTableNode<N>> extends JaxxNodeChildLoador<T, O, N> {
protected JaxxTreeTableNodeChildLoador(Class<O> beanType) {
1
0
Author: sletellier
Date: 2010-06-29 18:09:09 +0200 (Tue, 29 Jun 2010)
New Revision: 2009
Url: http://nuiton.org/repositories/revision/jaxx/2009
Log:
Add tree table support
Added:
trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/JaxxTreeTableDemoModel.java
trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/JaxxTreeTableDemoNode.java
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/DataProvider.java
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxDelegateTreeModel.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/package.html
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/AbstractJaxxTreeCellRenderer.java
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/JaxxTreeHelper.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
Removed:
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/tree/
Modified:
trunk/jaxx-compiler/changelog.txt
trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/JaxxTreeDemo.jaxx
trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/JaxxTreeDemoCellRenderer.java
trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/JaxxTreeDemoDataProvider.java
trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/JaxxTreeDemoHelper.java
trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/JaxxTreeDemoNode.java
trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/content/AbstractContentUI.jaxx
trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/content/ActorsContentUI.jaxx
trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/content/MoviesContentUI.jaxx
trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/loadors/ActorsNodeLoadors.java
trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/loadors/MoviesNodeLoadors.java
trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoCellRenderer.java
trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoDataProvider.java
trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoNode.java
trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoNodeLoador.java
trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoTreeHelper.java
trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo-en_GB.properties
trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo-fr_FR.properties
trunk/jaxx-demo/src/main/resources/log4j.properties
trunk/jaxx-runtime/changelog.txt
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/navigation/treetable/NavigationTreeTableNode.java
Modified: trunk/jaxx-compiler/changelog.txt
===================================================================
--- trunk/jaxx-compiler/changelog.txt 2010-06-29 15:33:32 UTC (rev 2008)
+++ trunk/jaxx-compiler/changelog.txt 2010-06-29 16:09:09 UTC (rev 2009)
@@ -42,10 +42,10 @@
- improve classloader managment
- keep in DataSource objetCode
- fix bug when processDataBinding on a null objectCode
- - always clean node cached values when selected it
+ - always clean demoNode cached values when selected it
- add usefull databinding method in Util
- * 20081213 [chemit] - improve navigation tree node rendering with some caches
+ * 20081213 [chemit] - improve navigation tree demoNode rendering with some caches
- introduce a ChildBuilder to simplify building of child nodes from a collection or array
0.7 chemit 20081210
@@ -67,7 +67,7 @@
- only enter once in $initialize method in generated code
0.6 chemit 20081117
- * 20081118 [chemit] introduce NavigationUtil, save in context selected node
+ * 20081118 [chemit] introduce NavigationUtil, save in context selected demoNode
* 20081107 [chemit] improve data binding and code generation :
- make possible inheritance in binding
- add an attribute javaBean to an object : will generate a full java bean support property
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/JaxxTreeDemo.jaxx
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/JaxxTreeDemo.jaxx 2010-06-29 15:33:32 UTC (rev 2008)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/JaxxTreeDemo.jaxx 2010-06-29 16:09:09 UTC (rev 2009)
@@ -25,23 +25,26 @@
<jaxx.demo.DemoPanel layout='{new BorderLayout()}'>
<import>
- jaxx.runtime.decorator.DecoratorProvider
- jaxx.demo.component.jaxx.tree.content.ActorContentUI
- jaxx.demo.component.jaxx.tree.content.ActorsContentUI
- jaxx.demo.component.jaxx.tree.content.MovieContentUI
- jaxx.demo.component.jaxx.tree.content.MoviesContentUI
- jaxx.demo.entities.Movie
- jaxx.demo.entities.People
- javax.swing.tree.TreePath
- java.lang.reflect.Constructor
- jaxx.demo.component.jaxx.tree.content.AbstractContentUI
+ jaxx.runtime.decorator.DecoratorProvider
+ jaxx.demo.component.jaxx.tree.content.ActorContentUI
+ jaxx.demo.component.jaxx.tree.content.ActorsContentUI
+ jaxx.demo.component.jaxx.tree.content.MovieContentUI
+ jaxx.demo.component.jaxx.tree.content.MoviesContentUI
+ jaxx.demo.entities.Movie
+ jaxx.demo.entities.People
+ javax.swing.tree.TreePath
+ java.lang.reflect.Constructor
+ jaxx.demo.component.jaxx.tree.content.AbstractContentUI
+ org.jdesktop.swingx.JXTreeTable
+ jaxx.runtime.swing.nav.JaxxNode
</import>
<CardLayout2 id='contentLayout'/>
<script><![CDATA[
private JaxxTreeDemoDataProvider dataProvider = new JaxxTreeDemoDataProvider();
-private JaxxTreeDemoHelper helper = new JaxxTreeDemoHelper(dataProvider);
+private JaxxTreeDemoHelper<JaxxTreeDemoNode> treeHelper = new JaxxTreeDemoHelper<JaxxTreeDemoNode>(dataProvider);
+private JaxxTreeDemoHelper<JaxxTreeTableDemoNode> treeTableHelper = new JaxxTreeDemoHelper<JaxxTreeTableDemoNode>(dataProvider);
@Override
protected String[] getSources() {
@@ -49,86 +52,111 @@
"JaxxTreeDemoHelper.java",
"JaxxTreeDemoNode.java",
"JaxxTreeDemoCellRenderer.java",
- "JaxxTreeDemoDataProvider.java",
+ "JaxxTreeTableDemoModel.java",
+ "JaxxTreeTableDemoNode.java",
"loadors/ActorsNodeLoadors.java",
"loadors/MoviesNodeLoadors.java"};
}
private void $afterCompleteSetup() {
- setContextValue(helper);
+ setContextValue(treeTableHelper, "treeHelper");
+ setContextValue(treeTableHelper, "treeTableHelper");
// Creation of selection listener to open ui when tree selection change
- TreeSelectionListener selectionListener = new TreeSelectionListener() {
+ TreeSelectionListener treeSelectionListener = new TreeSelectionListener() {
@Override
public void valueChanged(TreeSelectionEvent event) {
TreePath path = event.getPath();
- JaxxTreeDemoNode node = (JaxxTreeDemoNode) path.getLastPathComponent();
+ JaxxTreeDemoNode demoNode = (JaxxTreeDemoNode) path.getLastPathComponent();
if (log.isDebugEnabled()) {
- log.debug("Select node " + node);
+ log.debug("Select demoNode " + demoNode);
}
// Do nothing for root
- if (node.isRoot()) {
+ if (demoNode.isRoot()) {
return;
}
- openUI(node);
+ openUI(demoNode);
}
};
+ // Creation of selection listener to open ui when tree selection change
+ TreeSelectionListener treeTableSelectionListener = new TreeSelectionListener() {
+ @Override
+ public void valueChanged(TreeSelectionEvent event) {
+ TreePath path = event.getPath();
+ JaxxTreeTableDemoNode demoNode = (JaxxTreeTableDemoNode) path.getLastPathComponent();
+
+ if (log.isDebugEnabled()) {
+ log.debug("Select demoNode " + demoNode);
+ }
+
+ // Do nothing for root
+ if (demoNode.isRoot()) {
+ return;
+ }
+ openUI(demoNode);
+ }
+ };
+
// Register decorator
DecoratorProvider decoratorProvider = getContextValue(DecoratorProvider.class);
// Attach renderer
- navigation.setCellRenderer(new JaxxTreeDemoCellRenderer(decoratorProvider, dataProvider));
+ navigationTree.setCellRenderer(new JaxxTreeDemoCellRenderer(decoratorProvider, dataProvider));
// Register tree
- helper.setTree(navigation, true, selectionListener);
+ treeHelper.setTree(navigationTree, true, treeSelectionListener);
+ treeTableHelper.setTreeTable(navigationTreeTable, true, treeTableSelectionListener);
+
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
- navigation.setSelectionInterval(0, 0);
+ navigationTree.setSelectionInterval(0, 0);
splitPane.resetToPreferredSizes();
}
});
// expand the tree
- SwingUtil.expandTree(navigation);
-
- // auto-expand node when selected
- SwingUtil.addExpandOnClickListener(navigation);
+ SwingUtil.expandTree(navigationTree);
+ SwingUtil.expandTreeTable(navigationTreeTable);
+
+ // auto-expand demoNode when selected
+ SwingUtil.addExpandOnClickListener(navigationTree);
+ SwingUtil.addExpandOnClickListener(navigationTreeTable);
}
-protected void openUI(JaxxTreeDemoNode node) {
+protected void openUI(JaxxNode demoNode) {
- // Get node type
- Class<?> editType = node.getInternalClass();
- String id = node.getId();
+ // Get demoNode type
+ Class<?> editType = demoNode.getInternalClass();
+ String id = demoNode.getId();
- // If it's category node
+ // If it's category demoNode
if (editType.equals(String.class)) {
- // Actors categorie node
+ // Actors categorie demoNode
if (JaxxTreeDemoHelper.ACTORS_CATEGORY_NODE.equals(id)) {
java.util.List<People> peoples = dataProvider.getPeoples();
showUI(peoples, ActorsContentUI.class);
- // Movies categorie node
+ // Movies categorie demoNode
} else if (JaxxTreeDemoHelper.MOVIES_CATEGORY_NODE.equals(id)) {
java.util.List<Movie> movies = dataProvider.getMovies();
showUI(movies, MoviesContentUI.class);
}
- // People node
+ // People demoNode
} else if (editType.equals(People.class)) {
People people = dataProvider.getPeople(id);
showUI(people, ActorContentUI.class);
- // Movie node
+ // Movie demoNode
} else if (editType.equals(Movie.class)) {
Movie movie = dataProvider.getMovie(id);
showUI(movie, MovieContentUI.class);
@@ -186,18 +214,35 @@
constraints='BorderLayout.CENTER'
oneTouchExpandable='true'>
- <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="navigation"
- font-size='11'
- rootVisible='false'
- showsRootHandles='false'
- model='{helper.createTreeModel()}'/>
+ <JTree id="navigationTree"
+ font-size='11'
+ rootVisible='false'
+ showsRootHandles='false'
+ model='{treeHelper.createTreeModel()}'/>
- </JScrollPane>
+ </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()}'/>
+
+ </JScrollPane>
+ </tab>
+ </JTabbedPane>
+
<JPanel id="content" layout="{contentLayout}"/>
</JSplitPane>
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/JaxxTreeDemoCellRenderer.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/JaxxTreeDemoCellRenderer.java 2010-06-29 15:33:32 UTC (rev 2008)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/JaxxTreeDemoCellRenderer.java 2010-06-29 16:09:09 UTC (rev 2009)
@@ -29,7 +29,7 @@
import jaxx.demo.entities.People;
import jaxx.runtime.decorator.Decorator;
import jaxx.runtime.decorator.DecoratorProvider;
-import jaxx.runtime.swing.tree.AbstractJaxxTreeCellRenderer;
+import jaxx.runtime.swing.nav.tree.AbstractJaxxTreeCellRenderer;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/JaxxTreeDemoDataProvider.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/JaxxTreeDemoDataProvider.java 2010-06-29 15:33:32 UTC (rev 2008)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/JaxxTreeDemoDataProvider.java 2010-06-29 16:09:09 UTC (rev 2009)
@@ -27,7 +27,7 @@
import jaxx.demo.entities.Movie;
import jaxx.demo.entities.People;
-import jaxx.runtime.swing.tree.DataProvider;
+import jaxx.runtime.swing.nav.DataProvider;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/JaxxTreeDemoHelper.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/JaxxTreeDemoHelper.java 2010-06-29 15:33:32 UTC (rev 2008)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/JaxxTreeDemoHelper.java 2010-06-29 16:09:09 UTC (rev 2009)
@@ -27,10 +27,12 @@
import jaxx.demo.component.jaxx.tree.loadors.ActorsNodeLoadors;
import jaxx.demo.component.jaxx.tree.loadors.MoviesNodeLoadors;
-import jaxx.runtime.swing.tree.JaxxTreeHelper;
+import jaxx.runtime.swing.nav.JaxxNode;
+import jaxx.runtime.swing.nav.tree.JaxxTreeHelper;
+import jaxx.runtime.swing.nav.treetable.JaxxTreeTableModel;
+import jaxx.runtime.swing.nav.JaxxDelegateTreeModel;
import javax.swing.tree.DefaultTreeModel;
-import javax.swing.tree.TreeModel;
import static org.nuiton.i18n.I18n.n_;
@@ -38,7 +40,7 @@
* @author sletellier <letellier(a)codelutin.com>
* @since 2.1
*/
-public class JaxxTreeDemoHelper extends JaxxTreeHelper<JaxxTreeDemoNode> {
+public class JaxxTreeDemoHelper<N extends JaxxNode<N>> extends JaxxTreeHelper<N> {
public static String MOVIES_CATEGORY_NODE = "movies";
@@ -48,10 +50,16 @@
setDataProvider(provider);
}
- public TreeModel createTreeModel() {
+ @Override
+ public JaxxTreeDemoDataProvider getDataProvider() {
+ return (JaxxTreeDemoDataProvider)dataProvider;
+ }
+ @SuppressWarnings({"unchecked"})
+ public DefaultTreeModel createTreeModel() {
+
// Create root static node
- JaxxTreeDemoNode root = new JaxxTreeDemoNode(
+ JaxxNode root = new JaxxTreeDemoNode(
String.class,
"Root node",
null,
@@ -59,19 +67,19 @@
);
// Create movies category node
- JaxxTreeDemoNode moviesCategoryNode = new JaxxTreeDemoNode(
+ JaxxNode moviesCategoryNode = new JaxxTreeDemoNode(
String.class,
n_(MOVIES_CATEGORY_NODE),
null,
- getChildLoador(MoviesNodeLoadors.class)
+ new MoviesNodeLoadors<JaxxTreeDemoNode>()
);
// Create peoples category node
- JaxxTreeDemoNode peoplesCategoryNode = new JaxxTreeDemoNode(
+ JaxxNode peoplesCategoryNode = new JaxxTreeDemoNode(
String.class,
n_(ACTORS_CATEGORY_NODE),
null,
- getChildLoador(ActorsNodeLoadors.class)
+ new ActorsNodeLoadors<JaxxTreeDemoNode>()
);
// Add to root
@@ -79,11 +87,52 @@
root.add(peoplesCategoryNode);
// Create model
- DefaultTreeModel model = createModel(root);
-
+ JaxxDelegateTreeModel<N> model = createTreeModel((N) root);
+
// Populate childs nodes
root.populateChilds(model, getDataProvider());
- return model;
+ 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();
+ }
}
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/JaxxTreeDemoNode.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/JaxxTreeDemoNode.java 2010-06-29 15:33:32 UTC (rev 2008)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/JaxxTreeDemoNode.java 2010-06-29 16:09:09 UTC (rev 2009)
@@ -25,14 +25,14 @@
package jaxx.demo.component.jaxx.tree;
-import jaxx.runtime.swing.tree.JaxxNode;
-import jaxx.runtime.swing.tree.JaxxNodeChildLoador;
+import jaxx.runtime.swing.nav.JaxxNodeChildLoador;
+import jaxx.runtime.swing.nav.tree.JaxxTreeNode;
/**
* @author sletellier <letellier(a)codelutin.com>
* @since 2.1
*/
-public class JaxxTreeDemoNode extends JaxxNode<JaxxTreeDemoNode> {
+public class JaxxTreeDemoNode extends JaxxTreeNode<JaxxTreeDemoNode> {
private static final long serialVersionUID = 1L;
@@ -43,7 +43,7 @@
public JaxxTreeDemoNode(Class<?> internalClass,
String id,
String context,
- JaxxNodeChildLoador<?, ?, JaxxTreeDemoNode> loador) {
+ JaxxNodeChildLoador<?, ?, JaxxTreeDemoNode> loador) {
super(internalClass, id, context, loador);
}
}
Added: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/JaxxTreeTableDemoModel.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/JaxxTreeTableDemoModel.java (rev 0)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/JaxxTreeTableDemoModel.java 2010-06-29 16:09:09 UTC (rev 2009)
@@ -0,0 +1,114 @@
+/*
+ * #%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.tree;
+
+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._;
+
+public class JaxxTreeTableDemoModel extends JaxxTreeTableModel.MyDefaultTreeTableModel {
+
+ protected JaxxTreeDemoDataProvider dataProvider;
+
+ public JaxxTreeTableDemoModel(JaxxTreeDemoDataProvider 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;
+ }
+}
Added: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/JaxxTreeTableDemoNode.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/JaxxTreeTableDemoNode.java (rev 0)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/JaxxTreeTableDemoNode.java 2010-06-29 16:09:09 UTC (rev 2009)
@@ -0,0 +1,39 @@
+/*
+ * #%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.tree;
+
+import jaxx.runtime.swing.nav.JaxxNodeChildLoador;
+import jaxx.runtime.swing.nav.treetable.JaxxTreeTableNode;
+
+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);
+ }
+}
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/content/AbstractContentUI.jaxx
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/content/AbstractContentUI.jaxx 2010-06-29 15:33:32 UTC (rev 2008)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/content/AbstractContentUI.jaxx 2010-06-29 16:09:09 UTC (rev 2009)
@@ -30,9 +30,12 @@
import jaxx.demo.component.jaxx.tree.JaxxTreeDemoHelper;
// Get helper in context
-JaxxTreeDemoHelper getHelper() {
- return getContextValue(JaxxTreeDemoHelper.class);
+JaxxTreeDemoHelper getTreeHelper() {
+ return getContextValue(JaxxTreeDemoHelper.class, "treeHelper");
}
+JaxxTreeDemoHelper getTreeTableHelper() {
+ return getContextValue(JaxxTreeDemoHelper.class, "treeTableHelper");
+}
public abstract B getData();
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/content/ActorsContentUI.jaxx
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/content/ActorsContentUI.jaxx 2010-06-29 15:33:32 UTC (rev 2008)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/content/ActorsContentUI.jaxx 2010-06-29 16:09:09 UTC (rev 2009)
@@ -55,7 +55,8 @@
protected void selectChild() {
People selected = (People)list.getSelectedValue();
- getHelper().selectNode(selected.getId());
+ getTreeHelper().selectNode(selected.getId());
+ getTreeTableHelper().selectNode(selected.getId());
}
]]></script>
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/content/MoviesContentUI.jaxx
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/content/MoviesContentUI.jaxx 2010-06-29 15:33:32 UTC (rev 2008)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/content/MoviesContentUI.jaxx 2010-06-29 16:09:09 UTC (rev 2009)
@@ -58,7 +58,8 @@
protected void selectChild() {
Movie selected = (Movie)list.getSelectedValue();
- getHelper().selectNode(selected.getId());
+ getTreeHelper().selectNode(selected.getId());
+ getTreeTableHelper().selectNode(selected.getId());
}
]]></script>
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/loadors/ActorsNodeLoadors.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/loadors/ActorsNodeLoadors.java 2010-06-29 15:33:32 UTC (rev 2008)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/loadors/ActorsNodeLoadors.java 2010-06-29 16:09:09 UTC (rev 2009)
@@ -25,11 +25,13 @@
package jaxx.demo.component.jaxx.tree.loadors;
+import jaxx.demo.component.jaxx.tree.JaxxTreeTableDemoNode;
import jaxx.demo.component.jaxx.tree.JaxxTreeDemoDataProvider;
import jaxx.demo.component.jaxx.tree.JaxxTreeDemoNode;
import jaxx.demo.entities.People;
-import jaxx.runtime.swing.tree.DataProvider;
-import jaxx.runtime.swing.tree.JaxxNodeChildLoador;
+import jaxx.runtime.swing.nav.DataProvider;
+import jaxx.runtime.swing.nav.JaxxNode;
+import jaxx.runtime.swing.nav.JaxxNodeChildLoador;
import java.util.List;
@@ -37,12 +39,19 @@
* @author sletellier <letellier(a)codelutin.com>
* @since 2.1
*/
-public class ActorsNodeLoadors extends JaxxNodeChildLoador<People,People, JaxxTreeDemoNode> {
+public class ActorsNodeLoadors<N extends JaxxNode<N>> extends JaxxNodeChildLoador<People,People, N> {
private static final long serialVersionUID = 1L;
+ protected boolean isTreeTable;
+
public ActorsNodeLoadors() {
+ this(false);
+ }
+
+ public ActorsNodeLoadors(boolean isTreeTable) {
super(People.class);
+ this.isTreeTable = isTreeTable;
}
@Override
@@ -64,17 +73,29 @@
return provider.getPeoples();
}
+ @SuppressWarnings({"unchecked"})
@Override
- public JaxxTreeDemoNode createNode(People data, DataProvider dataProvider) {
+ public N createNode(People data, DataProvider dataProvider) {
+ JaxxNode actorNode;
+
// Create actor static nodes
- JaxxTreeDemoNode actorsNode = new JaxxTreeDemoNode(
- getBeanType(),
- data.getId(),
- null,
- null
- );
+ if (!isTreeTable) {
+ actorNode = new JaxxTreeDemoNode(
+ getBeanType(),
+ data.getId(),
+ null,
+ null
+ );
+ } else {
+ actorNode = new JaxxTreeTableDemoNode(
+ getBeanType(),
+ data.getId(),
+ null,
+ null
+ );
+ }
- return actorsNode;
+ return (N) actorNode;
}
}
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/loadors/MoviesNodeLoadors.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/loadors/MoviesNodeLoadors.java 2010-06-29 15:33:32 UTC (rev 2008)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/tree/loadors/MoviesNodeLoadors.java 2010-06-29 16:09:09 UTC (rev 2009)
@@ -28,9 +28,11 @@
import jaxx.demo.component.jaxx.tree.JaxxTreeDemoDataProvider;
import jaxx.demo.component.jaxx.tree.JaxxTreeDemoHelper;
import jaxx.demo.component.jaxx.tree.JaxxTreeDemoNode;
+import jaxx.demo.component.jaxx.tree.JaxxTreeTableDemoNode;
import jaxx.demo.entities.Movie;
-import jaxx.runtime.swing.tree.DataProvider;
-import jaxx.runtime.swing.tree.JaxxNodeChildLoador;
+import jaxx.runtime.swing.nav.JaxxNode;
+import jaxx.runtime.swing.nav.JaxxNodeChildLoador;
+import jaxx.runtime.swing.nav.DataProvider;
import java.util.List;
@@ -40,12 +42,19 @@
* @author sletellier <letellier(a)codelutin.com>
* @since 2.1
*/
-public class MoviesNodeLoadors extends JaxxNodeChildLoador<Movie, Movie, JaxxTreeDemoNode> {
+public class MoviesNodeLoadors<N extends JaxxNode<N>> extends JaxxNodeChildLoador<Movie, Movie, N> {
private static final long serialVersionUID = 1L;
+ protected boolean isTreeTable;
+
public MoviesNodeLoadors() {
+ this(false);
+ }
+
+ public MoviesNodeLoadors(boolean isTreeTable) {
super(Movie.class);
+ this.isTreeTable = isTreeTable;
}
@Override
@@ -59,28 +68,50 @@
return provider.getMovies();
}
+ @SuppressWarnings({"unchecked"})
@Override
- public JaxxTreeDemoNode createNode(Movie data, DataProvider dataProvider) {
+ public N createNode(Movie data, DataProvider dataProvider) {
- // Create movies static nodes
- JaxxTreeDemoNode moviesNode = new JaxxTreeDemoNode(
- getBeanType(),
- data.getId(),
- null,
- null
- );
+ JaxxNode moviesNode;
+ JaxxNode actorsCategoryNode;
- // Create clients category node
- JaxxTreeDemoNode actorsCategoryNode = new JaxxTreeDemoNode(
- String.class,
- n_(JaxxTreeDemoHelper.ACTORS_CATEGORY_NODE),
- null,
- JaxxTreeDemoHelper.getChildLoador(ActorsNodeLoadors.class)
- );
+ if (!isTreeTable) {
+ // Create movies static nodes
+ moviesNode = new JaxxTreeDemoNode(
+ getBeanType(),
+ data.getId(),
+ null,
+ null
+ );
+ // Create clients category node
+ actorsCategoryNode = new JaxxTreeDemoNode(
+ String.class,
+ n_(JaxxTreeDemoHelper.ACTORS_CATEGORY_NODE),
+ null,
+ new ActorsNodeLoadors<JaxxTreeDemoNode>(false)
+ );
+ } else {
+ // Create movies static nodes
+ moviesNode = new JaxxTreeTableDemoNode(
+ getBeanType(),
+ data.getId(),
+ null,
+ null
+ );
+
+ // Create clients category node
+ actorsCategoryNode = new JaxxTreeTableDemoNode(
+ String.class,
+ n_(JaxxTreeDemoHelper.ACTORS_CATEGORY_NODE),
+ null,
+ new ActorsNodeLoadors<JaxxTreeDemoNode>(true)
+ );
+ }
+
// Add actors nodes to movies node
moviesNode.add(actorsCategoryNode);
- return moviesNode;
+ return (N) moviesNode;
}
}
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 15:33:32 UTC (rev 2008)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoCellRenderer.java 2010-06-29 16:09:09 UTC (rev 2009)
@@ -26,7 +26,7 @@
package jaxx.demo.tree;
import jaxx.demo.component.jaxx.tree.JaxxTreeDemoDataProvider;
-import jaxx.runtime.swing.tree.AbstractJaxxTreeCellRenderer;
+import jaxx.runtime.swing.nav.tree.AbstractJaxxTreeCellRenderer;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoDataProvider.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoDataProvider.java 2010-06-29 15:33:32 UTC (rev 2008)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoDataProvider.java 2010-06-29 16:09:09 UTC (rev 2009)
@@ -56,7 +56,7 @@
import jaxx.demo.fun.CalculatorDemo;
import jaxx.demo.fun.CounterDemo;
import jaxx.demo.fun.LabelStyleDemo;
-import jaxx.runtime.swing.tree.DataProvider;
+import jaxx.runtime.swing.nav.DataProvider;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoNode.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoNode.java 2010-06-29 15:33:32 UTC (rev 2008)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoNode.java 2010-06-29 16:09:09 UTC (rev 2009)
@@ -25,7 +25,7 @@
package jaxx.demo.tree;
-import jaxx.runtime.swing.tree.JaxxNode;
+import jaxx.runtime.swing.nav.tree.JaxxTreeNode;
/**
* Basic node of the demo.
@@ -33,7 +33,7 @@
* @author tchemit <chemit(a)codelutin.com>
* @since 2.1
*/
-public class DemoNode extends JaxxNode<DemoNode> {
+public class DemoNode extends JaxxTreeNode<DemoNode> {
private static final long serialVersionUID = 1L;
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoNodeLoador.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoNodeLoador.java 2010-06-29 15:33:32 UTC (rev 2008)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoNodeLoador.java 2010-06-29 16:09:09 UTC (rev 2009)
@@ -25,8 +25,11 @@
package jaxx.demo.tree;
-import jaxx.runtime.swing.tree.DataProvider;
-import jaxx.runtime.swing.tree.JaxxNodeChildLoador;
+import jaxx.runtime.swing.nav.tree.JaxxTreeNodeChildLoador;
+import jaxx.runtime.swing.nav.DataProvider;
+import jaxx.runtime.swing.nav.JaxxNodeChildLoador;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import java.util.List;
@@ -34,10 +37,13 @@
* @author tchemit <tchemit(a)codelutin.com>
* @since 2.1
*/
-public class DemoNodeLoador extends JaxxNodeChildLoador<Object,Object, DemoNode> {
+public class DemoNodeLoador extends JaxxTreeNodeChildLoador<Object,Object, DemoNode> {
private static final long serialVersionUID = 1L;
+ /** Logger */
+ static private final Log log = LogFactory.getLog(JaxxNodeChildLoador.class);
+
public DemoNodeLoador() {
super(Object.class);
}
@@ -55,6 +61,10 @@
@Override
public DemoNode createNode(Object data, DataProvider dataProvider) {
+ if (log.isDebugEnabled()) {
+ log.debug("Creating node for object : " + data);
+ }
+
DemoNode node = null;
if (data instanceof String) {
@@ -68,8 +78,7 @@
}
if (node == null) {
- throw new IllegalArgumentException(
- "Data [" + data + "] can not be use to build a node");
+ throw new IllegalArgumentException("Data [" + data + "] can not be use to build a node");
}
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 15:33:32 UTC (rev 2008)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoTreeHelper.java 2010-06-29 16:09:09 UTC (rev 2009)
@@ -25,9 +25,9 @@
package jaxx.demo.tree;
-import jaxx.runtime.swing.tree.JaxxTreeHelper;
+import jaxx.runtime.swing.nav.JaxxDelegateTreeModel;
+import jaxx.runtime.swing.nav.tree.JaxxTreeHelper;
-import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeModel;
/**
@@ -51,11 +51,11 @@
DemoNode root = new DemoNode("jaxxdemo.tree");
// Create model
- DefaultTreeModel model = createModel(root);
+ JaxxDelegateTreeModel<DemoNode> model = createTreeModel(root);
// load all nodes of model
loadAllNodes(model, root, getDataProvider());
- return model;
+ return getTreeModel();
}
}
\ No newline at end of file
Modified: trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo-en_GB.properties
===================================================================
--- trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo-en_GB.properties 2010-06-29 15:33:32 UTC (rev 2008)
+++ trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo-en_GB.properties 2010-06-29 16:09:09 UTC (rev 2009)
@@ -195,6 +195,7 @@
jaxxdemo.numbereditor.useFloat=
jaxxdemo.numbereditor.useSign=
jaxxdemo.title.about=About JAXXDemo...
+jaxxdemo.tree.age=
jaxxdemo.tree.component.jaxx=JAXX Components
jaxxdemo.tree.component.jaxx.editor=Editors
jaxxdemo.tree.component.jaxx.tree=Jaxx tree API
@@ -209,7 +210,11 @@
jaxxdemo.tree.feature=Features
jaxxdemo.tree.feature.databinding=Data Binding
jaxxdemo.tree.feature.validation=Validation
+jaxxdemo.tree.firstName=
jaxxdemo.tree.fun=Fun
+jaxxdemo.tree.lastName=
+jaxxdemo.tree.tabtitle=
+jaxxdemo.treeTable.tabtitle=
jaxxdemo.warning.nimbus.landf=Could not init nymbus look and feel, you need at leasr version 1.6u10 of java.
jaxxdemo.warning.no.ui=No ui environnement detected
model0.f0=
Modified: trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo-fr_FR.properties
===================================================================
--- trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo-fr_FR.properties 2010-06-29 15:33:32 UTC (rev 2008)
+++ trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo-fr_FR.properties 2010-06-29 16:09:09 UTC (rev 2009)
@@ -195,6 +195,7 @@
jaxxdemo.numbereditor.useFloat=Utiliser les d\u00E9cimales
jaxxdemo.numbereditor.useSign=Utiliser le signe
jaxxdemo.title.about=A propos de JAXX Demo...
+jaxxdemo.tree.age=Age / ann\u00E9e
jaxxdemo.tree.component.jaxx=Composants JAXX
jaxxdemo.tree.component.jaxx.editor=Editeurs
jaxxdemo.tree.component.jaxx.tree=API JAXX pour les arbres
@@ -209,7 +210,11 @@
jaxxdemo.tree.feature=Fonctionnalit\u00E9s
jaxxdemo.tree.feature.databinding=Data binding
jaxxdemo.tree.feature.validation=Validation
+jaxxdemo.tree.firstName=Prenom
jaxxdemo.tree.fun=Fun
+jaxxdemo.tree.lastName=Nom
+jaxxdemo.tree.tabtitle=Arbre
+jaxxdemo.treeTable.tabtitle=Arbre tableau
jaxxdemo.warning.nimbus.landf=Le look and Feel Nimbus n'a pas \u00E9t\u00E9 trouv\u00E9, il faut au moins la version 1.6u10 de java.
jaxxdemo.warning.no.ui=Aucun environnement graphique d\u00E9tect\u00E9
model0.f0=
Modified: trunk/jaxx-demo/src/main/resources/log4j.properties
===================================================================
--- trunk/jaxx-demo/src/main/resources/log4j.properties 2010-06-29 15:33:32 UTC (rev 2008)
+++ trunk/jaxx-demo/src/main/resources/log4j.properties 2010-06-29 16:09:09 UTC (rev 2009)
@@ -6,8 +6,8 @@
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) %M - %m%n
log4j.logger.jaxx.demo=INFO
-#log4j.logger.jaxx.demo.tree=DEBUG
-#log4j.logger.jaxx.runtime.swing.tree=DEBUG
+log4j.logger.jaxx.demo.tree=DEBUG
+log4j.logger.jaxx.runtime.swing.tree=DEBUG
#log4j.logger.jaxx.demo.component.jaxx.tree=DEBUG
#log4j.logger.jaxx.demo.config.DemoConfig=DEBUG
log4j.logger.jaxx.runtime.swing.editor.config=INFO
Modified: trunk/jaxx-runtime/changelog.txt
===================================================================
--- trunk/jaxx-runtime/changelog.txt 2010-06-29 15:33:32 UTC (rev 2008)
+++ trunk/jaxx-runtime/changelog.txt 2010-06-29 16:09:09 UTC (rev 2009)
@@ -33,10 +33,10 @@
- improve classloader managment
- keep in DataSource objetCode
- fix bug when processDataBinding on a null objectCode
- - always clean node cached values when selected it
+ - always clean demoNode cached values when selected it
- add usefull databinding method in Util
- * 20081213 [chemit] - improve navigation tree node rendering with some caches
+ * 20081213 [chemit] - improve navigation tree demoNode rendering with some caches
- introduce a ChildBuilder to simplify building of child nodes from a collection or array
0.7 chemit 20081210
@@ -58,7 +58,7 @@
- only enter once in $initialize method in generated code
0.6 chemit 20081117
- * 20081118 [chemit] introduce NavigationUtil, save in context selected node
+ * 20081118 [chemit] introduce NavigationUtil, save in context selected demoNode
* 20081107 [chemit] improve data binding and code generation :
- make possible inheritance in binding
- add an attribute javaBean to an object : will generate a full java bean support property
Copied: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/DataProvider.java (from rev 2006, trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/tree/DataProvider.java)
===================================================================
--- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/DataProvider.java (rev 0)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/DataProvider.java 2010-06-29 16:09:09 UTC (rev 2009)
@@ -0,0 +1,44 @@
+/*
+ * #%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;
+
+/**
+ * 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.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 2.1
+ */
+public interface DataProvider {
+
+ /**
+ * @return {@code true} is provider is enabled and can provide datas,
+ * {@code false} otherwise.
+ */
+ boolean isEnabled();
+
+}
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/DataProvider.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxDelegateTreeModel.java
===================================================================
--- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxDelegateTreeModel.java (rev 0)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxDelegateTreeModel.java 2010-06-29 16:09:09 UTC (rev 2009)
@@ -0,0 +1,313 @@
+/*
+ * #%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;
+
+public class JaxxDelegateTreeModel<N extends JaxxNode<N>> {
+
+ /** Logger */
+ static private final Log log = LogFactory.getLog(JaxxDelegateTreeModel.class);
+
+ protected DefaultTreeModel treeModel;
+ protected JaxxTreeTableModel treeTableModel;
+
+ protected boolean isTreeTable;
+
+ public JaxxDelegateTreeModel(DefaultTreeModel treeModel) {
+ this.treeModel = treeModel;
+ isTreeTable = false;
+ }
+
+ 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
Copied: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxNode.java (from rev 2006, trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/tree/JaxxNode.java)
===================================================================
--- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxNode.java (rev 0)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxNode.java 2010-06-29 16:09:09 UTC (rev 2009)
@@ -0,0 +1,206 @@
+/*
+ * #%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.tree.DefaultTreeModel;
+import javax.swing.tree.TreeNode;
+import java.io.Serializable;
+
+/**
+ * Definition of a node with a optional {@link #childLoador} to build childs of
+ * node.
+ * <p/>
+ * A node is identified by an {@link #id} of an associated data of type
+ * {@link #internalClass}.
+ * <p/>
+ * <b>Note:</b>
+ * <p><i> While using a {@link #childLoador}, we can not know before node
+ * was loaded the exact count of his childs. As a matter of facts, real leaf
+ * nodes appears at the beginning in ui as a not leaf (there is a root handler).
+ * When node was loaded, a leaf node will be then displayed as required.
+ * </i></p>
+ * <p/>
+ * <h2>Why JaxxNode is generic ?</h2>
+ * In a project, you should implements your own Node extending with one like this :
+ * <pre>
+ * class MyNode extends JaxxNode<MyNode> { ... }
+ * </pre>
+ * While in this class, you overrides every method with a node return type,
+ * co-variance you'll be able to use this code :
+ * <pre>
+ * MyNode parentNode = new MyNode();
+ * MyNode node = parentNode.getFirstNode();
+ * </pre>
+ * So for final application this generic type avoid any cast for your own node
+ * type, this is quite convinient.
+ * <p/>
+ * Even if in your project, you wants to have a heriarchy of nodes, this will
+ * still works (if you use a genercic type on your abstract nodes).
+ * <h2>Internal states</h2>
+ * <ul>
+ * <li><b>internalClass</b> : the type of data associated with the node</li>
+ * <li><b>context</b> : an optinal context to distinguish different types of
+ * node with same {@code internalclass}</li>
+ * <li><b>id</b> : id of the data associated with the node</li>
+ * <li><b>dirty</b> : flag sets to {@code true} when node render MUST be recomputed</li>
+ * <li><b>loaded</b> : flag sets to {@code true} when node was loaded</li>
+ * <li><b>childLoador</b> : optional loador of childs</li>
+ * </ul>
+ * <h2>Static nodes</h2>
+ * Some nodes do not need auto-loading, we call them {@code static nodes}.
+ * The method {@link #isStaticNode()} gives this state.
+ * <p/>
+ * <b>Note:</b> A static node has no {@link #childLoador}.
+ * <h2>Node loading</h2>
+ * 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.
+ * <h2>Node rendering</h2
+ * the {@link jaxx.runtime.swing.nav.tree.AbstractJaxxTreeCellRenderer} looks the {@link #dirty} 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 #dirty} should be set to {@code true}.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 2.1
+ */
+public interface JaxxNode <N extends JaxxNode<N>> extends Cloneable, TreeNode, Serializable {
+
+ String getId();
+
+ String getContext();
+
+ Class<?> getInternalClass();
+
+ boolean isLoaded();
+
+ boolean isDirty();
+
+ /**
+ * Convinient method to known if the node is a {@code String} typed.
+ *
+ * @return {@code true} if the type of node if
+ */
+ boolean isStringNode();
+
+ /**
+ * To know if the node is static.
+ * <p/>
+ * A {@code static} node has no {@link #childLoador}.
+ *
+ * @return {@code true} when the node is static : says, the node has
+ * no {@link #childLoador}.
+ */
+ boolean isStaticNode();
+
+ /**
+ * Gets the first node form this one to the root which has a none
+ * {@code String} type.
+ *
+ * @return the first concrete node type
+ */
+ N getContainerNode();
+
+ /**
+ * Given an {@code id}, obtain the child with matching id.
+ * <p/>
+ * If node is NOT {@code loaded}, then first loads it (method
+ * {@link #populateChilds(DefaultTreeModel, 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 provider data provider
+ * @return the found node or {@code null} if not found
+ */
+ N findNodeById(String id,
+ JaxxDelegateTreeModel<N> model,
+ DataProvider provider);
+
+ /**
+ * Changes the {@link #dirty} state.
+ * <p/>
+ * As a side effect, when a renderer will use this node, it will force to
+ * reload the render from the {@link DataProvider}.
+ *
+ * @param dirty the new dirty value
+ */
+ void setDirty(boolean dirty);
+
+ @Override
+ boolean isLeaf();
+
+ Object getUserObject();
+
+ @Override
+ String toString();
+
+ //--------------------------------------------------------------------------
+ //-- Populate methods
+ //--------------------------------------------------------------------------
+
+ /**
+ * To populate the node. A side-effect of this method is to set {@code dirty}
+ * the node (renderer will recompute the render of the node).
+ * <p/>
+ * 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 provider le provider de données
+ * @param populateChilds un drapeau pour charger aussi les fils du noeud courant
+ */
+ void populateNode(JaxxDelegateTreeModel<N> model,
+ DataProvider provider,
+ boolean populateChilds);
+
+ /**
+ * To populate childs of the node (only when a none static node).
+ * A side-effect of this method is to set {@code loaded} of the node.
+ * <p/>
+ * For a static node, do nothing.
+ *
+ * @param model model owner of the node
+ * @param provider data provider
+ */
+ void populateChilds(JaxxDelegateTreeModel<N> model, DataProvider provider);
+
+ //--------------------------------------------------------------------------
+ //-- Overrides to use generic type as return
+ //--------------------------------------------------------------------------
+
+ boolean isRoot();
+
+ @Override
+ N getParent();
+
+ void add(N node);
+
+ void remove(N node);
+
+ void insert(N node, int position);
+}
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxNode.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Copied: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxNodeChildLoador.java (from rev 2006, trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/tree/JaxxNodeChildLoador.java)
===================================================================
--- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxNodeChildLoador.java (rev 0)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxNodeChildLoador.java 2010-06-29 16:09:09 UTC (rev 2009)
@@ -0,0 +1,168 @@
+/*
+ * #%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 org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * Object to load childs of a node.
+ * <p/>
+ * It uses {@link DataProvider} in method
+ * {@link #loadChilds(JaxxDelegateTreeModel , JaxxNode, DataProvider)} to obtain datas
+ * then build childs nodes.
+ * <p/>
+ * A factory of such objects can be found in {@link jaxx.runtime.swing.nav.tree.JaxxTreeHelper} to make
+ * them reusable in other places than inside a {@link JaxxNode} to auto-load
+ * childs.
+ * <p/>
+ * For example when you want to creat by hand a new node, always prefer to reuse
+ * a such object rathen than duplicate same code in helper...
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @param <T> type of data used to create nodes (can be just a String type to use only ids)
+ * @param <O> type of data associated with nodes
+ * @param <N> type of node to used (to make possible full co-variance and no cast in fal implementations).
+ * @see jaxx.runtime.swing.nav.tree.JaxxTreeHelper
+ * @see JaxxNode
+ * @since 2.1
+ */
+public abstract class JaxxNodeChildLoador<T, O, N extends JaxxNode<N>> implements Serializable {
+
+ /** Logger */
+ static private final Log log = LogFactory.getLog(JaxxNodeChildLoador.class);
+
+ /** Type of data of the node */
+ protected final Class<O> beanType;
+
+ protected JaxxNodeChildLoador(Class<O> beanType) {
+ this.beanType = beanType;
+ }
+
+ /**
+ * Obtain the list of data used to create nodes.
+ * <p/>
+ * If type {@code T} is {@code O}, we directly use the data associated with nodes.
+ *
+ * @param parentClass type of parent
+ * @param parentId id of parent
+ * @param dataProvider the data provider
+ * @return the list of data
+ * @throws Exception if any problem
+ */
+ public abstract List<T> getData(Class<?> parentClass,
+ String parentId,
+ DataProvider dataProvider) throws Exception;
+
+ /**
+ * Hook to create a child node given his {@code data}.
+ *
+ * @param data the data of the node to create
+ * @param dataProvider the data provider
+ * @return the created node
+ */
+ public abstract N createNode(T data, DataProvider dataProvider);
+
+ /**
+ * Returns the type of data associated with nodes to create.
+ *
+ * @return the type of data associated with created nodes.
+ */
+ public Class<O> getBeanType() {
+ return beanType;
+ }
+
+ /**
+ * Load childs of the given {@code parentnode}.
+ *
+ * @param model 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,
+ N parentNode,
+ DataProvider dataProvider) throws Exception {
+
+ N containerNode = parentNode.getContainerNode();
+
+ List<T> datas;
+ if (containerNode == null) {
+
+ // pas d'ancetre, il doit s'agir d'un premier noeud de données
+ // depuis le noeud root
+
+ // recuperation des objets fils (sans connaitre de parent)
+ datas = getData(null, null, dataProvider);
+
+ } else {
+ if (log.isDebugEnabled()) {
+ log.debug("search data for " + containerNode.getInternalClass() +
+ " : " + containerNode.getId());
+ }
+
+ // recuperation des objets fils
+ datas = getData(containerNode.getInternalClass(),
+ containerNode.getId(),
+ dataProvider);
+ }
+
+ // on charge les fils
+ addChildNodes(parentNode, datas, dataProvider);
+
+ // notifie le modele d'un ajout de noeuds
+ model.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)}.
+ *
+ * @param parentNode the node where to insert
+ * @param datas the data used to create node
+ * @param dataProvider the data provider
+ */
+ protected void addChildNodes(N parentNode,
+ List<T> datas,
+ DataProvider dataProvider) {
+
+ // creation des noeuds fils
+ if (datas != null) {
+ for (T o : datas) {
+ if (log.isInfoEnabled()) {
+ log.info("[" + parentNode + "] Will add child node for " + o);
+ }
+ N node = createNode(o, dataProvider);
+ parentNode.add(node);
+ }
+ }
+ }
+
+}
\ No newline at end of file
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/JaxxNodeChildLoador.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Copied: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/package.html (from rev 2006, trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/tree/package.html)
===================================================================
--- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/package.html (rev 0)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/package.html 2010-06-29 16:09:09 UTC (rev 2009)
@@ -0,0 +1,50 @@
+<html>
+<body>
+<h1>JAXX - tree utilities</h1>
+
+This package contains all the classes of the new tree framework.
+
+<p>
+ Replace the previous framework from package
+ <code>jaxx.runtime.swing.navigation</code>
+</p>
+
+<h1>Why this api ?</h1>
+
+<p>
+ The main goal of this api is to offer an auto-loading system of tree
+ model.
+</p>
+
+<p>
+ While previous api we had to load all the model in memory, now we can build
+ a
+ tree model with no data.
+</p>
+
+<p>
+ When the tree will need to expand a node, it will ask first in childs of
+ node
+ were loaded, if not, load them then give by hand to system.
+</p>
+
+<h1>Api</h1>
+
+<h2>DataProvider</h2>
+Contract of objet responsible of acquiring data to populate nodes and render them.
+
+<h2>JaxxNode</h2>
+An override of DefaultMutableTreeNode customized for our purpose (loaded, dirty
+states,...)
+
+<h2>JaxxNodeChildLoador</h2>
+Object to load childs of a node using DataProvider.
+
+<h2>JaxxTreeHelper</h2>
+Helper to manage a tree using auto-loading nodes.
+
+<h2>AbstractJaxxTreeCellRenderer</h2>
+Abstract renderer using DataProvider to acquire node render.
+
+</body>
+</html>
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/package.html
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Copied: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/AbstractJaxxTreeCellRenderer.java (from rev 2006, trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/tree/AbstractJaxxTreeCellRenderer.java)
===================================================================
--- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/AbstractJaxxTreeCellRenderer.java (rev 0)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/AbstractJaxxTreeCellRenderer.java 2010-06-29 16:09:09 UTC (rev 2009)
@@ -0,0 +1,128 @@
+/*
+ * #%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.DataProvider;
+import jaxx.runtime.swing.nav.JaxxNode;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import javax.swing.tree.DefaultTreeCellRenderer;
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.nuiton.i18n.I18n._;
+
+/**
+ * Le renderer abstrait (qui a toutes les methodes qui aident) pour implanter de
+ * vrai renderer pour les différents cas d'utilisation de l'abre de navigation.
+ *
+ * @author chemit <chemit(a)codelutin.com>
+ * @since 1.2
+ */
+public abstract class AbstractJaxxTreeCellRenderer<N extends JaxxNode<N>> extends DefaultTreeCellRenderer {
+
+ /** Logger */
+ protected static final Log log =
+ LogFactory.getLog(AbstractJaxxTreeCellRenderer.class);
+
+ /** source de donnée */
+ protected DataProvider dataProvider;
+
+ /** le cache de rendu */
+ protected final Map<N, String> renderCache = new HashMap<N, String>();
+
+ /**
+ * Determines the text render of a node using the {@link #dataProvider}.
+ *
+ * @param node the node to render
+ * @return the text render of the node
+ */
+ protected abstract String computeNodeText(N node);
+
+ protected AbstractJaxxTreeCellRenderer() {
+ }
+
+ public DataProvider getDataProvider() {
+ return dataProvider;
+ }
+
+ public void setDataProvider(DataProvider dataProvider) {
+ this.dataProvider = dataProvider;
+
+ // une nouvelle source utilisée, on vide le cache
+ clearCache();
+ }
+
+ public void clearCache() {
+ renderCache.clear();
+ }
+
+ public void invalidateCache(N node) {
+ renderCache.remove(node);
+ }
+
+ @Override
+ protected void finalize() throws Throwable {
+ super.finalize();
+ clearCache();
+ }
+
+ public String getNodeText(N node) {
+ if (node == null) {
+ return null;
+ }
+ String text;
+
+ if (node.isDirty() || !renderCache.containsKey(node)) {
+
+ // calculer le rendu du noeud
+ if (node.isStringNode()) {
+ text = _(node.getId());
+
+ } else {
+
+ text = computeNodeText(node);
+ }
+
+ if (log.isDebugEnabled()) {
+ log.debug("text for node [" + node + "] = <" + text + ">");
+ }
+
+ // sauvegarde dans le cache
+ renderCache.put(node, text);
+
+ // le noeud est de nouveau propre
+ node.setDirty(false);
+
+ } else {
+
+ // recupération directement du rendu dans le cache
+ text = renderCache.get(node);
+ }
+
+ return text;
+ }
+}
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/AbstractJaxxTreeCellRenderer.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Copied: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/JaxxTreeHelper.java (from rev 2006, trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/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-29 16:09:09 UTC (rev 2009)
@@ -0,0 +1,989 @@
+/*
+ * #%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.JaxxDelegateTreeModel;
+import jaxx.runtime.swing.nav.treetable.JaxxTreeTableModel;
+import jaxx.runtime.swing.nav.DataProvider;
+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.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;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * 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}.
+ * <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
+ * root node.
+ * <p/>
+ * To obtain the model, use method {@link #getModel()}.
+ * <p/>
+ * <b>Note:</b> The helper internal model can be different from the tree model,
+ * but must be the <b>lowest</b> model, other models must listen nicely this
+ * model to obtain model modification and selection notifications.
+ * <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)}.
+ * <p/>
+ * To obtain the tree, use method {@link #getTree()}.
+ * <h3>Internal data provider</h3>
+ * To populate childs nodes and render nodes, we use a {@link jaxx.runtime.swing.nav.DataProvider}.
+ * <p/>
+ * To register the data provider, use method {@link #setDataProvider(jaxx.runtime.swing.nav.DataProvider)}.
+ * <p/>
+ * To obtain the data provider, use method {@link #getDataProvider()}.
+ * <h2>Internal listeners</h2>
+ * Several listeners are used to manage the auto-loading of nodes in model :
+ * <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.
+ * <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)}.
+ * <h3>{@link #selectionListener}</h3>
+ * To listen modification of the selection, it will mainly expand paths if required.
+ * <p/>
+ * This is a requirement, since childs of a node should NOT be loaded, so when
+ * selects a node, always check the path from root to selected node are all fully
+ * loaded.
+ * <h2>Model methods</h2>
+ * 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>
+ * <p/>
+ * </ul>
+ * <h3>Model selection modification</h3>
+ * <ul>
+ * <li>{@link #selectNode(jaxx.runtime.swing.nav.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>
+ * </ul>
+ * <h3>Child loadors factory</h3>
+ * The class offers a factory of {@link jaxx.runtime.swing.nav.JaxxNodeChildLoador}, use the method
+ * {@link #getChildLoador(Class)} to obtain the correct child loador given his type.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @see jaxx.runtime.swing.nav.JaxxNode
+ * @see jaxx.runtime.swing.nav.JaxxNodeChildLoador
+ * @see AbstractJaxxTreeCellRenderer
+ * @since 2.1
+ */
+public class JaxxTreeHelper<N extends JaxxNode<N>> {
+
+ /** Logger */
+ static private final Log log = LogFactory.getLog(JaxxTreeHelper.class);
+
+ /**
+ * The shared instance of tree model.
+ * <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).
+ * <p/>
+ * 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;
+
+ /**
+ * 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 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;
+
+ /**
+ * 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}).
+ */
+ protected TreeWillExpandListener expandListener;
+
+ /**
+ * pour ouvrir les fils d'un noeud que l'on vient de sélectionner pour
+ * éviter d'avoir à faire des doubles clics.
+ */
+ protected TreeSelectionListener selectionListener;
+
+ /**
+ * pour recharger le rendu des noeuds (et charger les fils si nécessaires)
+ * lors d'une modification dans le modèle de l'arbre.
+ */
+ protected TreeModelListener treeModelListener;
+
+ /** Cache of child loadors. */
+ protected static Set<? super JaxxNodeChildLoador<?, ?, ?>> childLoadors;
+
+ protected static Set<? super JaxxNodeChildLoador<?, ?, ?>> getChildLoadors() {
+ if (childLoadors == null) {
+ childLoadors = new HashSet<JaxxNodeChildLoador<?, ?, ?>>();
+ }
+ return childLoadors;
+ }
+
+ /**
+ * Obtains the {@link JaxxNodeChildLoador} of the given {@code type} from
+ * internal cache.
+ * <p/>
+ * <b>Note:</b> The loador will be instanciated if not found, and push in cache.
+ *
+ * @param type the type of loador to get
+ * @param <L> the type of loador to get
+ * @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;
+ for (Object loador : cache) {
+ if (type.equals(loador.getClass())) {
+ result = (JaxxNodeChildLoador<?, ?, ?>) loador;
+ break;
+ }
+ }
+ if (result == null) {
+ // add it in cache
+ try {
+ result = type.newInstance();
+ cache.add(result);
+ if (log.isDebugEnabled()) {
+ log.debug("Add " + result + " in loadors cache (new size:" + cache.size() + ").");
+ }
+ } catch (Exception e) {
+ throw new IllegalArgumentException("Could not instanciate loador [" + type.getName() + "]", e);
+ }
+ }
+ return (L) result;
+ }
+
+ public JaxxTreeHelper() {
+
+ selectionListener = new TreeSelectionListener() {
+
+ @Override
+ public void valueChanged(TreeSelectionEvent e) {
+ if (!checkModel()) {
+ return;
+ }
+
+ // Hack, because event.getSource for TreeTable doesnt return selectionModel
+ TreeSelectionModel source = getSelectionModel();
+
+ if (source.isSelectionEmpty()) {
+
+ // empty selection
+ if (log.isDebugEnabled()) {
+ log.debug("Selection is empty.");
+ }
+ return;
+ }
+
+ boolean debugEnabled = log.isDebugEnabled();
+ boolean traceEnabled = log.isTraceEnabled();
+ for (TreePath path : e.getPaths()) {
+
+ N node = getNode(path);
+ if (node == null) {
+
+ // pas de noeud selectionne
+ if (debugEnabled) {
+ log.debug("Skip for null node.");
+ }
+ continue;
+ }
+
+ boolean isAdded = e.isAddedPath(path);
+
+ TreePath pathToExpand = new TreePath(model.getPathToRoot(node));
+ boolean pathExpanded = isExpanded(pathToExpand);
+
+ if (traceEnabled || isAdded && debugEnabled) {
+ log.debug("==== Node selection ====================================");
+ log.debug("node ? " + node);
+ log.debug("is added ? " + isAdded);
+ log.debug("is path expanded ? " + pathExpanded);
+ log.debug("is node static ? " + node.isStaticNode());
+ log.debug("is node loaded ? " + node.isLoaded());
+ log.debug("is node leaf ? " + node.isLeaf());
+ log.debug("node nb childs ? " + node.getChildCount());
+ }
+
+ if (isAdded && !pathExpanded) {
+
+ // ask to expand path
+ log.info("expand node [" + pathToExpand + "]");
+ expandPath(pathToExpand);
+ }
+ }
+ }
+ };
+ expandListener = new TreeWillExpandListener() {
+ @Override
+ public void treeWillExpand(TreeExpansionEvent event) {
+
+ if (!checkModel()) {
+ // no model
+ return;
+ }
+
+ N source = getNode(event.getPath());
+
+ if (source.isLoaded()) {
+
+ // node is already loaded, nothing to do
+ return;
+ }
+
+ if (log.isDebugEnabled()) {
+ log.debug("will load childs of node [" + source + "]");
+ }
+ // populate childs of node
+ source.populateChilds(model, getDataProvider());
+ }
+
+ @Override
+ public void treeWillCollapse(TreeExpansionEvent event) {
+ }
+ };
+
+
+ treeModelListener = new TreeModelListener() {
+ @Override
+ public void treeNodesInserted(TreeModelEvent e) {
+ if (!checkModel()) {
+ // no model
+ return;
+ }
+ N source = getNode(e.getTreePath());
+ Object[] children = e.getChildren();
+ if (log.isDebugEnabled()) {
+ log.debug(getMessage("inserted ", source, children));
+ }
+
+ // ask to populate children nodes
+ populateNode(null, children, false);
+ }
+
+ @SuppressWarnings({"unchecked"})
+ @Override
+ public void treeNodesRemoved(TreeModelEvent e) {
+ if (!checkModel()) {
+ // no model
+ return;
+ }
+ N source = getNode(e.getTreePath());
+ Object[] children = e.getChildren();
+ if (log.isDebugEnabled()) {
+ log.debug(getMessage("removed ", source, children));
+ }
+
+ // Invalidates nodes in renderer cache (if any)
+ AbstractJaxxTreeCellRenderer<N> renderer = getTreeCellRenderer();
+ if (children != null && renderer != null) {
+ for (Object child : children) {
+ renderer.invalidateCache((N) child);
+ }
+ }
+ }
+
+ @Override
+ public void treeNodesChanged(TreeModelEvent e) {
+ if (!checkModel()) {
+ // no model
+ return;
+ }
+
+ N source = getNode(e.getTreePath());
+ Object[] children = e.getChildren();
+ if (log.isDebugEnabled()) {
+ log.debug(getMessage("changed ", source, children));
+ }
+
+ // ask to populate modified child nodes
+ populateNode(null, children, false);
+ }
+
+ @Override
+ public void treeStructureChanged(TreeModelEvent e) {
+ if (!checkModel()) {
+ // no model
+ return;
+ }
+ N source = getNode(e.getTreePath());
+ Object[] children = e.getChildren();
+ if (log.isDebugEnabled()) {
+ log.debug(getMessage("structure changed", source, children));
+ }
+
+ // ask to populate structure modified node and nodes recursively
+ populateNode(source, children, true);
+ }
+
+ protected String getMessage(String action, N source, Object[] children) {
+ StringBuilder sb = new StringBuilder();
+ sb.append("==== Nodes ");
+ sb.append(action);
+ sb.append(" =================");
+ sb.append("\nsource : ").append(source);
+ sb.append("\nnb nodes : ");
+ sb.append(children == null ? 0 : children.length);
+ if (children != null) {
+ int i = 0;
+ for (Object child : children) {
+ sb.append("\n [");
+ sb.append(i++);
+ sb.append("] - ");
+ sb.append(child);
+ }
+ }
+ return sb.toString();
+ }
+ };
+ }
+
+ /**
+ * Obtains the attached data provider used to populate and render nodes.
+ *
+ * @return the attached data provider
+ */
+ protected DataProvider getDataProvider() {
+ return dataProvider;
+ }
+
+ /**
+ * Obtains the registred tree.
+ *
+ * @return the registred tree for this helper or {@code null} if none was registred
+ */
+ public JTree getTree() {
+ return tree;
+ }
+
+ /**
+ * 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;
+ }
+
+ /**
+ * Obtains the internal tree table model.
+ *
+ * @return the internal tree table model or {@code null} if none was created.
+ */
+ public DefaultTreeModel getTreeModel() {
+ return model.getTreeDelegateModel();
+ }
+
+ /**
+ * 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();
+ }
+
+ /**
+ * 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}.
+ */
+ @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;
+ }
+
+ /**
+ * Obtains the selected node of the registred tree.
+ *
+ * @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;
+ }
+
+ /**
+ * Obtains the path of ids fro the root node to the selected node on the
+ * registred tree.
+ *
+ * @return the array of ids from root node to selected node.
+ */
+ public String[] getSelectedIds() {
+ List<String> result = new ArrayList<String>();
+ N selectedNode = getSelectedNode();
+ while (selectedNode != null && !selectedNode.isRoot()) {
+
+ result.add(selectedNode.getId());
+ selectedNode = selectedNode.getParent();
+ }
+ Collections.reverse(result);
+ return result.toArray(new String[result.size()]);
+ }
+
+ /**
+ * 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
+ * {@link #expandListener} listener and the {@link #selectionListener}.
+ *
+ * @param tree the tree to register
+ * @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);
+ }
+
+ /**
+ * 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
+ */
+ public void setTreeTable(JXTreeTable treeTable,
+ boolean addExpandTreeListener,
+ TreeSelectionListener listener) {
+ this.treeTable = treeTable;
+ if (addExpandTreeListener) {
+ this.treeTable.addTreeWillExpandListener(expandListener);
+ }
+ if (listener != null) {
+ this.treeTable.addTreeSelectionListener(listener);
+ }
+ this.treeTable.addTreeSelectionListener(selectionListener);
+ }
+
+ /**
+ * Inserts the given node to the given {@code parentNode}.
+ * <p/>
+ * The node will be added to his parent, then creation listeners will be
+ * fired.
+ *
+ * @param parentNode the parent node where to insert the new node *
+ * @param newNode the node to insert
+ */
+ public void insertNode(N parentNode, N newNode) {
+ parentNode.add(newNode);
+ if (!model.isTreeTable()) {
+ model.notifyNodeInserted(newNode);
+ } else {
+ model.nodeStructureChanged(parentNode);
+ }
+ }
+
+ /**
+ * Removes the given {@code node} from the registred tree model and returns
+ * his parent.
+ *
+ * @param node the node to remove
+ * @return the parent node of the removed node.
+ */
+ public N removeNode(N node) {
+ N parentNode = node.getParent();
+ model.removeNodeFromParent(node);
+ return parentNode;
+ }
+
+ /**
+ * Moves the given {@code node} to the new {@code position}.
+ *
+ * @param parentNode the parent node
+ * @param node the node to move
+ * @param position the new position of the node
+ */
+ public void moveNode(N parentNode, N node, int position) {
+ parentNode.remove(node);
+ parentNode.insert(node, position);
+ model.nodeStructureChanged(parentNode);
+ }
+
+ /**
+ * Refreshs the given {@code node}.
+ * <p/>
+ * If flag {@code deep} is set to {@code true}, then it will refresh
+ * recursively children nodes.
+ * <p/>
+ * <b>Note:</b>As a side-effect, evvery node involved will become
+ * {@code dirty}.
+ *
+ * @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()
+ */
+ @SuppressWarnings({"unchecked"})
+ public void refreshNode(N node, boolean deep) {
+ if (log.isDebugEnabled()) {
+ log.debug("Will refresh (deep ? " + deep + ") node " + node);
+ }
+ model.nodeChanged(node);
+ if (deep) {
+ // repaint childs nodes
+ Enumeration<N> e = node.children();
+ while (e.hasMoreElements()) {
+ N child = e.nextElement();
+ refreshNode(child, true);
+ }
+ }
+ }
+
+ /**
+ * 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) {
+ if (!checkModel()) {
+ return;
+ }
+ if (!node.isLoaded()) {
+ node.populateChilds(model, dataProvider);
+ Enumeration<? extends JaxxNode<?>> enumeration = node.children();
+ while (enumeration.hasMoreElements()) {
+ N jaxxNode = (N) enumeration.nextElement();
+ loadAllNodes(model, jaxxNode, dataProvider);
+ }
+ }
+ }
+
+ /**
+ * Selects the parent of the currently selected node.
+ * <p/>
+ * <b>Note:</> If selection is empty, then throws a NPE.
+ *
+ * @throws NullPointerException if selection is empty
+ */
+ public void selectParentNode() throws NullPointerException {
+
+ N node = getSelectedNode();
+
+ if (node == null) {
+ // pas de noeud selectionne
+ throw new NullPointerException("no selected node in context");
+ }
+ node = node.getParent();
+
+ selectNode(node);
+ }
+
+ /**
+ * Selects the given {@code node} in the registred tree.
+ *
+ * @param node the node to select
+ */
+ public void selectNode(N node) {
+ if (!checkModel()) {
+
+ // no model
+ return;
+ }
+ if (log.isDebugEnabled()) {
+ log.debug("try to select node [" + node + "]");
+ }
+ TreePath path = new TreePath(model.getPathToRoot(node));
+
+ setSelectionPath(path);
+ scrollPathToVisible(path);
+ }
+
+ /**
+ * Selects the node described by his given {@code path} of ids.
+ *
+ * @param path the absolute path of ids from root node to node to select.
+ */
+ public void selectNode(String... path) {
+ if (!checkModel()) {
+
+ // no model
+ return;
+ }
+ if (log.isDebugEnabled()) {
+ log.debug("try to select node from ids " + Arrays.toString(path));
+ }
+ N root = model.getRoot();
+ N node = findNode(root, path);
+ if (log.isDebugEnabled()) {
+ log.debug("selected node [" + node + "]");
+ }
+ if (node != null) {
+ selectNode(node);
+ }
+ }
+
+ /**
+ * Finds a node from the given root {@code node}, applying the path given
+ * by {@code ids}.
+ *
+ * @param node the starting node
+ * @param ids the path of ids to apply on the node.
+ * @return the find node or {@code null} if no node matchs.
+ */
+ public N findNode(N node, String... ids) {
+ if (!checkModel()) {
+
+ // no model
+ return null;
+ }
+ N result = null;
+ for (String id : ids) {
+
+ result = node.findNodeById(id, model, getDataProvider());
+
+ if (result == null) {
+
+ // un des noeud n'a pas ete trouve, on sort
+ break;
+ }
+ node = result;
+ }
+ return result;
+ }
+
+ /**
+ * 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.
+ */
+ protected boolean checkModel() {
+ if (model == null) {
+
+ // no model set,
+ log.warn("No model set in " + this);
+ return false;
+ }
+ // model is set
+ return true;
+ }
+
+ /**
+ * Populates nodes.
+ * <p/>
+ * If {@code node} is not {@code null}, then populate it.
+ * <p/>
+ * If {@code children} is not {@code null}, then populate them, moreover
+ * if {@code recurse} is set to {@code true} then do a recurse refresh on
+ * children.
+ *
+ * @param node the parent node to populate (optional)
+ * @param children the child nodes to populate (optional)
+ * @param recurse flag sets to {@code true} if should do recurse refresh on
+ * given {@code children} nodes.
+ */
+ @SuppressWarnings({"unchecked"})
+ protected void populateNode(N node,
+ Object[] children,
+ boolean recurse) {
+ DataProvider dataProvider = getDataProvider();
+ if (node != null) {
+ if (log.isDebugEnabled()) {
+ log.debug("Will populate node : " + node);
+ }
+ node.populateNode(model, dataProvider, false);
+ }
+ if (children != null) {
+ for (Object o : children) {
+ N child = (N) o;
+ if (log.isDebugEnabled()) {
+ log.debug("Will populate child node : " + child);
+ }
+ child.populateNode(model, dataProvider, recurse);
+ }
+ }
+ }
+
+ /**
+ * Convinient method to objet the casted node of a {@link TreePath}.
+ *
+ * @param path the path contaning the node.
+ * @return the casted node from the path.
+ */
+ @SuppressWarnings({"unchecked"})
+ protected N getNode(TreePath path) {
+ N result = (N) path.getLastPathComponent();
+ 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 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);
+ }
+}
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/JaxxTreeHelper.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: 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 (rev 0)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/JaxxTreeNode.java 2010-06-29 16:09:09 UTC (rev 2009)
@@ -0,0 +1,480 @@
+/*
+ * #%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.DataProvider;
+import jaxx.runtime.swing.nav.JaxxDelegateTreeModel;
+import jaxx.runtime.swing.nav.JaxxNode;
+import jaxx.runtime.swing.nav.JaxxNodeChildLoador;
+import org.apache.commons.logging.LogFactory;
+import org.apache.commons.logging.Log;
+
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.TreeNode;
+import java.util.Enumeration;
+
+/**
+ * Definition of a node with a optional {@link #childLoador} to build childs of
+ * node.
+ * <p/>
+ * A node is identified by an {@link #id} of an associated data of type
+ * {@link #internalClass}.
+ * <p/>
+ * <b>Note:</b>
+ * <p><i> While using a {@link #childLoador}, we can not know before node
+ * was loaded the exact count of his childs. As a matter of facts, real leaf
+ * nodes appears at the beginning in ui as a not leaf (there is a root handler).
+ * When node was loaded, a leaf node will be then displayed as required.
+ * </i></p>
+ * <p/>
+ * <h2>Why JaxxNode is generic ?</h2>
+ * In a project, you should implements your own Node extending with one like this :
+ * <pre>
+ * class MyNode extends JaxxNode<MyNode> { ... }
+ * </pre>
+ * While in this class, you overrides every method with a node return type,
+ * co-variance you'll be able to use this code :
+ * <pre>
+ * MyNode parentNode = new MyNode();
+ * MyNode node = parentNode.getFirstNode();
+ * </pre>
+ * So for final application this generic type avoid any cast for your own node
+ * type, this is quite convinient.
+ * <p/>
+ * Even if in your project, you wants to have a heriarchy of nodes, this will
+ * still works (if you use a genercic type on your abstract nodes).
+ * <h2>Internal states</h2>
+ * <ul>
+ * <li><b>internalClass</b> : the type of data associated with the node</li>
+ * <li><b>context</b> : an optinal context to distinguish different types of
+ * node with same {@code internalclass}</li>
+ * <li><b>id</b> : id of the data associated with the node</li>
+ * <li><b>dirty</b> : flag sets to {@code true} when node render MUST be recomputed</li>
+ * <li><b>loaded</b> : flag sets to {@code true} when node was loaded</li>
+ * <li><b>childLoador</b> : optional loador of childs</li>
+ * </ul>
+ * <h2>Static nodes</h2>
+ * Some nodes do not need auto-loading, we call them {@code static nodes}.
+ * The method {@link #isStaticNode()} gives this state.
+ * <p/>
+ * <b>Note:</b> A static node has no {@link #childLoador}.
+ * <h2>Node loading</h2>
+ * 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(javax.swing.tree.DefaultTreeModel , jaxx.runtime.swing.nav.DataProvider , boolean)}
+ * and {@link #populateChilds(javax.swing.tree.DefaultTreeModel , jaxx.runtime.swing.nav.DataProvider)} methods.
+ * <h2>Node rendering</h2
+ * the {@link AbstractJaxxTreeCellRenderer} looks the {@link #dirty} 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 #dirty} should be set to {@code true}.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 2.1
+ */
+public class JaxxTreeNode<N extends JaxxTreeNode<N>> extends DefaultMutableTreeNode implements JaxxNode<N> {
+
+ /** Logger */
+ static private final Log log = LogFactory.getLog(JaxxNode.class);
+
+ private static final long serialVersionUID = 1L;
+
+ /** Type of data associated with the node */
+ protected final Class<?> internalClass;
+
+ /**
+ * Optinal context to distinguish different nodes with same
+ * {@link #internalClass}.
+ */
+ protected final String context;
+
+ /** Id of the data associated with the node. */
+ protected final String id;
+
+ /** Flag to know when renderer should (re-)compute render of the node. */
+ protected boolean dirty = true;
+
+ /** Flag to know when the none static node was loaded. */
+ protected boolean loaded;
+
+ /** Optional child loador to lazy create childs of the node. */
+ protected final JaxxNodeChildLoador<?, ?, N> childLoador;
+
+ protected JaxxTreeNode(String id) {
+ this(String.class, id, null, null);
+ }
+
+ public JaxxTreeNode(Class<?> internalClass,
+ String id,
+ String context,
+ JaxxNodeChildLoador<?, ?, N> childLoador) {
+ this.internalClass = internalClass;
+ this.id = id;
+ this.context = context;
+ this.childLoador = childLoador;
+ if (isStaticNode()) {
+
+ // A static node is always full loaded
+ loaded = true;
+ }
+ if (log.isDebugEnabled()) {
+ log.debug("new node : " + this);
+ }
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public String getContext() {
+ return context;
+ }
+
+ public Class<?> getInternalClass() {
+ return internalClass;
+ }
+
+ public boolean isLoaded() {
+ return loaded;
+ }
+
+ public boolean isDirty() {
+ return dirty;
+ }
+
+ /**
+ * Convinient method to known if the node is a {@code String} typed.
+ *
+ * @return {@code true} if the type of node if
+ */
+ public boolean isStringNode() {
+ return String.class.equals(internalClass);
+ }
+
+ /**
+ * To know if the node is static.
+ * <p/>
+ * A {@code static} node has no {@link #childLoador}.
+ *
+ * @return {@code true} when the node is static : says, the node has
+ * no {@link #childLoador}.
+ */
+ public boolean isStaticNode() {
+ return childLoador == null;
+ }
+
+ /**
+ * Gets the first node form this one to the root which has a none
+ * {@code String} type.
+ *
+ * @return the first concrete node type
+ */
+ @SuppressWarnings({"unchecked"})
+ public N getContainerNode() {
+ if (isRoot()) {
+ // si on arrive sur le root, quelque chose ne va pas,
+ // on bloque par null, a defaut de declancher une exception
+ return null;
+ }
+
+ if (isStringNode()) {
+ // on est sur un noeud de type String, donc on regarde sur le parent
+ return getParent().getContainerNode();
+ }
+
+ // cas final : sur un noeud de donnee + classe interne de donnee
+ return (N) this;
+ }
+
+ /**
+ * Given an {@code id}, obtain the child with matching id.
+ * <p/>
+ * If node is NOT {@code loaded}, then first loads it (method
+ * {@link #populateChilds(jaxx.runtime.swing.nav.JaxxDelegateTreeModel , jaxx.runtime.swing.nav.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 provider data provider
+ * @return the found node or {@code null} if not found
+ */
+ @SuppressWarnings({"unchecked"})
+ public N findNodeById(String id,
+ JaxxDelegateTreeModel<N> model,
+ DataProvider provider) {
+ if (id == null) {
+
+ // id null ? donc rien a faire
+ return null;
+ }
+ if (id.equals(getId())) {
+
+ // on a trouve le bon noeud
+ return (N) this;
+ }
+
+ if (!isLoaded()) {
+
+ // il faut charger les fils du noeud pour effectuer la recherche
+ populateChilds(model, provider);
+ }
+
+ if (isLeaf()) {
+
+ // au final le noeud est une feuille, donc ne convient pas
+ return null;
+ }
+
+ // on recherche dans les fils
+ Enumeration<N> enumeration = children();
+ while (enumeration.hasMoreElements()) {
+ N node = enumeration.nextElement();
+ N nodeById = node.findNodeById(id, model, provider);
+ if (nodeById != null) {
+ return nodeById;
+ }
+ }
+
+ // aucun des noeud fils ne convient
+ return null;
+ }
+
+ /**
+ * Changes the {@link #dirty} state.
+ * <p/>
+ * As a side effect, when a renderer will use this node, it will force to
+ * reload the render from the {@link DataProvider}.
+ *
+ * @param dirty the new dirty value
+ */
+ public void setDirty(boolean dirty) {
+ this.dirty = dirty;
+ }
+
+ @Override
+ public boolean isLeaf() {
+ // there is two behaviours for the test :
+ // 1 - when the node is static, then can directly use his number of child
+ // to determine if node is a leaf (no child)
+ // 2 - when the node is dynamic, then ALWAYS says the node is NOT a leaf until
+ // it was loaded, otherwise the WillExpand listener will not load the childs...
+ // Once the node is loaded, use back the normal behaviour (count number of childs)
+ return isStaticNode() ? super.isLeaf() : isLoaded() && getChildCount() == 0;
+ }
+
+ @Override
+ public Object getUserObject() {
+ return id;
+ }
+
+ @Override
+ public String toString() {
+ return System.identityHashCode(this) + "-" + id;
+ }
+
+ //--------------------------------------------------------------------------
+ //-- Populate methods
+ //--------------------------------------------------------------------------
+
+ /**
+ * To populate the node. A side-effect of this method is to set {@code dirty}
+ * the node (renderer will recompute the render of the node).
+ * <p/>
+ * If {@code populateChilds} is set to {@code true}, then also populate
+ * childs of the node using the given {@code dataProvider}.
+ *
+ * @param model le modèles content le noeud
+ * @param provider le provider de données
+ * @param populateChilds un drapeau pour charger aussi les fils du noeud courant
+ */
+ public void populateNode(JaxxDelegateTreeModel<N> model,
+ DataProvider provider,
+ boolean populateChilds) {
+
+ // on indique que le noeud n'est plus propre
+ setDirty(true);
+
+ if (populateChilds) {
+
+ // chargement des fils
+ populateChilds(model, provider);
+ }
+ }
+
+ /**
+ * To populate childs of the node (only when a none static node).
+ * A side-effect of this method is to set {@code loaded} of the node.
+ * <p/>
+ * For a static node, do nothing.
+ *
+ * @param model model owner of the node
+ * @param provider data provider
+ */
+ @SuppressWarnings({"unchecked"})
+ public void populateChilds(JaxxDelegateTreeModel<N> model, DataProvider provider) {
+ if (isStaticNode()) {
+
+ log.debug("is static node " + this);
+
+ // noeud static, rien a faire
+ return;
+ }
+
+ // chargement des noeuds fils du noeud courant
+ try {
+ if (log.isDebugEnabled()) {
+ log.debug("Will load childs for " + this);
+ }
+ childLoador.loadChilds(model, (N) this, provider);
+ } catch (Exception e) {
+ throw new RuntimeException(e.getMessage(), e);
+ } finally {
+
+ // au final, on passe le noeud a l'état chargé
+ loaded = true;
+ }
+ }
+
+ //--------------------------------------------------------------------------
+ //-- Overrides to use generic type as return
+ //--------------------------------------------------------------------------
+
+ @SuppressWarnings({"unchecked"})
+ @Override
+ public N getParent() {
+ return (N) super.getParent();
+ }
+
+ @SuppressWarnings({"unchecked"})
+ @Override
+ public N getRoot() {
+ return (N) super.getRoot();
+ }
+
+ @SuppressWarnings({"unchecked"})
+ @Override
+ public N getFirstChild() {
+ return (N) super.getFirstChild();
+ }
+
+ @SuppressWarnings({"unchecked"})
+ @Override
+ public N getLastChild() {
+ return (N) super.getLastChild();
+ }
+
+ @SuppressWarnings({"unchecked"})
+ @Override
+ public N getChildAfter(TreeNode aChild) {
+ return (N) super.getChildAfter(aChild);
+ }
+
+ @SuppressWarnings({"unchecked"})
+ @Override
+ public N getChildBefore(TreeNode aChild) {
+ return (N) super.getChildBefore(aChild);
+ }
+
+ @SuppressWarnings({"unchecked"})
+ @Override
+ public N getNextSibling() {
+ return (N) super.getNextSibling();
+ }
+
+ @SuppressWarnings({"unchecked"})
+ @Override
+ public N getPreviousSibling() {
+ return (N) super.getPreviousSibling();
+ }
+
+ @SuppressWarnings({"unchecked"})
+ @Override
+ public N getFirstLeaf() {
+ return (N) super.getFirstLeaf();
+ }
+
+ @SuppressWarnings({"unchecked"})
+ @Override
+ public N getLastLeaf() {
+ return (N) super.getLastLeaf();
+ }
+
+ @SuppressWarnings({"unchecked"})
+ @Override
+ public N getNextLeaf() {
+ return (N) super.getNextLeaf();
+ }
+
+ @SuppressWarnings({"unchecked"})
+ @Override
+ public N getPreviousLeaf() {
+ return (N) super.getPreviousLeaf();
+ }
+
+ @SuppressWarnings({"unchecked"})
+ @Override
+ public N getNextNode() {
+ return (N) super.getNextNode();
+ }
+
+ @SuppressWarnings({"unchecked"})
+ @Override
+ public N getPreviousNode() {
+ return (N) super.getPreviousNode();
+ }
+
+ @SuppressWarnings({"unchecked"})
+ public N getSharedAncestor(N aNode) {
+ return (N) super.getSharedAncestor((DefaultMutableTreeNode)aNode);
+ }
+
+ @SuppressWarnings({"unchecked"})
+ @Override
+ public N getChildAt(int index) {
+ return (N) super.getChildAt(index);
+ }
+
+ @SuppressWarnings({"unchecked"})
+ @Override
+ public Enumeration<N> children() {
+ return (Enumeration<N>)super.children();
+ }
+
+ @Override
+ public void add(N node) {
+ super.add(node);
+ }
+
+ @Override
+ public void remove(N node) {
+ super.remove(node);
+ }
+
+ @Override
+ public void insert(N node, int position) {
+ super.insert(node, position);
+ }
+}
Added: 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 (rev 0)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/JaxxTreeNodeChildLoador.java 2010-06-29 16:09:09 UTC (rev 2009)
@@ -0,0 +1,34 @@
+/*
+ * #%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.JaxxNodeChildLoador;
+
+public abstract class JaxxTreeNodeChildLoador<T, O, N extends JaxxTreeNode<N>> extends JaxxNodeChildLoador<T, O, N> {
+
+ protected JaxxTreeNodeChildLoador(Class<O> beanType) {
+ super(beanType);
+ }
+}
Added: 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 (rev 0)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/JaxxTreeTableModel.java 2010-06-29 16:09:09 UTC (rev 2009)
@@ -0,0 +1,217 @@
+/*
+ * #%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 org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.jdesktop.swingx.tree.TreeModelSupport;
+import org.jdesktop.swingx.treetable.DefaultTreeTableModel;
+import org.jdesktop.swingx.treetable.TreeTableModel;
+import org.jdesktop.swingx.treetable.TreeTableNode;
+
+import javax.swing.event.TreeModelListener;
+import javax.swing.tree.TreeNode;
+import javax.swing.tree.TreePath;
+
+/**
+ * Model of the tree table used for a jaxx tree table api.
+ *
+ * @author sletellier
+ * @since 2.2
+ */
+public class JaxxTreeTableModel implements TreeTableModel {
+
+ /**
+ * Logger
+ */
+ static private final Log log =
+ LogFactory.getLog(JaxxTreeTableModel.class);
+
+
+ /**
+ * Hack to acces to the modelSupport
+ *
+ * @author sletellier
+ * @since 2.2
+ */
+ public static abstract class MyDefaultTreeTableModel extends DefaultTreeTableModel {
+
+ public TreeModelSupport getModelSupport() {
+ return modelSupport;
+ }
+
+ public abstract String[] getColumnsNames();
+
+ }
+
+ /**
+ * the delegate model
+ */
+ protected MyDefaultTreeTableModel delegate;
+
+ public JaxxTreeTableModel(MyDefaultTreeTableModel delegate) {
+ this.delegate = delegate;
+ }
+
+ @SuppressWarnings({"SuspiciousSystemArraycopy"})
+ public TreeTableNode[] getPathToRoot(TreeTableNode aNode) {
+ if (aNode == null) {
+ return null;
+ }
+ TreeNode[] treeNodes = getDelegate().getPathToRoot(aNode);
+ JaxxTreeTableNode[] result = new JaxxTreeTableNode[treeNodes.length];
+ System.arraycopy(treeNodes, 0, result, 0, treeNodes.length);
+ return result;
+ }
+
+ public void nodeStructureChanged(JaxxTreeTableNode<?> node) {
+ if (node != null) {
+ JaxxTreeTableNode<?> parentNode = node.getParent();
+ if (parentNode == null || parentNode.isRoot()) {
+ getModelSupport().fireNewRoot();
+ } else {
+ TreeNode[] treeNodes = getPathToRoot(parentNode);
+ if (treeNodes != null) {
+ getModelSupport().fireTreeStructureChanged(new TreePath(treeNodes));
+ }
+ // FIXME : it's append....
+// else {
+// log.error("[Node structure changed] Path to root is null !");
+// }
+ }
+ } else {
+ log.error("Node is null !");
+ }
+ }
+
+ public void nodeChanged(JaxxTreeTableNode<?> node) {
+ if (node != null) {
+ JaxxTreeTableNode<?> parent = node.getParent();
+ TreeNode[] treeNodes = getPathToRoot(parent);
+ if (treeNodes != null) {
+ getModelSupport().fireChildChanged(
+ new TreePath(treeNodes), parent.getIndex(node), node);
+ // FIXME : it's append....
+// else {
+// log.error("[Node changed] Path to root is null !");
+// }
+ }
+ } else {
+ log.error("Node is null !");
+ }
+ }
+
+ public MyDefaultTreeTableModel getDelegate() {
+ return delegate;
+ }
+
+ public TreeModelSupport getModelSupport() {
+ return delegate.getModelSupport();
+ }
+
+ public String[] getColomnsNames() {
+ return delegate.getColumnsNames();
+ }
+
+ public void setRoot(TreeTableNode root) {
+ delegate.setRoot(root);
+ }
+
+ @Override
+ public TreeTableNode getRoot() {
+ return delegate.getRoot();
+ }
+
+ @Override
+ public Object getChild(Object parent, int index) {
+ return delegate.getChild(parent, index);
+ }
+
+ @Override
+ public int getChildCount(Object parent) {
+ return delegate.getChildCount(parent);
+ }
+
+ @Override
+ public boolean isLeaf(Object node) {
+ return delegate.isLeaf(node);
+ }
+
+ @Override
+ public void valueForPathChanged(TreePath path, Object newValue) {
+ delegate.valueForPathChanged(path, newValue);
+ }
+
+ @Override
+ public int getIndexOfChild(Object parent, Object child) {
+ return delegate.getIndexOfChild(parent, child);
+ }
+
+ @Override
+ public void addTreeModelListener(TreeModelListener l) {
+ delegate.addTreeModelListener(l);
+ }
+
+ @Override
+ public void removeTreeModelListener(TreeModelListener l) {
+ delegate.removeTreeModelListener(l);
+ }
+
+ @Override
+ public Class<?> getColumnClass(int i) {
+ return getDelegate().getColumnClass(i);
+ }
+
+ @Override
+ public int getColumnCount() {
+ return getColomnsNames().length;
+ }
+
+ @Override
+ public String getColumnName(int column) {
+ return getColomnsNames()[column];
+ }
+
+ @Override
+ public int getHierarchicalColumn() {
+ return getDelegate().getHierarchicalColumn();
+ }
+
+ @Override
+ public Object getValueAt(Object o, int i) {
+ return getDelegate().getValueAt(o, i);
+ }
+
+ @Override
+ public boolean isCellEditable(Object o, int i) {
+ return getDelegate().isCellEditable(o, i);
+ }
+
+ @Override
+ public void setValueAt(Object o, Object o1, int i) {
+ getDelegate().setValueAt(o, o1, i);
+ }
+
+}
Added: 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 (rev 0)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/JaxxTreeTableNode.java 2010-06-29 16:09:09 UTC (rev 2009)
@@ -0,0 +1,418 @@
+/*
+ * #%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.DataProvider;
+import jaxx.runtime.swing.nav.JaxxDelegateTreeModel;
+import jaxx.runtime.swing.nav.JaxxNodeChildLoador;
+import jaxx.runtime.swing.nav.JaxxNode;
+import org.apache.commons.logging.LogFactory;
+import org.apache.commons.logging.Log;
+import org.jdesktop.swingx.treetable.DefaultMutableTreeTableNode;
+import java.util.Enumeration;
+
+/**
+ * Definition of a node with a optional {@link #childLoador} to build childs of
+ * node.
+ * <p/>
+ * A node is identified by an {@link #id} of an associated data of type
+ * {@link #internalClass}.
+ * <p/>
+ * <b>Note:</b>
+ * <p><i> While using a {@link #childLoador}, we can not know before node
+ * was loaded the exact count of his childs. As a matter of facts, real leaf
+ * nodes appears at the beginning in ui as a not leaf (there is a root handler).
+ * When node was loaded, a leaf node will be then displayed as required.
+ * </i></p>
+ * <p/>
+ * <h2>Why JaxxNode is generic ?</h2>
+ * In a project, you should implements your own Node extending with one like this :
+ * <pre>
+ * class MyNode extends JaxxNode<MyNode> { ... }
+ * </pre>
+ * While in this class, you overrides every method with a node return type,
+ * co-variance you'll be able to use this code :
+ * <pre>
+ * MyNode parentNode = new MyNode();
+ * MyNode node = parentNode.getFirstNode();
+ * </pre>
+ * So for final application this generic type avoid any cast for your own node
+ * type, this is quite convinient.
+ * <p/>
+ * Even if in your project, you wants to have a heriarchy of nodes, this will
+ * still works (if you use a genercic type on your abstract nodes).
+ * <h2>Internal states</h2>
+ * <ul>
+ * <li><b>internalClass</b> : the type of data associated with the node</li>
+ * <li><b>context</b> : an optinal context to distinguish different types of
+ * node with same {@code internalclass}</li>
+ * <li><b>id</b> : id of the data associated with the node</li>
+ * <li><b>dirty</b> : flag sets to {@code true} when node render MUST be recomputed</li>
+ * <li><b>loaded</b> : flag sets to {@code true} when node was loaded</li>
+ * <li><b>childLoador</b> : optional loador of childs</li>
+ * </ul>
+ * <h2>Static nodes</h2>
+ * Some nodes do not need auto-loading, we call them {@code static nodes}.
+ * The method {@link #isStaticNode()} gives this state.
+ * <p/>
+ * <b>Note:</b> A static node has no {@link #childLoador}.
+ * <h2>Node loading</h2>
+ * 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(javax.swing.tree.DefaultTreeModel , DataProvider, boolean)}
+ * and {@link #populateChilds(javax.swing.tree.DefaultTreeModel , DataProvider)} methods.
+ * <h2>Node rendering</h2
+ * the {@link jaxx.runtime.swing.nav.tree.AbstractJaxxTreeCellRenderer} looks the {@link #dirty} 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 #dirty} should be set to {@code true}.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 2.1
+ */
+public class JaxxTreeTableNode<N extends JaxxTreeTableNode<N>> extends DefaultMutableTreeTableNode implements JaxxNode<N> {
+
+ /** Logger */
+ static private final Log log = LogFactory.getLog(JaxxNode.class);
+
+ private static final long serialVersionUID = 1L;
+
+ /** Type of data associated with the node */
+ protected final Class<?> internalClass;
+
+ /**
+ * Optinal context to distinguish different nodes with same
+ * {@link #internalClass}.
+ */
+ protected final String context;
+
+ /** Id of the data associated with the node. */
+ protected final String id;
+
+ /** Flag to know when renderer should (re-)compute render of the node. */
+ protected boolean dirty = true;
+
+ /** Flag to know when the none static node was loaded. */
+ protected boolean loaded;
+
+ /** Optional child loador to lazy create childs of the node. */
+ protected final JaxxNodeChildLoador childLoador;
+
+ protected JaxxTreeTableNode(String id) {
+ this(String.class, id, null, null);
+ }
+
+ public JaxxTreeTableNode(Class<?> internalClass,
+ String id,
+ String context,
+ JaxxNodeChildLoador childLoador) {
+ this.internalClass = internalClass;
+ this.id = id;
+ this.context = context;
+ this.childLoador = childLoador;
+ if (isStaticNode()) {
+
+ // A static node is always full loaded
+ loaded = true;
+ }
+ if (log.isDebugEnabled()) {
+ log.debug("new node : " + this);
+ }
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public String getContext() {
+ return context;
+ }
+
+ public Class<?> getInternalClass() {
+ return internalClass;
+ }
+
+ public boolean isLoaded() {
+ return loaded;
+ }
+
+ public boolean isDirty() {
+ return dirty;
+ }
+
+ /**
+ * Convinient method to known if the node is a {@code String} typed.
+ *
+ * @return {@code true} if the type of node if
+ */
+ public boolean isStringNode() {
+ return String.class.equals(internalClass);
+ }
+
+ /**
+ * To know if the node is static.
+ * <p/>
+ * A {@code static} node has no {@link #childLoador}.
+ *
+ * @return {@code true} when the node is static : says, the node has
+ * no {@link #childLoador}.
+ */
+ public boolean isStaticNode() {
+ return childLoador == null;
+ }
+
+ /**
+ * Gets the first node form this one to the root which has a none
+ * {@code String} type.
+ *
+ * @return the first concrete node type
+ */
+ @SuppressWarnings({"unchecked"})
+ public N getContainerNode() {
+ if (isRoot()) {
+ // si on arrive sur le root, quelque chose ne va pas,
+ // on bloque par null, a defaut de declancher une exception
+ return null;
+ }
+
+ if (isStringNode()) {
+ // on est sur un noeud de type String, donc on regarde sur le parent
+ return getParent().getContainerNode();
+ }
+
+ // cas final : sur un noeud de donnee + classe interne de donnee
+ return (N) this;
+ }
+
+ public boolean isRoot() {
+ return getParent() == null;
+ }
+
+ /**
+ * Given an {@code id}, obtain the child with matching id.
+ * <p/>
+ * If node is NOT {@code loaded}, then first loads it (method
+ * {@link #populateChilds(jaxx.runtime.swing.nav.JaxxDelegateTreeModel , 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 provider data provider
+ * @return the found node or {@code null} if not found
+ */
+ @SuppressWarnings({"unchecked"})
+ public N findNodeById(String id,
+ JaxxDelegateTreeModel<N> model,
+ DataProvider provider) {
+ if (id == null) {
+
+ // id null ? donc rien a faire
+ return null;
+ }
+ if (id.equals(getId())) {
+
+ // on a trouve le bon noeud
+ return (N) this;
+ }
+
+ if (!isLoaded()) {
+
+ // il faut charger les fils du noeud pour effectuer la recherche
+ populateChilds(model, provider);
+ }
+
+ if (isLeaf()) {
+
+ // au final le noeud est une feuille, donc ne convient pas
+ return null;
+ }
+
+ // on recherche dans les fils
+ Enumeration<N> enumeration = children();
+ while (enumeration.hasMoreElements()) {
+ N node = enumeration.nextElement();
+ N nodeById = node.findNodeById(id, model, provider);
+ if (nodeById != null) {
+ return nodeById;
+ }
+ }
+
+ // aucun des noeud fils ne convient
+ return null;
+ }
+
+ /**
+ * Changes the {@link #dirty} state.
+ * <p/>
+ * As a side effect, when a renderer will use this node, it will force to
+ * reload the render from the {@link DataProvider}.
+ *
+ * @param dirty the new dirty value
+ */
+ public void setDirty(boolean dirty) {
+ this.dirty = dirty;
+ }
+
+ @Override
+ public boolean isLeaf() {
+ // there is two behaviours for the test :
+ // 1 - when the node is static, then can directly use his number of child
+ // to determine if node is a leaf (no child)
+ // 2 - when the node is dynamic, then ALWAYS says the node is NOT a leaf until
+ // it was loaded, otherwise the WillExpand listener will not load the childs...
+ // Once the node is loaded, use back the normal behaviour (count number of childs)
+ return isStaticNode() ? super.isLeaf() : isLoaded() && getChildCount() == 0;
+ }
+
+ @Override
+ public Object getUserObject() {
+ return id;
+ }
+
+ @Override
+ public String toString() {
+ return System.identityHashCode(this) + "-" + id;
+ }
+
+ //--------------------------------------------------------------------------
+ //-- Populate methods
+ //--------------------------------------------------------------------------
+
+ /**
+ * To populate the node. A side-effect of this method is to set {@code dirty}
+ * the node (renderer will recompute the render of the node).
+ * <p/>
+ * If {@code populateChilds} is set to {@code true}, then also populate
+ * childs of the node using the given {@code dataProvider}.
+ *
+ * @param model le modèles content le noeud
+ * @param provider le provider de données
+ * @param populateChilds un drapeau pour charger aussi les fils du noeud courant
+ */
+ public void populateNode(JaxxDelegateTreeModel<N> model,
+ DataProvider provider,
+ boolean populateChilds) {
+
+ // on indique que le noeud n'est plus propre
+ setDirty(true);
+
+ if (populateChilds) {
+
+ // chargement des fils
+ populateChilds(model, provider);
+ }
+ }
+
+ /**
+ * To populate childs of the node (only when a none static node).
+ * A side-effect of this method is to set {@code loaded} of the node.
+ * <p/>
+ * For a static node, do nothing.
+ *
+ * @param model model owner of the node
+ * @param provider data provider
+ */
+ @SuppressWarnings({"unchecked"})
+ public void populateChilds(JaxxDelegateTreeModel<N> model, DataProvider provider) {
+ if (isStaticNode()) {
+
+ // noeud static, rien a faire
+ return;
+ }
+
+ // chargement des noeuds fils du noeud courant
+ try {
+ if (log.isDebugEnabled()) {
+ log.debug("Will load childs for " + this);
+ }
+ childLoador.loadChilds(model, this, provider);
+ } catch (Exception e) {
+ throw new RuntimeException(e.getMessage(), e);
+ } finally {
+
+ // au final, on passe le noeud a l'état chargé
+ loaded = true;
+ }
+ }
+
+ //--------------------------------------------------------------------------
+ //-- Overrides to use generic type as return
+ //--------------------------------------------------------------------------
+
+ @SuppressWarnings({"unchecked"})
+ @Override
+ public N getParent() {
+ return (N) super.getParent();
+ }
+
+ @SuppressWarnings({"unchecked"})
+ @Override
+ public N getChildAt(int index) {
+ return (N) super.getChildAt(index);
+ }
+
+ @SuppressWarnings({"unchecked"})
+ @Override
+ public Enumeration<N> children() {
+ return (Enumeration<N>)super.children();
+ }
+
+ @Override
+ public void add(N node) {
+ super.add(node);
+ }
+
+ @SuppressWarnings({"unchecked"})
+ public N[] getPathToRoot(
+ JaxxTreeTableNode aNode, int depth) {
+ JaxxTreeTableNode[] retNodes;
+
+ /* Check for null, in case someone passed in a null node, or
+ they passed in an element that isn't rooted at root. */
+ if (aNode == null) {
+ if (depth == 0) {
+ return null;
+ } else {
+ retNodes = new JaxxTreeTableNode[depth];
+ }
+ } else {
+ depth++;
+ retNodes = getPathToRoot(aNode.getParent(), depth);
+ retNodes[retNodes.length - depth] = aNode;
+ }
+ return (N[]) retNodes;
+ }
+
+ @Override
+ public void remove(N node) {
+ super.remove(node);
+ }
+
+ @Override
+ public void insert(N node, int position) {
+ super.insert(node, position);
+ }
+}
Added: 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 (rev 0)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/JaxxTreeTableNodeChildLoador.java 2010-06-29 16:09:09 UTC (rev 2009)
@@ -0,0 +1,34 @@
+/*
+ * #%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.JaxxNodeChildLoador;
+
+public abstract class JaxxTreeTableNodeChildLoador<T, O, N extends JaxxTreeTableNode<N>> extends JaxxNodeChildLoador<T, O, N> {
+
+ protected JaxxTreeTableNodeChildLoador(Class<O> beanType) {
+ super(beanType);
+ }
+}
Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/navigation/treetable/NavigationTreeTableNode.java
===================================================================
--- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/navigation/treetable/NavigationTreeTableNode.java 2010-06-29 15:33:32 UTC (rev 2008)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/navigation/treetable/NavigationTreeTableNode.java 2010-06-29 16:09:09 UTC (rev 2009)
@@ -46,7 +46,9 @@
* @author sletellier
* @see NavigationTreeNode
* @since 2.0.0
+ * @deprecated since 2.1, prefer use the simplify api {@code jaxx.runtime.swing.tree}.
*/
+@Deprecated
public class NavigationTreeTableNode extends DefaultMutableTreeTableNode implements NavigationNode<NavigationTreeTableNode> {
private static final long serialVersionUID = -1L;
1
0
r2008 - trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav
by sletellier@users.nuiton.org 29 Jun '10
by sletellier@users.nuiton.org 29 Jun '10
29 Jun '10
Author: sletellier
Date: 2010-06-29 17:33:32 +0200 (Tue, 29 Jun 2010)
New Revision: 2008
Url: http://nuiton.org/repositories/revision/jaxx/2008
Log:
Refactor tree api
Added:
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/
1
0
r2007 - trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing
by sletellier@users.nuiton.org 29 Jun '10
by sletellier@users.nuiton.org 29 Jun '10
29 Jun '10
Author: sletellier
Date: 2010-06-29 17:30:46 +0200 (Tue, 29 Jun 2010)
New Revision: 2007
Url: http://nuiton.org/repositories/revision/jaxx/2007
Log:
Create nav directory
Added:
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/
1
0
r2006 - in trunk: . jaxx-compiler/src/license jaxx-runtime/src/license jaxx-widgets/src/license maven-jaxx-plugin/src/license
by tchemit@users.nuiton.org 29 Jun '10
by tchemit@users.nuiton.org 29 Jun '10
29 Jun '10
Author: tchemit
Date: 2010-06-29 15:59:44 +0200 (Tue, 29 Jun 2010)
New Revision: 2006
Url: http://nuiton.org/repositories/revision/jaxx/2006
Log:
improve THIRD-PARTY
Modified:
trunk/jaxx-compiler/src/license/THIRD-PARTY.properties
trunk/jaxx-runtime/src/license/THIRD-PARTY.properties
trunk/jaxx-widgets/src/license/THIRD-PARTY.properties
trunk/maven-jaxx-plugin/src/license/THIRD-PARTY.properties
trunk/pom.xml
Modified: trunk/jaxx-compiler/src/license/THIRD-PARTY.properties
===================================================================
--- trunk/jaxx-compiler/src/license/THIRD-PARTY.properties 2010-06-29 12:17:03 UTC (rev 2005)
+++ trunk/jaxx-compiler/src/license/THIRD-PARTY.properties 2010-06-29 13:59:44 UTC (rev 2006)
@@ -1,8 +1,7 @@
# Generated by org.nuiton.license.plugin.AddThirdPartyMojo
#-------------------------------------------------------------------------------
# Already used licenses in project :
-# - Apache License, Version 2.0
-# - BSD
+# - BSD License
# - Common Public License Version 1.0
# - Lesser General Public License (LGPL)
# - Lesser General Public License (LGPL) v 3.0
@@ -13,7 +12,7 @@
# Please fill the missing licenses for dependencies :
#
#
-#Sat Jun 26 13:19:17 CEST 2010
+#Tue Jun 29 15:58:43 CEST 2010
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
Modified: trunk/jaxx-runtime/src/license/THIRD-PARTY.properties
===================================================================
--- trunk/jaxx-runtime/src/license/THIRD-PARTY.properties 2010-06-29 12:17:03 UTC (rev 2005)
+++ trunk/jaxx-runtime/src/license/THIRD-PARTY.properties 2010-06-29 13:59:44 UTC (rev 2006)
@@ -1,8 +1,7 @@
# Generated by org.nuiton.license.plugin.AddThirdPartyMojo
#-------------------------------------------------------------------------------
# Already used licenses in project :
-# - Apache License, Version 2.0
-# - BSD
+# - BSD License
# - Common Public License Version 1.0
# - Lesser General Public License (LGPL)
# - Lesser General Public License (LGPL) v 3.0
@@ -13,7 +12,7 @@
# Please fill the missing licenses for dependencies :
#
#
-#Sat Jun 26 13:19:17 CEST 2010
+#Tue Jun 29 15:58:39 CEST 2010
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
Modified: trunk/jaxx-widgets/src/license/THIRD-PARTY.properties
===================================================================
--- trunk/jaxx-widgets/src/license/THIRD-PARTY.properties 2010-06-29 12:17:03 UTC (rev 2005)
+++ trunk/jaxx-widgets/src/license/THIRD-PARTY.properties 2010-06-29 13:59:44 UTC (rev 2006)
@@ -1,8 +1,7 @@
# Generated by org.nuiton.license.plugin.AddThirdPartyMojo
#-------------------------------------------------------------------------------
# Already used licenses in project :
-# - Apache License, Version 2.0
-# - BSD
+# - BSD License
# - Common Public License Version 1.0
# - Lesser General Public License (LGPL)
# - Lesser General Public License (LGPL) v 3.0
@@ -13,7 +12,7 @@
# Please fill the missing licenses for dependencies :
#
#
-#Sat Jun 26 13:19:17 CEST 2010
+#Tue Jun 29 15:58:49 CEST 2010
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
Modified: trunk/maven-jaxx-plugin/src/license/THIRD-PARTY.properties
===================================================================
--- trunk/maven-jaxx-plugin/src/license/THIRD-PARTY.properties 2010-06-29 12:17:03 UTC (rev 2005)
+++ trunk/maven-jaxx-plugin/src/license/THIRD-PARTY.properties 2010-06-29 13:59:44 UTC (rev 2006)
@@ -1,8 +1,7 @@
# Generated by org.nuiton.license.plugin.AddThirdPartyMojo
#-------------------------------------------------------------------------------
# Already used licenses in project :
-# - Apache License, Version 2.0
-# - BSD
+# - BSD License
# - Common Public License Version 1.0
# - Lesser General Public License (LGPL)
# - Lesser General Public License (LGPL) v 3.0
@@ -15,7 +14,7 @@
# Please fill the missing licenses for dependencies :
#
#
-#Sat Jun 26 13:19:17 CEST 2010
+#Tue Jun 29 15:58:48 CEST 2010
classworlds--classworlds--1.1-alpha-2=http\://classworlds.codehaus.org/lice…
commons-cli--commons-cli--1.0=The Apache Software License, Version 2.0
commons-primitives--commons-primitives--1.0=The Apache Software License, Version 2.0
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2010-06-29 12:17:03 UTC (rev 2005)
+++ trunk/pom.xml 2010-06-29 13:59:44 UTC (rev 2006)
@@ -428,6 +428,7 @@
<configuration>
<licenseMerges>
<licenseMerge>The Apache Software License, Version 2.0|Apache License, Version 2.0</licenseMerge>
+ <licenseMerge>BSD License|BSD</licenseMerge>
</licenseMerges>
</configuration>
</plugin>
1
0