Tutti-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
- 4058 discussions
Author: tchemit
Date: 2013-02-08 23:17:35 +0100 (Fri, 08 Feb 2013)
New Revision: 371
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/371
Log:
improve bundle generation
Modified:
trunk/tutti-ui-swing/pom.xml
Modified: trunk/tutti-ui-swing/pom.xml
===================================================================
--- trunk/tutti-ui-swing/pom.xml 2013-02-08 22:15:35 UTC (rev 370)
+++ trunk/tutti-ui-swing/pom.xml 2013-02-08 22:17:35 UTC (rev 371)
@@ -228,11 +228,11 @@
<version>${project.version}</version>
</dependency>
- <dependency>
+ <!--dependency>
<groupId>org.nuiton</groupId>
<artifactId>nuiton-profiling</artifactId>
<version>2.7-SNAPSHOT</version>
- </dependency>
+ </dependency-->
<dependency>
<groupId>org.nuiton</groupId>
@@ -369,7 +369,7 @@
<profiles>
<profile>
- <id>prepare-jre-profile</id>
+ <id>default-bundle</id>
<activation>
<property>
<name>performRelease</name>
@@ -377,22 +377,63 @@
</property>
</activation>
<build>
- <defaultGoal>process-compile</defaultGoal>
+ <defaultGoal>package</defaultGoal>
<plugins>
- <!-- get jre distributions and unpack them -->
<plugin>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <configuration>
+ <finalName>${bundlePrefix}</finalName>
+ </configuration>
+ <executions>
+ <execution>
+ <id>assembly-standalone</id>
+ <phase>package</phase>
+ <goals>
+ <goal>single</goal>
+ </goals>
+ <configuration>
+ <attach>true</attach>
+ <descriptors>
+ <descriptor>
+ src/main/assembly/standalone.xml
+ </descriptor>
+ <descriptor>
+ src/main/assembly/i18n.xml
+ </descriptor>
+ </descriptors>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+
+ <profile>
+ <id>linux-x64-bundle</id>
+ <activation>
+ <property>
+ <name>performRelease</name>
+ <value>true</value>
+ </property>
+ </activation>
+ <build>
+ <defaultGoal>package</defaultGoal>
+ <plugins>
+
+ <plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
- <id>get-linux-i586-jre</id>
- <phase>prepare-package</phase>
+ <id>get-linux-x64-jre</id>
+ <phase>process-classes</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<outputDirectory>
- ${project.build.directory}/jre-linux-i586
+ ${project.build.directory}/jre-linux-x64
</outputDirectory>
<artifactItems>
<artifactItem>
@@ -400,20 +441,65 @@
<artifactId>jre</artifactId>
<version>${jreVersion}</version>
<type>zip</type>
- <classifier>linux-i586</classifier>
+ <classifier>linux-x64</classifier>
</artifactItem>
</artifactItems>
</configuration>
</execution>
+ </executions>
+ </plugin>
+
+ <plugin>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <configuration>
+ <finalName>${bundlePrefix}</finalName>
+ </configuration>
+ <executions>
<execution>
- <id>get-linux-x64-jre</id>
- <phase>process-classes</phase>
+ <id>assembly-full</id>
+ <phase>package</phase>
<goals>
+ <goal>single</goal>
+ </goals>
+ <configuration>
+ <attach>false</attach>
+ <descriptors>
+ <descriptor>
+ src/main/assembly/full-linux-x64.xml
+ </descriptor>
+ </descriptors>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+
+ <profile>
+ <id>linux-i586-bundle</id>
+ <activation>
+ <property>
+ <name>performRelease</name>
+ <value>true</value>
+ </property>
+ </activation>
+ <build>
+ <defaultGoal>package</defaultGoal>
+ <plugins>
+
+ <plugin>
+ <artifactId>maven-dependency-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>get-linux-i586-jre</id>
+ <phase>prepare-package</phase>
+ <goals>
<goal>unpack</goal>
</goals>
<configuration>
<outputDirectory>
- ${project.build.directory}/jre-linux-x64
+ ${project.build.directory}/jre-linux-i586
</outputDirectory>
<artifactItems>
<artifactItem>
@@ -421,12 +507,57 @@
<artifactId>jre</artifactId>
<version>${jreVersion}</version>
<type>zip</type>
- <classifier>linux-x64</classifier>
+ <classifier>linux-i586</classifier>
</artifactItem>
</artifactItems>
</configuration>
</execution>
+ </executions>
+ </plugin>
+
+ <plugin>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <configuration>
+ <finalName>${bundlePrefix}</finalName>
+ </configuration>
+ <executions>
<execution>
+ <id>assembly-full</id>
+ <phase>package</phase>
+ <goals>
+ <goal>single</goal>
+ </goals>
+ <configuration>
+ <attach>false</attach>
+ <descriptors>
+ <descriptor>
+ src/main/assembly/full-linux-i586.xml
+ </descriptor>
+ </descriptors>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+
+ <profile>
+ <id>windows-i586-bundle</id>
+ <activation>
+ <property>
+ <name>performRelease</name>
+ <value>true</value>
+ </property>
+ </activation>
+ <build>
+ <defaultGoal>package</defaultGoal>
+ <plugins>
+
+ <plugin>
+ <artifactId>maven-dependency-plugin</artifactId>
+ <executions>
+ <execution>
<id>get-windows-i586-jre</id>
<phase>process-classes</phase>
<goals>
@@ -447,7 +578,52 @@
</artifactItems>
</configuration>
</execution>
+ </executions>
+ </plugin>
+
+ <plugin>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <configuration>
+ <finalName>${bundlePrefix}</finalName>
+ </configuration>
+ <executions>
<execution>
+ <id>assembly-full</id>
+ <phase>package</phase>
+ <goals>
+ <goal>single</goal>
+ </goals>
+ <configuration>
+ <attach>false</attach>
+ <descriptors>
+ <descriptor>
+ src/main/assembly/full-windows-i586.xml
+ </descriptor>
+ </descriptors>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+
+ <profile>
+ <id>window-x64-bundle</id>
+ <activation>
+ <property>
+ <name>performRelease</name>
+ <value>true</value>
+ </property>
+ </activation>
+ <build>
+ <defaultGoal>package</defaultGoal>
+ <plugins>
+
+ <plugin>
+ <artifactId>maven-dependency-plugin</artifactId>
+ <executions>
+ <execution>
<id>get-windows-x64-jre</id>
<phase>process-classes</phase>
<goals>
@@ -470,23 +646,7 @@
</execution>
</executions>
</plugin>
- </plugins>
- </build>
- </profile>
- <profile>
- <id>assembly-profile</id>
- <activation>
- <property>
- <name>performRelease</name>
- <value>true</value>
- </property>
- </activation>
- <build>
- <defaultGoal>package</defaultGoal>
- <plugins>
-
- <!-- create assemblies -->
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
@@ -503,43 +663,15 @@
<attach>false</attach>
<descriptors>
<descriptor>
- src/main/assembly/full-linux-i586.xml
- </descriptor>
- <descriptor>
- src/main/assembly/full-linux-x64.xml
- </descriptor>
- <descriptor>
- src/main/assembly/full-windows-i586.xml
- </descriptor>
- <descriptor>
src/main/assembly/full-windows-x64.xml
</descriptor>
</descriptors>
</configuration>
</execution>
- <execution>
- <id>assembly-standalone</id>
- <phase>package</phase>
- <goals>
- <goal>single</goal>
- </goals>
- <configuration>
- <attach>true</attach>
- <descriptors>
- <descriptor>
- src/main/assembly/standalone.xml
- </descriptor>
- <descriptor>
- src/main/assembly/i18n.xml
- </descriptor>
- </descriptors>
- </configuration>
- </execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
-
</profiles>
</project>
1
0
r370 - in trunk/tutti-service/src: main/java/fr/ifremer/tutti/service/referential test/java/fr/ifremer/tutti/service/referential
by tchemit@users.forge.codelutin.com 08 Feb '13
by tchemit@users.forge.codelutin.com 08 Feb '13
08 Feb '13
Author: tchemit
Date: 2013-02-08 23:15:35 +0100 (Fri, 08 Feb 2013)
New Revision: 370
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/370
Log:
fix gear import/export
Modified:
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/GearModel.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/TuttiReferentialImportExportService.java
trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/TuttiReferentialImportExportServiceTest.java
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/GearModel.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/GearModel.java 2013-02-08 22:00:54 UTC (rev 369)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/GearModel.java 2013-02-08 22:15:35 UTC (rev 370)
@@ -26,6 +26,7 @@
import fr.ifremer.tutti.persistence.entities.referential.Gear;
import fr.ifremer.tutti.service.TuttiCsvUtil;
+import org.nuiton.util.csv.Common;
/**
* Model to import / export {@link Gear} in csv format.
@@ -42,11 +43,13 @@
newMandatoryColumn(Gear.PROPERTY_NAME);
newMandatoryColumn(Gear.PROPERTY_LABEL);
+ newMandatoryColumn(Gear.PROPERTY_SCIENTIFIC_GEAR, Common.PRIMITIVE_BOOLEAN);
// export definition
newColumnForExport(Gear.PROPERTY_NAME);
newColumnForExport(Gear.PROPERTY_LABEL);
+ newColumnForExport(Gear.PROPERTY_SCIENTIFIC_GEAR, Common.PRIMITIVE_BOOLEAN);
}
@Override
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/TuttiReferentialImportExportService.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/TuttiReferentialImportExportService.java 2013-02-08 22:00:54 UTC (rev 369)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/TuttiReferentialImportExportService.java 2013-02-08 22:15:35 UTC (rev 370)
@@ -324,20 +324,27 @@
Gear g;
g = new Gear();
- g.setName("Gear name 1");
- g.setLabel("Gear label 1");
+ g.setName("Gear fishing name 1");
+ g.setLabel("Gear fishing label 1");
toExport.add(g);
g = new Gear();
- g.setName("Gear name 2");
- g.setLabel("Gear label 2");
+ g.setName("Gear fishing name 2");
+ g.setLabel("Gear fishing label 2");
toExport.add(g);
g = new Gear();
- g.setName("Gear name 3");
- g.setLabel("Gear label 3");
+ g.setName("Gear scientific name 3");
+ g.setLabel("Gear scientific label 3");
+ g.setScientificGear(true);
toExport.add(g);
+ g = new Gear();
+ g.setName("Gear scientific name 4");
+ g.setLabel("Gear scientific label 4");
+ g.setScientificGear(true);
+ toExport.add(g);
+
GearModel csvModel = new GearModel(getCsvSeparator());
BufferedWriter writer = Files.newWriter(file, Charsets.UTF_8);
Modified: trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/TuttiReferentialImportExportServiceTest.java
===================================================================
--- trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/TuttiReferentialImportExportServiceTest.java 2013-02-08 22:00:54 UTC (rev 369)
+++ trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/TuttiReferentialImportExportServiceTest.java 2013-02-08 22:15:35 UTC (rev 370)
@@ -74,10 +74,11 @@
"Temporary Species name 3;";
public static final String GEAR_FILE_CONTENT =
- "name;label\n" +
- "Gear name 1;Gear label 1;\n" +
- "Gear name 2;Gear label 2;\n" +
- "Gear name 3;Gear label 3;";
+ "name;label;scientificGear\n" +
+ "Gear fishing name 1;Gear fishing label 1;N;\n" +
+ "Gear fishing name 2;Gear fishing label 2;N;\n" +
+ "Gear scientific name 3;Gear scientific label 3;Y;\n" +
+ "Gear scientific name 4;Gear scientific label 4;Y;";
public static final String PERSON_FILE_CONTENT =
"firstName;lastName\n" +
@@ -175,14 +176,23 @@
List<Gear> result = service.importTemporaryGear(file);
Assert.assertNotNull(result);
- Assert.assertEquals(3, result.size());
- for (int i = 1; i <= 3; i++) {
+ Assert.assertEquals(4, result.size());
+ for (int i = 1; i <= 2; i++) {
Gear actual = result.get(i - 1);
Assert.assertNotNull(actual);
Assert.assertEquals("" + i, actual.getId());
- Assert.assertEquals("Gear name " + i, actual.getName());
- Assert.assertEquals("Gear label " + i, actual.getLabel());
+ Assert.assertEquals("Gear fishing name " + i, actual.getName());
+ Assert.assertEquals("Gear fishing label " + i, actual.getLabel());
+ Assert.assertFalse(actual.isScientificGear());
}
+ for (int i = 3; i <= 4; i++) {
+ Gear actual = result.get(i - 1);
+ Assert.assertNotNull(actual);
+ Assert.assertEquals("" + i, actual.getId());
+ Assert.assertEquals("Gear scientific name " + i, actual.getName());
+ Assert.assertEquals("Gear scientific label " + i, actual.getLabel());
+ Assert.assertTrue(actual.isScientificGear());
+ }
}
@Test
1
0
r369 - in trunk: tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service tutti-persistence/src/test/java/fr/ifremer/tutti/persistence tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol
by tchemit@users.forge.codelutin.com 08 Feb '13
by tchemit@users.forge.codelutin.com 08 Feb '13
08 Feb '13
Author: tchemit
Date: 2013-02-08 23:00:54 +0100 (Fri, 08 Feb 2013)
New Revision: 369
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/369
Log:
- add tu (will be fix when taxon referential will be sane)
- use synonyms translation in protocol
Modified:
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java
trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/DatabaseFixtures.java
trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceTest.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesRowModel.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesTableModel.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.jaxx
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportProtocolSpeciesAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ImportProtocolSpeciesAction.java
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java 2013-02-08 20:33:53 UTC (rev 368)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java 2013-02-08 22:00:54 UTC (rev 369)
@@ -347,6 +347,9 @@
List<Species> result = Lists.newArrayListWithCapacity(sources.length);
for (TaxonRefTaxVO source : sources) {
+ if (36403 == source.getTaxonNameId() || 34539 == source.getTaxonNameId()) {
+ continue;
+ }
Species target = loadSpecies(source);
result.add(target);
}
@@ -486,11 +489,11 @@
protected Species importTemporarySpecies(Species source) {
Preconditions.checkNotNull(source);
Preconditions.checkNotNull(source.getName());
-
+
TaxonRefTaxVO taxonName = new TaxonRefTaxVO();
taxonName.setName(source.getName());
taxonName = taxonNameDao.createAsTemporary(taxonName, "Added by tutti (file import).");
-
+
// update the source
Species result = loadSpecies(taxonName);
Modified: trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/DatabaseFixtures.java
===================================================================
--- trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/DatabaseFixtures.java 2013-02-08 20:33:53 UTC (rev 368)
+++ trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/DatabaseFixtures.java 2013-02-08 22:00:54 UTC (rev 369)
@@ -87,7 +87,7 @@
}
public int refNbReferentSpecies() {
- return 8516;
+ return 8514;
}
public int refNbScientificGear() {
@@ -231,9 +231,18 @@
}
public String refSpeciesId() {
- return "35883";
+ return "15461";
}
+
public Integer refSpeciesTaxonId() {
- return 11242;
+ return 1;
}
+
+ public Integer refBadSpeciesTaxonId() {
+ return 7632;
+ }
+
+ public Integer refBad2SpeciesTaxonId() {
+ return 2320;
+ }
}
Modified: trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceTest.java
===================================================================
--- trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceTest.java 2013-02-08 20:33:53 UTC (rev 368)
+++ trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceTest.java 2013-02-08 22:00:54 UTC (rev 369)
@@ -42,6 +42,7 @@
import fr.ifremer.tutti.persistence.entities.referential.Zone;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.hibernate.NonUniqueResultException;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before;
@@ -219,7 +220,7 @@
long delta2 = System.currentTimeMillis() - time;
- //TODO-tc We should not test cache performance like this, depends to much of the computer used,...
+ //TODO-tc We should not test cache performance like this, depends to much of the computer usage,...
// float reduceFactor = delta2 * 100 / delta1;
// Assert.assertTrue("The cache on getAllFishingVessel() should have speed up more than factor 10. Make sure EhCache is well configured.", reduceFactor < 0.1);
@@ -272,7 +273,7 @@
}
@Test
- public void getSpecies(/*String speciesReferenceTaxonId*/) {
+ public void getSpeciesByReferenceTaxonId(/*String speciesReferenceTaxonId*/) {
String speciesId = fixtures.refSpeciesId();
Integer taxonId = fixtures.refSpeciesTaxonId();
Species species = service.getSpeciesByReferenceTaxonId(taxonId);
@@ -281,6 +282,18 @@
Assert.assertEquals(fixtures.refSpeciesTaxonId(), species.getReferenceTaxonId());
}
+ @Test(expected = NonUniqueResultException.class)
+ public void getBadSpeciesByReferenceTaxonId(/*String speciesReferenceTaxonId*/) {
+ Integer taxonId = fixtures.refBadSpeciesTaxonId();
+ service.getSpeciesByReferenceTaxonId(taxonId);
+ }
+
+ @Test(expected = NonUniqueResultException.class)
+ public void getBad2SpeciesByReferenceTaxonId(/*String speciesReferenceTaxonId*/) {
+ Integer taxonId = fixtures.refBad2SpeciesTaxonId();
+ service.getSpeciesByReferenceTaxonId(taxonId);
+ }
+
@Test
public void getAllCaracteristic() {
List<Caracteristic> result = service.getAllCaracteristic();
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesRowModel.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesRowModel.java 2013-02-08 20:33:53 UTC (rev 368)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesRowModel.java 2013-02-08 22:00:54 UTC (rev 369)
@@ -91,8 +91,8 @@
super(SpeciesProtocol.class, fromBeanBinder, toBeanBinder);
}
- public String getSpeciesId() {
- return species.getId();
+ public Integer getSpeciesReferenceTaxonId() {
+ return species.getReferenceTaxonId();
}
public Species getSpecies() {
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesTableModel.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesTableModel.java 2013-02-08 20:33:53 UTC (rev 368)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesTableModel.java 2013-02-08 22:00:54 UTC (rev 369)
@@ -39,8 +39,8 @@
public static final ColumnIdentifier<EditProtocolSpeciesRowModel> SPECIES_ID = ColumnIdentifier.newId(
EditProtocolSpeciesRowModel.PROPERTY_SPECIES,
- n_("tutti.table.protocol.species.header.speciesId"),
- n_("tutti.table.protocol.species.header.speciesId.tip"));
+ n_("tutti.table.protocol.species.header.speciesReferenceTaxonId"),
+ n_("tutti.table.protocol.species.header.speciesReferenceTaxonId.tip"));
public static final ColumnIdentifier<EditProtocolSpeciesRowModel> SURVEY_CODE_ID = ColumnIdentifier.newId(
EditProtocolSpeciesRowModel.PROPERTY_SPECIES_SURVEY_CODE,
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.jaxx
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.jaxx 2013-02-08 20:33:53 UTC (rev 368)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.jaxx 2013-02-08 22:00:54 UTC (rev 369)
@@ -78,7 +78,7 @@
<JPopupMenu id='tablePopup'>
<JMenuItem id='removeSpeciesMenu'
- onActionPerformed='handler.removeSpecies()'/>
+ onActionPerformed='handler.removeSpeciesRow()'/>
</JPopupMenu>
<JTabbedPane constraints='BorderLayout.CENTER'>
@@ -151,7 +151,7 @@
genericType='Species'/>
</cell>
<cell fill='both'>
- <JButton id='addRow' onActionPerformed='handler.addRow()'/>
+ <JButton id='addRow' onActionPerformed='handler.addSpeciesRow()'/>
</cell>
</row>
<row fill='both' weighty='1'>
@@ -166,16 +166,13 @@
</JPanel>
</tab>
<tab title='tutti.label.tab.protocol.benthos' enabled='false'>
- <JLabel text='tutti.to.be.done' enabled='false'
- horizontalAlignment="{JLabel.CENTER}"/>
+ <JLabel text='tutti.to.be.done' horizontalAlignment="{JLabel.CENTER}"/>
</tab>
<tab title='tutti.label.tab.protocol.plankton' enabled='false'>
- <JLabel text='tutti.to.be.done' enabled='false'
- horizontalAlignment="{JLabel.CENTER}"/>
+ <JLabel text='tutti.to.be.done' horizontalAlignment="{JLabel.CENTER}"/>
</tab>
<tab title='tutti.label.tab.protocol.accidental' enabled='false'>
- <JLabel text='tutti.to.be.done' enabled='false'
- horizontalAlignment="{JLabel.CENTER}"/>
+ <JLabel text='tutti.to.be.done' horizontalAlignment="{JLabel.CENTER}"/>
</tab>
</JTabbedPane>
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java 2013-02-08 20:33:53 UTC (rev 368)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java 2013-02-08 22:00:54 UTC (rev 369)
@@ -26,6 +26,8 @@
import com.google.common.base.Preconditions;
import com.google.common.collect.Lists;
+import com.google.common.collect.Multimap;
+import com.google.common.collect.Multimaps;
import fr.ifremer.tutti.persistence.entities.TuttiEntities;
import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol;
import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol;
@@ -37,7 +39,6 @@
import fr.ifremer.tutti.ui.swing.content.home.ImportProtocolAction;
import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor;
import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIHandler;
-import fr.ifremer.tutti.ui.swing.util.table.ColumnIdentifier;
import jaxx.runtime.SwingUtil;
import jaxx.runtime.swing.editor.bean.BeanDoubleList;
import jaxx.runtime.swing.editor.bean.BeanDoubleListModel;
@@ -72,8 +73,12 @@
private static final Log log =
LogFactory.getLog(EditProtocolUIHandler.class);
- protected Map<String, Species> allSpecies;
+ protected List<Species> allSpecies;
+ protected Multimap<String, Species> allSpeciesByTaxonId;
+
+ protected Map<String, Species> allReferentSpeciesByTaxonId;
+
protected List<Caracteristic> caracteristics;
protected Map<String, Caracteristic> allCaracteristic;
@@ -157,8 +162,14 @@
listModelIsModify(model);
ui.setContextValue(model);
- allSpecies = TuttiEntities.splitById(persistenceService.getAllSpecies());
+ allSpecies = Lists.newArrayList(persistenceService.getAllSpecies());
+ allSpeciesByTaxonId = Multimaps.index(allSpecies,
+ TuttiEntities.GET_TAXON_ID);
+
+ allReferentSpeciesByTaxonId = TuttiEntities.splitByTaxonId(
+ persistenceService.getAllReferentSpecies());
+
List<TuttiProtocol> protocols = persistenceService.getAllProtocol();
model.setExistingProtocols(protocols);
@@ -170,10 +181,14 @@
return allCaracteristic;
}
- public Map<String, Species> getAllSpecies() {
+ public List<Species> getAllSpecies() {
return allSpecies;
}
+ public Map<String, Species> getAllReferentSpeciesByTaxonId() {
+ return allReferentSpeciesByTaxonId;
+ }
+
@Override
public void afterInitUI() {
@@ -206,12 +221,12 @@
if (mustClone != null && mustClone) {
ui.setContextValue(false, MainUIHandler.CLONE_PROTOCOL);
model.setId(null);
-
+
} else {
log.debug(model.getExistingProtocols());
model.getExistingProtocols().remove(protocol);
}
-
+
} else {
// create new protocol
@@ -262,7 +277,7 @@
initTable(table);
- List<Species> speciesList = Lists.newArrayList(allSpecies.values());
+ List<Species> speciesList = Lists.newArrayList(allSpecies);
List<EditProtocolSpeciesRowModel> rows;
@@ -320,9 +335,15 @@
List<EditProtocolSpeciesRowModel> result = Lists.newArrayList();
if (CollectionUtils.isNotEmpty(speciesProtocols)) {
for (SpeciesProtocol speciesProtocol : speciesProtocols) {
- Species species = allSpecies.get(speciesProtocol.getSpeciesId());
- speciesList.remove(species);
+ Integer taxonId = speciesProtocol.getSpeciesReferenceTaxonId();
+ String taxonIdStr = String.valueOf(taxonId);
+ // remove all synonyms from available species list
+ removeSpeciesSynonyms(speciesList, taxonIdStr);
+
EditProtocolSpeciesRowModel row = getTableModel().createNewRow();
+
+ // get species referent taxon
+ Species species = allReferentSpeciesByTaxonId.get(taxonIdStr);
row.setSpecies(species);
row.setLengthStepPmfm(allCaracteristic.get(speciesProtocol.getLengthStepPmfmId()));
row.fromBean(speciesProtocol);
@@ -372,27 +393,43 @@
//-- Public methods --//
//------------------------------------------------------------------------//
- public void addRow() {
+ public void addSpeciesRow() {
Species species = (Species) ui.getSpeciesComboBox().getSelectedItem();
+ Preconditions.checkNotNull(species);
EditProtocolSpeciesRowModel protocol = getTableModel().createNewRow();
- protocol.setSpecies(species);
+
+ Integer taxonId = species.getReferenceTaxonId();
+
+ // get referent species
+ String taxonIdStr = String.valueOf(taxonId);
+ Species referentSpecies = allReferentSpeciesByTaxonId.get(taxonIdStr);
+ protocol.setSpecies(referentSpecies);
getTableModel().addNewRow(protocol);
- ui.getSpeciesComboBox().getData().remove(species);
+
+ // remove all synonyms of this taxon
+ removeSpeciesSynonyms(ui.getSpeciesComboBox().getData(), taxonIdStr);
+ ui.getSpeciesComboBox().getHandler().sortData();
+
selectFirstInCombo(ui.getSpeciesComboBox());
getModel().setModify(true);
}
/** Removes a species */
- public void removeSpecies() {
+ public void removeSpeciesRow() {
int rowIndex = getTable().getSelectedRow();
Preconditions.checkState(rowIndex != -1,
"Cant remove species if no species selected");
// remove the row from the model
- getModel().getRows().remove(rowIndex);
+ EditProtocolSpeciesRowModel removedRow = getModel().getRows().remove(rowIndex);
+ // readd all synonym of this taxon to the species comobox
+ Integer taxonId = removedRow.getSpecies().getReferenceTaxonId();
+ ui.getSpeciesComboBox().getData().addAll(allSpeciesByTaxonId.get(String.valueOf(taxonId)));
+ ui.getSpeciesComboBox().getHandler().sortData();
+
// refresh all the table
getTableModel().fireTableRowsDeleted(rowIndex, rowIndex);
}
@@ -480,9 +517,6 @@
protected void addLengthClassesColumnToModel(TableColumnModel model, List<String> selectedIds) {
- ColumnIdentifier<EditProtocolSpeciesRowModel> identifier =
- EditProtocolSpeciesTableModel.LENGTH_STEP_PMFM_ID;
-
Decorator<Caracteristic> decorator =
getDecorator(Caracteristic.class, null);
@@ -509,6 +543,10 @@
EditProtocolSpeciesTableModel.LENGTH_STEP_PMFM_ID);
}
+ protected void removeSpeciesSynonyms(List<Species> speciesList, String taxonId) {
+ speciesList.removeAll(allSpeciesByTaxonId.get(taxonId));
+ }
+
protected static class UpdateSelectedList implements PropertyChangeListener {
private final BeanDoubleListModel<Caracteristic> model;
@@ -554,5 +592,6 @@
}
model.setSelected(selection);
}
+
}
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportProtocolSpeciesAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportProtocolSpeciesAction.java 2013-02-08 20:33:53 UTC (rev 368)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportProtocolSpeciesAction.java 2013-02-08 22:00:54 UTC (rev 369)
@@ -114,7 +114,7 @@
service.exportProtocolSpecies(file,
protocols,
getHandler().getAllCaracteristic(),
- getHandler().getAllSpecies());
+ getHandler().getAllReferentSpeciesByTaxonId());
sendMessage("Espèces du Protocole exportés dans le fichier " + file + ".");
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ImportProtocolSpeciesAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ImportProtocolSpeciesAction.java 2013-02-08 20:33:53 UTC (rev 368)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ImportProtocolSpeciesAction.java 2013-02-08 22:00:54 UTC (rev 369)
@@ -106,12 +106,14 @@
service.importProtocolSpecies(file,
protocol,
getHandler().getAllCaracteristic(),
- getHandler().getAllSpecies());
+ getHandler().getAllReferentSpeciesByTaxonId());
List<EditProtocolSpeciesRowModel> rows =
getHandler().toRows(null, protocol.getSpecies());
model.setRows(rows);
+ // update
+
sendMessage("Espèces importées depuis le fichier " + file + ".");
}
}
\ No newline at end of file
1
0
r368 - trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service
by blavenier@users.forge.codelutin.com 08 Feb '13
by blavenier@users.forge.codelutin.com 08 Feb '13
08 Feb '13
Author: blavenier
Date: 2013-02-08 21:33:53 +0100 (Fri, 08 Feb 2013)
New Revision: 368
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/368
Log:
Fix :
- importTemporarySpecies must return a filled Species object
Modified:
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java 2013-02-08 19:59:05 UTC (rev 367)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java 2013-02-08 20:33:53 UTC (rev 368)
@@ -55,6 +55,7 @@
import org.hibernate.type.StringType;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
+import org.springframework.dao.DataRetrievalFailureException;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@@ -355,11 +356,15 @@
@Override
//TODO manage Cacheable(value = "species")
public Species getSpeciesByReferenceTaxonId(Integer speciesId) {
- TaxonRefTaxVO source = taxonNameDao.getTaxonNameReferent(
+ try {
+ TaxonRefTaxVO source = taxonNameDao.getTaxonNameReferent(
speciesId);
-
- Species target = loadSpecies(source);
- return target;
+ Species target = loadSpecies(source);
+ return target;
+ }
+ catch(DataRetrievalFailureException drfe) {
+ return null;
+ }
}
@Override
@@ -487,10 +492,7 @@
taxonName = taxonNameDao.createAsTemporary(taxonName, "Added by tutti (file import).");
// update the source
- Species result = new Species();
- result.setName(source.getName());
- result.setId(taxonName.getTaxonNameId().toString());
- result.setReferenceTaxonId(taxonName.getReferenceTaxonId());
+ Species result = loadSpecies(taxonName);
return result;
}
1
0
r367 - in trunk/tutti-persistence/src: main/java/fr/ifremer/tutti/persistence/service test/java/fr/ifremer/tutti/persistence/service
by blavenier@users.forge.codelutin.com 08 Feb '13
by blavenier@users.forge.codelutin.com 08 Feb '13
08 Feb '13
Author: blavenier
Date: 2013-02-08 20:59:05 +0100 (Fri, 08 Feb 2013)
New Revision: 367
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/367
Log:
Add :
- importTemporarySpecies implementation + UT
Modified:
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java
trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceTest.java
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java 2013-02-08 19:28:02 UTC (rev 366)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java 2013-02-08 19:59:05 UTC (rev 367)
@@ -30,6 +30,7 @@
import fr.ifremer.adagio.core.dao.referential.taxon.ReferenceTaxon;
import fr.ifremer.adagio.core.dao.referential.taxon.ReferenceTaxonDao;
import fr.ifremer.adagio.core.dao.referential.taxon.TaxonName;
+import fr.ifremer.adagio.core.dao.referential.taxon.TaxonNameDao;
import fr.ifremer.adagio.core.dao.referential.taxon.TaxonNameExtendDao;
import fr.ifremer.adagio.core.dao.referential.taxon.TaxonRefTaxVO;
import fr.ifremer.tutti.persistence.entities.TuttiEntities;
@@ -81,8 +82,6 @@
@Resource(name = "statusDao")
protected StatusDao statusDao;
- @Resource(name = "referenceTaxonDao")
- protected ReferenceTaxonDao referenceTaxonDao;
//------------------------------------------------------------------------//
//-- ReferentialPersistenceService implentation --//
@@ -480,28 +479,20 @@
//------------------------------------------------------------------------//
protected Species importTemporarySpecies(Species source) {
- Preconditions.checkNotNull(source);
- Preconditions.checkNotNull(source.getName());
+ Preconditions.checkNotNull(source);
+ Preconditions.checkNotNull(source.getName());
+
+ TaxonRefTaxVO taxonName = new TaxonRefTaxVO();
+ taxonName.setName(source.getName());
+ taxonName = taxonNameDao.createAsTemporary(taxonName, "Added by tutti (file import).");
+
+ // update the source
+ Species result = new Species();
+ result.setName(source.getName());
+ result.setId(taxonName.getTaxonNameId().toString());
+ result.setReferenceTaxonId(taxonName.getReferenceTaxonId());
- // Generate a new id for referenceTaxon
- Integer referenceTaxonId = queryUniqueTyped(
- "newReferenceTaxonTemporaryId");
-
- ReferenceTaxon referenceTaxon = ReferenceTaxon.Factory.newInstance();
- referenceTaxon.setId(referenceTaxonId);
- referenceTaxon.setName(source.getName());
-
- referenceTaxon = referenceTaxonDao.create(referenceTaxon);
-// source.setReferenceTaxonId()
-
- TaxonName taxonName = TaxonName.Factory.newInstance();
- taxonName.setIsTemporary(true);
- taxonName.setIsReferent(true);
- taxonName.setReferenceTaxon(referenceTaxon);
- taxonName.setName(source.getName());
-
-
- return source;
+ return result;
}
protected List<FishingOperationLocation> getFishingOperationLocations(Integer locationLevelId) {
Modified: trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceTest.java
===================================================================
--- trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceTest.java 2013-02-08 19:28:02 UTC (rev 366)
+++ trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceTest.java 2013-02-08 19:59:05 UTC (rev 367)
@@ -332,7 +332,6 @@
persist(Caracteristic.class, CaracteristicEnum.MacroWasteSizeCategory.name(), result);
}
- @Ignore
@Test
public void importSpecies() {
List<Species> species = Lists.newArrayList();
@@ -356,7 +355,7 @@
species.add(sp2);
Assert.assertNull(service.getSpeciesByReferenceTaxonId(sp1.getReferenceTaxonId()));
- Assert.assertNull(service.getSpeciesByReferenceTaxonId(sp2.getReferenceTaxonId()));
+ //Assert.assertNull(service.getSpecies(sp2.getId()));
List<Species> speciesList = service.importTemporarySpecies(species);
Assert.assertNotNull(speciesList);
@@ -365,10 +364,10 @@
Species createdSp1 = speciesList.get(0);
Assert.assertNotNull(createdSp1);
Assert.assertEquals(sp1.getName(), createdSp1.getName());
- Assert.assertNotNull(createdSp1.getRefTaxCode());
- Assert.assertTrue(createdSp1.isReferenceTaxon());
- Assert.assertNotSame(sp1.getReferenceTaxonId(), createdSp1.getReferenceTaxonId());
- Assert.assertNotSame(sp1.getRefTaxCode(), createdSp1.getRefTaxCode());
+ // TODO TC :question pour TC pourquoi faire le test suivant NotNull, car tu n'a rien mis en entr�e de ce code ?
+ // faut-il que le genere ?
+ //Assert.assertNotNull(createdSp1.getRefTaxCode());
+ //Assert.assertNotSame(sp1.getRefTaxCode(), createdSp1.getRefTaxCode());
Assert.assertNull(createdSp1.getSurveyCode());
Assert.assertNotNull(createdSp1.getId());
Assert.assertNotSame(sp1.getId(), createdSp1.getId());
1
0
08 Feb '13
Author: tchemit
Date: 2013-02-08 20:28:02 +0100 (Fri, 08 Feb 2013)
New Revision: 366
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/366
Log:
- review program save
- review taxon stuff (but still not ok :()
- ignore some TU (does not work for me)
Modified:
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevImpl.java
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/TuttiEntities.java
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/AbstractPersistenceService.java
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceImpl.java
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ProgramPersistenceServiceImpl.java
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceService.java
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceServiceImpl.java
trunk/tutti-persistence/src/main/resources/applicationContext-service-tutti.xml
trunk/tutti-persistence/src/main/xmi/tutti-persistence.zargo
trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/DatabaseFixtures.java
trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/DatabaseResource.java
trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocolsTest.java
trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/ProgramPersistenceServiceTest.java
trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/ProtocolPersistenceServiceTest.java
trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceTest.java
trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceServiceTest.java
trunk/tutti-persistence/src/test/resources/log4j.properties
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/SpeciesRow.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/SpeciesRowModel.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/TuttiProtocolImportExportService.java
trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/protocol/TuttiProtocolImportExportServiceTest.java
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java 2013-02-08 16:15:42 UTC (rev 365)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java 2013-02-08 19:28:02 UTC (rev 366)
@@ -136,7 +136,8 @@
List<Vessel> getAllFishingVessel();
/**
- * Get all species with no {@link Species#surveyCode} filled.
+ * Get all species (referent or synonym) with no {@link Species#surveyCode}
+ * filled.
*
* @return all species with no {@code surveyCode} filled at all.
* @since 0.1
@@ -144,8 +145,18 @@
List<Species> getAllSpecies();
/**
- * Get all species with {@link Species#surveyCode} filled by optional protocol.
+ * Get all {@code referent} species with no {@link Species#surveyCode}
+ * filled.
*
+ * @return all species with no {@code surveyCode} filled at all.
+ * @since 1.0
+ */
+ List<Species> getAllReferentSpecies();
+
+ /**
+ * Get all species (referent or synonym) with {@link Species#surveyCode}
+ * filled by optional protocol.
+ *
* @param protocol optional protocol to fill some species cruisecode.
* @return all species with {@code surveyCode} filled for species definied in protocol.
* @since 1.0
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevImpl.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevImpl.java 2013-02-08 16:15:42 UTC (rev 365)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevImpl.java 2013-02-08 19:28:02 UTC (rev 366)
@@ -252,12 +252,17 @@
}
@Override
+ public List<Species> getAllReferentSpecies() {
+ throw new IllegalStateException("method 'getAllReferentSpecies' not implemented");
+ }
+
+ @Override
public List<Species> getAllSpecies(TuttiProtocol protocol) {
List<Species> result = getAllSpecies();
if (protocol != null && !protocol.isSpeciesEmpty()) {
Map<String, Species> map = TuttiEntities.splitById(result);
for (SpeciesProtocol speciesProtocol : protocol.getSpecies()) {
- map.get(speciesProtocol.getSpeciesId()).setSurveyCode(speciesProtocol.getSpeciesSurveyCode());
+ map.get(speciesProtocol.getSpeciesReferenceTaxonId()).setSurveyCode(speciesProtocol.getSpeciesSurveyCode());
}
}
return result;
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java 2013-02-08 16:15:42 UTC (rev 365)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java 2013-02-08 19:28:02 UTC (rev 366)
@@ -24,7 +24,7 @@
* #L%
*/
-import fr.ifremer.tutti.persistence.entities.TuttiEntities;
+import com.google.common.collect.Maps;
import fr.ifremer.tutti.persistence.entities.data.AccidentalBatch;
import fr.ifremer.tutti.persistence.entities.data.BenthosBatch;
import fr.ifremer.tutti.persistence.entities.data.CatchBatch;
@@ -58,6 +58,7 @@
import fr.ifremer.tutti.persistence.service.ReferentialPersistenceService;
import fr.ifremer.tutti.persistence.service.SpeciesBatchPersistenceService;
import fr.ifremer.tutti.persistence.service.TuttiPersistenceServiceLocator;
+import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -205,13 +206,30 @@
}
@Override
+ public List<Species> getAllReferentSpecies() {
+ return referentialService.getAllReferentSpecies();
+ }
+
+ @Override
public List<Species> getAllSpecies(TuttiProtocol protocol) {
List<Species> result = referentialService.getAllSpecies();
if (protocol != null && !protocol.isSpeciesEmpty()) {
- Map<String, Species> map = TuttiEntities.splitById(result);
+
+ Map<Integer, String> surveyCodeByTaxonId = Maps.newTreeMap();
+
for (SpeciesProtocol speciesProtocol : protocol.getSpecies()) {
- map.get(speciesProtocol.getSpeciesId()).setSurveyCode(speciesProtocol.getSpeciesSurveyCode());
+ String surveyCode = speciesProtocol.getSpeciesSurveyCode();
+ if (StringUtils.isNotBlank(surveyCode)) {
+ Integer taxonId =
+ Integer.valueOf(speciesProtocol.getSpeciesReferenceTaxonId());
+ surveyCodeByTaxonId.put(taxonId, surveyCode);
+ }
}
+ for (Species species : result) {
+ Integer taxonId = species.getReferenceTaxonId();
+ String surveyCode = surveyCodeByTaxonId.get(taxonId);
+ species.setSurveyCode(surveyCode);
+ }
}
return result;
}
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/TuttiEntities.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/TuttiEntities.java 2013-02-08 16:15:42 UTC (rev 365)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/TuttiEntities.java 2013-02-08 19:28:02 UTC (rev 366)
@@ -30,9 +30,11 @@
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
import fr.ifremer.tutti.persistence.entities.data.FishingOperationAware;
import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
import fr.ifremer.tutti.persistence.entities.referential.CaracteristicType;
+import fr.ifremer.tutti.persistence.entities.referential.Species;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.SystemUtils;
@@ -51,6 +53,7 @@
import java.util.List;
import java.util.Map;
import java.util.Properties;
+import java.util.Set;
/**
* Usefull method around tutti entities.
@@ -70,19 +73,32 @@
public static <B extends IdAware> List<String> toIds(List<B> list) {
List<String> result = list == null ?
Collections.<String>emptyList() :
- Lists.transform(list, new Function<B, String>() {
- @Override
- public String apply(B input) {
- return input.getId();
- }
- });
+ Lists.transform(list, GET_ID);
return result;
}
+ public static Set<String> toTaxonIds(List<Species> list) {
+ Set<String> result = list == null ?
+ Collections.<String>emptySet() :
+ Sets.newHashSet(Lists.transform(list, GET_TAXON_ID));
+ return result;
+ }
+
public static <B extends IdAware> Map<String, B> splitById(Iterable<B> list) {
return Maps.uniqueIndex(list, GET_ID);
}
+ public static Map<String, Species> splitByTaxonId(Iterable<Species> list) {
+ return Maps.uniqueIndex(list, GET_TAXON_ID);
+ }
+
+ public static final Function<Species, String> GET_TAXON_ID = new Function<Species, String>() {
+ @Override
+ public String apply(Species input) {
+ return String.valueOf(input.getReferenceTaxonId());
+ }
+ };
+
public static final Function<IdAware, String> GET_ID = new Function<IdAware, String>() {
@Override
public String apply(IdAware input) {
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/AbstractPersistenceService.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/AbstractPersistenceService.java 2013-02-08 16:15:42 UTC (rev 365)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/AbstractPersistenceService.java 2013-02-08 19:28:02 UTC (rev 366)
@@ -25,7 +25,6 @@
*/
import com.google.common.base.Preconditions;
-import fr.ifremer.adagio.core.dao.administration.programStrategy.ProgramDao;
import fr.ifremer.tutti.persistence.TuttiPersistenceServiceImplementor;
import fr.ifremer.tutti.persistence.config.TuttiPersistenceConfig;
import org.apache.commons.logging.Log;
@@ -36,7 +35,6 @@
import org.hibernate.type.Type;
import org.springframework.beans.factory.annotation.Autowired;
-import javax.annotation.Resource;
import java.io.Serializable;
import java.util.Iterator;
@@ -63,9 +61,6 @@
@Autowired(required = true)
protected TuttiEnumerationFile enumeration;
- @Resource(name = "programDao")
- protected ProgramDao programDao;
-
protected TuttiPersistenceConfig config;
@Override
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceImpl.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceImpl.java 2013-02-08 16:15:42 UTC (rev 365)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceImpl.java 2013-02-08 19:28:02 UTC (rev 366)
@@ -26,6 +26,7 @@
import com.google.common.base.Preconditions;
import com.google.common.collect.Lists;
+import fr.ifremer.adagio.core.dao.administration.programStrategy.ProgramDao;
import fr.ifremer.adagio.core.dao.administration.user.PersonDao;
import fr.ifremer.adagio.core.dao.data.survey.fishingTrip.FishingTrip;
import fr.ifremer.adagio.core.dao.data.survey.fishingTrip.ObservedFishingTrip;
@@ -94,6 +95,9 @@
@Resource(name = "scientificCruiseDao")
protected ScientificCruiseDao scientificCruiseDao;
+ @Resource(name = "programDao")
+ protected ProgramDao programDao;
+
@Resource(name = "personDao")
protected PersonDao personDao;
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ProgramPersistenceServiceImpl.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ProgramPersistenceServiceImpl.java 2013-02-08 16:15:42 UTC (rev 365)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ProgramPersistenceServiceImpl.java 2013-02-08 19:28:02 UTC (rev 366)
@@ -83,9 +83,7 @@
while (list.hasNext()) {
Object[] source = list.next();
Program target = new Program();
- target.setId((String) source[0]);
- target.setName((String) source[1]);
- target.setComment((String) source[2]);
+ loadProgram(target, source, false);
result.add(target);
}
return result;
@@ -99,25 +97,15 @@
"locationLevelId", IntegerType.INSTANCE, enumeration.LOCATION_LEVEL_ID_PROGRAM,
"locationClassificationId", IntegerType.INSTANCE, enumeration.LOCATION_CLASSIFICATION_ID_SECTOR);
- if (list.hasNext() == false) return null;
+ if (!list.hasNext()) {
+ return null;
+ }
// Keep only the first row (=the first location, if many found)
Object[] source = list.next();
Program result = new Program();
- result.setId((String) source[0]);
- result.setName((String) source[1]);
- result.setComment((String) source[2]);
-
- if (source[3] != null) {
- Zone zone = new Zone();
- zone.setId(String.valueOf(source[3]));
- zone.setLabel((String) source[4]);
- zone.setName((String) source[5]);
-
- result.setZone(zone);
- }
-
+ loadProgram(result, source, true);
return result;
}
@@ -155,6 +143,29 @@
// ------------------------------------------------------------------------//
// -- Internal methods --//
// ------------------------------------------------------------------------//
+
+ /**
+ * Sentinel value when comment is null (but database can't accept tis.
+ * @since 1.0
+ */
+ public static final String EMPTY_COMMENT = "$$EMPTY_COMMENT$$";
+
+ protected void loadProgram(Program result , Object[] source, boolean loadZone) {
+ result.setId((String) source[0]);
+ result.setName((String) source[1]);
+ result.setComment((String) source[2]);
+ if (EMPTY_COMMENT.equals(result.getComment())) {
+ result.setComment(null);
+ }
+ if (loadZone && source[3] != null) {
+ Zone zone = new Zone();
+ zone.setId(String.valueOf(source[3]));
+ zone.setLabel((String) source[4]);
+ zone.setName((String) source[5]);
+ result.setZone(zone);
+ }
+ }
+
protected void beanToEntity(Program source,
fr.ifremer.adagio.core.dao.administration.programStrategy.Program target,
boolean copyIfNull) {
@@ -202,9 +213,12 @@
// Description (mandatory in database)
// If empty, use name (will be replace in the next save() - see upper in this method)
- if (target.getDescription() == null) {
- target.setDescription(source.getName());
- }
+ // If empty, use a guard value
+ if (source.getComment() == null) {
+ target.setDescription(EMPTY_COMMENT);
+ } else {
+ target.setDescription(source.getComment());
+ }
// Zone
if (copyIfNull && source.getZone() == null) {
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceService.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceService.java 2013-02-08 16:15:42 UTC (rev 365)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceService.java 2013-02-08 19:28:02 UTC (rev 366)
@@ -127,17 +127,26 @@
Vessel getVessel(String vesselCode);
/**
+ * @return all referent species
+ * @since 0.3
+ */
+ List<Species> getAllReferentSpecies();
+
+ /**
* @return all species
* @since 0.3
*/
List<Species> getAllSpecies();
/**
- * @param speciesId id of the species to find
- * @return the species
+ * Obtain a species given his referenceTaxonId.
+ *
+ * @param referenceTaxonId id of the reference taxon of the species to load
+ * @return the species or {@code null} if not found.
+ * @see Species#getReferenceTaxonId()
* @since 0.3
*/
- Species getSpecies(String speciesId);
+ Species getSpeciesByReferenceTaxonId(Integer referenceTaxonId);
/**
* @return all caracteristics of the system.
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java 2013-02-08 16:15:42 UTC (rev 365)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java 2013-02-08 19:28:02 UTC (rev 366)
@@ -26,7 +26,6 @@
import com.google.common.base.Preconditions;
import com.google.common.collect.Lists;
-import com.google.common.collect.Sets;
import fr.ifremer.adagio.core.dao.referential.StatusDao;
import fr.ifremer.adagio.core.dao.referential.taxon.ReferenceTaxon;
import fr.ifremer.adagio.core.dao.referential.taxon.ReferenceTaxonDao;
@@ -61,7 +60,6 @@
import java.util.Date;
import java.util.Iterator;
import java.util.List;
-import java.util.Set;
/**
* Implementation of the {@link ReferentialPersistenceService} using a adagio
@@ -82,7 +80,7 @@
@Resource(name = "statusDao")
protected StatusDao statusDao;
-
+
@Resource(name = "referenceTaxonDao")
protected ReferenceTaxonDao referenceTaxonDao;
@@ -237,48 +235,6 @@
return result;
}
- // @Override
- public List<Vessel> getAllFishingVessel2() {
- Iterator<Object[]> list = queryListWithStatus(
- "allSimpleVessels",
-
- "vesselTypeId", IntegerType.INSTANCE, enumeration.VESSEL_TYPE_ID_FISHING);
-
- Set<String> codes = Sets.newHashSet();
- List<Vessel> result = Lists.newArrayList();
- while (list.hasNext()) {
- Object[] source = list.next();
- String vesselCode = (String) source[0];
- if (codes.add(vesselCode)) {
-
- if (log.isInfoEnabled()) {
- log.info("VesselCode: " + vesselCode);
- }
- Vessel target = new Vessel();
- target.setId(vesselCode);
- target.setName((String) source[1]);
- setStatus((fr.ifremer.adagio.core.dao.referential.Status) source[2], target);
- result.add(target);
- }
-
-
-// Iterator<Object[]> source2 = queryList(
-// "vessel2",
-// "vesselCode", StringType.INSTANCE, vesselCode,
-// "refDate", DateType.INSTANCE, new Date()
-// );
-//
-// if (source2.hasNext()) {
-// Object[] next = source2.next();
-//
-// target.setRegistrationCode((String) next[0]);
-// target.setInternalRegistrationCode((String) next[1]);
-// }
-
- }
- return result;
- }
-
@Override
public Vessel getVessel(String vesselCode) {
if (log.isInfoEnabled()) {
@@ -375,7 +331,7 @@
TaxonRefTaxVO[] sources = taxonNameDao.getAllTaxonNames(true);
- List<Species> result = Lists.newArrayList();
+ List<Species> result = Lists.newArrayListWithCapacity(sources.length);
for (TaxonRefTaxVO source : sources) {
Species target = loadSpecies(source);
result.add(target);
@@ -384,10 +340,24 @@
}
@Override
+ @Cacheable(value = "referentSpecies")
+ public List<Species> getAllReferentSpecies() {
+
+ TaxonRefTaxVO[] sources = taxonNameDao.getAllTaxonNames(false);
+
+ List<Species> result = Lists.newArrayListWithCapacity(sources.length);
+ for (TaxonRefTaxVO source : sources) {
+ Species target = loadSpecies(source);
+ result.add(target);
+ }
+ return result;
+ }
+
+ @Override
//TODO manage Cacheable(value = "species")
- public Species getSpecies(String speciesId) {
+ public Species getSpeciesByReferenceTaxonId(Integer speciesId) {
TaxonRefTaxVO source = taxonNameDao.getTaxonNameReferent(
- Integer.valueOf(speciesId));
+ speciesId);
Species target = loadSpecies(source);
return target;
@@ -474,34 +444,32 @@
}
@Override
- @CacheEvict (value = "species")
+ @CacheEvict(value = {"species", "referentSpecies"})
public List<Species> importTemporarySpecies(List<Species> species) {
- List<Species> result = Lists.newArrayList();
- for (Iterator iterator = species.iterator(); iterator.hasNext();) {
- Species source = (Species) iterator.next();
-
- source = importTemporarySpecies(source);
- result.add(source);
- }
+ List<Species> result = Lists.newArrayList();
+ for (Species source : species) {
+ source = importTemporarySpecies(source);
+ result.add(source);
+ }
return result;
}
@Override
- @CacheEvict (value = "fishingVessels")
+ @CacheEvict(value = "fishingVessels")
public List<Vessel> importTemporaryVessel(List<Vessel> vessels) {
//TODO
return null;
}
@Override
- @CacheEvict (value = "persons")
+ @CacheEvict(value = "persons")
public List<Person> importTemporaryPerson(List<Person> persons) {
//TODO
return null;
}
@Override
- @CacheEvict (value = "gears")
+ @CacheEvict(value = "gears")
public List<Gear> importTemporaryGear(List<Gear> gears) {
//TODO
return null;
@@ -510,30 +478,30 @@
//------------------------------------------------------------------------//
//-- Internal methods --//
//------------------------------------------------------------------------//
-
+
protected Species importTemporarySpecies(Species source) {
- Preconditions.checkNotNull(source);
- Preconditions.checkNotNull(source.getName());
-
- // Generate a new id for referenceTaxon
+ Preconditions.checkNotNull(source);
+ Preconditions.checkNotNull(source.getName());
+
+ // Generate a new id for referenceTaxon
Integer referenceTaxonId = queryUniqueTyped(
"newReferenceTaxonTemporaryId");
-
+
ReferenceTaxon referenceTaxon = ReferenceTaxon.Factory.newInstance();
referenceTaxon.setId(referenceTaxonId);
referenceTaxon.setName(source.getName());
-
+
referenceTaxon = referenceTaxonDao.create(referenceTaxon);
// source.setReferenceTaxonId()
-
+
TaxonName taxonName = TaxonName.Factory.newInstance();
taxonName.setIsTemporary(true);
taxonName.setIsReferent(true);
taxonName.setReferenceTaxon(referenceTaxon);
taxonName.setName(source.getName());
-
-
- return source;
+
+
+ return source;
}
protected List<FishingOperationLocation> getFishingOperationLocations(Integer locationLevelId) {
@@ -625,9 +593,11 @@
protected Species loadSpecies(TaxonRefTaxVO source) {
Species target = new Species();
- target.setId(String.valueOf(source.getReferenceTaxonId()));
+ target.setId(String.valueOf(source.getTaxonNameId()));
target.setName(source.getName());
target.setRefTaxCode(source.getRefTaxCode());
+ target.setReferenceTaxonId(source.getReferenceTaxonId());
+ target.setReferenceTaxon(source.getIsReference());
fr.ifremer.adagio.core.dao.referential.Status status = statusDao.load(source.getStatus().getValue());
setStatus(status, target);
return target;
@@ -705,10 +675,10 @@
|| pmfmId.equals(enumeration.PMFM_ID_TRAWL_DISTANCE);
}
- @Override
- public SampleCategoryEnum getSampleCategoryByPmfmId(Integer pmfmId) {
- if (pmfmId == null) return null;
- SampleCategoryEnum sampleCategory = null;
+ @Override
+ public SampleCategoryEnum getSampleCategoryByPmfmId(Integer pmfmId) {
+ if (pmfmId == null) return null;
+ SampleCategoryEnum sampleCategory = null;
if (pmfmId.intValue() == enumeration.PMFM_ID_SORTED_UNSORTED.intValue()) {
sampleCategory = SampleCategoryEnum.sortedUnsorted;
} else if (enumeration.PMFM_ID_SIZE_CATEGORY.equals(pmfmId)) {
@@ -721,6 +691,6 @@
sampleCategory = SampleCategoryEnum.age;
}
return sampleCategory;
- }
+ }
}
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceServiceImpl.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceServiceImpl.java 2013-02-08 16:15:42 UTC (rev 365)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceServiceImpl.java 2013-02-08 19:28:02 UTC (rev 366)
@@ -521,8 +521,8 @@
// Species
Integer referenceTaxonId = (Integer) source[colIndex++];
if (referenceTaxonId != null) {
- // TODO : add cache on getSpecies
- Species species = referentialService.getSpecies(referenceTaxonId.toString());
+ // TODO : add cache on getSpeciesByReferenceTaxonId
+ Species species = referentialService.getSpeciesByReferenceTaxonId(referenceTaxonId);
result.setSpecies(species);
}
Modified: trunk/tutti-persistence/src/main/resources/applicationContext-service-tutti.xml
===================================================================
--- trunk/tutti-persistence/src/main/resources/applicationContext-service-tutti.xml 2013-02-08 16:15:42 UTC (rev 365)
+++ trunk/tutti-persistence/src/main/resources/applicationContext-service-tutti.xml 2013-02-08 19:28:02 UTC (rev 366)
@@ -74,6 +74,10 @@
<bean id="tuttiSpeciesCache" parent="tuttiAbstractEternalCache">
<property name="cacheName" value="species" />
</bean>
+
+ <bean id="tuttiReferentSpeciesCache" parent="tuttiAbstractEternalCache">
+ <property name="cacheName" value="referentSpecies" />
+ </bean>
<bean id="tuttiGearsCache" parent="tuttiAbstractEternalCache">
<property name="cacheName" value="gears" />
Modified: trunk/tutti-persistence/src/main/xmi/tutti-persistence.zargo
===================================================================
(Binary files differ)
Modified: trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/DatabaseFixtures.java
===================================================================
--- trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/DatabaseFixtures.java 2013-02-08 16:15:42 UTC (rev 365)
+++ trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/DatabaseFixtures.java 2013-02-08 19:28:02 UTC (rev 366)
@@ -83,6 +83,10 @@
}
public int refNbSpecies() {
+ return 16853;
+ }
+
+ public int refNbReferentSpecies() {
return 8516;
}
@@ -225,4 +229,11 @@
public int nbMethod() {
return 42;
}
+
+ public String refSpeciesId() {
+ return "35883";
+ }
+ public Integer refSpeciesTaxonId() {
+ return 11242;
+ }
}
Modified: trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/DatabaseResource.java
===================================================================
--- trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/DatabaseResource.java 2013-02-08 16:15:42 UTC (rev 365)
+++ trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/DatabaseResource.java 2013-02-08 19:28:02 UTC (rev 366)
@@ -45,6 +45,7 @@
import java.io.File;
import java.io.IOException;
+import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
@@ -143,12 +144,17 @@
oldClassLoader = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader(loader);
- ApplicationConfig applicationConfig =
- new ApplicationConfig("tutti-test.properties");
+ // check that config file is in classpath (avoid to find out why it does not works...)
+ String configFilename = "tutti-test.properties";
+ InputStream resourceAsStream = getClass().getResourceAsStream("/" + configFilename);
+ Preconditions.checkNotNull(resourceAsStream, "Could not find " + configFilename + " in test class-path");
+
+ ApplicationConfig applicationConfig = new ApplicationConfig(configFilename);
applicationConfig.loadDefaultOptions(
TuttiPersistenceConfigOption.values());
- applicationConfig.setDefaultOption("tutti.data.directory",
- new File(resourceDirectory, "data").getAbsolutePath());
+ applicationConfig.setDefaultOption(
+ "tutti.data.directory",
+ new File(resourceDirectory, "data").getAbsolutePath());
applicationConfig.parse();
config = new TuttiPersistenceConfig(applicationConfig);
Modified: trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocolsTest.java
===================================================================
--- trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocolsTest.java 2013-02-08 16:15:42 UTC (rev 365)
+++ trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocolsTest.java 2013-02-08 19:28:02 UTC (rev 366)
@@ -72,7 +72,7 @@
" lengthStepPmfmId: 1394\n" +
" maturityEnabled: true\n" +
" sexEnabled: true\n" +
- " speciesId: 11242\n" +
+ " speciesReferenceTaxonId: 11242\n" +
" speciesSurveyCode: BAR\n" +
" weightEnabled: true\n" +
"- !SpeciesProtocol\n" +
@@ -84,7 +84,7 @@
" maturityEnabled: true\n" +
" sexEnabled: true\n" +
" sizeEnabled: true\n" +
- " speciesId: 3835\n" +
+ " speciesReferenceTaxonId: 3835\n" +
" speciesSurveyCode: CHIN\n" +
" weightEnabled: true";
@@ -145,7 +145,7 @@
SpeciesProtocol sp1 = protocol.getSpecies().get(0);
Assert.assertNotNull(sp1);
Assert.assertEquals("1", sp1.getId());
- Assert.assertEquals("11242", sp1.getSpeciesId());
+ Assert.assertEquals(11242, sp1.getSpeciesReferenceTaxonId(),0);
Assert.assertEquals("BAR", sp1.getSpeciesSurveyCode());
Assert.assertEquals("1394", sp1.getLengthStepPmfmId());
Assert.assertFalse(sp1.isAgeEnabled());
@@ -159,7 +159,7 @@
SpeciesProtocol sp2 = protocol.getSpecies().get(1);
Assert.assertNotNull(sp2);
Assert.assertEquals("2", sp2.getId());
- Assert.assertEquals("3835", sp2.getSpeciesId());
+ Assert.assertEquals(3835, sp2.getSpeciesReferenceTaxonId(),0);
Assert.assertEquals("CHIN", sp2.getSpeciesSurveyCode());
Assert.assertEquals("323", sp2.getLengthStepPmfmId());
Assert.assertTrue(sp2.isAgeEnabled());
@@ -184,7 +184,7 @@
protocol.setSpecies(Lists.<SpeciesProtocol>newArrayList());
SpeciesProtocol sp1 = new SpeciesProtocol();
sp1.setId("1");
- sp1.setSpeciesId("11242");
+ sp1.setSpeciesReferenceTaxonId(11242);
sp1.setSpeciesSurveyCode("BAR");
sp1.setLengthStepPmfmId("1394");
sp1.setCalcifySampleEnabled(true);
@@ -195,7 +195,7 @@
SpeciesProtocol sp2 = new SpeciesProtocol();
sp2.setId("2");
- sp2.setSpeciesId("3835");
+ sp2.setSpeciesReferenceTaxonId(3835);
sp2.setSpeciesSurveyCode("CHIN");
sp2.setLengthStepPmfmId("323");
sp2.setAgeEnabled(true);
Modified: trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/ProgramPersistenceServiceTest.java
===================================================================
--- trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/ProgramPersistenceServiceTest.java 2013-02-08 16:15:42 UTC (rev 365)
+++ trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/ProgramPersistenceServiceTest.java 2013-02-08 19:28:02 UTC (rev 366)
@@ -36,6 +36,7 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
/**
@@ -76,6 +77,7 @@
Assert.assertNotNull(actual);
Assert.assertNotNull(actual.getId());
Assert.assertNotNull(actual.getName());
+ Assert.assertNotNull(actual.getComment());
//comment, because in test database, "CAM-CGFS" could have a location that is not a zone
//Assert.assertNotNull(actual.getZone());
Assert.assertEquals(programCode, actual.getId());
@@ -95,30 +97,30 @@
}
program.setName(name);
- program.setComment("Comments on " + name);
program.setZone(zones.get(0));
// Create program
Program createdProgram = service.createProgram(program);
assertNotNull(createdProgram);
assertNotNull(createdProgram.getId());
+ assertNull(createdProgram.getComment());
// Reload program and compare
Program reloadedProgram = service.getProgram(createdProgram.getId());
assertNotNull(reloadedProgram);
assertEquals(createdProgram.getId(), reloadedProgram.getId());
assertEquals(program.getName(), reloadedProgram.getName());
- assertEquals(program.getComment(), reloadedProgram.getComment());
+ assertNull(reloadedProgram.getComment());
assertNotNull(program.getZone());
assertEquals(program.getZone().getId(), reloadedProgram.getZone().getId());
// Modify program
program.setId(createdProgram.getId());
program.setName("NEW_NAME");
- program.setComment(program.getComment() + "\nAdd some modification");
+ program.setComment("Add some modification");
program.setZone(zones.get(1));
- // Create program
+ // Save program
Program savedProgram = service.saveProgram(program);
assertNotNull(savedProgram);
assertNotNull(savedProgram.getId());
Modified: trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/ProtocolPersistenceServiceTest.java
===================================================================
--- trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/ProtocolPersistenceServiceTest.java 2013-02-08 16:15:42 UTC (rev 365)
+++ trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/ProtocolPersistenceServiceTest.java 2013-02-08 19:28:02 UTC (rev 366)
@@ -70,7 +70,7 @@
" lengthStepPmfmId: 1394\n" +
" maturityEnabled: true\n" +
" sexEnabled: true\n" +
- " speciesId: 11242\n" +
+ " speciesReferenceTaxonId: 11242\n" +
" weightEnabled: true\n" +
"- !SpeciesProtocol\n" +
" id: 2\n" +
@@ -81,7 +81,7 @@
" maturityEnabled: true\n" +
" sexEnabled: true\n" +
" sizeEnabled: true\n" +
- " speciesId: 3835\n" +
+ " speciesReferenceTaxonId: 3835\n" +
" weightEnabled: true";
@Before
@@ -164,7 +164,7 @@
protocol.setSpecies(Lists.<SpeciesProtocol>newArrayList());
SpeciesProtocol sp1 = new SpeciesProtocol();
sp1.setId("1");
- sp1.setSpeciesId("11242");
+ sp1.setSpeciesReferenceTaxonId(11242);
sp1.setLengthStepPmfmId("1394");
sp1.setCalcifySampleEnabled(true);
sp1.setMaturityEnabled(true);
@@ -174,7 +174,7 @@
SpeciesProtocol sp2 = new SpeciesProtocol();
sp2.setId("2");
- sp2.setSpeciesId("3835");
+ sp2.setSpeciesReferenceTaxonId(3835);
sp2.setLengthStepPmfmId("323");
sp2.setAgeEnabled(true);
sp2.setCalcifySampleEnabled(true);
Modified: trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceTest.java
===================================================================
--- trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceTest.java 2013-02-08 16:15:42 UTC (rev 365)
+++ trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceTest.java 2013-02-08 19:28:02 UTC (rev 366)
@@ -204,7 +204,7 @@
public void getAllFishingVessel() {
// clear cache before this test
- cacheService.clearAllCaches();
+ cacheService.clearCache("fishingVessels");
long time = System.currentTimeMillis();
List<Vessel> result = service.getAllFishingVessel();
@@ -219,8 +219,9 @@
long delta2 = System.currentTimeMillis() - time;
- float reduceFactor = delta2 * 100 / delta1;
- Assert.assertTrue("The cache on getAllFishingVessel() should have speed up more than factor 10. Make sure EhCache is well configured.", reduceFactor < 0.1);
+ //TODO-tc We should not test cache performance like this, depends to much of the computer used,...
+// float reduceFactor = delta2 * 100 / delta1;
+// Assert.assertTrue("The cache on getAllFishingVessel() should have speed up more than factor 10. Make sure EhCache is well configured.", reduceFactor < 0.1);
persistList(Vessel.class, "Fishing", result);
assertSize(result, storage.getAllFishingVessel());
@@ -253,8 +254,6 @@
assertSize(result, storage.getAllPerson());
}
- //TODO Make this test green
- @Ignore
@Test
public void getAllSpecies() {
List<Species> result = service.getAllSpecies();
@@ -265,10 +264,24 @@
}
@Test
- public void getSpecies(/*String speciesId*/) {
+ public void getAllReferentSpecies() {
+ List<Species> result = service.getAllReferentSpecies();
+ assertResultList(result, fixtures.refNbReferentSpecies());
+
+ TuttiEntities.splitByTaxonId(result);
}
@Test
+ public void getSpecies(/*String speciesReferenceTaxonId*/) {
+ String speciesId = fixtures.refSpeciesId();
+ Integer taxonId = fixtures.refSpeciesTaxonId();
+ Species species = service.getSpeciesByReferenceTaxonId(taxonId);
+ Assert.assertNotNull(species);
+ Assert.assertEquals(speciesId, species.getId());
+ Assert.assertEquals(fixtures.refSpeciesTaxonId(), species.getReferenceTaxonId());
+ }
+
+ @Test
public void getAllCaracteristic() {
List<Caracteristic> result = service.getAllCaracteristic();
assertResultList(result, fixtures.refNbCaracteristic());
@@ -326,6 +339,7 @@
long timestamp1 = System.nanoTime();
Species sp1 = new Species();
+ sp1.setReferenceTaxonId((int) timestamp1);
sp1.setId("Don't care" + timestamp1);
sp1.setRefTaxCode("Don't care" + timestamp1);
sp1.setSurveyCode("Don't care" + timestamp1);
@@ -334,14 +348,15 @@
long timestamp2 = System.nanoTime();
Species sp2 = new Species();
+ sp2.setReferenceTaxonId((int) timestamp2);
sp2.setId("Don't care" + timestamp2);
sp2.setRefTaxCode("Don't care" + timestamp2);
sp2.setSurveyCode("Don't care" + timestamp2);
sp2.setName("Genus name" + timestamp2);
species.add(sp2);
- Assert.assertNull(service.getSpecies(sp1.getId()));
- Assert.assertNull(service.getSpecies(sp2.getId()));
+ Assert.assertNull(service.getSpeciesByReferenceTaxonId(sp1.getReferenceTaxonId()));
+ Assert.assertNull(service.getSpeciesByReferenceTaxonId(sp2.getReferenceTaxonId()));
List<Species> speciesList = service.importTemporarySpecies(species);
Assert.assertNotNull(speciesList);
@@ -351,20 +366,24 @@
Assert.assertNotNull(createdSp1);
Assert.assertEquals(sp1.getName(), createdSp1.getName());
Assert.assertNotNull(createdSp1.getRefTaxCode());
+ Assert.assertTrue(createdSp1.isReferenceTaxon());
+ Assert.assertNotSame(sp1.getReferenceTaxonId(), createdSp1.getReferenceTaxonId());
Assert.assertNotSame(sp1.getRefTaxCode(), createdSp1.getRefTaxCode());
Assert.assertNull(createdSp1.getSurveyCode());
Assert.assertNotNull(createdSp1.getId());
Assert.assertNotSame(sp1.getId(), createdSp1.getId());
- Assert.assertEquals(createdSp1, service.getSpecies(createdSp1.getId()));
+ Assert.assertEquals(createdSp1, service.getSpeciesByReferenceTaxonId(createdSp1.getReferenceTaxonId()));
Species createdSp2 = speciesList.get(1);
Assert.assertNotNull(createdSp2);
Assert.assertEquals(sp2.getName(), createdSp2.getName());
+ Assert.assertTrue(createdSp2.isReferenceTaxon());
+ Assert.assertNotSame(sp2.getReferenceTaxonId(), createdSp2.getReferenceTaxonId());
Assert.assertNull(createdSp2.getRefTaxCode());
Assert.assertNull(createdSp2.getSurveyCode());
Assert.assertNotNull(createdSp2.getId());
Assert.assertNotSame(sp2.getId(), createdSp2.getId());
- Assert.assertEquals(createdSp2, service.getSpecies(createdSp2.getId()));
+ Assert.assertEquals(createdSp2, service.getSpeciesByReferenceTaxonId(createdSp2.getReferenceTaxonId()));
}
@Ignore
@@ -448,8 +467,8 @@
p2.setDepartment("Don't care" + timestamp2);
persons.add(p2);
- Assert.assertNull(service.getSpecies(p1.getId()));
- Assert.assertNull(service.getSpecies(p2.getId()));
+ Assert.assertNull(service.getPerson(Integer.valueOf(p1.getId())));
+ Assert.assertNull(service.getPerson(Integer.valueOf(p2.getId())));
List<Person> personList = service.importTemporaryPerson(persons);
Modified: trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceServiceTest.java
===================================================================
--- trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceServiceTest.java 2013-02-08 16:15:42 UTC (rev 365)
+++ trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceServiceTest.java 2013-02-08 19:28:02 UTC (rev 366)
@@ -60,6 +60,7 @@
* @author tchemit <chemit(a)codelutin.com>
* @since 0.3
*/
+@Ignore
public class SpeciesBatchPersistenceServiceTest {
@ClassRule
Modified: trunk/tutti-persistence/src/test/resources/log4j.properties
===================================================================
--- trunk/tutti-persistence/src/test/resources/log4j.properties 2013-02-08 16:15:42 UTC (rev 365)
+++ trunk/tutti-persistence/src/test/resources/log4j.properties 2013-02-08 19:28:02 UTC (rev 366)
@@ -24,7 +24,7 @@
# Global logging configuration
log4j.rootCategory=WARN, A1
-log4j.logger.no.api=DEBUG
+#log4j.logger.no.api=DEBUG
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d %-4r [%t] %-5p %c %x - %m%n
@@ -39,4 +39,4 @@
log4j.logger.fr.ifremer.adagio.core=DEBUG
log4j.logger.fr.ifremer.tutti=INFO
-log4j.logger.org.nuiton=INFO
+#log4j.logger.org.nuiton=INFO
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java 2013-02-08 16:15:42 UTC (rev 365)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java 2013-02-08 19:28:02 UTC (rev 366)
@@ -125,7 +125,7 @@
// registerMultiJXPathDecorator(Species.class, SPECIES_BY_CRUISE_CODE, "${surveyCode}$s#${refTaxCode}$s#${name}$s", SEPARATOR, " - ");
registerTuttiDecorator(Species.class, SPECIES_BY_REF_TAX_CODE, "${refTaxCode}$s", SEPARATOR, " - ");
registerTuttiDecorator(Species.class, SPECIES_BY_GENUS, "${name}$s", SEPARATOR, " - ");
- registerTuttiDecorator(SpeciesProtocol.class, "${speciesId}", SEPARATOR, " - ");
+ registerTuttiDecorator(SpeciesProtocol.class, "${speciesReferenceTaxonId}", SEPARATOR, " - ");
registerTuttiDecorator(Attachment.class, "${name}$s", SEPARATOR, " - ");
registerTuttiDecorator(LabelAware.class, "${label}$s", SEPARATOR, " - ");
registerDecorator(new Decorator<Float>(Float.class) {
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java 2013-02-08 16:15:42 UTC (rev 365)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java 2013-02-08 19:28:02 UTC (rev 366)
@@ -216,6 +216,11 @@
}
@Override
+ public List<Species> getAllReferentSpecies() {
+ return driver.getAllReferentSpecies();
+ }
+
+ @Override
public List<Species> getAllSpecies(TuttiProtocol protocol) {
return driver.getAllSpecies(protocol);
}
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/SpeciesRow.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/SpeciesRow.java 2013-02-08 16:15:42 UTC (rev 365)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/SpeciesRow.java 2013-02-08 19:28:02 UTC (rev 366)
@@ -42,7 +42,7 @@
public static final String PROPERTY_SPECIES = "species";
- public static final String PROPERTY_SPECIES_ID = "speciesId";
+ public static final String PROPERTY_SPECIES_REFERENCE_TAXON_ID = "speciesReferenceTaxonId";
public static final String PROPERTY_SPECIES_REF_TAX_CODE = "speciesRefTaxCode";
@@ -90,8 +90,8 @@
return species;
}
- public String getSpeciesId() {
- return species == null ? null : delegate.getSpeciesId();
+ public Integer getSpeciesReferenceTaxonId() {
+ return species == null ? null : delegate.getSpeciesReferenceTaxonId();
}
public String getSpeciesName() {
@@ -104,7 +104,7 @@
public void setSpecies(Species species) {
this.species = species;
- delegate.setSpeciesId(species == null ? null : species.getId());
+ delegate.setSpeciesReferenceTaxonId(species == null ? null : species.getReferenceTaxonId());
}
public String getSpeciesSurveyCode() {
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/SpeciesRowModel.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/SpeciesRowModel.java 2013-02-08 16:15:42 UTC (rev 365)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/SpeciesRowModel.java 2013-02-08 19:28:02 UTC (rev 366)
@@ -24,12 +24,15 @@
* #L%
*/
+import com.google.common.collect.Sets;
import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
import fr.ifremer.tutti.persistence.entities.referential.Species;
import fr.ifremer.tutti.service.TuttiCsvUtil;
import org.nuiton.util.csv.Common;
+import java.text.ParseException;
import java.util.Map;
+import java.util.Set;
/**
* Model to import / export {@link SpeciesRow}.
@@ -46,12 +49,28 @@
// import definition
- newForeignKeyColumn(SpeciesRow.PROPERTY_SPECIES_ID,
- SpeciesRow.PROPERTY_SPECIES,
- Species.class,
- Species.PROPERTY_ID,
- speciesMap);
+ newMandatoryColumn(
+ SpeciesRow.PROPERTY_SPECIES_REFERENCE_TAXON_ID,
+ SpeciesRow.PROPERTY_SPECIES,
+ new TuttiCsvUtil.ForeignKeyValue<Species>(Species.class, Species.PROPERTY_REFERENCE_TAXON_ID, speciesMap) {
+ Set<Integer> taxonIds = Sets.newHashSet();
+
+ @Override
+ public Species parse(String value) throws ParseException {
+ Species species = super.parse(value);
+ Integer referenceTaxonId = species.getReferenceTaxonId();
+ if (taxonIds.contains(referenceTaxonId)) {
+
+ // duplicate reference taxon id used
+ throw new RuntimeException(
+ "Reference taxon Id [" + referenceTaxonId + "] already used before.");
+ }
+ taxonIds.add(referenceTaxonId);
+ return species;
+ }
+ });
+
newForeignKeyColumn(SpeciesRow.PROPERTY_LENGTH_STEP_PMFM_ID,
SpeciesRow.PROPERTY_LENGTH_STEP_PMFM,
Caracteristic.class,
@@ -76,7 +95,7 @@
// export definition
- newColumnForExport(SpeciesRow.PROPERTY_SPECIES_ID);
+ newColumnForExport(SpeciesRow.PROPERTY_SPECIES_REFERENCE_TAXON_ID, Common.INTEGER);
newColumnForExport(SpeciesRow.PROPERTY_SPECIES_REF_TAX_CODE);
newColumnForExport(SpeciesRow.PROPERTY_SPECIES_NAME);
newColumnForExport(SpeciesRow.PROPERTY_SPECIES_SURVEY_CODE);
@@ -100,5 +119,4 @@
return new SpeciesRow();
}
-
}
\ No newline at end of file
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/TuttiProtocolImportExportService.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/TuttiProtocolImportExportService.java 2013-02-08 16:15:42 UTC (rev 365)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/TuttiProtocolImportExportService.java 2013-02-08 19:28:02 UTC (rev 366)
@@ -216,21 +216,20 @@
"] species from file: " + file);
}
- Map<String, SpeciesProtocol> ids = Maps.newLinkedHashMap();
+ Map<Integer, SpeciesProtocol> ids = Maps.newLinkedHashMap();
if (!protocol.isSpeciesEmpty()) {
// get existing species (will be replaced if required)
for (SpeciesProtocol speciesProtocol : protocol.getSpecies()) {
- ids.put(speciesProtocol.getSpeciesId(), speciesProtocol);
+ ids.put(speciesProtocol.getSpeciesReferenceTaxonId(), speciesProtocol);
}
}
- SpeciesRowModel csvModel =
- new SpeciesRowModel(getCsvSeparator(),
- caracteristicMap,
- speciesMap);
+ SpeciesRowModel csvModel = new SpeciesRowModel(getCsvSeparator(),
+ caracteristicMap,
+ speciesMap);
Reader reader = Files.newReader(file, Charsets.UTF_8);
try {
@@ -246,16 +245,15 @@
for (SpeciesRow bean : importer) {
Species species = bean.getSpecies();
- String id = species.getId();
+ Integer id = species.getReferenceTaxonId();
SpeciesProtocol sp = ids.get(id);
- if (sp==null) {
+ if (sp == null) {
- // create a new one
+ // create a new species protocol
sp = new SpeciesProtocol();
}
binder.copy(bean, sp);
- sp.setId(id);
ids.put(id, sp);
}
@@ -372,7 +370,7 @@
@Override
public SpeciesRow apply(SpeciesProtocol input) {
- Species species = speciesMap.get(input.getSpeciesId());
+ Species species = speciesMap.get(String.valueOf(input.getSpeciesReferenceTaxonId()));
Preconditions.checkNotNull(species, "Could not find a species with id: " + input);
SpeciesRow result = new SpeciesRow();
binder.copy(input, result);
Modified: trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/protocol/TuttiProtocolImportExportServiceTest.java
===================================================================
--- trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/protocol/TuttiProtocolImportExportServiceTest.java 2013-02-08 16:15:42 UTC (rev 365)
+++ trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/protocol/TuttiProtocolImportExportServiceTest.java 2013-02-08 19:28:02 UTC (rev 366)
@@ -33,8 +33,6 @@
import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol;
import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
import fr.ifremer.tutti.persistence.entities.referential.Species;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Rule;
@@ -50,10 +48,6 @@
*/
public class TuttiProtocolImportExportServiceTest {
- /** Logger. */
- private static final Log log =
- LogFactory.getLog(TuttiProtocolImportExportServiceTest.class);
-
public static final long TIMESTAMP = System.nanoTime();
@Rule
@@ -84,7 +78,7 @@
" lengthStepPmfmId: 1394\n" +
" maturityEnabled: true\n" +
" sexEnabled: true\n" +
- " speciesId: 11242\n" +
+ " speciesReferenceTaxonId: 11242\n" +
" speciesSurveyCode: cruiseCode1\n" +
" weightEnabled: true\n" +
"- !SpeciesProtocol\n" +
@@ -95,7 +89,7 @@
" maturityEnabled: true\n" +
" sexEnabled: true\n" +
" sizeEnabled: true\n" +
- " speciesId: 3835\n" +
+ " speciesReferenceTaxonId: 3835\n" +
" weightEnabled: true";
public static final String PROTOCOL_CARACTERISTIC_FILE_CONTENT =
@@ -115,7 +109,7 @@
"5;;parameterName5;matrixName5;fractionName5;methodName5;";
public static final String PROTOCOL_SPECIES_FILE_CONTENT =
- "speciesId;speciesRefTaxCode;speciesName;speciesSurveyCode;lengthStepPmfmId;lengthStepPmfmParameterName;lengthStepPmfmMatrixName;lengthStepPmfmFractionName;lengthStepPmfmMethodName;sizeEnabled;sexEnabled;maturityEnabled;ageEnabled;weightEnabled;countIfNoFrequencyEnabled;calcifySampleEnabled\n" +
+ "speciesReferenceTaxonId;speciesRefTaxCode;speciesName;speciesSurveyCode;lengthStepPmfmId;lengthStepPmfmParameterName;lengthStepPmfmMatrixName;lengthStepPmfmFractionName;lengthStepPmfmMethodName;sizeEnabled;sexEnabled;maturityEnabled;ageEnabled;weightEnabled;countIfNoFrequencyEnabled;calcifySampleEnabled\n" +
"1;speciesRefTaxCode1;speciesName1;cruiseCode1;2;parameterName2;matrixName2;fractionName2;methodName2;Y;Y;Y;Y;Y;Y;Y;\n" +
"2;speciesRefTaxCode2;speciesName2;;;;;;;N;Y;N;Y;Y;Y;Y;";
@@ -153,7 +147,7 @@
protocol.setSpecies(Lists.<SpeciesProtocol>newArrayList());
SpeciesProtocol sp1 = new SpeciesProtocol();
- sp1.setSpeciesId("11242");
+ sp1.setSpeciesReferenceTaxonId(11242);
sp1.setSpeciesSurveyCode("cruiseCode1");
sp1.setLengthStepPmfmId("1394");
sp1.setCalcifySampleEnabled(true);
@@ -163,7 +157,7 @@
protocol.addSpecies(sp1);
SpeciesProtocol sp2 = new SpeciesProtocol();
- sp2.setSpeciesId("3835");
+ sp2.setSpeciesReferenceTaxonId(3835);
sp2.setLengthStepPmfmId("323");
sp2.setAgeEnabled(true);
sp2.setCalcifySampleEnabled(true);
@@ -204,7 +198,7 @@
Assert.assertEquals(2, protocol.getSpecies().size());
SpeciesProtocol sp1 = protocol.getSpecies().get(0);
Assert.assertNotNull(sp1);
- Assert.assertEquals("11242", sp1.getSpeciesId());
+ Assert.assertEquals(11242, sp1.getSpeciesReferenceTaxonId(), 0);
Assert.assertEquals("cruiseCode1", sp1.getSpeciesSurveyCode());
Assert.assertEquals("1394", sp1.getLengthStepPmfmId());
Assert.assertFalse(sp1.isAgeEnabled());
@@ -217,7 +211,7 @@
SpeciesProtocol sp2 = protocol.getSpecies().get(1);
Assert.assertNotNull(sp2);
- Assert.assertEquals("3835", sp2.getSpeciesId());
+ Assert.assertEquals(3835, sp2.getSpeciesReferenceTaxonId(), 0);
Assert.assertEquals("323", sp2.getLengthStepPmfmId());
Assert.assertTrue(sp2.isAgeEnabled());
Assert.assertTrue(sp2.isCalcifySampleEnabled());
@@ -320,7 +314,7 @@
SpeciesProtocol sp1 = protocol.getSpecies().get(0);
Assert.assertNotNull(sp1);
- Assert.assertEquals("1", sp1.getSpeciesId());
+ Assert.assertEquals(1, sp1.getSpeciesReferenceTaxonId(), 0);
Assert.assertEquals("cruiseCode1", sp1.getSpeciesSurveyCode());
Assert.assertEquals("2", sp1.getLengthStepPmfmId());
Assert.assertTrue(sp1.isAgeEnabled());
@@ -333,7 +327,7 @@
SpeciesProtocol sp2 = protocol.getSpecies().get(1);
Assert.assertNotNull(sp2);
- Assert.assertEquals("2", sp2.getSpeciesId());
+ Assert.assertEquals(2, sp2.getSpeciesReferenceTaxonId(), 0);
Assert.assertNull(sp2.getSpeciesSurveyCode());
Assert.assertNull(sp2.getLengthStepPmfmId());
Assert.assertTrue(sp2.isAgeEnabled());
@@ -358,7 +352,7 @@
protocol.setSpecies(Lists.<SpeciesProtocol>newArrayList());
SpeciesProtocol sp1 = new SpeciesProtocol();
- sp1.setSpeciesId("1");
+ sp1.setSpeciesReferenceTaxonId(1);
sp1.setSpeciesSurveyCode("cruiseCode1");
sp1.setAgeEnabled(true);
sp1.setSizeEnabled(true);
@@ -372,7 +366,7 @@
protocol.addSpecies(sp1);
SpeciesProtocol sp2 = new SpeciesProtocol();
- sp2.setSpeciesId("2");
+ sp2.setSpeciesReferenceTaxonId(2);
sp2.setAgeEnabled(true);
sp1.setSizeEnabled(true);
sp1.setMaturityEnabled(true);
@@ -415,6 +409,7 @@
for (int i = 1; i < 3; i++) {
Species c = new Species();
c.setId("" + i);
+ c.setReferenceTaxonId(i);
c.setName("speciesName" + i);
c.setRefTaxCode("speciesRefTaxCode" + i);
result.put(i + "", c);
1
0
r365 - in trunk/tutti-persistence/src/main: java/fr/ifremer/tutti/persistence/service resources
by blavenier@users.forge.codelutin.com 08 Feb '13
by blavenier@users.forge.codelutin.com 08 Feb '13
08 Feb '13
Author: blavenier
Date: 2013-02-08 17:15:42 +0100 (Fri, 08 Feb 2013)
New Revision: 365
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/365
Log:
Fix :
- change call of adagio-core->TaxonNameDao (new API for synonyms management)
Modified:
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java
trunk/tutti-persistence/src/main/resources/applicationContext-service-tutti.xml
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java 2013-02-08 10:29:38 UTC (rev 364)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java 2013-02-08 16:15:42 UTC (rev 365)
@@ -28,6 +28,9 @@
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import fr.ifremer.adagio.core.dao.referential.StatusDao;
+import fr.ifremer.adagio.core.dao.referential.taxon.ReferenceTaxon;
+import fr.ifremer.adagio.core.dao.referential.taxon.ReferenceTaxonDao;
+import fr.ifremer.adagio.core.dao.referential.taxon.TaxonName;
import fr.ifremer.adagio.core.dao.referential.taxon.TaxonNameExtendDao;
import fr.ifremer.adagio.core.dao.referential.taxon.TaxonRefTaxVO;
import fr.ifremer.tutti.persistence.entities.TuttiEntities;
@@ -50,6 +53,7 @@
import org.hibernate.type.DateType;
import org.hibernate.type.IntegerType;
import org.hibernate.type.StringType;
+import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
@@ -78,6 +82,9 @@
@Resource(name = "statusDao")
protected StatusDao statusDao;
+
+ @Resource(name = "referenceTaxonDao")
+ protected ReferenceTaxonDao referenceTaxonDao;
//------------------------------------------------------------------------//
//-- ReferentialPersistenceService implentation --//
@@ -213,7 +220,7 @@
}
@Override
- @Cacheable(value = "tuttiAllFishingVessel")
+ @Cacheable(value = "fishingVessels")
public List<Vessel> getAllFishingVessel() {
Iterator<Object[]> list = queryListWithStatus(
"allVessels",
@@ -363,9 +370,10 @@
}
@Override
+ @Cacheable(value = "species")
public List<Species> getAllSpecies() {
- TaxonRefTaxVO[] sources = taxonNameDao.getAllTaxonRefTax();
+ TaxonRefTaxVO[] sources = taxonNameDao.getAllTaxonNames(true);
List<Species> result = Lists.newArrayList();
for (TaxonRefTaxVO source : sources) {
@@ -376,8 +384,9 @@
}
@Override
+ //TODO manage Cacheable(value = "species")
public Species getSpecies(String speciesId) {
- TaxonRefTaxVO source = taxonNameDao.getTaxonRefTax(
+ TaxonRefTaxVO source = taxonNameDao.getTaxonNameReferent(
Integer.valueOf(speciesId));
Species target = loadSpecies(source);
@@ -385,6 +394,7 @@
}
@Override
+ @Cacheable(value = "pmfms")
public List<Caracteristic> getAllCaracteristic() {
Iterator<Object[]> sources = queryListWithStatus(
"allPmfm",
@@ -454,6 +464,7 @@
}
@Override
+ //TODO manage Cacheable(value = "pmfms")
public Caracteristic getCaracteristic(Integer pmfmId) {
Object[] source = queryUniqueWithStatus("pmfmById",
"pmfmId", IntegerType.INSTANCE, pmfmId,
@@ -463,24 +474,34 @@
}
@Override
+ @CacheEvict (value = "species")
public List<Species> importTemporarySpecies(List<Species> species) {
- //TODO
- return null;
+ List<Species> result = Lists.newArrayList();
+ for (Iterator iterator = species.iterator(); iterator.hasNext();) {
+ Species source = (Species) iterator.next();
+
+ source = importTemporarySpecies(source);
+ result.add(source);
+ }
+ return result;
}
@Override
+ @CacheEvict (value = "fishingVessels")
public List<Vessel> importTemporaryVessel(List<Vessel> vessels) {
//TODO
return null;
}
@Override
+ @CacheEvict (value = "persons")
public List<Person> importTemporaryPerson(List<Person> persons) {
//TODO
return null;
}
@Override
+ @CacheEvict (value = "gears")
public List<Gear> importTemporaryGear(List<Gear> gears) {
//TODO
return null;
@@ -489,6 +510,31 @@
//------------------------------------------------------------------------//
//-- Internal methods --//
//------------------------------------------------------------------------//
+
+ protected Species importTemporarySpecies(Species source) {
+ Preconditions.checkNotNull(source);
+ Preconditions.checkNotNull(source.getName());
+
+ // Generate a new id for referenceTaxon
+ Integer referenceTaxonId = queryUniqueTyped(
+ "newReferenceTaxonTemporaryId");
+
+ ReferenceTaxon referenceTaxon = ReferenceTaxon.Factory.newInstance();
+ referenceTaxon.setId(referenceTaxonId);
+ referenceTaxon.setName(source.getName());
+
+ referenceTaxon = referenceTaxonDao.create(referenceTaxon);
+// source.setReferenceTaxonId()
+
+ TaxonName taxonName = TaxonName.Factory.newInstance();
+ taxonName.setIsTemporary(true);
+ taxonName.setIsReferent(true);
+ taxonName.setReferenceTaxon(referenceTaxon);
+ taxonName.setName(source.getName());
+
+
+ return source;
+ }
protected List<FishingOperationLocation> getFishingOperationLocations(Integer locationLevelId) {
Iterator<Object[]> sources = queryListWithStatus(
Modified: trunk/tutti-persistence/src/main/resources/applicationContext-service-tutti.xml
===================================================================
--- trunk/tutti-persistence/src/main/resources/applicationContext-service-tutti.xml 2013-02-08 10:29:38 UTC (rev 364)
+++ trunk/tutti-persistence/src/main/resources/applicationContext-service-tutti.xml 2013-02-08 16:15:42 UTC (rev 365)
@@ -37,7 +37,11 @@
<bean id="tuttiEnumerationFile" init-method="init"
class="fr.ifremer.tutti.persistence.service.TuttiEnumerationFile"/>
- <!-- Specific caches for tutti (not defined in ehcache.xml) -->
+ <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+ <!-- Caches management for tutti (not defined in adagio-core/ehcache.xml) -->
+ <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+
+ <!-- Session caches : -->
<bean id="tuttiAbstractCache" abstract="true" class="org.springframework.cache.ehcache.EhCacheFactoryBean">
<property name="cacheManager" ref="ehcache"/>
<property name="maxElementsInMemory" value="5000"/>
@@ -47,10 +51,14 @@
<property name="overflowToDisk" value="false"/>
<property name="diskPersistent" value="false"/>
<property name="diskExpiryThreadIntervalSeconds" value="300"/>
- </bean>
+ </bean>
+
+ <bean id="tuttiPmfmsCache" parent="tuttiAbstractEternalCache">
+ <property name="cacheName" value="pmfms" />
+ </bean>
- <bean id="tuttiAllFishingVesselCache" parent="tuttiAbstractCache">
- <property name="cacheName" value="tuttiAllFishingVessel" />
+ <!-- Eternal caches : -->
+ <bean id="tuttiAbstractEternalCache" abstract="true" parent="tuttiAbstractCache">
<property name="eternal" value="true"/>
<property name="overflowToDisk" value="true"/>
<property name="diskPersistent" value="true"/>
@@ -59,6 +67,22 @@
<property name="timeToIdle" value="0"/>
</bean>
+ <bean id="tuttiFishingVesselsCache" parent="tuttiAbstractEternalCache">
+ <property name="cacheName" value="fishingVessels" />
+ </bean>
+
+ <bean id="tuttiSpeciesCache" parent="tuttiAbstractEternalCache">
+ <property name="cacheName" value="species" />
+ </bean>
+
+ <bean id="tuttiGearsCache" parent="tuttiAbstractEternalCache">
+ <property name="cacheName" value="gears" />
+ </bean>
+
+ <bean id="tuttiPersonsCache" parent="tuttiAbstractEternalCache">
+ <property name="cacheName" value="persons" />
+ </bean>
+
<!-- Example to use to create a new cache area :
<bean id="tuttiOtherCache" parent="tuttiPersistenceDefaultCache">
</bean> -->
1
0
08 Feb '13
Author: tchemit
Date: 2013-02-08 11:29:38 +0100 (Fri, 08 Feb 2013)
New Revision: 364
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/364
Log:
ajout dans les esp?\195?\168ce de l'id de r?\195?\169f?\195?\169rence + du boolean referenceTaxon dans Species
Modified:
trunk/tutti-persistence/src/main/xmi/tutti-persistence.zargo
Modified: trunk/tutti-persistence/src/main/xmi/tutti-persistence.zargo
===================================================================
(Binary files differ)
1
0
08 Feb '13
Author: tchemit
Date: 2013-02-08 10:16:44 +0100 (Fri, 08 Feb 2013)
New Revision: 363
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/363
Log:
add referenceTaxonId field to Species
Modified:
trunk/tutti-persistence/src/main/xmi/tutti-persistence.zargo
Modified: trunk/tutti-persistence/src/main/xmi/tutti-persistence.zargo
===================================================================
(Binary files differ)
1
0
07 Feb '13
Author: kmorin
Date: 2013-02-07 23:31:52 +0100 (Thu, 07 Feb 2013)
New Revision: 362
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/362
Log:
- move validator widget and component resizer and mover into jaxx
- start weight computing in the catches
Removed:
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/ComponentMover.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/ComponentResizer.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/SwingValidatorMessageWidget.java
trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-validate-warning-validation.xml
trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUIModel-warning-validation.xml
trunk/tutti-ui-swing/src/main/resources/icons/action-alert-error.png
trunk/tutti-ui-swing/src/main/resources/icons/action-alert-info.png
trunk/tutti-ui-swing/src/main/resources/icons/action-alert-none.png
trunk/tutti-ui-swing/src/main/resources/icons/action-alert-warning.png
Modified:
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/AbstractTuttiUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/MainUI.jaxx
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SampleCategory.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SampleCategoryComponent.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchRowModel.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchTableModel.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.css
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.jaxx
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/FrequencyCellComponent.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchRowModel.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUI.css
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUI.jaxx
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUIModel.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/editor/AttachmentCellComponent.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/editor/LongTextCellComponent.java
trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUIModel-error-validation.xml
trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/AbstractTuttiUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/AbstractTuttiUIHandler.java 2013-02-07 18:51:36 UTC (rev 361)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/AbstractTuttiUIHandler.java 2013-02-07 22:31:52 UTC (rev 362)
@@ -297,7 +297,7 @@
if (italicStyle != null && italicStyle) {
text = "<em>" + text + "</em>";
}
- jLabel.setText("<html>" + text + "</strong>");
+ jLabel.setText("<html>" + text + "</html>");
}
} else if (component instanceof AbstractButton) {
AbstractButton abstractButton = (AbstractButton) component;
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/MainUI.jaxx
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/MainUI.jaxx 2013-02-07 18:51:36 UTC (rev 361)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/MainUI.jaxx 2013-02-07 22:31:52 UTC (rev 362)
@@ -30,7 +30,7 @@
javax.swing.JFrame
org.jdesktop.swingx.JXTitledPanel
jaxx.runtime.validator.swing.SwingValidator
- fr.ifremer.tutti.ui.swing.util.SwingValidatorMessageWidget
+ jaxx.runtime.validator.swing.SwingValidatorMessageWidget
fr.ifremer.tutti.ui.swing.TuttiUIContext
</import>
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java 2013-02-07 18:51:36 UTC (rev 361)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java 2013-02-07 22:31:52 UTC (rev 362)
@@ -97,12 +97,47 @@
//check if the user changed the date and not only the time)
Date oldDate = (Date) evt.getOldValue();
Date newDate = (Date) evt.getNewValue();
- if (!DateUtils.isSameDay(oldDate, newDate)) {
+ if (oldDate == null || !DateUtils.isSameDay(oldDate, newDate)) {
getModel().setGearShootingEndDate(newDate);
}
}
+ };
+
+ private final PropertyChangeListener coordinatePropertiesListener = new PropertyChangeListener() {
+ private List<String> properties = Lists.newArrayList(
+ EditFishingOperationUIModel.PROPERTY_FISHING_OPERATION_RECTILIGNE,
+ EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE,
+ EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_DECIMAL_MINUTE,
+ EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_DEGREE,
+ EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_MINUTE,
+ EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_SECOND,
+ EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE,
+ EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DECIMAL_MINUTE,
+ EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DEGREE,
+ EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_MINUTE,
+ EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_SECOND,
+ EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE,
+ EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_DECIMAL_MINUTE,
+ EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_DEGREE,
+ EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_MINUTE,
+ EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_SECOND,
+ EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE,
+ EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DECIMAL_MINUTE,
+ EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DEGREE,
+ EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_MINUTE,
+ EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_SECOND
+ );
+ @Override
+ public void propertyChange(PropertyChangeEvent evt) {
+ if (properties.contains(evt.getPropertyName())) {
+ EditFishingOperationUIModel source = (EditFishingOperationUIModel) evt.getSource();
+ if (source.isFishingOperationRectiligne()) {
+ source.computeDictance();
+ }
+ }
+ }
};
/**
@@ -182,43 +217,6 @@
}
});
- model.addPropertyChangeListener(new PropertyChangeListener() {
-
- List<String> properties = Lists.newArrayList(
- EditFishingOperationUIModel.PROPERTY_FISHING_OPERATION_RECTILIGNE,
- EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE,
- EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_DECIMAL_MINUTE,
- EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_DEGREE,
- EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_MINUTE,
- EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_SECOND,
- EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE,
- EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DECIMAL_MINUTE,
- EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DEGREE,
- EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_MINUTE,
- EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_SECOND,
- EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE,
- EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_DECIMAL_MINUTE,
- EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_DEGREE,
- EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_MINUTE,
- EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_SECOND,
- EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE,
- EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DECIMAL_MINUTE,
- EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DEGREE,
- EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_MINUTE,
- EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_SECOND
- );
-
- @Override
- public void propertyChange(PropertyChangeEvent evt) {
- if (properties.contains(evt.getPropertyName())) {
- EditFishingOperationUIModel source = (EditFishingOperationUIModel) evt.getSource();
- if (source.isFishingOperationRectiligne()) {
- source.computeDictance();
- }
- }
- }
- });
-
model.addPropertyChangeListener(EditFishingOperationUIModel.PROPERTY_FISHING_OPERATION_VALID, new PropertyChangeListener() {
@Override
@@ -456,6 +454,7 @@
EditFishingOperationUIModel model = getModel();
model.removePropertyChangeListener(EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_DATE, startDateListener);
+ model.removePropertyChangeListener(coordinatePropertiesListener);
if (empty || !bean.equals(model.getFishingOperation()) || isAModelModified()) {
if (empty) {
@@ -524,6 +523,7 @@
fishingOperationMonitor.clearModified();
model.addPropertyChangeListener(EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_DATE, startDateListener);
+ model.addPropertyChangeListener(coordinatePropertiesListener);
}
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SampleCategory.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SampleCategory.java 2013-02-07 18:51:36 UTC (rev 361)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SampleCategory.java 2013-02-07 22:31:52 UTC (rev 362)
@@ -58,6 +58,13 @@
* @since 0.3
*/
protected Float categoryWeight;
+
+ /**
+ * Sample computed weight.
+ *
+ * @since 1.0
+ */
+ protected Float computedWeight;
public static <C extends Serializable> SampleCategory<C> newSample(SampleCategoryType categoryType) {
SampleCategory<C> result = new SampleCategory<C>();
@@ -92,12 +99,22 @@
this.categoryWeight = categoryWeight;
}
+ public Float getComputedWeight() {
+ return computedWeight;
+ }
+
+ public void setComputedWeight(Float computedWeight) {
+ this.computedWeight = computedWeight;
+ }
+
public boolean isValid() {
return categoryValue != null;
}
public boolean isEmpty() {
- return categoryValue == null && categoryWeight == null;
+ return categoryValue == null
+ && categoryWeight == null
+ && computedWeight == null;
}
public boolean isEmptyOrValid() {
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SampleCategoryComponent.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SampleCategoryComponent.java 2013-02-07 18:51:36 UTC (rev 361)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SampleCategoryComponent.java 2013-02-07 22:31:52 UTC (rev 362)
@@ -217,14 +217,19 @@
text = "";
} else {
Float number = sampleCategory.getCategoryWeight();
+ Float computedNumber = sampleCategory.getComputedWeight();
+
+ text = "<html>" + categoryDecorator.toString(categoryValue) + " / ";
- text = categoryDecorator.toString(categoryValue) + " / ";
-
- if (number == null) {
+ if (number != null) {
+ text += number;
+ } else if (computedNumber != null) {
+ text += "<em style='color: blue'>" + computedNumber + "</em>";
+ } else {
text += "-";
- } else {
- text += number;
}
+
+ text += "</html>";
}
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchRowModel.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchRowModel.java 2013-02-07 18:51:36 UTC (rev 361)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchRowModel.java 2013-02-07 22:31:52 UTC (rev 362)
@@ -59,6 +59,8 @@
public static final String PROPERTY_SORTED_UNSORTED_CATEGORY_VALUE = "sortedUnsortedCategoryValue";
public static final String PROPERTY_SORTED_UNSORTED_CATEGORY_WEIGHT = "sortedUnsortedCategoryWeight";
+
+ public static final String PROPERTY_SORTED_UNSORTED_COMPUTED_WEIGHT = "sortedUnsortedComputedWeight";
public static final String PROPERTY_SIZE_CATEGORY = "sizeCategory";
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchTableModel.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchTableModel.java 2013-02-07 18:51:36 UTC (rev 361)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchTableModel.java 2013-02-07 22:31:52 UTC (rev 362)
@@ -134,11 +134,6 @@
n_("tutti.table.species.batch.header.computedNumber"),
n_("tutti.table.species.batch.header.computedNumber"));
- public static final ColumnIdentifier<SpeciesBatchRowModel> NUMBER = ColumnIdentifier.newId(
- SpeciesBatchRowModel.PROPERTY_NUMBER,
- n_("tutti.table.species.batch.header.number"),
- n_("tutti.table.species.batch.header.number"));
-
public static final ColumnIdentifier<SpeciesBatchRowModel> COMMENT = ColumnIdentifier.newId(
SpeciesBatchRowModel.PROPERTY_COMMENT,
n_("tutti.table.species.batch.header.comment"),
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.css
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.css 2013-02-07 18:51:36 UTC (rev 361)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.css 2013-02-07 22:31:52 UTC (rev 362)
@@ -57,9 +57,9 @@
}
#speciesTotalSampleSortedWeightField {
- property: speciesTotalSampleSortedWeight;
- model: {model.getSpeciesTotalSampleSortedWeight()};
- numberPattern: {INT_6_DIGITS_PATTERN};
+ text: {getStringValue(model.getSpeciesTotalUnsortedWeight())};
+ editable: false;
+ enabled: false;
}
#speciesTotalUnsortedWeightLabel {
@@ -138,6 +138,12 @@
enabled: {model.isCreateSpeciesBatchEnabled()};
}
+#computeSpeciesBatchButton {
+ actionIcon: generate;
+ mnemonic: E;
+ text: "tutti.action.computeSpeciesBatch";
+}
+
#filterTablePane {
border: {new TitledBorder(null, "")};
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.jaxx
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.jaxx 2013-02-07 18:51:36 UTC (rev 361)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.jaxx 2013-02-07 22:31:52 UTC (rev 362)
@@ -113,8 +113,7 @@
<JLabel id='speciesTotalSampleSortedWeightLabel'/>
</cell>
<cell>
- <NumberEditor id='speciesTotalSampleSortedWeightField'
- constructorParams='this'/>
+ <JTextField id='speciesTotalSampleSortedWeightField'/>
</cell>
<cell>
<JLabel id='speciesTotalUnsortedWeightLabel'/>
@@ -157,6 +156,8 @@
<JRadioButton id='filterSpeciesBatchRootButton'
onActionPerformed='model.setTableViewMode(TableViewMode.ROOT)'/>
</JPanel>
+ <JButton id='computeSpeciesBatchButton' constraints='BorderLayout.EAST'
+ onActionPerformed='handler.computeSpeciesBatch()'/>
</JPanel>
</cell>
</row>
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java 2013-02-07 18:51:36 UTC (rev 361)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java 2013-02-07 22:31:52 UTC (rev 362)
@@ -838,15 +838,112 @@
totalWeight += w;
}
}
+ } else {
+ totalNumber = row.getNumber();
}
row.setComputedNumber(totalNumber);
+
+ SampleCategory finestCategory;
+ if (row.getAgeCategory().isValid()) {
+ finestCategory = row.getAgeCategory();
+
+ } else if (row.getMaturityCategory().isValid()) {
+ finestCategory = row.getMaturityCategory();
+
+ } else if (row.getSexCategory().isValid()) {
+ finestCategory = row.getSexCategory();
+
+ } else if (row.getSizeCategory().isValid()) {
+ finestCategory = row.getSizeCategory();
+
+ } else {
+ finestCategory = row.getSortedUnsortedCategory();
+ }
+ if (finestCategory.getCategoryWeight() == null) {
+ finestCategory.setComputedWeight(totalWeight);
+ }
+
}
+
+ public void computeSpeciesBatch() {
+ Float totalSortedWeight = 0f;
+ Float totalUnsortedWeight = 0f;
+ List<SpeciesBatchRowModel> roots = getModel().getRows();
+ for (SpeciesBatchRowModel row : roots) {
+ if (row.isBatchRoot()) {
+ Float weight = computeSpeciesBatch(row);
+ if (weight == null) {
+ JOptionPane.showMessageDialog(
+ ui,
+ _("tutti.dialog.catches.species.computeWeight.error.message"),
+ _("tutti.dialog.catches.species.computeWeight.error.title"),
+ JOptionPane.ERROR_MESSAGE);
+ totalSortedWeight = null;
+ totalUnsortedWeight = null;
+ break;
+ }
+ if (persistenceService.isSortedQualitativeValue(row.getSortedUnsortedCategory().getCategoryValue())) {
+ totalSortedWeight += weight;
+ } else {
+ totalUnsortedWeight += weight;
+ }
+ }
+ }
+ ui.getSpeciesTotalSampleSortedWeightField()
+ .setText(totalSortedWeight != null ? totalSortedWeight.toString() : "");
+ ui.getSpeciesTotalUnsortedWeightField()
+ .setText(totalUnsortedWeight != null ? totalUnsortedWeight.toString() : "");
+ }
//------------------------------------------------------------------------//
//-- Internal methods --//
//------------------------------------------------------------------------//
+ protected Float computeSpeciesBatch(SpeciesBatchRowModel row) {
+ Float sum = null;
+ List<SpeciesBatchRowModel> children = row.getBatchChild();
+ if (!row.isBatchLeaf()) {
+ for (SpeciesBatchRowModel child : children) {
+ Float weight = computeSpeciesBatch(child);
+ if (weight == null) {
+ return null;
+ }
+ sum += weight;
+ }
+ }
+
+ SampleCategory finestCategory;
+ if (row.getAgeCategory().isValid()) {
+ finestCategory = row.getAgeCategory();
+
+ } else if (row.getMaturityCategory().isValid()) {
+ finestCategory = row.getMaturityCategory();
+
+ } else if (row.getSexCategory().isValid()) {
+ finestCategory = row.getSexCategory();
+
+ } else if (row.getSizeCategory().isValid()) {
+ finestCategory = row.getSizeCategory();
+
+ } else {
+ finestCategory = row.getSortedUnsortedCategory();
+ }
+ Float weight = finestCategory.getCategoryWeight();
+ if (weight == null) {
+ weight = finestCategory.getComputedWeight();
+ }
+ Float result;
+ if (sum != null && weight == null) {
+ finestCategory.setComputedWeight(sum);
+ result = sum;
+
+ } else {
+ result = weight;
+ }
+ return result;
+ }
+
protected void saveRows(Iterable<SpeciesBatchRowModel> rows) {
for (SpeciesBatchRowModel row : rows) {
saveRow(row);
@@ -984,7 +1081,8 @@
if (enableSplit) {
// can split if selected batch is a leaf
- enableSplit = row.isBatchLeaf();
+ enableSplit = row.isBatchLeaf()
+ && row.getComputedNumber() == null;
}
if (enableRename) {
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/FrequencyCellComponent.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/FrequencyCellComponent.java 2013-02-07 18:51:36 UTC (rev 361)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/FrequencyCellComponent.java 2013-02-07 22:31:52 UTC (rev 362)
@@ -150,15 +150,13 @@
// at close, synch back frequencies
- // transfer rows to editor
- List<SpeciesFrequencyRowModel> frequency = Lists.newArrayList();
-
if (frequencyModel.isSimpleCountingMode()) {
- SpeciesFrequencyRowModel row = new SpeciesFrequencyRowModel();
- row.setNumber(frequencyModel.getSimpleCount());
- frequency.add(row);
+ editRow.setNumber(frequencyModel.getSimpleCount());
} else {
+ // transfer rows to editor
+ List<SpeciesFrequencyRowModel> frequency = Lists.newArrayList();
+
for (SpeciesFrequencyRowModel row : frequencyModel.getRows()) {
if (row.isValid()) {
@@ -166,18 +164,20 @@
frequency.add(row);
}
}
- }
+ if (log.isInfoEnabled()) {
+ log.info("Push back " + frequency.size() +
+ " frequency to batch " + frequencyModel.getBatch());
+ }
- if (log.isInfoEnabled()) {
- log.info("Push back " + frequency.size() +
- " frequency to batch " + frequencyModel.getBatch());
+ // push back to batch
+ editRow.setFrequency(frequency);
+ editRow.setNumber(null);
+
}
-
- // push back to batch
- editRow.setFrequency(frequency);
-
+
// update frequencies total
ui.getHandler().updateTotalFromFrequencies(editRow);
+
}
int r = rowIndex;
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchRowModel.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchRowModel.java 2013-02-07 18:51:36 UTC (rev 361)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchRowModel.java 2013-02-07 22:31:52 UTC (rev 362)
@@ -54,7 +54,7 @@
* @since 0.3
*/
protected final SampleCategory<Serializable> category = SampleCategory.newSample(null);
-
+
protected static final Binder<SplitSpeciesBatchRowModel, SplitSpeciesBatchRowModel> fromBeanBinder =
BinderFactory.newBinder(SplitSpeciesBatchRowModel.class,
SplitSpeciesBatchRowModel.class);
@@ -106,5 +106,5 @@
category.setCategoryWeight(weight);
firePropertyChange(PROPERTY_WEIGHT, oldValue, weight);
}
-
+
}
\ No newline at end of file
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUI.css
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUI.css 2013-02-07 18:51:36 UTC (rev 361)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUI.css 2013-02-07 22:31:52 UTC (rev 362)
@@ -48,12 +48,6 @@
selectedItem: {model.getSelectedCategory()};
}
-#sampleCheckBox {
- text: "tutti.label.sampleCategoryConfiguration.sample";
- selected: {model.isSample()};
- enabled: {model.getBatchWeight() != null};
-}
-
#speciesLabel {
text: "tutti.label.sampleCategoryConfiguration.species";
labelFor: {speciesField};
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUI.jaxx
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUI.jaxx 2013-02-07 18:51:36 UTC (rev 361)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUI.jaxx 2013-02-07 22:31:52 UTC (rev 362)
@@ -69,7 +69,6 @@
<BeanValidator id='validator' bean='model' errorTableModel='errorTableModel'
uiClass='jaxx.runtime.validator.swing.ui.ImageValidationUI'>
<field name='selectedCategory' component='categoryComboBox'/>
- <field name='sample' component='sampleCheckBox'/>
<field name='sampleWeight' component='sampleWeightField'/>
</BeanValidator>
@@ -86,15 +85,7 @@
</cell>
</row>
- <!-- Split as a sample or not ? -->
<row>
- <cell columns='2'>
- <JCheckBox id='sampleCheckBox'
- onItemStateChanged='handler.setBoolean(event, "sample")'/>
- </cell>
- </row>
-
- <row>
<cell columns="2">
<JSeparator/>
</cell>
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUIModel.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUIModel.java 2013-02-07 18:51:36 UTC (rev 361)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUIModel.java 2013-02-07 22:31:52 UTC (rev 362)
@@ -46,8 +46,6 @@
public static final String PROPERTY_SPECIES = "species";
- public static final String PROPERTY_SAMPLE = "sample";
-
public static final String PROPERTY_SELECTED_CATEGORY = "selectedCategory";
public static final String PROPERTY_BATCH_WEIGHT = "batchWeight";
@@ -76,13 +74,6 @@
protected SampleCategoryType selectedCategory;
/**
- * Flag when the batch to split is a sample.
- *
- * @since 0.3
- */
- protected boolean sample;
-
- /**
* Sample weight of split batches.
*
* @since 0.3
@@ -130,16 +121,6 @@
firePropertyChange(PROPERTY_SELECTED_CATEGORY, oldValue, selectedCategory);
}
- public boolean isSample() {
- return sample;
- }
-
- public void setSample(boolean sample) {
- Object oldValue = isSample();
- this.sample = sample;
- firePropertyChange(PROPERTY_SAMPLE, oldValue, sample);
- }
-
public Float getBatchWeight() {
return batch == null ? null : batch.getSampleCategory().getCategoryWeight();
}
Deleted: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/ComponentMover.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/ComponentMover.java 2013-02-07 18:51:36 UTC (rev 361)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/ComponentMover.java 2013-02-07 22:31:52 UTC (rev 362)
@@ -1,380 +0,0 @@
-package fr.ifremer.tutti.ui.swing.util;
-
-/*
- * #%L
- * Tutti :: UI
- * $Id$
- * $HeadURL$
- * %%
- * Copyright (C) 2012 Ifremer
- * %%
- * 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 javax.swing.JComponent;
-import javax.swing.SwingUtilities;
-import java.awt.Component;
-import java.awt.Cursor;
-import java.awt.Dimension;
-import java.awt.GraphicsEnvironment;
-import java.awt.Insets;
-import java.awt.Point;
-import java.awt.Rectangle;
-import java.awt.Window;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-
-/**
- * This class allows you to move a Component by using a mouse. The Component
- * moved can be a high level Window (ie. Window, Frame, Dialog) in which case
- * the Window is moved within the desktop. Or the Component can belong to a
- * Container in which case the Component is moved within the Container.
- * <p/>
- * When moving a Window, the listener can be added to a child Component of
- * the Window. In this case attempting to move the child will result in the
- * Window moving. For example, you might create a custom "Title Bar" for an
- * undecorated Window and moving of the Window is accomplished by moving the
- * title bar only. Multiple components can be registered as "window movers".
- * <p/>
- * Components can be registered when the class is created. Additional
- * components can be added at any time using the registerComponent() method.
- */
-public class ComponentMover extends MouseAdapter {
- private Insets dragInsets = new Insets(0, 0, 0, 0);
-
- private Dimension snapSize = new Dimension(1, 1);
-
- private Insets edgeInsets = new Insets(0, 0, 0, 0);
-
- private boolean changeCursor = true;
-
- private boolean autoLayout = false;
-
- private Class destinationClass;
-
- private Component destinationComponent;
-
- private Component destination;
-
- private Component source;
-
- private Point pressed;
-
- private Point location;
-
- private Cursor originalCursor;
-
- private boolean autoscrolls;
-
- private boolean potentialDrag;
-
-
- /**
- * Constructor for moving individual components. The components must be
- * regisetered using the registerComponent() method.
- */
- public ComponentMover() {
- }
-
- /**
- * Constructor to specify a Class of Component that will be moved when
- * drag events are generated on a registered child component. The events
- * will be passed to the first ancestor of this specified class.
- *
- * @param destinationClass the Class of the ancestor component
- * @param components the Components to be registered for forwarding
- * drag events to the ancestor Component.
- */
- public ComponentMover(Class destinationClass, Component... components) {
- this.destinationClass = destinationClass;
- registerComponent(components);
- }
-
- /**
- * Constructor to specify a parent component that will be moved when drag
- * events are generated on a registered child component.
- *
- * @param destinationComponent the component drage events should be forwareded to
- * @param components the Components to be registered for forwarding drag
- * events to the parent component to be moved
- */
- public ComponentMover(Component destinationComponent, Component... components) {
- this.destinationComponent = destinationComponent;
- registerComponent(components);
- }
-
- /**
- * Get the auto layout property
- *
- * @return the auto layout property
- */
- public boolean isAutoLayout() {
- return autoLayout;
- }
-
- /**
- * Set the auto layout property
- *
- * @param autoLayout when true layout will be invoked on the parent container
- */
- public void setAutoLayout(boolean autoLayout) {
- this.autoLayout = autoLayout;
- }
-
- /**
- * Get the change cursor property
- *
- * @return the change cursor property
- */
- public boolean isChangeCursor() {
- return changeCursor;
- }
-
- /**
- * Set the change cursor property
- *
- * @param changeCursor when true the cursor will be changed to the
- * Cursor.MOVE_CURSOR while the mouse is pressed
- */
- public void setChangeCursor(boolean changeCursor) {
- this.changeCursor = changeCursor;
- }
-
- /**
- * Get the drag insets
- *
- * @return the drag insets
- */
- public Insets getDragInsets() {
- return dragInsets;
- }
-
- /**
- * Set the drag insets. The insets specify an area where mouseDragged
- * events should be ignored and therefore the component will not be moved.
- * This will prevent these events from being confused with a
- * MouseMotionListener that supports component resizing.
- *
- * @param dragInsets
- */
- public void setDragInsets(Insets dragInsets) {
- this.dragInsets = dragInsets;
- }
-
- /**
- * Get the bounds insets
- *
- * @return the bounds insets
- */
- public Insets getEdgeInsets() {
- return edgeInsets;
- }
-
- /**
- * Set the edge insets. The insets specify how close to each edge of the parent
- * component that the child component can be moved. Positive values means the
- * component must be contained within the parent. Negative values means the
- * component can be moved outside the parent.
- *
- * @param edgeInsets
- */
- public void setEdgeInsets(Insets edgeInsets) {
- this.edgeInsets = edgeInsets;
- }
-
- /**
- * Remove listeners from the specified component
- *
- * @param components the component the listeners are removed from
- */
- public void deregisterComponent(Component... components) {
- for (Component component : components)
- component.removeMouseListener(this);
- }
-
- /**
- * Add the required listeners to the specified component
- *
- * @param components the component the listeners are added to
- */
- public void registerComponent(Component... components) {
- for (Component component : components)
- component.addMouseListener(this);
- }
-
- /**
- * Get the snap size
- *
- * @return the snap size
- */
- public Dimension getSnapSize() {
- return snapSize;
- }
-
- /**
- * Set the snap size. Forces the component to be snapped to
- * the closest grid position. Snapping will occur when the mouse is
- * dragged half way.
- */
- public void setSnapSize(Dimension snapSize) {
- if (snapSize.width < 1
- || snapSize.height < 1)
- throw new IllegalArgumentException("Snap sizes must be greater than 0");
-
- this.snapSize = snapSize;
- }
-
- /**
- * Setup the variables used to control the moving of the component:
- * <p/>
- * source - the source component of the mouse event
- * destination - the component that will ultimately be moved
- * pressed - the Point where the mouse was pressed in the destination
- * component coordinates.
- */
- @Override
- public void mousePressed(MouseEvent e) {
- source = e.getComponent();
- int width = source.getSize().width - dragInsets.left - dragInsets.right;
- int height = source.getSize().height - dragInsets.top - dragInsets.bottom;
- Rectangle r = new Rectangle(dragInsets.left, dragInsets.top, width, height);
-
- if (r.contains(e.getPoint()))
- setupForDragging(e);
- }
-
- private void setupForDragging(MouseEvent e) {
- source.addMouseMotionListener(this);
- potentialDrag = true;
-
- // Determine the component that will ultimately be moved
-
- if (destinationComponent != null) {
- destination = destinationComponent;
- } else if (destinationClass == null) {
- destination = source;
- } else // forward events to destination component
- {
- destination = SwingUtilities.getAncestorOfClass(destinationClass, source);
- }
-
- pressed = e.getLocationOnScreen();
- location = destination.getLocation();
-
- if (changeCursor) {
- originalCursor = source.getCursor();
- source.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
- }
-
- // Making sure autoscrolls is false will allow for smoother dragging of
- // individual components
-
- if (destination instanceof JComponent) {
- JComponent jc = (JComponent) destination;
- autoscrolls = jc.getAutoscrolls();
- jc.setAutoscrolls(false);
- }
- }
-
- /**
- * Move the component to its new location. The dragged Point must be in
- * the destination coordinates.
- */
- @Override
- public void mouseDragged(MouseEvent e) {
- Point dragged = e.getLocationOnScreen();
- int dragX = getDragDistance(dragged.x, pressed.x, snapSize.width);
- int dragY = getDragDistance(dragged.y, pressed.y, snapSize.height);
-
- int locationX = location.x + dragX;
- int locationY = location.y + dragY;
-
- // Mouse dragged events are not generated for every pixel the mouse
- // is moved. Adjust the location to make sure we are still on a
- // snap value.
-
- while (locationX < edgeInsets.left)
- locationX += snapSize.width;
-
- while (locationY < edgeInsets.top)
- locationY += snapSize.height;
-
- Dimension d = getBoundingSize(destination);
-
- while (locationX + destination.getSize().width + edgeInsets.right > d.width)
- locationX -= snapSize.width;
-
- while (locationY + destination.getSize().height + edgeInsets.bottom > d.height)
- locationY -= snapSize.height;
-
- // Adjustments are finished, move the component
-
- destination.setLocation(locationX, locationY);
- }
-
- /*
- * Determine how far the mouse has moved from where dragging started
- * (Assume drag direction is down and right for positive drag distance)
- */
- private int getDragDistance(int larger, int smaller, int snapSize) {
- int halfway = snapSize / 2;
- int drag = larger - smaller;
- drag += (drag < 0) ? -halfway : halfway;
- drag = (drag / snapSize) * snapSize;
-
- return drag;
- }
-
- /*
- * Get the bounds of the parent of the dragged component.
- */
- private Dimension getBoundingSize(Component source) {
- if (source instanceof Window) {
- GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
- Rectangle bounds = env.getMaximumWindowBounds();
- return new Dimension(bounds.width, bounds.height);
- } else {
- return source.getParent().getSize();
- }
- }
-
- /** Restore the original state of the Component */
- @Override
- public void mouseReleased(MouseEvent e) {
- if (!potentialDrag) return;
-
- source.removeMouseMotionListener(this);
- potentialDrag = false;
-
- if (changeCursor)
- source.setCursor(originalCursor);
-
- if (destination instanceof JComponent) {
- ((JComponent) destination).setAutoscrolls(autoscrolls);
- }
-
- // Layout the components on the parent container
-
- if (autoLayout) {
- if (destination instanceof JComponent) {
- ((JComponent) destination).revalidate();
- } else {
- destination.validate();
- }
- }
- }
-}
\ No newline at end of file
Deleted: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/ComponentResizer.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/ComponentResizer.java 2013-02-07 18:51:36 UTC (rev 361)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/ComponentResizer.java 2013-02-07 22:31:52 UTC (rev 362)
@@ -1,460 +0,0 @@
-package fr.ifremer.tutti.ui.swing.util;
-
-/*
- * #%L
- * Tutti :: UI
- * $Id$
- * $HeadURL$
- * %%
- * Copyright (C) 2012 Ifremer
- * %%
- * 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 javax.swing.JComponent;
-import javax.swing.SwingUtilities;
-import java.awt.Component;
-import java.awt.Cursor;
-import java.awt.Dimension;
-import java.awt.GraphicsEnvironment;
-import java.awt.Insets;
-import java.awt.Point;
-import java.awt.Rectangle;
-import java.awt.Window;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * The ComponentResizer allows you to resize a component by dragging a border
- * of the component.
- */
-public class ComponentResizer extends MouseAdapter {
- private final static Dimension MINIMUM_SIZE = new Dimension(10, 10);
-
- private final static Dimension MAXIMUM_SIZE =
- new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE);
-
- private static Map<Integer, Integer> cursors = new HashMap<Integer, Integer>();
-
- {
- cursors.put(1, Cursor.N_RESIZE_CURSOR);
- cursors.put(2, Cursor.W_RESIZE_CURSOR);
- cursors.put(4, Cursor.S_RESIZE_CURSOR);
- cursors.put(8, Cursor.E_RESIZE_CURSOR);
- cursors.put(3, Cursor.NW_RESIZE_CURSOR);
- cursors.put(9, Cursor.NE_RESIZE_CURSOR);
- cursors.put(6, Cursor.SW_RESIZE_CURSOR);
- cursors.put(12, Cursor.SE_RESIZE_CURSOR);
- }
-
- private Insets dragInsets;
-
- private Dimension snapSize;
-
- private int direction;
-
- protected static final int NORTH = 1;
-
- protected static final int WEST = 2;
-
- protected static final int SOUTH = 4;
-
- protected static final int EAST = 8;
-
- private Cursor sourceCursor;
-
- private boolean resizing;
-
- private Rectangle bounds;
-
- private Point pressed;
-
- private boolean autoscrolls;
-
- private Dimension minimumSize = MINIMUM_SIZE;
-
- private Dimension maximumSize = MAXIMUM_SIZE;
-
- /**
- * Convenience contructor. All borders are resizable in increments of
- * a single pixel. Components must be registered separately.
- */
- public ComponentResizer() {
- this(new Insets(5, 5, 5, 5), new Dimension(1, 1));
- }
-
- /**
- * Convenience contructor. All borders are resizable in increments of
- * a single pixel. Components can be registered when the class is created
- * or they can be registered separately afterwards.
- *
- * @param components components to be automatically registered
- */
- public ComponentResizer(Component... components) {
- this(new Insets(5, 5, 5, 5), new Dimension(1, 1), components);
- }
-
- /**
- * Convenience contructor. Eligible borders are resisable in increments of
- * a single pixel. Components can be registered when the class is created
- * or they can be registered separately afterwards.
- *
- * @param dragInsets Insets specifying which borders are eligible to be
- * resized.
- * @param components components to be automatically registered
- */
- public ComponentResizer(Insets dragInsets, Component... components) {
- this(dragInsets, new Dimension(1, 1), components);
- }
-
- /**
- * Create a ComponentResizer.
- *
- * @param dragInsets Insets specifying which borders are eligible to be
- * resized.
- * @param snapSize Specify the dimension to which the border will snap to
- * when being dragged. Snapping occurs at the halfway mark.
- * @param components components to be automatically registered
- */
- public ComponentResizer(Insets dragInsets, Dimension snapSize, Component... components) {
- setDragInsets(dragInsets);
- setSnapSize(snapSize);
- registerComponent(components);
- }
-
- /**
- * Get the drag insets
- *
- * @return the drag insets
- */
- public Insets getDragInsets() {
- return dragInsets;
- }
-
- /**
- * Set the drag dragInsets. The insets specify an area where mouseDragged
- * events are recognized from the edge of the border inwards. A value of
- * 0 for any size will imply that the border is not resizable. Otherwise
- * the appropriate drag cursor will appear when the mouse is inside the
- * resizable border area.
- *
- * @param dragInsets Insets to control which borders are resizeable.
- */
- public void setDragInsets(Insets dragInsets) {
- validateMinimumAndInsets(minimumSize, dragInsets);
-
- this.dragInsets = dragInsets;
- }
-
- /**
- * Get the components maximum size.
- *
- * @return the maximum size
- */
- public Dimension getMaximumSize() {
- return maximumSize;
- }
-
- /**
- * Specify the maximum size for the component. The component will still
- * be constrained by the size of its parent.
- *
- * @param maximumSize the maximum size for a component.
- */
- public void setMaximumSize(Dimension maximumSize) {
- this.maximumSize = maximumSize;
- }
-
- /**
- * Get the components minimum size.
- *
- * @return the minimum size
- */
- public Dimension getMinimumSize() {
- return minimumSize;
- }
-
- /**
- * Specify the minimum size for the component. The minimum size is
- * constrained by the drag insets.
- *
- * @param minimumSize the minimum size for a component.
- */
- public void setMinimumSize(Dimension minimumSize) {
- validateMinimumAndInsets(minimumSize, dragInsets);
-
- this.minimumSize = minimumSize;
- }
-
- /**
- * Remove listeners from the specified component
- *
- * @param components the component the listeners are removed from
- */
- public void deregisterComponent(Component... components) {
- for (Component component : components) {
- component.removeMouseListener(this);
- component.removeMouseMotionListener(this);
- }
- }
-
- /**
- * Add the required listeners to the specified component
- *
- * @param components the component the listeners are added to
- */
- public void registerComponent(Component... components) {
- for (Component component : components) {
- component.addMouseListener(this);
- component.addMouseMotionListener(this);
- }
- }
-
- /**
- * Get the snap size.
- *
- * @return the snap size.
- */
- public Dimension getSnapSize() {
- return snapSize;
- }
-
- /**
- * Control how many pixels a border must be dragged before the size of
- * the component is changed. The border will snap to the size once
- * dragging has passed the halfway mark.
- *
- * @param snapSize Dimension object allows you to separately spcify a
- * horizontal and vertical snap size.
- */
- public void setSnapSize(Dimension snapSize) {
- this.snapSize = snapSize;
- }
-
- /**
- * When the components minimum size is less than the drag insets then
- * we can't determine which border should be resized so we need to
- * prevent this from happening.
- */
- private void validateMinimumAndInsets(Dimension minimum, Insets drag) {
- int minimumWidth = drag.left + drag.right;
- int minimumHeight = drag.top + drag.bottom;
-
- if (minimum.width < minimumWidth
- || minimum.height < minimumHeight) {
- String message = "Minimum size cannot be less than drag insets";
- throw new IllegalArgumentException(message);
- }
- }
-
- /**
- */
- @Override
- public void mouseMoved(MouseEvent e) {
- Component source = e.getComponent();
- Point location = e.getPoint();
- direction = 0;
-
- if (location.x < dragInsets.left)
- direction += WEST;
-
- if (location.x > source.getWidth() - dragInsets.right - 1)
- direction += EAST;
-
- if (location.y < dragInsets.top)
- direction += NORTH;
-
- if (location.y > source.getHeight() - dragInsets.bottom - 1)
- direction += SOUTH;
-
- // Mouse is no longer over a resizable border
-
- if (direction == 0) {
- source.setCursor(sourceCursor);
- } else // use the appropriate resizable cursor
- {
- int cursorType = cursors.get(direction);
- Cursor cursor = Cursor.getPredefinedCursor(cursorType);
- source.setCursor(cursor);
- }
- }
-
- @Override
- public void mouseEntered(MouseEvent e) {
- if (!resizing) {
- Component source = e.getComponent();
- sourceCursor = source.getCursor();
- }
- }
-
- @Override
- public void mouseExited(MouseEvent e) {
- if (!resizing) {
- Component source = e.getComponent();
- source.setCursor(sourceCursor);
- }
- }
-
- @Override
- public void mousePressed(MouseEvent e) {
- // The mouseMoved event continually updates this variable
-
- if (direction == 0) return;
-
- // Setup for resizing. All future dragging calculations are done based
- // on the original bounds of the component and mouse pressed location.
-
- resizing = true;
-
- Component source = e.getComponent();
- pressed = e.getPoint();
- SwingUtilities.convertPointToScreen(pressed, source);
- bounds = source.getBounds();
-
- // Making sure autoscrolls is false will allow for smoother resizing
- // of components
-
- if (source instanceof JComponent) {
- JComponent jc = (JComponent) source;
- autoscrolls = jc.getAutoscrolls();
- jc.setAutoscrolls(false);
- }
- }
-
- /** Restore the original state of the Component */
- @Override
- public void mouseReleased(MouseEvent e) {
- resizing = false;
-
- Component source = e.getComponent();
- source.setCursor(sourceCursor);
-
- if (source instanceof JComponent) {
- ((JComponent) source).setAutoscrolls(autoscrolls);
- }
- }
-
- /**
- * Resize the component ensuring location and size is within the bounds
- * of the parent container and that the size is within the minimum and
- * maximum constraints.
- * <p/>
- * All calculations are done using the bounds of the component when the
- * resizing started.
- */
- @Override
- public void mouseDragged(MouseEvent e) {
- if (resizing == false) return;
-
- Component source = e.getComponent();
- Point dragged = e.getPoint();
- SwingUtilities.convertPointToScreen(dragged, source);
-
- changeBounds(source, direction, bounds, pressed, dragged);
- }
-
- protected void changeBounds(Component source, int direction, Rectangle bounds, Point pressed, Point current) {
- // Start with original locaton and size
-
- int x = bounds.x;
- int y = bounds.y;
- int width = bounds.width;
- int height = bounds.height;
-
- // Resizing the West or North border affects the size and location
-
- if (WEST == (direction & WEST)) {
- int drag = getDragDistance(pressed.x, current.x, snapSize.width);
- int maximum = Math.min(width + x, maximumSize.width);
- drag = getDragBounded(drag, snapSize.width, width, minimumSize.width, maximum);
-
- x -= drag;
- width += drag;
- }
-
- if (NORTH == (direction & NORTH)) {
- int drag = getDragDistance(pressed.y, current.y, snapSize.height);
- int maximum = Math.min(height + y, maximumSize.height);
- drag = getDragBounded(drag, snapSize.height, height, minimumSize.height, maximum);
-
- y -= drag;
- height += drag;
- }
-
- // Resizing the East or South border only affects the size
-
- if (EAST == (direction & EAST)) {
- int drag = getDragDistance(current.x, pressed.x, snapSize.width);
- Dimension boundingSize = getBoundingSize(source);
- int maximum = Math.min(boundingSize.width - x, maximumSize.width);
- drag = getDragBounded(drag, snapSize.width, width, minimumSize.width, maximum);
- width += drag;
- }
-
- if (SOUTH == (direction & SOUTH)) {
- int drag = getDragDistance(current.y, pressed.y, snapSize.height);
- Dimension boundingSize = getBoundingSize(source);
- int maximum = Math.min(boundingSize.height - y, maximumSize.height);
- drag = getDragBounded(drag, snapSize.height, height, minimumSize.height, maximum);
- height += drag;
- }
-
- source.setBounds(x, y, width, height);
- source.validate();
- }
-
- /*
- * Determine how far the mouse has moved from where dragging started
- */
- private int getDragDistance(int larger, int smaller, int snapSize) {
- int halfway = snapSize / 2;
- int drag = larger - smaller;
- drag += (drag < 0) ? -halfway : halfway;
- drag = (drag / snapSize) * snapSize;
-
- return drag;
- }
-
- /*
- * Adjust the drag value to be within the minimum and maximum range.
- */
- private int getDragBounded(int drag, int snapSize, int dimension, int minimum, int maximum) {
- while (dimension + drag < minimum)
- drag += snapSize;
-
- while (dimension + drag > maximum)
- drag -= snapSize;
-
-
- return drag;
- }
-
- /*
- * Keep the size of the component within the bounds of its parent.
- */
- private Dimension getBoundingSize(Component source) {
- if (source instanceof Window) {
- GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
- Rectangle bounds = env.getMaximumWindowBounds();
- return new Dimension(bounds.width, bounds.height);
- } else {
- return source.getParent().getSize();
- }
- }
-}
\ No newline at end of file
Deleted: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/SwingValidatorMessageWidget.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/SwingValidatorMessageWidget.java 2013-02-07 18:51:36 UTC (rev 361)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/SwingValidatorMessageWidget.java 2013-02-07 22:31:52 UTC (rev 362)
@@ -1,245 +0,0 @@
-
-package fr.ifremer.tutti.ui.swing.util;
-
-/*
- * #%L
- * Tutti :: UI
- * $Id$
- * $HeadURL$
- * %%
- * Copyright (C) 2012 - 2013 Ifremer
- * %%
- * 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 jaxx.runtime.SwingUtil;
-import jaxx.runtime.validator.swing.SwingValidator;
-import jaxx.runtime.validator.swing.SwingValidatorMessageTableModel;
-import jaxx.runtime.validator.swing.SwingValidatorMessageTableRenderer;
-import jaxx.runtime.validator.swing.SwingValidatorUtil;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.jdesktop.swingx.JXTitledPanel;
-import org.nuiton.validator.NuitonValidatorScope;
-
-import javax.swing.AbstractAction;
-import javax.swing.JComponent;
-import javax.swing.JDialog;
-import javax.swing.JRootPane;
-import javax.swing.JScrollPane;
-import javax.swing.JTable;
-import javax.swing.JToggleButton;
-import javax.swing.KeyStroke;
-import javax.swing.ListSelectionModel;
-import javax.swing.event.TableModelEvent;
-import javax.swing.event.TableModelListener;
-import java.awt.Component;
-import java.awt.Point;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.ComponentAdapter;
-import java.awt.event.ComponentEvent;
-import java.awt.event.HierarchyBoundsAdapter;
-import java.awt.event.HierarchyEvent;
-import java.awt.event.KeyEvent;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-
-import static org.nuiton.i18n.I18n._;
-import static org.nuiton.i18n.I18n.n_;
-
-/**
- * Button which opens a popup containing a table with the errors found
- * by registered validators.
- *
- * @author kmorin <kmorin(a)codelutin.com>
- * @since 2.5.10
- */
-public class SwingValidatorMessageWidget extends JToggleButton {
-
- private static final Log log =
- LogFactory.getLog(SwingValidatorMessageWidget.class);
-
- private static final long serialVersionUID = 1L;
-
- protected SwingValidatorMessageTableModel errorTableModel = new SwingValidatorMessageTableModel();
-
- protected JDialog popup = new JDialog();
-
- protected JTable errorTable = new JTable();
-
- protected Point popupPosition = null;
-
- public SwingValidatorMessageWidget() {
- super(SwingUtil.createActionIcon("alert-none"));
- setToolTipText(_("tutti.validator.alert.none"));
-
- errorTableModel.addTableModelListener(new TableModelListener() {
-
- public void tableChanged(TableModelEvent e) {
- int alerts = errorTableModel.getRowCount();
- String label;
- switch (alerts) {
- case 0:
- label = n_("tutti.validator.alert.none");
- break;
- case 1:
- label = n_("tutti.validator.alert.one");
- break;
- default:
- label = n_("tutti.validator.alert.several");
- }
-
- NuitonValidatorScope maxScope;
- String icon;
- if (alerts == 0) {
- icon = "alert-none";
-
- } else {
- maxScope = NuitonValidatorScope.INFO;
- for (int i = 0; i < alerts; i++) {
- NuitonValidatorScope scope = errorTableModel.getRow(i).getScope();
- int diff = scope.compareTo(maxScope);
- if (diff < 0) {
- maxScope = scope;
- }
- }
- switch (maxScope) {
- case INFO:
- icon = "alert-info";
- break;
- case WARNING:
- icon = "alert-warning";
- break;
- default:
- icon = "alert-error";
-
- }
- }
-
- setToolTipText(_(label, alerts));
- setIcon(SwingUtil.createActionIcon(icon));
- }
- });
-
- errorTable.setModel(errorTableModel);
- errorTable.setRowSelectionAllowed(true);
- errorTable.setAutoCreateRowSorter(true);
- errorTable.setAutoResizeMode(JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS);
- errorTable.setCellSelectionEnabled(false);
- errorTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
- errorTable.setFillsViewportHeight(true);
-
- SwingValidatorUtil.installUI(errorTable,
- new SwingValidatorMessageTableRenderer());
-
- JScrollPane scrollPanel = new JScrollPane(errorTable);
- scrollPanel.setColumnHeaderView(errorTable.getTableHeader());
-
- JXTitledPanel titledPanel = new JXTitledPanel(_("tutti.errorTable.title"), scrollPanel);
- popup.add(titledPanel);
- popup.setTitle(_("tutti.errorTable.title"));
- popup.setSize(800, 300);
- popup.setAlwaysOnTop(true);
- popup.setUndecorated(true);
-
- ComponentResizer cr = new ComponentResizer();
- cr.registerComponent(popup);
- ComponentMover cm = new ComponentMover();
- cm.setDragInsets(cr.getDragInsets());
- cm.registerComponent(popup);
-
- popup.addWindowListener(new WindowAdapter() {
-
- @Override
- public void windowClosing(WindowEvent e) {
- setSelected(false);
- }
-
- });
-
- popup.addComponentListener(new ComponentAdapter() {
-
- @Override
- public void componentMoved(ComponentEvent e) {
- Component component = e.getComponent();
- if (component.isShowing()) {
- popupPosition = component.getLocationOnScreen();
- }
- }
-
- });
-
- addActionListener(new ActionListener() {
-
- @Override
- public void actionPerformed(ActionEvent e) {
- if (isSelected()) {
- popup.setVisible(true);
- } else {
- popup.dispose();
- }
- }
- });
-
- addHierarchyBoundsListener(new HierarchyBoundsAdapter() {
-
- @Override
- public void ancestorMoved(HierarchyEvent e) {
- if (popupPosition == null && isShowing()) {
- Point point = new Point(getLocationOnScreen());
- point.translate(-popup.getWidth() + getWidth(), -popup.getHeight());
- popup.setLocation(point);
- }
- }
- });
-
- // add a auto-close action
- JRootPane rootPane = popup.getRootPane();
-
- KeyStroke shortcutClosePopup = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0);
-
- rootPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
- shortcutClosePopup, "close");
- rootPane.getActionMap().put("close", new AbstractAction() {
- private static final long serialVersionUID = 1L;
-
- @Override
- public void actionPerformed(ActionEvent e) {
- popup.dispose();
- setSelected(false);
- }
- });
-
- }
-
- /**
- * Registers a validator.
- *
- * @param validator
- */
- public void registerValidator(SwingValidator validator) {
- errorTableModel.registerValidator(validator);
- validator.reloadBean();
- }
-
- /** Clears all the validators. */
- public void clearValidators() {
- errorTableModel.clearValidators();
- errorTableModel.clear();
- }
-
-}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/editor/AttachmentCellComponent.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/editor/AttachmentCellComponent.java 2013-02-07 18:51:36 UTC (rev 361)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/editor/AttachmentCellComponent.java 2013-02-07 22:31:52 UTC (rev 362)
@@ -27,26 +27,10 @@
import com.google.common.base.Preconditions;
import fr.ifremer.tutti.persistence.entities.data.Attachment;
import fr.ifremer.tutti.ui.swing.AbstractTuttiBeanUIModel;
-import fr.ifremer.tutti.ui.swing.util.ComponentMover;
-import fr.ifremer.tutti.ui.swing.util.ComponentResizer;
import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil;
import fr.ifremer.tutti.ui.swing.util.table.AbstractSelectTableAction;
import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableModel;
import fr.ifremer.tutti.ui.swing.util.table.ColumnIdentifier;
-import jaxx.runtime.JAXXUtil;
-import jaxx.runtime.SwingUtil;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.nuiton.util.decorator.Decorator;
-
-import javax.swing.AbstractCellEditor;
-import javax.swing.BorderFactory;
-import javax.swing.JDialog;
-import javax.swing.JTable;
-import javax.swing.border.LineBorder;
-import javax.swing.table.DefaultTableCellRenderer;
-import javax.swing.table.TableCellEditor;
-import javax.swing.table.TableCellRenderer;
import java.awt.Color;
import java.awt.Component;
import java.awt.Frame;
@@ -57,6 +41,21 @@
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Collection;
+import javax.swing.AbstractCellEditor;
+import javax.swing.BorderFactory;
+import javax.swing.JDialog;
+import javax.swing.JTable;
+import javax.swing.border.LineBorder;
+import javax.swing.table.DefaultTableCellRenderer;
+import javax.swing.table.TableCellEditor;
+import javax.swing.table.TableCellRenderer;
+import jaxx.runtime.JAXXUtil;
+import jaxx.runtime.SwingUtil;
+import jaxx.runtime.swing.ComponentMover;
+import jaxx.runtime.swing.ComponentResizer;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.nuiton.util.decorator.Decorator;
import static org.nuiton.i18n.I18n._;
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/editor/LongTextCellComponent.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/editor/LongTextCellComponent.java 2013-02-07 18:51:36 UTC (rev 361)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/editor/LongTextCellComponent.java 2013-02-07 22:31:52 UTC (rev 362)
@@ -26,14 +26,14 @@
import com.google.common.base.Preconditions;
import fr.ifremer.tutti.ui.swing.AbstractTuttiBeanUIModel;
-import fr.ifremer.tutti.ui.swing.util.ComponentMover;
-import fr.ifremer.tutti.ui.swing.util.ComponentResizer;
import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil;
import fr.ifremer.tutti.ui.swing.util.table.AbstractSelectTableAction;
import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableModel;
import fr.ifremer.tutti.ui.swing.util.table.ColumnIdentifier;
import jaxx.runtime.JAXXUtil;
import jaxx.runtime.SwingUtil;
+import jaxx.runtime.swing.ComponentMover;
+import jaxx.runtime.swing.ComponentResizer;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
Deleted: trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-validate-warning-validation.xml
===================================================================
--- trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-validate-warning-validation.xml 2013-02-07 18:51:36 UTC (rev 361)
+++ trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-validate-warning-validation.xml 2013-02-07 22:31:52 UTC (rev 362)
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- #%L
- Tutti :: UI
- $Id$
- $HeadURL$
- %%
- Copyright (C) 2012 - 2013 Ifremer
- %%
- 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%
- -->
-
-
-<!DOCTYPE validators PUBLIC
- "-//Apache Struts//XWork Validator 1.0.3//EN"
- "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
-
-<validators>
-
-
- <field name="comment">
-
- <field-validator type="required">
-
- <!-- No comment (just to test...) -->
- <message></message>
-
- </field-validator>
-
- </field>
-
-</validators>
Modified: trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUIModel-error-validation.xml
===================================================================
--- trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUIModel-error-validation.xml 2013-02-07 18:51:36 UTC (rev 361)
+++ trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUIModel-error-validation.xml 2013-02-07 22:31:52 UTC (rev 362)
@@ -45,19 +45,11 @@
<field-validator type="fieldexpression" short-circuit="true">
<param name="expression">
- <![CDATA[ sampleWeight == null || sampleWeight <= batchWeight]]></param>
+ <![CDATA[ sampleWeight == null || batchWeight == null || sampleWeight <= batchWeight]]></param>
<message>
tutti.validator.error.splitSpeciesBatch.sampleWeight.sampleBatchGreaterThanBatchWeight
</message>
</field-validator>
- <field-validator type="fieldexpression" short-circuit="true">
- <param name="expression">
- <![CDATA[ ( sampleWeight == null || sample || batchWeight == sampleWeight ) ]]></param>
- <message>
- tutti.validator.error.splitSpeciesBatch.sampleWeight.mismatchBatchWeight
- </message>
- </field-validator>
-
</field>
</validators>
\ No newline at end of file
Deleted: trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUIModel-warning-validation.xml
===================================================================
--- trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUIModel-warning-validation.xml 2013-02-07 18:51:36 UTC (rev 361)
+++ trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUIModel-warning-validation.xml 2013-02-07 22:31:52 UTC (rev 362)
@@ -1,40 +0,0 @@
-<!--
- #%L
- Tutti :: UI
- $Id$
- $HeadURL$
- %%
- Copyright (C) 2012 - 2013 Ifremer
- %%
- 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%
- -->
-<!DOCTYPE validators PUBLIC
- "-//Apache Struts//XWork Validator 1.0.3//EN"
- "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
-<validators>
-
- <field name="sample">
-
- <field-validator type="fieldexpression" short-circuit="true">
- <param name="expression">
- <![CDATA[ !sample ]]></param>
- <message>
- tutti.validator.warning.splitSpeciesBatch.sampleBatch
- </message>
- </field-validator>
-
- </field>
-</validators>
\ No newline at end of file
Modified: trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties
===================================================================
--- trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-02-07 18:51:36 UTC (rev 361)
+++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-02-07 22:31:52 UTC (rev 362)
@@ -25,6 +25,7 @@
tutti.action.cloneProtocol=Cloner
tutti.action.cloneProtocol.tip=Dupliquer le protocole sélectionné
tutti.action.close=Fermer
+tutti.action.computeSpeciesBatch=Elever les poids
tutti.action.configuration=Configuration
tutti.action.configuration.tip=Configurer Tutti
tutti.action.createSpeciesBatch=Créer un lot pour une espèce
@@ -140,10 +141,11 @@
tutti.config.category.ui.description=Options de l'interface utilisateur
tutti.dialog.askSaveBeforeLeaving.message=Vous avez fait des modifications qu vous n'avez pas enregistrées. Voulez-vous les enregistrer ?
tutti.dialog.askSaveBeforeLeaving.title=Modifications non enregistrées
+tutti.dialog.catches.species.computeWeight.error.message=Erreur lors de l'élévation des poids
+tutti.dialog.catches.species.computeWeight.error.title=Erreur
tutti.dialog.catches.species.split.weightNotNull.message=Pour catégoriser un lot, il ne doit pas avoir de poids sous-échantillonné. Catégoriser le lot mettra le poids sous-échantillonné à nul.
tutti.dialog.catches.species.split.weightNotNull.title=Poids sous-échantillonné non nul
tutti.duration.format=dj Hh m'm'
-tutti.errorTable.title=Rapport de contrôles
tutti.file.csv=Extension d'un fichier csv
tutti.file.protocol=Extension d'un fichier de protocole Tutti
tutti.information.import.temporary.referential=Vous pouvez ici importer des référentiels temporaires
@@ -396,7 +398,7 @@
tutti.table.species.frequency.header.number=Nombre
tutti.table.species.frequency.header.weight=Poids observé (kg)
tutti.table.species.sampleCategory.header.category=Catégorie
-tutti.table.species.sampleCategory.header.selected=
+tutti.table.species.sampleCategory.header.selected=Sélection
tutti.table.species.sampleCategory.header.weight=Poids (kg)
tutti.timeeditor.H=H
tutti.title.about=À propos de Tutti
@@ -436,9 +438,6 @@
tutti.to.be.done=< A FAIRE >
tutti.tooltip.attachment.none=Pas de pièce-jointes
tutti.tooltip.comment.none=Pas de commentaire
-tutti.validator.alert.none=Aucune alerte
-tutti.validator.alert.one=1 alerte
-tutti.validator.alert.several=%s alertes
tutti.validator.error.comment.too.long=Taille de commentaire trop longue (limitée à %s caractères)
tutti.validator.error.createSpeciesBatch.batchWeight.invalidValue=Le poids du lot doit être strictement positif
tutti.validator.error.createSpeciesBatch.batchWeight.required=Le poids du lot est obligatoire
Deleted: trunk/tutti-ui-swing/src/main/resources/icons/action-alert-error.png
===================================================================
(Binary files differ)
Deleted: trunk/tutti-ui-swing/src/main/resources/icons/action-alert-info.png
===================================================================
(Binary files differ)
Deleted: trunk/tutti-ui-swing/src/main/resources/icons/action-alert-none.png
===================================================================
(Binary files differ)
Deleted: trunk/tutti-ui-swing/src/main/resources/icons/action-alert-warning.png
===================================================================
(Binary files differ)
1
0