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
r291 - in trunk/tutti-ui-swing/src/main/assembly: full min
by bpoussin@users.forge.codelutin.com 01 Feb '13
by bpoussin@users.forge.codelutin.com 01 Feb '13
01 Feb '13
Author: bpoussin
Date: 2013-02-01 16:06:29 +0100 (Fri, 01 Feb 2013)
New Revision: 291
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/291
Log:
modif date script shell
implantation script bat
Modified:
trunk/tutti-ui-swing/src/main/assembly/full/tutti.bat
trunk/tutti-ui-swing/src/main/assembly/min/launch.bat
trunk/tutti-ui-swing/src/main/assembly/min/update.bat
trunk/tutti-ui-swing/src/main/assembly/min/update.sh
Modified: trunk/tutti-ui-swing/src/main/assembly/full/tutti.bat
===================================================================
--- trunk/tutti-ui-swing/src/main/assembly/full/tutti.bat 2013-02-01 14:22:46 UTC (rev 290)
+++ trunk/tutti-ui-swing/src/main/assembly/full/tutti.bat 2013-02-01 15:06:29 UTC (rev 291)
@@ -0,0 +1,19 @@
+@echo off
+
+set OLDDIR=%CD%
+cd /d %~dp0%
+set REP=%CD%
+
+set JAVA_HOME=%REP%\jre
+set JAVA_COMMAND=%JAVA_HOME%\bin\java
+
+echo current dir=%REP% and JAVA_HOME=%JAVA_HOME%
+
+:start
+
+copy tutti-app\update.bat .
+call update.bat
+call tutti-app\launch.bat --option tutti.launch.mode=full
+if errorlevel 88 goto start
+
+cd %OLDDIR%
Modified: trunk/tutti-ui-swing/src/main/assembly/min/launch.bat
===================================================================
--- trunk/tutti-ui-swing/src/main/assembly/min/launch.bat 2013-02-01 14:22:46 UTC (rev 290)
+++ trunk/tutti-ui-swing/src/main/assembly/min/launch.bat 2013-02-01 15:06:29 UTC (rev 291)
@@ -1,2 +1,11 @@
+@echo off
-java -Xmx1024M -jar ${project.build.finalName}.${project.packaging} %1 %2 %3 %4 %5 %6 %7 %8 %9
+set OLDDIR=%CD%
+cd /d %~dp0%
+
+echo lauch java
+%JAVA_COMMAND% -Xmx1024M -jar ${project.build.finalName}.${project.packaging} %1 %2 %3 %4 %5 %6 %7 %8 %9
+set exitcode=%ERRORLEVEL%
+echo Stop Tutti with exitcode: %exitcode%
+cd %OLDDIR%
+exit /b %exitcode%
Modified: trunk/tutti-ui-swing/src/main/assembly/min/update.bat
===================================================================
--- trunk/tutti-ui-swing/src/main/assembly/min/update.bat 2013-02-01 14:22:46 UTC (rev 290)
+++ trunk/tutti-ui-swing/src/main/assembly/min/update.bat 2013-02-01 15:06:29 UTC (rev 291)
@@ -0,0 +1,31 @@
+@echo off
+
+set t=%time::=%
+set BACKUP_DATE=%date:~6,4%%date:~3,2%%date:~0,2%%t:~0,6%
+
+if not exist "NEW\jre" goto tutti
+
+rem deplacement de l'ancienne jre
+set /p oldVersion=<jre\version.appup
+set /p newVersion=<NEW\jre\version.appup
+set backupdir=OLD\jre-%oldVersion: =%-%BACKUP_DATE: =%
+echo Update jre version %oldVersion: =% to %newVersion: =% old jre keep in "%backupdir%"
+if not exist "OLD" mkdir OLD
+move jre "%backupdir%"
+move NEW\jre jre
+
+:tutti
+
+if not exist "NEW\tutti-app" goto end
+
+rem deplacement de l'ancien tutti
+set /p oldVersion=<tutti-app\version.appup
+set /p newVersion=<NEW\tutti-app\version.appup
+set backupdir=OLD\tutti-app-%oldVersion: =%-%BACKUP_DATE: =%
+echo Update tutti-app version %oldVersion: =% to %newVersion: =% old jre keep in "%backupdir%"
+if not exist "OLD" mkdir OLD
+move tutti-app "%backupdir%"
+move NEW\tutti-app tutti-app
+
+
+:end
Modified: trunk/tutti-ui-swing/src/main/assembly/min/update.sh
===================================================================
--- trunk/tutti-ui-swing/src/main/assembly/min/update.sh 2013-02-01 14:22:46 UTC (rev 290)
+++ trunk/tutti-ui-swing/src/main/assembly/min/update.sh 2013-02-01 15:06:29 UTC (rev 291)
@@ -1,11 +1,11 @@
#!/bin/bash
-BACKUP_DATE=$(date -d %Y-%j)
+BACKUP_DATE=$(date +%Y%m%d%H%M%S)
if [ -d NEW/jre ]; then
oldVersion=`cat jre/version.appup`
newVersion=`cat NEW/jre/version.appup`
echo "Update jre version $oldVersion to $newVersion"
- mkdir OLD
+ mkdir -p OLD
backupdir=OLD/jre-$oldVersion-$BACKUP_DATE
echo "Backup jre old version to $backupDir"
#mv jre $backupDir
@@ -16,7 +16,7 @@
oldVersion=`cat tutti-app/version.appup`
newVersion=`cat NEW/tutti-app/version.appup`
echo "Update tutti version $oldVersion to $newVersion"
- mkdir OLD
+ mkdir -p OLD
backupdir=OLD/tutti-app-$oldVersion-$BACKUP_DATE
echo "Backup tutti old version to $backupDir"
#mv tutti-app $backupDir
1
0
r290 - in trunk/tutti-ui-swing/src/main: java/fr/ifremer/tutti/ui/swing/content/operation/catches/species resources/i18n
by kmorin@users.forge.codelutin.com 01 Feb '13
by kmorin@users.forge.codelutin.com 01 Feb '13
01 Feb '13
Author: kmorin
Date: 2013-02-01 15:22:46 +0100 (Fri, 01 Feb 2013)
New Revision: 290
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/290
Log:
fixes #1964 [CAPTURE - ESPECES] Cat?\195?\169gorisation impossible si un poids sous-?\195?\169chantillonn?\195?\169 a ?\195?\169t?\195?\169 saisi
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/resources/i18n/tutti-ui-swing_fr_FR.properties
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-01 11:46:34 UTC (rev 289)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java 2013-02-01 14:22:46 UTC (rev 290)
@@ -78,10 +78,12 @@
import java.util.EnumMap;
import java.util.List;
import java.util.Set;
+import javax.swing.JOptionPane;
import jaxx.runtime.SwingUtil;
import jaxx.runtime.validator.swing.SwingValidator;
import static org.nuiton.i18n.I18n.n_;
+import static org.nuiton.i18n.I18n._;
/**
* @author tchemit <chemit(a)codelutin.com>
@@ -674,7 +676,7 @@
}
public void splitSpeciesBatch() {
-
+
JXTable table = getTable();
// get selected row
@@ -687,15 +689,33 @@
SpeciesBatchRowModel parentBatch = tableModel.getEntry(rowIndex);
- if (log.isInfoEnabled()) {
- log.info("Open split batch ui for row [" + rowIndex + ']');
+ boolean split = true;
+ if (parentBatch.getWeight() != null) {
+ int i = JOptionPane.showConfirmDialog(
+ ui,
+ _("tutti.dialog.catches.species.split.weightNotNull.message"),
+ _("tutti.dialog.catches.species.split.weightNotNull.title"),
+ JOptionPane.OK_CANCEL_OPTION);
+
+ if (i == JOptionPane.OK_OPTION) {
+ parentBatch.setWeight(null);
+
+ } else {
+ split = false;
+ }
}
- EditCatchesUI parent = SwingUtil.getParentContainer(ui, EditCatchesUI.class);
- SplitSpeciesBatchUI splitBatchEditor = parent.getSpeciesTabSplitBatch();
+ if (split) {
+ if (log.isInfoEnabled()) {
+ log.info("Open split batch ui for row [" + rowIndex + ']');
+ }
- splitBatchEditor.getHandler().editBatch(parentBatch);
- parent.getHandler().setSelectedCard(EditCatchesUIHandler.SPLIT_BATCH_CARD);
+ EditCatchesUI parent = SwingUtil.getParentContainer(ui, EditCatchesUI.class);
+ SplitSpeciesBatchUI splitBatchEditor = parent.getSpeciesTabSplitBatch();
+
+ splitBatchEditor.getHandler().editBatch(parentBatch);
+ parent.getHandler().setSelectedCard(EditCatchesUIHandler.SPLIT_BATCH_CARD);
+ }
}
public void splitBatch(SplitSpeciesBatchUIModel splitModel) {
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-01 11:46:34 UTC (rev 289)
+++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-02-01 14:22:46 UTC (rev 290)
@@ -115,6 +115,8 @@
tutti.config.ui.useSexagecimalEditor=Utiliser l'éditeur sexagécimal pour entrer des coordonnées
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.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
1
0
r289 - trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service
by blavenier@users.forge.codelutin.com 01 Feb '13
by blavenier@users.forge.codelutin.com 01 Feb '13
01 Feb '13
Author: blavenier
Date: 2013-02-01 12:46:34 +0100 (Fri, 01 Feb 2013)
New Revision: 289
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/289
Log:
Remove some imports
Modified:
trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceImpl.java
trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceServiceImpl.java
Modified: trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceImpl.java
===================================================================
--- trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceImpl.java 2013-02-01 11:45:40 UTC (rev 288)
+++ trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceImpl.java 2013-02-01 11:46:34 UTC (rev 289)
@@ -27,7 +27,6 @@
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Calendar;
-import java.util.Collection;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashSet;
@@ -49,8 +48,6 @@
import com.google.common.collect.Lists;
import fr.ifremer.adagio.core.dao.administration.user.PersonDao;
-import fr.ifremer.adagio.core.dao.data.measure.GearPhysicalMeasurement;
-import fr.ifremer.adagio.core.dao.data.measure.GearUseMeasurement;
import fr.ifremer.adagio.core.dao.data.survey.fishingTrip.FishingTrip;
import fr.ifremer.adagio.core.dao.data.survey.fishingTrip.ObservedFishingTrip;
import fr.ifremer.adagio.core.dao.data.survey.scientificCruise.ScientificCruise;
@@ -59,15 +56,10 @@
import fr.ifremer.adagio.core.dao.referential.QualityFlag;
import fr.ifremer.adagio.core.dao.referential.QualityFlagDao;
import fr.ifremer.adagio.core.dao.referential.gear.GearDao;
-import fr.ifremer.adagio.core.dao.referential.gear.GearImpl;
import fr.ifremer.adagio.core.dao.referential.location.Location;
import fr.ifremer.adagio.core.dao.referential.location.LocationDao;
-import fr.ifremer.adagio.core.dao.referential.pmfm.Pmfm;
import fr.ifremer.adagio.core.dao.referential.pmfm.PmfmDao;
-import fr.ifremer.adagio.core.dao.referential.pmfm.PmfmImpl;
-import fr.ifremer.adagio.core.dao.referential.pmfm.QualitativeValue;
import fr.ifremer.adagio.core.dao.referential.pmfm.QualitativeValueDao;
-import fr.ifremer.adagio.core.dao.referential.pmfm.QualitativeValueImpl;
import fr.ifremer.adagio.core.dao.referential.vessel.VesselDao;
import fr.ifremer.adagio.core.dao.technical.synchronization.SynchronizationStatus;
import fr.ifremer.tutti.persistence.entities.data.Cruise;
Modified: trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceServiceImpl.java
===================================================================
--- trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceServiceImpl.java 2013-02-01 11:45:40 UTC (rev 288)
+++ trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceServiceImpl.java 2013-02-01 11:46:34 UTC (rev 289)
@@ -33,7 +33,6 @@
import java.util.List;
import java.util.Map;
import java.util.Set;
-import java.util.logging.SimpleFormatter;
import javax.annotation.Resource;
@@ -47,41 +46,22 @@
import com.google.common.base.Preconditions;
import com.google.common.collect.Lists;
-import com.google.common.collect.Sets;
-import fr.ifremer.adagio.core.dao.administration.user.DepartmentImpl;
-import fr.ifremer.adagio.core.dao.data.batch.Batch;
-import fr.ifremer.adagio.core.dao.data.batch.BatchImpl;
-import fr.ifremer.adagio.core.dao.data.batch.CatchBatch;
import fr.ifremer.adagio.core.dao.data.batch.CatchBatchDao;
import fr.ifremer.adagio.core.dao.data.batch.CatchBatchImpl;
import fr.ifremer.adagio.core.dao.data.batch.SortingBatch;
import fr.ifremer.adagio.core.dao.data.batch.SortingBatchDao;
import fr.ifremer.adagio.core.dao.data.batch.SortingBatchImpl;
-import fr.ifremer.adagio.core.dao.data.batch.denormalized.DenormalizedBatch;
import fr.ifremer.adagio.core.dao.data.batch.denormalized.DenormalizedBatchDao;
-import fr.ifremer.adagio.core.dao.data.batch.denormalized.DenormalizedBatchImpl;
-import fr.ifremer.adagio.core.dao.data.measure.Measurement;
import fr.ifremer.adagio.core.dao.data.measure.QuantificationMeasurement;
import fr.ifremer.adagio.core.dao.data.measure.SortingMeasurement;
-import fr.ifremer.adagio.core.dao.data.measure.VesselUseMeasurement;
-import fr.ifremer.adagio.core.dao.data.operation.FishingOperationImpl;
-import fr.ifremer.adagio.core.dao.data.survey.scientificCruise.ScientificCruise;
-import fr.ifremer.adagio.core.dao.data.vessel.feature.use.VesselUseFeatures;
import fr.ifremer.adagio.core.dao.referential.QualityFlagImpl;
-import fr.ifremer.adagio.core.dao.referential.pmfm.PmfmImpl;
-import fr.ifremer.adagio.core.dao.referential.pmfm.QualitativeValue;
-import fr.ifremer.adagio.core.dao.referential.pmfm.QualitativeValueImpl;
import fr.ifremer.adagio.core.dao.referential.taxon.ReferenceTaxon;
import fr.ifremer.adagio.core.dao.referential.taxon.ReferenceTaxonImpl;
-import fr.ifremer.adagio.core.dao.technical.synchronization.SynchronizationStatus;
-import fr.ifremer.tutti.persistence.entities.data.FishingOperation;
import fr.ifremer.tutti.persistence.entities.data.SampleCategoryEnum;
import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch;
import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequency;
-import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue;
-import fr.ifremer.tutti.persistence.entities.referential.CaracteristicType;
import fr.ifremer.tutti.persistence.entities.referential.Species;
import fr.ifremer.tutti.persistence.service.measure.MeasurementPersistenceHelper;
1
0
r288 - in trunk/tutti-persistence-adagio/src: main/java/fr/ifremer/tutti/persistence/service main/resources test/java/fr/ifremer/tutti/persistence/service
by blavenier@users.forge.codelutin.com 01 Feb '13
by blavenier@users.forge.codelutin.com 01 Feb '13
01 Feb '13
Author: blavenier
Date: 2013-02-01 12:45:40 +0100 (Fri, 01 Feb 2013)
New Revision: 288
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/288
Log:
- CruisePersistenceService : Fix save : remove old gear if need
- SpeciesBatchPersistenceService : Add impl on deleteSpeciesbatch() and deleteSpeciesSubBatch() + Unit test
Modified:
trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceImpl.java
trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceServiceImpl.java
trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceServiceImpl.java
trunk/tutti-persistence-adagio/src/main/resources/queries-override.hbm.xml
trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceTest.java
trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceServiceTest.java
Modified: trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceImpl.java
===================================================================
--- trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceImpl.java 2013-02-01 11:12:52 UTC (rev 287)
+++ trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceImpl.java 2013-02-01 11:45:40 UTC (rev 288)
@@ -27,10 +27,13 @@
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Calendar;
+import java.util.Collection;
import java.util.Date;
import java.util.GregorianCalendar;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
+import java.util.Set;
import javax.annotation.Resource;
@@ -47,6 +50,7 @@
import fr.ifremer.adagio.core.dao.administration.user.PersonDao;
import fr.ifremer.adagio.core.dao.data.measure.GearPhysicalMeasurement;
+import fr.ifremer.adagio.core.dao.data.measure.GearUseMeasurement;
import fr.ifremer.adagio.core.dao.data.survey.fishingTrip.FishingTrip;
import fr.ifremer.adagio.core.dao.data.survey.fishingTrip.ObservedFishingTrip;
import fr.ifremer.adagio.core.dao.data.survey.scientificCruise.ScientificCruise;
@@ -490,9 +494,18 @@
if (copyIfNull && source.isGearEmpty() && fishingTrip.getGearPhysicalFeatures() != null) {
fishingTrip.getGearPhysicalFeatures().clear();
} else if (!source.isGearEmpty()) {
+ // Create a list to trace not updated items, to be able to remove them later
+ Set<GearPhysicalFeatures> notChangedGearPhysicalFeatures = new HashSet<GearPhysicalFeatures>();
+ if (fishingTrip.getGearPhysicalFeatures() != null) {
+ notChangedGearPhysicalFeatures.addAll(fishingTrip.getGearPhysicalFeatures());
+ }
+
+ // Create or update a geaPhysicalFeatures for each gears in the cruise
for (int i = 0; i < source.getGear().size(); i++) {
Gear gear = source.getGear().get(i);
GearPhysicalFeatures guf = measurementHelper.getGearPhysicalfeatures(fishingTrip, Integer.valueOf(gear.getId()), true);
+ notChangedGearPhysicalFeatures.remove(guf);
+
guf.setStartDate(fishingTrip.getDepartureDateTime());
guf.setEndDate(fishingTrip.getReturnDateTime());
guf.setVessel(fishingTrip.getVessel());
@@ -509,6 +522,16 @@
measurementHelper.setGearPhysicalMeasurement(target, guf, enumeration.PMFM_ID_MULTIRIG_NUMBER, Float.valueOf(source.getMultirigNumber()), null, null);
}
}
+
+ // Remove deleted gear physical features
+ if (fishingTrip.getGearPhysicalFeatures() != null && notChangedGearPhysicalFeatures.size() > 0) {
+ for (GearPhysicalFeatures guf : notChangedGearPhysicalFeatures) {
+ if (guf.getGearPhysicalMeasurements() != null) {
+ guf.getGearPhysicalMeasurements().clear();
+ }
+ fishingTrip.getGearPhysicalFeatures().remove(guf);
+ }
+ }
}
// Save miscDataBuffer into fishing trip comments, because it's not used in Allegro
Modified: trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceServiceImpl.java
===================================================================
--- trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceServiceImpl.java 2013-02-01 11:12:52 UTC (rev 287)
+++ trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceServiceImpl.java 2013-02-01 11:45:40 UTC (rev 288)
@@ -544,7 +544,7 @@
vesselUseFeatures = target.getVesselUseFeatures().iterator().next();
}
- // Create a list to store all updates, then remove not updated items
+ // Create a list to trace not updated items, to be able to remove them later
Set<VesselUseMeasurement> notChangedVesselUseMeasurements = new HashSet<VesselUseMeasurement>();
if (vesselUseFeatures.getVesselUseMeasurements() != null) {
notChangedVesselUseMeasurements.addAll(vesselUseFeatures.getVesselUseMeasurements());
Modified: trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceServiceImpl.java
===================================================================
--- trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceServiceImpl.java 2013-02-01 11:12:52 UTC (rev 287)
+++ trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceServiceImpl.java 2013-02-01 11:45:40 UTC (rev 288)
@@ -80,6 +80,7 @@
import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch;
import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequency;
import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
+import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue;
import fr.ifremer.tutti.persistence.entities.referential.CaracteristicType;
import fr.ifremer.tutti.persistence.entities.referential.Species;
import fr.ifremer.tutti.persistence.service.measure.MeasurementPersistenceHelper;
@@ -234,10 +235,19 @@
@Override
public void deleteSpeciesBatch(String id) {
+ Preconditions.checkNotNull(id);
+
+ getCurrentSession().setFlushMode(FlushMode.COMMIT);
+
+ List<SortingBatch> allChildrenBatchs = Lists.newArrayList();
+ removeAllChildrenBatchs(Integer.valueOf(id), allChildrenBatchs);
+
+ getCurrentSession().flush();
}
@Override
public void deleteSpeciesSubBatch(String id) {
+ deleteSpeciesBatch(id);
}
@Override
@@ -387,10 +397,10 @@
// Retrieve category type
Integer pmfmId = measurementHelper.sampleCategory2PmfmId(source.getSampleCategoryType());
if (pmfmId == null || !pmfmId.equals(enumeration.PMFM_ID_SORTED_UNSORTED)) {
- throw new DataIntegrityViolationException(MessageFormat.format("A species batch with no parent should have a sampleCategoryType with id={0}.",
- new Object[]{enumeration.PMFM_ID_SORTED_UNSORTED}));
+ throw new DataIntegrityViolationException(MessageFormat.format("A species batch with no parent should have a sampleCategoryType {0} (PMFM.ID={1})",
+ new Object[]{SampleCategoryEnum.sortedUnsorted.name(), enumeration.PMFM_ID_SORTED_UNSORTED}));
}
- Integer qualitativeValueId = Integer.valueOf(source.getSampleCategoryValue().toString());
+ Integer qualitativeValueId = convertSampleCategoryValueIntoQualitativeId(source.getSampleCategoryValue());
Object[] cols = queryUnique("parentBatch",
"fishingOperationId", IntegerType.INSTANCE, Integer.valueOf(source.getFishingOperation().getId()),
@@ -399,6 +409,9 @@
"pmfmIdSortingType", IntegerType.INSTANCE, enumeration.PMFM_ID_SORTING_TYPE,
"qualitativeIdSortingType", IntegerType.INSTANCE, enumeration.QUALITATIVE_ID_SORTING_TYPE_SPECIES);
+ if (cols == null) {
+ throw new DataIntegrityViolationException("Catch batchs not presents, or invalid batch tree structure. Please make sure CatchBatch has been saved before to create a SpeciesBatch.");
+ }
// Parent Batch
Integer parentBatchId = (Integer)cols[0];
SortingBatch parentBatch = load(SortingBatchImpl.class, parentBatchId);
@@ -522,6 +535,37 @@
applyInheritedProperties(speciesBatch.getChildBatchs(),
(hasAppliedCategoryValue ? null : inheritedSampleCategoryValue),
speciesBatch.getSpecies(), result);
+ }
+ }
+ Integer convertSampleCategoryValueIntoQualitativeId(Serializable value) {
+ if (value == null) return null;
+ Integer qualitativeValueId = null;
+ if (value instanceof CaracteristicQualitativeValue) {
+ CaracteristicQualitativeValue cqValue =(CaracteristicQualitativeValue)value;
+ qualitativeValueId = Integer.valueOf(cqValue.getId());
}
+ else if (value instanceof String){
+ qualitativeValueId = Integer.valueOf((String)value);
+ }
+ return qualitativeValueId;
}
+
+ protected void removeAllChildrenBatchs(Integer batchId, List<SortingBatch> result) {
+ Iterator<Integer> list = queryListTyped("speciesBatchChildren",
+ "batchId", IntegerType.INSTANCE, batchId);
+
+ // First, add childrens
+ while (list.hasNext()) {
+
+ removeAllChildrenBatchs(list.next(), result);
+ }
+
+ // Then add the given batch (after children, because of order need in "delete")
+ SortingBatch batch = sortingBatchDao.load(batchId);
+ //SortingBatch batch = (SortingBatch)getCurrentSession().get(SortingBatchImpl.class, batchId);
+ batch.getSortingMeasurements().clear();
+ batch.getQuantificationMeasurements().clear();
+ sortingBatchDao.remove(batch);
+ }
+
}
Modified: trunk/tutti-persistence-adagio/src/main/resources/queries-override.hbm.xml
===================================================================
--- trunk/tutti-persistence-adagio/src/main/resources/queries-override.hbm.xml 2013-02-01 11:12:52 UTC (rev 287)
+++ trunk/tutti-persistence-adagio/src/main/resources/queries-override.hbm.xml 2013-02-01 11:45:40 UTC (rev 288)
@@ -434,7 +434,19 @@
]]>
<query-param name="batchId" type="java.lang.Integer"/>
</query>
-
+
+ <query name="speciesBatchChildren">
+ <![CDATA[
+ SELECT
+ cb.id
+ FROM
+ SortingBatchImpl b
+ INNER JOIN b.childBatchs cb
+ WHERE
+ b.id = :batchId
+ ]]>
+ <query-param name="batchId" type="java.lang.Integer"/>
+ </query>
<!-- ===================================================================== -->
<!-- === Requete techniques sur référentiels [REF-TXXX] === -->
Modified: trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceTest.java
===================================================================
--- trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceTest.java 2013-02-01 11:12:52 UTC (rev 287)
+++ trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceTest.java 2013-02-01 11:45:40 UTC (rev 288)
@@ -41,6 +41,7 @@
import java.util.Calendar;
import java.util.GregorianCalendar;
+import java.util.Iterator;
import java.util.List;
import static org.junit.Assert.assertEquals;
@@ -198,19 +199,53 @@
@Test
public void saveCruise(/*Cruise bean*/) {
- Cruise cruise = service.getCruise(dbResource.getFixtures().cruiseId());
+ // -----------------------------------------------------------------------------
+ // 1. Init a cruise (by copy)
+ // -----------------------------------------------------------------------------
+ Cruise cruise = service.getCruise(dbResource.getFixtures().cruiseId());
cruise.setId(null);
+ Calendar calendar = new GregorianCalendar();
+ cruise.setBeginDate(calendar.getTime());
+
+ cruise.setYear(calendar.get(Calendar.YEAR));
+
+ calendar.add(Calendar.MONTH, 1); // add one month
+ cruise.setEndDate(calendar.getTime());
+
cruise = service.createCruise(cruise);
+
+ // -----------------------------------------------------------------------------
+ // 2. Apply some changes
+ // -----------------------------------------------------------------------------
+ // Name :
cruise.setName("Unit-test-" + System.currentTimeMillis());
+
+ // Remove gear, then add another gear
+ Gear previousGear = cruise.getGear(0);
+ cruise.getGear().clear();
+ List<Gear> gears = referentialService.getAllFishingGear();
+ for (Iterator iterator = gears.iterator(); iterator.hasNext();) {
+ Gear gear = (Gear) iterator.next();
+
+ // Make sure the gear is different before to add it
+ if (gear.getId() != null && !gear.getId().equals(previousGear.getId())) {
+ cruise.addGear(gear);
+ break;
+ }
+ }
+ // Save changes, then check
Cruise savedCruise = service.saveCruise(cruise);
assertNotNull(savedCruise);
- assertEquals(cruise.getId(), savedCruise.getId());
- assertEquals(cruise.getName(), savedCruise.getName());
- assertEquals(cruise.getComment(), savedCruise.getComment());
- assertNotNull(cruise.getGear());
- assertEquals(cruise.getGear().size(), savedCruise.getGear().size());
+ Cruise reloadedCruise = service.getCruise(savedCruise.getId());
+
+ assertEquals(cruise.getId(), reloadedCruise.getId());
+ assertEquals(cruise.getName(), reloadedCruise.getName());
+ assertEquals(cruise.getComment(), reloadedCruise.getComment());
+ assertNotNull(reloadedCruise.getGear());
+ assertEquals(cruise.getGear().size(), reloadedCruise.getGear().size());
+ assertEquals(cruise.getGear(0).getId(), reloadedCruise.getGear(0).getId());
}
}
Modified: trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceServiceTest.java
===================================================================
--- trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceServiceTest.java 2013-02-01 11:12:52 UTC (rev 287)
+++ trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceServiceTest.java 2013-02-01 11:45:40 UTC (rev 288)
@@ -42,6 +42,8 @@
import org.junit.ClassRule;
import org.junit.Ignore;
import org.junit.Test;
+import org.springframework.dao.DataRetrievalFailureException;
+
import static org.junit.Assert.*;
/**
@@ -64,6 +66,16 @@
protected FishingOperation fishingOperation;
protected CatchBatch catchBacth;
protected List<Species> species;
+ protected Caracteristic sortedUnsortedPMFM;
+ protected String horsVracQualitativeValueId;
+ protected String vracQualitativeValueId;
+ protected Caracteristic maturityPMFM;
+ protected String firstMaturityQualitativeValueId;
+ protected Caracteristic sexPMFM;
+ protected String maleQualitativeValueId;
+ protected String femaleQualitativeValueId;
+ protected String unkQualitativeValueId;
+
protected String speciesBacthId = null;
@@ -109,24 +121,25 @@
species = referentialService.getAllSpecies();
assertNotNull(species);
assertTrue(species.size() > 2);
+
+ sortedUnsortedPMFM = referentialService.getSortedUnsortedCaracteristic();
+ horsVracQualitativeValueId = sortedUnsortedPMFM.getQualitativeValue(0).getId();
+ vracQualitativeValueId = sortedUnsortedPMFM.getQualitativeValue(1).getId();
+ maturityPMFM = referentialService.getMaturityCaracteristic();
+ firstMaturityQualitativeValueId = maturityPMFM.getQualitativeValue(0).getId();
+ sexPMFM = referentialService.getSexCaracteristic();
+ maleQualitativeValueId = sexPMFM.getQualitativeValue(1).getId();
+ femaleQualitativeValueId = sexPMFM.getQualitativeValue(2).getId();
+ unkQualitativeValueId = sexPMFM.getQualitativeValue(3).getId();
}
@Test
public void createSpeciesBatch(/*SpeciesBatch bean, String parentBatchId*/) {
- Caracteristic sortedUnsortedPMFM = referentialService.getSortedUnsortedCaracteristic();
- String horsVracQualitativeValueId = sortedUnsortedPMFM.getQualitativeValue(0).getId();
- String vracQualitativeValueId = sortedUnsortedPMFM.getQualitativeValue(1).getId();
- Caracteristic maturityPMFM = referentialService.getMaturityCaracteristic();
- String firstMaturityQualitativeValueId = maturityPMFM.getQualitativeValue(0).getId();
- Species taxon1 = species.get(0);
- Species taxon2 = species.get(1);
- Caracteristic sexPMFM = referentialService.getSexCaracteristic();
- String maleQualitativeValueId = sexPMFM.getQualitativeValue(1).getId();
- String femaleQualitativeValueId = sexPMFM.getQualitativeValue(2).getId();
- String unkQualitativeValueId = sexPMFM.getQualitativeValue(3).getId();
SpeciesBatch esp1Batch = null;
SpeciesBatch esp2Batch = null;
SpeciesBatch batch = null;
+ Species taxon1 = species.get(0);
+ Species taxon2 = species.get(1);
// -----------------------------------------------------------------------------
// 1. Test with only mandatory properties
@@ -271,13 +284,53 @@
}
@Test
- @Ignore
public void deleteSpeciesBatch(/*String id*/) {
+ SpeciesBatch esp1Batch = null;
+ SpeciesBatch childBatch = null;
+ SpeciesBatch batch = null;
+ Species taxon1 = species.get(0);
+
+ // -----------------------------------------------------------------------------
+ // 1. Create two batchs (parent + child), then remove the parent batch
+ // -----------------------------------------------------------------------------
+ // batch : ESP1 Vrac/5
+ batch = new SpeciesBatch();
+ batch.setParentBatch(null);
+ batch.setFishingOperation(fishingOperation);
+ batch.setSpecies(taxon1);
+ batch.setSampleCategoryType(SampleCategoryEnum.sortedUnsorted);
+ batch.setSampleCategoryValue(vracQualitativeValueId);
+ batch.setWeight(5f);
+ assertCreateAndReloadSpeciesBatch(batch, null);
+ esp1Batch = batch;
+
+ // batch : ESP1 Vrac/5 Male/2
+ batch = new SpeciesBatch();
+ batch.setParentBatch(esp1Batch);
+ batch.setFishingOperation(fishingOperation);
+ batch.setSpecies(taxon1);
+ batch.setSampleCategoryType(SampleCategoryEnum.sex);
+ batch.setSampleCategoryValue(maleQualitativeValueId);
+ batch.setWeight(2f);
+ assertCreateAndReloadSpeciesBatch(batch, esp1Batch.getId());
+
+ // Try to remove
+ service.deleteSpeciesBatch(esp1Batch.getId());
+
+ // Check if remove
+ try {
+ batch = service.getSpeciesBatch(esp1Batch.getId());
+ assertNull(batch);
+ }
+ catch(DataRetrievalFailureException drfe) {
+ assertNotNull(drfe);
+ }
}
@Test
@Ignore
public void deleteSpeciesSubBatch(/*String id*/) {
+ // Idem deleteSpeciesBatch
}
@Test
1
0
01 Feb '13
Author: kmorin
Date: 2013-02-01 12:12:52 +0100 (Fri, 01 Feb 2013)
New Revision: 287
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/287
Log:
- fixes #1845 [ERGO] - Principe d'enregistrement lors de la fermeture de l'?\195?\169cran
- javadoc
Added:
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/ChangeScreenAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/CancelEditFishingOperationAction.java
Removed:
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/HydrologicCaracteristicUtil.java
Modified:
trunk/tutti-ui-swing/src/license/THIRD-PARTY.properties
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/EditSelectedCruiseAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/EditSelectedCruiseCatchesAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/EditSelectedProgramAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/EditSelectedProtocolAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/MainUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/SelectCruiseAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/ValidateSelectedCruiseCatchesAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/CancelEditCruiseAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/SaveCruiseAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/CloneProtocolAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/EditCatchesAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/EditCruiseAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/EditProgramAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/EditProtocolAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportProtocolAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ImportProtocolAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/NewCruiseAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/NewProgramAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/NewProtocolAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ValidateCatchesAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.css
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.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/FishingOperationsUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/SaveFishingOperationAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SampleCategoryType.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/SpeciesBatchUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIModel.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/frequency/SpeciesFrequencyUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesUIModel.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/CreateSpeciesBatchUIHandler.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/SplitSpeciesBatchUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/CaracteristicRowModel.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/CaracteristicTabUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/CancelEditProgramAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/EditProgramUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/SaveProgramAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/CancelEditProtocolAction.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/EditProtocolUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/SaveProtocolAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiTabContainerUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/CustomTab.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TabHandler.java
trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIModel-error-validation.xml
trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-edit-warning-validation.xml
trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-validate-error-validation.xml
trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties
trunk/tutti-ui-swing/src/main/resources/icons/action-alert-warning.png
Modified: trunk/tutti-ui-swing/src/license/THIRD-PARTY.properties
===================================================================
--- trunk/tutti-ui-swing/src/license/THIRD-PARTY.properties 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/license/THIRD-PARTY.properties 2013-02-01 11:12:52 UTC (rev 287)
@@ -24,7 +24,7 @@
# Please fill the missing licenses for dependencies :
#
#
-#Fri Feb 01 01:12:25 CET 2013
+#Fri Feb 01 12:08:25 CET 2013
antlr--antlr--2.7.6=BSD License
commons-primitives--commons-primitives--1.0=The Apache Software License, Version 2.0
dom4j--dom4j--1.6.1=BSD License
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-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/AbstractTuttiUIHandler.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -55,7 +55,6 @@
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JList;
-import javax.swing.JMenuItem;
import javax.swing.JRootPane;
import javax.swing.KeyStroke;
import javax.swing.ListCellRenderer;
@@ -130,6 +129,18 @@
return context.getConfig();
}
+ /**
+ * Can the UI be closed? It is useful whe the user wants to exit the current
+ * screen but the model is modified: we can then ask the user if he wants to
+ * save or not.
+ *
+ * @param nextScreen the next screen to display
+ * @return
+ */
+ public boolean canCloseUI(TuttiScreen nextScreen) {
+ return true;
+ }
+
public void setText(KeyEvent event, String property) {
JTextComponent field = (JTextComponent) event.getSource();
String value = field.getText();
Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/ChangeScreenAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/ChangeScreenAction.java (rev 0)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/ChangeScreenAction.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -0,0 +1,35 @@
+
+package fr.ifremer.tutti.ui.swing;
+
+import java.awt.event.ActionEvent;
+
+/**
+ * Abstract action defining actions which sets the screen of the application.
+ *
+ * @author kmorin <kmorin(a)codelutin.com>
+ * @since 1.0
+ */
+public abstract class ChangeScreenAction extends AbstractTuttiAction<TuttiUIContext, MainUIHandler> {
+
+ protected ChangeScreenAction(MainUIHandler handler,
+ String name,
+ String icon,
+ String text,
+ String tip,
+ boolean hideBody) {
+ super(handler, name, icon, text, tip, hideBody);
+ }
+
+ @Override
+ protected boolean prepareAction(ActionEvent event) {
+ boolean result = super.prepareAction(event);
+ result &= getHandler().getCurrentHandler().canCloseUI(getNextScreen());
+ return result;
+ }
+
+ /**
+ * @return the next screen to display.
+ */
+ protected abstract TuttiScreen getNextScreen();
+
+}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/EditSelectedCruiseAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/EditSelectedCruiseAction.java 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/EditSelectedCruiseAction.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -33,12 +33,12 @@
import static org.nuiton.i18n.I18n._;
/**
- * TODO
+ * Opens the cruise edition screen to edit the selected cruise.
*
* @author tchemit <chemit(a)codelutin.com>
* @since 1.0
*/
-public class EditSelectedCruiseAction extends AbstractTuttiAction<TuttiUIContext, MainUIHandler> {
+public class EditSelectedCruiseAction extends ChangeScreenAction {
private static final long serialVersionUID = 1L;
@@ -61,6 +61,11 @@
if (log.isInfoEnabled()) {
log.info("Edit cruise: " + getContext().getCruiseId());
}
- getContext().setScreen(TuttiScreen.EDIT_CRUISE);
+ getContext().setScreen(getNextScreen());
}
+
+ @Override
+ protected TuttiScreen getNextScreen() {
+ return TuttiScreen.EDIT_CRUISE;
+ }
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/EditSelectedCruiseCatchesAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/EditSelectedCruiseCatchesAction.java 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/EditSelectedCruiseCatchesAction.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -31,12 +31,12 @@
import static org.nuiton.i18n.I18n._;
/**
- * TODO
+ * Opens the catches edition screen to edit the selected catches.
*
* @author tchemit <chemit(a)codelutin.com>
* @since 1.0
*/
-public class EditSelectedCruiseCatchesAction extends AbstractTuttiAction<TuttiUIContext, MainUIHandler> {
+public class EditSelectedCruiseCatchesAction extends ChangeScreenAction {
private static final long serialVersionUID = 1L;
@@ -56,6 +56,12 @@
Preconditions.checkState(getContext().isCruiseFilled());
getContext().setValidationContext(TuttiUIContext.VALIDATION_CONTEXT_EDIT);
getContext().setScreen(null);
- getContext().setScreen(TuttiScreen.EDIT_FISHING_OPERATION);
+ getContext().setScreen(getNextScreen());
}
+
+ @Override
+ protected TuttiScreen getNextScreen() {
+ return TuttiScreen.EDIT_FISHING_OPERATION;
+ }
+
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/EditSelectedProgramAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/EditSelectedProgramAction.java 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/EditSelectedProgramAction.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -33,12 +33,12 @@
import static org.nuiton.i18n.I18n._;
/**
- * TODO
+ * Opens the program edition screen to edit the selected program.
*
* @author tchemit <chemit(a)codelutin.com>
* @since 1.0
*/
-public class EditSelectedProgramAction extends AbstractTuttiAction<TuttiUIContext, MainUIHandler> {
+public class EditSelectedProgramAction extends ChangeScreenAction {
private static final long serialVersionUID = 1L;
@@ -61,6 +61,12 @@
if (log.isInfoEnabled()) {
log.info("Edit program: " + getContext().getProgramId());
}
- getContext().setScreen(TuttiScreen.EDIT_PROGRAM);
+ getContext().setScreen(getNextScreen());
}
+
+ @Override
+ protected TuttiScreen getNextScreen() {
+ return TuttiScreen.EDIT_PROGRAM;
+ }
+
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/EditSelectedProtocolAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/EditSelectedProtocolAction.java 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/EditSelectedProtocolAction.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -33,12 +33,12 @@
import static org.nuiton.i18n.I18n._;
/**
- * TODO
+ * Opens the protocol edition screen to edit the selected protocol.
*
* @author tchemit <chemit(a)codelutin.com>
* @since 1.0
*/
-public class EditSelectedProtocolAction extends AbstractTuttiAction<TuttiUIContext, MainUIHandler> {
+public class EditSelectedProtocolAction extends ChangeScreenAction {
private static final long serialVersionUID = 1L;
@@ -62,6 +62,12 @@
if (log.isInfoEnabled()) {
log.info("Edit protocol: " + getContext().getProtocolId());
}
- getContext().setScreen(TuttiScreen.EDIT_PROTOCOL);
+ getContext().setScreen(getNextScreen());
}
+
+ @Override
+ protected TuttiScreen getNextScreen() {
+ return TuttiScreen.EDIT_PROTOCOL;
+ }
+
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/MainUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/MainUIHandler.java 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/MainUIHandler.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -274,6 +274,11 @@
ui.getValidatorMessageWidget().clearValidators();
}
+ public AbstractTuttiUIHandler getCurrentHandler() {
+ TuttiUI<?, ?> body = (TuttiUI<?, ?>) currentBody;
+ return body.getHandler();
+ }
+
//------------------------------------------------------------------------//
//-- Internal methods --//
//------------------------------------------------------------------------//
@@ -286,7 +291,7 @@
if (currentBody != null) {
TuttiUI<?, ?> body = (TuttiUI<?, ?>) currentBody;
body.getHandler().onCloseUI();
-
+
context.getSwingSession().save();
ui.getBody().remove(currentBody);
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/SelectCruiseAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/SelectCruiseAction.java 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/SelectCruiseAction.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -29,12 +29,12 @@
import static org.nuiton.i18n.I18n._;
/**
- * TODO
+ * Opens the cruise selection screen (home).
*
* @author tchemit <chemit(a)codelutin.com>
* @since 1.0
*/
-public class SelectCruiseAction extends AbstractTuttiAction<TuttiUIContext, MainUIHandler> {
+public class SelectCruiseAction extends ChangeScreenAction {
private static final long serialVersionUID = 1L;
@@ -52,6 +52,11 @@
@Override
protected void doAction(ActionEvent e) {
// Preconditions.checkNotNull(getContext().isCruiseFilled());
- getContext().setScreen(TuttiScreen.SELECT_CRUISE);
+ getContext().setScreen(getNextScreen());
}
+
+ @Override
+ protected TuttiScreen getNextScreen() {
+ return TuttiScreen.SELECT_CRUISE;
+ }
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/ValidateSelectedCruiseCatchesAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/ValidateSelectedCruiseCatchesAction.java 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/ValidateSelectedCruiseCatchesAction.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -31,12 +31,12 @@
import static org.nuiton.i18n.I18n._;
/**
- * TODO
+ * Opens the catches validation screen to edit the selected catches.
*
* @author tchemit <chemit(a)codelutin.com>
* @since 1.0
*/
-public class ValidateSelectedCruiseCatchesAction extends AbstractTuttiAction<TuttiUIContext, MainUIHandler> {
+public class ValidateSelectedCruiseCatchesAction extends ChangeScreenAction {
private static final long serialVersionUID = 1L;
@@ -55,6 +55,11 @@
Preconditions.checkState(getContext().isCruiseFilled());
getContext().setValidationContext(TuttiUIContext.VALIDATION_CONTEXT_VALIDATE);
getContext().setScreen(null);
- getContext().setScreen(TuttiScreen.EDIT_FISHING_OPERATION);
+ getContext().setScreen(getNextScreen());
}
+
+ @Override
+ protected TuttiScreen getNextScreen() {
+ return TuttiScreen.EDIT_FISHING_OPERATION;
+ }
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/CancelEditCruiseAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/CancelEditCruiseAction.java 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/CancelEditCruiseAction.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -32,7 +32,7 @@
import static org.nuiton.i18n.I18n._;
/**
- * TODO
+ * Cancels the edition of a cruise
*
* @author tchemit <chemit(a)codelutin.com>
* @since 1.0
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIHandler.java 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIHandler.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -33,7 +33,9 @@
import fr.ifremer.tutti.service.PersistenceService;
import fr.ifremer.tutti.ui.swing.AbstractTuttiUIHandler;
import fr.ifremer.tutti.ui.swing.MainUI;
+import fr.ifremer.tutti.ui.swing.TuttiScreen;
import fr.ifremer.tutti.ui.swing.TuttiUI;
+import java.awt.event.ActionEvent;
import jaxx.runtime.JAXXUtil;
import jaxx.runtime.context.JAXXContextEntryDef;
import jaxx.runtime.validator.swing.SwingValidator;
@@ -44,6 +46,7 @@
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.List;
+import javax.swing.JOptionPane;
/**
* Handler of UI {@link EditCruiseUI}.
@@ -263,6 +266,20 @@
MainUI main = ui.getContextValue(MainUI.class, MainUI.class.getName());
main.clearValidators();
}
+
+ @Override
+ public boolean canCloseUI(TuttiScreen nextScreen) {
+ boolean result = true;
+ if (getModel().isModify()) {
+ int answer = askSaveBeforeLeaving(ui);
+ result = answer == JOptionPane.NO_OPTION;
+ if (answer == JOptionPane.YES_OPTION) {
+ ActionEvent event = new ActionEvent(nextScreen, nextScreen.ordinal(), null);
+ ui.getSaveCruiseAction().actionPerformed(event);
+ }
+ }
+ return result;
+ }
@Override
public EditCruiseUIModel getModel() {
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/SaveCruiseAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/SaveCruiseAction.java 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/SaveCruiseAction.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -36,6 +36,8 @@
import static org.nuiton.i18n.I18n._;
/**
+ * Saves a cruise
+ *
* @author kmorin <kmorin(a)codelutin.com>
* @since 1.0
*/
@@ -53,6 +55,11 @@
);
}
+ /**
+ * If the event source is a TuttiScreen, then the screen changes to the source.
+ * Otherwise, the screen changes to the home.
+ * @param event
+ */
@Override
protected void doAction(ActionEvent event) {
TuttiUIContext context = getContext();
@@ -73,7 +80,13 @@
context.setProgramId(saved.getProgram().getId());
context.setCruiseId(saved.getId());
- context.setScreen(TuttiScreen.SELECT_CRUISE);
+ TuttiScreen nextScreen;
+ if (event.getSource().getClass().isAssignableFrom(TuttiScreen.class)) {
+ nextScreen = (TuttiScreen) event.getSource();
+ } else {
+ nextScreen = TuttiScreen.SELECT_CRUISE;
+ }
+ context.setScreen(nextScreen);
}
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/CloneProtocolAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/CloneProtocolAction.java 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/CloneProtocolAction.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -36,7 +36,7 @@
import static org.nuiton.i18n.I18n._;
/**
- * TODO
+ * Opens the protocol creation screen with the data of an already existing protocol.
*
* @author tchemit <chemit(a)codelutin.com>
* @since 1.0
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/EditCatchesAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/EditCatchesAction.java 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/EditCatchesAction.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -35,7 +35,7 @@
import static org.nuiton.i18n.I18n._;
/**
- * TODO
+ * Opens the catches edition screen.
*
* @author tchemit <chemit(a)codelutin.com>
* @since 1.0
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/EditCruiseAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/EditCruiseAction.java 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/EditCruiseAction.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -34,7 +34,7 @@
import static org.nuiton.i18n.I18n._;
/**
- * TODO
+ * Opens the cruise edition screen.
*
* @author tchemit <chemit(a)codelutin.com>
* @since 1.0
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/EditProgramAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/EditProgramAction.java 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/EditProgramAction.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -34,7 +34,7 @@
import static org.nuiton.i18n.I18n._;
/**
- * TODO
+ * Opens the program edition screen.
*
* @author tchemit <chemit(a)codelutin.com>
* @since 1.0
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/EditProtocolAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/EditProtocolAction.java 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/EditProtocolAction.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -36,7 +36,7 @@
import static org.nuiton.i18n.I18n._;
/**
- * TODO
+ * Opens the protocol edition screen.
*
* @author tchemit <chemit(a)codelutin.com>
* @since 1.0
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportProtocolAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportProtocolAction.java 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportProtocolAction.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -38,7 +38,7 @@
import static org.nuiton.i18n.I18n._;
/**
- * TODO
+ * Opens a file chooser and exports the protocol into the selected file.
*
* @author tchemit <chemit(a)codelutin.com>
* @since 1.0
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ImportProtocolAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ImportProtocolAction.java 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ImportProtocolAction.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -39,7 +39,7 @@
import static org.nuiton.i18n.I18n._;
/**
- * TODO
+ * Opens a file chooser and imports the protocol from the selected file.
*
* @author tchemit <chemit(a)codelutin.com>
* @since 1.0
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/NewCruiseAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/NewCruiseAction.java 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/NewCruiseAction.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -32,7 +32,7 @@
import static org.nuiton.i18n.I18n._;
/**
- * TODO
+ * Opens the cruise creation screen.
*
* @author tchemit <chemit(a)codelutin.com>
* @since 1.0
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/NewProgramAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/NewProgramAction.java 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/NewProgramAction.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -32,7 +32,7 @@
import static org.nuiton.i18n.I18n._;
/**
- * TODO
+ * Opens the program creation screen.
*
* @author tchemit <chemit(a)codelutin.com>
* @since 1.0
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/NewProtocolAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/NewProtocolAction.java 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/NewProtocolAction.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -34,7 +34,7 @@
import static org.nuiton.i18n.I18n._;
/**
- * TODO
+ * Opens the protocol creation screen.
*
* @author tchemit <chemit(a)codelutin.com>
* @since 1.0
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ValidateCatchesAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ValidateCatchesAction.java 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ValidateCatchesAction.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -34,7 +34,7 @@
import static org.nuiton.i18n.I18n._;
/**
- * TODO
+ * Opens the catches validation screen.
*
* @author tchemit <chemit(a)codelutin.com>
* @since 1.0
Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/CancelEditFishingOperationAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/CancelEditFishingOperationAction.java (rev 0)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/CancelEditFishingOperationAction.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -0,0 +1,63 @@
+
+package fr.ifremer.tutti.ui.swing.content.operation;
+
+import fr.ifremer.tutti.ui.swing.AbstractTuttiAction;
+import java.awt.event.ActionEvent;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import static org.nuiton.i18n.I18n._;
+
+/**
+ * Cancels the edition of a fishing operation and potentially switch to another tab.
+ *
+ * @author kmorin <kmorin(a)codelutin.com>
+ * @since 1.0
+ */
+public class CancelEditFishingOperationAction extends AbstractTuttiAction<EditFishingOperationUIModel, EditFishingOperationUIHandler> {
+
+ private static final long serialVersionUID = 1L;
+
+ /** Logger. */
+ private static final Log log = LogFactory.getLog(SaveFishingOperationAction.class);
+
+ public CancelEditFishingOperationAction(EditFishingOperationUIHandler handler) {
+ super(handler,
+ "cancelFishingOperation",
+ "cancel",
+ _("tutti.action.cancel.editFishingOperation"),
+ _("tutti.action.cancel.editFishingOperation.tip"),
+ false
+ );
+ }
+
+ /**
+ * If the event source is an EditFishingOperationUIHandler,
+ * then the tab panel of the parent switch to the index set
+ * in the ID param of the event.
+ *
+ * @param event
+ * @throws Exception
+ */
+ @Override
+ protected void doAction(ActionEvent event) throws Exception {
+ FishingOperationsUIHandler parentHandler = getHandler().getParentUi().getHandler();
+ if (getModel().isCreate()) {
+ if (log.isInfoEnabled()) {
+ log.info("Cancel edition for fishingOperation ");
+ }
+ // cancel to create a new fishingOperation
+ parentHandler.closeCurrentFishingOperation();
+
+ } else {
+ parentHandler.reloadFishingOperation();
+ }
+ if (event.getSource() != null
+ && event.getSource().getClass().isAssignableFrom(EditFishingOperationUIHandler.class)) {
+
+ int newIndex = event.getID();
+ parentHandler.getTabPanel().setSelectedIndex(newIndex);
+ }
+ }
+
+}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.css
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.css 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.css 2013-02-01 11:12:52 UTC (rev 287)
@@ -455,8 +455,7 @@
}
#cancelButton {
- actionIcon: cancel;
- text:"tutti.action.cancel";
+ action: {cancelFishingOperationAction};
}
#importCasinoButton {
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.jaxx
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.jaxx 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.jaxx 2013-02-01 11:12:52 UTC (rev 287)
@@ -78,6 +78,8 @@
initializer='getContextValue(EditFishingOperationUIModel.class)'/>
<SaveFishingOperationAction id='saveFishingOperationAction' constructorParams='handler'/>
+
+ <CancelEditFishingOperationAction id='cancelFishingOperationAction' constructorParams='handler'/>
<SwingValidatorMessageTableModel id='errorTableModel'/>
@@ -88,6 +90,7 @@
<field name='fishingOperationNumber'
component='fishingOperationNumberField'/>
<field name='gearShootingStartDate' component='gearShootingStartDateField'/>
+ <field name='gearShootingEndDate' component='gearShootingEndDateField'/>
<field name='comment' component='commentPane'/>
<field name='saisisseur' component='saisisseurList'/>
<field name='vessel' component='vesselComboBox'/>
@@ -523,7 +526,7 @@
<JPanel layout='{new BorderLayout()}' constraints='BorderLayout.SOUTH'>
<JPanel id='createFishingOperationActions' layout='{new GridLayout(1,0)}'
constraints='BorderLayout.CENTER'>
- <JButton id='cancelButton' onActionPerformed='handler.cancel()'/>
+ <JButton id='cancelButton'/>
<JButton id='saveButton'/>
</JPanel>
</JPanel>
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-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -40,6 +40,7 @@
import fr.ifremer.tutti.service.PersistenceService;
import fr.ifremer.tutti.ui.swing.AbstractTuttiBeanUIModel;
import fr.ifremer.tutti.ui.swing.MainUI;
+import fr.ifremer.tutti.ui.swing.TuttiScreen;
import fr.ifremer.tutti.ui.swing.TuttiUIContext;
import fr.ifremer.tutti.ui.swing.content.operation.fishing.CaracteristicTabUIModel;
import fr.ifremer.tutti.ui.swing.content.operation.fishing.environment.EnvironmentTabUI;
@@ -63,10 +64,10 @@
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
+import java.awt.event.ActionEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.List;
-import jaxx.runtime.SwingUtil;
import jaxx.runtime.validator.swing.SwingValidator;
/**
@@ -350,28 +351,42 @@
}
@Override
- public boolean onHideTab() {
- boolean result = true;
- if (isAModelModified()) {
+ public boolean canCloseUI(TuttiScreen nextScreen) {
+ boolean result = !isAModelModified();
+ if (!result) {
int answer = askSaveBeforeLeaving(ui);
+ ActionEvent event = new ActionEvent(nextScreen, nextScreen.ordinal(), null);
switch (answer) {
case JOptionPane.OK_OPTION:
- ui.getSaveFishingOperationAction().actionPerformed(null);
+ ui.getSaveFishingOperationAction().actionPerformed(event);
break;
+ }
+ result = answer == JOptionPane.NO_OPTION;
+ }
+ return result;
+ }
+ @Override
+ public boolean onHideTab(int currentIndex, int newIndex) {
+ boolean result = !isAModelModified();
+ if (!result) {
+ int answer = askSaveBeforeLeaving(ui);
+ ActionEvent event = new ActionEvent(this, newIndex, null);
+ switch (answer) {
+ case JOptionPane.OK_OPTION:
+ ui.getSaveFishingOperationAction().actionPerformed(event);
+ break;
+
case JOptionPane.NO_OPTION:
- parentUi.getHandler().reloadFishingOperation();
+ ui.getCancelFishingOperationAction().actionPerformed(event);
break;
-
- case JOptionPane.CANCEL_OPTION:
- result = false;
}
}
return result;
}
@Override
- public void onShowTab() {
+ public void onShowTab(int currentIndex, int newIndex) {
MainUI main = ui.getContextValue(MainUI.class, MainUI.class.getName());
main.clearValidators();
main.registerValidator(ui.getValidator());
@@ -483,19 +498,6 @@
}
}
- public void cancel() {
- if (getModel().isCreate()) {
- if (log.isInfoEnabled()) {
- log.info("Cancel edition for fishingOperation ");
- }
- // cancel to create a new fishingOperation
- parentUi.getHandler().closeCurrentFishingOperation();
-
- } else {
- parentUi.getHandler().reloadFishingOperation();
- }
- }
-
public void importCasino() {
//TODO
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIHandler.java 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIHandler.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -31,6 +31,7 @@
import fr.ifremer.tutti.persistence.entities.referential.Gear;
import fr.ifremer.tutti.persistence.entities.referential.Vessel;
import fr.ifremer.tutti.service.PersistenceService;
+import fr.ifremer.tutti.ui.swing.TuttiScreen;
import fr.ifremer.tutti.ui.swing.TuttiUI;
import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUIModel;
import fr.ifremer.tutti.ui.swing.util.AbstractTuttiTabContainerUIHandler;
@@ -169,9 +170,6 @@
ui.getTabPane().setSelectedIndex(0);
ui.getFishingOperationTabContent().getFishingOperationTabPane().setSelectedIndex(0);
- // when quitting ui, let's de-select fishingOperation (will save any changes)
- selectFishingOperation(null);
-
closeUI(ui.getFishingOperationTabContent());
closeUI(ui.getCatchesTabContent());
}
@@ -182,6 +180,15 @@
}
@Override
+ public boolean canCloseUI(TuttiScreen nextScreen) {
+ boolean result = super.canCloseUI(nextScreen);
+ if (getTabPanel().getSelectedIndex() == 0) {
+ result = ui.getFishingOperationTabContent().getHandler().canCloseUI(nextScreen);
+ }
+ return result;
+ }
+
+ @Override
public SwingValidator<FishingOperationsUIModel> getValidator() {
return null;
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/SaveFishingOperationAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/SaveFishingOperationAction.java 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/SaveFishingOperationAction.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -28,6 +28,7 @@
import fr.ifremer.tutti.persistence.entities.CaracteristicMap;
import fr.ifremer.tutti.persistence.entities.data.FishingOperation;
import fr.ifremer.tutti.ui.swing.AbstractTuttiAction;
+import fr.ifremer.tutti.ui.swing.TuttiScreen;
import fr.ifremer.tutti.ui.swing.content.operation.fishing.CaracteristicTabUIModel;
import fr.ifremer.tutti.ui.swing.content.operation.fishing.environment.EnvironmentTabUIModel;
import fr.ifremer.tutti.ui.swing.content.operation.fishing.gearshooting.GearShootingTabUIModel;
@@ -42,6 +43,8 @@
import static org.nuiton.i18n.I18n._;
/**
+ * Saves a fishing operation and potentially sets another screen or switch to another tab.
+ *
* @author kmorin <kmorin(a)codelutin.com>
* @since 1.0
*/
@@ -61,11 +64,21 @@
false
);
}
-
+
+ /**
+ * If the event source is an EditFishingOperationUIHandler,
+ * then the tab panel of the parent switch to the index set
+ * in the ID param of the event.
+ * If the event source is a TuttiScreen, then the screen changes to the source.
+ *
+ * @param event
+ * @throws Exception
+ */
@Override
protected void doAction(ActionEvent event) {
EditFishingOperationUIHandler handler = getHandler();
+ FishingOperationsUIHandler parentHandler = getHandler().getParentUi().getHandler();
TuttiBeanMonitor<EditFishingOperationUIModel> monitor = handler.getFishingOperationMonitor();
@@ -116,8 +129,20 @@
getModel().setModify(false);
// persist current fishingOperation
- handler.getParentUi().getHandler().saveFishingOperation(toSave);
+ parentHandler.saveFishingOperation(toSave);
}
+
+ if (event.getSource() != null) {
+ Class sourceClass = event.getSource().getClass();
+ if (sourceClass.isAssignableFrom(EditFishingOperationUIHandler.class)) {
+ int newIndex = event.getID();
+ parentHandler.getTabPanel().setSelectedIndex(newIndex);
+
+ } else if (sourceClass.isAssignableFrom(TuttiScreen.class)) {
+ TuttiScreen nextScreen = (TuttiScreen) event.getSource();
+ getContext().setScreen(nextScreen);
+ }
+ }
}
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -157,7 +157,7 @@
}
@Override
- public boolean onHideTab() {
+ public boolean onHideTab(int currentIndex, int newIndex) {
AbstractTuttiBeanUIModel model = getModel();
boolean result = model.isValid();
if (result && model.isModify()) {
@@ -167,7 +167,7 @@
}
@Override
- public void onShowTab() {
+ public void onShowTab(int currentIndex, int newIndex) {
registerValidators();
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SampleCategoryType.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SampleCategoryType.java 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SampleCategoryType.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -27,9 +27,7 @@
import com.google.common.collect.Maps;
import fr.ifremer.tutti.persistence.entities.data.SampleCategoryEnum;
import fr.ifremer.tutti.service.DecoratorService;
-
import java.util.EnumMap;
-
import static org.nuiton.i18n.I18n._;
import static org.nuiton.i18n.I18n.n_;
@@ -79,6 +77,11 @@
return result;
}
+ @Override
+ public String toString() {
+ return getLabel();
+ }
+
public static final EnumMap<SampleCategoryEnum, SampleCategoryType> enumToType;
static {
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-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.css 2013-02-01 11:12:52 UTC (rev 287)
@@ -166,7 +166,7 @@
}
#filterSpeciesBatchRootButton {
- text: "tutti.label.filterSpeciesBatchMode.mode.root";
+ text: {_("tutti.label.filterSpeciesBatchMode.mode.root", model.getRootNumber())};
toolTipText: "tutti.label.filterSpeciesBatchMode.mode.root.tip";
value: "root";
selected: {model.isTableViewModeRoot()};
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-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -330,7 +330,9 @@
super.onModelRowsChanged(rows);
// clear speciesUsed
- getModel().getSpeciesUsed().clear();
+ SpeciesBatchUIModel model = getModel();
+ model.getSpeciesUsed().clear();
+ model.setRootNumber(0);
for (SpeciesBatchRowModel row : rows) {
updateTotalFromFrequencies(row);
@@ -742,6 +744,9 @@
// save new batches
saveRows(newBatches);
+
+ SpeciesBatchUIModel model = getModel();
+ model.setLeafNumber(model.getLeafNumber() + newBatches.size() - 1);
}
recomputeBatchActionEnable();
@@ -1184,8 +1189,13 @@
if (log.isInfoEnabled()) {
log.info("Remove from speciesUsed: " + decorate(row.getSortedUnsortedCategoryValue()) + " - " + decorate(row.getSpecies()));
}
- getModel().getSpeciesUsed().remove(row.getSortedUnsortedCategoryValue(),
+ SpeciesBatchUIModel model = getModel();
+ model.getSpeciesUsed().remove(row.getSortedUnsortedCategoryValue(),
row.getSpecies());
+
+ if (row.isBatchRoot()) {
+ model.setRootNumber(model.getRootNumber() - 1);
+ }
}
protected void addToSpeciesUsed(SpeciesBatchRowModel row) {
@@ -1195,8 +1205,11 @@
if (log.isInfoEnabled()) {
log.info("Add to speciesUsed: " + decorate(row.getSortedUnsortedCategoryValue()) + " - " + decorate(row.getSpecies()));
}
- getModel().getSpeciesUsed().put(row.getSortedUnsortedCategoryValue(),
+ SpeciesBatchUIModel model = getModel();
+ model.getSpeciesUsed().put(row.getSortedUnsortedCategoryValue(),
row.getSpecies());
+
+ model.setRootNumber(model.getRootNumber() + 1);
}
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIModel.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIModel.java 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIModel.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -58,6 +58,10 @@
public static final String PROPERTY_TABLE_VIEW_MODE_LEAF = "tableViewModeLeaf";
public static final String PROPERTY_TABLE_VIEW_MODE_ROOT = "tableViewModeRoot";
+
+ public static final String PROPERTY_ROOT_NUMBER = "rootNumber";
+
+ public static final String PROPERTY_LEAF_NUMBER = "leafNumber";
/**
* Sampling order (sets by protocol).
@@ -115,6 +119,16 @@
* @since 0.3
*/
protected boolean removeSpeciesSubBatchEnabled;
+
+ /**
+ * @since 1.0
+ */
+ protected int rootNumber;
+
+ /**
+ * @since 1.0
+ */
+ protected int leafNumber;
public SpeciesBatchUIModel(EditCatchesUIModel catchesUIModel) {
super(catchesUIModel,
@@ -221,6 +235,26 @@
return speciesUsed;
}
+ public int getRootNumber() {
+ return rootNumber;
+ }
+
+ public void setRootNumber(int rootNumber) {
+ Object oldValue = getRootNumber();
+ this.rootNumber = rootNumber;
+ firePropertyChange(PROPERTY_ROOT_NUMBER, oldValue, rootNumber);
+ }
+
+ public int getLeafNumber() {
+ return leafNumber;
+ }
+
+ public void setLeafNumber(int leafNumber) {
+ Object oldValue = getLeafNumber();
+ this.leafNumber = leafNumber;
+ firePropertyChange(PROPERTY_LEAF_NUMBER, oldValue, leafNumber);
+ }
+
public boolean isCreateSpeciesBatchEnabled() {
return createSpeciesBatchEnabled;
}
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-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/FrequencyCellComponent.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -31,8 +31,6 @@
import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchRowModel;
import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchTableModel;
import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchUI;
-import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchUIHandler;
-import fr.ifremer.tutti.ui.swing.content.operation.catches.species.split.CreateSpeciesBatchUI;
import fr.ifremer.tutti.ui.swing.util.table.AbstractSelectTableAction;
import fr.ifremer.tutti.ui.swing.util.table.ColumnIdentifier;
import jaxx.runtime.SwingUtil;
@@ -52,10 +50,7 @@
import java.awt.event.MouseEvent;
import java.util.List;
import javax.swing.table.DefaultTableCellRenderer;
-import jaxx.runtime.swing.CardLayout2Ext;
-import static org.nuiton.i18n.I18n._;
-
/**
* Component to render and edit frequency stuff from batch table.
*
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -43,8 +43,6 @@
import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor;
import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil;
import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIHandler;
-import jaxx.runtime.validator.swing.SwingValidatorMessageTableRenderer;
-import jaxx.runtime.validator.swing.SwingValidatorUtil;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -59,7 +57,6 @@
import java.util.List;
import java.util.Map;
import jaxx.runtime.SwingUtil;
-import jaxx.runtime.swing.CardLayout2Ext;
import jaxx.runtime.validator.swing.SwingValidator;
/**
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesAction.java 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesAction.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -30,20 +30,19 @@
import fr.ifremer.tutti.persistence.entities.referential.Species;
import fr.ifremer.tutti.service.PersistenceService;
import fr.ifremer.tutti.ui.swing.AbstractTuttiAction;
-import fr.ifremer.tutti.ui.swing.TuttiUIContext;
-import java.awt.Dimension;
import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
import java.util.List;
-import java.util.concurrent.Executors;
import javax.swing.SwingUtilities;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import static org.nuiton.i18n.I18n._;
+
/**
- *
+ * Enable to select a species to the species selected in the protocol.
+ *
* @author kmorin <kmorin(a)codelutin.com>
+ * @since 1.0
*/
public class AddSpeciesAction extends AbstractTuttiAction<CreateSpeciesBatchUIModel, CreateSpeciesBatchUIHandler> {
@@ -52,8 +51,6 @@
/** Logger. */
private static final Log log = LogFactory.getLog(AddSpeciesAction.class);
-// protected AddSpeciesUI popup;
-
protected List<Species> allSpecies;
public AddSpeciesAction(CreateSpeciesBatchUIHandler handler) {
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesUIHandler.java 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesUIHandler.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -26,26 +26,15 @@
*/
import com.google.common.collect.Lists;
-import fr.ifremer.tutti.persistence.TuttiPersistence;
-import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
-import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue;
import fr.ifremer.tutti.persistence.entities.referential.Species;
-import fr.ifremer.tutti.service.PersistenceService;
import fr.ifremer.tutti.ui.swing.AbstractTuttiUIHandler;
-import fr.ifremer.tutti.ui.swing.TuttiUI;
-import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchUI;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-import java.util.List;
-import javax.swing.JDialog;
-import jaxx.runtime.SwingUtil;
import jaxx.runtime.validator.swing.SwingValidator;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
- *
* @author kmorin <kmorin(a)codelutin.com>
+ * @since 1.0
*/
public class AddSpeciesUIHandler extends AbstractTuttiUIHandler<AddSpeciesUIModel> {
@@ -75,6 +64,9 @@
@Override
public void onCloseUI() {
+ if (log.isInfoEnabled()) {
+ log.info("Closing: " + ui);
+ }
}
@Override
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesUIModel.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesUIModel.java 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesUIModel.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -31,8 +31,8 @@
import java.util.List;
/**
- *
* @author kmorin <kmorin(a)codelutin.com>
+ * @since 1.0
*/
public class AddSpeciesUIModel extends AbstractTuttiBeanUIModel<AddSpeciesUIModel, AddSpeciesUIModel> {
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/CreateSpeciesBatchUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/CreateSpeciesBatchUIHandler.java 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/CreateSpeciesBatchUIHandler.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -45,7 +45,6 @@
import java.beans.PropertyChangeListener;
import java.util.List;
import jaxx.runtime.SwingUtil;
-import jaxx.runtime.swing.CardLayout2Ext;
import jaxx.runtime.validator.swing.SwingValidator;
/**
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-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUI.css 2013-02-01 11:12:52 UTC (rev 287)
@@ -45,7 +45,6 @@
}
#categoryComboBox {
- property: selectedCategory;
selectedItem: {model.getSelectedCategory()};
}
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-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUI.jaxx 2013-02-01 11:12:52 UTC (rev 287)
@@ -82,8 +82,7 @@
<JLabel id='categoryLabel'/>
</cell>
<cell weightx='1.0'>
- <BeanComboBox id='categoryComboBox' constructorParams='this'
- genericType='SampleCategoryType'/>
+ <JComboBox id='categoryComboBox'/>
</cell>
</row>
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUIHandler.java 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUIHandler.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -39,8 +39,6 @@
import fr.ifremer.tutti.ui.swing.util.Cancelable;
import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor;
import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIHandler;
-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.JXTable;
@@ -49,8 +47,8 @@
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.List;
+import javax.swing.DefaultComboBoxModel;
import jaxx.runtime.SwingUtil;
-import jaxx.runtime.swing.CardLayout2Ext;
import jaxx.runtime.validator.swing.SwingValidator;
/**
@@ -168,11 +166,7 @@
initUI(ui);
SplitSpeciesBatchUIModel model = getModel();
-
- initBeanComboBox(ui.getCategoryComboBox(),
- Lists.<SampleCategoryType>newArrayList(),
- model.getSelectedCategory());
-
+
// when category changed, remove selected category
model.addPropertyChangeListener(SplitSpeciesBatchUIModel.PROPERTY_CATEGORY, new PropertyChangeListener() {
@Override
@@ -185,7 +179,8 @@
source.setSelectedCategory(null);
// fill comboBox with new list
- ui.getCategoryComboBox().setData((List<SampleCategoryType>) evt.getNewValue());
+ List<SampleCategoryType> data = (List<SampleCategoryType>) evt.getNewValue();
+ ui.getCategoryComboBox().setModel(new DefaultComboBoxModel(data.toArray()));
}
});
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/CaracteristicRowModel.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/CaracteristicRowModel.java 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/CaracteristicRowModel.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -30,8 +30,9 @@
import java.io.Serializable;
/**
- *
+ *
* @author kmorin <kmorin(a)codelutin.com>
+ * @since 1.0
*/
public abstract class CaracteristicRowModel<RM extends CaracteristicRowModel<RM>> extends AbstractTuttiBeanUIModel<Serializable, RM> {
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/CaracteristicTabUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/CaracteristicTabUIHandler.java 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/CaracteristicTabUIHandler.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -47,6 +47,7 @@
/**
*
* @author kmorin <kmorin(a)codelutin.com>
+ * @since 1.0
*/
public abstract class CaracteristicTabUIHandler
<RM extends CaracteristicRowModel<RM>,
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/CancelEditProgramAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/CancelEditProgramAction.java 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/CancelEditProgramAction.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -32,7 +32,7 @@
import static org.nuiton.i18n.I18n._;
/**
- * TODO
+ * Cancels the edition of a program
*
* @author tchemit <chemit(a)codelutin.com>
* @since 1.0
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/EditProgramUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/EditProgramUIHandler.java 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/EditProgramUIHandler.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -28,7 +28,10 @@
import fr.ifremer.tutti.service.PersistenceService;
import fr.ifremer.tutti.ui.swing.AbstractTuttiUIHandler;
import fr.ifremer.tutti.ui.swing.MainUI;
+import fr.ifremer.tutti.ui.swing.TuttiScreen;
import fr.ifremer.tutti.ui.swing.TuttiUI;
+import java.awt.event.ActionEvent;
+import javax.swing.JOptionPane;
import jaxx.runtime.validator.swing.SwingValidator;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -121,6 +124,20 @@
}
@Override
+ public boolean canCloseUI(TuttiScreen nextScreen) {
+ boolean result = true;
+ if (getModel().isModify()) {
+ int answer = askSaveBeforeLeaving(ui);
+ result = answer == JOptionPane.NO_OPTION;
+ if (answer == JOptionPane.YES_OPTION) {
+ ActionEvent event = new ActionEvent(nextScreen, nextScreen.ordinal(), null);
+ ui.getSaveProgramAction().actionPerformed(event);
+ }
+ }
+ return result;
+ }
+
+ @Override
public EditProgramUIModel getModel() {
return ui.getModel();
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/SaveProgramAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/SaveProgramAction.java 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/SaveProgramAction.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -29,6 +29,7 @@
import fr.ifremer.tutti.persistence.entities.data.Program;
import fr.ifremer.tutti.service.PersistenceService;
import fr.ifremer.tutti.ui.swing.AbstractTuttiAction;
+import fr.ifremer.tutti.ui.swing.ChangeScreenAction;
import fr.ifremer.tutti.ui.swing.TuttiScreen;
import fr.ifremer.tutti.ui.swing.TuttiUIContext;
import java.awt.event.ActionEvent;
@@ -59,6 +60,11 @@
);
}
+ /**
+ * If the event source is a TuttiScreen, then the screen changes to the source.
+ * Otherwise, the screen changes to the home.
+ * @param event
+ */
@Override
protected void doAction(ActionEvent event) {
TuttiUIContext context = getContext();
@@ -76,7 +82,14 @@
}
context.setProgramId(saved.getId());
- context.setScreen(TuttiScreen.SELECT_CRUISE);
+
+ TuttiScreen nextScreen;
+ if (event.getSource().getClass().isAssignableFrom(TuttiScreen.class)) {
+ nextScreen = (TuttiScreen) event.getSource();
+ } else {
+ nextScreen = TuttiScreen.SELECT_CRUISE;
+ }
+ context.setScreen(nextScreen);
}
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/CancelEditProtocolAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/CancelEditProtocolAction.java 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/CancelEditProtocolAction.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -32,7 +32,7 @@
import static org.nuiton.i18n.I18n._;
/**
- * TODO
+ * Cancels the edition of a protocol
*
* @author tchemit <chemit(a)codelutin.com>
* @since 1.0
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-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesTableModel.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -101,6 +101,7 @@
result.setWeightEnabled(true);
result.setCountIfNoFrequencyEnabled(true);
result.setCalcifySampleEnabled(true);
+ result.setValid(true);
return result;
}
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-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -33,10 +33,12 @@
import fr.ifremer.tutti.persistence.entities.referential.Species;
import fr.ifremer.tutti.ui.swing.MainUI;
import fr.ifremer.tutti.ui.swing.MainUIHandler;
+import fr.ifremer.tutti.ui.swing.TuttiScreen;
import fr.ifremer.tutti.ui.swing.TuttiUI;
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 java.awt.event.ActionEvent;
import jaxx.runtime.swing.editor.bean.BeanDoubleList;
import jaxx.runtime.validator.swing.SwingValidator;
import org.apache.commons.collections.CollectionUtils;
@@ -47,6 +49,7 @@
import java.util.List;
import java.util.Map;
+import javax.swing.JOptionPane;
/**
@@ -170,12 +173,6 @@
allCaracteristic = persistenceService.getAllCaracteristic();
-// hydroCaracteristics = ArrayListMultimap.create();
-// for (Caracteristic caracteristic :
-// persistenceService.getAllCaracteristic()) {
-// String name = HydrologicCaracteristicUtil.getGlobalName(caracteristic.getName());
-// hydroCaracteristics.put(name, caracteristic.getId());
-// }
}
public List<Caracteristic> getAllCaracteristic() {
@@ -312,7 +309,7 @@
initDoubleList(ui.getLengthClassesList(),
Lists.newArrayList(allCaracteristic),
- model.getHydrologyPmfmId());
+ model.getLengthClassesPmfmId());
initDoubleList(ui.getGearList(),
Lists.newArrayList(allCaracteristic),
@@ -326,28 +323,6 @@
Lists.newArrayList(allCaracteristic),
model.getHydrologyPmfmId());
-// List<Caracteristic> selection = Lists.newArrayList();
-// Collection<String> availableCaracteristicNames = hydroCaracteristics.keySet();
-// List<Caracteristic> availableCaracteristics = Lists.newArrayList();
-// for (String name : availableCaracteristicNames) {
-// Caracteristic caracteristic = HydrologicCaracteristicUtil.createGlobalCaracteristic(name, null);
-// availableCaracteristics.add(caracteristic);
-// }
-// List<String> hydrologyPmfm = model.getHydrologyPmfmId();
-// if (hydrologyPmfm != null) {
-// for (String caracteristicName : availableCaracteristicNames) {
-// Collection<String> ids = hydroCaracteristics.get(caracteristicName);
-// for (String caracteristicId : hydrologyPmfm) {
-// if (ids.contains(caracteristicId)) {
-// Caracteristic caracteristic = HydrologicCaracteristicUtil.createGlobalCaracteristic(caracteristicName, null);
-// selection.add(caracteristic);
-// break;
-// }
-// }
-// }
-// }
-// initBeanList(ui.getHydrologyList(), availableCaracteristics, selection);
-
// if new protocol can already cancel his creation
model.setModify(model.isCreate());
}
@@ -362,6 +337,20 @@
}
@Override
+ public boolean canCloseUI(TuttiScreen nextScreen) {
+ boolean result = true;
+ if (getModel().isModify()) {
+ int answer = askSaveBeforeLeaving(ui);
+ result = answer == JOptionPane.NO_OPTION;
+ if (answer == JOptionPane.YES_OPTION) {
+ ActionEvent event = new ActionEvent(nextScreen, nextScreen.ordinal(), null);
+ ui.getSaveProtocolAction().actionPerformed(event);
+ }
+ }
+ return result;
+ }
+
+ @Override
protected void onAfterSelectedRowChanged(int oldRowIndex,
EditProtocolSpeciesRowModel oldRow,
int newRowIndex,
@@ -383,7 +372,7 @@
ui.getSpeciesComboBox().removeItem(species);
selectFirstInCombo(ui.getSpeciesComboBox());
-// getModel().setModify(true);
+ getModel().setModify(true);
}
/** Removes a species */
@@ -400,10 +389,6 @@
getTableModel().fireTableRowsDeleted(rowIndex, rowIndex);
}
-// public Multimap<String, String> getHydroCaracteristics() {
-// return hydroCaracteristics;
-// }
-
//------------------------------------------------------------------------//
//-- Internal methods --//
//------------------------------------------------------------------------//
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/SaveProtocolAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/SaveProtocolAction.java 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/SaveProtocolAction.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -42,6 +42,8 @@
import static org.nuiton.i18n.I18n._;
/**
+ * Saves a protocol
+ *
* @author kmorin <kmorin(a)codelutin.com>
* @since 1.0
*/
@@ -62,6 +64,11 @@
);
}
+ /**
+ * If the event source is a TuttiScreen, then the screen changes to the source.
+ * Otherwise, the screen changes to the home.
+ * @param event
+ */
@Override
protected void doAction(ActionEvent event) {
EditProtocolUIModel model = getModel();
@@ -94,7 +101,13 @@
context.setProtocolId(saved.getId());
- context.setScreen(TuttiScreen.SELECT_CRUISE);
+ TuttiScreen nextScreen;
+ if (event.getSource().getClass().isAssignableFrom(TuttiScreen.class)) {
+ nextScreen = (TuttiScreen) event.getSource();
+ } else {
+ nextScreen = TuttiScreen.SELECT_CRUISE;
+ }
+ context.setScreen(nextScreen);
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiTabContainerUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiTabContainerUIHandler.java 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiTabContainerUIHandler.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -31,7 +31,6 @@
import fr.ifremer.tutti.ui.swing.TuttiUIContext;
import java.awt.Component;
import javax.swing.DefaultSingleSelectionModel;
-import javax.swing.Icon;
import javax.swing.JTabbedPane;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -67,12 +66,12 @@
if (currentIndex != newIndex) {
TabHandler handler = getTabHandler(currentIndex);
if (handler != null) {
- result = handler.onHideTab();
+ result = handler.onHideTab(currentIndex, newIndex);
}
handler = getTabHandler(newIndex);
if (handler != null) {
- handler.onShowTab();
+ handler.onShowTab(currentIndex, newIndex);
}
}
return result;
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/CustomTab.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/CustomTab.java 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/CustomTab.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -27,7 +27,6 @@
import fr.ifremer.tutti.ui.swing.AbstractTuttiBeanUIModel;
import java.awt.Color;
-import java.awt.Transparency;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.JLabel;
Deleted: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/HydrologicCaracteristicUtil.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/HydrologicCaracteristicUtil.java 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/HydrologicCaracteristicUtil.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -1,91 +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 fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
-import org.nuiton.util.beans.Binder;
-import org.nuiton.util.beans.BinderFactory;
-
-/**
- * @author kmorin <kmorin(a)codelutin.com>
- * @author tchemit <chemit(a)codelutin.com>
- * @since 0.3
- */
-public class HydrologicCaracteristicUtil {
-
- public enum Type {
- START,
- END,
- AVERAGE
- }
-
- protected static Binder<Caracteristic, Caracteristic> caracteristicBinder;
-
- public static String getGlobalName(String name) {
- if (name.charAt(name.length() - 2) == '_') {
- name = name.substring(0, name.length() - 2);
- }
- return name;
- }
-
- public static Caracteristic createGlobalCaracteristic(String name,
- Caracteristic source) {
- Caracteristic result = new Caracteristic();
- if (source != null) {
- getCaracteristicBinder().copy(source, result);
- }
- result.setName(name);
- result.setId(name);
- return result;
- }
-
- public static Type getTypeOfCaracteristic(Caracteristic caracteristic) {
- String name = caracteristic.getName();
- Type result = null;
- if (name.charAt(name.length() - 2) == '_') {
- char lastChar = name.charAt(name.length() - 1);
- switch (lastChar) {
- case 'S':
- result = Type.START;
- break;
- case 'E':
- result = Type.END;
- break;
- case 'A':
- result = Type.AVERAGE;
- }
- }
- return result;
- }
-
- protected static Binder<Caracteristic, Caracteristic> getCaracteristicBinder() {
- if (caracteristicBinder == null) {
- caracteristicBinder =
- BinderFactory.newBinder(Caracteristic.class);
- }
- return caracteristicBinder;
- }
-}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TabHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TabHandler.java 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TabHandler.java 2013-02-01 11:12:52 UTC (rev 287)
@@ -36,11 +36,17 @@
/**
* Method called when the tab is hidden
*
+ * @param currentIndex
+ * @param newIndex
* @return <code>false</code> to prevent the tab to be hidden,
* <code>true</code> otherwise.
*/
- boolean onHideTab();
+ boolean onHideTab(int currentIndex, int newIndex);
- /** Method called when the tab is shown */
- void onShowTab();
+ /**
+ * Method called when the tab is shown
+ * @param currentIndex
+ * @param newIndex
+ */
+ void onShowTab(int currentIndex, int newIndex);
}
Modified: trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIModel-error-validation.xml
===================================================================
--- trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIModel-error-validation.xml 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIModel-error-validation.xml 2013-02-01 11:12:52 UTC (rev 287)
@@ -55,12 +55,26 @@
<field-validator type="required" short-circuit="true">
<message>tutti.validator.error.cruise.beginDate.required</message>
</field-validator>
+
+ <field-validator type="fieldexpression" short-circuit="true">
+ <param name="expression">
+ <![CDATA[ endDate == null || beginDate.compareTo(endDate) <= 0 ]]>
+ </param>
+ <message>tutti.validator.error.cruise.dates.endBeforeStart</message>
+ </field-validator>
</field>
<field name="endDate">
<field-validator type="required" short-circuit="true">
<message>tutti.validator.error.cruise.endDate.required</message>
</field-validator>
+
+ <field-validator type="fieldexpression" short-circuit="true">
+ <param name="expression">
+ <![CDATA[ beginDate == null || beginDate.compareTo(endDate) <= 0 ]]>
+ </param>
+ <message>tutti.validator.error.cruise.dates.endBeforeStart</message>
+ </field-validator>
</field>
Modified: trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-edit-warning-validation.xml
===================================================================
--- trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-edit-warning-validation.xml 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-edit-warning-validation.xml 2013-02-01 11:12:52 UTC (rev 287)
@@ -30,6 +30,24 @@
<validators>
+ <field name="gearShootingStartDate">
+ <field-validator type="fieldexpression" short-circuit="true">
+ <param name="expression">
+ <![CDATA[ gearShootingEndDate == null || gearShootingStartDate.compareTo(gearShootingEndDate) <= 0 ]]>
+ </param>
+ <message>tutti.validator.error.fishingOperation.dates.endBeforeStart</message>
+ </field-validator>
+ </field>
+
+ <field name="gearShootingEndDate">
+ <field-validator type="fieldexpression" short-circuit="true">
+ <param name="expression">
+ <![CDATA[ gearShootingStartDate == null || gearShootingEndDate == null || gearShootingStartDate.compareTo(gearShootingEndDate) <= 0 ]]>
+ </param>
+ <message>tutti.validator.error.fishingOperation.dates.endBeforeStart</message>
+ </field-validator>
+ </field>
+
<!--gear shooting start latitude validation -->
<field name="gearShootingStartLatitude">
Modified: trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-validate-error-validation.xml
===================================================================
--- trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-validate-error-validation.xml 2013-02-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-validate-error-validation.xml 2013-02-01 11:12:52 UTC (rev 287)
@@ -69,12 +69,30 @@
<field-validator type="required" short-circuit="true">
<message>tutti.validator.error.fishingOperation.date.required</message>
</field-validator>
+
+ <field-validator type="fieldexpression" short-circuit="true">
+ <param name="expression">
+ <![CDATA[ gearShootingEndDate == null || gearShootingStartDate.compareTo(gearShootingEndDate) <= 0 ]]>
+ </param>
+ <message>tutti.validator.error.fishingOperation.dates.endBeforeStart</message>
+ </field-validator>
+
+ </field>
+ <field name="gearShootingEndDate">
+
+ <field-validator type="fieldexpression" short-circuit="true">
+ <param name="expression">
+ <![CDATA[ gearShootingStartDate == null || gearShootingEndDate == null || gearShootingStartDate.compareTo(gearShootingEndDate) <= 0 ]]>
+ </param>
+ <message>tutti.validator.error.fishingOperation.dates.endBeforeStart</message>
+ </field-validator>
+
</field>
<!--gear shooting start latitude validation -->
- <field name="gearShootingStartLatitude">
+ <field name="gearShootingStartLatitude">
<field-validator type="fieldexpressionwithparams">
<param name="doubleParams">min:90.0|max:90.0</param>
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-01 11:03:51 UTC (rev 286)
+++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-02-01 11:12:52 UTC (rev 287)
@@ -6,6 +6,8 @@
tutti.action.cancel=Annuler
tutti.action.cancel.editCruise=Annuler
tutti.action.cancel.editCruise.tip=Annuler l'édition (ou la création) de la campagne
+tutti.action.cancel.editFishingOperation=Annuler
+tutti.action.cancel.editFishingOperation.tip=Annuler l'édition (ou la création) du trait
tutti.action.cancel.editProgram=Annuler
tutti.action.cancel.editProgram.tip=Annuler l'édition (ou la création) de la série de campagne
tutti.action.cancel.editProtocol=Annuler
@@ -160,7 +162,7 @@
tutti.label.filterSpeciesBatchMode.mode.all.tip=Pas de filtre (tous les lots sont visibles)
tutti.label.filterSpeciesBatchMode.mode.leaf=Feuilles
tutti.label.filterSpeciesBatchMode.mode.leaf.tip=Voir uniquement les lots *feuilles*
-tutti.label.filterSpeciesBatchMode.mode.root=Parents
+tutti.label.filterSpeciesBatchMode.mode.root=Parents (%s)
tutti.label.filterSpeciesBatchMode.mode.root.tip=Voir uniquement les lots *parents*
tutti.label.filterVesselType=Filtre \:
tutti.label.filterVesselType.all=Tout
@@ -376,6 +378,7 @@
tutti.validator.error.createSpeciesBatch.speciesAndCategory.notAvailable=Couple (espèce - Vrac/Hors Vrac) déjà utilisée
tutti.validator.error.cruise.beginDate.required=La date de début est obligatoire
tutti.validator.error.cruise.country.required=Le pays est obligatoire
+tutti.validator.error.cruise.dates.endBeforeStart=La date de fin doit être après la date de début
tutti.validator.error.cruise.endDate.required=La date de fin est obligatoire
tutti.validator.error.cruise.gear.required=Au moins un engin doit être sélectionné
tutti.validator.error.cruise.headOfMission.required=Au moins un chef de mission doit être sélectionné
@@ -386,6 +389,7 @@
tutti.validator.error.cruise.vessel.required=Au moins un bateau doit être sélectionné
tutti.validator.error.cruise.year.required=L'année est obligatoire
tutti.validator.error.fishingOperation.date.required=La date du fishingOperation est obligatoire
+tutti.validator.error.fishingOperation.dates.endBeforeStart=La date de fin doit être après la date de début
tutti.validator.error.fishingOperation.fishingOperationNumber.required=Le numéro de trait est obligatoire
tutti.validator.error.fishingOperation.stationNumber.required=Le numéro de station est obligatoire
tutti.validator.error.fishingOperation.stationNumber.too.long=Valeur trop longue (limitée à %s caractères)
Modified: trunk/tutti-ui-swing/src/main/resources/icons/action-alert-warning.png
===================================================================
(Binary files differ)
1
0
r286 - in trunk/tutti-service/src/main/java/fr/ifremer/tutti/service: . protocol
by tchemit@users.forge.codelutin.com 01 Feb '13
by tchemit@users.forge.codelutin.com 01 Feb '13
01 Feb '13
Author: tchemit
Date: 2013-02-01 12:03:51 +0100 (Fri, 01 Feb 2013)
New Revision: 286
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/286
Log:
improve import / export models
Added:
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/CaracteristicRowModel.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/SpeciesRowModel.java
Removed:
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolCaracteristicExportModel.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolCaracteristicImportModel.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolSpeciesExportModel.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolSpeciesImportModel.java
Modified:
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiCsvUtil.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/TuttiProtocolImportExportService.java
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiCsvUtil.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiCsvUtil.java 2013-02-01 10:54:50 UTC (rev 285)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiCsvUtil.java 2013-02-01 11:03:51 UTC (rev 286)
@@ -27,6 +27,7 @@
import fr.ifremer.tutti.persistence.entities.IdAware;
import org.apache.commons.lang3.StringUtils;
import org.nuiton.util.csv.ValueParserFormatter;
+import org.nuiton.util.csv.ext.AbstractImportExportModel;
import org.nuiton.util.csv.ext.AbstractImportModel;
import java.text.ParseException;
@@ -40,9 +41,9 @@
*/
public class TuttiCsvUtil {
- public static abstract class AbstractTuttiImportModel<M> extends AbstractImportModel<M> {
+ public static abstract class AbstractTuttiImportExportModel<M> extends AbstractImportExportModel<M> {
- public AbstractTuttiImportModel(char separator) {
+ public AbstractTuttiImportExportModel(char separator) {
super(separator);
}
Copied: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/CaracteristicRowModel.java (from rev 285, trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolCaracteristicImportModel.java)
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/CaracteristicRowModel.java (rev 0)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/CaracteristicRowModel.java 2013-02-01 11:03:51 UTC (rev 286)
@@ -0,0 +1,77 @@
+/*
+ * #%L
+ * EchoBase :: Services
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2011 - 2012 Ifremer, Codelutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
+package fr.ifremer.tutti.service.protocol;
+
+
+import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
+import fr.ifremer.tutti.service.TuttiCsvUtil;
+import org.nuiton.util.csv.Common;
+
+import java.util.Map;
+
+/**
+ * Model to import / export {@link CaracteristicRow}.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 1.0
+ */
+public class CaracteristicRowModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<CaracteristicRow> {
+
+ public CaracteristicRowModel(char separator, Map<String, Caracteristic> caracteristicMap) {
+ super(separator);
+
+ // import definition
+
+ newForeignKeyColumn(CaracteristicRow.PROPERTY_ID,
+ CaracteristicRow.PROPERTY_CARACTERISTIC,
+ Caracteristic.class,
+ Caracteristic.PROPERTY_ID,
+ caracteristicMap);
+
+ newMandatoryColumn(CaracteristicRow.PROPERTY_TYPE,
+ CaracteristicRow.PROPERTY_TYPE,
+ Common.newEnumByNameParserFormatter(CaracteristicType.class));
+
+ newIgnoredColumn(CaracteristicRow.PROPERTY_PARAMETER);
+ newIgnoredColumn(CaracteristicRow.PROPERTY_MATRIX);
+ newIgnoredColumn(CaracteristicRow.PROPERTY_FRACTION);
+ newIgnoredColumn(CaracteristicRow.PROPERTY_METHOD);
+
+ // export definition
+
+ newColumnForExport(CaracteristicRow.PROPERTY_ID);
+ newColumnForExport(CaracteristicRow.PROPERTY_TYPE, Common.newEnumByNameParserFormatter(CaracteristicType.class));
+ newColumnForExport(CaracteristicRow.PROPERTY_PARAMETER);
+ newColumnForExport(CaracteristicRow.PROPERTY_MATRIX);
+ newColumnForExport(CaracteristicRow.PROPERTY_FRACTION);
+ newColumnForExport(CaracteristicRow.PROPERTY_METHOD);
+ }
+
+ @Override
+ public CaracteristicRow newEmptyInstance() {
+ return new CaracteristicRow();
+ }
+
+}
Deleted: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolCaracteristicExportModel.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolCaracteristicExportModel.java 2013-02-01 10:54:50 UTC (rev 285)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolCaracteristicExportModel.java 2013-02-01 11:03:51 UTC (rev 286)
@@ -1,52 +0,0 @@
-/*
- * #%L
- * EchoBase :: Services
- *
- * $Id$
- * $HeadURL$
- * %%
- * Copyright (C) 2011 - 2012 Ifremer, Codelutin
- * %%
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/gpl-3.0.html>.
- * #L%
- */
-package fr.ifremer.tutti.service.protocol;
-
-
-import fr.ifremer.tutti.persistence.entities.referential.CaracteristicType;
-import org.nuiton.util.csv.Common;
-import org.nuiton.util.csv.ext.AbstractExportModel;
-
-/**
- * Model to export caracteristics (from a protocol or not).
- *
- * @author tchemit <chemit(a)codelutin.com>
- * @since 1.0
- */
-public class ProtocolCaracteristicExportModel extends AbstractExportModel<CaracteristicRow> {
-
- public ProtocolCaracteristicExportModel(char separator) {
- super(separator);
-
- newColumnForExport(CaracteristicRow.PROPERTY_ID);
- newColumnForExport(CaracteristicRow.PROPERTY_TYPE, Common.newEnumByNameParserFormatter(CaracteristicType.class));
- newColumnForExport(CaracteristicRow.PROPERTY_PARAMETER);
- newColumnForExport(CaracteristicRow.PROPERTY_MATRIX);
- newColumnForExport(CaracteristicRow.PROPERTY_FRACTION);
- newColumnForExport(CaracteristicRow.PROPERTY_METHOD);
- }
-
-
-}
Deleted: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolCaracteristicImportModel.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolCaracteristicImportModel.java 2013-02-01 10:54:50 UTC (rev 285)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolCaracteristicImportModel.java 2013-02-01 11:03:51 UTC (rev 286)
@@ -1,66 +0,0 @@
-/*
- * #%L
- * EchoBase :: Services
- *
- * $Id$
- * $HeadURL$
- * %%
- * Copyright (C) 2011 - 2012 Ifremer, Codelutin
- * %%
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/gpl-3.0.html>.
- * #L%
- */
-package fr.ifremer.tutti.service.protocol;
-
-
-import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
-import fr.ifremer.tutti.service.TuttiCsvUtil;
-import org.nuiton.util.csv.Common;
-
-import java.util.Map;
-
-/**
- * Model to import protocol caracteristics.
- *
- * @author tchemit <chemit(a)codelutin.com>
- * @since 1.0
- */
-public class ProtocolCaracteristicImportModel extends TuttiCsvUtil.AbstractTuttiImportModel<CaracteristicRow> {
-
- public ProtocolCaracteristicImportModel(char separator, Map<String, Caracteristic> caracteristicMap) {
- super(separator);
-
- newForeignKeyColumn(CaracteristicRow.PROPERTY_ID,
- CaracteristicRow.PROPERTY_CARACTERISTIC,
- Caracteristic.class,
- Caracteristic.PROPERTY_ID,
- caracteristicMap);
-
- newMandatoryColumn(CaracteristicRow.PROPERTY_TYPE,
- CaracteristicRow.PROPERTY_TYPE,
- Common.newEnumByNameParserFormatter(CaracteristicType.class));
-
- newIgnoredColumn(CaracteristicRow.PROPERTY_PARAMETER);
- newIgnoredColumn(CaracteristicRow.PROPERTY_MATRIX);
- newIgnoredColumn(CaracteristicRow.PROPERTY_FRACTION);
- newIgnoredColumn(CaracteristicRow.PROPERTY_METHOD);
- }
-
- @Override
- public CaracteristicRow newEmptyInstance() {
- return new CaracteristicRow();
- }
-
-}
Deleted: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolSpeciesExportModel.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolSpeciesExportModel.java 2013-02-01 10:54:50 UTC (rev 285)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolSpeciesExportModel.java 2013-02-01 11:03:51 UTC (rev 286)
@@ -1,53 +0,0 @@
-package fr.ifremer.tutti.service.protocol;
-
-/*
- * #%L
- * Tutti :: Service
- * $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 fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol;
-import org.nuiton.util.csv.Common;
-import org.nuiton.util.csv.ext.AbstractExportModel;
-
-/**
- * Model to export {@link SpeciesProtocol}.
- *
- * @author tchemit <chemit(a)codelutin.com>
- * @since 1.0
- */
-public class ProtocolSpeciesExportModel extends AbstractExportModel<SpeciesRow> {
-
- public ProtocolSpeciesExportModel(char separator) {
- super(separator);
-
- newColumnForExport(SpeciesRow.PROPERTY_ID);
- newColumnForExport(SpeciesRow.PROPERTY_LENGTH_CLASS, SpeciesRow.PROPERTY_LENGTH_CLASS_ID);
- newColumnForExport(SpeciesRow.PROPERTY_SIZE_ENABLED, Common.PRIMITIVE_BOOLEAN);
- newColumnForExport(SpeciesRow.PROPERTY_SEX_ENABLED, Common.PRIMITIVE_BOOLEAN);
- newColumnForExport(SpeciesRow.PROPERTY_MATURITY_ENABLED, Common.PRIMITIVE_BOOLEAN);
- newColumnForExport(SpeciesRow.PROPERTY_AGE_ENABLED, Common.PRIMITIVE_BOOLEAN);
- newColumnForExport(SpeciesRow.PROPERTY_WEIGHT_ENABLED, Common.PRIMITIVE_BOOLEAN);
- newColumnForExport(SpeciesRow.PROPERTY_COUNT_IF_NO_FREQUENCY_ENABLED, Common.PRIMITIVE_BOOLEAN);
- newColumnForExport(SpeciesRow.PROPERTY_CALCIFY_SAMPLE_ENABLED, Common.PRIMITIVE_BOOLEAN);
- }
-
-}
\ No newline at end of file
Deleted: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolSpeciesImportModel.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolSpeciesImportModel.java 2013-02-01 10:54:50 UTC (rev 285)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolSpeciesImportModel.java 2013-02-01 11:03:51 UTC (rev 286)
@@ -1,77 +0,0 @@
-package fr.ifremer.tutti.service.protocol;
-
-/*
- * #%L
- * Tutti :: Service
- * $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 fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol;
-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.util.Map;
-
-/**
- * Model to export {@link SpeciesProtocol}.
- *
- * @author tchemit <chemit(a)codelutin.com>
- * @since 1.0
- */
-public class ProtocolSpeciesImportModel extends TuttiCsvUtil.AbstractTuttiImportModel<SpeciesRow> {
-
- public ProtocolSpeciesImportModel(char separator,
- Map<String, Caracteristic> caracteristicMap,
- Map<String, Species> speciesMap) {
- super(separator);
-
- newForeignKeyColumn(SpeciesRow.PROPERTY_ID,
- SpeciesRow.PROPERTY_SPECIES,
- Species.class,
- Species.PROPERTY_ID,
- speciesMap);
-
- newForeignKeyColumn(SpeciesRow.PROPERTY_LENGTH_CLASS,
- SpeciesRow.PROPERTY_LENGTH_CLASS,
- Caracteristic.class,
- Caracteristic.PROPERTY_ID,
- caracteristicMap);
-
- newMandatoryColumn(SpeciesRow.PROPERTY_SIZE_ENABLED, Common.PRIMITIVE_BOOLEAN);
- newMandatoryColumn(SpeciesRow.PROPERTY_SEX_ENABLED, Common.PRIMITIVE_BOOLEAN);
- newMandatoryColumn(SpeciesRow.PROPERTY_MATURITY_ENABLED, Common.PRIMITIVE_BOOLEAN);
- newMandatoryColumn(SpeciesRow.PROPERTY_AGE_ENABLED, Common.PRIMITIVE_BOOLEAN);
- newMandatoryColumn(SpeciesRow.PROPERTY_WEIGHT_ENABLED, Common.PRIMITIVE_BOOLEAN);
- newMandatoryColumn(SpeciesRow.PROPERTY_COUNT_IF_NO_FREQUENCY_ENABLED, Common.PRIMITIVE_BOOLEAN);
- newMandatoryColumn(SpeciesRow.PROPERTY_CALCIFY_SAMPLE_ENABLED, Common.PRIMITIVE_BOOLEAN);
-//
-// newIgnoredColumn(SpeciesRow.PROPERTY_PARAMETER);
- }
-
- @Override
- public SpeciesRow newEmptyInstance() {
- return new SpeciesRow();
- }
-
-
-}
\ No newline at end of file
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-01 10:54:50 UTC (rev 285)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/SpeciesRow.java 2013-02-01 11:03:51 UTC (rev 286)
@@ -53,6 +53,7 @@
public static final String PROPERTY_AGE_ENABLED = "ageEnabled";
public static final String PROPERTY_LENGTH_CLASS = "lengthClass";
+
public static final String PROPERTY_LENGTH_CLASS_ID = "lengthClassId";
public static final String PROPERTY_WEIGHT_ENABLED = "weightEnabled";
Copied: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/SpeciesRowModel.java (from rev 285, trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolSpeciesImportModel.java)
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/SpeciesRowModel.java (rev 0)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/SpeciesRowModel.java 2013-02-01 11:03:51 UTC (rev 286)
@@ -0,0 +1,88 @@
+package fr.ifremer.tutti.service.protocol;
+
+/*
+ * #%L
+ * Tutti :: Service
+ * $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 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.util.Map;
+
+/**
+ * Model to import / export {@link SpeciesRow}.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 1.0
+ */
+public class SpeciesRowModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<SpeciesRow> {
+
+ public SpeciesRowModel(char separator,
+ Map<String, Caracteristic> caracteristicMap,
+ Map<String, Species> speciesMap) {
+ super(separator);
+
+ // import definition
+
+ newForeignKeyColumn(SpeciesRow.PROPERTY_ID,
+ SpeciesRow.PROPERTY_SPECIES,
+ Species.class,
+ Species.PROPERTY_ID,
+ speciesMap);
+
+ newForeignKeyColumn(SpeciesRow.PROPERTY_LENGTH_CLASS,
+ SpeciesRow.PROPERTY_LENGTH_CLASS,
+ Caracteristic.class,
+ Caracteristic.PROPERTY_ID,
+ caracteristicMap);
+
+ newMandatoryColumn(SpeciesRow.PROPERTY_SIZE_ENABLED, Common.PRIMITIVE_BOOLEAN);
+ newMandatoryColumn(SpeciesRow.PROPERTY_SEX_ENABLED, Common.PRIMITIVE_BOOLEAN);
+ newMandatoryColumn(SpeciesRow.PROPERTY_MATURITY_ENABLED, Common.PRIMITIVE_BOOLEAN);
+ newMandatoryColumn(SpeciesRow.PROPERTY_AGE_ENABLED, Common.PRIMITIVE_BOOLEAN);
+ newMandatoryColumn(SpeciesRow.PROPERTY_WEIGHT_ENABLED, Common.PRIMITIVE_BOOLEAN);
+ newMandatoryColumn(SpeciesRow.PROPERTY_COUNT_IF_NO_FREQUENCY_ENABLED, Common.PRIMITIVE_BOOLEAN);
+ newMandatoryColumn(SpeciesRow.PROPERTY_CALCIFY_SAMPLE_ENABLED, Common.PRIMITIVE_BOOLEAN);
+
+ // export definition
+
+ newColumnForExport(SpeciesRow.PROPERTY_ID);
+ newColumnForExport(SpeciesRow.PROPERTY_LENGTH_CLASS, SpeciesRow.PROPERTY_LENGTH_CLASS_ID);
+ newColumnForExport(SpeciesRow.PROPERTY_SIZE_ENABLED, Common.PRIMITIVE_BOOLEAN);
+ newColumnForExport(SpeciesRow.PROPERTY_SEX_ENABLED, Common.PRIMITIVE_BOOLEAN);
+ newColumnForExport(SpeciesRow.PROPERTY_MATURITY_ENABLED, Common.PRIMITIVE_BOOLEAN);
+ newColumnForExport(SpeciesRow.PROPERTY_AGE_ENABLED, Common.PRIMITIVE_BOOLEAN);
+ newColumnForExport(SpeciesRow.PROPERTY_WEIGHT_ENABLED, Common.PRIMITIVE_BOOLEAN);
+ newColumnForExport(SpeciesRow.PROPERTY_COUNT_IF_NO_FREQUENCY_ENABLED, Common.PRIMITIVE_BOOLEAN);
+ newColumnForExport(SpeciesRow.PROPERTY_CALCIFY_SAMPLE_ENABLED, Common.PRIMITIVE_BOOLEAN);
+ }
+
+ @Override
+ public SpeciesRow newEmptyInstance() {
+ 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-01 10:54:50 UTC (rev 285)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/TuttiProtocolImportExportService.java 2013-02-01 11:03:51 UTC (rev 286)
@@ -86,9 +86,9 @@
Multimap<CaracteristicType, String> ids = TreeMultimap.create();
- ProtocolCaracteristicImportModel csvModel =
- new ProtocolCaracteristicImportModel(getCsvSeparator(),
- caracteristicMap);
+ CaracteristicRowModel csvModel =
+ new CaracteristicRowModel(getCsvSeparator(),
+ caracteristicMap);
Reader reader = Files.newReader(file, Charsets.UTF_8);
try {
@@ -161,8 +161,9 @@
Lists.newArrayList(caracteristicMap.keySet()), function);
- ProtocolCaracteristicExportModel csvModel =
- new ProtocolCaracteristicExportModel(getCsvSeparator());
+ CaracteristicRowModel csvModel =
+ new CaracteristicRowModel(getCsvSeparator(),
+ caracteristicMap);
BufferedWriter writer = Files.newWriter(file, Charsets.UTF_8);
try {
@@ -205,8 +206,9 @@
function.setType(CaracteristicType.HYDROLOGY);
rows.addAll(Lists.transform(protocol.getHydrologyPmfmId(), function));
}
- ProtocolCaracteristicExportModel csvModel =
- new ProtocolCaracteristicExportModel(getCsvSeparator());
+ CaracteristicRowModel csvModel =
+ new CaracteristicRowModel(getCsvSeparator(),
+ caracteristicMap);
BufferedWriter writer = Files.newWriter(file, Charsets.UTF_8);
try {
@@ -240,10 +242,10 @@
}
}
- ProtocolSpeciesImportModel csvModel =
- new ProtocolSpeciesImportModel(getCsvSeparator(),
- caracteristicMap,
- speciesMap);
+ SpeciesRowModel csvModel =
+ new SpeciesRowModel(getCsvSeparator(),
+ caracteristicMap,
+ speciesMap);
Reader reader = Files.newReader(file, Charsets.UTF_8);
try {
@@ -311,8 +313,10 @@
speciesMap));
}
- ProtocolSpeciesExportModel csvModel =
- new ProtocolSpeciesExportModel(getCsvSeparator());
+ SpeciesRowModel csvModel =
+ new SpeciesRowModel(getCsvSeparator(),
+ caracteristicMap,
+ speciesMap);
BufferedWriter writer = Files.newWriter(file, Charsets.UTF_8);
try {
1
0
01 Feb '13
Author: tchemit
Date: 2013-02-01 11:54:50 +0100 (Fri, 01 Feb 2013)
New Revision: 285
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/285
Log:
- add a control to disabled catches edit or validate when program has no zone
- import / export protocol species
Added:
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiCsvUtil.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolSpeciesExportModel.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolSpeciesImportModel.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/SpeciesRow.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportProtocolSpeciesAction.java
trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/home/
trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUIModel-error-validation.xml
Removed:
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/update/
Modified:
trunk/pom.xml
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolCaracteristicImportModel.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
trunk/tutti-ui-swing/pom.xml
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUI.css
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUI.jaxx
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUIModel.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/SaveFishingOperationAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.css
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/ImportProtocolCaracteristicAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ImportProtocolSpeciesAction.java
trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2013-02-01 09:30:28 UTC (rev 284)
+++ trunk/pom.xml 2013-02-01 10:54:50 UTC (rev 285)
@@ -124,7 +124,7 @@
<!-- libraries version -->
- <nuitonUtilsVersion>2.6.7-SNAPSHOT</nuitonUtilsVersion>
+ <nuitonUtilsVersion>2.6.7</nuitonUtilsVersion>
<nuitonI18nVersion>2.5</nuitonI18nVersion>
<eugenePluginVersion>2.6.1</eugenePluginVersion>
Added: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiCsvUtil.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiCsvUtil.java (rev 0)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiCsvUtil.java 2013-02-01 10:54:50 UTC (rev 285)
@@ -0,0 +1,116 @@
+package fr.ifremer.tutti.service;
+
+/*
+ * #%L
+ * Tutti :: Service
+ * $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 fr.ifremer.tutti.persistence.entities.IdAware;
+import org.apache.commons.lang3.StringUtils;
+import org.nuiton.util.csv.ValueParserFormatter;
+import org.nuiton.util.csv.ext.AbstractImportModel;
+
+import java.text.ParseException;
+import java.util.Map;
+
+/**
+ * Helper around csv import / export in Tutti.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 1.0
+ */
+public class TuttiCsvUtil {
+
+ public static abstract class AbstractTuttiImportModel<M> extends AbstractImportModel<M> {
+
+ public AbstractTuttiImportModel(char separator) {
+ super(separator);
+ }
+
+ public <E extends IdAware> void newForeignKeyColumn(String headerName, String propertyName, Class<E> entityType, String foreignKeyName, Map<String, E> universe) {
+ newMandatoryColumn(headerName, propertyName, newForeignKeyValue(entityType, foreignKeyName, universe));
+ }
+
+ public <E extends IdAware> void newForeignKeyColumn(String propertyName, Class<E> entityType, String foreignKeyName, Map<String, E> universe) {
+ newMandatoryColumn(propertyName, propertyName, newForeignKeyValue(entityType, foreignKeyName, universe));
+ }
+
+ public <E extends IdAware> ForeignKeyValue<E> newForeignKeyValue(Class<E> type, String propertyName, Map<String, E> universe) {
+ return new ForeignKeyValue<E>(type, propertyName, universe);
+ }
+ }
+
+ /**
+ * @param <E>
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 2.6.12
+ */
+ public static class ForeignKeyValue<E extends IdAware> implements ValueParserFormatter<E> {
+
+ protected final String propertyName;
+
+ protected final Class<E> entityType;
+
+ protected final Map<String, E> universe;
+
+ public ForeignKeyValue(Class<E> entityType,
+ String propertyName,
+ Map<String, E> universe) {
+ this.entityType = entityType;
+ this.propertyName = propertyName;
+ this.universe = universe;
+ }
+
+ @Override
+ public E parse(String value) throws ParseException {
+ E result = null;
+ if (StringUtils.isNotBlank(value)) {
+
+ // get entity from universe
+ result = universe.get(value);
+
+ if (result == null) {
+
+ // can not find entity this is a big problem for us...
+ throw new RuntimeException(
+ "Could not find entity of type " +
+ entityType.getSimpleName() + " with '" +
+ propertyName + "' = " + value);
+ }
+ }
+ return result;
+ }
+
+ @Override
+ public String format(E e) {
+ String value = "";
+ if (e != null) {
+ value = e.getId();
+ }
+ return value;
+ }
+ }
+
+ protected TuttiCsvUtil() {
+ // no instance
+ }
+}
Property changes on: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiCsvUtil.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolCaracteristicImportModel.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolCaracteristicImportModel.java 2013-02-01 09:30:28 UTC (rev 284)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolCaracteristicImportModel.java 2013-02-01 10:54:50 UTC (rev 285)
@@ -25,14 +25,10 @@
package fr.ifremer.tutti.service.protocol;
-import fr.ifremer.tutti.persistence.entities.IdAware;
import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
-import org.apache.commons.lang3.StringUtils;
+import fr.ifremer.tutti.service.TuttiCsvUtil;
import org.nuiton.util.csv.Common;
-import org.nuiton.util.csv.ValueParserFormatter;
-import org.nuiton.util.csv.ext.AbstractImportModel;
-import java.text.ParseException;
import java.util.Map;
/**
@@ -41,7 +37,7 @@
* @author tchemit <chemit(a)codelutin.com>
* @since 1.0
*/
-public class ProtocolCaracteristicImportModel extends AbstractImportModel<CaracteristicRow> {
+public class ProtocolCaracteristicImportModel extends TuttiCsvUtil.AbstractTuttiImportModel<CaracteristicRow> {
public ProtocolCaracteristicImportModel(char separator, Map<String, Caracteristic> caracteristicMap) {
super(separator);
@@ -67,66 +63,4 @@
return new CaracteristicRow();
}
- public <E extends IdAware> void newForeignKeyColumn(String headerName, String propertyName, Class<E> entityType, String foreignKeyName, Map<String, E> universe) {
- newMandatoryColumn(headerName, propertyName, newForeignKeyValue(entityType, foreignKeyName, universe));
- }
-
- public <E extends IdAware> void newForeignKeyColumn(String propertyName, Class<E> entityType, String foreignKeyName, Map<String, E> universe) {
- newMandatoryColumn(propertyName, propertyName, newForeignKeyValue(entityType, foreignKeyName, universe));
- }
-
- public static <E extends IdAware> ForeignKeyValue<E> newForeignKeyValue(Class<E> type, String propertyName, Map<String, E> universe) {
- return new ForeignKeyValue<E>(type, propertyName, universe);
- }
-
- /**
- * @param <E>
- * @author tchemit <chemit(a)codelutin.com>
- * @since 2.6.12
- */
- public static class ForeignKeyValue<E extends IdAware> implements ValueParserFormatter<E> {
-
- protected final String propertyName;
-
- protected final Class<E> entityType;
-
- protected final Map<String, E> universe;
-
- public ForeignKeyValue(Class<E> entityType,
- String propertyName,
- Map<String, E> universe) {
- this.entityType = entityType;
- this.propertyName = propertyName;
- this.universe = universe;
- }
-
- @Override
- public E parse(String value) throws ParseException {
- E result = null;
- if (StringUtils.isNotBlank(value)) {
-
- // get entity from universe
- result = universe.get(value);
-
- if (result == null) {
-
- // can not find entity this is a big problem for us...
- throw new RuntimeException(
- "Could not find entity of type " +
- entityType.getSimpleName() + " with '" +
- propertyName + "' = " + value);
- }
- }
- return result;
- }
-
- @Override
- public String format(E e) {
- String value = "";
- if (e != null) {
- value = e.getId();
- }
- return value;
- }
- }
}
Added: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolSpeciesExportModel.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolSpeciesExportModel.java (rev 0)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolSpeciesExportModel.java 2013-02-01 10:54:50 UTC (rev 285)
@@ -0,0 +1,53 @@
+package fr.ifremer.tutti.service.protocol;
+
+/*
+ * #%L
+ * Tutti :: Service
+ * $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 fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol;
+import org.nuiton.util.csv.Common;
+import org.nuiton.util.csv.ext.AbstractExportModel;
+
+/**
+ * Model to export {@link SpeciesProtocol}.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 1.0
+ */
+public class ProtocolSpeciesExportModel extends AbstractExportModel<SpeciesRow> {
+
+ public ProtocolSpeciesExportModel(char separator) {
+ super(separator);
+
+ newColumnForExport(SpeciesRow.PROPERTY_ID);
+ newColumnForExport(SpeciesRow.PROPERTY_LENGTH_CLASS, SpeciesRow.PROPERTY_LENGTH_CLASS_ID);
+ newColumnForExport(SpeciesRow.PROPERTY_SIZE_ENABLED, Common.PRIMITIVE_BOOLEAN);
+ newColumnForExport(SpeciesRow.PROPERTY_SEX_ENABLED, Common.PRIMITIVE_BOOLEAN);
+ newColumnForExport(SpeciesRow.PROPERTY_MATURITY_ENABLED, Common.PRIMITIVE_BOOLEAN);
+ newColumnForExport(SpeciesRow.PROPERTY_AGE_ENABLED, Common.PRIMITIVE_BOOLEAN);
+ newColumnForExport(SpeciesRow.PROPERTY_WEIGHT_ENABLED, Common.PRIMITIVE_BOOLEAN);
+ newColumnForExport(SpeciesRow.PROPERTY_COUNT_IF_NO_FREQUENCY_ENABLED, Common.PRIMITIVE_BOOLEAN);
+ newColumnForExport(SpeciesRow.PROPERTY_CALCIFY_SAMPLE_ENABLED, Common.PRIMITIVE_BOOLEAN);
+ }
+
+}
\ No newline at end of file
Property changes on: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolSpeciesExportModel.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Added: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolSpeciesImportModel.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolSpeciesImportModel.java (rev 0)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolSpeciesImportModel.java 2013-02-01 10:54:50 UTC (rev 285)
@@ -0,0 +1,77 @@
+package fr.ifremer.tutti.service.protocol;
+
+/*
+ * #%L
+ * Tutti :: Service
+ * $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 fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol;
+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.util.Map;
+
+/**
+ * Model to export {@link SpeciesProtocol}.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 1.0
+ */
+public class ProtocolSpeciesImportModel extends TuttiCsvUtil.AbstractTuttiImportModel<SpeciesRow> {
+
+ public ProtocolSpeciesImportModel(char separator,
+ Map<String, Caracteristic> caracteristicMap,
+ Map<String, Species> speciesMap) {
+ super(separator);
+
+ newForeignKeyColumn(SpeciesRow.PROPERTY_ID,
+ SpeciesRow.PROPERTY_SPECIES,
+ Species.class,
+ Species.PROPERTY_ID,
+ speciesMap);
+
+ newForeignKeyColumn(SpeciesRow.PROPERTY_LENGTH_CLASS,
+ SpeciesRow.PROPERTY_LENGTH_CLASS,
+ Caracteristic.class,
+ Caracteristic.PROPERTY_ID,
+ caracteristicMap);
+
+ newMandatoryColumn(SpeciesRow.PROPERTY_SIZE_ENABLED, Common.PRIMITIVE_BOOLEAN);
+ newMandatoryColumn(SpeciesRow.PROPERTY_SEX_ENABLED, Common.PRIMITIVE_BOOLEAN);
+ newMandatoryColumn(SpeciesRow.PROPERTY_MATURITY_ENABLED, Common.PRIMITIVE_BOOLEAN);
+ newMandatoryColumn(SpeciesRow.PROPERTY_AGE_ENABLED, Common.PRIMITIVE_BOOLEAN);
+ newMandatoryColumn(SpeciesRow.PROPERTY_WEIGHT_ENABLED, Common.PRIMITIVE_BOOLEAN);
+ newMandatoryColumn(SpeciesRow.PROPERTY_COUNT_IF_NO_FREQUENCY_ENABLED, Common.PRIMITIVE_BOOLEAN);
+ newMandatoryColumn(SpeciesRow.PROPERTY_CALCIFY_SAMPLE_ENABLED, Common.PRIMITIVE_BOOLEAN);
+//
+// newIgnoredColumn(SpeciesRow.PROPERTY_PARAMETER);
+ }
+
+ @Override
+ public SpeciesRow newEmptyInstance() {
+ return new SpeciesRow();
+ }
+
+
+}
\ No newline at end of file
Property changes on: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolSpeciesImportModel.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Added: 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 (rev 0)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/SpeciesRow.java 2013-02-01 10:54:50 UTC (rev 285)
@@ -0,0 +1,160 @@
+package fr.ifremer.tutti.service.protocol;
+
+/*
+ * #%L
+ * Tutti :: Service
+ * $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 fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol;
+import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
+import fr.ifremer.tutti.persistence.entities.referential.Species;
+
+import java.io.Serializable;
+
+/**
+ * Row of a {@link SpeciesProtocol} to import or export.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 1.0
+ */
+public class SpeciesRow implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ public static final String PROPERTY_ID = "id";
+
+ public static final String PROPERTY_SPECIES = "species";
+
+ public static final String PROPERTY_SIZE_ENABLED = "sizeEnabled";
+
+ public static final String PROPERTY_SEX_ENABLED = "sexEnabled";
+
+ public static final String PROPERTY_MATURITY_ENABLED = "maturityEnabled";
+
+ public static final String PROPERTY_AGE_ENABLED = "ageEnabled";
+
+ public static final String PROPERTY_LENGTH_CLASS = "lengthClass";
+ public static final String PROPERTY_LENGTH_CLASS_ID = "lengthClassId";
+
+ public static final String PROPERTY_WEIGHT_ENABLED = "weightEnabled";
+
+ public static final String PROPERTY_COUNT_IF_NO_FREQUENCY_ENABLED = "countIfNoFrequencyEnabled";
+
+ public static final String PROPERTY_CALCIFY_SAMPLE_ENABLED = "calcifySampleEnabled";
+
+ protected final SpeciesProtocol delegate;
+
+ protected Species species;
+
+ protected Caracteristic lengthClass;
+
+ public SpeciesRow() {
+ delegate = new SpeciesProtocol();
+ }
+
+ public Species getSpecies() {
+ return species;
+ }
+
+ public Caracteristic getLengthClass() {
+ return lengthClass;
+ }
+
+ public void setLengthClass(Caracteristic lengthClass) {
+ this.lengthClass = lengthClass;
+ delegate.setLengthStepPmfmId(lengthClass == null ? null : lengthClass.getId());
+ }
+
+ public String getLengthClassId() {
+ return delegate.getLengthStepPmfmId();
+ }
+
+ public void setSpecies(Species species) {
+ this.species = species;
+ delegate.setSpeciesId(species == null ? null : species.getId());
+ }
+
+ public String getId() {
+ return delegate.getSpeciesId();
+ }
+
+ public boolean isSizeEnabled() {
+ return delegate.isSizeEnabled();
+ }
+
+ public void setSizeEnabled(boolean sizeEnabled) {
+ delegate.setSizeEnabled(sizeEnabled);
+ }
+
+ public boolean isSexEnabled() {
+ return delegate.isSexEnabled();
+ }
+
+ public void setSexEnabled(boolean sexEnabled) {
+ delegate.setSexEnabled(sexEnabled);
+ }
+
+ public boolean isMaturityEnabled() {
+ return delegate.isMaturityEnabled();
+ }
+
+ public void setMaturityEnabled(boolean maturityEnabled) {
+ delegate.setMaturityEnabled(maturityEnabled);
+ }
+
+ public boolean isAgeEnabled() {
+ return delegate.isAgeEnabled();
+ }
+
+ public void setAgeEnabled(boolean ageEnabled) {
+ delegate.setAgeEnabled(ageEnabled);
+ }
+
+ public boolean isWeightEnabled() {
+ return delegate.isWeightEnabled();
+ }
+
+ public void setWeightEnabled(boolean weightEnabled) {
+ delegate.setWeightEnabled(weightEnabled);
+ }
+
+ public boolean isCountIfNoFrequencyEnabled() {
+ return delegate.isCountIfNoFrequencyEnabled();
+ }
+
+ public void setCountIfNoFrequencyEnabled(boolean countIfNoFrequencyEnabled) {
+ delegate.setCountIfNoFrequencyEnabled(countIfNoFrequencyEnabled);
+ }
+
+ public boolean isCalcifySampleEnabled() {
+ return delegate.isCalcifySampleEnabled();
+ }
+
+ public void setCalcifySampleEnabled(boolean calcifySampleEnabled) {
+ delegate.setCalcifySampleEnabled(calcifySampleEnabled);
+ }
+
+ public String getSpeciesId() {
+ return delegate.getSpeciesId();
+ }
+
+}
\ No newline at end of file
Property changes on: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/SpeciesRow.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
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-01 09:30:28 UTC (rev 284)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/TuttiProtocolImportExportService.java 2013-02-01 10:54:50 UTC (rev 285)
@@ -28,17 +28,22 @@
import com.google.common.base.Function;
import com.google.common.base.Preconditions;
import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
import com.google.common.collect.Multimap;
import com.google.common.collect.TreeMultimap;
import com.google.common.io.Closeables;
import com.google.common.io.Files;
+import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol;
import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol;
import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocols;
import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
+import fr.ifremer.tutti.persistence.entities.referential.Species;
import fr.ifremer.tutti.service.AbstractTuttiService;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.nuiton.util.beans.Binder;
+import org.nuiton.util.beans.BinderFactory;
import org.nuiton.util.csv.Export;
import org.nuiton.util.csv.Import2;
import org.nuiton.util.csv.ImportRow;
@@ -143,7 +148,6 @@
}
public void exportAllCaracteristic(File file,
-
Map<String, Caracteristic> caracteristicMap) throws Exception {
if (log.isInfoEnabled()) {
@@ -170,7 +174,8 @@
}
}
- public void exportProtocolCaracteristic(File file, TuttiProtocol protocol,
+ public void exportProtocolCaracteristic(File file,
+ TuttiProtocol protocol,
Map<String, Caracteristic> caracteristicMap) throws Exception {
if (log.isInfoEnabled()) {
@@ -182,18 +187,24 @@
List<CaracteristicRow> rows = Lists.newArrayList();
- function.setType(CaracteristicType.LENGTH_CLASS);
- rows.addAll(Lists.transform(protocol.getLengthClassesPmfmId(), function));
+ if (!protocol.isLengthClassesPmfmIdEmpty()) {
+ function.setType(CaracteristicType.LENGTH_CLASS);
- function.setType(CaracteristicType.ENVIRONMENT);
- rows.addAll(Lists.transform(protocol.getEnvironmentPmfmId(), function));
+ rows.addAll(Lists.transform(protocol.getLengthClassesPmfmId(), function));
+ }
+ if (!protocol.isEnvironmentPmfmIdEmpty()) {
+ function.setType(CaracteristicType.ENVIRONMENT);
+ rows.addAll(Lists.transform(protocol.getEnvironmentPmfmId(), function));
+ }
+ if (!protocol.isGearPmfmIdEmpty()) {
- function.setType(CaracteristicType.GEAR);
- rows.addAll(Lists.transform(protocol.getGearPmfmId(), function));
-
- function.setType(CaracteristicType.HYDROLOGY);
- rows.addAll(Lists.transform(protocol.getHydrologyPmfmId(), function));
-
+ function.setType(CaracteristicType.GEAR);
+ rows.addAll(Lists.transform(protocol.getGearPmfmId(), function));
+ }
+ if (!protocol.isHydrologyPmfmIdEmpty()) {
+ function.setType(CaracteristicType.HYDROLOGY);
+ rows.addAll(Lists.transform(protocol.getHydrologyPmfmId(), function));
+ }
ProtocolCaracteristicExportModel csvModel =
new ProtocolCaracteristicExportModel(getCsvSeparator());
@@ -208,23 +219,111 @@
}
public void importProtocolSpecies(File file,
- TuttiProtocol protocol) throws IOException {
+ TuttiProtocol protocol,
+ Map<String, Caracteristic> caracteristicMap,
+ Map<String, Species> speciesMap) throws IOException {
+
if (log.isInfoEnabled()) {
- log.info("Will import protocol [" + protocol.getName() + "] species from file: " + file);
+ log.info("Will import protocol [" + protocol.getName() +
+ "] species from file: " + file);
}
- Reader fileReader = Files.newReader(file, Charsets.UTF_8);
+
+
+ Map<String, 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);
+ }
+
+ }
+ ProtocolSpeciesImportModel csvModel =
+ new ProtocolSpeciesImportModel(getCsvSeparator(),
+ caracteristicMap,
+ speciesMap);
+
+ Reader reader = Files.newReader(file, Charsets.UTF_8);
try {
- if (log.isInfoEnabled()) {
- log.info("TODO");
+
+ Import2<SpeciesRow> importer =
+ Import2.newImport(csvModel, reader);
+
+ try {
+
+ Binder<SpeciesRow, SpeciesProtocol> binder =
+ BinderFactory.newBinder(SpeciesRow.class,
+ SpeciesProtocol.class);
+
+ for (ImportRow<SpeciesRow> row : importer) {
+
+ if (!row.isValid()) {
+
+ //TODO deal with line error
+ if (log.isErrorEnabled()) {
+ log.error("there is some error on line " + row.getLineNumber() + ":\n" + row.getErrors());
+ }
+ } else {
+
+ // treat row
+ SpeciesRow bean = row.getBean();
+
+ Species species = bean.getSpecies();
+ String id = species.getId();
+
+ SpeciesProtocol sp = new SpeciesProtocol();
+ binder.copy(bean, sp);
+ sp.setId(id);
+
+ ids.put(id, sp);
+ }
+ }
+ importer.close();
+ } finally {
+ Closeables.closeQuietly(importer);
}
- fileReader.close();
+ reader.close();
} catch (Exception e) {
- throw new IOException("Could not import protocol [" + protocol.getName() + "] species from file " + file, e);
+ throw new IOException("Could not import protocol [" + protocol.getName() + "] caracteristic from file " + file, e);
} finally {
- Closeables.closeQuietly(fileReader);
+ Closeables.closeQuietly(reader);
}
+
+ List<SpeciesProtocol> values = Lists.newArrayList(ids.values());
+ protocol.setSpecies(values);
}
+ public void exportProtocolSpecies(File file,
+ TuttiProtocol protocol,
+ Map<String, Caracteristic> caracteristicMap,
+ Map<String, Species> speciesMap) throws Exception {
+ if (log.isInfoEnabled()) {
+ log.info("Will export species to file: " + file);
+ }
+
+ List<SpeciesRow> rows = Lists.newArrayList();
+
+ if (!protocol.isSpeciesEmpty()) {
+ rows = Lists.transform(protocol.getSpecies(), new SpeciesProtocolToSpeciesRowFunction(
+ caracteristicMap,
+ speciesMap));
+ }
+
+ ProtocolSpeciesExportModel csvModel =
+ new ProtocolSpeciesExportModel(getCsvSeparator());
+
+ BufferedWriter writer = Files.newWriter(file, Charsets.UTF_8);
+ try {
+ Export export = Export.newExport(csvModel, rows);
+ export.write(writer);
+ writer.close();
+ } finally {
+ Closeables.closeQuietly(writer);
+ }
+ }
+
protected char getCsvSeparator() {
return context.getConfig().getCsvSeparator();
}
@@ -273,4 +372,35 @@
this.type = type;
}
}
+
+ private static class SpeciesProtocolToSpeciesRowFunction implements Function<SpeciesProtocol, SpeciesRow> {
+
+ private final Map<String, Species> speciesMap;
+
+ private final Map<String, Caracteristic> caracteristicMap;
+
+ private final Binder<SpeciesProtocol, SpeciesRow> binder;
+
+ public SpeciesProtocolToSpeciesRowFunction(Map<String, Caracteristic> caracteristicMap,
+ Map<String, Species> speciesMap) {
+ this.speciesMap = speciesMap;
+ this.caracteristicMap = caracteristicMap;
+ this.binder = BinderFactory.newBinder(SpeciesProtocol.class, SpeciesRow.class);
+ }
+
+ @Override
+ public SpeciesRow apply(SpeciesProtocol input) {
+ Species species = speciesMap.get(input.getSpeciesId());
+ Preconditions.checkNotNull(species, "Could not find a species with id: " + input);
+ SpeciesRow result = new SpeciesRow();
+ binder.copy(input, result);
+ String pmfmId = input.getLengthStepPmfmId();
+ if (pmfmId != null) {
+ Caracteristic caracteristic = caracteristicMap.get(pmfmId);
+ result.setLengthClass(caracteristic);
+ }
+ result.setSpecies(species);
+ return 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-01 09:30:28 UTC (rev 284)
+++ trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/protocol/TuttiProtocolImportExportServiceTest.java 2013-02-01 10:54:50 UTC (rev 285)
@@ -31,6 +31,7 @@
import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol;
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.lang3.StringUtils;
import org.apache.commons.lang3.SystemUtils;
import org.apache.commons.logging.Log;
@@ -113,6 +114,10 @@
"4;;parameterName4;matrixName4;fractionName4;methodName4;\n" +
"5;;parameterName5;matrixName5;fractionName5;methodName5;";
+ public static final String PROTOCOL_SPECIES_FILE_CONTENT =
+ "id;lengthClass;sizeEnabled;sexEnabled;maturityEnabled;ageEnabled;weightEnabled;countIfNoFrequencyEnabled;calcifySampleEnabled\n" +
+ "1;1;Y;Y;Y;Y;Y;Y;Y;\n" +
+ "2;;N;Y;N;Y;Y;Y;Y;";
@Before
public void setUp() throws Exception {
@@ -224,16 +229,16 @@
@Test
public void importProtocolCaracteristic() throws Exception {
- File importfile = new File(datadirectory, "importProtocolCaracteristic.csv");
+ File file = new File(datadirectory, "importProtocolCaracteristic.csv");
- Files.createParentDirs(importfile);
+ Files.createParentDirs(file);
- Files.write(PROTOCOL_CARACTERISTIC_FILE_CONTENT, importfile, Charsets.UTF_8);
+ Files.write(PROTOCOL_CARACTERISTIC_FILE_CONTENT, file, Charsets.UTF_8);
TuttiProtocol protocol = new TuttiProtocol();
Map<String, Caracteristic> caracteristicMap = createCaracteristics();
- service.importProtocolCaracteristic(importfile,
+ service.importProtocolCaracteristic(file,
protocol,
caracteristicMap);
@@ -291,6 +296,77 @@
Assert.assertEquals(ALL_CARACTERISTIC_FILE_CONTENT, exportFileToString);
}
+ @Test
+ public void importProtocolSpecies() throws Exception {
+
+ File file = new File(datadirectory, "importProtocolSpecies.csv");
+
+ Files.createParentDirs(file);
+
+ Files.write(PROTOCOL_SPECIES_FILE_CONTENT, file, Charsets.UTF_8);
+
+ TuttiProtocol protocol = new TuttiProtocol();
+ Map<String, Species> speciesMap = createSpecies();
+ Map<String, Caracteristic> caracteristicMap = createCaracteristics();
+
+ service.importProtocolSpecies(file,
+ protocol,
+ caracteristicMap,
+ speciesMap);
+
+ Assert.assertEquals(2, protocol.sizeSpecies());
+ }
+
+ @Test
+ public void exportProtocolSpecies() throws Exception {
+
+ File file = new File(datadirectory, "exportProtocolSpecies.csv");
+
+ Files.createParentDirs(file);
+
+ Map<String, Species> speciesMap = createSpecies();
+
+ TuttiProtocol protocol = new TuttiProtocol();
+ protocol.setSpecies(Lists.<SpeciesProtocol>newArrayList());
+
+ SpeciesProtocol sp1 = new SpeciesProtocol();
+ sp1.setSpeciesId("1");
+ sp1.setAgeEnabled(true);
+ sp1.setSizeEnabled(true);
+ sp1.setMaturityEnabled(true);
+ sp1.setSexEnabled(true);
+ sp1.setWeightEnabled(true);
+ sp1.setCountIfNoFrequencyEnabled(true);
+ sp1.setCalcifySampleEnabled(true);
+ sp1.setLengthStepPmfmId("1");
+
+ protocol.addSpecies(sp1);
+
+ SpeciesProtocol sp2 = new SpeciesProtocol();
+ sp2.setSpeciesId("2");
+ sp2.setAgeEnabled(true);
+ sp1.setSizeEnabled(true);
+ sp1.setMaturityEnabled(true);
+ sp2.setSexEnabled(true);
+ sp2.setWeightEnabled(true);
+ sp2.setCalcifySampleEnabled(true);
+ sp2.setCountIfNoFrequencyEnabled(true);
+ sp2.setLengthStepPmfmId(null);
+
+ protocol.addSpecies(sp2);
+
+ Assert.assertFalse(file.exists());
+ service.exportProtocolSpecies(file,
+ protocol,
+ createCaracteristics(),
+ speciesMap);
+
+ Assert.assertTrue(file.exists());
+
+ String exportFileToString = Files.toString(file, Charsets.UTF_8).trim();
+ Assert.assertEquals(PROTOCOL_SPECIES_FILE_CONTENT, exportFileToString);
+ }
+
public static File getTestSpecificDirectory(Class<?> testClassName,
String methodName,
String classifier) {
@@ -320,7 +396,7 @@
}
protected Map<String, Caracteristic> createCaracteristics() {
- Map<String, Caracteristic> caracteristicMap = Maps.newTreeMap();
+ Map<String, Caracteristic> result = Maps.newTreeMap();
for (int i = 1; i < 6; i++) {
Caracteristic c = new Caracteristic();
c.setId("" + i);
@@ -328,8 +404,18 @@
c.setMatrixName("matrixName" + i);
c.setFractionName("fractionName" + i);
c.setMethodName("methodName" + i);
- caracteristicMap.put(i + "", c);
+ result.put(i + "", c);
}
- return caracteristicMap;
+ return result;
}
+
+ protected Map<String, Species> createSpecies() {
+ Map<String, Species> result = Maps.newTreeMap();
+ for (int i = 1; i < 3; i++) {
+ Species c = new Species();
+ c.setId("" + i);
+ result.put(i + "", c);
+ }
+ return result;
+ }
}
Modified: trunk/tutti-ui-swing/pom.xml
===================================================================
--- trunk/tutti-ui-swing/pom.xml 2013-02-01 09:30:28 UTC (rev 284)
+++ trunk/tutti-ui-swing/pom.xml 2013-02-01 10:54:50 UTC (rev 285)
@@ -67,12 +67,14 @@
fr.ifremer.tutti.ui.swing.RunTutti
</maven.jar.main.class>
+ <bundlePrefix>tutti-${project.version}</bundlePrefix>
+
<redmine.releaseFiles>
- target/${project.build.finalName}-standalone.zip,
- target/${project.build.finalName}-full-windows-i586.zip,
- target/${project.build.finalName}-full-windows-x64.zip,
- target/${project.build.finalName}-full-linux-i586.zip,
- target/${project.build.finalName}-full-linux-x64.zip
+ target/${bundlePrefix}-standalone.zip,
+ target/${bundlePrefix}-full-windows-i586.zip,
+ target/${bundlePrefix}-full-windows-x64.zip,
+ target/${bundlePrefix}-full-linux-i586.zip,
+ target/${bundlePrefix}-full-linux-x64.zip
</redmine.releaseFiles>
</properties>
@@ -486,11 +488,10 @@
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<attach>false</attach>
- <finalName>tutti-${project.version}</finalName>
+ <finalName>${bundlePrefix}</finalName>
</configuration>
<executions>
<execution>
- <id>standalone</id>
<phase>package</phase>
<goals>
<goal>single</goal>
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUI.css
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUI.css 2013-02-01 09:30:28 UTC (rev 284)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUI.css 2013-02-01 10:54:50 UTC (rev 285)
@@ -95,10 +95,10 @@
#editCatchesButton {
action: {editCatchesAction};
- enabled: {uiContext.isCruiseFilled()};
+ enabled: {model.isValid() && uiContext.isCruiseFilled()};
}
#validateCatchesButton {
action: {validateCatchesAction};
- enabled: {uiContext.isCruiseFilled()};
+ enabled: {model.isValid() && uiContext.isCruiseFilled()};
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUI.jaxx
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUI.jaxx 2013-02-01 09:30:28 UTC (rev 284)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUI.jaxx 2013-02-01 10:54:50 UTC (rev 285)
@@ -32,6 +32,8 @@
fr.ifremer.tutti.ui.swing.util.ActionListCellRenderer
jaxx.runtime.swing.editor.bean.BeanComboBox
+ jaxx.runtime.validator.swing.SwingValidatorUtil
+ jaxx.runtime.validator.swing.SwingValidatorMessageTableModel
static org.nuiton.i18n.I18n._
</import>
@@ -59,6 +61,8 @@
<SelectCruiseUIModel id='model'
initializer='getContextValue(SelectCruiseUIModel.class)'/>
+ <SwingValidatorMessageTableModel id='errorTableModel'/>
+
<NewProgramAction id='newProgramAction' constructorParams='handler'/>
<EditProgramAction id='editProgramAction' constructorParams='handler'/>
@@ -75,6 +79,13 @@
<EditCatchesAction id='editCatchesAction' constructorParams='handler'/>
<ValidateCatchesAction id='validateCatchesAction' constructorParams='handler'/>
+ <BeanValidator id='validator' bean='model' errorTableModel='errorTableModel'
+ uiClass='jaxx.runtime.validator.swing.ui.ImageValidationUI'>
+ <field name='program' component='programCombobox'/>
+ <field name='cruise' component='cruiseCombobox'/>
+ <field name='protocol' component='protocolCombobox'/>
+ </BeanValidator>
+
<Table fill='both' constraints='BorderLayout.CENTER'>
<row>
<cell anchor='west'>
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUIHandler.java 2013-02-01 09:30:28 UTC (rev 284)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUIHandler.java 2013-02-01 10:54:50 UTC (rev 285)
@@ -74,7 +74,7 @@
@Override
public SwingValidator<SelectCruiseUIModel> getValidator() {
- return null;
+ return ui.getValidator();
}
@Override
@@ -273,6 +273,8 @@
ui.applyDataBinding(SelectCruiseUI.BINDING_EDIT_PROGRAM_BUTTON_ENABLED);
ui.applyDataBinding(SelectCruiseUI.BINDING_EDIT_CRUISE_BUTTON_ENABLED);
+
+ listenValidatorValid(getValidator(), model);
}
@Override
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUIModel.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUIModel.java 2013-02-01 09:30:28 UTC (rev 284)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUIModel.java 2013-02-01 10:54:50 UTC (rev 285)
@@ -27,7 +27,7 @@
import fr.ifremer.tutti.persistence.entities.data.Cruise;
import fr.ifremer.tutti.persistence.entities.data.Program;
import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol;
-import org.jdesktop.beans.AbstractSerializableBean;
+import fr.ifremer.tutti.ui.swing.AbstractTuttiBeanUIModel;
import java.util.List;
@@ -37,7 +37,7 @@
* @author tchemit <chemit(a)codelutin.com>
* @since 0.1
*/
-public class SelectCruiseUIModel extends AbstractSerializableBean {
+public class SelectCruiseUIModel extends AbstractTuttiBeanUIModel<Cruise, SelectCruiseUIModel> {
private static final long serialVersionUID = 1L;
@@ -71,6 +71,10 @@
protected TuttiProtocol protocol;
+ public SelectCruiseUIModel() {
+ super(Cruise.class, null, null);
+ }
+
public List<Program> getPrograms() {
return programs;
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/SaveFishingOperationAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/SaveFishingOperationAction.java 2013-02-01 09:30:28 UTC (rev 284)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/SaveFishingOperationAction.java 2013-02-01 10:54:50 UTC (rev 285)
@@ -88,7 +88,7 @@
CaracteristicTabUIModel[] subModels = handler.getSubModels();
for (CaracteristicTabUIModel subModel : subModels) {
- Class modelClass = subModel.getClass();
+ Class<?> modelClass = subModel.getClass();
CaracteristicMap caracteristics = subModel.getCaracteristicMap();
if (modelClass.isAssignableFrom(EnvironmentTabUIModel.class)) {
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java 2013-02-01 09:30:28 UTC (rev 284)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java 2013-02-01 10:54:50 UTC (rev 285)
@@ -121,7 +121,7 @@
EditCatchesUIModel model = getModel();
- listenValidatorValid(ui.getValidator(), model);
+ listenValidatorValid(getValidator(), model);
setCustomTab(0, model);
}
@@ -211,6 +211,7 @@
bean.getId() + " - " + fishingOperationText);
}
+ //TODO id can not be null
batch = persistenceService.getCatchBatchFromFishingOperation(bean.getId());
model.setCatchBatch(batch);
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.css
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.css 2013-02-01 09:30:28 UTC (rev 284)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.css 2013-02-01 10:54:50 UTC (rev 285)
@@ -103,11 +103,16 @@
tabPlacement: {JTabbedPane.LEFT};
}
-#importSpecies{
+#importSpecies {
actionIcon: import;
action: {importProtocolSpeciesAction};
}
+#exportSpecies {
+ actionIcon: export;
+ action: {exportProtocolSpeciesAction};
+}
+
#importCaracteristic {
actionIcon: import;
action: {importProtocolCaracteristicAction};
@@ -126,24 +131,20 @@
#gearList {
property: gearPmfm;
beanType: {Caracteristic.class};
- /*border: {BorderFactory.createTitledBorder(_("tutti.label.tab.fishingOperation.gearShooting"))};*/
}
#environmentList {
property: environmentPmfm;
beanType: {Caracteristic.class};
- /*border: {BorderFactory.createTitledBorder(_("tutti.label.tab.fishingOperation.environment"))};*/
}
#hydrologyList {
property: hydrologyPmfm;
beanType: {Caracteristic.class};
- /*border: {BorderFactory.createTitledBorder(_("tutti.label.tab.fishingOperation.hydrology"))};*/
}
#lengthClassesList {
property: lengthClassesPmfm;
beanType: {Caracteristic.class};
- /*border: {BorderFactory.createTitledBorder(_("tutti.label.tab.fishingOperation.lengthClasses"))};*/
}
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-01 09:30:28 UTC (rev 284)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.jaxx 2013-02-01 10:54:50 UTC (rev 285)
@@ -83,6 +83,9 @@
<ImportProtocolSpeciesAction id='importProtocolSpeciesAction'
constructorParams='handler'/>
+ <ExportProtocolSpeciesAction id='exportProtocolSpeciesAction'
+ constructorParams='handler'/>
+
<SwingValidatorMessageTableModel id='errorTableModel'/>
<BeanValidator id='validator' bean='model' errorTableModel='errorTableModel'
@@ -124,7 +127,7 @@
</Table>
</tab>
- <tab title='tutti.label.tab.protocol.fishingOperation'>
+ <tab title='tutti.label.tab.protocol.caracteristic'>
<JPanel id='caracteristicPanel' layout="{new BorderLayout()}">
<JPanel id='caracteristicActions' layout="{new GridLayout()}"
constraints='BorderLayout.NORTH'>
@@ -148,29 +151,16 @@
</tab>
</JTabbedPane>
</JPanel>
-
- <!--Table fill='both' weightx='1'>
- <row fill='both' weighty='1'>
- <cell fill='both'>
- <BeanDoubleList id='gearList' genericType='Caracteristic'/>
- </cell>
- </row>
- <row fill='both' weighty='1'>
- <cell fill='both'>
- <BeanDoubleList id='environmentList' genericType='Caracteristic'/>
- </cell>
- </row>
- <row fill='both' weighty='1'>
- <cell fill='both'>
- <BeanDoubleList id='hydrologyList' genericType='Caracteristic'/>
- </cell>
- </row>
- </Table-->
</tab>
<tab title='tutti.label.tab.protocol.species'>
<JPanel id='speciesPanel' layout="{new BorderLayout()}">
- <JButton id='importSpecies' constraints='BorderLayout.NORTH'/>
+ <JPanel id='speciesActions' layout="{new GridLayout()}"
+ constraints='BorderLayout.NORTH'>
+ <JButton id='importSpecies'/>
+ <JButton id='exportSpecies'/>
+ </JPanel>
+
<Table fill='both' constraints='BorderLayout.CENTER'>
<row fill='both'>
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-01 09:30:28 UTC (rev 284)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java 2013-02-01 10:54:50 UTC (rev 285)
@@ -182,6 +182,14 @@
return allCaracteristic;
}
+ public Map<String, Species> getAllSpecies() {
+ return allSpecies;
+ }
+
+ public Map<String, Caracteristic> getAllLengthStepPmfm() {
+ return allLengthStepPmfm;
+ }
+
@Override
public void afterInitUI() {
Added: 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 (rev 0)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportProtocolSpeciesAction.java 2013-02-01 10:54:50 UTC (rev 285)
@@ -0,0 +1,111 @@
+package fr.ifremer.tutti.ui.swing.content.protocol;
+
+/*
+ * #%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 fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol;
+import fr.ifremer.tutti.service.protocol.TuttiProtocolImportExportService;
+import fr.ifremer.tutti.ui.swing.AbstractTuttiAction;
+import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.awt.event.ActionEvent;
+import java.io.File;
+
+import static org.nuiton.i18n.I18n._;
+
+/**
+ * To export protocol species.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 1.0
+ */
+public class ExportProtocolSpeciesAction extends AbstractTuttiAction<EditProtocolUIModel, EditProtocolUIHandler> {
+
+ private static final long serialVersionUID = 1L;
+
+ /** Logger. */
+ private static final Log log =
+ LogFactory.getLog(ExportProtocolSpeciesAction.class);
+
+ private File file;
+
+ public ExportProtocolSpeciesAction(EditProtocolUIHandler handler) {
+ super(handler,
+ "exportProtocolSpecies",
+ "export",
+ _("tutti.action.exportProtocolSpecies"),
+ _("tutti.action.exportProtocolSpecies.tip"),
+ true
+ );
+ }
+
+ @Override
+ protected boolean prepareAction(ActionEvent event) {
+
+ // choose file to export
+ file = TuttiUIUtil.chooseFile(
+ getContext().getMainUI(),
+ _("tutti.title.choose.protocolSpeciesFile"),
+ _("tutti.action.chooseProtocolSpeciesFile"),
+ null,
+ "^.*\\.csv", _("tutti.file.csv")
+ );
+ boolean doAction = file != null;
+ if (doAction) {
+ super.prepareAction(event);
+ }
+ return doAction;
+ }
+
+ @Override
+ protected void releaseAction(ActionEvent event) {
+ super.releaseAction(event);
+ file = null;
+ }
+
+ @Override
+ protected void doAction(ActionEvent e) throws Exception {
+
+ if (log.isInfoEnabled()) {
+ log.info("Will export protocol species to file: " + file);
+ }
+
+ // bind to a protocol
+ TuttiProtocol protocol = getModel().toBean();
+
+
+ // import
+ TuttiProtocolImportExportService service =
+ getContext().getService(TuttiProtocolImportExportService.class);
+
+ service.exportProtocolSpecies(file,
+ protocol,
+ getHandler().getAllLengthStepPmfm(),
+ getHandler().getAllSpecies());
+
+ sendMessage("Espèces du Protocole exportés dans le fichier " + file + ".");
+ }
+}
\ No newline at end of file
Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportProtocolSpeciesAction.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ImportProtocolCaracteristicAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ImportProtocolCaracteristicAction.java 2013-02-01 09:30:28 UTC (rev 284)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ImportProtocolCaracteristicAction.java 2013-02-01 10:54:50 UTC (rev 285)
@@ -112,6 +112,6 @@
// rebind to model
getModel().fromBean(protocol);
- sendMessage("Caractéristiques du Protocole [" + protocol.getName() + "] lu depuis le fichier.");
+ sendMessage("Caractéristiques importées depuis le fichier ");
}
}
\ No newline at end of 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-01 09:30:28 UTC (rev 284)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ImportProtocolSpeciesAction.java 2013-02-01 10:54:50 UTC (rev 285)
@@ -100,11 +100,14 @@
TuttiProtocolImportExportService service =
getContext().getService(TuttiProtocolImportExportService.class);
- service.importProtocolSpecies(file, protocol);
+ service.importProtocolSpecies(file,
+ protocol,
+ getHandler().getAllLengthStepPmfm(),
+ getHandler().getAllSpecies());
// rebind to model
getModel().fromBean(protocol);
- sendMessage("Espèces du Protocole [" + protocol.getName() + "] importées depuis le fichier.");
+ sendMessage("Espèces importées depuis le fichier " + file + ".");
}
}
\ No newline at end of file
Added: trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUIModel-error-validation.xml
===================================================================
--- trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUIModel-error-validation.xml (rev 0)
+++ trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUIModel-error-validation.xml 2013-02-01 10:54:50 UTC (rev 285)
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ #%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%
+ -->
+<!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="program">
+
+ <field-validator type="required" short-circuit="true">
+ <param name="fieldName">program.zone</param>
+ <message>tutti.validator.error.program.zone.required</message>
+ </field-validator>
+ </field>
+
+
+</validators>
Property changes on: trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUIModel-error-validation.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
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-01 09:30:28 UTC (rev 284)
+++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-02-01 10:54:50 UTC (rev 285)
@@ -42,6 +42,8 @@
tutti.action.exportProtocol.tip=Exporter le protocole sélectionné
tutti.action.exportProtocolCaracteristic=Exporter les caractéristiques
tutti.action.exportProtocolCaracteristic.tip=Exporter les caractéristiques du protocole
+tutti.action.exportProtocolSpecies=
+tutti.action.exportProtocolSpecies.tip=
tutti.action.generate=Générer
tutti.action.generateCampaignName=Générer le nom
tutti.action.importProtocol=Importer
@@ -230,11 +232,11 @@
tutti.label.tab.plancton=Plancton
tutti.label.tab.protocol.accidental=Accidental
tutti.label.tab.protocol.benthos=Benthos
+tutti.label.tab.protocol.caracteristic=Caractéristiques
tutti.label.tab.protocol.caracteristic.environment=Environnement
tutti.label.tab.protocol.caracteristic.gear=Mise en oeuvre de l'engin
tutti.label.tab.protocol.caracteristic.hydrology=Paramètres hydrologiques
tutti.label.tab.protocol.caracteristic.lengthClasses=Classes de taille
-tutti.label.tab.protocol.fishingOperation=Trait
tutti.label.tab.protocol.info=Informations générales
tutti.label.tab.protocol.plankton=Plancton
tutti.label.tab.protocol.species=Espèces
@@ -336,6 +338,7 @@
tutti.title.choose.protocolCaracteristicImportFile=Choisir le fichier des caractéristiques à importer
tutti.title.choose.protocolExportFile=Choisir le fichier où exporter le protocole
tutti.title.choose.protocolImportFile=Choisir le fichier du protocole à importer
+tutti.title.choose.protocolSpeciesFile=
tutti.title.choose.protocolSpeciesImportFile=
tutti.title.create.cruise=Créer une nouvelle campagne
tutti.title.create.program=Créer une nouvelle série de campagne
1
0
r284 - in trunk/tutti-persistence-adagio/src: main/java/fr/ifremer/tutti/persistence/service main/resources test/java/fr/ifremer/tutti/persistence/service
by blavenier@users.forge.codelutin.com 01 Feb '13
by blavenier@users.forge.codelutin.com 01 Feb '13
01 Feb '13
Author: blavenier
Date: 2013-02-01 10:30:28 +0100 (Fri, 01 Feb 2013)
New Revision: 284
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/284
Log:
- getProgram return a program with a zone, or a program with a 'null' zone if location is not a zone.
Modified:
trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/ProgramPersistenceServiceImpl.java
trunk/tutti-persistence-adagio/src/main/resources/queries-override.hbm.xml
trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/ProgramPersistenceServiceTest.java
Modified: trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/ProgramPersistenceServiceImpl.java
===================================================================
--- trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/ProgramPersistenceServiceImpl.java 2013-02-01 07:40:14 UTC (rev 283)
+++ trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/ProgramPersistenceServiceImpl.java 2013-02-01 09:30:28 UTC (rev 284)
@@ -99,34 +99,30 @@
@Override
public Program getProgram(String id) {
- Object[] source = queryUnique(
+ Iterator<Object[]> list = queryList(
"program",
- "programCode", StringType.INSTANCE, id);
+ "programCode", StringType.INSTANCE, id,
+ "locationLevelId", IntegerType.INSTANCE, enumeration.LOCATION_LEVEL_ID_PROGRAM,
+ "locationClassificationId", IntegerType.INSTANCE, enumeration.LOCATION_CLASSIFICATION_ID_SECTOR);
+
+ if (list.hasNext() == false) return null;
- if (source == null) 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]);
-
- // get program locations
- Iterator<Object[]> list = queryList(
- "allProgramLocations",
- "programCode", StringType.INSTANCE, id);
-
- List<Zone> zones = Lists.newArrayList();
- while (list.hasNext()) {
- Object[] zoneSource = list.next();
- Zone target = new Zone();
- target.setId(String.valueOf(zoneSource[0]));
- target.setLabel((String) zoneSource[1]);
- target.setName((String) zoneSource[2]);
- zones.add(target);
+
+ 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);
}
- if (!zones.isEmpty()) {
- result.setZone(zones.get(0));
- }
return result;
}
@@ -213,9 +209,6 @@
target.setDescription(source.getComment());
}
-
-
-
// Zone
if (copyIfNull && source.getZone() == null) {
// Remove program location classifications :
Modified: trunk/tutti-persistence-adagio/src/main/resources/queries-override.hbm.xml
===================================================================
--- trunk/tutti-persistence-adagio/src/main/resources/queries-override.hbm.xml 2013-02-01 07:40:14 UTC (rev 283)
+++ trunk/tutti-persistence-adagio/src/main/resources/queries-override.hbm.xml 2013-02-01 09:30:28 UTC (rev 284)
@@ -65,22 +65,10 @@
<!-- [DAT-03] Get a detail program -->
<query name="program">
<![CDATA[
- SELECT
+ SELECT
p.code,
p.name,
- p.description
- FROM
- ProgramImpl p
- WHERE
- p.code = :programCode
- ]]>
- <query-param name="programCode" type="java.lang.String"/>
- </query>
-
- <!-- [DAT-03-1] Get a program locations -->
- <query name="allProgramLocations">
- <![CDATA[
- SELECT
+ p.description,
l.id,
l.label,
l.name
@@ -89,8 +77,17 @@
LEFT OUTER JOIN p.locations l
WHERE
p.code = :programCode
+ AND (
+ l is null OR (
+ l.locationLevel.id = :locationLevelId
+ AND l.locationClassification.id = :locationClassificationId
+ )
+ )
+ ORDER BY l.label
]]>
<query-param name="programCode" type="java.lang.String"/>
+ <query-param name="locationLevelId" type="java.lang.Integer"/>
+ <query-param name="locationClassificationId" type="java.lang.Integer"/>
</query>
<!-- [DAT-04] Get a detail cruise -->
Modified: trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/ProgramPersistenceServiceTest.java
===================================================================
--- trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/ProgramPersistenceServiceTest.java 2013-02-01 07:40:14 UTC (rev 283)
+++ trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/ProgramPersistenceServiceTest.java 2013-02-01 09:30:28 UTC (rev 284)
@@ -78,7 +78,8 @@
Assert.assertNotNull(actual);
Assert.assertNotNull(actual.getId());
Assert.assertNotNull(actual.getName());
- Assert.assertNotNull(actual.getZone());
+ //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());
}
1
0
Author: tchemit
Date: 2013-02-01 08:40:14 +0100 (Fri, 01 Feb 2013)
New Revision: 283
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/283
Log:
fix pom
Modified:
trunk/tutti-ui-swing/pom.xml
Modified: trunk/tutti-ui-swing/pom.xml
===================================================================
--- trunk/tutti-ui-swing/pom.xml 2013-02-01 07:31:31 UTC (rev 282)
+++ trunk/tutti-ui-swing/pom.xml 2013-02-01 07:40:14 UTC (rev 283)
@@ -503,7 +503,7 @@
<descriptor>
src/main/assembly/full-linux-i586.xml
</descriptor>
- <!--descriptor>
+ <descriptor>
src/main/assembly/full-linux-x64.xml
</descriptor>
<descriptor>
@@ -511,7 +511,7 @@
</descriptor>
<descriptor>
src/main/assembly/full-windows-x64.xml
- </descriptor-->
+ </descriptor>
</descriptors>
</configuration>
</execution>
1
0
Author: tchemit
Date: 2013-02-01 08:31:31 +0100 (Fri, 01 Feb 2013)
New Revision: 282
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/282
Log:
fix dependencies
Modified:
trunk/tutti-persistence/pom.xml
Modified: trunk/tutti-persistence/pom.xml
===================================================================
--- trunk/tutti-persistence/pom.xml 2013-02-01 00:53:55 UTC (rev 281)
+++ trunk/tutti-persistence/pom.xml 2013-02-01 07:31:31 UTC (rev 282)
@@ -59,7 +59,7 @@
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
</dependency>
-
+
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
1
0