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
- 3898 discussions
r2023 - in trunk: . jaxx-compiler jaxx-demo jaxx-runtime jaxx-tutorial jaxx-tutorial-config jaxx-tutorial-css jaxx-tutorial-databinding jaxx-tutorial-helloworld jaxx-tutorial-helloworld2 jaxx-widgets maven-jaxx-plugin
by tchemit@users.nuiton.org 02 Jul '10
by tchemit@users.nuiton.org 02 Jul '10
02 Jul '10
Author: tchemit
Date: 2010-07-02 12:23:55 +0200 (Fri, 02 Jul 2010)
New Revision: 2023
Url: http://nuiton.org/repositories/revision/jaxx/2023
Log:
[maven-release-plugin] prepare release jaxx-2.1
Modified:
trunk/jaxx-compiler/pom.xml
trunk/jaxx-demo/pom.xml
trunk/jaxx-runtime/pom.xml
trunk/jaxx-tutorial-config/pom.xml
trunk/jaxx-tutorial-css/pom.xml
trunk/jaxx-tutorial-databinding/pom.xml
trunk/jaxx-tutorial-helloworld/pom.xml
trunk/jaxx-tutorial-helloworld2/pom.xml
trunk/jaxx-tutorial/pom.xml
trunk/jaxx-widgets/pom.xml
trunk/maven-jaxx-plugin/pom.xml
trunk/pom.xml
Modified: trunk/jaxx-compiler/pom.xml
===================================================================
--- trunk/jaxx-compiler/pom.xml 2010-07-02 10:21:20 UTC (rev 2022)
+++ trunk/jaxx-compiler/pom.xml 2010-07-02 10:23:55 UTC (rev 2023)
@@ -34,7 +34,7 @@
<parent>
<groupId>org.nuiton</groupId>
<artifactId>jaxx</artifactId>
- <version>2.1-SNAPSHOT</version>
+ <version>2.1</version>
</parent>
<groupId>org.nuiton.jaxx</groupId>
Modified: trunk/jaxx-demo/pom.xml
===================================================================
--- trunk/jaxx-demo/pom.xml 2010-07-02 10:21:20 UTC (rev 2022)
+++ trunk/jaxx-demo/pom.xml 2010-07-02 10:23:55 UTC (rev 2023)
@@ -24,9 +24,7 @@
#L%
-->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
@@ -37,7 +35,7 @@
<parent>
<groupId>org.nuiton</groupId>
<artifactId>jaxx</artifactId>
- <version>2.1-SNAPSHOT</version>
+ <version>2.1</version>
</parent>
<groupId>org.nuiton.jaxx</groupId>
Modified: trunk/jaxx-runtime/pom.xml
===================================================================
--- trunk/jaxx-runtime/pom.xml 2010-07-02 10:21:20 UTC (rev 2022)
+++ trunk/jaxx-runtime/pom.xml 2010-07-02 10:23:55 UTC (rev 2023)
@@ -34,7 +34,7 @@
<parent>
<groupId>org.nuiton</groupId>
<artifactId>jaxx</artifactId>
- <version>2.1-SNAPSHOT</version>
+ <version>2.1</version>
</parent>
<groupId>org.nuiton.jaxx</groupId>
Modified: trunk/jaxx-tutorial/pom.xml
===================================================================
--- trunk/jaxx-tutorial/pom.xml 2010-07-02 10:21:20 UTC (rev 2022)
+++ trunk/jaxx-tutorial/pom.xml 2010-07-02 10:23:55 UTC (rev 2023)
@@ -24,9 +24,7 @@
#L%
-->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
@@ -37,7 +35,7 @@
<parent>
<groupId>org.nuiton</groupId>
<artifactId>jaxx</artifactId>
- <version>2.1-SNAPSHOT</version>
+ <version>2.1</version>
</parent>
<groupId>org.nuiton.jaxx</groupId>
Modified: trunk/jaxx-tutorial-config/pom.xml
===================================================================
--- trunk/jaxx-tutorial-config/pom.xml 2010-07-02 10:21:20 UTC (rev 2022)
+++ trunk/jaxx-tutorial-config/pom.xml 2010-07-02 10:23:55 UTC (rev 2023)
@@ -24,9 +24,7 @@
#L%
-->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
@@ -37,7 +35,7 @@
<parent>
<groupId>org.nuiton.jaxx</groupId>
<artifactId>jaxx-tutorial</artifactId>
- <version>2.1-SNAPSHOT</version>
+ <version>2.1</version>
<relativePath>../jaxx-tutorial</relativePath>
</parent>
Modified: trunk/jaxx-tutorial-css/pom.xml
===================================================================
--- trunk/jaxx-tutorial-css/pom.xml 2010-07-02 10:21:20 UTC (rev 2022)
+++ trunk/jaxx-tutorial-css/pom.xml 2010-07-02 10:23:55 UTC (rev 2023)
@@ -1,7 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
@@ -12,7 +10,7 @@
<parent>
<groupId>org.nuiton.jaxx</groupId>
<artifactId>jaxx-tutorial</artifactId>
- <version>2.1-SNAPSHOT</version>
+ <version>2.1</version>
<relativePath>../jaxx-tutorial</relativePath>
</parent>
Modified: trunk/jaxx-tutorial-databinding/pom.xml
===================================================================
--- trunk/jaxx-tutorial-databinding/pom.xml 2010-07-02 10:21:20 UTC (rev 2022)
+++ trunk/jaxx-tutorial-databinding/pom.xml 2010-07-02 10:23:55 UTC (rev 2023)
@@ -1,7 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
@@ -12,7 +10,7 @@
<parent>
<groupId>org.nuiton.jaxx</groupId>
<artifactId>jaxx-tutorial</artifactId>
- <version>2.1-SNAPSHOT</version>
+ <version>2.1</version>
<relativePath>../jaxx-tutorial</relativePath>
</parent>
Modified: trunk/jaxx-tutorial-helloworld/pom.xml
===================================================================
--- trunk/jaxx-tutorial-helloworld/pom.xml 2010-07-02 10:21:20 UTC (rev 2022)
+++ trunk/jaxx-tutorial-helloworld/pom.xml 2010-07-02 10:23:55 UTC (rev 2023)
@@ -1,7 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
@@ -12,7 +10,7 @@
<parent>
<groupId>org.nuiton.jaxx</groupId>
<artifactId>jaxx-tutorial</artifactId>
- <version>2.1-SNAPSHOT</version>
+ <version>2.1</version>
<relativePath>../jaxx-tutorial</relativePath>
</parent>
Modified: trunk/jaxx-tutorial-helloworld2/pom.xml
===================================================================
--- trunk/jaxx-tutorial-helloworld2/pom.xml 2010-07-02 10:21:20 UTC (rev 2022)
+++ trunk/jaxx-tutorial-helloworld2/pom.xml 2010-07-02 10:23:55 UTC (rev 2023)
@@ -1,7 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
@@ -12,7 +10,7 @@
<parent>
<groupId>org.nuiton.jaxx</groupId>
<artifactId>jaxx-tutorial</artifactId>
- <version>2.1-SNAPSHOT</version>
+ <version>2.1</version>
<relativePath>../jaxx-tutorial</relativePath>
</parent>
Modified: trunk/jaxx-widgets/pom.xml
===================================================================
--- trunk/jaxx-widgets/pom.xml 2010-07-02 10:21:20 UTC (rev 2022)
+++ trunk/jaxx-widgets/pom.xml 2010-07-02 10:23:55 UTC (rev 2023)
@@ -35,7 +35,7 @@
<parent>
<groupId>org.nuiton</groupId>
<artifactId>jaxx</artifactId>
- <version>2.1-SNAPSHOT</version>
+ <version>2.1</version>
</parent>
<groupId>org.nuiton.jaxx</groupId>
Modified: trunk/maven-jaxx-plugin/pom.xml
===================================================================
--- trunk/maven-jaxx-plugin/pom.xml 2010-07-02 10:21:20 UTC (rev 2022)
+++ trunk/maven-jaxx-plugin/pom.xml 2010-07-02 10:23:55 UTC (rev 2023)
@@ -24,9 +24,7 @@
#L%
-->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
@@ -37,7 +35,7 @@
<parent>
<groupId>org.nuiton</groupId>
<artifactId>jaxx</artifactId>
- <version>2.1-SNAPSHOT</version>
+ <version>2.1</version>
</parent>
<groupId>org.nuiton.jaxx</groupId>
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2010-07-02 10:21:20 UTC (rev 2022)
+++ trunk/pom.xml 2010-07-02 10:23:55 UTC (rev 2023)
@@ -38,7 +38,7 @@
</parent>
<artifactId>jaxx</artifactId>
- <version>2.1-SNAPSHOT</version>
+ <version>2.1</version>
<modules>
<module>jaxx-runtime</module>
@@ -505,9 +505,9 @@
<!-- Source control management. -->
<scm>
- <connection>scm:svn:http://svn.nuiton.org/svn/jaxx/trunk</connection>
- <developerConnection>scm:svn:http://svn.nuiton.org/svn/jaxx/trunk</developerConnection>
- <url>http://www.nuiton.org/repositories/browse/jaxx/trunk</url>
+ <connection>scm:svn:http://svn.nuiton.org/svn/jaxx/tags/jaxx-2.1</connection>
+ <developerConnection>scm:svn:http://svn.nuiton.org/svn/jaxx/tags/jaxx-2.1</developerConnection>
+ <url>http://www.nuiton.org/repositories/browse/jaxx/tags/jaxx-2.1</url>
</scm>
<profiles>
1
0
r2022 - in trunk: jaxx-tutorial-css jaxx-tutorial-css/src/main/java/org/nuiton/jaxx/tutorials/css jaxx-tutorial-databinding jaxx-tutorial-helloworld jaxx-tutorial-helloworld2 src/site/rst/tutos
by tchemit@users.nuiton.org 02 Jul '10
by tchemit@users.nuiton.org 02 Jul '10
02 Jul '10
Author: tchemit
Date: 2010-07-02 12:21:20 +0200 (Fri, 02 Jul 2010)
New Revision: 2022
Url: http://nuiton.org/repositories/revision/jaxx/2022
Log:
fix tutorial poms + improve css tutorial
Added:
trunk/jaxx-tutorial-css/src/main/java/org/nuiton/jaxx/tutorials/css/Css.css
trunk/jaxx-tutorial-css/src/main/java/org/nuiton/jaxx/tutorials/css/Css.jaxx
Removed:
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
Modified:
trunk/jaxx-tutorial-css/pom.xml
trunk/jaxx-tutorial-databinding/pom.xml
trunk/jaxx-tutorial-helloworld/pom.xml
trunk/jaxx-tutorial-helloworld2/pom.xml
trunk/src/site/rst/tutos/css.rst
Modified: trunk/jaxx-tutorial-css/pom.xml
===================================================================
--- trunk/jaxx-tutorial-css/pom.xml 2010-07-02 10:12:28 UTC (rev 2021)
+++ trunk/jaxx-tutorial-css/pom.xml 2010-07-02 10:21:20 UTC (rev 2022)
@@ -49,8 +49,7 @@
<!-- main class to run -->
- <maven.jar.main.class>org.nuiton.jaxx.tutorials.css.css
- </maven.jar.main.class>
+ <maven.jar.main.class>org.nuiton.jaxx.tutorials.css.css</maven.jar.main.class>
<!-- compiler configuration -->
Copied: trunk/jaxx-tutorial-css/src/main/java/org/nuiton/jaxx/tutorials/css/Css.css (from rev 2020, trunk/jaxx-tutorial-css/src/main/java/org/nuiton/jaxx/tutorials/css/tuto.css)
===================================================================
--- trunk/jaxx-tutorial-css/src/main/java/org/nuiton/jaxx/tutorials/css/Css.css (rev 0)
+++ trunk/jaxx-tutorial-css/src/main/java/org/nuiton/jaxx/tutorials/css/Css.css 2010-07-02 10:21:20 UTC (rev 2022)
@@ -0,0 +1,17 @@
+JLabel {
+ font-size:20;
+ foreground:red;
+ text:"Hello World";
+}
+
+#hello:mouseover {
+ foreground:green;
+}
+
+#tuto {
+ title:"CSS Tutorial";
+}
+
+#button {
+ text:"Close"
+}
\ No newline at end of file
Property changes on: trunk/jaxx-tutorial-css/src/main/java/org/nuiton/jaxx/tutorials/css/Css.css
___________________________________________________________________
Added: svn:keywords
+ HeadURL Id Date Revision Author
Copied: trunk/jaxx-tutorial-css/src/main/java/org/nuiton/jaxx/tutorials/css/Css.jaxx (from rev 2020, 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/Css.jaxx (rev 0)
+++ trunk/jaxx-tutorial-css/src/main/java/org/nuiton/jaxx/tutorials/css/Css.jaxx 2010-07-02 10:21:20 UTC (rev 2022)
@@ -0,0 +1,12 @@
+ <Application id='tuto'>
+
+ <!--<style source='Css.css'/>-->
+
+ <JLabel id='hello'
+ constraints='BorderLayout.NORTH'/>
+
+ <JButton id='button'
+ constraints='BorderLayout.SOUTH'
+ onActionPerformed='dispose()'/>
+
+ </Application>
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
Deleted: 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/css.jaxx 2010-07-02 10:12:28 UTC (rev 2021)
+++ trunk/jaxx-tutorial-css/src/main/java/org/nuiton/jaxx/tutorials/css/css.jaxx 2010-07-02 10:21:20 UTC (rev 2022)
@@ -1,12 +0,0 @@
- <Application id='tuto'>
-
- <style source='tuto.css'/>
-
- <JLabel id='hello'
- constraints='BorderLayout.NORTH'/>
-
- <JButton id='button'
- constraints='BorderLayout.SOUTH'
- onActionPerformed='dispose()'/>
-
- </Application>
Deleted: trunk/jaxx-tutorial-css/src/main/java/org/nuiton/jaxx/tutorials/css/tuto.css
===================================================================
--- trunk/jaxx-tutorial-css/src/main/java/org/nuiton/jaxx/tutorials/css/tuto.css 2010-07-02 10:12:28 UTC (rev 2021)
+++ trunk/jaxx-tutorial-css/src/main/java/org/nuiton/jaxx/tutorials/css/tuto.css 2010-07-02 10:21:20 UTC (rev 2022)
@@ -1,17 +0,0 @@
-JLabel {
- font-size:20;
- foreground:red;
- text:"Hello World";
-}
-
-#hello:mouseover {
- foreground:green;
-}
-
-#tuto {
- title:"CSS Tutorial";
-}
-
-#button {
- text:"Close"
-}
\ No newline at end of file
Modified: trunk/jaxx-tutorial-databinding/pom.xml
===================================================================
--- trunk/jaxx-tutorial-databinding/pom.xml 2010-07-02 10:12:28 UTC (rev 2021)
+++ trunk/jaxx-tutorial-databinding/pom.xml 2010-07-02 10:21:20 UTC (rev 2022)
@@ -25,7 +25,7 @@
<dependency>
<groupId>org.nuiton.jaxx</groupId>
<artifactId>jaxx-runtime</artifactId>
- <version>${jaxx.version}</version>
+ <version>${project.version}</version>
</dependency>
</dependencies>
@@ -47,10 +47,6 @@
<properties>
- <!-- Jaxx version -->
-
- <jaxx.version>${project.version}</jaxx.version>
-
<!-- main class to run -->
<maven.jar.main.class>org.nuiton.jaxx.tutorials.databinding.databinding</maven.jar.main.class>
Modified: trunk/jaxx-tutorial-helloworld/pom.xml
===================================================================
--- trunk/jaxx-tutorial-helloworld/pom.xml 2010-07-02 10:12:28 UTC (rev 2021)
+++ trunk/jaxx-tutorial-helloworld/pom.xml 2010-07-02 10:21:20 UTC (rev 2022)
@@ -55,10 +55,6 @@
<properties>
- <!-- Jaxx version -->
-
- <jaxx.version>${project.version}</jaxx.version>
-
<!-- main class to run -->
<maven.jar.main.class>org.nuiton.jaxx.tutorials.helloworld.helloworld</maven.jar.main.class>
Modified: trunk/jaxx-tutorial-helloworld2/pom.xml
===================================================================
--- trunk/jaxx-tutorial-helloworld2/pom.xml 2010-07-02 10:12:28 UTC (rev 2021)
+++ trunk/jaxx-tutorial-helloworld2/pom.xml 2010-07-02 10:21:20 UTC (rev 2022)
@@ -54,10 +54,6 @@
<properties>
- <!-- Jaxx version -->
-
- <jaxx.version>${project.version}</jaxx.version>
-
<!-- main class to run -->
<maven.jar.main.class>org.nuiton.jaxx.tutorials.helloworld.helloworld</maven.jar.main.class>
Modified: trunk/src/site/rst/tutos/css.rst
===================================================================
--- trunk/src/site/rst/tutos/css.rst 2010-07-02 10:12:28 UTC (rev 2021)
+++ trunk/src/site/rst/tutos/css.rst 2010-07-02 10:21:20 UTC (rev 2022)
@@ -67,7 +67,7 @@
que notre fichier JAXX. Nous allons référencer la feuille de style dans notre
fichier JAXX en rajoutant le code suivant en fils de notre tag Application::
- <style source='tuto.css'/>
+ <style source='Css.css'/>
Dans la feuille de style, il faut retrouver le même niveau que lors du premier
tutoriel. Nous allons donc commencer par notre Application et lui donner un
1
0
r2021 - in trunk: jaxx-tutorial jaxx-tutorial-config jaxx-tutorial-css jaxx-tutorial-databinding jaxx-tutorial-helloworld jaxx-tutorial-helloworld2
by tchemit@users.nuiton.org 02 Jul '10
by tchemit@users.nuiton.org 02 Jul '10
02 Jul '10
Author: tchemit
Date: 2010-07-02 12:12:28 +0200 (Fri, 02 Jul 2010)
New Revision: 2021
Url: http://nuiton.org/repositories/revision/jaxx/2021
Log:
fix tuotiral poms
Modified:
trunk/jaxx-tutorial-config/pom.xml
trunk/jaxx-tutorial-css/pom.xml
trunk/jaxx-tutorial-databinding/pom.xml
trunk/jaxx-tutorial-helloworld/pom.xml
trunk/jaxx-tutorial-helloworld2/pom.xml
trunk/jaxx-tutorial/pom.xml
Modified: trunk/jaxx-tutorial/pom.xml
===================================================================
--- trunk/jaxx-tutorial/pom.xml 2010-07-01 13:15:46 UTC (rev 2020)
+++ trunk/jaxx-tutorial/pom.xml 2010-07-02 10:12:28 UTC (rev 2021)
@@ -69,6 +69,56 @@
<jnlp.skip>true</jnlp.skip>
</properties>
+
+ <build>
+ <pluginManagement>
+ <plugins>
+
+ <plugin>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>2.3.1</version>
+ <executions>
+ <execution>
+ <id>default-jar</id>
+ <configuration>
+ <archive>
+ <manifest>
+ <useUniqueVersions>false</useUniqueVersions>
+ <addClasspath>true</addClasspath>
+ <classpathPrefix>./lib/</classpathPrefix>
+ <mainClass>${maven.jar.main.class}</mainClass>
+ </manifest>
+ </archive>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+
+ <plugin>
+ <groupId>org.nuiton.jaxx</groupId>
+ <artifactId>maven-jaxx-plugin</artifactId>
+ <version>${project.version}</version>
+ </plugin>
+
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.3.1</version>
+ </plugin>
+
+ <plugin>
+ <artifactId>maven-dependency-plugin</artifactId>
+ <version>2.1</version>
+ </plugin>
+
+ <plugin>
+ <groupId>org.nuiton.i18n</groupId>
+ <artifactId>maven-i18n-plugin</artifactId>
+ <version>1.2.2</version>
+ </plugin>
+
+ </plugins>
+ </pluginManagement>
+ </build>
<!-- ************************************************************* -->
<!-- *** Build Environment ************************************** -->
<!-- ************************************************************* -->
Modified: trunk/jaxx-tutorial-config/pom.xml
===================================================================
--- trunk/jaxx-tutorial-config/pom.xml 2010-07-01 13:15:46 UTC (rev 2020)
+++ trunk/jaxx-tutorial-config/pom.xml 2010-07-02 10:12:28 UTC (rev 2021)
@@ -112,43 +112,6 @@
<build>
- <pluginManagement>
- <plugins>
-
- <plugin>
- <artifactId>maven-jar-plugin</artifactId>
- <configuration>
- <archive>
- <manifest>
- <useUniqueVersions>false</useUniqueVersions>
- <addClasspath>true</addClasspath>
- <classpathPrefix>./lib/</classpathPrefix>
- <mainClass>${maven.jar.main.class}</mainClass>
- </manifest>
- </archive>
- </configuration>
- </plugin>
-
- <plugin>
- <artifactId>maven-compiler-plugin</artifactId>
- <version>2.3.1</version>
- </plugin>
-
- <plugin>
- <artifactId>maven-dependency-plugin</artifactId>
- <version>2.1</version>
- </plugin>
-
- <plugin>
- <groupId>org.nuiton.i18n</groupId>
- <artifactId>maven-i18n-plugin</artifactId>
- <version>1.2.2</version>
- </plugin>
-
- </plugins>
-
- </pluginManagement>
-
<plugins>
<plugin>
Modified: trunk/jaxx-tutorial-css/pom.xml
===================================================================
--- trunk/jaxx-tutorial-css/pom.xml 2010-07-01 13:15:46 UTC (rev 2020)
+++ trunk/jaxx-tutorial-css/pom.xml 2010-07-02 10:12:28 UTC (rev 2021)
@@ -25,7 +25,7 @@
<dependency>
<groupId>org.nuiton.jaxx</groupId>
<artifactId>jaxx-runtime</artifactId>
- <version>${jaxx.version}</version>
+ <version>${project.version}</version>
</dependency>
</dependencies>
@@ -47,71 +47,30 @@
<properties>
- <!-- Jaxx version -->
-
- <jaxx.version>${project.version}</jaxx.version>
-
<!-- main class to run -->
- <maven.jar.main.class>org.nuiton.jaxx.tutorials.css.css</maven.jar.main.class>
+ <maven.jar.main.class>org.nuiton.jaxx.tutorials.css.css
+ </maven.jar.main.class>
<!-- compiler configuration -->
<maven.compiler.source>1.5</maven.compiler.source>
- <maven.compiler.source>1.5</maven.compiler.source>
+ <maven.compiler.source>1.5</maven.compiler.source>
<!-- default encoding -->
-
+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
-
+
<!-- to generate jnlp launcher while releasing jaxx -->
<jnlp.skip>false</jnlp.skip>
<!-- extra files to include in release -->
<redmine.releaseFiles>${redmine.libReleaseFiles}</redmine.releaseFiles>
-
+
</properties>
<build>
- <pluginManagement>
- <plugins>
-
- <plugin>
- <artifactId>maven-jar-plugin</artifactId>
- <version>2.3.1</version>
- <configuration>
- <archive>
- <manifest>
- <useUniqueVersions>false</useUniqueVersions>
- <addClasspath>true</addClasspath>
- <classpathPrefix>./lib/</classpathPrefix>
- <mainClass>${maven.jar.main.class}</mainClass>
- </manifest>
- </archive>
- </configuration>
- </plugin>
-
- <plugin>
- <artifactId>maven-compiler-plugin</artifactId>
- <version>2.3.1</version>
- </plugin>
-
- <plugin>
- <artifactId>maven-dependency-plugin</artifactId>
- <version>2.1</version>
- </plugin>
-
- <plugin>
- <groupId>org.nuiton.jaxx</groupId>
- <artifactId>maven-jaxx-plugin</artifactId>
- <version>${jaxx.version}</version>
- </plugin>
-
- </plugins>
-
- </pluginManagement>
-
<plugins>
<plugin>
Modified: trunk/jaxx-tutorial-databinding/pom.xml
===================================================================
--- trunk/jaxx-tutorial-databinding/pom.xml 2010-07-01 13:15:46 UTC (rev 2020)
+++ trunk/jaxx-tutorial-databinding/pom.xml 2010-07-02 10:12:28 UTC (rev 2021)
@@ -74,44 +74,6 @@
</properties>
<build>
- <pluginManagement>
- <plugins>
-
- <plugin>
- <artifactId>maven-jar-plugin</artifactId>
- <version>2.3</version>
- <configuration>
- <archive>
- <manifest>
- <useUniqueVersions>false</useUniqueVersions>
- <addClasspath>true</addClasspath>
- <classpathPrefix>./lib/</classpathPrefix>
- <mainClass>${maven.jar.main.class}</mainClass>
- </manifest>
- </archive>
- </configuration>
- </plugin>
-
- <plugin>
- <artifactId>maven-compiler-plugin</artifactId>
- <version>2.3</version>
- </plugin>
-
- <plugin>
- <artifactId>maven-dependency-plugin</artifactId>
- <version>2.1</version>
- </plugin>
-
- <plugin>
- <groupId>org.nuiton.jaxx</groupId>
- <artifactId>maven-jaxx-plugin</artifactId>
- <version>${jaxx.version}</version>
- </plugin>
-
- </plugins>
-
- </pluginManagement>
-
<plugins>
<plugin>
Modified: trunk/jaxx-tutorial-helloworld/pom.xml
===================================================================
--- trunk/jaxx-tutorial-helloworld/pom.xml 2010-07-01 13:15:46 UTC (rev 2020)
+++ trunk/jaxx-tutorial-helloworld/pom.xml 2010-07-02 10:12:28 UTC (rev 2021)
@@ -82,44 +82,6 @@
</properties>
<build>
- <pluginManagement>
- <plugins>
-
- <plugin>
- <artifactId>maven-jar-plugin</artifactId>
- <version>2.3.1</version>
- <configuration>
- <archive>
- <manifest>
- <useUniqueVersions>false</useUniqueVersions>
- <addClasspath>true</addClasspath>
- <classpathPrefix>./lib/</classpathPrefix>
- <mainClass>${maven.jar.main.class}</mainClass>
- </manifest>
- </archive>
- </configuration>
- </plugin>
-
- <plugin>
- <artifactId>maven-compiler-plugin</artifactId>
- <version>2.3.1</version>
- </plugin>
-
- <plugin>
- <artifactId>maven-dependency-plugin</artifactId>
- <version>2.1</version>
- </plugin>
-
- <plugin>
- <groupId>org.nuiton.jaxx</groupId>
- <artifactId>maven-jaxx-plugin</artifactId>
- <version>${project.version}</version>
- </plugin>
-
- </plugins>
-
- </pluginManagement>
-
<plugins>
<plugin>
Modified: trunk/jaxx-tutorial-helloworld2/pom.xml
===================================================================
--- trunk/jaxx-tutorial-helloworld2/pom.xml 2010-07-01 13:15:46 UTC (rev 2020)
+++ trunk/jaxx-tutorial-helloworld2/pom.xml 2010-07-02 10:12:28 UTC (rev 2021)
@@ -81,44 +81,6 @@
</properties>
<build>
- <pluginManagement>
- <plugins>
-
- <plugin>
- <artifactId>maven-jar-plugin</artifactId>
- <version>2.3.1</version>
- <configuration>
- <archive>
- <manifest>
- <useUniqueVersions>false</useUniqueVersions>
- <addClasspath>true</addClasspath>
- <classpathPrefix>./lib/</classpathPrefix>
- <mainClass>${maven.jar.main.class}</mainClass>
- </manifest>
- </archive>
- </configuration>
- </plugin>
-
- <plugin>
- <artifactId>maven-compiler-plugin</artifactId>
- <version>2.3.1</version>
- </plugin>
-
- <plugin>
- <artifactId>maven-dependency-plugin</artifactId>
- <version>2.1</version>
- </plugin>
-
- <plugin>
- <groupId>org.nuiton.jaxx</groupId>
- <artifactId>maven-jaxx-plugin</artifactId>
- <version>${project.version}</version>
- </plugin>
-
- </plugins>
-
- </pluginManagement>
-
<plugins>
<plugin>
1
0
Author: tchemit
Date: 2010-07-01 15:15:46 +0200 (Thu, 01 Jul 2010)
New Revision: 2020
Url: http://nuiton.org/repositories/revision/jaxx/2020
Log:
Utilisation de mavenpom4labs 2.2.2.1
Modified:
trunk/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2010-07-01 13:07:13 UTC (rev 2019)
+++ trunk/pom.xml 2010-07-01 13:15:46 UTC (rev 2020)
@@ -34,7 +34,7 @@
<parent>
<groupId>org.nuiton</groupId>
<artifactId>mavenpom4redmine</artifactId>
- <version>2.2.2</version>
+ <version>2.2.2.1</version>
</parent>
<artifactId>jaxx</artifactId>
1
0
Author: tchemit
Date: 2010-07-01 15:07:13 +0200 (Thu, 01 Jul 2010)
New Revision: 2019
Url: http://nuiton.org/repositories/revision/jaxx/2019
Log:
Anomalie #752: By default projects are not central-safe
Modified:
trunk/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2010-07-01 12:42:31 UTC (rev 2018)
+++ trunk/pom.xml 2010-07-01 13:07:13 UTC (rev 2019)
@@ -398,9 +398,9 @@
<!-- pour un muli module on doit fixer le projectId -->
<projectId>jaxx</projectId>
- <lutinutil.version>1.3.2-SNAPSHOT</lutinutil.version>
+ <lutinutil.version>1.3.1</lutinutil.version>
- <i18n.version>1.2.3-SNAPSHOT</i18n.version>
+ <i18n.version>1.2.2</i18n.version>
<jxlayer.version>3.0.3</jxlayer.version>
1
0
Author: tchemit
Date: 2010-07-01 14:42:31 +0200 (Thu, 01 Jul 2010)
New Revision: 2018
Url: http://nuiton.org/repositories/revision/jaxx/2018
Log:
buggy i18n
Modified:
trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo-en_GB.properties
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-07-01 12:30:40 UTC (rev 2017)
+++ trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo-en_GB.properties 2010-07-01 12:42:31 UTC (rev 2018)
@@ -193,7 +193,7 @@
jaxxdemo.init.ui.done=UI initialized.
jaxxdemo.menu.file=File
jaxxdemo.menu.file.locale=Languages
-jaxxdemo.menu.help=Help
+jaxxdemo.menu.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=Actor
1
0
Author: tchemit
Date: 2010-07-01 14:30:40 +0200 (Thu, 01 Jul 2010)
New Revision: 2017
Url: http://nuiton.org/repositories/revision/jaxx/2017
Log:
Utilisation de mavenpom4redmine 2.2.2
Modified:
trunk/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2010-07-01 12:07:02 UTC (rev 2016)
+++ trunk/pom.xml 2010-07-01 12:30:40 UTC (rev 2017)
@@ -34,7 +34,7 @@
<parent>
<groupId>org.nuiton</groupId>
<artifactId>mavenpom4redmine</artifactId>
- <version>2.2.2-SNAPSHOT</version>
+ <version>2.2.2</version>
</parent>
<artifactId>jaxx</artifactId>
1
0
Author: tchemit
Date: 2010-07-01 14:07:02 +0200 (Thu, 01 Jul 2010)
New Revision: 2016
Url: http://nuiton.org/repositories/revision/jaxx/2016
Log:
use new central-safe configuration
Modified:
trunk/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2010-06-30 17:49:34 UTC (rev 2015)
+++ trunk/pom.xml 2010-07-01 12:07:02 UTC (rev 2016)
@@ -406,6 +406,14 @@
<javahelp.version>2.0.02</javahelp.version>
<jnlp.version>1.0-alpha-2-cl_20100511</jnlp.version>
+
+ <!-- release config -->
+
+ <!-- activate this profile while doing release:prepare -->
+ <arguments>-DperformRelease -Pcentral-safe</arguments>
+
+ <!-- activate this profile while doing release:perform -->
+ <releaseProfiles>central-safe</releaseProfiles>
</properties>
@@ -536,52 +544,6 @@
</profile>
- <profile>
- <id>central-safe</id>
- <activation>
- <property>
- <name>performRelease</name>
- <value>true</value>
- </property>
- </activation>
-
- <properties>
-
- <!-- deploy releases on nuiton-central-releases repository -->
- <release.repository>${nuiton.central.release.repository}</release.repository>
-
- </properties>
-
- <build>
- <defaultGoal>validate</defaultGoal>
- <plugins>
- <plugin>
- <groupId>org.nuiton</groupId>
- <artifactId>maven-helper-plugin</artifactId>
- <executions>
- <execution>
- <id>check-central-safe</id>
- <inherited>true</inherited>
- <goals>
- <goal>check-auto-container</goal>
- </goals>
- <configuration>
- ${nuiton.central.release.repository}
- <addMavenCentral>true</addMavenCentral>
- <failIfNotSafe>true</failIfNotSafe>
- <repositories>
- <nuiton-central-releases>
- http://nexus.nuiton.org/nexus/content/repositories/nuiton-central-releases
- </nuiton-central-releases>
- </repositories>
- </configuration>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
- </profile>
-
</profiles>
</project>
1
0
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