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
r1233 - in trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities: . data
by tchemit@users.forge.codelutin.com 26 Sep '13
by tchemit@users.forge.codelutin.com 26 Sep '13
26 Sep '13
Author: tchemit
Date: 2013-09-26 20:25:38 +0200 (Thu, 26 Sep 2013)
New Revision: 1233
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1233
Log:
add useful methos
Modified:
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/TuttiEntities.java
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/SampleCategoryModel.java
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/TuttiEntities.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/TuttiEntities.java 2013-09-26 17:29:01 UTC (rev 1232)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/TuttiEntities.java 2013-09-26 18:25:38 UTC (rev 1233)
@@ -55,6 +55,7 @@
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;
@@ -313,6 +314,18 @@
return result;
}
+ public static void removeQualitativeValue(Collection<CaracteristicQualitativeValue> values,
+ int id) {
+ Iterator<CaracteristicQualitativeValue> iterator = values.iterator();
+ while (iterator.hasNext()) {
+ CaracteristicQualitativeValue next = iterator.next();
+ if (id == next.getIdAsInt()) {
+ iterator.remove();
+ break;
+ }
+ }
+ }
+
protected static class IdPredicate<B extends TuttiEntity> implements Predicate<B> {
private final String id;
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/SampleCategoryModel.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/SampleCategoryModel.java 2013-09-26 17:29:01 UTC (rev 1232)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/SampleCategoryModel.java 2013-09-26 18:25:38 UTC (rev 1233)
@@ -124,4 +124,8 @@
public boolean containsCategoryId(Integer id) {
return samplingOrder.contains(id);
}
+
+ public int indexOf(SampleCategoryModelEntry sampleCategoryDef) {
+ return category.indexOf(sampleCategoryDef);
+ }
}
1
0
26 Sep '13
Author: tchemit
Date: 2013-09-26 19:29:01 +0200 (Thu, 26 Sep 2013)
New Revision: 1232
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1232
Log:
fixes #3316: [ESPECES] Cat?\195?\169gorisation des lots : on ne peut plus ajouter une cat?\195?\169gorie une fois la cat?\195?\169gorisation effectu?\195?\169e
Modified:
trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-en.properties
trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.jaxx
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/SampleCategoryAble.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchRowModel.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchTableModel.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUI.css
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUI.jaxx
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUIModel.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/RemoveBenthosBatchAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/create/CreateBenthosBatchUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/split/SplitBenthosBatchRowModel.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/split/SplitBenthosBatchTableModel.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/split/SplitBenthosBatchUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/split/SplitBenthosBatchUIModel.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/RemoveSpeciesBatchAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchRowModel.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchTableModel.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.css
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.jaxx
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIModel.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/create/CreateSpeciesBatchUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchRowModel.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchTableModel.java
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/SplitSpeciesBatchUIModel.java
trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties
trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties
Modified: trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-en.properties
===================================================================
--- trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-en.properties 2013-09-26 11:07:00 UTC (rev 1231)
+++ trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-en.properties 2013-09-26 17:29:01 UTC (rev 1232)
@@ -1,5 +1,5 @@
#Generated by org.nuiton.jaxx.plugin.GenerateHelpIdsMojo
-#Tue Sep 24 18:46:35 CEST 2013
+#Thu Sep 26 18:46:04 CEST 2013
tutti.config.help=config.html
tutti.createAccidentalBatch.action.cancel.help=editFishingOperation.html\#captureCapturesAccidentellesActions
tutti.createAccidentalBatch.action.saveAndClose.help=editFishingOperation.html\#captureCapturesAccidentellesActions
@@ -68,6 +68,7 @@
tutti.editAccidentalBatch.action.importMultiPost.help=editFishingOperation.html\#captureCapturesAccidentellesActions
tutti.editAccidentalBatch.action.removeBatch.help=editFishingOperation.html\#captureCapturesAccidentellesActions
tutti.editAccidentalBatch.help=editFishingOperation.html\#captureCapturesAccidentelles
+tutti.editBenthosBatch.action.addSampleCategory.help=
tutti.editBenthosBatch.action.changeSampleCategory.help=editFishingOperation.html\#captureBenthosActions
tutti.editBenthosBatch.action.createBatch.help=editFishingOperation.html\#captureBenthosActions
tutti.editBenthosBatch.action.createMelag.help=editFishingOperation.html\#captureBenthosActions
@@ -232,6 +233,7 @@
tutti.editSampleCategoryModel.action.removeEntry.help=editSampleCategory.html\#actions
tutti.editSampleCategoryModel.action.save.help=editSampleCategory.html\#actions
tutti.editSampleCategoryModel.help=editSampleCategory.html
+tutti.editSpeciesBatch.action.addSampleCategory.help=
tutti.editSpeciesBatch.action.changeSampleCategory.help=editFishingOperation.html\#captureEspecesActions
tutti.editSpeciesBatch.action.createBatch.help=editFishingOperation.html\#captureEspecesActions
tutti.editSpeciesBatch.action.createMelag.help=editFishingOperation.html\#captureEspecesActions
Modified: trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties
===================================================================
--- trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties 2013-09-26 11:07:00 UTC (rev 1231)
+++ trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties 2013-09-26 17:29:01 UTC (rev 1232)
@@ -1,5 +1,5 @@
#Generated by org.nuiton.jaxx.plugin.GenerateHelpIdsMojo
-#Tue Sep 24 18:46:35 CEST 2013
+#Thu Sep 26 18:46:04 CEST 2013
tutti.config.help=config.html
tutti.createAccidentalBatch.action.cancel.help=editFishingOperation.html\#captureCapturesAccidentellesActions
tutti.createAccidentalBatch.action.saveAndClose.help=editFishingOperation.html\#captureCapturesAccidentellesActions
@@ -67,6 +67,7 @@
tutti.editAccidentalBatch.action.importMultiPost.help=editFishingOperation.html\#captureCapturesAccidentellesActions
tutti.editAccidentalBatch.action.removeBatch.help=editFishingOperation.html\#captureCapturesAccidentellesActions
tutti.editAccidentalBatch.help=editFishingOperation.html\#captureCapturesAccidentelles
+tutti.editBenthosBatch.action.addSampleCategory.help=
tutti.editBenthosBatch.action.changeSampleCategory.help=editFishingOperation.html\#captureBenthosActions
tutti.editBenthosBatch.action.createBatch.help=editFishingOperation.html\#captureBenthosActions
tutti.editBenthosBatch.action.createMelag.help=editFishingOperation.html\#captureBenthosActions
@@ -230,6 +231,7 @@
tutti.editSampleCategoryModel.action.removeEntry.help=editSampleCategory.html\#actions
tutti.editSampleCategoryModel.action.save.help=editSampleCategory.html\#actions
tutti.editSampleCategoryModel.help=editSampleCategory.html
+tutti.editSpeciesBatch.action.addSampleCategory.help=
tutti.editSpeciesBatch.action.changeSampleCategory.help=editFishingOperation.html\#captureEspecesActions
tutti.editSpeciesBatch.action.createBatch.help=editFishingOperation.html\#captureEspecesActions
tutti.editSpeciesBatch.action.createMelag.help=editFishingOperation.html\#captureEspecesActions
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.jaxx
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.jaxx 2013-09-26 11:07:00 UTC (rev 1231)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.jaxx 2013-09-26 17:29:01 UTC (rev 1232)
@@ -325,6 +325,11 @@
<SplitSpeciesBatchUI id='speciesTabSplitBatch'
constructorParams='this'/>
</JXTitledPanel>
+ <JXTitledPanel id='speciesTabAddSampleCategoryBatchReminderLabel'
+ constraints='EditCatchesUIHandler.ADD_SAMPLE_CATEGORY_BATCH_CARD'>
+ <SplitSpeciesBatchUI id='speciesTabAddSampleCategoryBatch'
+ constructorParams='this'/>
+ </JXTitledPanel>
<JXTitledPanel id='speciesTabFrequencyEditorReminderLabel'
constraints='EditCatchesUIHandler.EDIT_FREQUENCY_CARD'>
<SpeciesFrequencyUI id='speciesTabFrequencyEditor'
@@ -348,6 +353,11 @@
<SplitBenthosBatchUI id='benthosTabSplitBatch'
constructorParams='this'/>
</JXTitledPanel>
+ <JXTitledPanel id='benthosTabAddSampleCategoryBatchReminderLabel'
+ constraints='EditCatchesUIHandler.ADD_SAMPLE_CATEGORY_BATCH_CARD'>
+ <SplitBenthosBatchUI id='benthosTabAddSampleCategoryBatch'
+ constructorParams='this'/>
+ </JXTitledPanel>
<JXTitledPanel id='benthosTabFrequencyEditorReminderLabel'
constraints='EditCatchesUIHandler.EDIT_FREQUENCY_CARD'>
<BenthosFrequencyUI id='benthosTabFrequencyEditor'
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-09-26 11:07:00 UTC (rev 1231)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java 2013-09-26 17:29:01 UTC (rev 1232)
@@ -70,6 +70,8 @@
public static final String SPLIT_BATCH_CARD = "splitBatch";
+ public static final String ADD_SAMPLE_CATEGORY_BATCH_CARD = "addSampleCategoryBatch";
+
public static final String EDIT_FREQUENCY_CARD = "editFrequency";
public static final String EDIT_CARACTERISTICS_CARD = "caracteristicsCard";
@@ -121,6 +123,12 @@
@Override
public void afterInitUI() {
+ ui.getBenthosTabSplitBatch().getModel().setSplitMode(true);
+ ui.getBenthosTabAddSampleCategoryBatch().getModel().setSplitMode(false);
+
+ ui.getSpeciesTabSplitBatch().getModel().setSplitMode(true);
+ ui.getSpeciesTabAddSampleCategoryBatch().getModel().setSplitMode(false);
+
initUI(ui);
EditCatchesUIModel model = getModel();
@@ -323,6 +331,23 @@
ui.getSpeciesTabSplitBatchReminderLabel().setTitle(title);
}
+ public void addSampleCategorySpeciesBatch(SpeciesBatchRowModel editRow,
+ SplitSpeciesBatchUI splitBatchEditor,
+ int sampleCategoryId) {
+
+ splitBatchEditor.getHandler().editBatch(editRow, sampleCategoryId);
+
+ // open split editor
+ setSpeciesSelectedCard(EditCatchesUIHandler.ADD_SAMPLE_CATEGORY_BATCH_CARD);
+
+ // update title
+ String title = buildReminderLabelTitle(editRow.getSpecies(),
+ editRow,
+ ui.getSpeciesTabFishingOperationReminderLabel().getTitle(),
+ _("tutti.addSampleCategorySpeciesBatch.title"));
+ ui.getSpeciesTabAddSampleCategoryBatchReminderLabel().setTitle(title);
+ }
+
public void setSpeciesSelectedCard(String card) {
JPanel panel = ui.getSpeciesTabPanel();
CardLayout2Ext layout = (CardLayout2Ext) panel.getLayout();
@@ -348,6 +373,9 @@
} else if (SPLIT_BATCH_CARD.equals(card)) {
tuttiUi = ui.getSpeciesTabSplitBatch();
+ } else if (ADD_SAMPLE_CATEGORY_BATCH_CARD.equals(card)) {
+ tuttiUi = ui.getSpeciesTabAddSampleCategoryBatch();
+
} else if (EDIT_FREQUENCY_CARD.equals(card)) {
tuttiUi = ui.getSpeciesTabFrequencyEditor();
}
@@ -397,6 +425,23 @@
ui.getBenthosTabSplitBatchReminderLabel().setTitle(title);
}
+ public void addSampleCategoryBenthosBatch(BenthosBatchRowModel editRow,
+ SplitBenthosBatchUI splitBatchEditor,
+ int sampleCategoryId) {
+
+ splitBatchEditor.getHandler().editBatch(editRow, sampleCategoryId);
+
+ // open split editor
+ setBenthosSelectedCard(EditCatchesUIHandler.ADD_SAMPLE_CATEGORY_BATCH_CARD);
+
+ // update title
+ String title = buildReminderLabelTitle(editRow.getSpecies(),
+ editRow,
+ ui.getBenthosTabFishingOperationReminderLabel().getTitle(),
+ _("tutti.addSampleCategoryBenthosBatch.title"));
+ ui.getBenthosTabAddSampleCategoryBatchReminderLabel().setTitle(title);
+ }
+
public void setBenthosSelectedCard(String card) {
JPanel panel = ui.getBenthosTabPanel();
CardLayout2Ext layout = (CardLayout2Ext) panel.getLayout();
@@ -422,6 +467,9 @@
} else if (SPLIT_BATCH_CARD.equals(card)) {
tuttiUi = ui.getBenthosTabSplitBatch();
+ } else if (ADD_SAMPLE_CATEGORY_BATCH_CARD.equals(card)) {
+ tuttiUi = ui.getBenthosTabAddSampleCategoryBatch();
+
} else if (EDIT_FREQUENCY_CARD.equals(card)) {
tuttiUi = ui.getBenthosTabFrequencyEditor();
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/SampleCategoryAble.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/SampleCategoryAble.java 2013-09-26 11:07:00 UTC (rev 1231)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/SampleCategoryAble.java 2013-09-26 17:29:01 UTC (rev 1232)
@@ -46,6 +46,8 @@
SampleCategory getSampleCategoryById(Integer sampleCategoryId);
+ SampleCategory<?> getSampleCategoryByIndex(int sampleCategoryIndex);
+
void setSampleCategoryValue(Integer sampleCategoryId, Serializable value);
void setSampleCategoryWeight(Integer sampleCategoryId, Object value);
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchRowModel.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchRowModel.java 2013-09-26 11:07:00 UTC (rev 1231)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchRowModel.java 2013-09-26 17:29:01 UTC (rev 1232)
@@ -323,6 +323,11 @@
return result;
}
+ public SampleCategory<?> getSampleCategoryByIndex(int sampleCategoryIndex) {
+ SampleCategory<?> result = categories[sampleCategoryIndex];
+ return result;
+ }
+
@Override
public void setSampleCategoryValue(Integer sampleCategoryId, Serializable value) {
SampleCategory<?> sampleCategory =
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchTableModel.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchTableModel.java 2013-09-26 11:07:00 UTC (rev 1231)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchTableModel.java 2013-09-26 17:29:01 UTC (rev 1232)
@@ -307,12 +307,14 @@
return result;
}
- protected void updateShell(BenthosBatchRowModel entry, int columnIndex) {
-
- Set<BenthosBatchRowModel> shell = Sets.newHashSet();
- entry.collectShell(shell);
- shell.add(entry);
-
+ /**
+ * Update all the given cells for the given column.
+ *
+ * @param shell shell to update
+ * @param columnIndex the column index to update
+ * @since 2.6
+ */
+ public void updateShell(Set<BenthosBatchRowModel> shell, int columnIndex) {
for (BenthosBatchRowModel batchRowModel : shell) {
int currentRowIndex = getRowIndex(batchRowModel);
if (log.isDebugEnabled()) {
@@ -321,4 +323,19 @@
fireTableCellUpdated(currentRowIndex, columnIndex);
}
}
+
+ /**
+ * Update all the cells of the given row shell for a given column.
+ *
+ * @param entry the first row to update
+ * @param columnIndex the column index to update
+ * @since 2.6
+ */
+ protected void updateShell(BenthosBatchRowModel entry, int columnIndex) {
+
+ Set<BenthosBatchRowModel> shell = Sets.newHashSet();
+ entry.collectShell(shell);
+ shell.add(entry);
+ updateShell(shell, columnIndex);
+ }
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUI.css
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUI.css 2013-09-26 11:07:00 UTC (rev 1231)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUI.css 2013-09-26 17:29:01 UTC (rev 1232)
@@ -28,7 +28,6 @@
bean: {model};
showReset: true;
useFloat: true;
- /*numberPattern: {DECIMAL3_PATTERN};*/
_selectOnFocus: {true};
}
@@ -37,8 +36,6 @@
showPopupButton: {handler.getConfig().isShowNumberEditorButton()};
showReset: true;
useFloat: true;
- /*numberPattern: {DECIMAL3_PATTERN};
- decimalNumber: 3;*/
computedDataColor: {handler.getConfig().getColorComputedWeights()};
}
@@ -195,6 +192,15 @@
_help: {"tutti.editBenthosBatch.action.changeSampleCategory.help"};
}
+#addSampleCategoryMenu {
+ actionIcon: batch-split;
+ text: "tutti.editBenthosBatch.action.addSampleCategory";
+ toolTipText: "tutti.editBenthosBatch.action.addSampleCategory.tip";
+ i18nMnemonic: "tutti.editBenthosBatch.action.addSampleCategory.mnemonic";
+ enabled: {model.isTableViewModeAll() && model.isAddSampleCategoryEnabled()};
+ _help: {"tutti.editBenthosBatch.action.addSampleCategory.help"};
+}
+
#removeBenthosBatchMenu {
actionIcon: batch-delete;
text: "tutti.editBenthosBatch.action.removeBatch";
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUI.jaxx
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUI.jaxx 2013-09-26 11:07:00 UTC (rev 1231)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUI.jaxx 2013-09-26 17:29:01 UTC (rev 1232)
@@ -79,6 +79,8 @@
onActionPerformed='handler.splitBatch()'/>
<JMenuItem id='changeSampleCategoryMenu'
onActionPerformed='handler.changeBatchCategory()'/>
+ <JMenuItem id='addSampleCategoryMenu'
+ onActionPerformed='handler.addBatchCategory()'/>
<JMenuItem id='removeBenthosBatchMenu'/>
<JMenuItem id='removeBenthosSubBatchMenu'/>
<JMenuItem id='renameBenthosBatchMenu'/>
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUIHandler.java 2013-09-26 11:07:00 UTC (rev 1231)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUIHandler.java 2013-09-26 17:29:01 UTC (rev 1232)
@@ -136,6 +136,13 @@
*/
protected final WeightUnit weightUnit;
+ /**
+ * id of the unsorted qualitative value to remove of V/HV universe.
+ *
+ * @since 2.6
+ */
+ protected final Integer qualitative_unsorted_id;
+
public BenthosBatchUIHandler(TuttiUI<?, ?> parentUi,
BenthosBatchUI ui) {
super(parentUi, ui,
@@ -148,6 +155,9 @@
SpeciesBatchRowModel.PROPERTY_FREQUENCY,
SpeciesBatchRowModel.PROPERTY_SPECIES_TO_CONFIRM);
+ qualitative_unsorted_id =
+ context.getPersistenceService().getEnumerationFile().QUALITATIVE_UNSORTED_ID;
+
weightUnit = getConfig().getBenthosWeightUnit();
sampleCategoryModel = getDataContext().getSampleCategoryModel();
@@ -456,6 +466,7 @@
boolean enableRename = false;
boolean enableSplit = false;
boolean enableChangeSampleCategory = false;
+ boolean enableAddSampleCategory = false;
boolean enableRemove = false;
boolean enableRemoveSub = false;
boolean enableCreateMelag = false;
@@ -485,6 +496,7 @@
enableCreateMelag = selectedRowCount > 1;
enableEditFrequencies = selectedRowCount == 1;
enableChangeSampleCategory = selectedRowCount == 1 && tableModel.isCellEditable(rowIndex, columnIndex);
+ enableAddSampleCategory = selectedRowCount == 1 && tableModel.isCellEditable(rowIndex, columnIndex);
if (enableSplit) {
@@ -500,11 +512,43 @@
|| row.getComputedNumber() == 0);
}
+ Integer sampleCategoryId =
+ tableModel.getSampleCategoryId(columnIndex);
+ boolean firstCategory = false;
+ SampleCategoryModelEntry category = null;
+
+ List<CaracteristicQualitativeValue> available = null;
+
+ if (sampleCategoryId != null) {
+
+ // get category
+ category = sampleCategoryModel.getCategoryById(sampleCategoryId);
+
+ // is first category ?
+ firstCategory = sampleCategoryModel.getFirstCategoryId().equals(sampleCategoryId);
+
+ // get the first ancestor row using this category
+ BenthosBatchRowModel firstAncestorRow = row.getFirstAncestor(sampleCategoryId);
+
+ // get all used values for this category
+ Set<Serializable> used = getSampleUsedValues(
+ firstAncestorRow, sampleCategoryId);
+
+ // get all possible values
+ available = Lists.newArrayList(category.getCaracteristic().getQualitativeValue());
+ available.removeAll(used);
+
+ if (firstCategory) {
+
+ // remove the unsorted qualitative value
+ TuttiEntities.removeQualitativeValue(available, qualitative_unsorted_id);
+ }
+ }
+
if (enableChangeSampleCategory) {
- // can change category if there is still a brother category free
- Integer sampleCategoryId =
- tableModel.getSampleCategoryId(columnIndex);
+ // can change category if on a sample column and
+ // there is still a brother category free
if (sampleCategoryId == null) {
@@ -512,35 +556,41 @@
enableChangeSampleCategory = false;
} else {
- // get category
- SampleCategoryModelEntry category =
- sampleCategoryModel.getCategoryById(sampleCategoryId);
+ if (category.getCaracteristic().isNumericType()) {
- // get the first ancestor row using this category
- BenthosBatchRowModel firstAncestorRow =
- row.getFirstAncestor(sampleCategoryId);
+ // if number then can always change it
- // get all used values for this category
- Set<Serializable> used = getSampleUsedValues(
- firstAncestorRow, sampleCategoryId);
+ } else {
+ // action possible only if there is still some available values
+ enableChangeSampleCategory = CollectionUtils.isNotEmpty(available);
+ }
+ }
+ }
+
+ if (enableAddSampleCategory) {
+
+ // can change category if on a sample column and
+ // there is still a brother category free
+ // and sample category is not the first
+
+ if (sampleCategoryId == null || firstCategory) {
+
+ // not on a sample category column
+ // or using the first sample category (V/HV)
+ enableAddSampleCategory = false;
+ } else {
+
if (category.getCaracteristic().isNumericType()) {
// if number then can always change it
} else {
- // get all possible values
-
- List<CaracteristicQualitativeValue> available =
- Lists.newArrayList(category.getCaracteristic().getQualitativeValue());
- available.removeAll(used);
-
// action possible only if there is still some available values
- enableChangeSampleCategory = !available.isEmpty();
+ enableAddSampleCategory = CollectionUtils.isNotEmpty(available);
}
}
-
}
if (enableEditFrequencies) {
@@ -587,6 +637,7 @@
BenthosBatchUIModel model = getModel();
model.setSplitBatchEnabled(enableSplit);
model.setChangeSampleCategoryEnabled(enableChangeSampleCategory);
+ model.setAddSampleCategoryEnabled(enableAddSampleCategory);
model.setRemoveBatchEnabled(enableRemove);
model.setRemoveSubBatchEnabled(enableRemoveSub);
model.setRenameBatchEnabled(enableRename);
@@ -597,6 +648,7 @@
StringBuilder builder = new StringBuilder("actions for (" + rowIndex + "," + columnIndex + "):");
builder.append("\nenableSplit: ").append(enableSplit);
builder.append("\nenableChangeSampleCategory: ").append(enableChangeSampleCategory);
+ builder.append("\nenableAddSampleCategory: ").append(enableAddSampleCategory);
builder.append("\nenableRemove: ").append(enableRemove);
builder.append("\nenableRemoveSub: ").append(enableRemoveSub);
builder.append("\nenableRename: ").append(enableRename);
@@ -885,6 +937,49 @@
}
}
+ public void addBatchCategory() {
+
+ // get table model
+ BenthosBatchTableModel tableModel = getTableModel();
+
+ // get selected row
+ int rowIndex = getTable().getSelectedRow();
+ Preconditions.checkState(rowIndex != -1,
+ "Cant split batch if no batch selected");
+
+ // get selected column
+ int columnIndex = getTable().getSelectedColumn();
+ Preconditions.checkState(columnIndex != -1,
+ "Cant split batch if no batch selected");
+
+ // get selected row
+ BenthosBatchRowModel selectedRow = tableModel.getEntry(rowIndex);
+
+ // get his sample category
+ Integer sampleCategoryId = tableModel.getSampleCategoryId(columnIndex);
+
+ // get the first ancestor row using this category
+ BenthosBatchRowModel firstAncestorRow =
+ selectedRow.getFirstAncestor(sampleCategoryId);
+
+ // get his parent (the one we will edit)
+ BenthosBatchRowModel parentBatch = firstAncestorRow.getParentBatch();
+
+ if (log.isDebugEnabled()) {
+ log.debug("Open addChangeCategory batch ui for row [" + rowIndex + "] and category " + sampleCategoryId);
+ }
+
+ EditCatchesUI parent =
+ SwingUtil.getParentContainer(ui, EditCatchesUI.class);
+ SplitBenthosBatchUI splitBatchEditor =
+ parent.getBenthosTabAddSampleCategoryBatch();
+
+ parent.getHandler().addSampleCategoryBenthosBatch(
+ parentBatch,
+ splitBatchEditor,
+ sampleCategoryId);
+ }
+
public void changeBatchCategory() {
// get table model
@@ -956,6 +1051,16 @@
List<CaracteristicQualitativeValue> availableValues =
Lists.newArrayList(caracteristic.getQualitativeValue());
+
+ boolean firstCategory =
+ sampleCategoryModel.getFirstCategoryId().equals(sampleCategoryId);
+
+ if (firstCategory) {
+
+ // remove the unsorted qualitative value
+ TuttiEntities.removeQualitativeValue(availableValues, qualitative_unsorted_id);
+ }
+
availableValues.removeAll(usedValues);
JComboBox editor = new JComboBox();
@@ -1045,6 +1150,69 @@
model.setLeafNumber(model.getLeafNumber() + newBatches.size() - 1);
}
+ public void addSampleCategoryBatch(BenthosBatchRowModel parentBatch,
+ SampleCategoryModelEntry sampleCategoryDef,
+ List<SplitBenthosBatchRowModel> rows,
+ Float totalRowWeight) {
+
+ // get table model
+ BenthosBatchTableModel tableModel = getTableModel();
+
+ // get insert row index
+ int insertRow = tableModel.getRowIndex(parentBatch) + parentBatch.getChildBatch().size();
+
+ // Create rows in batch table model
+ List<BenthosBatchRowModel> newBatches = Lists.newArrayList();
+ for (SplitBenthosBatchRowModel row : rows) {
+ if (row.isEditable() && row.isValid()) {
+
+ // can keep this row
+ BenthosBatchRowModel newBatch = tableModel.createNewRow();
+
+ loadBatchRow(parentBatch,
+ newBatch,
+ sampleCategoryDef.getCategoryId(),
+ row.getCategoryValue(),
+ row.getWeight(),
+ null);
+
+ recomputeRowValidState(newBatch);
+ newBatches.add(newBatch);
+
+ tableModel.addNewRow(++insertRow, newBatch);
+ }
+ }
+
+ // add new batches to his parent
+ List<BenthosBatchRowModel> childBatch = parentBatch.getChildBatch();
+ childBatch.addAll(newBatches);
+ parentBatch.setChildBatch(childBatch);
+
+ // re compute the sub sample property for all childs
+ int categoryIndex = sampleCategoryModel.indexOf(sampleCategoryDef);
+
+ Float parentWeight = parentBatch.getSampleCategoryByIndex(categoryIndex - 1).getNotNullWeight();
+ boolean subSample = parentWeight != null && totalRowWeight != null
+ && parentWeight > totalRowWeight;
+
+ Set<BenthosBatchRowModel> shell = Sets.newHashSet();
+ parentBatch.collectShell(shell);
+
+ for (BenthosBatchRowModel rowModel : shell) {
+ rowModel.getSampleCategoryByIndex(categoryIndex).setSubSample(subSample);
+ }
+
+ // save new batches
+ saveRows(newBatches);
+
+ // update model number of leaf
+ BenthosBatchUIModel model = getModel();
+ model.setLeafNumber(model.getLeafNumber() + newBatches.size() - 1);
+
+ // update columns for the parent shell
+ tableModel.updateShell(shell, getTable().getSelectedColumn());
+ }
+
public void updateTotalFromFrequencies(BenthosBatchRowModel row) {
List<BenthosFrequencyRowModel> frequency = row.getFrequency();
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUIModel.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUIModel.java 2013-09-26 11:07:00 UTC (rev 1231)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUIModel.java 2013-09-26 17:29:01 UTC (rev 1232)
@@ -51,6 +51,8 @@
public static final String PROPERTY_CHANGE_SAMPLE_CATEGORY_ENABLED = "changeSampleCategoryEnabled";
+ public static final String PROPERTY_ADD_SAMPLE_CATEGORY_ENABLED = "addSampleCategoryEnabled";
+
public static final String PROPERTY_REMOVE_SUB_BATCH_ENABLED = "removeSubBatchEnabled";
public static final String PROPERTY_RENAME_BATCH_ENABLED = "renameBatchEnabled";
@@ -86,6 +88,13 @@
protected boolean changeSampleCategoryEnabled;
/**
+ * Can user add a/some missing sample category of the selected species batch ?
+ *
+ * @since 2.6
+ */
+ protected boolean addSampleCategoryEnabled;
+
+ /**
* Can user remove a selected species batch?
*
* @since 0.3
@@ -313,6 +322,15 @@
firePropertyChange(PROPERTY_CHANGE_SAMPLE_CATEGORY_ENABLED, null, changeSampleCategoryEnabled);
}
+ public boolean isAddSampleCategoryEnabled() {
+ return addSampleCategoryEnabled;
+ }
+
+ public void setAddSampleCategoryEnabled(boolean addSampleCategoryEnabled) {
+ this.addSampleCategoryEnabled = addSampleCategoryEnabled;
+ firePropertyChange(PROPERTY_ADD_SAMPLE_CATEGORY_ENABLED, null, addSampleCategoryEnabled);
+ }
+
public boolean isRemoveBatchEnabled() {
return removeBatchEnabled;
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/RemoveBenthosBatchAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/RemoveBenthosBatchAction.java 2013-09-26 11:07:00 UTC (rev 1231)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/RemoveBenthosBatchAction.java 2013-09-26 17:29:01 UTC (rev 1232)
@@ -97,6 +97,11 @@
if (selectedBatch.isBatchRoot()) {
// update speciesUsed
handler.removeFromSpeciesUsed(selectedBatch);
+ } else {
+
+ // remove from his parent
+ BenthosBatchRowModel parentBatch = selectedBatch.getParentBatch();
+ parentBatch.getChildBatch().remove(selectedBatch);
}
// collect of rows to remove from model
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/create/CreateBenthosBatchUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/create/CreateBenthosBatchUIHandler.java 2013-09-26 11:07:00 UTC (rev 1231)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/create/CreateBenthosBatchUIHandler.java 2013-09-26 17:29:01 UTC (rev 1232)
@@ -541,7 +541,8 @@
SplitBenthosBatchTableModel tableModel =
new SplitBenthosBatchTableModel(columnModel,
getModel(),
- editableCategoryValue);
+ editableCategoryValue,
+ false);
JXTable table = getTable();
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/split/SplitBenthosBatchRowModel.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/split/SplitBenthosBatchRowModel.java 2013-09-26 11:07:00 UTC (rev 1231)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/split/SplitBenthosBatchRowModel.java 2013-09-26 17:29:01 UTC (rev 1232)
@@ -51,6 +51,8 @@
public static final String PROPERTY_SELECTED = "selected";
+ public static final String PROPERTY_EDITABLE = "editable";
+
/**
* Delegate sample category which contains category value + weight.
*
@@ -58,8 +60,20 @@
*/
protected final SampleCategory<Serializable> category = SampleCategory.newSample(null);
+ /**
+ * Is row selected?
+ *
+ * @since 2.5
+ */
protected boolean selected;
+ /**
+ * Is row editable ? (in add mode incoming rows are all selected and not editable).
+ *
+ * @since 2.6
+ */
+ protected boolean editable;
+
protected static final Binder<SplitBenthosBatchRowModel, SplitBenthosBatchRowModel> fromBeanBinder =
BinderFactory.newBinder(SplitBenthosBatchRowModel.class,
SplitBenthosBatchRowModel.class);
@@ -122,6 +136,16 @@
firePropertyChange(PROPERTY_SELECTED, oldValue, selected);
}
+ public boolean isEditable() {
+ return editable;
+ }
+
+ public void setEditable(boolean editable) {
+ Object oldValue = isEditable();
+ this.editable = editable;
+ firePropertyChange(PROPERTY_EDITABLE, oldValue, editable);
+ }
+
@Override
protected SplitBenthosBatchRowModel newEntity() {
return new SplitBenthosBatchRowModel();
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/split/SplitBenthosBatchTableModel.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/split/SplitBenthosBatchTableModel.java 2013-09-26 11:07:00 UTC (rev 1231)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/split/SplitBenthosBatchTableModel.java 2013-09-26 17:29:01 UTC (rev 1232)
@@ -64,11 +64,20 @@
private final SelectedCategoryAble uiModel;
+ /**
+ * Is the table is in split mode?
+ *
+ * @since 2.6
+ */
+ private final boolean splitMode;
+
public SplitBenthosBatchTableModel(TableColumnModelExt columnModel,
SelectedCategoryAble uiModel,
- boolean createEmptyRowIsEmpty) {
+ boolean createEmptyRowIsEmpty,
+ boolean splitMode) {
super(columnModel, createEmptyRowIsEmpty, createEmptyRowIsEmpty);
this.uiModel = uiModel;
+ this.splitMode = splitMode;
setNoneEditableCols(READ_ONLY_CATEGORY_VALUE);
}
@@ -77,7 +86,23 @@
SplitBenthosBatchRowModel result = new SplitBenthosBatchRowModel();
result.setCategoryType(uiModel.getSelectedCategory());
result.setValid(false);
+ result.setEditable(true);
return result;
}
+ @Override
+ protected boolean isCellEditable(int rowIndex,
+ int columnIndex,
+ ColumnIdentifier<SplitBenthosBatchRowModel> propertyName) {
+
+ boolean result = super.isCellEditable(rowIndex,
+ columnIndex,
+ propertyName);
+ if (result && !splitMode) {
+ // if editable and on edit mode, use editable property on row
+ SplitBenthosBatchRowModel entry = getEntry(rowIndex);
+ result = entry.isEditable();
+ }
+ return result;
+ }
}
\ No newline at end of file
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/split/SplitBenthosBatchUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/split/SplitBenthosBatchUIHandler.java 2013-09-26 11:07:00 UTC (rev 1231)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/split/SplitBenthosBatchUIHandler.java 2013-09-26 17:29:01 UTC (rev 1232)
@@ -24,8 +24,10 @@
* #L%
*/
+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 fr.ifremer.tutti.persistence.entities.data.SampleCategory;
import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel;
import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModelEntry;
@@ -53,7 +55,9 @@
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
+import java.io.Serializable;
import java.util.List;
+import java.util.Map;
/**
* Handler of {@link SplitBenthosBatchUI}.
@@ -306,6 +310,61 @@
model.setBatch(batch);
}
+ public void editBatch(BenthosBatchRowModel batch,
+ int sampleCategoryId) {
+
+ Preconditions.checkNotNull(batch);
+ Preconditions.checkNotNull(sampleCategoryId);
+
+ List<BenthosBatchRowModel> rows = batch.getChildBatch();
+ Preconditions.checkNotNull(rows);
+
+ // get possible the last used
+ List<SampleCategoryModelEntry> categories = Lists.newArrayList();
+
+ // get sample category model
+ SampleCategoryModel sampleCategoryModel =
+ getModel().getSampleCategoryModel();
+
+ // set only the given category
+ SampleCategoryModelEntry selectedCategory =
+ sampleCategoryModel.getCategoryById(sampleCategoryId);
+ categories.add(selectedCategory);
+
+ SplitBenthosBatchUIModel model = getModel();
+
+ // connect model to validator
+ ui.getValidator().setBean(model);
+
+ model.setSampleWeight(null);
+ model.setCategory(categories);
+ model.setSelectedCategory(selectedCategory);
+
+ // keep batch (will be used to push back editing entry)
+ model.setBatch(batch);
+
+ // add existing rows
+ Map<Serializable, SplitBenthosBatchRowModel> rowsByValue = Maps.uniqueIndex(model.getRows(), new Function<SplitBenthosBatchRowModel, Serializable>() {
+ @Override
+ public Serializable apply(SplitBenthosBatchRowModel input) {
+ return input.getCategoryValue();
+ }
+ });
+ for (BenthosBatchRowModel row : rows) {
+
+ SampleCategory<?> sampleCategory = row.getSampleCategoryById(sampleCategoryId);
+ Serializable categoryValue = sampleCategory.getCategoryValue();
+ SplitBenthosBatchRowModel splitRow = rowsByValue.get(categoryValue);
+ splitRow.setWeight(sampleCategory.getCategoryWeight());
+ splitRow.setSelected(true);
+ splitRow.setEditable(false);
+ }
+
+ computeSampleWeight();
+
+ getTableModel().fireTableDataChanged();
+ }
+
public void save() {
if (log.isDebugEnabled()) {
@@ -315,10 +374,18 @@
EditCatchesUI parent = SwingUtil.getParentContainer(ui, EditCatchesUI.class);
SplitBenthosBatchUIModel model = getModel();
if (model.isValid()) {
- parent.getBenthosTabContent().getHandler().splitBatch(
- model.getSelectedCategory(),
- model.getRows(),
- model.getSampleWeight());
+ if (model.isSplitMode()) {
+ parent.getBenthosTabContent().getHandler().splitBatch(
+ model.getSelectedCategory(),
+ model.getRows(),
+ model.getSampleWeight());
+ } else {
+ parent.getBenthosTabContent().getHandler().addSampleCategoryBatch(
+ model.getBatch(),
+ model.getSelectedCategory(),
+ model.getRows(),
+ model.getSampleWeight());
+ }
}
// close dialog
@@ -398,7 +465,8 @@
SplitBenthosBatchTableModel tableModel =
new SplitBenthosBatchTableModel(columnModel,
getModel(),
- editableCategoryValue);
+ editableCategoryValue,
+ getModel().isSplitMode());
JXTable table = getTable();
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/split/SplitBenthosBatchUIModel.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/split/SplitBenthosBatchUIModel.java 2013-09-26 11:07:00 UTC (rev 1231)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/split/SplitBenthosBatchUIModel.java 2013-09-26 17:29:01 UTC (rev 1232)
@@ -52,6 +52,8 @@
public static final String PROPERTY_SAMPLE_WEIGHT = "sampleWeight";
+ private static final String PROPERTY_SPLIT_MODE = "splitMode";
+
/**
* Batch which fires the editor.
*
@@ -94,6 +96,12 @@
*/
protected final WeightUnit weightUnit;
+ /**
+ * Is ui in split mode ?
+ * @since 2.6
+ */
+ protected boolean splitMode = true;
+
public SplitBenthosBatchUIModel(WeightUnit weightUnit,
SampleCategoryModel sampleCategoryModel) {
super(BenthosBatchRowModel.class, null, null);
@@ -155,4 +163,14 @@
public SampleCategoryModel getSampleCategoryModel() {
return sampleCategoryModel;
}
+
+ public boolean isSplitMode() {
+ return splitMode;
+ }
+
+ public void setSplitMode(boolean splitMode) {
+ Object oldValue = isSplitMode();
+ this.splitMode = splitMode;
+ firePropertyChange(PROPERTY_SPLIT_MODE, oldValue,splitMode);
+ }
}
\ No newline at end of file
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/RemoveSpeciesBatchAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/RemoveSpeciesBatchAction.java 2013-09-26 11:07:00 UTC (rev 1231)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/RemoveSpeciesBatchAction.java 2013-09-26 17:29:01 UTC (rev 1232)
@@ -97,6 +97,11 @@
if (selectedBatch.isBatchRoot()) {
// update speciesUsed
handler.removeFromSpeciesUsed(selectedBatch);
+ } else {
+
+ // remove from his parent
+ SpeciesBatchRowModel parentBatch = selectedBatch.getParentBatch();
+ parentBatch.getChildBatch().remove(selectedBatch);
}
// collect of rows to remove from model
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchRowModel.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchRowModel.java 2013-09-26 11:07:00 UTC (rev 1231)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchRowModel.java 2013-09-26 17:29:01 UTC (rev 1232)
@@ -475,6 +475,12 @@
}
@Override
+ public SampleCategory<?> getSampleCategoryByIndex(int sampleCategoryIndex) {
+ SampleCategory<?> result = categories[sampleCategoryIndex];
+ return result;
+ }
+
+ @Override
public void setSampleCategoryValue(Integer sampleCategoryId, Serializable value) {
SampleCategory<?> sampleCategory =
getSampleCategoryById(sampleCategoryId);
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchTableModel.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchTableModel.java 2013-09-26 11:07:00 UTC (rev 1231)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchTableModel.java 2013-09-26 17:29:01 UTC (rev 1232)
@@ -306,12 +306,14 @@
return result;
}
- protected void updateShell(SpeciesBatchRowModel entry, int columnIndex) {
-
- Set<SpeciesBatchRowModel> shell = Sets.newHashSet();
- entry.collectShell(shell);
- shell.add(entry);
-
+ /**
+ * Update all the given cells for the given column.
+ *
+ * @param shell shell to update
+ * @param columnIndex the column index to update
+ * @since 2.6
+ */
+ public void updateShell(Set<SpeciesBatchRowModel> shell, int columnIndex) {
for (SpeciesBatchRowModel batchRowModel : shell) {
int currentRowIndex = getRowIndex(batchRowModel);
if (log.isDebugEnabled()) {
@@ -320,4 +322,19 @@
fireTableCellUpdated(currentRowIndex, columnIndex);
}
}
+
+ /**
+ * Update all the cells of the given row shell for a given column.
+ *
+ * @param entry the first row to update
+ * @param columnIndex the column index to update
+ * @since 2.6
+ */
+ protected void updateShell(SpeciesBatchRowModel entry, int columnIndex) {
+
+ Set<SpeciesBatchRowModel> shell = Sets.newHashSet();
+ entry.collectShell(shell);
+ shell.add(entry);
+ updateShell(shell, columnIndex);
+ }
}
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-09-26 11:07:00 UTC (rev 1231)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.css 2013-09-26 17:29:01 UTC (rev 1232)
@@ -28,7 +28,6 @@
bean: {model};
showReset: true;
useFloat: true;
- /*numberPattern: {DECIMAL3_PATTERN};*/
_selectOnFocus: {true};
}
@@ -37,8 +36,6 @@
showPopupButton: {handler.getConfig().isShowNumberEditorButton()};
showReset: true;
useFloat: true;
- /*numberPattern: {DECIMAL3_PATTERN};
- decimalNumber: 3;*/
computedDataColor: {handler.getConfig().getColorComputedWeights()};
}
@@ -171,6 +168,15 @@
_help: {"tutti.editSpeciesBatch.action.changeSampleCategory.help"};
}
+#addSampleCategoryMenu {
+ actionIcon: batch-split;
+ text: "tutti.editSpeciesBatch.action.addSampleCategory";
+ toolTipText: "tutti.editSpeciesBatch.action.addSampleCategory.tip";
+ i18nMnemonic: "tutti.editSpeciesBatch.action.addSampleCategory.mnemonic";
+ enabled: {model.isTableViewModeAll() && model.isAddSampleCategoryEnabled()};
+ _help: {"tutti.editSpeciesBatch.action.addSampleCategory.help"};
+}
+
#removeSpeciesBatchMenu {
actionIcon: batch-delete;
text: "tutti.editSpeciesBatch.action.removeBatch";
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.jaxx
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.jaxx 2013-09-26 11:07:00 UTC (rev 1231)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.jaxx 2013-09-26 17:29:01 UTC (rev 1232)
@@ -80,6 +80,8 @@
onActionPerformed='handler.splitBatch()'/>
<JMenuItem id='changeSampleCategoryMenu'
onActionPerformed='handler.changeBatchCategory()'/>
+ <JMenuItem id='addSampleCategoryMenu'
+ onActionPerformed='handler.addBatchCategory()'/>
<JMenuItem id='removeSpeciesBatchMenu'/>
<JMenuItem id='removeSpeciesSubBatchMenu'/>
<JMenuItem id='renameSpeciesBatchMenu'/>
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-09-26 11:07:00 UTC (rev 1231)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java 2013-09-26 17:29:01 UTC (rev 1232)
@@ -137,6 +137,13 @@
*/
protected final WeightUnit weightUnit;
+ /**
+ * id of the unsorted qualitative value to remove of V/HV universe.
+ *
+ * @since 2.6
+ */
+ protected final Integer qualitative_unsorted_id;
+
public SpeciesBatchUIHandler(EditCatchesUI parentUi,
SpeciesBatchUI ui) {
super(parentUi, ui,
@@ -149,6 +156,9 @@
SpeciesBatchRowModel.PROPERTY_FREQUENCY,
SpeciesBatchRowModel.PROPERTY_SPECIES_TO_CONFIRM);
+ qualitative_unsorted_id =
+ context.getPersistenceService().getEnumerationFile().QUALITATIVE_UNSORTED_ID;
+
weightUnit = getConfig().getSpeciesWeightUnit();
sampleCategoryModel = getDataContext().getSampleCategoryModel();
@@ -459,6 +469,7 @@
boolean enableRename = false;
boolean enableSplit = false;
boolean enableChangeSampleCategory = false;
+ boolean enableAddSampleCategory = false;
boolean enableRemove = false;
boolean enableRemoveSub = false;
boolean enableCreateMelag = false;
@@ -478,7 +489,6 @@
// can edit frequencies on a single selected leaf row
-
enableSplit = true;
// action with single selection
@@ -488,6 +498,7 @@
enableCreateMelag = selectedRowCount > 1;
enableEditFrequencies = selectedRowCount == 1;
enableChangeSampleCategory = selectedRowCount == 1 && tableModel.isCellEditable(rowIndex, columnIndex);
+ enableAddSampleCategory = selectedRowCount == 1 && tableModel.isCellEditable(rowIndex, columnIndex);
if (enableSplit) {
@@ -503,11 +514,44 @@
|| row.getComputedNumber() == 0);
}
+ boolean firstCategory = false;
+ Integer sampleCategoryId =
+ tableModel.getSampleCategoryId(columnIndex);
+
+ SampleCategoryModelEntry category = null;
+
+ List<CaracteristicQualitativeValue> available = null;
+
+ if (sampleCategoryId != null) {
+
+ // is first category ?
+ firstCategory = sampleCategoryModel.getFirstCategoryId().equals(sampleCategoryId);
+
+ // get category
+ category = sampleCategoryModel.getCategoryById(sampleCategoryId);
+
+ // get the first ancestor row using this category
+ SpeciesBatchRowModel firstAncestorRow = row.getFirstAncestor(sampleCategoryId);
+
+ // get all used values for this category
+ Set<Serializable> used = getSampleUsedValues(
+ firstAncestorRow, sampleCategoryId);
+
+ // get all possible values
+ available = Lists.newArrayList(category.getCaracteristic().getQualitativeValue());
+ available.removeAll(used);
+
+ if (firstCategory) {
+
+ // remove the unsorted qualitative value
+ TuttiEntities.removeQualitativeValue(available, qualitative_unsorted_id);
+ }
+ }
+
if (enableChangeSampleCategory) {
- // can change category if there is still a brother category free
- Integer sampleCategoryId =
- tableModel.getSampleCategoryId(columnIndex);
+ // can change category if on a sample column and
+ // there is still a brother category free
if (sampleCategoryId == null) {
@@ -515,35 +559,41 @@
enableChangeSampleCategory = false;
} else {
- // get category
- SampleCategoryModelEntry category =
- sampleCategoryModel.getCategoryById(sampleCategoryId);
+ if (category.getCaracteristic().isNumericType()) {
- // get the first ancestor row using this category
- SpeciesBatchRowModel firstAncestorRow =
- row.getFirstAncestor(sampleCategoryId);
+ // if number then can always change it
- // get all used values for this category
- Set<Serializable> used = getSampleUsedValues(
- firstAncestorRow, sampleCategoryId);
+ } else {
+ // action possible only if there is still some available values
+ enableChangeSampleCategory = CollectionUtils.isNotEmpty(available);
+ }
+ }
+ }
+
+ if (enableAddSampleCategory) {
+
+ // can change category if on a sample column and
+ // there is still a brother category free
+ // and sample category is not the first
+
+ if (sampleCategoryId == null || firstCategory) {
+
+ // not on a sample category column
+ // or using the first sample category (V/HV)
+ enableAddSampleCategory = false;
+ } else {
+
if (category.getCaracteristic().isNumericType()) {
// if number then can always change it
} else {
- // get all possible values
-
- List<CaracteristicQualitativeValue> available =
- Lists.newArrayList(category.getCaracteristic().getQualitativeValue());
- available.removeAll(used);
-
// action possible only if there is still some available values
- enableChangeSampleCategory = !available.isEmpty();
+ enableAddSampleCategory = CollectionUtils.isNotEmpty(available);
}
}
-
}
if (enableEditFrequencies) {
@@ -590,22 +640,24 @@
SpeciesBatchUIModel model = getModel();
model.setSplitBatchEnabled(enableSplit);
model.setChangeSampleCategoryEnabled(enableChangeSampleCategory);
+ model.setAddSampleCategoryEnabled(enableAddSampleCategory);
model.setRemoveBatchEnabled(enableRemove);
model.setRemoveSubBatchEnabled(enableRemoveSub);
model.setRenameBatchEnabled(enableRename);
model.setCreateMelagEnabled(enableCreateMelag);
model.setEditFrequenciesEnabled(enableEditFrequencies);
- if (log.isInfoEnabled()) {
+ if (log.isDebugEnabled()) {
StringBuilder builder = new StringBuilder("actions for (" + rowIndex + "," + columnIndex + "):");
builder.append("\nenableSplit: ").append(enableSplit);
builder.append("\nenableChangeSampleCategory: ").append(enableChangeSampleCategory);
+ builder.append("\nenableAddSampleCategory: ").append(enableAddSampleCategory);
builder.append("\nenableRemove: ").append(enableRemove);
builder.append("\nenableRemoveSub: ").append(enableRemoveSub);
builder.append("\nenableRename: ").append(enableRename);
builder.append("\nenableCreateMelag: ").append(enableCreateMelag);
builder.append("\nenableEditFrequencies: ").append(enableEditFrequencies);
- log.info(builder.toString());
+ log.debug(builder.toString());
}
}
@@ -887,6 +939,49 @@
}
}
+ public void addBatchCategory() {
+
+ // get table model
+ SpeciesBatchTableModel tableModel = getTableModel();
+
+ // get selected row
+ int rowIndex = getTable().getSelectedRow();
+ Preconditions.checkState(rowIndex != -1,
+ "Cant split batch if no batch selected");
+
+ // get selected column
+ int columnIndex = getTable().getSelectedColumn();
+ Preconditions.checkState(columnIndex != -1,
+ "Cant split batch if no batch selected");
+
+ // get selected row
+ SpeciesBatchRowModel selectedRow = tableModel.getEntry(rowIndex);
+
+ // get his sample category
+ Integer sampleCategoryId = tableModel.getSampleCategoryId(columnIndex);
+
+ // get the first ancestor row using this category
+ SpeciesBatchRowModel firstAncestorRow =
+ selectedRow.getFirstAncestor(sampleCategoryId);
+
+ // get his parent (the one we will edit)
+ SpeciesBatchRowModel parentBatch = firstAncestorRow.getParentBatch();
+
+ if (log.isDebugEnabled()) {
+ log.debug("Open addChangeCategory batch ui for row [" + rowIndex + "] and category " + sampleCategoryId);
+ }
+
+ EditCatchesUI parent =
+ SwingUtil.getParentContainer(ui, EditCatchesUI.class);
+ SplitSpeciesBatchUI splitBatchEditor =
+ parent.getSpeciesTabAddSampleCategoryBatch();
+
+ parent.getHandler().addSampleCategorySpeciesBatch(
+ parentBatch,
+ splitBatchEditor,
+ sampleCategoryId);
+ }
+
public void changeBatchCategory() {
// get table model
@@ -958,6 +1053,16 @@
List<CaracteristicQualitativeValue> availableValues =
Lists.newArrayList(caracteristic.getQualitativeValue());
+
+ boolean firstCategory =
+ sampleCategoryModel.getFirstCategoryId().equals(sampleCategoryId);
+
+ if (firstCategory) {
+
+ // remove the unsorted qualitative value
+ TuttiEntities.removeQualitativeValue(availableValues, qualitative_unsorted_id);
+ }
+
availableValues.removeAll(usedValues);
JComboBox editor = new JComboBox();
@@ -1047,6 +1152,69 @@
model.setLeafNumber(model.getLeafNumber() + newBatches.size() - 1);
}
+ public void addSampleCategoryBatch(SpeciesBatchRowModel parentBatch,
+ SampleCategoryModelEntry sampleCategoryDef,
+ List<SplitSpeciesBatchRowModel> rows,
+ Float totalRowWeight) {
+
+ // get table model
+ SpeciesBatchTableModel tableModel = getTableModel();
+
+ // get insert row index
+ int insertRow = tableModel.getRowIndex(parentBatch) + parentBatch.getChildBatch().size();
+
+ // Create rows in batch table model
+ List<SpeciesBatchRowModel> newBatches = Lists.newArrayList();
+ for (SplitSpeciesBatchRowModel row : rows) {
+ if (row.isEditable() && row.isValid()) {
+
+ // can keep this row
+ SpeciesBatchRowModel newBatch = tableModel.createNewRow();
+
+ loadBatchRow(parentBatch,
+ newBatch,
+ sampleCategoryDef.getCategoryId(),
+ row.getCategoryValue(),
+ row.getWeight(),
+ null);
+
+ recomputeRowValidState(newBatch);
+ newBatches.add(newBatch);
+
+ tableModel.addNewRow(++insertRow, newBatch);
+ }
+ }
+
+ // add new batches to his parent
+ List<SpeciesBatchRowModel> childBatch = parentBatch.getChildBatch();
+ childBatch.addAll(newBatches);
+ parentBatch.setChildBatch(childBatch);
+
+ // re compute the sub sample property for all childs
+ int categoryIndex = sampleCategoryModel.indexOf(sampleCategoryDef);
+
+ Float parentWeight = parentBatch.getSampleCategoryByIndex(categoryIndex - 1).getNotNullWeight();
+ boolean subSample = parentWeight != null && totalRowWeight != null
+ && parentWeight > totalRowWeight;
+
+ Set<SpeciesBatchRowModel> shell = Sets.newHashSet();
+ parentBatch.collectShell(shell);
+
+ for (SpeciesBatchRowModel rowModel : shell) {
+ rowModel.getSampleCategoryByIndex(categoryIndex).setSubSample(subSample);
+ }
+
+ // save new batches
+ saveRows(newBatches);
+
+ // update model number of leaf
+ SpeciesBatchUIModel model = getModel();
+ model.setLeafNumber(model.getLeafNumber() + newBatches.size() - 1);
+
+ // update columns for the parent shell
+ tableModel.updateShell(shell, getTable().getSelectedColumn());
+ }
+
public void updateTotalFromFrequencies(SpeciesBatchRowModel row) {
List<SpeciesFrequencyRowModel> frequency = row.getFrequency();
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-09-26 11:07:00 UTC (rev 1231)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIModel.java 2013-09-26 17:29:01 UTC (rev 1232)
@@ -49,6 +49,8 @@
public static final String PROPERTY_CHANGE_SAMPLE_CATEGORY_ENABLED = "changeSampleCategoryEnabled";
+ public static final String PROPERTY_ADD_SAMPLE_CATEGORY_ENABLED = "addSampleCategoryEnabled";
+
public static final String PROPERTY_REMOVE_SUB_BATCH_ENABLED = "removeSubBatchEnabled";
public static final String PROPERTY_RENAME_BATCH_ENABLED = "renameBatchEnabled";
@@ -86,6 +88,13 @@
protected boolean changeSampleCategoryEnabled;
/**
+ * Can user add a/some missing sample category of the selected species batch ?
+ *
+ * @since 2.6
+ */
+ protected boolean addSampleCategoryEnabled;
+
+ /**
* Can user remove a selected species batch?
*
* @since 0.3
@@ -295,6 +304,15 @@
firePropertyChange(PROPERTY_CHANGE_SAMPLE_CATEGORY_ENABLED, null, changeSampleCategoryEnabled);
}
+ public boolean isAddSampleCategoryEnabled() {
+ return addSampleCategoryEnabled;
+ }
+
+ public void setAddSampleCategoryEnabled(boolean addSampleCategoryEnabled) {
+ this.addSampleCategoryEnabled = addSampleCategoryEnabled;
+ firePropertyChange(PROPERTY_ADD_SAMPLE_CATEGORY_ENABLED, null, addSampleCategoryEnabled);
+ }
+
public boolean isRemoveBatchEnabled() {
return removeBatchEnabled;
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/create/CreateSpeciesBatchUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/create/CreateSpeciesBatchUIHandler.java 2013-09-26 11:07:00 UTC (rev 1231)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/create/CreateSpeciesBatchUIHandler.java 2013-09-26 17:29:01 UTC (rev 1232)
@@ -549,7 +549,8 @@
SplitSpeciesBatchTableModel tableModel =
new SplitSpeciesBatchTableModel(columnModel,
getModel(),
- editableCategoryValue);
+ editableCategoryValue,
+ false);
JXTable table = getTable();
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchRowModel.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchRowModel.java 2013-09-26 11:07:00 UTC (rev 1231)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchRowModel.java 2013-09-26 17:29:01 UTC (rev 1232)
@@ -48,6 +48,8 @@
public static final String PROPERTY_SELECTED = "selected";
+ public static final String PROPERTY_EDITABLE = "editable";
+
/**
* Delegate sample category which contains category value + weight.
*
@@ -55,8 +57,20 @@
*/
protected final SampleCategory<Serializable> category = SampleCategory.newSample(null);
+ /**
+ * Is row selected?
+ *
+ * @since 2.5
+ */
protected boolean selected;
+ /**
+ * Is row editable ? (in add mode incoming rows are all selected and not editable).
+ *
+ * @since 2.6
+ */
+ protected boolean editable;
+
public SplitSpeciesBatchRowModel() {
super(SplitSpeciesBatchRowModel.class, null, null);
}
@@ -111,6 +125,16 @@
firePropertyChange(PROPERTY_SELECTED, oldValue, selected);
}
+ public boolean isEditable() {
+ return editable;
+ }
+
+ public void setEditable(boolean editable) {
+ Object oldValue = isEditable();
+ this.editable = editable;
+ firePropertyChange(PROPERTY_EDITABLE, oldValue, editable);
+ }
+
@Override
protected SplitSpeciesBatchRowModel newEntity() {
return new SplitSpeciesBatchRowModel();
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchTableModel.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchTableModel.java 2013-09-26 11:07:00 UTC (rev 1231)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchTableModel.java 2013-09-26 17:29:01 UTC (rev 1232)
@@ -64,11 +64,20 @@
private final SelectedCategoryAble uiModel;
+ /**
+ * Is the table is in split mode?
+ *
+ * @since 2.6
+ */
+ private final boolean splitMode;
+
public SplitSpeciesBatchTableModel(TableColumnModelExt columnModel,
SelectedCategoryAble uiModel,
- boolean createEmptyRowIsEmpty) {
+ boolean createEmptyRowIsEmpty,
+ boolean splitMode) {
super(columnModel, createEmptyRowIsEmpty, createEmptyRowIsEmpty);
this.uiModel = uiModel;
+ this.splitMode = splitMode;
setNoneEditableCols(READ_ONLY_CATEGORY_VALUE);
}
@@ -77,7 +86,24 @@
SplitSpeciesBatchRowModel result = new SplitSpeciesBatchRowModel();
result.setCategoryType(uiModel.getSelectedCategory());
result.setValid(false);
+ result.setEditable(true);
return result;
}
+ @Override
+ protected boolean isCellEditable(int rowIndex,
+ int columnIndex,
+ ColumnIdentifier<SplitSpeciesBatchRowModel> propertyName) {
+
+ boolean result = super.isCellEditable(rowIndex,
+ columnIndex,
+ propertyName);
+ if (result && !splitMode) {
+ // if editable and on edit mode, use editable property on row
+ SplitSpeciesBatchRowModel entry = getEntry(rowIndex);
+ result = entry.isEditable();
+ }
+ return result;
+ }
+
}
\ No newline at end of file
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-09-26 11:07:00 UTC (rev 1231)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUIHandler.java 2013-09-26 17:29:01 UTC (rev 1232)
@@ -24,8 +24,10 @@
* #L%
*/
+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 fr.ifremer.tutti.persistence.entities.data.SampleCategory;
import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel;
import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModelEntry;
@@ -53,7 +55,9 @@
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
+import java.io.Serializable;
import java.util.List;
+import java.util.Map;
/**
* Handler of {@link SplitSpeciesBatchUI}.
@@ -307,6 +311,61 @@
model.setBatch(batch);
}
+ public void editBatch(SpeciesBatchRowModel batch,
+ int sampleCategoryId) {
+
+ Preconditions.checkNotNull(batch);
+ Preconditions.checkNotNull(sampleCategoryId);
+
+ List<SpeciesBatchRowModel> rows = batch.getChildBatch();
+ Preconditions.checkNotNull(rows);
+
+ // get possible the last used
+ List<SampleCategoryModelEntry> categories = Lists.newArrayList();
+
+ // get sample category model
+ SampleCategoryModel sampleCategoryModel =
+ getModel().getSampleCategoryModel();
+
+ // set only the given category
+ SampleCategoryModelEntry selectedCategory =
+ sampleCategoryModel.getCategoryById(sampleCategoryId);
+ categories.add(selectedCategory);
+
+ SplitSpeciesBatchUIModel model = getModel();
+
+ // connect model to validator
+ ui.getValidator().setBean(model);
+
+ model.setSampleWeight(null);
+ model.setCategory(categories);
+ model.setSelectedCategory(selectedCategory);
+
+ // keep batch (will be used to push back editing entry)
+ model.setBatch(batch);
+
+ // add existing rows
+ Map<Serializable, SplitSpeciesBatchRowModel> rowsByValue = Maps.uniqueIndex(model.getRows(), new Function<SplitSpeciesBatchRowModel, Serializable>() {
+ @Override
+ public Serializable apply(SplitSpeciesBatchRowModel input) {
+ return input.getCategoryValue();
+ }
+ });
+ for (SpeciesBatchRowModel row : rows) {
+
+ SampleCategory<?> sampleCategory = row.getSampleCategoryById(sampleCategoryId);
+ Serializable categoryValue = sampleCategory.getCategoryValue();
+ SplitSpeciesBatchRowModel splitRow = rowsByValue.get(categoryValue);
+ splitRow.setWeight(sampleCategory.getCategoryWeight());
+ splitRow.setSelected(true);
+ splitRow.setEditable(false);
+ }
+
+ computeSampleWeight();
+
+ getTableModel().fireTableDataChanged();
+ }
+
public void save() {
if (log.isDebugEnabled()) {
@@ -316,10 +375,18 @@
EditCatchesUI parent = SwingUtil.getParentContainer(ui, EditCatchesUI.class);
SplitSpeciesBatchUIModel model = getModel();
if (model.isValid()) {
- parent.getSpeciesTabContent().getHandler().splitBatch(
- model.getSelectedCategory(),
- model.getRows(),
- model.getSampleWeight());
+ if (model.isSplitMode()) {
+ parent.getSpeciesTabContent().getHandler().splitBatch(
+ model.getSelectedCategory(),
+ model.getRows(),
+ model.getSampleWeight());
+ } else {
+ parent.getSpeciesTabContent().getHandler().addSampleCategoryBatch(
+ model.getBatch(),
+ model.getSelectedCategory(),
+ model.getRows(),
+ model.getSampleWeight());
+ }
}
// close dialog
@@ -401,7 +468,8 @@
SplitSpeciesBatchTableModel tableModel =
new SplitSpeciesBatchTableModel(columnModel,
getModel(),
- editableCategoryValue);
+ editableCategoryValue,
+ getModel().isSplitMode());
JXTable table = getTable();
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUIModel.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUIModel.java 2013-09-26 11:07:00 UTC (rev 1231)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUIModel.java 2013-09-26 17:29:01 UTC (rev 1232)
@@ -52,6 +52,8 @@
public static final String PROPERTY_SAMPLE_WEIGHT = "sampleWeight";
+ public static final String PROPERTY_SPLIT_MODE = "splitMode";
+
/**
* Batch which fires the editor.
*
@@ -94,6 +96,12 @@
*/
protected final WeightUnit weightUnit;
+ /**
+ * Is ui in split mode ?
+ * @since 2.6
+ */
+ protected boolean splitMode = true;
+
public SplitSpeciesBatchUIModel(WeightUnit weightUnit,
SampleCategoryModel sampleCategoryModel) {
super(SpeciesBatchRowModel.class, null, null);
@@ -154,4 +162,14 @@
public SampleCategoryModel getSampleCategoryModel() {
return sampleCategoryModel;
}
+
+ public boolean isSplitMode() {
+ return splitMode;
+ }
+
+ public void setSplitMode(boolean splitMode) {
+ Object oldValue = isSplitMode();
+ this.splitMode = splitMode;
+ firePropertyChange(PROPERTY_SPLIT_MODE, oldValue,splitMode);
+ }
}
\ No newline at end of file
Modified: trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties
===================================================================
--- trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-09-26 11:07:00 UTC (rev 1231)
+++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-09-26 17:29:01 UTC (rev 1232)
@@ -14,6 +14,8 @@
tutti.about.update.content=
tutti.about.update.title=
tutti.action.create.error=
+tutti.addSampleCategoryBenthosBatch.title=
+tutti.addSampleCategorySpeciesBatch.title=
tutti.applicationUpdater.prepareFirstDB.copyDirectory.error=
tutti.applicationUpdater.prepareFirstDB.deleteDirectory.error=
tutti.applicationUpdater.startUpdate.db.installation=
@@ -362,6 +364,9 @@
tutti.editAccidentalBatch.table.header.species.tip=
tutti.editAccidentalBatch.table.header.weight=
tutti.editAccidentalBatch.table.header.weight.tip=
+tutti.editBenthosBatch.action.addSampleCategory=
+tutti.editBenthosBatch.action.addSampleCategory.mnemonic=
+tutti.editBenthosBatch.action.addSampleCategory.tip=
tutti.editBenthosBatch.action.changeSampleCategory=
tutti.editBenthosBatch.action.changeSampleCategory.mnemonic=
tutti.editBenthosBatch.action.changeSampleCategory.tip=
@@ -883,6 +888,9 @@
tutti.editSampleCategoryModel.table.header.label=
tutti.editSampleCategoryModel.table.header.label.tip=
tutti.editSampleCategoryModel.title=
+tutti.editSpeciesBatch.action.addSampleCategory=
+tutti.editSpeciesBatch.action.addSampleCategory.mnemonic=
+tutti.editSpeciesBatch.action.addSampleCategory.tip=
tutti.editSpeciesBatch.action.changeSampleCategory=
tutti.editSpeciesBatch.action.changeSampleCategory.mnemonic=
tutti.editSpeciesBatch.action.changeSampleCategory.tip=
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-09-26 11:07:00 UTC (rev 1231)
+++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-09-26 17:29:01 UTC (rev 1232)
@@ -14,6 +14,8 @@
tutti.about.update.content=<h2>Mise à jour de Tutti</h2><p>Fichier des mises à jour \: <ul><li>Applicatif \: <a href\="%1$s">%1$s</a></li><li>Base de données \: <a href\="%2$s">%2$s</a></li></ul></p><br/><hr/><br/><table><CAPTION><EM>Mises à jour des modules</EM></CAPTION><tr><th>Module</th><th>Version installée</th><th>Dernière version</th><th></th></tr>%3$s</table>
tutti.about.update.title=Mise à jour Tutti
tutti.action.create.error=Erreur à l'instanciation de l'action %s
+tutti.addSampleCategoryBenthosBatch.title=Catégorisation du lot (ajout)
+tutti.addSampleCategorySpeciesBatch.title=Catégorisation du lot (ajout)
tutti.applicationUpdater.prepareFirstDB.copyDirectory.error=Erreur lors de la copie du contenu du dossier %1s vers %2s
tutti.applicationUpdater.prepareFirstDB.deleteDirectory.error=Erreur lors de la suppression du dossier %s
tutti.applicationUpdater.startUpdate.db.installation=Téléchargement et installation de la base (version %s)
@@ -361,6 +363,9 @@
tutti.editAccidentalBatch.table.header.species.tip=Espèce
tutti.editAccidentalBatch.table.header.weight=Poids observé
tutti.editAccidentalBatch.table.header.weight.tip=Poids observé
+tutti.editBenthosBatch.action.addSampleCategory=Ajouter une catégorie
+tutti.editBenthosBatch.action.addSampleCategory.mnemonic=A
+tutti.editBenthosBatch.action.addSampleCategory.tip=Ajouter une catégorie manquante
tutti.editBenthosBatch.action.changeSampleCategory=Modifier la catégorie
tutti.editBenthosBatch.action.changeSampleCategory.mnemonic=M
tutti.editBenthosBatch.action.changeSampleCategory.tip=Modifier la catégorie de la cellule sélectionnée
@@ -884,6 +889,9 @@
tutti.editSampleCategoryModel.table.header.label=Label
tutti.editSampleCategoryModel.table.header.label.tip=Label de la catéogire (sera utilisée dans les entêtes de tableau)
tutti.editSampleCategoryModel.title=Configurer les catégorisations
+tutti.editSpeciesBatch.action.addSampleCategory=Ajouter une catégorie
+tutti.editSpeciesBatch.action.addSampleCategory.mnemonic=A
+tutti.editSpeciesBatch.action.addSampleCategory.tip=Ajouter une catégorie manquante
tutti.editSpeciesBatch.action.changeSampleCategory=Modifier la catégorie
tutti.editSpeciesBatch.action.changeSampleCategory.mnemonic=M
tutti.editSpeciesBatch.action.changeSampleCategory.tip=Modifier la catégorie de la cellule sélectionnée
1
0
r1231 - trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table
by tchemit@users.forge.codelutin.com 26 Sep '13
by tchemit@users.forge.codelutin.com 26 Sep '13
26 Sep '13
Author: tchemit
Date: 2013-09-26 13:07:00 +0200 (Thu, 26 Sep 2013)
New Revision: 1231
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1231
Log:
fixes #3340: [CAPTURE] Mauvais enregistrement de la valeur "A Confirmer" dans les onglets Esp?\195?\169ces et Benthos
Modified:
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableUIHandler.java
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableUIHandler.java 2013-09-26 07:38:06 UTC (rev 1230)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableUIHandler.java 2013-09-26 11:07:00 UTC (rev 1231)
@@ -347,37 +347,46 @@
@Override
public void valueChanged(ListSelectionEvent e) {
- if (!e.getValueIsAdjusting()) {
- ListSelectionModel source = (ListSelectionModel) e.getSource();
+ if (log.isDebugEnabled()) {
+ log.debug("Selection changed: " + e);
+ }
+ // need this for the first modification when no selection,
+ // otherwise monitor is set after the first alter, so won't be
+ // save directly...
+ //if (!e.getValueIsAdjusting()) {
+ ListSelectionModel source = (ListSelectionModel) e.getSource();
- int oldRowIndex = selectedRowIndex;
- R oldRow = rowMonitor.getBean();
+ int oldRowIndex = selectedRowIndex;
+ int newRowIndex = source.getLeadSelectionIndex();
+ if (oldRowIndex == newRowIndex) {
+ return;
+ }
+ R oldRow = rowMonitor.getBean();
- int newRowIndex = source.getLeadSelectionIndex();
- R newRow;
+ R newRow;
- if (source.isSelectionEmpty()) {
+ if (source.isSelectionEmpty()) {
- newRow = null;
- } else {
- newRow = getTableModel().getEntry(newRowIndex);
- }
+ newRow = null;
+ } else {
+ newRow = getTableModel().getEntry(newRowIndex);
+ }
- // save selected entry if required
+ // save selected entry if required
// saveSelectedRowIfNeeded();
- if (log.isDebugEnabled()) {
- log.debug("Will monitor entry: " + newRow);
- }
- rowMonitor.setBean(newRow);
+ if (log.isDebugEnabled()) {
+ log.debug("Will monitor entry: " + newRow);
+ }
+ rowMonitor.setBean(newRow);
- selectedRowIndex = newRowIndex;
+ selectedRowIndex = newRowIndex;
- onAfterSelectedRowChanged(oldRowIndex,
- oldRow,
- selectedRowIndex,
- rowMonitor.getBean());
- }
+ onAfterSelectedRowChanged(oldRowIndex,
+ oldRow,
+ selectedRowIndex,
+ rowMonitor.getBean());
+ //}
}
};
1
0
r1230 - in trunk: tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/create tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol tutti-ui-swing/src/main/resources/i18n
by tchemit@users.forge.codelutin.com 26 Sep '13
by tchemit@users.forge.codelutin.com 26 Sep '13
26 Sep '13
Author: tchemit
Date: 2013-09-26 09:38:06 +0200 (Thu, 26 Sep 2013)
New Revision: 1230
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1230
Log:
fixes #3324: [CAPTURE] la cat?\195?\169gorisation propos?\195?\169e ?\195?\160 la cr?\195?\169ation d'un lot ne tient pas compte du protocole
clean db cache at application starts to avoid some troubles!!!
Modified:
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/create/CreateSpeciesBatchUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesTableModel.java
trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties
trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java 2013-09-26 06:20:09 UTC (rev 1229)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java 2013-09-26 07:38:06 UTC (rev 1230)
@@ -63,7 +63,7 @@
import static org.nuiton.i18n.I18n._;
/**
- * Helper classaround {@link TuttiProtocol}.
+ * Helper class around {@link TuttiProtocol}.
*
* @author tchemit <chemit(a)codelutin.com>
* @since 1.0
@@ -102,6 +102,8 @@
// transform String to Integer...
+ Integer sampleCategoryIdToRemove = enumeration.PMFM_ID_SORTED_UNSORTED;
+
if (!result.isBenthosEmpty()) {
for (SpeciesProtocol speciesProtocol : result.getBenthos()) {
List mandatorySampleCategoryId = speciesProtocol.getMandatorySampleCategoryId();
@@ -109,6 +111,7 @@
for (Object o : mandatorySampleCategoryId) {
mandatorySampleCategoryIdInteger.add(Integer.valueOf(o.toString()));
}
+ mandatorySampleCategoryIdInteger.remove(sampleCategoryIdToRemove);
speciesProtocol.setMandatorySampleCategoryId(mandatorySampleCategoryIdInteger);
}
@@ -120,6 +123,7 @@
for (Object o : mandatorySampleCategoryId) {
mandatorySampleCategoryIdInteger.add(Integer.valueOf(o.toString()));
}
+ mandatorySampleCategoryIdInteger.remove(sampleCategoryIdToRemove);
speciesProtocol.setMandatorySampleCategoryId(mandatorySampleCategoryIdInteger);
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java 2013-09-26 06:20:09 UTC (rev 1229)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java 2013-09-26 07:38:06 UTC (rev 1230)
@@ -344,8 +344,21 @@
}
}));
+ //--------------------------------------------------------------------//
+ // init db configuration
+ //--------------------------------------------------------------------//
+
config.getServiceConfig().getPersistenceConfig().initConfig(getResourceLoader());
+ // clean db cache (avoid a lots of headache :(
+ File cacheDirectory = config.getServiceConfig().getPersistenceConfig().getCacheDirectory();
+ if (cacheDirectory.exists()) {
+ // clean cache directory (fix soem headaches...)
+ TuttiIOUtil.cleanDirectory(
+ cacheDirectory,
+ _("tutti.db.deleteCache.error", cacheDirectory));
+ }
+
//--------------------------------------------------------------------//
// init i18n
//--------------------------------------------------------------------//
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/create/CreateSpeciesBatchUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/create/CreateSpeciesBatchUIHandler.java 2013-09-26 06:20:09 UTC (rev 1229)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/create/CreateSpeciesBatchUIHandler.java 2013-09-26 07:38:06 UTC (rev 1230)
@@ -282,16 +282,24 @@
if (getDataContext().isProtocolFilled()) {
+ if (log.isInfoEnabled()) {
+ log.info("Use protocol to find first category");
+ }
// try to find the first category from protocol
TuttiProtocol protocol = getDataContext().getProtocol();
SpeciesProtocol speciesProtocol = TuttiProtocols.getSpeciesProtocol(protocol, newValue);
if (speciesProtocol != null) {
+ if (log.isInfoEnabled()) {
+ log.info("Use protocol species to find first category: " + speciesProtocol.getMandatorySampleCategoryId());
+ }
+
// species defined in protocol
- if (speciesProtocol.sizeMandatorySampleCategoryId() > 1) {
+ if (!speciesProtocol.isMandatorySampleCategoryIdEmpty()) {
- // use the second category (the first one is V/HV)
- Integer categoryId = speciesProtocol.getMandatorySampleCategoryId().get(1);
+ // use the first category
+ Integer categoryId = speciesProtocol.getMandatorySampleCategoryId().get(0);
+
selectedCategory = sampleCategoryModel.getCategoryById(categoryId);
if (log.isInfoEnabled()) {
log.info("Use category from protocol: " + categoryId + " :: " + selectedCategory);
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-09-26 06:20:09 UTC (rev 1229)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesTableModel.java 2013-09-26 07:38:06 UTC (rev 1230)
@@ -74,7 +74,8 @@
private static final long serialVersionUID = 1L;
- public EditProtocolSpeciesTableModel(SampleCategoryModel sampleCategoryModel, TableColumnModelExt columnModel) {
+ public EditProtocolSpeciesTableModel(SampleCategoryModel sampleCategoryModel,
+ TableColumnModelExt columnModel) {
super(columnModel, false, false);
this.sampleCategoryModel = sampleCategoryModel;
setNoneEditableCols(SPECIES_ID);
@@ -85,7 +86,8 @@
List<Integer> mandatoryIds =
Lists.newArrayList(sampleCategoryModel.getSamplingOrder());
-
+ // always remove the first category (V/HV)
+ mandatoryIds.remove(0);
result.setMandatorySampleCategoryId(mandatoryIds);
result.setWeightEnabled(true);
Modified: trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties
===================================================================
--- trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-09-26 06:20:09 UTC (rev 1229)
+++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-09-26 07:38:06 UTC (rev 1230)
@@ -268,6 +268,7 @@
tutti.createSpeciesMelag.error.title=
tutti.createSpeciesMelag.message=
tutti.createSpeciesMelag.title=
+tutti.db.deleteCache.error=
tutti.dbMabager.title=
tutti.dbManager.action.chooseDbBackupFile=
tutti.dbManager.action.chooseDbExportFile=
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-09-26 06:20:09 UTC (rev 1229)
+++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-09-26 07:38:06 UTC (rev 1230)
@@ -267,6 +267,7 @@
tutti.createSpeciesMelag.error.title=Erreur
tutti.createSpeciesMelag.message=Combien pesait le MELAG (mélange) (%s) ?
tutti.createSpeciesMelag.title=Poids du MELAG (mélange) (%s)
+tutti.db.deleteCache.error=Erreur à la suppression du cache de base
tutti.dbMabager.title=Gérer les bases de données
tutti.dbManager.action.chooseDbBackupFile=Sauvegarder la base de données
tutti.dbManager.action.chooseDbExportFile=Exporter la base de données
1
0
r1229 - in trunk/tutti-ui-swing/src/main: java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency java/fr/ifremer/tutti/ui/swing/content/operation/catches/species java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency resources/i18n
by tchemit@users.forge.codelutin.com 26 Sep '13
by tchemit@users.forge.codelutin.com 26 Sep '13
26 Sep '13
Author: tchemit
Date: 2013-09-26 08:20:09 +0200 (Thu, 26 Sep 2013)
New Revision: 1229
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1229
Log:
fixes #3360: [MENSURATION] Mauvais rafraichissement des valeurs dans le tableau des esp?\195?\168ces
fixes #3329: [MENSURATION] - Renseigner le champ "Type de mesure" ?\195?\160 la saisie des mensuration avec la valeur du lot fr?\195?\168re
Modified:
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchTableModel.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyCellComponent.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchTableModel.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyCellComponent.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/resources/i18n/tutti-ui-swing_en_GB.properties
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/benthos/BenthosBatchTableModel.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchTableModel.java 2013-09-25 17:12:02 UTC (rev 1228)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchTableModel.java 2013-09-26 06:20:09 UTC (rev 1229)
@@ -39,6 +39,7 @@
import javax.swing.table.TableColumn;
import java.io.Serializable;
import java.util.Enumeration;
+import java.util.List;
import java.util.Set;
import static org.nuiton.i18n.I18n.n_;
@@ -286,6 +287,26 @@
updateShell(row, columnIndex);
}
+ /**
+ * Return previous sibling row, or {@code null} if not exist.
+ *
+ * @param row where to start
+ * @return the previous sibling row, or {@code null} if not exist.
+ * @since 2.6
+ */
+ public BenthosBatchRowModel getPreviousSibling(BenthosBatchRowModel row) {
+ BenthosBatchRowModel result = null;
+ BenthosBatchRowModel parentBatch = row.getParentBatch();
+ if (parentBatch != null) {
+ List<BenthosBatchRowModel> childBatch = parentBatch.getChildBatch();
+ int i = childBatch.indexOf(row);
+ if (i > 0) {
+ result = childBatch.get(i - 1);
+ }
+ }
+ return result;
+ }
+
protected void updateShell(BenthosBatchRowModel entry, int columnIndex) {
Set<BenthosBatchRowModel> shell = Sets.newHashSet();
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyCellComponent.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyCellComponent.java 2013-09-25 17:12:02 UTC (rev 1228)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyCellComponent.java 2013-09-26 06:20:09 UTC (rev 1229)
@@ -123,6 +123,8 @@
protected Integer columnIndex;
+ protected BenthosBatchRowModel previousSiblingRow;
+
public FrequencyCellEditor(BenthosBatchUI ui, Color computedDataColor) {
this.ui = ui;
component = new BenthosFrequencyCellComponent(computedDataColor);
@@ -155,6 +157,10 @@
return nextEditableRowIndex;
}
+ public BenthosBatchRowModel getPreviousSiblingRow() {
+ return previousSiblingRow;
+ }
+
public void startEdit() {
Preconditions.checkNotNull(tableModel, "No table model assigned.");
@@ -164,9 +170,13 @@
nextEditableRowIndex =
tableModel.getNextEditableFrequencyRow(rowIndex + 1);
+ // compute the previous sibling row
+ previousSiblingRow = tableModel.getPreviousSibling(editRow);
+
if (log.isDebugEnabled()) {
log.debug("Will edit frequencies for row: " + rowIndex +
- ", nextEditableRow: " + nextEditableRowIndex);
+ ", nextEditableRow: " + nextEditableRowIndex +
+ ", previous siblingRow: " + previousSiblingRow);
}
EditCatchesUI parent =
@@ -226,14 +236,22 @@
} else {
+ // keep next cell to edit
+ int r = rowIndex;
+ int nextR = nextEditableRowIndex;
+ int c = columnIndex;
+
+ // stop edition of this row
+ stopCellEditing();
+
// use now the next row data
- rowIndex = nextEditableRowIndex;
+ rowIndex = nextR;
// load the row
editRow = tableModel.getEntry(rowIndex);
- // will save the row in the species row
- AbstractSelectTableAction.doSelectCell(table, rowIndex, columnIndex);
+ // will save the previous row in the species row
+ AbstractSelectTableAction.doSelectCell(table, rowIndex, c);
// start edit
startEdit();
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyUIHandler.java 2013-09-25 17:12:02 UTC (rev 1228)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyUIHandler.java 2013-09-26 06:20:09 UTC (rev 1229)
@@ -549,6 +549,31 @@
}
}
+ BenthosBatchRowModel previousSiblingRow =
+ frequencyEditor.getPreviousSiblingRow();
+
+ if (lengthStepCaracteristic == null && previousSiblingRow != null) {
+
+ // try to get it from his previous brother row
+ List<BenthosFrequencyRowModel> previousFrequency =
+ previousSiblingRow.getFrequency();
+
+ if (CollectionUtils.isNotEmpty(previousFrequency)) {
+
+ // use the first frequency length step caracteristic / step
+ BenthosFrequencyRowModel rowModel = previousFrequency.get(0);
+ lengthStepCaracteristic =
+ rowModel.getLengthStepCaracteristic();
+ lengthStep = rowModel.getLengthStep();
+ if (log.isInfoEnabled()) {
+ log.info("Use previous sibling existing lengthStep " +
+ "caracteristic / step " +
+ decorate(lengthStepCaracteristic) + " / " +
+ lengthStep);
+ }
+ }
+ }
+
if (lengthStepCaracteristic == null && protocol != null) {
Species species = speciesBatch.getSpecies();
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchTableModel.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchTableModel.java 2013-09-25 17:12:02 UTC (rev 1228)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchTableModel.java 2013-09-26 06:20:09 UTC (rev 1229)
@@ -39,6 +39,7 @@
import javax.swing.table.TableColumn;
import java.io.Serializable;
import java.util.Enumeration;
+import java.util.List;
import java.util.Set;
import static org.nuiton.i18n.I18n.n_;
@@ -266,7 +267,7 @@
/**
* Update the sample category value of the given {@code row}.
*
- * @param row the row to walk through
+ * @param row the row to walk through
* @param columnIndex index of the column where the sample category is
* @param newValue new sample category value to set
* @since 2.6
@@ -285,6 +286,26 @@
updateShell(row, columnIndex);
}
+ /**
+ * Return previous sibling row, or {@code null} if not exist.
+ *
+ * @param row where to start
+ * @return the previous sibling row, or {@code null} if not exist.
+ * @since 2.6
+ */
+ public SpeciesBatchRowModel getPreviousSibling(SpeciesBatchRowModel row) {
+ SpeciesBatchRowModel result = null;
+ SpeciesBatchRowModel parentBatch = row.getParentBatch();
+ if (parentBatch != null) {
+ List<SpeciesBatchRowModel> childBatch = parentBatch.getChildBatch();
+ int i = childBatch.indexOf(row);
+ if (i > 0) {
+ result = childBatch.get(i - 1);
+ }
+ }
+ return result;
+ }
+
protected void updateShell(SpeciesBatchRowModel entry, int columnIndex) {
Set<SpeciesBatchRowModel> shell = Sets.newHashSet();
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyCellComponent.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyCellComponent.java 2013-09-25 17:12:02 UTC (rev 1228)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyCellComponent.java 2013-09-26 06:20:09 UTC (rev 1229)
@@ -123,6 +123,8 @@
protected Integer columnIndex;
+ protected SpeciesBatchRowModel previousSiblingRow;
+
public FrequencyCellEditor(SpeciesBatchUI ui, Color computedDataColor) {
this.ui = ui;
component = new SpeciesFrequencyCellComponent(computedDataColor);
@@ -155,6 +157,10 @@
return nextEditableRowIndex;
}
+ public SpeciesBatchRowModel getPreviousSiblingRow() {
+ return previousSiblingRow;
+ }
+
public void startEdit() {
Preconditions.checkNotNull(tableModel, "No table model assigned.");
@@ -164,9 +170,13 @@
nextEditableRowIndex =
tableModel.getNextEditableFrequencyRow(rowIndex + 1);
+ // compute the previous sibling row
+ previousSiblingRow = tableModel.getPreviousSibling(editRow);
+
if (log.isDebugEnabled()) {
log.debug("Will edit frequencies for row: " + rowIndex +
- ", nextEditableRow: " + nextEditableRowIndex);
+ ", nextEditableRow: " + nextEditableRowIndex +
+ ", previous siblingRow: " + previousSiblingRow);
}
EditCatchesUI parent =
@@ -226,14 +236,22 @@
} else {
+ // keep next cell to edit
+ int r = rowIndex;
+ int nextR = nextEditableRowIndex;
+ int c = columnIndex;
+
+ // stop edition of this row
+ stopCellEditing();
+
// use now the next row data
- rowIndex = nextEditableRowIndex;
+ rowIndex = nextR;
// load the row
editRow = tableModel.getEntry(rowIndex);
- // will save the row in the species row
- AbstractSelectTableAction.doSelectCell(table, rowIndex, columnIndex);
+ // will save the previous row in the species row
+ AbstractSelectTableAction.doSelectCell(table, rowIndex, c);
// start edit
startEdit();
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-09-25 17:12:02 UTC (rev 1228)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java 2013-09-26 06:20:09 UTC (rev 1229)
@@ -548,6 +548,31 @@
}
}
+ SpeciesBatchRowModel previousSiblingRow =
+ frequencyEditor.getPreviousSiblingRow();
+
+ if (lengthStepCaracteristic == null && previousSiblingRow != null) {
+
+ // try to get it from his previous brother row
+ List<SpeciesFrequencyRowModel> previousFrequency =
+ previousSiblingRow.getFrequency();
+
+ if (CollectionUtils.isNotEmpty(previousFrequency)) {
+
+ // use the first frequency length step caracteristic / step
+ SpeciesFrequencyRowModel rowModel = previousFrequency.get(0);
+ lengthStepCaracteristic =
+ rowModel.getLengthStepCaracteristic();
+ lengthStep = rowModel.getLengthStep();
+ if (log.isInfoEnabled()) {
+ log.info("Use previous sibling existing lengthStep " +
+ "caracteristic / step " +
+ decorate(lengthStepCaracteristic) + " / " +
+ lengthStep);
+ }
+ }
+ }
+
if (lengthStepCaracteristic == null && protocol != null) {
Species species = speciesBatch.getSpecies();
Modified: trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties
===================================================================
--- trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-09-25 17:12:02 UTC (rev 1228)
+++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-09-26 06:20:09 UTC (rev 1229)
@@ -1029,6 +1029,7 @@
tutti.exportDb.step.createArchive=
tutti.exportDb.step.openDb=
tutti.exportDb.step.reloadApplication=
+tutti.exportProgram.action.exportErrors=
tutti.exportProgram.action.success=
tutti.exportProtocol.action.success=
tutti.fishingOperations.action.deleteFishingOperation.mnemonic=
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-09-25 17:12:02 UTC (rev 1228)
+++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-09-26 06:20:09 UTC (rev 1229)
@@ -1023,7 +1023,6 @@
tutti.error.update.could.not.reach.url=Mise à jour impossible (l'url <strong>%s</strong> n'est pas joignable)
tutti.error.write.startActionFile=impossible d'écrire dans le fichier %s
tutti.exportCruise.action.exportErrors=Des erreurs sont apparues pendant l'élévation des poids de la campagne <strong>%s</strong>.<br/>L'export a cependant été réalisé.<hr/>Erreur(s) rencontrée(s) \: <br/>%s
-tutti.exportProgram.action.exportErrors=Des erreurs sont apparues pendant l'élévation des poids d'une campagne de la série <strong>%s</strong>.<br/>L'export a cependant été réalisé.<hr/>Erreur(s) rencontrée(s) \: <br/>%s
tutti.exportCruise.action.success=La campagne <strong>%s</strong> a été exportée dans le fichier <strong>%s</strong>.
tutti.exportCruiseForSumatra.action.chooseFile=Choisir le fichier d'export
tutti.exportCruiseForSumatra.action.success=Les captures ont correctement été exporté dans le fichier %s
@@ -1032,6 +1031,7 @@
tutti.exportDb.step.createArchive=Création de l'archive %s
tutti.exportDb.step.openDb=Réouverture de la base courante
tutti.exportDb.step.reloadApplication=Redémarrage de l'application
+tutti.exportProgram.action.exportErrors=Des erreurs sont apparues pendant l'élévation des poids d'une campagne de la série <strong>%s</strong>.<br/>L'export a cependant été réalisé.<hr/>Erreur(s) rencontrée(s) \: <br/>%s
tutti.exportProgram.action.success=La série de campagne <strong>%s</strong> a été exportée dans le fichier <strong>%s</strong>.
tutti.exportProtocol.action.success=Protocole [%1s] exporté dans le fichier <strong>%2s</strong>.
tutti.fishingOperations.action.deleteFishingOperation.mnemonic=S
1
0
r1228 - in trunk/tutti-ui-swing/src/main: java/fr/ifremer/tutti/ui/swing/content/home resources/i18n
by tchemit@users.forge.codelutin.com 25 Sep '13
by tchemit@users.forge.codelutin.com 25 Sep '13
25 Sep '13
Author: tchemit
Date: 2013-09-25 19:12:02 +0200 (Wed, 25 Sep 2013)
New Revision: 1228
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1228
Log:
refs #3313: [EXPORT GENERIQUE] Ne pas bloquer l'export en cas de probl?\195?\168me sur l'?\195?\169l?\195?\169vation (improve error display in ui)
Modified:
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportCruiseAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportProgramAction.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/home/ExportCruiseAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportCruiseAction.java 2013-09-25 17:03:03 UTC (rev 1227)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportCruiseAction.java 2013-09-25 17:12:02 UTC (rev 1228)
@@ -30,7 +30,6 @@
import fr.ifremer.tutti.persistence.entities.data.Cruise;
import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol;
import fr.ifremer.tutti.service.export.TuttiExportService;
-import fr.ifremer.tutti.ui.swing.TuttiUIContext;
import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -108,22 +107,25 @@
}
}
+ TuttiBusinessException exportError = null;
+
TuttiExportService service = getContext().getTuttiExportService();
try {
service.exportCruise(cruise.getId(), protocol, file, progressionModel);
} catch (TuttiBusinessException e) {
- String message = _("tutti.exportCruise.action.exportErrors", cruise.getName(), e.getMessage());
- TuttiUIContext.getErrorHelper().showErrorDialog(message);
+
+ String errorMessage;
+ errorMessage = _("tutti.exportCruise.action.exportErrors", cruise.getName(), e.getMessage());
+ exportError = new TuttiBusinessException(errorMessage);
}
- getHandler().resetEditCruiseAction();
- }
-
- @Override
- public void postSuccessAction() {
- super.postSuccessAction();
- Cruise cruise = getModel().getCruise();
sendMessage(_("tutti.exportCruise.action.success",
cruise.getName(), file.getName()));
+
+ handler.resetEditCruiseAction();
+
+ if (exportError != null) {
+ throw exportError;
+ }
}
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportProgramAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportProgramAction.java 2013-09-25 17:03:03 UTC (rev 1227)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportProgramAction.java 2013-09-25 17:12:02 UTC (rev 1228)
@@ -31,7 +31,6 @@
import fr.ifremer.tutti.persistence.entities.data.Program;
import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol;
import fr.ifremer.tutti.service.export.TuttiExportService;
-import fr.ifremer.tutti.ui.swing.TuttiUIContext;
import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -68,7 +67,7 @@
// choose file to export
file = saveFile(
- "exportProgram-" + program.getName() ,"zip",
+ "exportProgram-" + program.getName(), "zip",
_("tutti.selectCruise.title.choose.exportProgramFile"),
_("tutti.selectCruise.action.chooseProgramExportFile"),
"^.+\\.zip$", _("tutti.common.file.zip")
@@ -110,22 +109,26 @@
log.info("Will use protocol " + protocol.getName());
}
}
+ TuttiBusinessException exportError = null;
+
TuttiExportService service = getContext().getTuttiExportService();
try {
service.exportProgram(program.getId(), protocol, file, progressionModel);
} catch (TuttiBusinessException e) {
- TuttiBusinessException e2 = new TuttiBusinessException("Des erreurs sont apparues pendant l'élévation des poids<hr/>L'export a cependant été réalisé.", e.getCause());
- TuttiUIContext.getErrorHelper().showErrorDialog(null, e2);
+
+ String errorMessage;
+ errorMessage = _("tutti.exportProgram.action.exportErrors", program.getName(), e.getMessage());
+
+ exportError = new TuttiBusinessException(errorMessage);
}
- getHandler().resetEditProgramAction();
- }
+ handler.resetEditProgramAction();
- @Override
- public void postSuccessAction() {
- super.postSuccessAction();
- Program program = getModel().getProgram();
sendMessage(_("tutti.exportProgram.action.success", program.getName(),
file.getName()));
+
+ if (exportError != null) {
+ throw exportError;
+ }
}
}
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-09-25 17:03:03 UTC (rev 1227)
+++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-09-25 17:12:02 UTC (rev 1228)
@@ -1023,6 +1023,7 @@
tutti.error.update.could.not.reach.url=Mise à jour impossible (l'url <strong>%s</strong> n'est pas joignable)
tutti.error.write.startActionFile=impossible d'écrire dans le fichier %s
tutti.exportCruise.action.exportErrors=Des erreurs sont apparues pendant l'élévation des poids de la campagne <strong>%s</strong>.<br/>L'export a cependant été réalisé.<hr/>Erreur(s) rencontrée(s) \: <br/>%s
+tutti.exportProgram.action.exportErrors=Des erreurs sont apparues pendant l'élévation des poids d'une campagne de la série <strong>%s</strong>.<br/>L'export a cependant été réalisé.<hr/>Erreur(s) rencontrée(s) \: <br/>%s
tutti.exportCruise.action.success=La campagne <strong>%s</strong> a été exportée dans le fichier <strong>%s</strong>.
tutti.exportCruiseForSumatra.action.chooseFile=Choisir le fichier d'export
tutti.exportCruiseForSumatra.action.success=Les captures ont correctement été exporté dans le fichier %s
1
0
r1227 - in trunk: tutti-service/src/main/java/fr/ifremer/tutti/service/export tutti-service/src/main/resources/i18n tutti-service/src/test/java/fr/ifremer/tutti/service tutti-service/src/test/java/fr/ifremer/tutti/service/export tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home tutti-ui-swing/src/main/resources/i18n
by tchemit@users.forge.codelutin.com 25 Sep '13
by tchemit@users.forge.codelutin.com 25 Sep '13
25 Sep '13
Author: tchemit
Date: 2013-09-25 19:03:03 +0200 (Wed, 25 Sep 2013)
New Revision: 1227
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1227
Log:
fixes #3313: [EXPORT GENERIQUE] Ne pas bloquer l'export en cas de probl?\195?\168me sur l'?\195?\169l?\195?\169vation
refs #3314: [EXPORT GENERIQUE] erreur ?\195?\160 l'export si pas d'engin affect?\195?\169 sur l'op?\195?\169ration
Modified:
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/AccidentalCatchExportModel.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/CatchExportModel.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/CatchExportRow.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/IndividualObservationExportModel.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/MarineLitterExportModel.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/TuttiExportService.java
trunk/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties
trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties
trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/ServiceDbResource.java
trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/TuttiExportService2Test.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportCruiseAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportProgramAction.java
trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties
trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/AccidentalCatchExportModel.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/AccidentalCatchExportModel.java 2013-09-25 16:36:22 UTC (rev 1226)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/AccidentalCatchExportModel.java 2013-09-25 17:03:03 UTC (rev 1227)
@@ -74,7 +74,7 @@
newColumnForExport("Annee", Cruise.PROPERTY_BEGIN_DATE, TuttiCsvUtil.YEAR);
newColumnForExport("Serie", Cruise.PROPERTY_PROGRAM, Program.PROPERTY_NAME);
newColumnForExport("Serie_Partielle", Cruise.PROPERTY_SURVEY_PART);
- newColumnForExport("Engin", FishingOperation.PROPERTY_GEAR, Gear.PROPERTY_NAME);
+ newNullableColumnForExport("Engin", FishingOperation.PROPERTY_GEAR + "." + Gear.PROPERTY_NAME, "?");
newColumnForExport("Id_Operation", FishingOperation.PROPERTY_STATION_NUMBER);
newColumnForExport("NumOrdre_Station", FishingOperation.PROPERTY_FISHING_OPERATION_NUMBER, TuttiCsvUtil.INTEGER);
newColumnForExport("Poche", FishingOperation.PROPERTY_MULTIRIG_AGGREGATION);
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/CatchExportModel.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/CatchExportModel.java 2013-09-25 16:36:22 UTC (rev 1226)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/CatchExportModel.java 2013-09-25 17:03:03 UTC (rev 1227)
@@ -67,7 +67,7 @@
newColumnForExport("Annee", Cruise.PROPERTY_BEGIN_DATE, TuttiCsvUtil.YEAR);
newColumnForExport("Serie", Cruise.PROPERTY_PROGRAM, Program.PROPERTY_NAME);
newColumnForExport("Serie_Partielle", Cruise.PROPERTY_SURVEY_PART);
- newColumnForExport("Engin", FishingOperation.PROPERTY_GEAR, Gear.PROPERTY_NAME);
+ newNullableColumnForExport("Engin", FishingOperation.PROPERTY_GEAR + "." + Gear.PROPERTY_NAME, "?");
newColumnForExport("Id_Operation", FishingOperation.PROPERTY_STATION_NUMBER);
newColumnForExport("NumOrdre_Station", FishingOperation.PROPERTY_FISHING_OPERATION_NUMBER, TuttiCsvUtil.INTEGER);
newColumnForExport("Poche", FishingOperation.PROPERTY_MULTIRIG_AGGREGATION);
@@ -80,27 +80,6 @@
addSampleCategory(entry.getLabel(), entry.getOrder());
}
-// for (SampleCategoryEnum sampleCategoryEnum : samplingOrder) {
-// switch (sampleCategoryEnum) {
-//
-// case sortedUnsorted:
-// addSampleCategory("VracHorsVrac", CatchExportRow.SORTED_UNSORTED_SAMPLE_CATEGORY);
-// break;
-// case size:
-// addSampleCategory("Cat_Tri", CatchExportRow.SIZE_SAMPLE_CATEGORY);
-// break;
-// case sex:
-// addSampleCategory("Sexe", CatchExportRow.SEX_SAMPLE_CATEGORY);
-// break;
-// case maturity:
-// addSampleCategory("Maturite", CatchExportRow.MATURITY_SAMPLE_CATEGORY);
-// break;
-// case age:
-// addSampleCategory("Age", CatchExportRow.AGE_SAMPLE_CATEGORY);
-// break;
-// }
-// }
-
// mensuration
newNullableColumnForExport("Code_Longueur", CatchExportRow.FREQUENCY_LENGTH_STEP_CARACTERISTIC + "." + Caracteristic.PROPERTY_ID);
@@ -139,12 +118,12 @@
// compute species total weight in catch
- float sortedBatchWeight = TuttiEntities.getValueOrComputedValue(
+ Float sortedBatchWeight = TuttiEntities.getValueOrComputedValue(
speciesBatch.getSampleCategoryWeight(),
speciesBatch.getSampleCategoryComputedWeight());
- float totalBatchWeight = speciesCatchRaisingFactor *
- sortedBatchWeight;
+ float totalBatchWeight = sortedBatchWeight == null ? 0 : speciesCatchRaisingFactor *
+ sortedBatchWeight;
prepareSortedRows(persistenceService,
row,
@@ -167,12 +146,12 @@
// compute species total weight in catch
- float sortedBatchWeight = TuttiEntities.getValueOrComputedValue(
+ Float sortedBatchWeight = TuttiEntities.getValueOrComputedValue(
benthosBatch.getSampleCategoryWeight(),
benthosBatch.getSampleCategoryComputedWeight());
- float totalBatchWeight = benthosCatchRaisingFactor *
- sortedBatchWeight;
+ float totalBatchWeight = sortedBatchWeight == null ? 0 : benthosCatchRaisingFactor *
+ sortedBatchWeight;
prepareSortedRows(persistenceService,
row,
@@ -422,7 +401,7 @@
CatchExportRow row = currentRow.copy();
row.addComment(benthosBatch.getComment());
- float referenceWeight = TuttiEntities.getValueOrComputedValue(
+ Float referenceWeight = TuttiEntities.getValueOrComputedValue(
benthosBatch.getSampleCategoryWeight(),
benthosBatch.getSampleCategoryComputedWeight());
@@ -433,9 +412,9 @@
protected void setRaisingFactor(CatchExportRow row,
float totalBatchWeight,
- float referenceWeight) {
+ Float referenceWeight) {
row.setReferenceWeight(referenceWeight);
- row.setRaisingFactor(totalBatchWeight / referenceWeight);
+ row.setRaisingFactor(referenceWeight == null ? 1.0f : (totalBatchWeight / referenceWeight));
}
protected void prepareBatch(CatchExportRow currentRow,
@@ -465,15 +444,7 @@
}
protected void addSampleCategory(String headerPrefix, int categoryOrder) {
-// String categoryName = CatchExportRow.SAMPLE_CATEGORY + "[" + categoryOrder + "]";
-// newNullableColumnForExport(headerPrefix, categoryName + "." + ExportSampleCategory.PROPERTY_CATEGORY_VALUE, TuttiCsvUtil.CARACTERISTIC_VALUE_FORMATTER);
-// newNullableColumnForExport("Num_Ordre_" + headerPrefix + "_H2", categoryName + "." + ExportSampleCategory.PROPERTY_RANK_ORDER, TuttiCsvUtil.INTEGER);
-// newNullableColumnForExport("Tot_" + headerPrefix, categoryName + "." + ExportSampleCategory.PROPERTY_CATEGORY_WEIGHT, TuttiCsvUtil.FLOAT);
-// newNullableColumnForExport("Ech_" + headerPrefix, categoryName + "." + ExportSampleCategory.PROPERTY_SAMPLE_WEIGHT, TuttiCsvUtil.FLOAT);
-// newNullableColumnForExport("Type_Volume_Poids_" + headerPrefix, categoryName + "." + ExportSampleCategory.PROPERTY_WEIGHT_OR_VOL_TYPE);
-// newNullableColumnForExport("Unite_Volume_Poids_" + headerPrefix, CatchExportRow.BATCH_WEIGHT_UNIT);
-
String categoryName = CatchExportRow.SAMPLE_CATEGORY;
newIndexNullableColumnForExport(headerPrefix, categoryName, categoryOrder, ExportSampleCategory.PROPERTY_CATEGORY_VALUE, TuttiCsvUtil.CARACTERISTIC_VALUE_FORMATTER);
newIndexNullableColumnForExport("Num_Ordre_" + headerPrefix + "_H2", categoryName, categoryOrder, ExportSampleCategory.PROPERTY_RANK_ORDER, TuttiCsvUtil.INTEGER);
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/CatchExportRow.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/CatchExportRow.java 2013-09-25 16:36:22 UTC (rev 1226)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/CatchExportRow.java 2013-09-25 17:03:03 UTC (rev 1227)
@@ -88,7 +88,7 @@
protected Species species;
- protected float referenceWeight;
+ protected Float referenceWeight;
protected float raisingFactor;
@@ -106,7 +106,7 @@
this.fishingOperation = fishingOperation;
}
- public void setReferenceWeight(float referenceWeight) {
+ public void setReferenceWeight(Float referenceWeight) {
this.referenceWeight = referenceWeight;
}
@@ -186,7 +186,7 @@
this.species = species;
}
- public float getReferenceWeight() {
+ public Float getReferenceWeight() {
return referenceWeight;
}
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/IndividualObservationExportModel.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/IndividualObservationExportModel.java 2013-09-25 16:36:22 UTC (rev 1226)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/IndividualObservationExportModel.java 2013-09-25 17:03:03 UTC (rev 1227)
@@ -73,7 +73,7 @@
newColumnForExport("Annee", Cruise.PROPERTY_BEGIN_DATE, TuttiCsvUtil.YEAR);
newColumnForExport("Serie", Cruise.PROPERTY_PROGRAM, Program.PROPERTY_NAME);
newColumnForExport("Serie_Partielle", Cruise.PROPERTY_SURVEY_PART);
- newColumnForExport("Engin", FishingOperation.PROPERTY_GEAR, Gear.PROPERTY_NAME);
+ newNullableColumnForExport("Engin", FishingOperation.PROPERTY_GEAR + "." + Gear.PROPERTY_NAME, "?");
newColumnForExport("Id_Operation", FishingOperation.PROPERTY_STATION_NUMBER);
newColumnForExport("NumOrdre_Station", FishingOperation.PROPERTY_FISHING_OPERATION_NUMBER, TuttiCsvUtil.INTEGER);
newColumnForExport("Poche", FishingOperation.PROPERTY_MULTIRIG_AGGREGATION);
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/MarineLitterExportModel.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/MarineLitterExportModel.java 2013-09-25 16:36:22 UTC (rev 1226)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/MarineLitterExportModel.java 2013-09-25 17:03:03 UTC (rev 1227)
@@ -51,7 +51,7 @@
newColumnForExport("Annee", Cruise.PROPERTY_BEGIN_DATE, TuttiCsvUtil.YEAR);
newColumnForExport("Serie", Cruise.PROPERTY_PROGRAM, Program.PROPERTY_NAME);
newColumnForExport("Serie_Partielle", Cruise.PROPERTY_SURVEY_PART);
- newColumnForExport("Engin", FishingOperation.PROPERTY_GEAR, Gear.PROPERTY_NAME);
+ newNullableColumnForExport("Engin", FishingOperation.PROPERTY_GEAR + "." + Gear.PROPERTY_NAME, "?");
newColumnForExport("Id_Operation", FishingOperation.PROPERTY_STATION_NUMBER);
newColumnForExport("NumOrdre_Station", FishingOperation.PROPERTY_FISHING_OPERATION_NUMBER, TuttiCsvUtil.INTEGER);
newColumnForExport("Poche", FishingOperation.PROPERTY_MULTIRIG_AGGREGATION);
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/TuttiExportService.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/TuttiExportService.java 2013-09-25 16:36:22 UTC (rev 1226)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/TuttiExportService.java 2013-09-25 17:03:03 UTC (rev 1227)
@@ -196,7 +196,16 @@
}
// check cruise fishing operations
- checkCruise(progressionModel, cruise);
+ TuttiBusinessException checkError = null;
+ try {
+ checkCruise(progressionModel, cruise);
+ } catch (TuttiBusinessException e) {
+ // error while checking cruise
+ if (log.isDebugEnabled()) {
+ log.debug("Got a check cruise error", e);
+ }
+ checkError = e;
+ }
File basedir = new File(context.getConfig().newTempFile(
"exportCruise"), "exportCruise-" + cruiseId);
@@ -217,6 +226,11 @@
} finally {
IOUtils.closeQuietly(exportContext);
}
+
+ if (checkError != null) {
+ // rethrow error
+ throw checkError;
+ }
}
protected ExportContext createExportContext(File basedir,
@@ -277,6 +291,7 @@
String cruiseStr = cruiseDecorator.toString(cruise);
throw new TuttiBusinessException(
_("tutti.service.export.invalid.cruise", cruiseStr, sb.toString()));
+// _("tutti.service.export.invalid.cruise2", cruiseStr, sb.toString()));
}
}
@@ -514,7 +529,7 @@
catchBatch.getCatchTotalWeight(),
catchBatch.getCatchTotalComputedWeight());
- float totalUnsortedWeight =
+ Float totalUnsortedWeight =
catchBatch.getCatchTotalUnsortedComputedWeight();
@@ -537,10 +552,10 @@
//FIXME tchemit 2013-07-12 J'utilise en fait la formule (Poids de la capture totale - poids du HV dans la capture totale) / (poids total capture triée)
// (Poids de la capture totale - poids du HV dans la capture totale) / (poids total capture triée - poids du HV dans la capture totale)
- Float catchRaisingFactor = (totalWeight - totalUnsortedWeight) / totalSortedWeight;
+ Float catchRaisingFactor = totalWeight == null || totalUnsortedWeight == null || totalSortedWeight == null ? 1 : (totalWeight - totalUnsortedWeight) / totalSortedWeight;
- Float speciesCatchRaisingFactor = totalSampleSortedSpeciesWeight == 0 ? 0 : (totalSortedSpeciesWeight / totalSampleSortedSpeciesWeight) * catchRaisingFactor;
- Float benthosCatchRaisingFactor = totalSampleSortedBenthosWeight == 0 ? 0 : (totalSortedBenthosWeight / totalSampleSortedBenthosWeight) * catchRaisingFactor;
+ Float speciesCatchRaisingFactor = totalSampleSortedSpeciesWeight == null || totalSortedSpeciesWeight == null || totalSampleSortedSpeciesWeight == null ? 1 : (totalSampleSortedSpeciesWeight == 0 ? 0 : (totalSortedSpeciesWeight / totalSampleSortedSpeciesWeight) * catchRaisingFactor);
+ Float benthosCatchRaisingFactor = totalSampleSortedBenthosWeight == null || totalSortedBenthosWeight == null || totalSampleSortedBenthosWeight == null ? 1 : (totalSampleSortedBenthosWeight == 0 ? 0 : (totalSortedBenthosWeight / totalSampleSortedBenthosWeight) * catchRaisingFactor);
if (log.isDebugEnabled()) {
String message = "\ncatchTotalWeight : " + totalWeight +
@@ -552,7 +567,7 @@
"\nspeciesCatchRaisingFactor : " + speciesCatchRaisingFactor +
"\nbenthosCatchRaisingFactor : " + benthosCatchRaisingFactor;
- log.info(message);
+ log.debug(message);
}
List<CatchExportRow> rows = Lists.newArrayList();
@@ -665,6 +680,8 @@
Map<String, Species> speciesById;
+ String checkError;
+
ExportContext(File basedir,
char csvSeparator,
DecoratorService decoratorService,
@@ -784,6 +801,14 @@
IOUtils.closeQuietly(speciesWriter);
}
+ public String getCheckError() {
+ return checkError;
+ }
+
+ public void setCheckError(String checkError) {
+ this.checkError = checkError;
+ }
+
public void addSpecies(Species species) {
String speciesId = species.getId();
if (!speciesToExport.containsKey(speciesId)) {
@@ -816,12 +841,13 @@
private final CatchBatch catchBatch;
- private final BatchContainer<MarineLitterBatch> rootMarineLitterBatch;
+ private BatchContainer<MarineLitterBatch> rootMarineLitterBatch;
- private final BatchContainer<SpeciesBatch> rootSpeciesBatch;
+ private BatchContainer<SpeciesBatch> rootSpeciesBatch;
- private final BatchContainer<BenthosBatch> rootBenthosBatch;
+ private BatchContainer<BenthosBatch> rootBenthosBatch;
+
protected boolean withCatchBatch;
public OperationContext(FishingOperation operation,
@@ -844,22 +870,43 @@
persistenceService.getCatchBatchFromFishingOperation(
operationId);
- rootSpeciesBatch =
- tuttiWeightComputingService.getComputedSpeciesBatches(operation);
+ boolean withError = false;
- rootBenthosBatch =
- tuttiWeightComputingService.getComputedBenthosBatches(operation);
+ try {
+ rootSpeciesBatch = tuttiWeightComputingService.getComputedSpeciesBatches(operation);
+ } catch (Exception e) {
+ withError = true;
+ rootSpeciesBatch =
+ persistenceService.getRootSpeciesBatch(operationId, null);
+ }
- rootMarineLitterBatch =
- tuttiWeightComputingService.getComputedMarineLitterBatches(operation, catchBatch.getMarineLitterTotalWeight());
+ try {
+ rootBenthosBatch =
+ tuttiWeightComputingService.getComputedBenthosBatches(operation);
+ } catch (Exception e) {
+ withError = true;
+ rootBenthosBatch =
+ persistenceService.getRootBenthosBatch(operationId, null);
+ }
+ try {
+ rootMarineLitterBatch =
+ tuttiWeightComputingService.getComputedMarineLitterBatches(operation, catchBatch.getMarineLitterTotalWeight());
+ } catch (Exception e) {
+ withError = true;
+ rootMarineLitterBatch =
+ persistenceService.getRootMarineLitterBatch(operationId);
+ }
+
// apply compute weights
- tuttiWeightComputingService.computeCatchBatchWeights(
- catchBatch,
- rootSpeciesBatch,
- rootBenthosBatch,
- rootMarineLitterBatch);
+ if (!withError) {
+ tuttiWeightComputingService.computeCatchBatchWeights(
+ catchBatch,
+ rootSpeciesBatch,
+ rootBenthosBatch,
+ rootMarineLitterBatch);
+ }
} else {
if (log.isWarnEnabled()) {
log.warn("Skip fishing operation " + operationId +
Modified: trunk/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties
===================================================================
--- trunk/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties 2013-09-25 16:36:22 UTC (rev 1226)
+++ trunk/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties 2013-09-25 17:03:03 UTC (rev 1227)
@@ -57,6 +57,7 @@
tutti.service.export.closeContext.error=
tutti.service.export.context.error=
tutti.service.export.invalid.cruise=
+tutti.service.export.invalid.cruise2=
tutti.service.export.invalid.fishingOperation=
tutti.service.export.operations.error=
tutti.service.export.parameters.error=
Modified: trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties
===================================================================
--- trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties 2013-09-25 16:36:22 UTC (rev 1226)
+++ trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties 2013-09-25 17:03:03 UTC (rev 1227)
@@ -56,7 +56,8 @@
tutti.service.export.catches.error=Erreur lors de l'export des captures
tutti.service.export.closeContext.error=Erreur lors de la fermeture du contexte d'export
tutti.service.export.context.error=Erreur lors de la création des fichiers pour l'export
-tutti.service.export.invalid.cruise=L'export de la campagne %s ne peut pas être réalisé suite aux erreurs rencontrées sur ses traits lors de l'élévation des poids \:<ul>%s</ul>
+tutti.service.export.invalid.cruise=Erreur d'élévation de poids sur les traits de la campagne %s \:<ul>%s</ul>
+tutti.service.export.invalid.cruise2=L'export de la campagne %s ne peut pas être réalisé suite aux erreurs rencontrées sur ses traits lors de l'élévation des poids \:<ul>%s</ul>
tutti.service.export.invalid.fishingOperation=<li>L'élévation des poids ne peut pas être réalisée sur le trait %s, pour la raison suivante \:<ul><li>%s</li></ul></li>
tutti.service.export.operations.error=Erreur lors de l'export des traits
tutti.service.export.parameters.error=Erreur lors de l'export des paramètres
Modified: trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/ServiceDbResource.java
===================================================================
--- trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/ServiceDbResource.java 2013-09-25 16:36:22 UTC (rev 1226)
+++ trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/ServiceDbResource.java 2013-09-25 17:03:03 UTC (rev 1227)
@@ -52,6 +52,8 @@
import java.io.File;
import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
import java.util.List;
import java.util.Locale;
import java.util.Map;
@@ -100,6 +102,21 @@
}
}
+ public static void assertFileContent(String message,
+ URL actualFile,
+ String expectedContent) throws IOException {
+
+ Assert.assertNotNull(actualFile);
+ InputStream inputStream = actualFile.openStream();
+ Assert.assertNotNull(inputStream);
+ String fileContent = IOUtils.toString(inputStream, Charsets.UTF_8).trim();
+ Assert.assertEquals(expectedContent, fileContent);
+
+ if (log.isInfoEnabled()) {
+ log.info(message + fileContent);
+ }
+ }
+
protected TuttiServiceContext createServiceContext(RessourceClassLoader loader,
TuttiServiceConfig config) {
return new TuttiServiceContext(loader, config) {
Modified: trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/TuttiExportService2Test.java
===================================================================
--- trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/TuttiExportService2Test.java 2013-09-25 16:36:22 UTC (rev 1226)
+++ trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/TuttiExportService2Test.java 2013-09-25 17:03:03 UTC (rev 1227)
@@ -24,13 +24,22 @@
* #L%
*/
+import com.google.common.io.Files;
+import fr.ifremer.tutti.TuttiBusinessException;
+import fr.ifremer.tutti.persistence.ProgressionModel;
+import fr.ifremer.tutti.persistence.entities.data.FishingOperation;
+import fr.ifremer.tutti.service.PersistenceService;
import fr.ifremer.tutti.service.ServiceDbResource;
import fr.ifremer.tutti.service.TuttiServiceContext;
+import fr.ifremer.tutti.service.catches.TuttiWeightComputingService;
+import org.junit.Assert;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
import java.io.File;
+import java.net.URL;
+import java.util.List;
/**
* Test export of catches.
@@ -52,27 +61,7 @@
public static final String OPERATION_2_ID = "100113";
- public static final String CATCH_CONTENT =
- "Annee;Serie;Serie_Partielle;Engin;Id_Operation;NumOrdre_Station;Poche;Navire;Taxon;Nom_scientifique;Commentaire;V/HV;Num_Ordre_V/HV_H2;Tot_V/HV;Ech_V/HV;Type_Volume_Poids_V/HV;Unite_Volume_Poids_V/HV;Class Tri.;Num_Ordre_Class Tri._H2;Tot_Class Tri.;Ech_Class Tri.;Type_Volume_Poids_Class Tri.;Unite_Volume_Poids_Class Tri.;Sexe;Num_Ordre_Sexe_H2;Tot_Sexe;Ech_Sexe;Type_Volume_Poids_Sexe;Unite_Volume_Poids_Sexe;Maturité;Num_Ordre_Maturité_H2;Tot_Maturité;Ech_Maturité;Type_Volume_Poids_Maturité;Unite_Volume_Poids_Maturité;Age;Num_Ordre_Age_H2;Tot_Age;Ech_Age;Type_Volume_Poids_Age;Unite_Volume_Poids_Age;Code_Longueur;Libelle_Longueur;Taille;NumOrdre_Taille_H2;Poids_Classe_Taille;Unite_Taille;Precision_Mesure;Nbr;Poids_Reference;Coef_Elev_Espece_Capture\n" +
- "2013;test elevation;1;OTB 20/28.10;A;1;1;278970;1938;Agonus cataphractus;AGONCAT-vrac-80;Vrac;1;80.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;80.0;5.4444447;\n" +
- "2013;test elevation;1;OTB 20/28.10;A;1;1;278970;1358;Alosa alosa;ALOSALO-vrac|ALOSALO-vrac-male 60;Vrac;2;;;Poids;kg;NA;;;;;kg;Mâle;1;60.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;60.0;9.074075;\n" +
- "2013;test elevation;1;OTB 20/28.10;A;1;1;278970;1358;Alosa alosa;ALOSALO-vrac|ALOSALO-vrac-femelle 40;Vrac;2;;;Poids;kg;NA;;;;;kg;Femelle;2;40.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;306;Longueur totale (LT) - individu - totale - Mesure au cm par un observateur;5.0;1;0.6;cm;1.0;4;0.6;907.4074;\n" +
- "2013;test elevation;1;OTB 20/28.10;A;1;1;278970;1358;Alosa alosa;ALOSALO-vrac|ALOSALO-vrac-femelle 40;Vrac;2;;;Poids;kg;NA;;;;;kg;Femelle;2;40.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;306;Longueur totale (LT) - individu - totale - Mesure au cm par un observateur;6.0;2;0.4;cm;1.0;10;0.4;1361.1111;\n" +
- "2013;test elevation;1;OTB 20/28.10;A;1;1;278970;1938;Agonus cataphractus;AGONCAT-horsvrac-20;Hors Vrac;1;20.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;20.0;1.0;\n" +
- "2013;test elevation;1;OTB 20/28.10;B;2;1;278970;1938;Agonus cataphractus;Trait B-2-1 AGONCAT-vrac 80;Vrac;1;80.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;80.0;3.5;\n" +
- "2013;test elevation;1;OTB 20/28.10;B;2;1;278970;1358;Alosa alosa;Trait B-2-1 ALOSALO Vrac|Trait B-2-1 ALOSALO Vrac - Male 60;Vrac;2;;;Poids;kg;NA;;;;;kg;Mâle;1;60.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;60.0;5.8333335;\n" +
- "2013;test elevation;1;OTB 20/28.10;B;2;1;278970;1358;Alosa alosa;Trait B-2-1 ALOSALO Vrac|Trait B-2-1 ALOSALO Vrac - Femelle 40.0;Vrac;2;;;Poids;kg;NA;;;;;kg;Femelle;2;40.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;40.0;8.75;\n" +
- "2013;test elevation;1;OTB 20/28.10;B;2;1;278970;1938;Agonus cataphractus;Trait B-2-1 AGONCAT-horsvrac 20;Hors Vrac;1;20.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;20.0;1.0;\n" +
- "2013;test elevation;1;OTB 20/28.10;B;2;1;278970;4622;Abietinaria abietina;\"Trait B-2-1 Benthos ABIEABI Vrac 30\n" +
- "\n" +
- "avec \n" +
- "\n" +
- "commentaire...\";Vrac;1;30.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;30.0;7.0;\n" +
- "2013;test elevation;1;OTB 20/28.10;B;2;1;278970;380;Acanthocardia echinata;\"Trait B-2-1 Benthos ACANECH Vrac 18\n" +
- "\n" +
- "avec \n" +
- "\n" +
- "commentaire...\";Vrac;2;18.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;18.0;7.0;";
+ public static final String OPERATION_3_ID = "100114";
protected TuttiExportService service;
@@ -93,22 +82,184 @@
service = serviceContext.getService(TuttiExportService.class);
- dataContext = dbResource.loadContext(PROGRAM_ID, CRUISE_ID, 2, OPERATION_1_ID, OPERATION_2_ID);
}
@Test
- public void exportCatches() throws Exception {
+ public void exportWithErrors() throws Exception {
- TuttiExportService.ExportContext exportContext =
- service.createExportContext(dataDirectory, null);
+ TuttiServiceContext serviceContext = dbResource.getServiceContext();
+
+ PersistenceService persistenceService = serviceContext.getService(PersistenceService.class);
+
+ // check there is a error while compute weight for a cruise
+ boolean errorDetected = false;
+ TuttiWeightComputingService computingService = serviceContext.getService(TuttiWeightComputingService.class);
+ List<FishingOperation> allFishingOperation = persistenceService.getAllFishingOperation(CRUISE_ID);
+ for (FishingOperation fishingOperation : allFishingOperation) {
+ try {
+ computingService.getComputedSpeciesBatches(fishingOperation);
+ } catch (Exception e) {
+ errorDetected = true;
+ break;
+ }
+ }
+
+ Assert.assertTrue(errorDetected);
+
+ File exportFile = new File(dataDirectory, "exportCruise.zip");
+
+ Files.createParentDirs(exportFile);
+
+ Assert.assertFalse(exportFile.exists());
+
+ ProgressionModel progressionModel = new ProgressionModel();
+ progressionModel.setTotal(9);
try {
- service.exportCatches(exportContext, dataContext.cruise, dataContext.operations);
- } finally {
- exportContext.close();
+ service.exportCruise(CRUISE_ID, null, exportFile, progressionModel);
+ // got an error after but export was still performed
+ Assert.fail();
+ } catch (TuttiBusinessException e) {
+ // got an error
+ Assert.assertTrue(true);
}
- ServiceDbResource.assertFileContent("Catch export:\n",
- exportContext.catchFile,
- CATCH_CONTENT);
+ // export perform, file exist
+ Assert.assertTrue(exportFile.exists());
+
+ String urlPrefix = "jar:" + exportFile.toURI().toURL() + "!/exportCruise-" + CRUISE_ID + "/";
+ {
+ // check species file content
+
+ URL url = new URL(urlPrefix + "species.csv");
+ ServiceDbResource.assertFileContent("species export:\n",
+ url,
+ "Id;Code_Rubin;Nom Scientifique;Code campagne\n" +
+ "380;ACANECH;Acanthocardia echinata;;\n" +
+ "1358;ALOSALO;Alosa alosa;;\n" +
+ "1938;AGONCAT;Agonus cataphractus;;\n" +
+ "4622;ABIEABI;Abietinaria abietina;;\n" +
+ "11183;;Brissopsis atlantica;;");
+
+ }
+
+ {
+ // check accidentalCatch file content
+
+ URL url = new URL(urlPrefix + "accidentalCatch.csv");
+ ServiceDbResource.assertFileContent("accidentalCatch export:\n",
+ url,
+ "Annee;Serie;Serie_Partielle;Engin;Id_Operation;NumOrdre_Station;Poche;Navire;BatchId;ReferenceTaxonId;ReferenceTaxonName;Commentaire;CaracteristicId;CaracteristicValue");
+
+ }
+
+ {
+ // check operation file content
+
+ URL url = new URL(urlPrefix + "operation.csv");
+ ServiceDbResource.assertFileContent("operation export:\n",
+ url,
+ "Annee;Serie;Serie_Partielle;Code_Station;Numero_Trait;Poche;Engin;Navire;DateDeb_Op;LatDeb;LongDeb;DateFin_Op;LatFin;LongFin;Duree;Strate;Sous-Strate;Localite;Validite_OP;Rectiligne;Distance;Ouv_Verticale;Ouv_Horizontale_Ailes;Ouv_Horizontale_Panneaux;Saisisseur;Commentaire;Poids_Total;Poids_Total_Calcule;Poids_Total_Vrac;Poids_Total_Vrac_Calcule;Poids_Total_HorsVrac;Poids_Total_HorsVrac_Calcule;Poids_Total_Non_Trie;Poids_Total_Non_Trie_Calcule;Poids_Total_Tremis;Poids_Total_Tremis_Calcule;Poids_Total_Carroussel;Poids_Total_Carroussel_Calcule;Poids_Total_Espece;Poids_Total_Espece_Calcule;Poids_Total_Espece_Vrac;Poids_Total_Espece_Vrac_Calcule;Poids_Total_Espece_Vrac_Trie;Poids_Total_Espece_Vrac_Trie_Calcule;Poids_Total_Espece_HorsVrac;Poids_Total_Espece_HorsVrac_Calcule;Poids_Total_Espece_Inerte_Trie;Poids_Total_Espece_Inerte_Trie_Calcule;Poids_Total_Espece_Vivant_non_detaille_trie;Poids_Total_Espece_Vivant_non_detaille_trie_Calcule;Poids_Total_Benthos;Poids_Total_Benthos_Calcule;Poids_Total_Benthos_Vrac;Poids_Total_Benthos_Vrac_Calcule;Poids_Total_Benthos_Vrac_Trie;Poids_Total_Benthos_Vrac_Trie_Calcule;Poids_Total_Benthos_HorsVrac;Poids_Total_Benthos_HorsVrac_Calcule;Poids_Total_Benthos_Inerte_Trie;Poids_Total_Benthos_Inerte_Trie_Calcule;Poids_Total_Benthos_Vivant_non_detaille_trie;Poids_Total_Benthos_Vivant_non_detaille_trie_Calcule;Poids_Total_Macro_Dechet;Poids_Total_Macro_Dechet_Calcule\n" +
+ "2013;test elevation;1;B;2;1;OTB 20/28.10;278970;01/07/2013 00:00:00;;;01/07/2013 00:00:00;;;00;NA;NA;NA;?;N;;NA;NA;NA;;\"Commentaire sur le trait B-2-1\n" +
+ "\n" +
+ "avec\n" +
+ "saut\n" +
+ "de \n" +
+ "ligne\";1000.0;Y;280.0;Y;20.0;Y;700.0;N;;?;;?;200.0;Y;180.0;Y;180.0;Y;20.0;Y;0.0;Y;0.0;Y;100.0;Y;100.0;N;50.0;Y;0.0;Y;2.0;N;0.0;Y;100.0;N;\n" +
+ "2013;test elevation;1;A;1;1;OTB 20/28.10;278970;01/07/2013 00:00:00;;;01/07/2013 00:00:00;;;00;NA;NA;NA;?;N;;NA;NA;NA;;\"commentaire trait A-1-1\n" +
+ "Avec \n" +
+ "saut\n" +
+ "de\n" +
+ "ligne\n" +
+ "...\";1000.0;Y;180.0;Y;20.0;Y;800.0;N;;?;;?;200.0;Y;180.0;Y;180.0;Y;20.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;\n" +
+ "2013;test elevation;1;C;3;1;?;278970;25/09/2013 00:00:00;;;25/09/2013 00:00:00;;;00;NA;NA;NA;?;N;;NA;NA;NA;;;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;");
+
+ }
+
+ {
+ // check survey file content
+
+ URL url = new URL(urlPrefix + "survey.csv");
+ ServiceDbResource.assertFileContent("survey export:\n",
+ url,
+ "Annee;Serie;Serie_Partielle;Navire;Pays;Zone_Etude;Campagne;Id_Sismer;Date_Deb_Campagne;Port_Deb_Campagne;Date_Fin_Campagne;Port_Fin_Campagne;Chef_Mission;Resp_Salle_Tri;Commentaire\n" +
+ "2013;test elevation;1;278970;FRA;CGFS - Manche Est / Sud Mer du Nord;test elevation_2013_1;;01/07/2013 00:00:00;La Barbotière (Gujan-Mestras);04/07/2013 00:00:00;La Barbotière (Gujan-Mestras);Adrian LEVREL;Alain BISEAU;;");
+
+ }
+
+ {
+ // check individualObservation file content
+
+ URL url = new URL(urlPrefix + "individualObservation.csv");
+ ServiceDbResource.assertFileContent("individualObservation export:\n",
+ url,
+ "Annee;Serie;Serie_Partielle;Engin;Id_Operation;NumOrdre_Station;Poche;Navire;BatchId;ReferenceTaxonId;ReferenceTaxonName;Commentaire;CaracteristicId;CaracteristicValue");
+
+ }
+
+ {
+ // check catch file content
+
+ URL url = new URL("jar:" + exportFile.toURI().toURL() + "!/exportCruise-" + CRUISE_ID + "/catch.csv");
+ ServiceDbResource.assertFileContent("Catch export:\n",
+ url,
+ "Annee;Serie;Serie_Partielle;Engin;Id_Operation;NumOrdre_Station;Poche;Navire;Taxon;Nom_scientifique;Commentaire;V/HV;Num_Ordre_V/HV_H2;Tot_V/HV;Ech_V/HV;Type_Volume_Poids_V/HV;Unite_Volume_Poids_V/HV;Class Tri.;Num_Ordre_Class Tri._H2;Tot_Class Tri.;Ech_Class Tri.;Type_Volume_Poids_Class Tri.;Unite_Volume_Poids_Class Tri.;Sexe;Num_Ordre_Sexe_H2;Tot_Sexe;Ech_Sexe;Type_Volume_Poids_Sexe;Unite_Volume_Poids_Sexe;Maturité;Num_Ordre_Maturité_H2;Tot_Maturité;Ech_Maturité;Type_Volume_Poids_Maturité;Unite_Volume_Poids_Maturité;Age;Num_Ordre_Age_H2;Tot_Age;Ech_Age;Type_Volume_Poids_Age;Unite_Volume_Poids_Age;Code_Longueur;Libelle_Longueur;Taille;NumOrdre_Taille_H2;Poids_Classe_Taille;Unite_Taille;Precision_Mesure;Nbr;Poids_Reference;Coef_Elev_Espece_Capture\n" +
+ "2013;test elevation;1;OTB 20/28.10;B;2;1;278970;1938;Agonus cataphractus;Trait B-2-1 AGONCAT-vrac 80;Vrac;1;80.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;80.0;3.5;\n" +
+ "2013;test elevation;1;OTB 20/28.10;B;2;1;278970;1358;Alosa alosa;Trait B-2-1 ALOSALO Vrac|Trait B-2-1 ALOSALO Vrac - Male 60;Vrac;2;;;Poids;kg;NA;;;;;kg;Mâle;1;60.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;60.0;5.8333335;\n" +
+ "2013;test elevation;1;OTB 20/28.10;B;2;1;278970;1358;Alosa alosa;Trait B-2-1 ALOSALO Vrac|Trait B-2-1 ALOSALO Vrac - Femelle 40.0;Vrac;2;;;Poids;kg;NA;;;;;kg;Femelle;2;40.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;40.0;8.75;\n" +
+ "2013;test elevation;1;OTB 20/28.10;B;2;1;278970;1938;Agonus cataphractus;Trait B-2-1 AGONCAT-horsvrac 20;Hors Vrac;1;20.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;20.0;1.0;\n" +
+ "2013;test elevation;1;OTB 20/28.10;B;2;1;278970;4622;Abietinaria abietina;\"Trait B-2-1 Benthos ABIEABI Vrac 30\n" +
+ "\n" +
+ "avec \n" +
+ "\n" +
+ "commentaire...\";Vrac;1;30.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;30.0;7.0;\n" +
+ "2013;test elevation;1;OTB 20/28.10;B;2;1;278970;380;Acanthocardia echinata;\"Trait B-2-1 Benthos ACANECH Vrac 18\n" +
+ "\n" +
+ "avec \n" +
+ "\n" +
+ "commentaire...\";Vrac;2;18.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;18.0;7.0;\n" +
+ "2013;test elevation;1;OTB 20/28.10;A;1;1;278970;1938;Agonus cataphractus;AGONCAT-vrac-80;Vrac;1;80.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;80.0;5.4444447;\n" +
+ "2013;test elevation;1;OTB 20/28.10;A;1;1;278970;1358;Alosa alosa;ALOSALO-vrac|ALOSALO-vrac-male 60;Vrac;2;;;Poids;kg;NA;;;;;kg;Mâle;1;60.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;60.0;9.074075;\n" +
+ "2013;test elevation;1;OTB 20/28.10;A;1;1;278970;1358;Alosa alosa;ALOSALO-vrac|ALOSALO-vrac-femelle 40;Vrac;2;;;Poids;kg;NA;;;;;kg;Femelle;2;40.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;306;Longueur totale (LT) - individu - totale - Mesure au cm par un observateur;5.0;1;0.6;cm;1.0;4;0.6;907.4074;\n" +
+ "2013;test elevation;1;OTB 20/28.10;A;1;1;278970;1358;Alosa alosa;ALOSALO-vrac|ALOSALO-vrac-femelle 40;Vrac;2;;;Poids;kg;NA;;;;;kg;Femelle;2;40.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;306;Longueur totale (LT) - individu - totale - Mesure au cm par un observateur;6.0;2;0.4;cm;1.0;10;0.4;1361.1111;\n" +
+ "2013;test elevation;1;OTB 20/28.10;A;1;1;278970;1938;Agonus cataphractus;AGONCAT-horsvrac-20;Hors Vrac;1;20.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;20.0;1.0;\n" +
+ "2013;test elevation;1;?;C;3;1;278970;11183;Brissopsis atlantica;|;Vrac;1;;;Poids;kg;NA;;;;;kg;UNK - Indéterminé;1;30.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;30.0;0.0;\n" +
+ "2013;test elevation;1;?;C;3;1;278970;11183;Brissopsis atlantica;|;Vrac;1;;;Poids;kg;NA;;;;;kg;Mâle;2;20.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;20.0;0.0;\n" +
+ "2013;test elevation;1;?;C;3;1;278970;11183;Brissopsis atlantica;|;Vrac;1;;;Poids;kg;NA;;;;;kg;Femelle;3;;;Poids;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;;1.0;");
+
+ }
+
+ {
+ // check gearCaracteristics file content
+
+ URL url = new URL(urlPrefix + "gearCaracteristics.csv");
+ ServiceDbResource.assertFileContent("gearCaracteristics export:\n",
+ url,
+ "Annee;Serie;Serie_Partielle;Engin;Code_PMFM;Libelle_PMFM;Valeur");
+
+ }
+
+ {
+ // check marineLitter file content
+
+ URL url = new URL(urlPrefix + "marineLitter.csv");
+ ServiceDbResource.assertFileContent("marineLitter export:\n",
+ url,
+ "Annee;Serie;Serie_Partielle;Engin;Id_Operation;NumOrdre_Station;Poche;Navire;MarineLitterCategory;MarineLitterSizeCategory;Number;Weight;Commentaire\n" +
+ "2013;test elevation;1;OTB 20/28.10;B;2;1;278970;L1 PLASTIQUE;A: <5*5 cm= 25 cm2;10;;\"Trait B-2-1 Macro dechet L1 Plastique (nb 10)\n" +
+ "\n" +
+ "avec \n" +
+ "\n" +
+ "commentaire...\";");
+
+ }
+ {
+ // check parameter file content
+
+ URL url = new URL(urlPrefix + "parameter.csv");
+ ServiceDbResource.assertFileContent("parameter export:\n",
+ url,
+ "Annee;Serie;Serie_Partielle;Id_Operation;NumOrdre_Station;Poche;Code_PMFM;Libelle_PMFm;Valeur");
+
+ }
}
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportCruiseAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportCruiseAction.java 2013-09-25 16:36:22 UTC (rev 1226)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportCruiseAction.java 2013-09-25 17:03:03 UTC (rev 1227)
@@ -25,10 +25,12 @@
*/
import com.google.common.base.Preconditions;
+import fr.ifremer.tutti.TuttiBusinessException;
import fr.ifremer.tutti.persistence.ProgressionModel;
import fr.ifremer.tutti.persistence.entities.data.Cruise;
import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol;
import fr.ifremer.tutti.service.export.TuttiExportService;
+import fr.ifremer.tutti.ui.swing.TuttiUIContext;
import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -107,7 +109,12 @@
}
TuttiExportService service = getContext().getTuttiExportService();
- service.exportCruise(cruise.getId(), protocol, file, progressionModel);
+ try {
+ service.exportCruise(cruise.getId(), protocol, file, progressionModel);
+ } catch (TuttiBusinessException e) {
+ String message = _("tutti.exportCruise.action.exportErrors", cruise.getName(), e.getMessage());
+ TuttiUIContext.getErrorHelper().showErrorDialog(message);
+ }
getHandler().resetEditCruiseAction();
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportProgramAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportProgramAction.java 2013-09-25 16:36:22 UTC (rev 1226)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportProgramAction.java 2013-09-25 17:03:03 UTC (rev 1227)
@@ -25,11 +25,13 @@
*/
import com.google.common.base.Preconditions;
+import fr.ifremer.tutti.TuttiBusinessException;
import fr.ifremer.tutti.persistence.ProgressionModel;
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 fr.ifremer.tutti.service.export.TuttiExportService;
+import fr.ifremer.tutti.ui.swing.TuttiUIContext;
import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -109,7 +111,12 @@
}
}
TuttiExportService service = getContext().getTuttiExportService();
- service.exportProgram(program.getId(), protocol, file, progressionModel);
+ try {
+ service.exportProgram(program.getId(), protocol, file, progressionModel);
+ } catch (TuttiBusinessException e) {
+ TuttiBusinessException e2 = new TuttiBusinessException("Des erreurs sont apparues pendant l'élévation des poids<hr/>L'export a cependant été réalisé.", e.getCause());
+ TuttiUIContext.getErrorHelper().showErrorDialog(null, e2);
+ }
getHandler().resetEditProgramAction();
}
Modified: trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties
===================================================================
--- trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-09-25 16:36:22 UTC (rev 1226)
+++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-09-25 17:03:03 UTC (rev 1227)
@@ -1020,6 +1020,7 @@
tutti.error.update.could.not.found.url=
tutti.error.update.could.not.reach.url=
tutti.error.write.startActionFile=could not write action content to file %s
+tutti.exportCruise.action.exportErrors=
tutti.exportCruise.action.success=
tutti.exportCruiseForSumatra.action.chooseFile=
tutti.exportCruiseForSumatra.action.success=
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-09-25 16:36:22 UTC (rev 1226)
+++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-09-25 17:03:03 UTC (rev 1227)
@@ -1022,6 +1022,7 @@
tutti.error.update.could.not.found.url=Mise à jour impossible (l'url <strong>%s</strong> n'existe pas)
tutti.error.update.could.not.reach.url=Mise à jour impossible (l'url <strong>%s</strong> n'est pas joignable)
tutti.error.write.startActionFile=impossible d'écrire dans le fichier %s
+tutti.exportCruise.action.exportErrors=Des erreurs sont apparues pendant l'élévation des poids de la campagne <strong>%s</strong>.<br/>L'export a cependant été réalisé.<hr/>Erreur(s) rencontrée(s) \: <br/>%s
tutti.exportCruise.action.success=La campagne <strong>%s</strong> a été exportée dans le fichier <strong>%s</strong>.
tutti.exportCruiseForSumatra.action.chooseFile=Choisir le fichier d'export
tutti.exportCruiseForSumatra.action.success=Les captures ont correctement été exporté dans le fichier %s
1
0
r1226 - in trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content: . db
by tchemit@users.forge.codelutin.com 25 Sep '13
by tchemit@users.forge.codelutin.com 25 Sep '13
25 Sep '13
Author: tchemit
Date: 2013-09-25 18:36:22 +0200 (Wed, 25 Sep 2013)
New Revision: 1226
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1226
Log:
refs #3317: [TECH] - Mise ?\195?\160 jour de la base de donn?\195?\169es : pas de v?\195?\169rification au lancement (bad check)
Modified:
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/UpdateDbAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/OpenDbAction.java
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/UpdateDbAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/UpdateDbAction.java 2013-09-25 14:49:08 UTC (rev 1225)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/UpdateDbAction.java 2013-09-25 16:36:22 UTC (rev 1226)
@@ -49,8 +49,7 @@
public class UpdateDbAction extends AbstractMainUITuttiAction {
/** Logger. */
- private static final Log log =
- LogFactory.getLog(UpdateDbAction.class);
+ private static final Log log = LogFactory.getLog(UpdateDbAction.class);
protected ApplicationInfo updateDbVersion;
@@ -82,7 +81,7 @@
updateDbVersion =
dbVersions.get(TuttiDbUpdaterCallBack.DB_UPDATE_NAME);
- if (updateDbVersion != null) {
+ if (updateDbVersion != null && updateDbVersion.newVersion != null) {
// ask user if it wants to do the update
String htmlMessage = String.format(
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/OpenDbAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/OpenDbAction.java 2013-09-25 14:49:08 UTC (rev 1225)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/OpenDbAction.java 2013-09-25 16:36:22 UTC (rev 1226)
@@ -110,7 +110,7 @@
updateDbVersion =
dbVersions.get(TuttiDbUpdaterCallBack.DB_UPDATE_NAME);
- if (updateDbVersion != null) {
+ if (updateDbVersion != null && updateDbVersion.newVersion != null) {
// ask user if it wants to do the update
String htmlMessage = String.format(
1
0
r1225 - in trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches: benthos species
by tchemit@users.forge.codelutin.com 25 Sep '13
by tchemit@users.forge.codelutin.com 25 Sep '13
25 Sep '13
Author: tchemit
Date: 2013-09-25 16:49:08 +0200 (Wed, 25 Sep 2013)
New Revision: 1225
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1225
Log:
always allow to create a new root species/bethos batch
Modified:
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUI.css
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUIModel.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
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUI.css
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUI.css 2013-09-25 14:22:24 UTC (rev 1224)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUI.css 2013-09-25 14:49:08 UTC (rev 1225)
@@ -267,6 +267,5 @@
text: "tutti.editBenthosBatch.action.createBatch";
toolTipText: "tutti.editBenthosBatch.action.createBatch.tip";
i18nMnemonic: "tutti.editBenthosBatch.action.createBatch.mnemonic";
- enabled: {model.isCreateBatchEnabled()};
_help: {"tutti.editBenthosBatch.action.createBatch.help"};
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUIHandler.java 2013-09-25 14:22:24 UTC (rev 1224)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUIHandler.java 2013-09-25 14:49:08 UTC (rev 1225)
@@ -453,8 +453,6 @@
protected void beforeOpenPopup(int rowIndex, int columnIndex) {
super.beforeOpenPopup(rowIndex, columnIndex);
- boolean enableAdd = true;
-
boolean enableRename = false;
boolean enableSplit = false;
boolean enableChangeSampleCategory = false;
@@ -587,7 +585,6 @@
}
}
BenthosBatchUIModel model = getModel();
- model.setCreateBatchEnabled(enableAdd);
model.setSplitBatchEnabled(enableSplit);
model.setChangeSampleCategoryEnabled(enableChangeSampleCategory);
model.setRemoveBatchEnabled(enableRemove);
@@ -596,9 +593,8 @@
model.setCreateMelagEnabled(enableCreateMelag);
model.setEditFrequenciesEnabled(enableEditFrequencies);
- if (log.isInfoEnabled()) {
+ if (log.isDebugEnabled()) {
StringBuilder builder = new StringBuilder("actions for (" + rowIndex + "," + columnIndex + "):");
- builder.append("\nenableAdd: ").append(enableAdd);
builder.append("\nenableSplit: ").append(enableSplit);
builder.append("\nenableChangeSampleCategory: ").append(enableChangeSampleCategory);
builder.append("\nenableRemove: ").append(enableRemove);
@@ -606,7 +602,7 @@
builder.append("\nenableRename: ").append(enableRename);
builder.append("\nenableCreateMelag: ").append(enableCreateMelag);
builder.append("\nenableEditFrequencies: ").append(enableEditFrequencies);
- log.info(builder.toString());
+ log.debug(builder.toString());
}
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUIModel.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUIModel.java 2013-09-25 14:22:24 UTC (rev 1224)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUIModel.java 2013-09-25 14:49:08 UTC (rev 1225)
@@ -47,8 +47,6 @@
public static final String PROPERTY_TABLE_VIEW_MODE = "tableViewMode";
- public static final String PROPERTY_CREATE_BATCH_ENABLED = "createBatchEnabled";
-
public static final String PROPERTY_SPLIT_BATCH_ENABLED = "splitBatchEnabled";
public static final String PROPERTY_CHANGE_SAMPLE_CATEGORY_ENABLED = "changeSampleCategoryEnabled";
@@ -74,13 +72,6 @@
public static final String PROPERTY_LEAF_NUMBER = "leafNumber";
/**
- * Can user create a new species batch ?
- *
- * @since 0.3
- */
- protected boolean createBatchEnabled;
-
- /**
* Can user split a selected species batch ?
*
* @since 0.3
@@ -304,15 +295,6 @@
firePropertyChange(PROPERTY_LEAF_NUMBER, oldValue, leafNumber);
}
- public boolean isCreateBatchEnabled() {
- return createBatchEnabled;
- }
-
- public void setCreateBatchEnabled(boolean createBatchEnabled) {
- this.createBatchEnabled = createBatchEnabled;
- firePropertyChange(PROPERTY_CREATE_BATCH_ENABLED, null, createBatchEnabled);
- }
-
public boolean isSplitBatchEnabled() {
return splitBatchEnabled;
}
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-09-25 14:22:24 UTC (rev 1224)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.css 2013-09-25 14:49:08 UTC (rev 1225)
@@ -276,6 +276,5 @@
text: "tutti.editSpeciesBatch.action.createBatch";
toolTipText: "tutti.editSpeciesBatch.action.createBatch.tip";
i18nMnemonic: "tutti.editSpeciesBatch.action.createBatch.mnemonic";
- enabled: {model.isCreateBatchEnabled()};
_help: {"tutti.editSpeciesBatch.action.createBatch.help"};
}
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-09-25 14:22:24 UTC (rev 1224)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java 2013-09-25 14:49:08 UTC (rev 1225)
@@ -456,8 +456,6 @@
protected void beforeOpenPopup(int rowIndex, int columnIndex) {
super.beforeOpenPopup(rowIndex, columnIndex);
- boolean enableAdd = true;
-
boolean enableRename = false;
boolean enableSplit = false;
boolean enableChangeSampleCategory = false;
@@ -590,7 +588,6 @@
}
}
SpeciesBatchUIModel model = getModel();
- model.setCreateBatchEnabled(enableAdd);
model.setSplitBatchEnabled(enableSplit);
model.setChangeSampleCategoryEnabled(enableChangeSampleCategory);
model.setRemoveBatchEnabled(enableRemove);
@@ -601,7 +598,6 @@
if (log.isInfoEnabled()) {
StringBuilder builder = new StringBuilder("actions for (" + rowIndex + "," + columnIndex + "):");
- builder.append("\nenableAdd: ").append(enableAdd);
builder.append("\nenableSplit: ").append(enableSplit);
builder.append("\nenableChangeSampleCategory: ").append(enableChangeSampleCategory);
builder.append("\nenableRemove: ").append(enableRemove);
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-09-25 14:22:24 UTC (rev 1224)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIModel.java 2013-09-25 14:49:08 UTC (rev 1225)
@@ -45,8 +45,6 @@
private static final long serialVersionUID = 1L;
- public static final String PROPERTY_CREATE_BATCH_ENABLED = "createBatchEnabled";
-
public static final String PROPERTY_SPLIT_BATCH_ENABLED = "splitBatchEnabled";
public static final String PROPERTY_CHANGE_SAMPLE_CATEGORY_ENABLED = "changeSampleCategoryEnabled";
@@ -74,13 +72,6 @@
public static final String PROPERTY_LEAF_NUMBER = "leafNumber";
/**
- * Can user create a new species batch ?
- *
- * @since 0.3
- */
- protected boolean createBatchEnabled;
-
- /**
* Can user split a selected species batch ?
*
* @since 0.3
@@ -286,15 +277,6 @@
firePropertyChange(PROPERTY_LEAF_NUMBER, oldValue, leafNumber);
}
- public boolean isCreateBatchEnabled() {
- return createBatchEnabled;
- }
-
- public void setCreateBatchEnabled(boolean createBatchEnabled) {
- this.createBatchEnabled = createBatchEnabled;
- firePropertyChange(PROPERTY_CREATE_BATCH_ENABLED, null, createBatchEnabled);
- }
-
public boolean isSplitBatchEnabled() {
return splitBatchEnabled;
}
1
0
r1224 - in trunk/tutti-service/src: main/java/fr/ifremer/tutti/service main/java/fr/ifremer/tutti/service/export test/java/fr/ifremer/tutti/service/export
by tchemit@users.forge.codelutin.com 25 Sep '13
by tchemit@users.forge.codelutin.com 25 Sep '13
25 Sep '13
Author: tchemit
Date: 2013-09-25 16:22:24 +0200 (Wed, 25 Sep 2013)
New Revision: 1224
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1224
Log:
fixes #3314: [EXPORT GENERIQUE] erreur ?\195?\160 l'export si pas d'engin affect?\195?\169 sur l'op?\195?\169ration
Modified:
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiCsvUtil.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/OperationExportModel.java
trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/TuttiExportServiceTest.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-09-25 13:31:19 UTC (rev 1223)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiCsvUtil.java 2013-09-25 14:22:24 UTC (rev 1224)
@@ -159,6 +159,10 @@
return modelBuilder.newColumnForExport(headerName, new BeanNullableGetter<M, T>(propertyName), valueFormatter);
}
+ public ExportableColumn<M, String> newNullableColumnForExport(String headerName, String propertyName, String nullValue) {
+ return newNullableColumnForExport(headerName, propertyName, newStringParserFormatter2(nullValue, true));
+ }
+
public ExportableColumn<M, String> newNullableColumnForExport(String headerName, String propertyName) {
return newNullableColumnForExport(headerName, propertyName, TuttiCsvUtil.STRING);
}
@@ -173,6 +177,33 @@
}
+ public static ValueParserFormatter<String> newStringParserFormatter2(String defaultValue, boolean nullAllowed) {
+ return new StringParserFormatter2(defaultValue, nullAllowed);
+ }
+
+ public static class StringParserFormatter2 extends Common.NullableParserFormatter<String> {
+
+ public StringParserFormatter2(String defaultValue, boolean nullAllowed) {
+ super(defaultValue, nullAllowed);
+ }
+
+ @Override
+ public String format(String value) {
+ String str;
+ if (value == null) {
+ str = defaultValue;
+ } else {
+ str = String.valueOf(value);
+ }
+ return str;
+ }
+
+ @Override
+ protected String parseNoneEmptyValue(String value) {
+ return value;
+ }
+ }
+
public static class StringParserFormatter extends Common.NullableParserFormatter<String> {
public StringParserFormatter(String defaultValue, boolean nullAllowed) {
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/OperationExportModel.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/OperationExportModel.java 2013-09-25 13:31:19 UTC (rev 1223)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/OperationExportModel.java 2013-09-25 14:22:24 UTC (rev 1224)
@@ -65,7 +65,7 @@
newColumnForExport("Numero_Trait", FishingOperation.PROPERTY_FISHING_OPERATION_NUMBER, TuttiCsvUtil.INTEGER);
newColumnForExport("Poche", FishingOperation.PROPERTY_MULTIRIG_AGGREGATION);
- newColumnForExport("Engin", FishingOperation.PROPERTY_GEAR, Gear.PROPERTY_NAME);
+ newNullableColumnForExport("Engin", FishingOperation.PROPERTY_GEAR + "." + Gear.PROPERTY_NAME, "?");
newColumnForExport("Navire", FishingOperation.PROPERTY_VESSEL, TuttiCsvUtil.VESSEL_VALUE_FORMATTER);
newColumnForExport("DateDeb_Op", FishingOperation.PROPERTY_GEAR_SHOOTING_START_DATE, TuttiCsvUtil.DAY_TIME_SECOND);
newColumnForExport("LatDeb", FishingOperation.PROPERTY_GEAR_SHOOTING_START_LATITUDE, TuttiCsvUtil.FLOAT);
Modified: trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/TuttiExportServiceTest.java
===================================================================
--- trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/TuttiExportServiceTest.java 2013-09-25 13:31:19 UTC (rev 1223)
+++ trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/TuttiExportServiceTest.java 2013-09-25 14:22:24 UTC (rev 1224)
@@ -79,6 +79,10 @@
"Annee;Serie;Serie_Partielle;Code_Station;Numero_Trait;Poche;Engin;Navire;DateDeb_Op;LatDeb;LongDeb;DateFin_Op;LatFin;LongFin;Duree;Strate;Sous-Strate;Localite;Validite_OP;Rectiligne;Distance;Ouv_Verticale;Ouv_Horizontale_Ailes;Ouv_Horizontale_Panneaux;Saisisseur;Commentaire;Poids_Total;Poids_Total_Calcule;Poids_Total_Vrac;Poids_Total_Vrac_Calcule;Poids_Total_HorsVrac;Poids_Total_HorsVrac_Calcule;Poids_Total_Non_Trie;Poids_Total_Non_Trie_Calcule;Poids_Total_Tremis;Poids_Total_Tremis_Calcule;Poids_Total_Carroussel;Poids_Total_Carroussel_Calcule;Poids_Total_Espece;Poids_Total_Espece_Calcule;Poids_Total_Espece_Vrac;Poids_Total_Espece_Vrac_Calcule;Poids_Total_Espece_Vrac_Trie;Poids_Total_Espece_Vrac_Trie_Calcule;Poids_Total_Espece_HorsVrac;Poids_Total_Espece_HorsVrac_Calcule;Poids_Total_Espece_Inerte_Trie;Poids_Total_Espece_Inerte_Trie_Calcule;Poids_Total_Espece_Vivant_non_detaille_trie;Poids_Total_Espece_Vivant_non_detaille_trie_Calcule;Poids_Total_Benthos;Poids_Total_Benthos_Calcule;Poids_Total_Benthos_Vrac;Poids_Total_Benthos_Vrac_Calcule;Poids_Total_Benthos_Vrac_Trie;Poids_Total_Benthos_Vrac_Trie_Calcule;Poids_Total_Benthos_HorsVrac;Poids_Total_Benthos_HorsVrac_Calcule;Poids_Total_Benthos_Inerte_Trie;Poids_Total_Benthos_Inerte_Trie_Calcule;Poids_Total_Benthos_Vivant_non_detaille_trie;Poids_Total_Benthos_Vivant_non_detaille_trie_Calcule;Poids_Total_Macro_Dechet;Poids_Total_Macro_Dechet_Calcule\n" +
"2010;Campagne CGFS;;65;65;1;GOV 19.7/25.9;278970;13/10/2010 13:35:00;50.22833;0.31833;13/10/2010 14:05:00;50.22167;0.28333;30;Strate 4J;NA;Localité 4J2;N;Y;2512.0;NA;NA;NA;;avarie - chalut annulé completement à poil;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;";
+ public static final String OPERATION_WITH_NO_CATCH_CONTENT_AND_NO_GEAR =
+ "Annee;Serie;Serie_Partielle;Code_Station;Numero_Trait;Poche;Engin;Navire;DateDeb_Op;LatDeb;LongDeb;DateFin_Op;LatFin;LongFin;Duree;Strate;Sous-Strate;Localite;Validite_OP;Rectiligne;Distance;Ouv_Verticale;Ouv_Horizontale_Ailes;Ouv_Horizontale_Panneaux;Saisisseur;Commentaire;Poids_Total;Poids_Total_Calcule;Poids_Total_Vrac;Poids_Total_Vrac_Calcule;Poids_Total_HorsVrac;Poids_Total_HorsVrac_Calcule;Poids_Total_Non_Trie;Poids_Total_Non_Trie_Calcule;Poids_Total_Tremis;Poids_Total_Tremis_Calcule;Poids_Total_Carroussel;Poids_Total_Carroussel_Calcule;Poids_Total_Espece;Poids_Total_Espece_Calcule;Poids_Total_Espece_Vrac;Poids_Total_Espece_Vrac_Calcule;Poids_Total_Espece_Vrac_Trie;Poids_Total_Espece_Vrac_Trie_Calcule;Poids_Total_Espece_HorsVrac;Poids_Total_Espece_HorsVrac_Calcule;Poids_Total_Espece_Inerte_Trie;Poids_Total_Espece_Inerte_Trie_Calcule;Poids_Total_Espece_Vivant_non_detaille_trie;Poids_Total_Espece_Vivant_non_detaille_trie_Calcule;Poids_Total_Benthos;Poids_Total_Benthos_Calcule;Poids_Total_Benthos_Vrac;Poids_Total_Benthos_Vrac_Calcule;Poids_Total_Benthos_Vrac_Trie;Poids_Total_Benthos_Vrac_Trie_Calcule;Poids_Total_Benthos_HorsVrac;Poids_Total_Benthos_HorsVrac_Calcule;Poids_Total_Benthos_Inerte_Trie;Poids_Total_Benthos_Inerte_Trie_Calcule;Poids_Total_Benthos_Vivant_non_detaille_trie;Poids_Total_Benthos_Vivant_non_detaille_trie_Calcule;Poids_Total_Macro_Dechet;Poids_Total_Macro_Dechet_Calcule\n" +
+ "2010;Campagne CGFS;;65;65;1;?;278970;13/10/2010 13:35:00;50.22833;0.31833;13/10/2010 14:05:00;50.22167;0.28333;30;Strate 4J;NA;Localité 4J2;N;Y;2512.0;NA;NA;NA;;avarie - chalut annulé completement à poil;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;";
+
public static final String OPERATION_CONTENT =
"Annee;Serie;Serie_Partielle;Code_Station;Numero_Trait;Poche;Engin;Navire;DateDeb_Op;LatDeb;LongDeb;DateFin_Op;LatFin;LongFin;Duree;Strate;Sous-Strate;Localite;Validite_OP;Rectiligne;Distance;Ouv_Verticale;Ouv_Horizontale_Ailes;Ouv_Horizontale_Panneaux;Saisisseur;Commentaire;Poids_Total;Poids_Total_Calcule;Poids_Total_Vrac;Poids_Total_Vrac_Calcule;Poids_Total_HorsVrac;Poids_Total_HorsVrac_Calcule;Poids_Total_Non_Trie;Poids_Total_Non_Trie_Calcule;Poids_Total_Tremis;Poids_Total_Tremis_Calcule;Poids_Total_Carroussel;Poids_Total_Carroussel_Calcule;Poids_Total_Espece;Poids_Total_Espece_Calcule;Poids_Total_Espece_Vrac;Poids_Total_Espece_Vrac_Calcule;Poids_Total_Espece_Vrac_Trie;Poids_Total_Espece_Vrac_Trie_Calcule;Poids_Total_Espece_HorsVrac;Poids_Total_Espece_HorsVrac_Calcule;Poids_Total_Espece_Inerte_Trie;Poids_Total_Espece_Inerte_Trie_Calcule;Poids_Total_Espece_Vivant_non_detaille_trie;Poids_Total_Espece_Vivant_non_detaille_trie_Calcule;Poids_Total_Benthos;Poids_Total_Benthos_Calcule;Poids_Total_Benthos_Vrac;Poids_Total_Benthos_Vrac_Calcule;Poids_Total_Benthos_Vrac_Trie;Poids_Total_Benthos_Vrac_Trie_Calcule;Poids_Total_Benthos_HorsVrac;Poids_Total_Benthos_HorsVrac_Calcule;Poids_Total_Benthos_Inerte_Trie;Poids_Total_Benthos_Inerte_Trie_Calcule;Poids_Total_Benthos_Vivant_non_detaille_trie;Poids_Total_Benthos_Vivant_non_detaille_trie_Calcule;Poids_Total_Macro_Dechet;Poids_Total_Macro_Dechet_Calcule\n" +
"2013;Campagne CGFS;;A;1;1;GOV 19.7/25.9;278970;01/05/2013 00:00:00;;;01/05/2013 00:23:00;;;23;Strate 1D;NA;Localité 1D2;?;N;;NA;NA;NA;Vincent AURECHE;op1;120.0;Y;100.0;Y;20.0;Y;0.0;Y;;?;;?;120.0;Y;100.0;Y;100.0;Y;20.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;6.0;Y;\n" +
@@ -318,6 +322,29 @@
}
@Test
+ public void exportOperationsWithNoGear() throws Exception {
+
+ dataContext = dbResource.loadContext(PROGRAM_ID, CRUISE_CGFS_ID, NB_EXPECTED_CGFS_OPERATIONS);
+
+ FishingOperation operation = TuttiEntities.findById(dataContext.operations, "100105");
+ operation.setGear(null);
+ dataContext.operations = Lists.newArrayList(operation);
+
+ TuttiExportService.ExportContext exportContext =
+ service.createExportContext(dataDirectory, null);
+
+ try {
+ service.exportOperations(exportContext, dataContext.cruise, dataContext.operations);
+ } finally {
+ exportContext.close();
+ }
+
+ ServiceDbResource.assertFileContent("Operation export:\n",
+ exportContext.operationFile,
+ OPERATION_WITH_NO_CATCH_CONTENT_AND_NO_GEAR);
+ }
+
+ @Test
public void exportParameters() throws Exception {
TuttiExportService.ExportContext exportContext =
1
0