Sammoa-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
August 2012
- 4 participants
- 171 discussions
Author: tchemit
Date: 2012-08-28 22:43:32 +0200 (Tue, 28 Aug 2012)
New Revision: 480
Url: http://forge.codelutin.com/repositories/revision/sammoa/480
Log:
updates to mavenpom 3.3.7-SNAPSHOT
Modified:
trunk/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2012-08-25 08:22:27 UTC (rev 479)
+++ trunk/pom.xml 2012-08-28 20:43:32 UTC (rev 480)
@@ -10,7 +10,7 @@
<parent>
<groupId>org.nuiton</groupId>
<artifactId>mavenpom4redmine</artifactId>
- <version>3.3.6</version>
+ <version>3.3.7-SNAPSHOT</version>
</parent>
<groupId>fr.ulr</groupId>
1
0
r479 - in trunk: . sammoa-application sammoa-persistence sammoa-ui-swing
by maven-release@users.forge.codelutin.com 25 Aug '12
by maven-release@users.forge.codelutin.com 25 Aug '12
25 Aug '12
Author: maven-release
Date: 2012-08-25 10:22:27 +0200 (Sat, 25 Aug 2012)
New Revision: 479
Url: http://forge.codelutin.com/repositories/revision/sammoa/479
Log:
[maven-release-plugin] prepare for next development iteration
Modified:
trunk/pom.xml
trunk/sammoa-application/pom.xml
trunk/sammoa-persistence/pom.xml
trunk/sammoa-ui-swing/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2012-08-25 08:22:20 UTC (rev 478)
+++ trunk/pom.xml 2012-08-25 08:22:27 UTC (rev 479)
@@ -15,7 +15,7 @@
<groupId>fr.ulr</groupId>
<artifactId>sammoa</artifactId>
- <version>0.6</version>
+ <version>0.7-SNAPSHOT</version>
<modules>
<module>sammoa-persistence</module>
@@ -81,12 +81,12 @@
<!-- ************************************************************* -->
<scm>
- <url>http://svn.forge.codelutin.com/svn/sammoa/tags/sammoa-0.6</url>
+ <url>http://svn.forge.codelutin.com/svn/sammoa/trunk</url>
<connection>
- scm:svn:http://svn.forge.codelutin.com/svn/sammoa/tags/sammoa-0.6
+ scm:svn:http://svn.forge.codelutin.com/svn/sammoa/trunk
</connection>
<developerConnection>
- scm:svn:http://svn.forge.codelutin.com/svn/sammoa/tags/sammoa-0.6
+ scm:svn:http://svn.forge.codelutin.com/svn/sammoa/trunk
</developerConnection>
</scm>
Modified: trunk/sammoa-application/pom.xml
===================================================================
--- trunk/sammoa-application/pom.xml 2012-08-25 08:22:20 UTC (rev 478)
+++ trunk/sammoa-application/pom.xml 2012-08-25 08:22:27 UTC (rev 479)
@@ -9,7 +9,7 @@
<parent>
<groupId>fr.ulr</groupId>
<artifactId>sammoa</artifactId>
- <version>0.6</version>
+ <version>0.7-SNAPSHOT</version>
</parent>
<artifactId>sammoa-application</artifactId>
Modified: trunk/sammoa-persistence/pom.xml
===================================================================
--- trunk/sammoa-persistence/pom.xml 2012-08-25 08:22:20 UTC (rev 478)
+++ trunk/sammoa-persistence/pom.xml 2012-08-25 08:22:27 UTC (rev 479)
@@ -9,7 +9,7 @@
<parent>
<groupId>fr.ulr</groupId>
<artifactId>sammoa</artifactId>
- <version>0.6</version>
+ <version>0.7-SNAPSHOT</version>
</parent>
<artifactId>sammoa-persistence</artifactId>
Modified: trunk/sammoa-ui-swing/pom.xml
===================================================================
--- trunk/sammoa-ui-swing/pom.xml 2012-08-25 08:22:20 UTC (rev 478)
+++ trunk/sammoa-ui-swing/pom.xml 2012-08-25 08:22:27 UTC (rev 479)
@@ -9,7 +9,7 @@
<parent>
<groupId>fr.ulr</groupId>
<artifactId>sammoa</artifactId>
- <version>0.6</version>
+ <version>0.7-SNAPSHOT</version>
</parent>
<artifactId>sammoa-ui-swing</artifactId>
1
0
Author: maven-release
Date: 2012-08-25 10:22:20 +0200 (Sat, 25 Aug 2012)
New Revision: 478
Url: http://forge.codelutin.com/repositories/revision/sammoa/478
Log:
[maven-release-plugin] copy for tag sammoa-0.6
Added:
tags/sammoa-0.6/
1
0
r477 - in trunk: . sammoa-application sammoa-persistence sammoa-ui-swing
by maven-release@users.forge.codelutin.com 25 Aug '12
by maven-release@users.forge.codelutin.com 25 Aug '12
25 Aug '12
Author: maven-release
Date: 2012-08-25 10:22:13 +0200 (Sat, 25 Aug 2012)
New Revision: 477
Url: http://forge.codelutin.com/repositories/revision/sammoa/477
Log:
[maven-release-plugin] prepare release sammoa-0.6
Modified:
trunk/pom.xml
trunk/sammoa-application/pom.xml
trunk/sammoa-persistence/pom.xml
trunk/sammoa-ui-swing/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2012-08-24 17:47:46 UTC (rev 476)
+++ trunk/pom.xml 2012-08-25 08:22:13 UTC (rev 477)
@@ -15,7 +15,7 @@
<groupId>fr.ulr</groupId>
<artifactId>sammoa</artifactId>
- <version>0.6-SNAPSHOT</version>
+ <version>0.6</version>
<modules>
<module>sammoa-persistence</module>
@@ -81,12 +81,12 @@
<!-- ************************************************************* -->
<scm>
- <url>http://svn.forge.codelutin.com/svn/sammoa/trunk</url>
+ <url>http://svn.forge.codelutin.com/svn/sammoa/tags/sammoa-0.6</url>
<connection>
- scm:svn:http://svn.forge.codelutin.com/svn/sammoa/trunk
+ scm:svn:http://svn.forge.codelutin.com/svn/sammoa/tags/sammoa-0.6
</connection>
<developerConnection>
- scm:svn:http://svn.forge.codelutin.com/svn/sammoa/trunk
+ scm:svn:http://svn.forge.codelutin.com/svn/sammoa/tags/sammoa-0.6
</developerConnection>
</scm>
Modified: trunk/sammoa-application/pom.xml
===================================================================
--- trunk/sammoa-application/pom.xml 2012-08-24 17:47:46 UTC (rev 476)
+++ trunk/sammoa-application/pom.xml 2012-08-25 08:22:13 UTC (rev 477)
@@ -9,7 +9,7 @@
<parent>
<groupId>fr.ulr</groupId>
<artifactId>sammoa</artifactId>
- <version>0.6-SNAPSHOT</version>
+ <version>0.6</version>
</parent>
<artifactId>sammoa-application</artifactId>
Modified: trunk/sammoa-persistence/pom.xml
===================================================================
--- trunk/sammoa-persistence/pom.xml 2012-08-24 17:47:46 UTC (rev 476)
+++ trunk/sammoa-persistence/pom.xml 2012-08-25 08:22:13 UTC (rev 477)
@@ -9,7 +9,7 @@
<parent>
<groupId>fr.ulr</groupId>
<artifactId>sammoa</artifactId>
- <version>0.6-SNAPSHOT</version>
+ <version>0.6</version>
</parent>
<artifactId>sammoa-persistence</artifactId>
Modified: trunk/sammoa-ui-swing/pom.xml
===================================================================
--- trunk/sammoa-ui-swing/pom.xml 2012-08-24 17:47:46 UTC (rev 476)
+++ trunk/sammoa-ui-swing/pom.xml 2012-08-25 08:22:13 UTC (rev 477)
@@ -9,7 +9,7 @@
<parent>
<groupId>fr.ulr</groupId>
<artifactId>sammoa</artifactId>
- <version>0.6-SNAPSHOT</version>
+ <version>0.6</version>
</parent>
<artifactId>sammoa-ui-swing</artifactId>
1
0
r476 - in trunk: . sammoa-application sammoa-persistence sammoa-ui-swing
by maven-release@users.forge.codelutin.com 24 Aug '12
by maven-release@users.forge.codelutin.com 24 Aug '12
24 Aug '12
Author: maven-release
Date: 2012-08-24 19:47:46 +0200 (Fri, 24 Aug 2012)
New Revision: 476
Url: http://forge.codelutin.com/repositories/revision/sammoa/476
Log:
[maven-release-plugin] rollback the release of sammoa-0.6
Modified:
trunk/pom.xml
trunk/sammoa-application/pom.xml
trunk/sammoa-persistence/pom.xml
trunk/sammoa-ui-swing/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2012-08-24 17:39:19 UTC (rev 475)
+++ trunk/pom.xml 2012-08-24 17:47:46 UTC (rev 476)
@@ -15,7 +15,7 @@
<groupId>fr.ulr</groupId>
<artifactId>sammoa</artifactId>
- <version>0.6</version>
+ <version>0.6-SNAPSHOT</version>
<modules>
<module>sammoa-persistence</module>
@@ -81,12 +81,12 @@
<!-- ************************************************************* -->
<scm>
- <url>http://svn.forge.codelutin.com/svn/sammoa/tags/sammoa-0.6</url>
+ <url>http://svn.forge.codelutin.com/svn/sammoa/trunk</url>
<connection>
- scm:svn:http://svn.forge.codelutin.com/svn/sammoa/tags/sammoa-0.6
+ scm:svn:http://svn.forge.codelutin.com/svn/sammoa/trunk
</connection>
<developerConnection>
- scm:svn:http://svn.forge.codelutin.com/svn/sammoa/tags/sammoa-0.6
+ scm:svn:http://svn.forge.codelutin.com/svn/sammoa/trunk
</developerConnection>
</scm>
Modified: trunk/sammoa-application/pom.xml
===================================================================
--- trunk/sammoa-application/pom.xml 2012-08-24 17:39:19 UTC (rev 475)
+++ trunk/sammoa-application/pom.xml 2012-08-24 17:47:46 UTC (rev 476)
@@ -9,7 +9,7 @@
<parent>
<groupId>fr.ulr</groupId>
<artifactId>sammoa</artifactId>
- <version>0.6</version>
+ <version>0.6-SNAPSHOT</version>
</parent>
<artifactId>sammoa-application</artifactId>
Modified: trunk/sammoa-persistence/pom.xml
===================================================================
--- trunk/sammoa-persistence/pom.xml 2012-08-24 17:39:19 UTC (rev 475)
+++ trunk/sammoa-persistence/pom.xml 2012-08-24 17:47:46 UTC (rev 476)
@@ -9,7 +9,7 @@
<parent>
<groupId>fr.ulr</groupId>
<artifactId>sammoa</artifactId>
- <version>0.6</version>
+ <version>0.6-SNAPSHOT</version>
</parent>
<artifactId>sammoa-persistence</artifactId>
Modified: trunk/sammoa-ui-swing/pom.xml
===================================================================
--- trunk/sammoa-ui-swing/pom.xml 2012-08-24 17:39:19 UTC (rev 475)
+++ trunk/sammoa-ui-swing/pom.xml 2012-08-24 17:47:46 UTC (rev 476)
@@ -9,7 +9,7 @@
<parent>
<groupId>fr.ulr</groupId>
<artifactId>sammoa</artifactId>
- <version>0.6</version>
+ <version>0.6-SNAPSHOT</version>
</parent>
<artifactId>sammoa-ui-swing</artifactId>
1
0
r475 - in trunk: . sammoa-application sammoa-persistence sammoa-ui-swing
by maven-release@users.forge.codelutin.com 24 Aug '12
by maven-release@users.forge.codelutin.com 24 Aug '12
24 Aug '12
Author: maven-release
Date: 2012-08-24 19:39:19 +0200 (Fri, 24 Aug 2012)
New Revision: 475
Url: http://forge.codelutin.com/repositories/revision/sammoa/475
Log:
[maven-release-plugin] prepare release sammoa-0.6
Modified:
trunk/pom.xml
trunk/sammoa-application/pom.xml
trunk/sammoa-persistence/pom.xml
trunk/sammoa-ui-swing/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2012-08-24 17:31:17 UTC (rev 474)
+++ trunk/pom.xml 2012-08-24 17:39:19 UTC (rev 475)
@@ -15,7 +15,7 @@
<groupId>fr.ulr</groupId>
<artifactId>sammoa</artifactId>
- <version>0.6-SNAPSHOT</version>
+ <version>0.6</version>
<modules>
<module>sammoa-persistence</module>
@@ -81,12 +81,12 @@
<!-- ************************************************************* -->
<scm>
- <url>http://svn.forge.codelutin.com/svn/sammoa/trunk</url>
+ <url>http://svn.forge.codelutin.com/svn/sammoa/tags/sammoa-0.6</url>
<connection>
- scm:svn:http://svn.forge.codelutin.com/svn/sammoa/trunk
+ scm:svn:http://svn.forge.codelutin.com/svn/sammoa/tags/sammoa-0.6
</connection>
<developerConnection>
- scm:svn:http://svn.forge.codelutin.com/svn/sammoa/trunk
+ scm:svn:http://svn.forge.codelutin.com/svn/sammoa/tags/sammoa-0.6
</developerConnection>
</scm>
Modified: trunk/sammoa-application/pom.xml
===================================================================
--- trunk/sammoa-application/pom.xml 2012-08-24 17:31:17 UTC (rev 474)
+++ trunk/sammoa-application/pom.xml 2012-08-24 17:39:19 UTC (rev 475)
@@ -9,7 +9,7 @@
<parent>
<groupId>fr.ulr</groupId>
<artifactId>sammoa</artifactId>
- <version>0.6-SNAPSHOT</version>
+ <version>0.6</version>
</parent>
<artifactId>sammoa-application</artifactId>
Modified: trunk/sammoa-persistence/pom.xml
===================================================================
--- trunk/sammoa-persistence/pom.xml 2012-08-24 17:31:17 UTC (rev 474)
+++ trunk/sammoa-persistence/pom.xml 2012-08-24 17:39:19 UTC (rev 475)
@@ -9,7 +9,7 @@
<parent>
<groupId>fr.ulr</groupId>
<artifactId>sammoa</artifactId>
- <version>0.6-SNAPSHOT</version>
+ <version>0.6</version>
</parent>
<artifactId>sammoa-persistence</artifactId>
Modified: trunk/sammoa-ui-swing/pom.xml
===================================================================
--- trunk/sammoa-ui-swing/pom.xml 2012-08-24 17:31:17 UTC (rev 474)
+++ trunk/sammoa-ui-swing/pom.xml 2012-08-24 17:39:19 UTC (rev 475)
@@ -9,7 +9,7 @@
<parent>
<groupId>fr.ulr</groupId>
<artifactId>sammoa</artifactId>
- <version>0.6-SNAPSHOT</version>
+ <version>0.6</version>
</parent>
<artifactId>sammoa-ui-swing</artifactId>
1
0
r474 - in trunk: . sammoa-application sammoa-persistence sammoa-ui-swing
by maven-release@users.forge.codelutin.com 24 Aug '12
by maven-release@users.forge.codelutin.com 24 Aug '12
24 Aug '12
Author: maven-release
Date: 2012-08-24 19:31:17 +0200 (Fri, 24 Aug 2012)
New Revision: 474
Url: http://forge.codelutin.com/repositories/revision/sammoa/474
Log:
[maven-release-plugin] rollback the release of sammoa-0.6
Modified:
trunk/pom.xml
trunk/sammoa-application/pom.xml
trunk/sammoa-persistence/pom.xml
trunk/sammoa-ui-swing/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2012-08-24 17:28:45 UTC (rev 473)
+++ trunk/pom.xml 2012-08-24 17:31:17 UTC (rev 474)
@@ -15,7 +15,7 @@
<groupId>fr.ulr</groupId>
<artifactId>sammoa</artifactId>
- <version>0.6</version>
+ <version>0.6-SNAPSHOT</version>
<modules>
<module>sammoa-persistence</module>
@@ -81,12 +81,12 @@
<!-- ************************************************************* -->
<scm>
- <url>http://svn.forge.codelutin.com/svn/sammoa/tags/sammoa-0.6</url>
+ <url>http://svn.forge.codelutin.com/svn/sammoa/trunk</url>
<connection>
- scm:svn:http://svn.forge.codelutin.com/svn/sammoa/tags/sammoa-0.6
+ scm:svn:http://svn.forge.codelutin.com/svn/sammoa/trunk
</connection>
<developerConnection>
- scm:svn:http://svn.forge.codelutin.com/svn/sammoa/tags/sammoa-0.6
+ scm:svn:http://svn.forge.codelutin.com/svn/sammoa/trunk
</developerConnection>
</scm>
Modified: trunk/sammoa-application/pom.xml
===================================================================
--- trunk/sammoa-application/pom.xml 2012-08-24 17:28:45 UTC (rev 473)
+++ trunk/sammoa-application/pom.xml 2012-08-24 17:31:17 UTC (rev 474)
@@ -9,7 +9,7 @@
<parent>
<groupId>fr.ulr</groupId>
<artifactId>sammoa</artifactId>
- <version>0.6</version>
+ <version>0.6-SNAPSHOT</version>
</parent>
<artifactId>sammoa-application</artifactId>
Modified: trunk/sammoa-persistence/pom.xml
===================================================================
--- trunk/sammoa-persistence/pom.xml 2012-08-24 17:28:45 UTC (rev 473)
+++ trunk/sammoa-persistence/pom.xml 2012-08-24 17:31:17 UTC (rev 474)
@@ -9,7 +9,7 @@
<parent>
<groupId>fr.ulr</groupId>
<artifactId>sammoa</artifactId>
- <version>0.6</version>
+ <version>0.6-SNAPSHOT</version>
</parent>
<artifactId>sammoa-persistence</artifactId>
Modified: trunk/sammoa-ui-swing/pom.xml
===================================================================
--- trunk/sammoa-ui-swing/pom.xml 2012-08-24 17:28:45 UTC (rev 473)
+++ trunk/sammoa-ui-swing/pom.xml 2012-08-24 17:31:17 UTC (rev 474)
@@ -9,7 +9,7 @@
<parent>
<groupId>fr.ulr</groupId>
<artifactId>sammoa</artifactId>
- <version>0.6</version>
+ <version>0.6-SNAPSHOT</version>
</parent>
<artifactId>sammoa-ui-swing</artifactId>
1
0
r473 - in trunk: . sammoa-application sammoa-persistence sammoa-ui-swing
by maven-release@users.forge.codelutin.com 24 Aug '12
by maven-release@users.forge.codelutin.com 24 Aug '12
24 Aug '12
Author: maven-release
Date: 2012-08-24 19:28:45 +0200 (Fri, 24 Aug 2012)
New Revision: 473
Url: http://forge.codelutin.com/repositories/revision/sammoa/473
Log:
[maven-release-plugin] prepare release sammoa-0.6
Modified:
trunk/pom.xml
trunk/sammoa-application/pom.xml
trunk/sammoa-persistence/pom.xml
trunk/sammoa-ui-swing/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2012-08-24 17:13:35 UTC (rev 472)
+++ trunk/pom.xml 2012-08-24 17:28:45 UTC (rev 473)
@@ -15,7 +15,7 @@
<groupId>fr.ulr</groupId>
<artifactId>sammoa</artifactId>
- <version>0.6-SNAPSHOT</version>
+ <version>0.6</version>
<modules>
<module>sammoa-persistence</module>
@@ -81,12 +81,12 @@
<!-- ************************************************************* -->
<scm>
- <url>http://svn.forge.codelutin.com/svn/sammoa/trunk</url>
+ <url>http://svn.forge.codelutin.com/svn/sammoa/tags/sammoa-0.6</url>
<connection>
- scm:svn:http://svn.forge.codelutin.com/svn/sammoa/trunk
+ scm:svn:http://svn.forge.codelutin.com/svn/sammoa/tags/sammoa-0.6
</connection>
<developerConnection>
- scm:svn:http://svn.forge.codelutin.com/svn/sammoa/trunk
+ scm:svn:http://svn.forge.codelutin.com/svn/sammoa/tags/sammoa-0.6
</developerConnection>
</scm>
Modified: trunk/sammoa-application/pom.xml
===================================================================
--- trunk/sammoa-application/pom.xml 2012-08-24 17:13:35 UTC (rev 472)
+++ trunk/sammoa-application/pom.xml 2012-08-24 17:28:45 UTC (rev 473)
@@ -9,7 +9,7 @@
<parent>
<groupId>fr.ulr</groupId>
<artifactId>sammoa</artifactId>
- <version>0.6-SNAPSHOT</version>
+ <version>0.6</version>
</parent>
<artifactId>sammoa-application</artifactId>
Modified: trunk/sammoa-persistence/pom.xml
===================================================================
--- trunk/sammoa-persistence/pom.xml 2012-08-24 17:13:35 UTC (rev 472)
+++ trunk/sammoa-persistence/pom.xml 2012-08-24 17:28:45 UTC (rev 473)
@@ -9,7 +9,7 @@
<parent>
<groupId>fr.ulr</groupId>
<artifactId>sammoa</artifactId>
- <version>0.6-SNAPSHOT</version>
+ <version>0.6</version>
</parent>
<artifactId>sammoa-persistence</artifactId>
Modified: trunk/sammoa-ui-swing/pom.xml
===================================================================
--- trunk/sammoa-ui-swing/pom.xml 2012-08-24 17:13:35 UTC (rev 472)
+++ trunk/sammoa-ui-swing/pom.xml 2012-08-24 17:28:45 UTC (rev 473)
@@ -9,7 +9,7 @@
<parent>
<groupId>fr.ulr</groupId>
<artifactId>sammoa</artifactId>
- <version>0.6-SNAPSHOT</version>
+ <version>0.6</version>
</parent>
<artifactId>sammoa-ui-swing</artifactId>
1
0
24 Aug '12
Author: fdesbois
Date: 2012-08-24 19:13:35 +0200 (Fri, 24 Aug 2012)
New Revision: 472
Url: http://forge.codelutin.com/repositories/revision/sammoa/472
Log:
refs #1204 :
- add validation bar
- add valid actions
- improve audioReaderMock
- improve all actions
Added:
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/ValidationService.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/DeviceAction.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/FlightAction.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/StartAudioAction.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/StopAudioAction.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/ValidAction.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/ValidObservationAction.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/ValidRouteAction.java
Modified:
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaConfig.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/DeviceManagerProvider.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/DeviceState.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/AudioReader.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/AudioReaderMock.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/AudioRecorderDefault.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/AudioRecorderMock.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/BaseGpsHandler.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/FakeGpsHandler.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/GpsConfig.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/GpsHandlerGpsylon.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/FlightControllerOnBoard.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/FlightControllerValidation.java
trunk/sammoa-application/src/main/resources/i18n/sammoa-application_en_GB.properties
trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Observations.java
trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/TransectFlightImpl.java
trunk/sammoa-persistence/src/test/java/fr/ulr/sammoa/persistence/ObservationsTest.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/MainUIHandler.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/SammoaColors.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/AddAction.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/BeginAction.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/CircleBackAction.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/EndAction.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/NextAction.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/NextTransectAction.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/ObservationAction.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/SammoaAction.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/StartAction.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/StopAction.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/DeviceStateLED.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightBar.css
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightBar.jaxx
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightBarHandler.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUIHandler.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUIModel.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/observations/EffortPanelHandler.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/observations/ObservationTableModel.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/observations/RouteTableModel.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/DeletedRowHighlightPredicate.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/TableDataChangeListener.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/ValidRowHighlightPredicate.java
trunk/sammoa-ui-swing/src/main/resources/i18n/sammoa-ui-swing_en_GB.properties
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaConfig.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaConfig.java 2012-08-24 17:12:53 UTC (rev 471)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaConfig.java 2012-08-24 17:13:35 UTC (rev 472)
@@ -77,6 +77,10 @@
public static final String PROPERTY_CIRCLE_BACK = "circleBack";
+ public static final String PROPERTY_VALID_ROUTE = "validRoute";
+
+ public static final String PROPERTY_VALID_OBSERVATION = "validObservation";
+
public static final String PROPERTY_GPS_CONFIG = "gpsConfig";
/** Delegate application config object containing configuration. */
@@ -413,7 +417,7 @@
"true",
Boolean.class
),
- /** Time in seconds before timeout (ERROR, NO_DEVICE) */
+ /** Time in seconds before timeout (ERROR, UNAVAILABLE) */
CAMPAIGN_ID("campaign.id",
n_("sammoa.config.campaign.id"),
null,
@@ -489,6 +493,21 @@
KeyStroke.class,
false,
false),
+
+ KEY_VALID_ROUTE("ui." + PROPERTY_VALID_ROUTE,
+ n_("sammoa.config.ui.validRoute"),
+ "alt pressed R",
+ KeyStroke.class,
+ false,
+ false),
+
+ KEY_VALID_OBSERVATION("ui." + PROPERTY_VALID_OBSERVATION,
+ n_("sammoa.config.ui.validObservation"),
+ "alt pressed O",
+ KeyStroke.class,
+ false,
+ false),
+
CSV_SEPARATOR("sammoa.csv.separator",
n_("sammoa.config.csv.separator"),
";", char.class);
Added: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/ValidationService.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/ValidationService.java (rev 0)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/ValidationService.java 2012-08-24 17:13:35 UTC (rev 472)
@@ -0,0 +1,199 @@
+package fr.ulr.sammoa.application;
+/*
+ * #%L
+ * SAMMOA :: Application
+ * $Id:$
+ * $HeadURL:$
+ * %%
+ * Copyright (C) 2012 UMS 3462, Code Lutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU 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 Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
+
+import fr.ulr.sammoa.persistence.Flight;
+import fr.ulr.sammoa.persistence.FlightDAO;
+import fr.ulr.sammoa.persistence.Observation;
+import fr.ulr.sammoa.persistence.ObservationDAO;
+import fr.ulr.sammoa.persistence.Observations;
+import fr.ulr.sammoa.persistence.ObserverPositionDAO;
+import fr.ulr.sammoa.persistence.Route;
+import fr.ulr.sammoa.persistence.RouteDAO;
+import fr.ulr.sammoa.persistence.SammoaDAOHelper;
+import fr.ulr.sammoa.persistence.TransectFlight;
+import fr.ulr.sammoa.persistence.TransectFlightDAO;
+import org.nuiton.topia.TopiaContext;
+import org.nuiton.topia.TopiaException;
+import org.nuiton.topia.TopiaRuntimeException;
+
+import java.util.List;
+
+/**
+ * Created: 23/08/12
+ *
+ * @author fdesbois <florian.desbois(a)codelutin.com>
+ */
+public class ValidationService extends SammoaServiceSupport {
+
+ public void validateTransect(Flight flight,
+ TransectFlight transectFlight) {
+
+ TopiaContext tx = beginTransaction();
+ try {
+
+ TransectFlightDAO transectFlightDAO = SammoaDAOHelper.getTransectFlightDAO(tx);
+ TransectFlight transectFlightExists = transectFlightDAO.findByTopiaId(transectFlight.getTopiaId());
+
+ boolean valid = !transectFlight.isValid();
+
+ if (transectFlightExists.isDeleted()) {
+
+ ObserverPositionDAO observerPositionDAO = SammoaDAOHelper.getObserverPositionDAO(tx);
+ observerPositionDAO.deleteAll(transectFlightExists.getObserverPosition());
+
+ FlightDAO flightDAO = SammoaDAOHelper.getFlightDAO(tx);
+ Flight flightExists = flightDAO.findByTopiaId(flight.getTopiaId());
+
+ flightExists.removeTransectFlight(transectFlightExists);
+
+ // XXX-fdesbois-2012-08-23 : maybe useless with cascade on delete ?
+ transectFlightDAO.delete(transectFlightExists);
+
+ } else {
+
+ RouteDAO routeDAO = SammoaDAOHelper.getRouteDAO(tx);
+ List<Route> routes = routeDAO.findAllByTransectFlight(transectFlightExists);
+
+ for (Route route : routes) {
+ validateRoute(tx, route, valid);
+ }
+
+ transectFlightExists.setValid(valid);
+ transectFlightDAO.update(transectFlightExists);
+ }
+
+ tx.commitTransaction();
+
+ transectFlight.setValid(valid);
+
+ } catch (TopiaException ex) {
+ throw new TopiaRuntimeException(ex);
+ } finally {
+ endTransaction(tx);
+ }
+ }
+
+ public void validateRoute(Route route) {
+
+ TopiaContext tx = beginTransaction();
+ try {
+
+ RouteDAO routeDAO = SammoaDAOHelper.getRouteDAO(tx);
+ Route routeExists = routeDAO.findByTopiaId(route.getTopiaId());
+
+ boolean valid = !route.isValid();
+
+ validateRoute(tx, routeExists, valid);
+
+ tx.commitTransaction();
+
+ route.setValid(valid);
+
+ } catch (TopiaException ex) {
+ throw new TopiaRuntimeException(ex);
+ } finally {
+ endTransaction(tx);
+ }
+ }
+
+ public void validateObservation(Observation observation) {
+
+ TopiaContext tx = beginTransaction();
+ try {
+
+ ObservationDAO dao = SammoaDAOHelper.getObservationDAO(tx);
+ Observation observationExists =
+ dao.findByTopiaId(observation.getTopiaId());
+
+ boolean valid = !observation.isValid();
+
+ validateObservation(tx, observationExists, valid);
+
+ tx.commitTransaction();
+
+ observation.setValid(valid);
+
+ } catch (TopiaException ex) {
+ throw new TopiaRuntimeException(ex);
+ } finally {
+ endTransaction(tx);
+ }
+ }
+
+ protected void validateRoute(TopiaContext tx,
+ Route route,
+ boolean valid)
+ throws TopiaException {
+
+ RouteDAO routeDAO = SammoaDAOHelper.getRouteDAO(tx);
+
+ if (route.isDeleted()) {
+
+ // TODO-fdesbois-2012-08-23 : manage observerPosition attached to observations
+ ObserverPositionDAO observerPositionDAO = SammoaDAOHelper.getObserverPositionDAO(tx);
+ observerPositionDAO.deleteAll(route.getObserverPosition());
+
+ routeDAO.delete(route);
+
+ } else {
+
+ Flight flight = route.getFlight();
+
+ List<Route> routes = routeDAO.findAllByFlight(flight);
+
+ ObservationDAO observationDAO = SammoaDAOHelper.getObservationDAO(tx);
+ List<Observation> observations = observationDAO.findAllByFlight(flight);
+
+ Iterable<Observation> routeObservations =
+ Observations.filterInRoute(observations, route, routes, true);
+
+ for (Observation observation : routeObservations) {
+ validateObservation(tx, observation, valid);
+ }
+
+ route.setValid(valid);
+ routeDAO.update(route);
+ }
+ }
+
+ protected void validateObservation(TopiaContext tx,
+ Observation observation,
+ boolean valid)
+ throws TopiaException {
+
+ ObservationDAO dao = SammoaDAOHelper.getObservationDAO(tx);
+
+ if (observation.isDeleted()) {
+
+ dao.delete(observation);
+
+ } else {
+
+ observation.setValid(valid);
+ dao.update(observation);
+ }
+ }
+
+}
Property changes on: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/ValidationService.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/DeviceManagerProvider.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/DeviceManagerProvider.java 2012-08-24 17:12:53 UTC (rev 471)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/DeviceManagerProvider.java 2012-08-24 17:13:35 UTC (rev 472)
@@ -1,5 +1,29 @@
package fr.ulr.sammoa.application.device;
+/*
+ * #%L
+ * SAMMOA :: Application
+ * $Id:$
+ * $HeadURL:$
+ * %%
+ * Copyright (C) 2012 UMS 3462, Code Lutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU 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 Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
+import com.google.common.base.Preconditions;
import com.google.common.base.Supplier;
import com.google.common.base.Throwables;
import com.google.common.collect.Sets;
@@ -54,6 +78,7 @@
}
public <T extends DeviceManager> T getDeviceManager(Class<T> deviceManagerClass) {
+ Preconditions.checkNotNull(deviceManagerClass);
for (DeviceManager deviceManager : deviceManagers) {
if (deviceManagerClass.isAssignableFrom(deviceManager.getClass())) {
return (T) deviceManager;
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/DeviceState.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/DeviceState.java 2012-08-24 17:12:53 UTC (rev 471)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/DeviceState.java 2012-08-24 17:13:35 UTC (rev 472)
@@ -31,11 +31,11 @@
*/
public enum DeviceState {
/** voyant gris : pas de peripherique */
- NO_DEVICE,
+ UNAVAILABLE,
/** voyant bleu : peripherique prêt */
READY,
- /** voyant vert : reception de données */
- RECORDING,
+ /** voyant vert : reception des données ou lecture en cours */
+ RUNNING,
/** voyant rouge clignotant : périphirique prêt mais aucune données */
ERROR
}
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/AudioReader.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/AudioReader.java 2012-08-24 17:12:53 UTC (rev 471)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/AudioReader.java 2012-08-24 17:13:35 UTC (rev 472)
@@ -1,4 +1,27 @@
package fr.ulr.sammoa.application.device.audio;
+/*
+ * #%L
+ * SAMMOA :: Application
+ * $Id:$
+ * $HeadURL:$
+ * %%
+ * Copyright (C) 2012 UMS 3462, Code Lutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU 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 Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
import fr.ulr.sammoa.application.device.DeviceManager;
@@ -18,6 +41,9 @@
/** @param file Audio file to load, then you can call start() and stop() */
void load(File file);
+ /** Unload the current audio file */
+ void unload();
+
/** @return loaded audio in milliseconds or 0 if no audio is loaded */
long getLength();
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/AudioReaderMock.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/AudioReaderMock.java 2012-08-24 17:12:53 UTC (rev 471)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/AudioReaderMock.java 2012-08-24 17:13:35 UTC (rev 472)
@@ -1,12 +1,37 @@
package fr.ulr.sammoa.application.device.audio;
+/*
+ * #%L
+ * SAMMOA :: Application
+ * $Id:$
+ * $HeadURL:$
+ * %%
+ * Copyright (C) 2012 UMS 3462, Code Lutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU 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 Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
+import com.google.common.base.Preconditions;
+import com.google.common.collect.Sets;
import fr.ulr.sammoa.application.device.DeviceState;
+import fr.ulr.sammoa.application.device.DeviceStateEvent;
import fr.ulr.sammoa.application.device.DeviceStateListener;
import fr.ulr.sammoa.application.device.DeviceTechnicalException;
import javax.sound.sampled.AudioFileFormat;
import java.io.File;
-import java.util.Collections;
import java.util.Set;
/**
@@ -18,6 +43,10 @@
protected long position;
+ protected DeviceState state = DeviceState.UNAVAILABLE;
+
+ protected Set<DeviceStateListener> listeners = Sets.newHashSet();
+
@Override
public AudioFileFormat.Type getOutputType() {
return AudioFileFormat.Type.WAVE;
@@ -25,9 +54,19 @@
@Override
public void load(File file) {
+ Preconditions.checkNotNull(file);
+ Preconditions.checkArgument(file.exists());
+ unload();
+ setState(DeviceState.READY);
}
@Override
+ public void unload() {
+ stop();
+ setState(DeviceState.UNAVAILABLE);
+ }
+
+ @Override
public long getLength() {
return 0;
}
@@ -44,35 +83,55 @@
@Override
public void open() throws DeviceTechnicalException {
+ // no state set here, only open device and throw error
}
@Override
public void start() {
+ if (state == DeviceState.READY) {
+ setState(DeviceState.RUNNING);
+ }
}
@Override
public void stop() {
+ if (state == DeviceState.RUNNING) {
+ setState(DeviceState.READY);
+ }
}
@Override
public void close() throws DeviceTechnicalException {
+ unload();
}
@Override
public DeviceState getState() {
- return DeviceState.READY;
+ return state;
}
+ protected void setState(DeviceState state) {
+ DeviceState oldValue = getState();
+ this.state = state;
+
+ DeviceStateEvent event = new DeviceStateEvent(this, oldValue, state);
+ for (DeviceStateListener listener : listeners) {
+ listener.stateChanged(event);
+ }
+ }
+
@Override
public void addDeviceStateListener(DeviceStateListener listener) {
+ listeners.add(listener);
}
@Override
public void removeDeviceStateListener(DeviceStateListener listener) {
+ listeners.remove(listener);
}
@Override
public Set<DeviceStateListener> getDeviceStateListeners() {
- return Collections.emptySet();
+ return listeners;
}
}
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/AudioRecorderDefault.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/AudioRecorderDefault.java 2012-08-24 17:12:53 UTC (rev 471)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/AudioRecorderDefault.java 2012-08-24 17:13:35 UTC (rev 472)
@@ -121,7 +121,7 @@
this.audioFormat = audioFormat;
this.outputType = outputType;
this.listeners = Sets.newHashSet();
- this.state = DeviceState.NO_DEVICE;
+ this.state = DeviceState.UNAVAILABLE;
}
@Override
@@ -134,9 +134,9 @@
this.state = state;
// Fire on listeners
+ DeviceStateEvent event = new DeviceStateEvent(this, oldValue, state);
+ event.setError(error);
for (DeviceStateListener listener : listeners) {
- DeviceStateEvent event = new DeviceStateEvent(this, oldValue, state);
- event.setError(error);
listener.stateChanged(event);
}
}
@@ -183,19 +183,19 @@
}
} catch (IllegalArgumentException e) {
- setState(DeviceState.NO_DEVICE, null);
+ setState(DeviceState.UNAVAILABLE, null);
throw new DeviceTechnicalException(this, "Can't open audio device", e);
} catch (IllegalStateException e) {
- setState(DeviceState.NO_DEVICE, null);
+ setState(DeviceState.UNAVAILABLE, null);
throw new DeviceTechnicalException(this, "Can't open audio device", e);
} catch (SecurityException e) {
- setState(DeviceState.NO_DEVICE, null);
+ setState(DeviceState.UNAVAILABLE, null);
throw new DeviceTechnicalException(this, "Can't open audio device", e);
} catch (LineUnavailableException e) {
- setState(DeviceState.NO_DEVICE, null);
+ setState(DeviceState.UNAVAILABLE, null);
throw new DeviceTechnicalException(this, "Can't open audio device", e);
}
}
@@ -218,7 +218,7 @@
@Override
public void record(File outputFile, long delaySeconds) {
- if (DeviceState.NO_DEVICE == state) {
+ if (DeviceState.UNAVAILABLE == state) {
if (logger.isWarnEnabled()) {
logger.warn("Can't record " + outputFile.getAbsolutePath() + ", no available dataLine");
}
@@ -285,7 +285,7 @@
@Override
public void stop() {
- if (getState() != DeviceState.NO_DEVICE) {
+ if (getState() != DeviceState.UNAVAILABLE) {
logger.info("Stop audio line reading");
@@ -311,7 +311,7 @@
dataLine.close();
dataLine = null;
- setState(DeviceState.NO_DEVICE, null);
+ setState(DeviceState.UNAVAILABLE, null);
}
}
@@ -341,7 +341,7 @@
if (!recorders.isEmpty()) {
- setState(DeviceState.RECORDING, null);
+ setState(DeviceState.RUNNING, null);
numBytesRead = dataLine.read(buffer, 0, bufferSize);
synchronized (recorders) {
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/AudioRecorderMock.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/AudioRecorderMock.java 2012-08-24 17:12:53 UTC (rev 471)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/AudioRecorderMock.java 2012-08-24 17:13:35 UTC (rev 472)
@@ -43,7 +43,7 @@
@Override
public DeviceState getState() {
- return DeviceState.NO_DEVICE;
+ return DeviceState.UNAVAILABLE;
}
@Override
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/BaseGpsHandler.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/BaseGpsHandler.java 2012-08-24 17:12:53 UTC (rev 471)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/BaseGpsHandler.java 2012-08-24 17:13:35 UTC (rev 472)
@@ -41,7 +41,7 @@
* Base class for {@link GpsHandler} interface. This class contains common behaviour
* for automatic check on a given {@code period}. For that, this class contains
* a {@link TimerTask} scheduled from {@link #start()}. The {@link #open()} method
- * will be called on start if state is still {@link DeviceState#NO_DEVICE}.
+ * will be called on start if state is still {@link DeviceState#UNAVAILABLE}.
* The method {@link #getCurrentLocation()} must return null if the location doesn't
* change or the GPS is down.
* <p/>
@@ -76,7 +76,7 @@
public BaseGpsHandler(GpsConfig config) {
this.config = config;
- this.state = DeviceState.NO_DEVICE;
+ this.state = DeviceState.UNAVAILABLE;
this.deviceStateListeners = Sets.newHashSet();
this.gpsLocationListeners = Sets.newHashSet();
this.nbFailuresMax =
@@ -161,9 +161,9 @@
this.state = state;
// Fire on listeners
+ DeviceStateEvent event = new DeviceStateEvent(this, oldValue, state);
+ event.setError(error);
for (DeviceStateListener listener : deviceStateListeners) {
- DeviceStateEvent event = new DeviceStateEvent(this, oldValue, state);
- event.setError(error);
listener.stateChanged(event);
}
}
@@ -232,7 +232,7 @@
// GPS is recording
} else {
- setState(DeviceState.RECORDING, null);
+ setState(DeviceState.RUNNING, null);
// Fire events for location change
for (GpsLocationListener listener : gpsLocationListeners) {
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/FakeGpsHandler.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/FakeGpsHandler.java 2012-08-24 17:12:53 UTC (rev 471)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/FakeGpsHandler.java 2012-08-24 17:13:35 UTC (rev 472)
@@ -64,19 +64,19 @@
// Timer timer = new Timer();
// timer.schedule(new TimerTask() {
// protected Random r = new Random();
-// protected DeviceState currentState = DeviceState.NO_DEVICE;
+// protected DeviceState currentState = DeviceState.UNAVAILABLE;
//
// @Override
// public void run() {
// DeviceState newState = currentState;
// if (r.nextInt(32) > 25) {
-// newState = DeviceState.NO_DEVICE;
+// newState = DeviceState.UNAVAILABLE;
// } else {
// if (started) {
// if (r.nextInt(32) > 25) {
// newState = DeviceState.ERROR;
// } else {
-// newState = DeviceState.RECORDING;
+// newState = DeviceState.RUNNING;
// }
// } else {
// newState = DeviceState.READY;
@@ -114,7 +114,7 @@
@Override
public void close() throws DeviceTechnicalException {
- setState(DeviceState.NO_DEVICE, null);
+ setState(DeviceState.UNAVAILABLE, null);
}
@Override
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/GpsConfig.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/GpsConfig.java 2012-08-24 17:12:53 UTC (rev 471)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/GpsConfig.java 2012-08-24 17:13:35 UTC (rev 472)
@@ -101,7 +101,7 @@
"2",
Integer.class
),
- /** Time in seconds before timeout (ERROR, NO_DEVICE) */
+ /** Time in seconds before timeout (ERROR, UNAVAILABLE) */
GPS_TIMEOUT("gps.timeout",
n_("sammoa.config.gps.timeout"),
"10",
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/GpsHandlerGpsylon.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/GpsHandlerGpsylon.java 2012-08-24 17:12:53 UTC (rev 471)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/GpsHandlerGpsylon.java 2012-08-24 17:13:35 UTC (rev 472)
@@ -122,7 +122,7 @@
} catch (GPSException ex) {
- setState(DeviceState.NO_DEVICE, null);
+ setState(DeviceState.UNAVAILABLE, null);
throw new DeviceTechnicalException(this, "Can't open GPS device", ex);
}
@@ -133,7 +133,7 @@
stop();
- if (gpsDataProcessor != null && getState() != DeviceState.NO_DEVICE) {
+ if (gpsDataProcessor != null && getState() != DeviceState.UNAVAILABLE) {
logger.info("Closing GPS device...");
try {
@@ -144,7 +144,7 @@
logger.info("GPS device is closed");
- setState(DeviceState.NO_DEVICE, null);
+ setState(DeviceState.UNAVAILABLE, null);
opened = false;
} catch (GPSException e) {
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/FlightControllerOnBoard.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/FlightControllerOnBoard.java 2012-08-24 17:12:53 UTC (rev 471)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/FlightControllerOnBoard.java 2012-08-24 17:13:35 UTC (rev 472)
@@ -1,4 +1,27 @@
package fr.ulr.sammoa.application.flightController;
+/*
+ * #%L
+ * SAMMOA :: Application
+ * $Id:$
+ * $HeadURL:$
+ * %%
+ * Copyright (C) 2012 UMS 3462, Code Lutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU 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 Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
import com.google.common.base.Preconditions;
import fr.ulr.sammoa.application.device.DeviceManager;
@@ -104,7 +127,9 @@
protected GeoPoint getLocation(TopiaContext tx) throws TopiaException {
GeoPoint result = gpsHandler.getCurrentLocation();
result.setFlight(flight);
- SammoaDAOHelper.getGeoPointDAO(tx).create(result);
+ if (result.getTopiaId() == null) {
+ SammoaDAOHelper.getGeoPointDAO(tx).create(result);
+ }
return result;
}
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/FlightControllerValidation.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/FlightControllerValidation.java 2012-08-24 17:12:53 UTC (rev 471)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/FlightControllerValidation.java 2012-08-24 17:13:35 UTC (rev 472)
@@ -1,4 +1,27 @@
package fr.ulr.sammoa.application.flightController;
+/*
+ * #%L
+ * SAMMOA :: Application
+ * $Id:$
+ * $HeadURL:$
+ * %%
+ * Copyright (C) 2012 UMS 3462, Code Lutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU 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 Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
import com.google.common.base.Preconditions;
import fr.ulr.sammoa.application.device.DeviceManager;
@@ -59,18 +82,6 @@
}
@Override
- public void setCurrentRoute(Route currentRoute) {
- super.setCurrentRoute(currentRoute);
-
- if (currentRoute != null) {
-
- File file = flightStorage.getAudioFile(currentRoute,
- audioReader.getOutputType().getExtension());
- audioReader.load(file);
- }
- }
-
- @Override
protected GeoPoint getLocation(TopiaContext tx) throws TopiaException {
Preconditions.checkNotNull(currentRoute, "You must set the current route to retrieve location");
@@ -157,6 +168,19 @@
logger.debug("Add route {} to cache", Routes.toString(event.getRoute()));
}
routes.add(event.getRoute());
+
+ } else {
+
+ audioReader.unload();
+ if (currentRoute != null) {
+
+ File file = flightStorage.getAudioFile(
+ currentRoute, audioReader.getOutputType().getExtension());
+
+ if (file.exists()) {
+ audioReader.load(file);
+ }
+ }
}
}
@@ -174,4 +198,12 @@
public void onObservationAdded(ObservationEvent event) {
// nothing to do
}
+
+ @Override
+ protected void fireRouteAdded(Route previousRoute, Route newRoute) {
+
+ // Ensure previous, it could be different from argument because
+ // the audio time could overflow on more than one route
+ super.fireRouteAdded(Routes.findPrevious(routes, newRoute), newRoute);
+ }
}
Modified: trunk/sammoa-application/src/main/resources/i18n/sammoa-application_en_GB.properties
===================================================================
--- trunk/sammoa-application/src/main/resources/i18n/sammoa-application_en_GB.properties 2012-08-24 17:12:53 UTC (rev 471)
+++ trunk/sammoa-application/src/main/resources/i18n/sammoa-application_en_GB.properties 2012-08-24 17:13:35 UTC (rev 472)
@@ -28,6 +28,8 @@
sammoa.config.ui.rightObservation=Observation from the right place
sammoa.config.ui.start=Start
sammoa.config.ui.stop=Stop
+sammoa.config.ui.validObservation=Validate the selected observation
+sammoa.config.ui.validRoute=Validate the selected route
sammoa.copyright.text=Copyright CRMM 2012
sammoa.datePattern=dd/MM/yyyy
sammoa.dateTimePattern=dd/MM/yyyy HH\:mm\:ss
Modified: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Observations.java
===================================================================
--- trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Observations.java 2012-08-24 17:12:53 UTC (rev 471)
+++ trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Observations.java 2012-08-24 17:13:35 UTC (rev 472)
@@ -63,6 +63,13 @@
return Sets.newHashSet(Iterables.transform(observations, TO_OBSERVER_POSITION_FUNCTION));
}
+ public static Iterable<Observation> filterInRoute(Iterable<Observation> observations,
+ Route route,
+ Iterable<Route> routes,
+ boolean ignoreDeleted) {
+ return Iterables.filter(observations, inRoute(route, routes, ignoreDeleted));
+ }
+
public static Observation findFirstInRoute(Iterable<Observation> observations,
Route route,
Iterable<Route> routes,
@@ -75,7 +82,7 @@
} else {
result = FluentIterable.from(observations)
- .filter(Observations.inRoute(route, routes, ignoreDeleted))
+ .filter(inRoute(route, routes, ignoreDeleted))
.first()
.orNull();
}
Modified: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/TransectFlightImpl.java
===================================================================
--- trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/TransectFlightImpl.java 2012-08-24 17:12:53 UTC (rev 471)
+++ trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/TransectFlightImpl.java 2012-08-24 17:13:35 UTC (rev 472)
@@ -74,16 +74,6 @@
}
@Override
- public int getIndexInFlight() {
- return 0; //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public void setIndexInFlight(int indexInFlight) {
- //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
public void setObserverByPosition(Position position, Observer observer) {
ObserverPosition observerPositionToUpdate =
getObserverPositionByPosition(position);
Modified: trunk/sammoa-persistence/src/test/java/fr/ulr/sammoa/persistence/ObservationsTest.java
===================================================================
--- trunk/sammoa-persistence/src/test/java/fr/ulr/sammoa/persistence/ObservationsTest.java 2012-08-24 17:12:53 UTC (rev 471)
+++ trunk/sammoa-persistence/src/test/java/fr/ulr/sammoa/persistence/ObservationsTest.java 2012-08-24 17:13:35 UTC (rev 472)
@@ -1,4 +1,27 @@
package fr.ulr.sammoa.persistence;
+/*
+ * #%L
+ * SAMMOA :: Persistence
+ * $Id:$
+ * $HeadURL:$
+ * %%
+ * Copyright (C) 2012 UMS 3462, Code Lutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU 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 Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
import com.google.common.collect.Lists;
import junit.framework.Assert;
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/MainUIHandler.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/MainUIHandler.java 2012-08-24 17:12:53 UTC (rev 471)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/MainUIHandler.java 2012-08-24 17:13:35 UTC (rev 472)
@@ -320,6 +320,10 @@
helper.setOptionCallBack("actions");
helper.addOption(SammoaConfig.SammoaConfigOption.KEY_CIRCLE_BACK);
helper.setOptionCallBack("actions");
+ helper.addOption(SammoaConfig.SammoaConfigOption.KEY_VALID_OBSERVATION);
+ helper.setOptionCallBack("actions");
+ helper.addOption(SammoaConfig.SammoaConfigOption.KEY_VALID_ROUTE);
+ helper.setOptionCallBack("actions");
// gps
helper.registerCallBack("gps",
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/SammoaColors.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/SammoaColors.java 2012-08-24 17:12:53 UTC (rev 471)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/SammoaColors.java 2012-08-24 17:13:35 UTC (rev 472)
@@ -51,8 +51,10 @@
public static final Color NEXT_TRANSECT_ROW_COLOR = new Color(233, 255, 235);
- public static final Color OBSERVATION_FOR_ROUTE_ROW_COLOR = new Color(233, 255, 235);
+ public static final Color OBSERVATION_FOR_ROUTE_ROW_COLOR = new Color(171, 214, 255);
+ public static final Color ROUTE_FOR_TRANSECT_ROW_COLOR = new Color(171, 214, 255);
+
public static final Color ROUTE_NO_MODIFICATION_ROW_COLOR = new Color(255, 233, 233);
public static final Color FLIGHT_TRACKING_LINE_COLOR = Color.RED;
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/AddAction.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/AddAction.java 2012-08-24 17:12:53 UTC (rev 471)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/AddAction.java 2012-08-24 17:13:35 UTC (rev 472)
@@ -24,6 +24,7 @@
package fr.ulr.sammoa.ui.swing.action;
import fr.ulr.sammoa.application.flightController.FlightState;
+import fr.ulr.sammoa.ui.swing.flight.FlightUIModel;
import jaxx.runtime.JAXXContext;
import org.nuiton.util.Resource;
@@ -37,13 +38,14 @@
*
* @author fdesbois <desbois(a)codelutin.com>
*/
-public class AddAction extends SammoaAction {
+public class AddAction extends FlightAction {
private static final long serialVersionUID = 1L;
public AddAction(JAXXContext context) {
super(Resource.getIcon("/icons/action-add.png"), context);
putValue(Action.SHORT_DESCRIPTION, _("sammoa.action.add.tip"));
+ bindModelProperties(FlightUIModel.PROPERTY_FLIGHT_STATE);
}
@Override
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/BeginAction.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/BeginAction.java 2012-08-24 17:12:53 UTC (rev 471)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/BeginAction.java 2012-08-24 17:13:35 UTC (rev 472)
@@ -25,8 +25,8 @@
import fr.ulr.sammoa.application.flightController.FlightState;
import fr.ulr.sammoa.persistence.RouteType;
+import fr.ulr.sammoa.ui.swing.flight.FlightUIModel;
import jaxx.runtime.JAXXContext;
-import org.nuiton.util.Resource;
import javax.swing.Action;
import java.awt.event.ActionEvent;
@@ -38,13 +38,18 @@
*
* @author fdesbois <desbois(a)codelutin.com>
*/
-public class BeginAction extends SammoaAction {
+public class BeginAction extends FlightAction {
private static final long serialVersionUID = 1L;
public BeginAction(JAXXContext context) {
- super(Resource.getIcon("/icons/playback_play.png"), context);
+ super(_("sammoa.action.begin"), context);
putValue(Action.SHORT_DESCRIPTION, _("sammoa.action.begin.tip"));
+ bindModelProperties(
+ FlightUIModel.PROPERTY_FLIGHT_STATE,
+ FlightUIModel.PROPERTY_CURRENT_ROUTE,
+ FlightUIModel.PROPERTY_NEXT_TRANSECT
+ );
}
@Override
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/CircleBackAction.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/CircleBackAction.java 2012-08-24 17:12:53 UTC (rev 471)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/CircleBackAction.java 2012-08-24 17:13:35 UTC (rev 472)
@@ -27,6 +27,7 @@
import fr.ulr.sammoa.persistence.Observation;
import fr.ulr.sammoa.persistence.Route;
import fr.ulr.sammoa.persistence.RouteType;
+import fr.ulr.sammoa.ui.swing.flight.FlightUIModel;
import jaxx.runtime.JAXXContext;
import org.nuiton.util.Resource;
@@ -43,7 +44,7 @@
*
* @author fdesbois <desbois(a)codelutin.com>
*/
-public class CircleBackAction extends SammoaAction {
+public class CircleBackAction extends FlightAction {
private static final long serialVersionUID = 1L;
@@ -54,6 +55,7 @@
public CircleBackAction(JAXXContext context) {
super(CIRCLE_BACK_ICON, context);
putValue(Action.SHORT_DESCRIPTION, _("sammoa.action.circleBack.tip"));
+ bindModelProperties(FlightUIModel.PROPERTY_CURRENT_ROUTE);
}
@Override
Added: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/DeviceAction.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/DeviceAction.java (rev 0)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/DeviceAction.java 2012-08-24 17:13:35 UTC (rev 472)
@@ -0,0 +1,71 @@
+/*
+ * #%L
+ * SAMMOA :: UI Swing
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2012 UMS 3462, Code Lutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU 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 Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
+package fr.ulr.sammoa.ui.swing.action;
+
+import fr.ulr.sammoa.application.device.DeviceManager;
+import fr.ulr.sammoa.application.device.DeviceStateEvent;
+import fr.ulr.sammoa.application.device.DeviceStateListener;
+import jaxx.runtime.JAXXContext;
+
+import javax.swing.Icon;
+
+/**
+ * Created: 03/07/12
+ *
+ * @author fdesbois <desbois(a)codelutin.com>
+ */
+public abstract class DeviceAction<T extends DeviceManager> extends SammoaAction {
+
+ private static final long serialVersionUID = 1L;
+
+ protected T device;
+
+ protected DeviceAction(Icon icon, JAXXContext context) {
+ super(icon, context);
+ }
+
+ protected DeviceAction(String name, JAXXContext context) {
+ super(name, context);
+ }
+
+ protected T getDevice() {
+ if (device == null) {
+ device = getFlightController().getDeviceManager(getDeviceClass());
+ device.addDeviceStateListener(new DeviceStateListener() {
+
+ @Override
+ public void stateChanged(DeviceStateEvent event) {
+ setEnabled(checkEnabled());
+ }
+ });
+ }
+ return device;
+ }
+
+ protected boolean hasDevice() {
+ return device != null || getFlightController().getDeviceManager(getDeviceClass()) != null;
+ }
+
+ protected abstract Class<T> getDeviceClass();
+}
Property changes on: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/DeviceAction.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/EndAction.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/EndAction.java 2012-08-24 17:12:53 UTC (rev 471)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/EndAction.java 2012-08-24 17:13:35 UTC (rev 472)
@@ -24,8 +24,8 @@
package fr.ulr.sammoa.ui.swing.action;
import fr.ulr.sammoa.application.flightController.FlightState;
+import fr.ulr.sammoa.ui.swing.flight.FlightUIModel;
import jaxx.runtime.JAXXContext;
-import org.nuiton.util.Resource;
import javax.swing.Action;
import java.awt.event.ActionEvent;
@@ -37,13 +37,14 @@
*
* @author fdesbois <desbois(a)codelutin.com>
*/
-public class EndAction extends SammoaAction {
+public class EndAction extends FlightAction {
private static final long serialVersionUID = 1L;
public EndAction(JAXXContext context) {
- super(Resource.getIcon("/icons/playback_stop.png"), context);
+ super(_("sammoa.action.end"), context);
putValue(Action.SHORT_DESCRIPTION, _("sammoa.action.end.tip"));
+ bindModelProperties(FlightUIModel.PROPERTY_FLIGHT_STATE);
}
@Override
Copied: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/FlightAction.java (from rev 471, trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/ObservationAction.java)
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/FlightAction.java (rev 0)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/FlightAction.java 2012-08-24 17:13:35 UTC (rev 472)
@@ -0,0 +1,64 @@
+/*
+ * #%L
+ * SAMMOA :: UI Swing
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2012 UMS 3462, Code Lutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU 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 Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
+package fr.ulr.sammoa.ui.swing.action;
+
+import fr.ulr.sammoa.application.flightController.FlightState;
+import fr.ulr.sammoa.persistence.Flight;
+import fr.ulr.sammoa.persistence.Route;
+import fr.ulr.sammoa.persistence.TransectFlight;
+import jaxx.runtime.JAXXContext;
+
+import javax.swing.Icon;
+
+/**
+ * Created: 03/07/12
+ *
+ * @author fdesbois <desbois(a)codelutin.com>
+ */
+public abstract class FlightAction extends SammoaAction {
+
+ public FlightAction(Icon icon, JAXXContext context) {
+ super(icon, context);
+ }
+
+ public FlightAction(String name, JAXXContext context) {
+ super(name, context);
+ }
+
+ protected FlightState getFlightState() {
+ return getModel().getFlightState();
+ }
+
+ protected Flight getFlight() {
+ return getModel().getFlight();
+ }
+
+ protected TransectFlight getNextTransect() {
+ return getModel().getNextTransect();
+ }
+
+ protected Route getCurrentRoute() {
+ return getModel().getCurrentRoute();
+ }
+}
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/NextAction.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/NextAction.java 2012-08-24 17:12:53 UTC (rev 471)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/NextAction.java 2012-08-24 17:13:35 UTC (rev 472)
@@ -24,8 +24,8 @@
package fr.ulr.sammoa.ui.swing.action;
import fr.ulr.sammoa.application.flightController.FlightState;
+import fr.ulr.sammoa.ui.swing.flight.FlightUIModel;
import jaxx.runtime.JAXXContext;
-import org.nuiton.util.Resource;
import javax.swing.Action;
import java.awt.event.ActionEvent;
@@ -37,13 +37,14 @@
*
* @author fdesbois <desbois(a)codelutin.com>
*/
-public class NextAction extends SammoaAction {
+public class NextAction extends FlightAction {
private static final long serialVersionUID = 1L;
public NextAction(JAXXContext context) {
- super(Resource.getIcon("/icons/playback_next.png"), context);
+ super(_("sammoa.action.next"), context);
putValue(Action.SHORT_DESCRIPTION, _("sammoa.action.next.tip"));
+ bindModelProperties(FlightUIModel.PROPERTY_FLIGHT_STATE);
}
@Override
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/NextTransectAction.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/NextTransectAction.java 2012-08-24 17:12:53 UTC (rev 471)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/NextTransectAction.java 2012-08-24 17:13:35 UTC (rev 472)
@@ -27,7 +27,8 @@
import jaxx.runtime.JAXXContext;
import org.nuiton.util.Resource;
-import javax.swing.*;
+import javax.swing.Action;
+import javax.swing.JComponent;
import java.awt.event.ActionEvent;
import static org.nuiton.i18n.I18n._;
@@ -37,7 +38,7 @@
*
* @author fdesbois <desbois(a)codelutin.com>
*/
-public class NextTransectAction extends SammoaAction {
+public class NextTransectAction extends FlightAction {
private static final long serialVersionUID = 1L;
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/ObservationAction.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/ObservationAction.java 2012-08-24 17:12:53 UTC (rev 471)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/ObservationAction.java 2012-08-24 17:13:35 UTC (rev 472)
@@ -25,6 +25,7 @@
import fr.ulr.sammoa.application.flightController.FlightState;
import fr.ulr.sammoa.persistence.Position;
+import fr.ulr.sammoa.ui.swing.flight.FlightUIModel;
import jaxx.runtime.JAXXContext;
import java.awt.event.ActionEvent;
@@ -34,7 +35,7 @@
*
* @author fdesbois <desbois(a)codelutin.com>
*/
-public abstract class ObservationAction extends SammoaAction {
+public abstract class ObservationAction extends FlightAction {
private static final long serialVersionUID = 1L;
@@ -43,6 +44,7 @@
public ObservationAction(String name, JAXXContext context, Position position) {
super(name, context);
this.position = position;
+ bindModelProperties(FlightUIModel.PROPERTY_FLIGHT_STATE);
}
@Override
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/SammoaAction.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/SammoaAction.java 2012-08-24 17:12:53 UTC (rev 471)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/SammoaAction.java 2012-08-24 17:13:35 UTC (rev 472)
@@ -24,10 +24,6 @@
package fr.ulr.sammoa.ui.swing.action;
import fr.ulr.sammoa.application.flightController.FlightController;
-import fr.ulr.sammoa.application.flightController.FlightState;
-import fr.ulr.sammoa.persistence.Flight;
-import fr.ulr.sammoa.persistence.Route;
-import fr.ulr.sammoa.persistence.TransectFlight;
import fr.ulr.sammoa.ui.swing.flight.FlightUIHandler;
import fr.ulr.sammoa.ui.swing.flight.FlightUIModel;
import jaxx.runtime.JAXXContext;
@@ -42,14 +38,12 @@
*
* @author fdesbois <desbois(a)codelutin.com>
*/
-public abstract class SammoaAction extends AbstractAction implements PropertyChangeListener {
+public abstract class SammoaAction extends AbstractAction {
- private static final long serialVersionUID = 1L;
-
protected JAXXContext context;
- public SammoaAction(Icon icon, JAXXContext context) {
- super("", icon);
+ public SammoaAction(String name, Icon icon, JAXXContext context) {
+ super(name, icon);
init(context);
}
@@ -58,17 +52,15 @@
init(context);
}
+ public SammoaAction(Icon icon, JAXXContext context) {
+ this("", icon, context);
+ }
+
protected void init(JAXXContext context) {
this.context = context;
- getModel().addPropertyChangeListener(this);
setEnabled(checkEnabled());
}
- @Override
- public final void propertyChange(PropertyChangeEvent evt) {
- setEnabled(checkEnabled());
- }
-
protected FlightController getFlightController() {
return context.getContextValue(FlightUIHandler.class).getFlightController();
}
@@ -77,21 +69,19 @@
return context.getContextValue(FlightUIHandler.class).getModel();
}
- protected FlightState getFlightState() {
- return getModel().getFlightState();
+ protected void bindModelProperties(String... properties) {
+ for (String property : properties) {
+ getModel().addPropertyChangeListener(property, enabledListener);
+ }
}
- protected Flight getFlight() {
- return getModel().getFlight();
- }
+ protected PropertyChangeListener enabledListener = new PropertyChangeListener() {
- protected TransectFlight getNextTransect() {
- return getModel().getNextTransect();
- }
+ @Override
+ public void propertyChange(PropertyChangeEvent evt) {
+ setEnabled(checkEnabled());
+ }
+ };
- protected Route getCurrentRoute() {
- return getModel().getCurrentRoute();
- }
-
protected abstract boolean checkEnabled();
}
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/StartAction.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/StartAction.java 2012-08-24 17:12:53 UTC (rev 471)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/StartAction.java 2012-08-24 17:13:35 UTC (rev 472)
@@ -24,6 +24,7 @@
package fr.ulr.sammoa.ui.swing.action;
import fr.ulr.sammoa.application.flightController.FlightState;
+import fr.ulr.sammoa.ui.swing.flight.FlightUIModel;
import jaxx.runtime.JAXXContext;
import org.nuiton.util.Resource;
@@ -37,13 +38,14 @@
*
* @author fdesbois <desbois(a)codelutin.com>
*/
-public class StartAction extends SammoaAction {
+public class StartAction extends FlightAction {
private static final long serialVersionUID = 1L;
public StartAction(JAXXContext context) {
super(Resource.getIcon("/icons/playback_play.png"), context);
putValue(Action.SHORT_DESCRIPTION, _("sammoa.action.start.tip"));
+ bindModelProperties(FlightUIModel.PROPERTY_FLIGHT_STATE);
}
@Override
Copied: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/StartAudioAction.java (from rev 471, trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/StartAction.java)
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/StartAudioAction.java (rev 0)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/StartAudioAction.java 2012-08-24 17:13:35 UTC (rev 472)
@@ -0,0 +1,64 @@
+/*
+ * #%L
+ * SAMMOA :: UI Swing
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2012 UMS 3462, Code Lutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU 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 Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
+package fr.ulr.sammoa.ui.swing.action;
+
+import fr.ulr.sammoa.application.device.DeviceState;
+import fr.ulr.sammoa.application.device.audio.AudioReader;
+import jaxx.runtime.JAXXContext;
+import org.nuiton.util.Resource;
+
+import javax.swing.Action;
+import java.awt.event.ActionEvent;
+
+import static org.nuiton.i18n.I18n._;
+
+/**
+ * Created: 05/07/12
+ *
+ * @author fdesbois <desbois(a)codelutin.com>
+ */
+public class StartAudioAction extends DeviceAction<AudioReader> {
+
+ private static final long serialVersionUID = 1L;
+
+ public StartAudioAction(JAXXContext context) {
+ super(Resource.getIcon("/icons/playback_play.png"), context);
+ putValue(Action.SHORT_DESCRIPTION, _("sammoa.action.startAudio.tip"));
+ }
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ getDevice().start();
+ }
+
+ @Override
+ protected boolean checkEnabled() {
+ return hasDevice() && getDevice().getState() == DeviceState.READY;
+ }
+
+ @Override
+ protected Class<AudioReader> getDeviceClass() {
+ return AudioReader.class;
+ }
+}
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/StopAction.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/StopAction.java 2012-08-24 17:12:53 UTC (rev 471)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/StopAction.java 2012-08-24 17:13:35 UTC (rev 472)
@@ -24,6 +24,7 @@
package fr.ulr.sammoa.ui.swing.action;
import fr.ulr.sammoa.application.flightController.FlightState;
+import fr.ulr.sammoa.ui.swing.flight.FlightUIModel;
import jaxx.runtime.JAXXContext;
import org.nuiton.util.Resource;
@@ -37,13 +38,14 @@
*
* @author fdesbois <desbois(a)codelutin.com>
*/
-public class StopAction extends SammoaAction {
+public class StopAction extends FlightAction {
private static final long serialVersionUID = 1L;
public StopAction(JAXXContext context) {
super(Resource.getIcon("/icons/playback_stop.png"), context);
putValue(Action.SHORT_DESCRIPTION, _("sammoa.action.stop.tip"));
+ bindModelProperties(FlightUIModel.PROPERTY_FLIGHT_STATE);
}
@Override
Copied: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/StopAudioAction.java (from rev 471, trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/StopAction.java)
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/StopAudioAction.java (rev 0)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/StopAudioAction.java 2012-08-24 17:13:35 UTC (rev 472)
@@ -0,0 +1,64 @@
+/*
+ * #%L
+ * SAMMOA :: UI Swing
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2012 UMS 3462, Code Lutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU 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 Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
+package fr.ulr.sammoa.ui.swing.action;
+
+import fr.ulr.sammoa.application.device.DeviceState;
+import fr.ulr.sammoa.application.device.audio.AudioReader;
+import jaxx.runtime.JAXXContext;
+import org.nuiton.util.Resource;
+
+import javax.swing.Action;
+import java.awt.event.ActionEvent;
+
+import static org.nuiton.i18n.I18n._;
+
+/**
+ * Created: 05/07/12
+ *
+ * @author fdesbois <desbois(a)codelutin.com>
+ */
+public class StopAudioAction extends DeviceAction<AudioReader> {
+
+ private static final long serialVersionUID = 1L;
+
+ public StopAudioAction(JAXXContext context) {
+ super(Resource.getIcon("/icons/playback_stop.png"), context);
+ putValue(Action.SHORT_DESCRIPTION, _("sammoa.action.stopAudio.tip"));
+ }
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ getDevice().stop();
+ }
+
+ @Override
+ protected boolean checkEnabled() {
+ return hasDevice() && getDevice().getState() == DeviceState.RUNNING;
+ }
+
+ @Override
+ protected Class<AudioReader> getDeviceClass() {
+ return AudioReader.class;
+ }
+}
Added: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/ValidAction.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/ValidAction.java (rev 0)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/ValidAction.java 2012-08-24 17:13:35 UTC (rev 472)
@@ -0,0 +1,100 @@
+package fr.ulr.sammoa.ui.swing.action;
+/*
+ * #%L
+ * SAMMOA :: UI Swing
+ * $Id:$
+ * $HeadURL:$
+ * %%
+ * Copyright (C) 2012 UMS 3462, Code Lutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU 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 Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
+
+import com.google.common.base.Preconditions;
+import com.google.common.collect.Maps;
+import fr.ulr.sammoa.application.ValidationService;
+import fr.ulr.sammoa.ui.swing.SammoaUIContext;
+import jaxx.runtime.JAXXContext;
+import org.nuiton.util.Resource;
+import org.nuiton.validator.bean.list.BeanListValidator;
+import org.nuiton.validator.bean.list.BeanListValidatorEvent;
+import org.nuiton.validator.bean.list.BeanListValidatorListener;
+
+import java.util.Map;
+
+/**
+ * Created: 23/08/12
+ *
+ * @author fdesbois <florian.desbois(a)codelutin.com>
+ */
+public abstract class ValidAction extends SammoaAction {
+
+ protected ValidationService validationService;
+
+ protected Map<Class<?>, BeanListValidator<?>> validators = Maps.newHashMap();
+
+ public ValidAction(String name, JAXXContext context) {
+ super(name, Resource.getIcon("/icons/action-tick.png"), context);
+ }
+
+ protected ValidationService getValidationService() {
+ if (validationService == null) {
+ validationService =
+ SammoaUIContext.getUIContext().getService(ValidationService.class);
+ }
+ return validationService;
+ }
+
+ /**
+ * Retrieve a validator for the {@code beanClass}. A cache
+ * is used to keep the validator for this property. A listener is also
+ * used to call checkEnabled() on each validation change.
+ *
+ * @param beanClass Class of the bean
+ * @param <E> generic type of the bean
+ * @return the {@link BeanListValidator} found
+ * @throws NullPointerException if no validator exists in context for the
+ * given {@code modelPropertyName}
+ */
+ private <E> BeanListValidator<E> getValidator(Class<E> beanClass) {
+ BeanListValidator<E> validator = (BeanListValidator<E>) validators.get(beanClass);
+ if (validator == null) {
+ String prefix = beanClass.getSimpleName().toLowerCase();
+ String contextValueName = prefix + "Validator";
+ validator = context.getContextValue(BeanListValidator.class,
+ contextValueName);
+ Preconditions.checkNotNull(validator,
+ "No validator exists for bean type : "
+ + beanClass.getName()
+ + " (property from context = "
+ + contextValueName + ")"
+ );
+ validator.addBeanListValidatorListener(new BeanListValidatorListener() {
+
+ @Override
+ public void onFieldChanged(BeanListValidatorEvent event) {
+ setEnabled(checkEnabled());
+ }
+ });
+ validators.put(beanClass, validator);
+ }
+ return validator;
+ }
+
+ protected <E> boolean isValid(E bean) {
+ return getValidator((Class<E>) bean.getClass()).getContext(bean).isValid();
+ }
+}
Property changes on: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/ValidAction.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Added: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/ValidObservationAction.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/ValidObservationAction.java (rev 0)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/ValidObservationAction.java 2012-08-24 17:13:35 UTC (rev 472)
@@ -0,0 +1,79 @@
+package fr.ulr.sammoa.ui.swing.action;
+/*
+ * #%L
+ * SAMMOA :: UI Swing
+ * $Id:$
+ * $HeadURL:$
+ * %%
+ * Copyright (C) 2012 UMS 3462, Code Lutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU 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 Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
+
+import fr.ulr.sammoa.persistence.Observation;
+import fr.ulr.sammoa.ui.swing.flight.FlightUIModel;
+import jaxx.runtime.JAXXContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.swing.Action;
+import java.awt.event.ActionEvent;
+
+import static org.nuiton.i18n.I18n._;
+
+/**
+ * Created: 23/08/12
+ *
+ * @author fdesbois <florian.desbois(a)codelutin.com>
+ */
+public class ValidObservationAction extends ValidAction {
+
+ /** Logger. */
+ private static final Logger logger = LoggerFactory.getLogger(ValidObservationAction.class);
+
+ private static final long serialVersionUID = 1L;
+
+ public ValidObservationAction(JAXXContext context) {
+ super(_("sammoa.action.validObservation"), context);
+ putValue(Action.SHORT_DESCRIPTION, _("sammoa.action.validObservation.tip"));
+ bindModelProperties(FlightUIModel.PROPERTY_OBSERVATION_EDIT_BEAN);
+ }
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+
+ Observation observation = getModel().getObservationEditBean();
+
+ if (observation != null) {
+
+ if (logger.isDebugEnabled()) {
+ logger.debug("Validation for observation {}", observation.getObservationNumber());
+ }
+
+ getValidationService().validateObservation(observation);
+
+ if (observation.isDeleted()) {
+ getModel().removeObservation(observation);
+ }
+ }
+ }
+
+ @Override
+ protected boolean checkEnabled() {
+ Observation observation = getModel().getObservationEditBean();
+ return observation != null && (observation.isDeleted() || isValid(observation));
+ }
+}
Property changes on: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/ValidObservationAction.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Added: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/ValidRouteAction.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/ValidRouteAction.java (rev 0)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/ValidRouteAction.java 2012-08-24 17:13:35 UTC (rev 472)
@@ -0,0 +1,143 @@
+package fr.ulr.sammoa.ui.swing.action;
+/*
+ * #%L
+ * SAMMOA :: UI Swing
+ * $Id:$
+ * $HeadURL:$
+ * %%
+ * Copyright (C) 2012 UMS 3462, Code Lutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU 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 Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
+
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
+import fr.ulr.sammoa.application.FlightService;
+import fr.ulr.sammoa.persistence.Observation;
+import fr.ulr.sammoa.persistence.Observations;
+import fr.ulr.sammoa.persistence.Route;
+import fr.ulr.sammoa.persistence.Routes;
+import fr.ulr.sammoa.ui.swing.SammoaUIContext;
+import fr.ulr.sammoa.ui.swing.flight.FlightUIModel;
+import jaxx.runtime.JAXXContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.swing.Action;
+import java.awt.event.ActionEvent;
+
+import static org.nuiton.i18n.I18n._;
+
+/**
+ * Created: 23/08/12
+ *
+ * @author fdesbois <florian.desbois(a)codelutin.com>
+ */
+public class ValidRouteAction extends ValidAction {
+
+ /** Logger. */
+ private static final Logger logger = LoggerFactory.getLogger(ValidRouteAction.class);
+
+ private static final long serialVersionUID = 1L;
+
+ protected boolean validatorIsAdjusting;
+
+ public ValidRouteAction(JAXXContext context) {
+ super(_("sammoa.action.validRoute"), context);
+ putValue(Action.SHORT_DESCRIPTION, _("sammoa.action.validRoute.tip"));
+ bindModelProperties(FlightUIModel.PROPERTY_ROUTE_EDIT_BEAN);
+ }
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+
+ Route route = getModel().getRouteEditBean();
+
+ if (route != null) {
+
+ if (logger.isDebugEnabled()) {
+ logger.debug("Validation for route {} : {}",
+ route.getRouteType(),
+ route.getEffortNumber()
+ );
+ }
+
+ getValidationService().validateRoute(route);
+
+ if (route.isDeleted()) {
+ getModel().removeRoute(route);
+ } else {
+
+ validatorIsAdjusting = true;
+
+ getModel().setObservationEditBean(null);
+
+ // Reload all observations
+ FlightService service =
+ context.getContextValue(SammoaUIContext.class).getService(FlightService.class);
+ getModel().clearObservation();
+ getModel().addAllObservation(service.getObservations(getModel().getFlight()));
+
+ validatorIsAdjusting = false;
+ }
+ }
+ }
+
+ @Override
+ protected boolean checkEnabled() {
+ boolean result = isEnabled();
+ if (!validatorIsAdjusting) {
+ Route bean = getModel().getRouteEditBean();
+ result = bean != null && (bean.isDeleted() || isRouteValid(bean));
+ }
+ return result;
+ }
+
+ protected boolean isRouteValid(Route bean) {
+ boolean result = isValid(bean)
+ && isDifferentFromPreviousRoute(bean)
+ && isObservationsValid(bean);
+ return result;
+ }
+
+ protected boolean isDifferentFromPreviousRoute(Route bean) {
+ boolean result;
+ Route previousRoute = Routes.findPrevious(getModel().getRoutes(), bean);
+ result = previousRoute == null || !Routes.equal(bean, previousRoute);
+ return result;
+ }
+
+ protected boolean isObservationsValid(Route bean) {
+
+ Iterable<Observation> observations =
+ Observations.filterInRoute(
+ getModel().getObservations(),
+ bean,
+ getModel().getRoutes(),
+ true
+ );
+
+ // All observations must be deleted or valid
+ boolean result = Iterables.all(observations, new Predicate<Observation>() {
+
+ @Override
+ public boolean apply(Observation input) {
+ return input.isDeleted() || isValid(input);
+ }
+ });
+ return result;
+ }
+}
Property changes on: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/ValidRouteAction.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/DeviceStateLED.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/DeviceStateLED.java 2012-08-24 17:12:53 UTC (rev 471)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/DeviceStateLED.java 2012-08-24 17:13:35 UTC (rev 472)
@@ -80,13 +80,13 @@
getClass().getSimpleName(), state);
switch (state) {
- case NO_DEVICE:
+ case UNAVAILABLE:
setIcon(NO_DEVICE_ICON);
break;
case READY:
setIcon(READY_ICON);
break;
- case RECORDING:
+ case RUNNING:
setIcon(RECORDING_ICON);
break;
case ERROR:
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightBar.css
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightBar.css 2012-08-24 17:12:53 UTC (rev 471)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightBar.css 2012-08-24 17:13:35 UTC (rev 472)
@@ -23,11 +23,20 @@
* #L%
*/
-#lblTime {
- delay:1000;
- pattern:"dd/MM/yyyy HH:mm:ss";
+#stateBar {
+ background: {model.getEffortPanelColor()};
}
+#clockTime {
+ delay: 1000;
+ pattern: "dd/MM/yyyy HH:mm:ss";
+ visible: {!flightUIModel.isValidationMode()};
+}
+#audioTime {
+ visible: {flightUIModel.isValidationMode()};
+ text: {dateFormat.format(flightUIModel.getCurrentRoute().getBeginTime())};
+}
+
#beginButton {
_actionName: {"begin"};
}
@@ -41,45 +50,45 @@
}
#effortButtonPanel {
- background:{model.getEffortPanelColor()};
+ background: {model.getEffortPanelColor()};
}
#statusPanel {
- background:{model.getEffortPanelColor()};
+ background: {model.getEffortPanelColor()};
}
#lblEffort {
- text:{flightUIModel.getFlightState().name()};
+ text: {flightUIModel.getFlightState().name()};
}
#lblTransect {
- text:{flightUIModel.getCurrentRoute().getTransectFlight().getTransect().getName()};
+ text: {flightUIModel.getCurrentRoute().getTransectFlight().getTransect().getName()};
}
#lblStatus {
- text:{flightUIModel.getCurrentRoute().getRouteType().name()};
+ text: {flightUIModel.getCurrentRoute().getRouteType().name()};
}
#cbPanel {
- background:{model.getEffortPanelColor()};
+ background: {model.getEffortPanelColor()};
}
#gpsLED {
- text:"sammoa.statusBar.gps";
+ text: "sammoa.statusBar.gps";
}
#audioLED {
- text:"sammoa.statusBar.audio";
+ text: "sammoa.statusBar.audio";
}
#indicatorPanel {
- background:{model.getEffortPanelColor()};
+ background: {model.getEffortPanelColor()};
}
#lblAlt {
- text:{model.getAlt()};
+ text: {model.getAlt()};
}
#lblSpeed {
- text:{model.getSpeed()};
+ text: {model.getSpeed()};
}
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightBar.jaxx
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightBar.jaxx 2012-08-24 17:12:53 UTC (rev 471)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightBar.jaxx 2012-08-24 17:13:35 UTC (rev 472)
@@ -22,9 +22,10 @@
<http://www.gnu.org/licenses/gpl-3.0.html>.
#L%
-->
-<Table id='statusBar' background="{model.getEffortPanelColor()}">
+<JPanel id='statusBar' layout='{new GridLayout(0,1,0,0)}'>
<import>
+ java.text.SimpleDateFormat
javax.swing.BoxLayout
javax.swing.SwingConstants
jaxx.runtime.swing.ClockWidget
@@ -44,59 +45,85 @@
<FlightBarModel id='model'/>
- <row>
- <cell fill='horizontal' weightx='0.2'>
- <ClockWidget id='lblTime'
- delay='1000'
- pattern='dd/MM/yyyy HH:mm:ss'/>
- </cell>
- <cell fill='vertical'>
- <JSeparator constructorParams='SwingConstants.VERTICAL'/>
- </cell>
- <cell fill='horizontal'>
- <JPanel id='effortButtonPanel'
- layout='{new BoxLayout(effortButtonPanel, BoxLayout.X_AXIS)}'>
- <JButton id='beginButton'/>
- <JButton id='endButton'/>
- <JButton id='nextButton'/>
- </JPanel>
- </cell>
- <cell fill='vertical'>
- <JSeparator constructorParams='SwingConstants.VERTICAL'/>
- </cell>
- <cell fill='horizontal' weightx='0.2' anchor='center'>
+ <SimpleDateFormat id='dateFormat' constructorParams='"dd/MM/yyyy HH:mm:ss"'/>
+
+ <Table id='validationBar'>
+ <row>
+ <cell fill='horizontal' weightx='0.2'>
+ <JPanel id='audioButtonPanel'
+ layout='{new BoxLayout(audioButtonPanel, BoxLayout.X_AXIS)}'>
+ <JButton id='startAudioButton'/>
+ <JButton id='stopAudioButton'/>
+ </JPanel>
+ </cell>
+ <cell fill='horizontal'>
+ <JSlider id='audioSlider' enabled='false'/>
+ </cell>
+ <cell fill='horizontal' weightx='0.2'>
+ <JPanel id='validButtonPanel'
+ layout='{new BoxLayout(validButtonPanel, BoxLayout.X_AXIS)}'>
+ <JButton id='validRouteButton'/>
+ <JButton id='validObservationButton'/>
+ </JPanel>
+ </cell>
+ </row>
+ </Table>
+ <Table id='stateBar'>
+ <row>
+ <cell fill='horizontal' weightx='0.2'>
+ <ClockWidget id='clockTime'/>
+ </cell>
+ <cell fill='horizontal' weightx='0.2'>
+ <JLabel id='audioTime'/>
+ </cell>
+ <cell fill='vertical'>
+ <JSeparator constructorParams='SwingConstants.VERTICAL'/>
+ </cell>
+ <cell fill='horizontal'>
+ <JPanel id='effortButtonPanel'
+ layout='{new BoxLayout(effortButtonPanel, BoxLayout.X_AXIS)}'>
+ <JButton id='beginButton'/>
+ <JButton id='endButton'/>
+ <JButton id='nextButton'/>
+ </JPanel>
+ </cell>
+ <cell fill='vertical'>
+ <JSeparator constructorParams='SwingConstants.VERTICAL'/>
+ </cell>
+ <cell fill='horizontal' weightx='0.2' anchor='center'>
<JLabel id='lblEffort'/>
- </cell>
- <cell fill='vertical'>
- <JSeparator constructorParams='SwingConstants.VERTICAL'/>
- </cell>
- <cell fill='horizontal' weightx='0.2' anchor='center'>
+ </cell>
+ <cell fill='vertical'>
+ <JSeparator constructorParams='SwingConstants.VERTICAL'/>
+ </cell>
+ <cell fill='horizontal' weightx='0.2' anchor='center'>
<JLabel id='lblTransect'/>
- </cell>
- <cell fill='vertical'>
- <JSeparator constructorParams='SwingConstants.VERTICAL'/>
- </cell>
- <cell fill='horizontal' weightx='0.2' anchor='center'>
- <JLabel id='lblStatus'/>
- </cell>
- <cell fill='vertical'>
- <JSeparator constructorParams='SwingConstants.VERTICAL'/>
- </cell>
- <cell fill='horizontal' weightx='0.2' anchor='center'>
- <JPanel id='cbPanel' layout='{new BoxLayout(cbPanel, BoxLayout.Y_AXIS)}'>
- <DeviceStateLED id='gpsLED' />
- <DeviceStateLED id='audioLED' />
- </JPanel>
- </cell>
- <cell fill='vertical'>
- <JSeparator constructorParams='SwingConstants.VERTICAL'/>
- </cell>
- <cell fill='horizontal' weightx='0.2' anchor='center'>
- <JPanel id='indicatorPanel'
- layout='{new BoxLayout(indicatorPanel, BoxLayout.Y_AXIS)}'>
- <JLabel id='lblAlt'/>
- <JLabel id='lblSpeed'/>
- </JPanel>
- </cell>
- </row>
-</Table>
+ </cell>
+ <cell fill='vertical'>
+ <JSeparator constructorParams='SwingConstants.VERTICAL'/>
+ </cell>
+ <cell fill='horizontal' weightx='0.2' anchor='center'>
+ <JLabel id='lblStatus'/>
+ </cell>
+ <cell fill='vertical'>
+ <JSeparator constructorParams='SwingConstants.VERTICAL'/>
+ </cell>
+ <cell fill='horizontal' weightx='0.2' anchor='center'>
+ <JPanel id='cbPanel' layout='{new BoxLayout(cbPanel, BoxLayout.Y_AXIS)}'>
+ <DeviceStateLED id='gpsLED' />
+ <DeviceStateLED id='audioLED' />
+ </JPanel>
+ </cell>
+ <cell fill='vertical'>
+ <JSeparator constructorParams='SwingConstants.VERTICAL'/>
+ </cell>
+ <cell fill='horizontal' weightx='0.2' anchor='center'>
+ <JPanel id='indicatorPanel'
+ layout='{new BoxLayout(indicatorPanel, BoxLayout.Y_AXIS)}'>
+ <JLabel id='lblAlt'/>
+ <JLabel id='lblSpeed'/>
+ </JPanel>
+ </cell>
+ </row>
+ </Table>
+</JPanel>
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightBarHandler.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightBarHandler.java 2012-08-24 17:12:53 UTC (rev 471)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightBarHandler.java 2012-08-24 17:13:35 UTC (rev 472)
@@ -30,7 +30,6 @@
import fr.ulr.sammoa.application.flightController.FlightState;
import fr.ulr.sammoa.persistence.Route;
import fr.ulr.sammoa.ui.swing.SammoaColors;
-import fr.ulr.sammoa.ui.swing.SammoaUIContext;
import jaxx.runtime.JAXXUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -44,7 +43,7 @@
private static final Logger logger =
LoggerFactory.getLogger(FlightBarHandler.class);
- protected FlightBar ui;
+ protected final FlightBar ui;
public FlightBarHandler(FlightBar ui) {
this.ui = ui;
@@ -60,15 +59,26 @@
public void init() {
- ui.getFlightUIModel().addPropertyChangeListener(this);
+ FlightUIModel flightUIModel = ui.getFlightUIModel();
+ flightUIModel.addPropertyChangeListener(this);
+
FlightController flightController =
ui.getContextValue(FlightUIHandler.class).getFlightController();
- if (SammoaUIContext.getUIContext().isValidationMode()) {
- // nothing
+ if (flightUIModel.isValidationMode()) {
+
+ // Put actionName for validation buttons
+ ui.getStartAudioButton().putClientProperty("actionName", "startAudio");
+ ui.getStopAudioButton().putClientProperty("actionName", "stopAudio");
+ ui.getValidObservationButton().putClientProperty("actionName", "validObservation");
+ ui.getValidRouteButton().putClientProperty("actionName", "validRoute");
+
} else {
+ // Remove the bar used only for validation
+ ui.remove(ui.getValidationBar());
+
AudioRecorder audioRecorder = flightController.getDeviceManager(AudioRecorder.class);
ui.getAudioLED().setState(audioRecorder.getState());
audioRecorder.addDeviceStateListener(ui.getAudioLED());
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUIHandler.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUIHandler.java 2012-08-24 17:12:53 UTC (rev 471)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUIHandler.java 2012-08-24 17:13:35 UTC (rev 472)
@@ -97,7 +97,11 @@
import fr.ulr.sammoa.ui.swing.action.NextTransectAction;
import fr.ulr.sammoa.ui.swing.action.RightObservationAction;
import fr.ulr.sammoa.ui.swing.action.StartAction;
+import fr.ulr.sammoa.ui.swing.action.StartAudioAction;
import fr.ulr.sammoa.ui.swing.action.StopAction;
+import fr.ulr.sammoa.ui.swing.action.StopAudioAction;
+import fr.ulr.sammoa.ui.swing.action.ValidObservationAction;
+import fr.ulr.sammoa.ui.swing.action.ValidRouteAction;
import fr.ulr.sammoa.ui.swing.flight.layer.BaseGeoPointLayer;
import fr.ulr.sammoa.ui.swing.flight.layer.LineGeoPointLayer;
import fr.ulr.sammoa.ui.swing.flight.layer.SimpleGeoPointLayer;
@@ -177,7 +181,7 @@
protected final UIDecoratorService decoratorService;
- protected final FlightController flightController;
+ protected FlightController flightController;
public FlightUIHandler(SammoaUIContext context, FlightUI ui) {
this.context = context;
@@ -187,13 +191,6 @@
this.flightService = context.getService(FlightService.class);
this.referentialService = context.getService(ReferentialService.class);
this.decoratorService = context.getService(UIDecoratorService.class);
-
- if (context.isValidationMode()) {
- this.flightController = context.getService(FlightControllerValidation.class);
-
- } else {
- this.flightController = context.getService(FlightControllerOnBoard.class);
- }
}
public FlightController getFlightController() {
@@ -246,9 +243,9 @@
startTime = timeLog.log(startTime, "beforeInitUI", "entities are loaded");
- flightController.addFlightControllerListener(this);
-
if (context.isValidationMode()) {
+ flightController = context.getService(FlightControllerValidation.class);
+ flightController.addFlightControllerListener(this);
if (logger.isDebugEnabled()) {
logger.debug("Open devices for VALIDATION");
@@ -257,6 +254,8 @@
openDevice(AudioReader.class);
} else {
+ flightController = context.getService(FlightControllerOnBoard.class);
+ flightController.addFlightControllerListener(this);
if (logger.isDebugEnabled()) {
logger.debug("Open devices for ON_BOARD");
@@ -274,6 +273,7 @@
flightController.init(flight);
+ model.setValidationMode(context.isValidationMode());
model.setObservers(referentialObservers);
model.setFlight(flight);
model.setFlightObserverForPositions(observers);
@@ -731,6 +731,12 @@
putAction("centerObservation", new CenterObservationAction(ui));
putAction("rightObservation", new RightObservationAction(ui));
putAction("circleBack", new CircleBackAction(ui));
+ if (getModel().isValidationMode()) {
+ putAction("validObservation", new ValidObservationAction(ui));
+ putAction("validRoute", new ValidRouteAction(ui));
+ putAction("startAudio", new StartAudioAction(ui));
+ putAction("stopAudio", new StopAudioAction(ui));
+ }
getModel().setActionMap(getActionMap());
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUIModel.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUIModel.java 2012-08-24 17:12:53 UTC (rev 471)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUIModel.java 2012-08-24 17:13:35 UTC (rev 472)
@@ -32,10 +32,10 @@
import fr.ulr.sammoa.persistence.Observer;
import fr.ulr.sammoa.persistence.Route;
import fr.ulr.sammoa.persistence.TransectFlight;
-import jaxx.runtime.validator.swing.SwingValidatorMessageTableModel;
import org.jdesktop.beans.AbstractSerializableBean;
import javax.swing.ActionMap;
+import java.util.Collection;
import java.util.List;
/**
@@ -63,7 +63,7 @@
public static final String PROPERTY_ROUTES = "routes";
- public static final String PROPERTY_VALIDATOR_TABLE_MODEL = "validatorTableModel";
+// public static final String PROPERTY_VALIDATOR_TABLE_MODEL = "validatorTableModel";
public static final String PROPERTY_OBSERVATION_EDIT_BEAN = "observationEditBean";
@@ -83,6 +83,8 @@
public static final String PROPERTY_GEO_POINTS = "geoPoints";
+ public static final String PROPERTY_VALIDATION_MODE = "validationMode";
+
protected Flight flight;
protected List<Observer> observers;
@@ -139,8 +141,10 @@
protected List<GeoPoint> geoPoints;
- protected SwingValidatorMessageTableModel validatorTableModel
- = new SwingValidatorMessageTableModel();
+ protected boolean validationMode;
+//
+// protected SwingValidatorMessageTableModel validatorTableModel
+// = new SwingValidatorMessageTableModel();
public Flight getFlight() {
return flight;
@@ -217,17 +221,36 @@
}
public void setObservations(List<Observation> observations) {
- List<Observation> oldValue = Lists.newArrayList(getObservations());
this.observations = observations;
- firePropertyChange(PROPERTY_OBSERVATIONS, oldValue, observations);
+ firePropertyChange(PROPERTY_OBSERVATIONS, null, observations);
}
public void addObservation(Observation observation) {
+ List<Observation> oldValue = Lists.newArrayList(getObservations());
int index = getObservations().size();
getObservations().add(observation);
- setObservationEditBean(observation);
- fireIndexedPropertyChange(PROPERTY_OBSERVATIONS, index, null, observation);
+ fireIndexedPropertyChange(PROPERTY_OBSERVATIONS, index, oldValue, getObservations());
}
+
+ public void removeObservation(Observation observation) {
+ List<Observation> oldValue = Lists.newArrayList(getObservations());
+ int index = getObservations().indexOf(observation);
+ getObservations().remove(index);
+ fireIndexedPropertyChange(PROPERTY_OBSERVATIONS, index, oldValue, getObservations());
+ }
+
+ public void clearObservation() {
+ List<Observation> oldValue = Lists.newArrayList(getObservations());
+ getObservations().clear();
+ firePropertyChange(PROPERTY_OBSERVATIONS, oldValue, getObservations());
+ }
+
+ public void addAllObservation(Collection<Observation> observations) {
+ List<Observation> oldValue = Lists.newArrayList(getObservations());
+ getObservations().addAll(observations);
+ firePropertyChange(PROPERTY_OBSERVATIONS, oldValue, getObservations());
+ }
+
public List<Route> getRoutes() {
if (routes == null) {
routes = Lists.newArrayList();
@@ -254,20 +277,28 @@
}
public void addRoute(int index, Route route) {
+ List<Route> oldValue = Lists.newArrayList(getRoutes());
getRoutes().add(index, route);
- fireIndexedPropertyChange(PROPERTY_ROUTES, index, null, route);
+ fireIndexedPropertyChange(PROPERTY_ROUTES, index, oldValue, getRoutes());
}
- public SwingValidatorMessageTableModel getValidatorTableModel() {
- return validatorTableModel;
+ public void removeRoute(Route route) {
+ List<Route> oldValue = Lists.newArrayList(getRoutes());
+ int index = getRoutes().indexOf(route);
+ getRoutes().remove(index);
+ fireIndexedPropertyChange(PROPERTY_ROUTES, index, oldValue, getRoutes());
}
+//
+// public SwingValidatorMessageTableModel getValidatorTableModel() {
+// return validatorTableModel;
+// }
+//
+// public void setValidatorTableModel(SwingValidatorMessageTableModel validatorTableModel) {
+// SwingValidatorMessageTableModel oldValidatorTableModel = validatorTableModel;
+// this.validatorTableModel = validatorTableModel;
+// firePropertyChange(PROPERTY_VALIDATOR_TABLE_MODEL, oldValidatorTableModel, validatorTableModel);
+// }
- public void setValidatorTableModel(SwingValidatorMessageTableModel validatorTableModel) {
- SwingValidatorMessageTableModel oldValidatorTableModel = validatorTableModel;
- this.validatorTableModel = validatorTableModel;
- firePropertyChange(PROPERTY_VALIDATOR_TABLE_MODEL, oldValidatorTableModel, validatorTableModel);
- }
-
public Observation getObservationEditBean() {
return observationEditBean;
}
@@ -392,4 +423,14 @@
this.geoPoints = geoPoints;
firePropertyChange(PROPERTY_GEO_POINTS, oldValue, geoPoints);
}
+
+ public boolean isValidationMode() {
+ return validationMode;
+ }
+
+ public void setValidationMode(boolean validationMode) {
+ boolean oldValue = isValidationMode();
+ this.validationMode = validationMode;
+ firePropertyChange(PROPERTY_VALIDATION_MODE, oldValue, validationMode);
+ }
}
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/observations/EffortPanelHandler.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/observations/EffortPanelHandler.java 2012-08-24 17:12:53 UTC (rev 471)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/observations/EffortPanelHandler.java 2012-08-24 17:13:35 UTC (rev 472)
@@ -119,6 +119,12 @@
protected static final Color DEVICE_ERROR_BACKGROUND_COLOR = Color.RED;
+ public static final String ROUTE_VALIDATOR_CONTEXT_VALUE =
+ "routeimplValidator";
+
+ public static final String OBSERVATION_VALIDATOR_CONTEXT_VALUE =
+ "observationimplValidator";
+
protected boolean comboIsAdjusting;
private final SammoaUIContext context;
@@ -166,13 +172,14 @@
);
FlightUIModel flightUIModel = ui.getFlightUIModel();
- String validatorContext = context.isValidationMode() ? "validation" : "onBoard";
+ String validatorContext = flightUIModel.isValidationMode() ? "validation" : "onBoard";
// init route section
{
BeanListValidator<Route> validator = ui.getRouteValidator();
validator.setContext(validatorContext);
+ getParentUI().setContextValue(validator, ROUTE_VALIDATOR_CONTEXT_VALUE);
RouteTableModel tableModel = ui.getRouteTableModel();
@@ -214,7 +221,7 @@
logger.info("Select route from index {}", newSelectedRow);
}
- if (context.isValidationMode()) {
+ if (flightUIModel.isValidationMode()) {
getParentUI().getHandler().getFlightController().setCurrentRoute(route);
}
@@ -312,10 +319,14 @@
// init observation section
{
+ BeanListValidator<Observation> validator = ui.getObservationValidator();
+ validator.setContext(validatorContext);
+ getParentUI().setContextValue(validator, OBSERVATION_VALIDATOR_CONTEXT_VALUE);
+
FlightController flightController =
getParentUI().getHandler().getFlightController();
- if (context.isValidationMode()) {
+ if (flightUIModel.isValidationMode()) {
// nothing for the moment
@@ -484,9 +495,6 @@
column.setCellEditor(editorRenderer);
column.setCellRenderer(editorRenderer);
- BeanListValidator<Observation> validator = ui.getObservationValidator();
- validator.setContext(validatorContext);
-
ObservationValidatorDataLocator dataLocator =
new ObservationValidatorDataLocator();
@@ -636,7 +644,8 @@
// make tab key to focus only next editable cell
table.setSelectionModel(new ForceSelectionSelectionModel());
- table.setSortable(context.isValidationMode());
+// table.setSortable(context.isValidationMode());
+ table.setSortable(false);
table.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/observations/ObservationTableModel.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/observations/ObservationTableModel.java 2012-08-24 17:12:53 UTC (rev 471)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/observations/ObservationTableModel.java 2012-08-24 17:13:35 UTC (rev 472)
@@ -78,8 +78,9 @@
@Override
public boolean isCellEditable(int row, int column) {
+ Observation observation = getBean(row);
ObservationColumn observationColumn = ObservationColumn.valueOf(column);
- boolean result = observationColumn.isEditable();
+ boolean result = observationColumn.isEditable(observation);
return result;
}
@@ -231,8 +232,8 @@
}
}
- public boolean isEditable() {
- boolean result = editable;
+ public boolean isEditable(Observation bean) {
+ boolean result = !bean.isValid() && editable;
return result;
}
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/observations/RouteTableModel.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/observations/RouteTableModel.java 2012-08-24 17:12:53 UTC (rev 471)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/observations/RouteTableModel.java 2012-08-24 17:13:35 UTC (rev 472)
@@ -209,7 +209,7 @@
}
public boolean isEditable(Route bean) {
- boolean result = editable;
+ boolean result = !bean.isValid() && editable;
return result;
}
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/DeletedRowHighlightPredicate.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/DeletedRowHighlightPredicate.java 2012-08-24 17:12:53 UTC (rev 471)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/DeletedRowHighlightPredicate.java 2012-08-24 17:13:35 UTC (rev 472)
@@ -1,4 +1,27 @@
package fr.ulr.sammoa.ui.swing.util;
+/*
+ * #%L
+ * SAMMOA :: UI Swing
+ * $Id:$
+ * $HeadURL:$
+ * %%
+ * Copyright (C) 2012 UMS 3462, Code Lutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU 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 Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
import fr.ulr.sammoa.persistence.Deletable;
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/TableDataChangeListener.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/TableDataChangeListener.java 2012-08-24 17:12:53 UTC (rev 471)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/TableDataChangeListener.java 2012-08-24 17:13:35 UTC (rev 472)
@@ -24,11 +24,14 @@
*/
import org.jdesktop.swingx.JXTable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import javax.swing.table.AbstractTableModel;
import java.beans.IndexedPropertyChangeEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
+import java.util.Collection;
/**
* Created: 17/07/12
@@ -37,6 +40,9 @@
*/
public class TableDataChangeListener implements PropertyChangeListener {
+ /** Logger. */
+ private static final Logger logger = LoggerFactory.getLogger(TableDataChangeListener.class);
+
public static final int NO_COLUMN_INDEX_TO_EDIT_ON_INSERT = -1;
protected JXTable table;
@@ -51,30 +57,70 @@
@Override
public void propertyChange(PropertyChangeEvent evt) {
- if (evt instanceof IndexedPropertyChangeEvent) {
- final int rowIndex = ((IndexedPropertyChangeEvent) evt).getIndex();
- Object oldValue = evt.getOldValue();
- Object newValue = evt.getNewValue();
+ // All data is fired
+ if (evt.getOldValue() == null) {
+ tableModel.fireTableDataChanged();
- if (oldValue == null) {
- tableModel.fireTableRowsInserted(rowIndex, rowIndex);
+ } else {
- int columnIndex = getFirstEditableColumn(rowIndex);
- if (columnIndex != NO_COLUMN_INDEX_TO_EDIT_ON_INSERT) {
- table.changeSelection(rowIndex, columnIndex, false, false);
- table.editCellAt(rowIndex, columnIndex);
+ int oldSize = ((Collection) evt.getOldValue()).size();
+ int newSize = ((Collection) evt.getNewValue()).size();
+
+ int rowIndex;
+ if (evt instanceof IndexedPropertyChangeEvent) {
+ rowIndex = ((IndexedPropertyChangeEvent) evt).getIndex();
+ } else {
+ rowIndex = -1;
+ }
+
+ if (logger.isDebugEnabled()) {
+ logger.debug("Fire table change oldSize:{}, newSize:{}, index:{}",
+ new Object[]{oldSize, newSize, rowIndex});
+ }
+
+ // INSERT
+ if (oldSize < newSize) {
+
+ if (rowIndex == -1) {
+ tableModel.fireTableRowsInserted(oldSize, newSize -1);
+ if (oldSize > 0) {
+ tableModel.fireTableRowsUpdated(0, oldSize - 1);
+ }
+
+ } else {
+ tableModel.fireTableRowsInserted(rowIndex, rowIndex);
+
+ int columnIndex = getFirstEditableColumn(rowIndex);
+ if (columnIndex != NO_COLUMN_INDEX_TO_EDIT_ON_INSERT) {
+ table.changeSelection(rowIndex, columnIndex, false, false);
+ table.editCellAt(rowIndex, columnIndex);
+ }
}
- } else if (newValue == null) {
- tableModel.fireTableRowsDeleted(rowIndex, rowIndex);
+ // DELETE
+ } else if (oldSize > newSize) {
+ if (rowIndex == -1) {
+ tableModel.fireTableRowsDeleted(newSize, oldSize - 1);
+ if (newSize > 0) {
+ tableModel.fireTableRowsUpdated(0, newSize - 1);
+ }
+
+ } else {
+ tableModel.fireTableRowsDeleted(rowIndex, rowIndex);
+ }
+
+ // UPDATE
} else {
- tableModel.fireTableRowsUpdated(rowIndex, rowIndex);
+
+ if (rowIndex == -1) {
+ tableModel.fireTableRowsUpdated(0, newSize - 1);
+
+ } else {
+ tableModel.fireTableRowsUpdated(rowIndex, rowIndex);
+ }
}
-
- } else {
- tableModel.fireTableDataChanged();
}
}
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/ValidRowHighlightPredicate.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/ValidRowHighlightPredicate.java 2012-08-24 17:12:53 UTC (rev 471)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/ValidRowHighlightPredicate.java 2012-08-24 17:13:35 UTC (rev 472)
@@ -1,4 +1,27 @@
package fr.ulr.sammoa.ui.swing.util;
+/*
+ * #%L
+ * SAMMOA :: UI Swing
+ * $Id:$
+ * $HeadURL:$
+ * %%
+ * Copyright (C) 2012 UMS 3462, Code Lutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU 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 Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
import fr.ulr.sammoa.persistence.Validatable;
Modified: trunk/sammoa-ui-swing/src/main/resources/i18n/sammoa-ui-swing_en_GB.properties
===================================================================
--- trunk/sammoa-ui-swing/src/main/resources/i18n/sammoa-ui-swing_en_GB.properties 2012-08-24 17:12:53 UTC (rev 471)
+++ trunk/sammoa-ui-swing/src/main/resources/i18n/sammoa-ui-swing_en_GB.properties 2012-08-24 17:13:35 UTC (rev 472)
@@ -3,6 +3,7 @@
sammoa.action.about=About
sammoa.action.about.tip=About
sammoa.action.add.tip=ADD \: create a new LEG route for the current Transect (the observation conditions have changed)
+sammoa.action.begin=Begin
sammoa.action.begin.tip=BEGIN \: begin effort to create a new LEG route for the next selected Transect
sammoa.action.cancel=Cancel
sammoa.action.cancelExport=Cancel
@@ -14,6 +15,7 @@
sammoa.action.configuration.tip=Configuration
sammoa.action.create=Create
sammoa.action.edit=Edit
+sammoa.action.end=End
sammoa.action.end.tip=END \: end effort and create a new TRANSIT route
sammoa.action.exportApplication=Export
sammoa.action.exportEffortsMap=Export Efforts
@@ -26,6 +28,7 @@
sammoa.action.left.tip=LEFT \: create a new Observation for the observer on the left side
sammoa.action.loadImportApplicationFile=Load selected import file
sammoa.action.new=New
+sammoa.action.next=Next
sammoa.action.next.tip=NEXT \: end previous effort and create a new LEG route for the next selected Transect
sammoa.action.nextTransect.tip=NEXT TRANSECT \: choose this transect to be the next one
sammoa.action.onBoard=On Board
@@ -39,8 +42,14 @@
sammoa.action.site=Site
sammoa.action.site.tip=Display project site
sammoa.action.start.tip=START \: start the flight and create a new TRANSIT route
+sammoa.action.startAudio.tip=Start audio
sammoa.action.startExport=Start
sammoa.action.stop.tip=STOP \: stop the flight. No other actions on routes and observations could be done after stop.
+sammoa.action.stopAudio.tip=Stop audio
+sammoa.action.validObservation=Observation
+sammoa.action.validObservation.tip=Validate the selected observation
+sammoa.action.validRoute=Route
+sammoa.action.validRoute.tip=Validate the selected route and all its observations
sammoa.action.validation=Validation
sammoa.config.category.applications=Application
sammoa.config.category.applications.description=Application
1
0
24 Aug '12
Author: fdesbois
Date: 2012-08-24 19:12:53 +0200 (Fri, 24 Aug 2012)
New Revision: 471
Url: http://forge.codelutin.com/repositories/revision/sammoa/471
Log:
refs #1204 :
- resolve issue with currentRoute selection
- resolve issue with new route time
Modified:
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/DecoratorService.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/BaseFlightController.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/FlightControllerValidation.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/RouteEvent.java
trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/GeoPoints.java
trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Routes.java
trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/TransectFlightImpl.java
trunk/sammoa-persistence/src/test/java/fr/ulr/sammoa/persistence/GeoPointsTest.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUIHandler.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUIModel.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/observations/EffortPanel.css
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/observations/EffortPanel.jaxx
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/observations/EffortPanelHandler.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/TableDataChangeListener.java
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/DecoratorService.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/DecoratorService.java 2012-08-24 17:12:30 UTC (rev 470)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/DecoratorService.java 2012-08-24 17:12:53 UTC (rev 471)
@@ -79,8 +79,8 @@
decoratorProvider = new DecoratorProvider() {
@Override
protected void loadDecorators() {
- registerJXPathDecorator(Route.class, "${beginTime}$tH:%1$tM:%1$tS ${routeType}$s");
- registerJXPathDecorator(Observation.class, "${observationNumber}$s ${observationTime}$tH:%2$tM:%2$tS");
+ registerJXPathDecorator(Route.class, "${routeType}$s ${beginTime}$tH:%2$tM:%2$tS");
+ registerJXPathDecorator(Observation.class, "Obs_${observationNumber}$s ${observationTime}$tH:%2$tM:%2$tS");
registerJXPathDecorator(Transect.class, "${name}$s");
registerJXPathDecorator(Observer.class, "${initials}$s");
registerMultiJXPathDecorator(Strate.class, "${code}$s##${name}$s", "##", " - ");
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/BaseFlightController.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/BaseFlightController.java 2012-08-24 17:12:30 UTC (rev 470)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/BaseFlightController.java 2012-08-24 17:12:53 UTC (rev 471)
@@ -223,9 +223,10 @@
// Start with TRANSIT route
if (logger.isInfoEnabled()) {
- logger.info(String.format("Create TRANSIT [START] at %1$tH:%1$tM:%1$tS", currentDate));
+ logger.info(String.format("Create TRANSIT [START] at %1$tH:%1$tM:%1$tS.%1$tL", currentDate));
}
- currentRoute = service.createTransit(transaction, flight, currentDate, currentRoute);
+ Route previousRoute = currentRoute;
+ currentRoute = service.createTransit(transaction, flight, currentDate, previousRoute);
// Auto selection of the next transect starting from the begining
nextTransect = flight.getNextTransectFlightFrom(null);
@@ -237,7 +238,7 @@
startTime = timeLog.log(startTime, "start()", "Commited");
// Fire events after commit
- fireRouteAdded(currentRoute);
+ fireRouteAdded(previousRoute, currentRoute);
fireNextTransectChanged(nextTransect);
fireStateChanged(state);
@@ -363,9 +364,10 @@
// Create new LEG route
if (logger.isInfoEnabled()) {
- logger.info(String.format("Create LEG [BEGIN] at %1$tH:%1$tM:%1$tS", currentDate));
+ logger.info(String.format("Create LEG [BEGIN] at %1$tH:%1$tM:%1$tS.%1$tL", currentDate));
}
- currentRoute = service.createLeg(transaction, flight, currentDate, currentRoute, lastTransect);
+ Route previousRoute = currentRoute;
+ currentRoute = service.createLeg(transaction, flight, currentDate, previousRoute, lastTransect);
// automatic selection of the next transect
nextTransect = flight.getNextTransectFlightFrom(lastTransect);
@@ -377,7 +379,7 @@
startTime = timeLog.log(startTime, "begin()", "Commited");
// Fire events after commit
- fireRouteAdded(currentRoute);
+ fireRouteAdded(previousRoute, currentRoute);
fireNextTransectChanged(nextTransect);
fireStateChanged(state);
@@ -416,11 +418,11 @@
// Create CIRCLE_BACK
if (logger.isInfoEnabled()) {
- logger.info(String.format("Create CIRCLE_BACK at %1$tH:%1$tM:%1$tS", currentDate));
+ logger.info(String.format("Create CIRCLE_BACK at %1$tH:%1$tM:%1$tS.%1$tL", currentDate));
}
+ Route previousRoute = currentRoute;
+ currentRoute = service.createCircleBack(transaction, flight, currentDate, previousRoute, observation);
- currentRoute = service.createCircleBack(transaction, flight, currentDate, currentRoute, observation);
-
nextTransect = lastTransect;
state = FlightState.OFF_EFFORT;
@@ -430,7 +432,7 @@
startTime = timeLog.log(startTime, "circleBack()", "Commited");
// Fire events after commit
- fireRouteAdded(currentRoute);
+ fireRouteAdded(previousRoute, currentRoute);
fireNextTransectChanged(nextTransect);
fireStateChanged(state);
@@ -464,16 +466,17 @@
// Create new LEG route
if (logger.isInfoEnabled()) {
- logger.info(String.format("Create LEG [ADD] at %1$tH:%1$tM:%1$tS", currentDate));
+ logger.info(String.format("Create LEG [ADD] at %1$tH:%1$tM:%1$tS.%1$tL", currentDate));
}
- currentRoute = service.createLeg(transaction, flight, currentDate, currentRoute, lastTransect);
+ Route previousRoute = currentRoute;
+ currentRoute = service.createLeg(transaction, flight, currentDate, previousRoute, lastTransect);
transaction.commitTransaction();
startTime = timeLog.log(startTime, "add()", "Commited");
// Fire events after commit
- fireRouteAdded(currentRoute);
+ fireRouteAdded(previousRoute, currentRoute);
timeLog.log(startTime, "add()", "Fired");
@@ -570,7 +573,7 @@
}
if (logger.isInfoEnabled()) {
- logger.info(String.format("Create Observation %2$s at %1$tH:%1$tM:%1$tS (observer = %3$s)",
+ logger.info(String.format("Create Observation %2$s at %1$tH:%1$tM:%1$tS.%1$tL (observer = %3$s)",
currentDate,
position,
observer != null && observer.getObserver() != null
@@ -615,16 +618,17 @@
// Create new TRANSIT route
if (logger.isInfoEnabled()) {
- logger.info(String.format("Create TRANSIT [END] at %1$tH:%1$tM:%1$tS", currentDate));
+ logger.info(String.format("Create TRANSIT [END] at %1$tH:%1$tM:%1$tS.%1$tL", currentDate));
}
- currentRoute = service.createTransit(transaction, flight, currentDate, currentRoute);
+ Route previousRoute = currentRoute;
+ currentRoute = service.createTransit(transaction, flight, currentDate, previousRoute);
state = FlightState.OFF_EFFORT;
transaction.commitTransaction();
// Fire events after commit
- fireRouteAdded(currentRoute);
+ fireRouteAdded(previousRoute, currentRoute);
fireNextTransectChanged(nextTransect);
fireStateChanged(state);
@@ -657,7 +661,7 @@
Date currentDate = geoPoint.getRecordTime();
if (logger.isInfoEnabled()) {
- logger.info(String.format("Stop flight %2$d at %1$tH:%1$tM:%1$tS",
+ logger.info(String.format("Stop flight %2$d at %1$tH:%1$tM:%1$tS.%1$tL",
currentDate,
flight.getFlightNumber())
);
@@ -778,16 +782,16 @@
}
}
- protected void fireRouteAdded(Route newRoute) {
+ protected void fireRouteAdded(Route previousRoute, Route newRoute) {
Preconditions.checkNotNull(newRoute);
- RouteEvent event = new RouteEvent(this, newRoute, true);
+ RouteEvent event = new RouteEvent(this, newRoute, true, previousRoute);
for (FlightControllerListener listener : listeners) {
listener.onCurrentRouteChanged(event);
}
}
protected void fireCurrentRouteChanged(Route route) {
- RouteEvent event = new RouteEvent(this, route, false);
+ RouteEvent event = new RouteEvent(this, route, false, null);
for (FlightControllerListener listener : listeners) {
listener.onCurrentRouteChanged(event);
}
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/FlightControllerValidation.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/FlightControllerValidation.java 2012-08-24 17:12:30 UTC (rev 470)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/FlightControllerValidation.java 2012-08-24 17:12:53 UTC (rev 471)
@@ -5,10 +5,12 @@
import fr.ulr.sammoa.application.device.audio.AudioReader;
import fr.ulr.sammoa.persistence.Flight;
import fr.ulr.sammoa.persistence.GeoPoint;
+import fr.ulr.sammoa.persistence.GeoPointImpl;
import fr.ulr.sammoa.persistence.GeoPoints;
import fr.ulr.sammoa.persistence.Route;
import fr.ulr.sammoa.persistence.Routes;
import fr.ulr.sammoa.persistence.SammoaDAOHelper;
+import fr.ulr.sammoa.persistence.TransectFlight;
import org.apache.commons.lang3.time.DateUtils;
import org.nuiton.topia.TopiaContext;
import org.nuiton.topia.TopiaException;
@@ -24,7 +26,8 @@
*
* @author fdesbois <florian.desbois(a)codelutin.com>
*/
-public class FlightControllerValidation extends BaseFlightController {
+public class FlightControllerValidation extends BaseFlightController
+implements FlightControllerListener {
private static final Logger logger = LoggerFactory.getLogger(FlightControllerValidation.class);
@@ -32,6 +35,8 @@
protected List<GeoPoint> geoPoints;
+ protected List<Route> routes;
+
@Override
public <T extends DeviceManager> void openDeviceManager(Class<T> deviceManager) {
getDeviceManagerProvider().openDeviceManager(deviceManager, false);
@@ -45,9 +50,12 @@
super.init(flight);
+ addFlightControllerListener(this);
+
initCurrentRoute(null);
geoPoints = service.getFlightGeoPoints(flight);
+ routes = service.getRoutes(flight);
}
@Override
@@ -68,38 +76,102 @@
Preconditions.checkNotNull(currentRoute, "You must set the current route to retrieve location");
Preconditions.checkState(!geoPoints.isEmpty(), "No geoPoints available");
- Date time = currentRoute.getBeginTime();
+ GeoPoint result;
+ Date previousTime = currentRoute.getBeginTime();
+
+ if (logger.isDebugEnabled()) {
+ logger.debug(String.format("Get location after previousTime %1$tH:%1$tM:%1$tS.%1$tL",
+ previousTime)
+ );
+ }
+
long position = audioReader.getPosition();
+
+ Date newTime;
if (position > 0) {
- time = DateUtils.addMilliseconds(time, (int) position);
- // Allow creating any route after a LEG with different time
- // to avoid constraints error (naturalId = routeType + flight + beginTime)
- } else if (Routes.isRouteLeg(currentRoute)) {
- time = DateUtils.addMilliseconds(time, 1);
+ newTime = DateUtils.addMilliseconds(previousTime, (int) position);
+
+ } else {
+
+ // Arbitrary add 1 second for the newTime
+ newTime = DateUtils.addMilliseconds(previousTime, 1000);
+
+ // Ensure that newTime is before nextRoute time
+ Route nextRoute = Routes.findNext(routes, currentRoute);
+ if (nextRoute != null) {
+
+ logger.debug(String.format("Next route %1$s at %2$tH:%2$tM:%2$tS.%2$tL",
+ nextRoute.getRouteType(),
+ nextRoute.getBeginTime())
+ );
+
+ // If greater or equals than the nextRoute, we use the middle
+ // time between previous and next route
+ if (newTime.after(nextRoute.getBeginTime())
+ || newTime.equals(nextRoute.getBeginTime())) {
+
+ newTime = Routes.getMiddleTime(currentRoute, nextRoute);
+ }
+ }
}
- int index = GeoPoints.getClosestPointIndex(geoPoints, time);
+ if (logger.isDebugEnabled()) {
+ logger.debug(String.format("Get location at newTime %1$tH:%1$tM:%1$tS.%1$tL",
+ newTime)
+ );
+ }
- GeoPoint result = geoPoints.get(index);
+ // Retrieve the appropriate location
+ GeoPoint location = GeoPoints.getClosestPoint(geoPoints, newTime);
- // Maybe a problem when using same time for previous/next searches
- // Note that the captureDelay is keeped but maybe we need to update it
- // depends on modified time ?
+ // Create a new location if no one is available for the newTime
+ if (!location.getRecordTime().equals(newTime)) {
- // Create a new entity for the new time
- if (!result.getRecordTime().equals(time)) {
+ // Note that the captureDelay is keeped but maybe we need to update it
+ // depends on modified time ?
+ result = new GeoPointImpl(location.getLatitude(), location.getLongitude());
+ result.setSpeed(location.getSpeed());
+ result.setAltitude(location.getAltitude());
+ result.setCaptureDelay(location.getCaptureDelay());
+ result.setFlight(flight);
+ result.setRecordTime(newTime);
+ SammoaDAOHelper.getGeoPointDAO(tx).create(result);
+ geoPoints.add(result);
- GeoPoint newPoint = GeoPoints.copy(result);
- newPoint.setRecordTime(time);
- SammoaDAOHelper.getGeoPointDAO(tx).create(newPoint);
- geoPoints.add(index, newPoint);
-
if (logger.isDebugEnabled()) {
- logger.debug("Create a new GeoPoint : {}", newPoint);
+ logger.debug("Create a new GeoPoint : {}", result);
}
+
+ } else {
+ result = location;
}
return result;
}
+
+ @Override
+ public void onCurrentRouteChanged(RouteEvent event) {
+ if (event.isNew()) {
+ if (logger.isDebugEnabled()) {
+ logger.debug("Add route {} to cache", Routes.toString(event.getRoute()));
+ }
+ routes.add(event.getRoute());
+ }
+ }
+
+ @Override
+ public void onNextTransectChanged(TransectFlight nextTransect) {
+ // nothing to do
+ }
+
+ @Override
+ public void onStateChanged(FlightState state) {
+ // nothing to do
+ }
+
+ @Override
+ public void onObservationAdded(ObservationEvent event) {
+ // nothing to do
+ }
}
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/RouteEvent.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/RouteEvent.java 2012-08-24 17:12:30 UTC (rev 470)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/RouteEvent.java 2012-08-24 17:12:53 UTC (rev 471)
@@ -38,12 +38,16 @@
protected boolean isNew;
+ protected Route previousRoute;
+
public RouteEvent(FlightController source,
Route route,
- boolean isNew) {
+ boolean isNew,
+ Route previousRoute) {
this.source = source;
this.route = route;
this.isNew = isNew;
+ this.previousRoute = previousRoute;
}
public FlightController getSource() {
@@ -57,4 +61,8 @@
public boolean isNew() {
return isNew;
}
+
+ public Route getPreviousRoute() {
+ return previousRoute;
+ }
}
Modified: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/GeoPoints.java
===================================================================
--- trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/GeoPoints.java 2012-08-24 17:12:30 UTC (rev 470)
+++ trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/GeoPoints.java 2012-08-24 17:12:53 UTC (rev 471)
@@ -31,6 +31,7 @@
import com.google.common.collect.Lists;
import com.google.common.collect.Ordering;
+import java.util.Comparator;
import java.util.Date;
import java.util.List;
@@ -47,15 +48,6 @@
// static class do not have instanciation
}
- public static GeoPoint copy(GeoPoint source) {
- GeoPoint result = new GeoPointImpl(source.getLatitude(), source.getLongitude());
- result.setFlight(source.getFlight());
- result.setSpeed(source.getSpeed());
- result.setAltitude(source.getAltitude());
- result.setCaptureDelay(source.getCaptureDelay());
- return result;
- }
-
public static boolean equal(GeoPoint geoPoint1, GeoPoint geoPoint2) {
boolean result = geoPoint1 == null && geoPoint2 == null;
@@ -90,24 +82,21 @@
return TO_DATE_FUNCTION;
}
- /**
- * @param geoPoints
- * @param dates
- * @return
- * @deprecated useless method since GPS save same points at exact observation or route time
- */
- @Deprecated
+ public static Comparator<GeoPoint> orderByDate() {
+ return BY_DATE_COMPARATOR;
+ }
+
public static List<GeoPoint> getClosestPoints(List<GeoPoint> geoPoints, Iterable<Date> dates) {
List<GeoPoint> result = Lists.newArrayList();
if (!geoPoints.isEmpty()) {
- List<Date> geoPointDates = FluentIterable
- .from(geoPoints)
- .transform(toDate())
- .toSortedImmutableList(Ordering.natural());
+ List<GeoPoint> source =
+ Ordering.from(orderByDate()).sortedCopy(geoPoints);
+ List<Date> geoPointDates = Lists.transform(source, toDate());
+
int index = 0;
for (Date date : dates) {
@@ -120,18 +109,19 @@
return result;
}
- public static int getClosestPointIndex(List<GeoPoint> geoPoints, Date date) {
+ public static GeoPoint getClosestPoint(List<GeoPoint> geoPoints, Date date) {
- int result = -1;
+ GeoPoint result = null;
if (!geoPoints.isEmpty()) {
- List<Date> geoPointDates = FluentIterable
- .from(geoPoints)
- .transform(toDate())
- .toSortedImmutableList(Ordering.natural());
+ List<GeoPoint> source =
+ Ordering.from(orderByDate()).sortedCopy(geoPoints);
- result = getClosestDateIndex(0, geoPointDates, date);
+ List<Date> geoPointDates = Lists.transform(source, toDate());
+
+ int index = getClosestDateIndex(0, geoPointDates, date);
+ result = geoPoints.get(index);
}
return result;
}
@@ -171,7 +161,7 @@
return size - 1;
}
- protected static Function<GeoPoint, Date> TO_DATE_FUNCTION = new Function<GeoPoint, Date>() {
+ private static Function<GeoPoint, Date> TO_DATE_FUNCTION = new Function<GeoPoint, Date>() {
@Override
public Date apply(GeoPoint input) {
@@ -179,9 +169,17 @@
}
};
- protected static Predicate<GeoPoint> IS_COORDINATES_EMPTY_PREDICATE = new Predicate<GeoPoint>() {
+ private static Comparator<GeoPoint> BY_DATE_COMPARATOR = new Comparator<GeoPoint>() {
@Override
+ public int compare(GeoPoint o1, GeoPoint o2) {
+ return o1.getRecordTime().compareTo(o2.getRecordTime());
+ }
+ };
+
+ private static Predicate<GeoPoint> IS_COORDINATES_EMPTY_PREDICATE = new Predicate<GeoPoint>() {
+
+ @Override
public boolean apply(GeoPoint input) {
return isCoordinatesEmpty(input);
}
Modified: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Routes.java
===================================================================
--- trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Routes.java 2012-08-24 17:12:30 UTC (rev 470)
+++ trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Routes.java 2012-08-24 17:12:53 UTC (rev 471)
@@ -156,6 +156,15 @@
return getNext(routes, route, orderByDate());
}
+ public static Date getMiddleTime(Route previousRoute, Route nextRoute) {
+ Date previousTime = previousRoute.getBeginTime();
+ Date nextTime = nextRoute.getBeginTime();
+
+ long diff = nextTime.getTime() - previousTime.getTime();
+ Date result = new Date(nextTime.getTime() - diff / 2);
+ return result;
+ }
+
public static Predicate<Route> isDeleted() {
return IS_DELETED_PREDICATE;
}
Modified: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/TransectFlightImpl.java
===================================================================
--- trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/TransectFlightImpl.java 2012-08-24 17:12:30 UTC (rev 470)
+++ trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/TransectFlightImpl.java 2012-08-24 17:12:53 UTC (rev 471)
@@ -74,6 +74,16 @@
}
@Override
+ public int getIndexInFlight() {
+ return 0; //To change body of implemented methods use File | Settings | File Templates.
+ }
+
+ @Override
+ public void setIndexInFlight(int indexInFlight) {
+ //To change body of implemented methods use File | Settings | File Templates.
+ }
+
+ @Override
public void setObserverByPosition(Position position, Observer observer) {
ObserverPosition observerPositionToUpdate =
getObserverPositionByPosition(position);
Modified: trunk/sammoa-persistence/src/test/java/fr/ulr/sammoa/persistence/GeoPointsTest.java
===================================================================
--- trunk/sammoa-persistence/src/test/java/fr/ulr/sammoa/persistence/GeoPointsTest.java 2012-08-24 17:12:30 UTC (rev 470)
+++ trunk/sammoa-persistence/src/test/java/fr/ulr/sammoa/persistence/GeoPointsTest.java 2012-08-24 17:12:53 UTC (rev 471)
@@ -42,7 +42,7 @@
List<GeoPoint> geoPoints = Lists.newArrayList();
- for (int i = 0; i < 100; i++) {
+ for (int i = 0; i < 100000; i++) {
GeoPoint geoPoint = new GeoPointImpl();
geoPoint.setRecordTime(new Date(i * 1000));
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUIHandler.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUIHandler.java 2012-08-24 17:12:30 UTC (rev 470)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUIHandler.java 2012-08-24 17:12:53 UTC (rev 471)
@@ -553,7 +553,15 @@
getModel().setCurrentRoute(route);
if (event.isNew()) {
- getModel().addRoute(route);
+
+ Route previousRoute = event.getPreviousRoute();
+ if (previousRoute != null) {
+ int previousIndex = getModel().indexOfRoutes(previousRoute);
+ getModel().addRoute(previousIndex + 1, route);
+
+ } else {
+ getModel().addRoute(route);
+ }
}
}
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUIModel.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUIModel.java 2012-08-24 17:12:30 UTC (rev 470)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUIModel.java 2012-08-24 17:12:53 UTC (rev 471)
@@ -250,7 +250,11 @@
public void addRoute(Route route) {
int index = sizeRoutes();
- getRoutes().add(route);
+ addRoute(index, route);
+ }
+
+ public void addRoute(int index, Route route) {
+ getRoutes().add(index, route);
fireIndexedPropertyChange(PROPERTY_ROUTES, index, null, route);
}
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/observations/EffortPanel.css
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/observations/EffortPanel.css 2012-08-24 17:12:30 UTC (rev 470)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/observations/EffortPanel.css 2012-08-24 17:12:53 UTC (rev 471)
@@ -38,6 +38,7 @@
cellSelectionEnabled:false;
selectionMode:0;
model:{errorTableModel};
+ sortable:false;
}
#transecLbl {
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/observations/EffortPanel.jaxx
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/observations/EffortPanel.jaxx 2012-08-24 17:12:30 UTC (rev 470)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/observations/EffortPanel.jaxx 2012-08-24 17:12:53 UTC (rev 471)
@@ -174,7 +174,7 @@
<JScrollPane id='scrollPanel' constraints='BorderLayout.CENTER'>
- <JTable id='errorTable'/>
+ <JXTable id='errorTable'/>
</JScrollPane>
</JPanel>
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/observations/EffortPanelHandler.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/observations/EffortPanelHandler.java 2012-08-24 17:12:30 UTC (rev 470)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/observations/EffortPanelHandler.java 2012-08-24 17:12:53 UTC (rev 471)
@@ -213,6 +213,11 @@
if (logger.isInfoEnabled()) {
logger.info("Select route from index {}", newSelectedRow);
}
+
+ if (context.isValidationMode()) {
+ getParentUI().getHandler().getFlightController().setCurrentRoute(route);
+ }
+
} else {
if (logger.isInfoEnabled()) {
logger.info("No route selected");
@@ -277,22 +282,6 @@
SammoaColors.ROUTE_NO_MODIFICATION_ROW_COLOR)
);
- if (context.isValidationMode()) {
-
- dataTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
-
- @Override
- public void valueChanged(ListSelectionEvent e) {
- if (!e.getValueIsAdjusting()) {
- int index = SammoaUtil.getLastSelectedRow(ui.getRouteTable());
- Route route = ui.getRouteTableModel().getRow(index);
- getParentUI().getHandler().getFlightController().setCurrentRoute(route);
- }
- }
- });
- }
-
-
RouteValidatorDataLocator dataLocator = new RouteValidatorDataLocator();
SwingValidatorUtil.registerListValidator(
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/TableDataChangeListener.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/TableDataChangeListener.java 2012-08-24 17:12:30 UTC (rev 470)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/TableDataChangeListener.java 2012-08-24 17:12:53 UTC (rev 471)
@@ -53,13 +53,12 @@
public void propertyChange(PropertyChangeEvent evt) {
if (evt instanceof IndexedPropertyChangeEvent) {
- int rowIndex = ((IndexedPropertyChangeEvent) evt).getIndex();
+ final int rowIndex = ((IndexedPropertyChangeEvent) evt).getIndex();
Object oldValue = evt.getOldValue();
Object newValue = evt.getNewValue();
if (oldValue == null) {
tableModel.fireTableRowsInserted(rowIndex, rowIndex);
- table.scrollRowToVisible(rowIndex);
int columnIndex = getFirstEditableColumn(rowIndex);
if (columnIndex != NO_COLUMN_INDEX_TO_EDIT_ON_INSERT) {
1
0