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
October 2013
- 5 participants
- 76 discussions
r1297 - in trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches: benthos/frequency species/frequency
by tchemit@users.forge.codelutin.com 14 Oct '13
by tchemit@users.forge.codelutin.com 14 Oct '13
14 Oct '13
Author: tchemit
Date: 2013-10-14 19:42:10 +0200 (Mon, 14 Oct 2013)
New Revision: 1297
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1297
Log:
refs #3098: Une erreur s'est produite: Column index out of range
refs #3502: Row index out of range
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/BenthosFrequencyUIHandler.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
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-10-14 17:36:22 UTC (rev 1296)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyCellComponent.java 2013-10-14 17:42:10 UTC (rev 1297)
@@ -31,7 +31,7 @@
import fr.ifremer.tutti.ui.swing.content.operation.catches.benthos.BenthosBatchTableModel;
import fr.ifremer.tutti.ui.swing.content.operation.catches.benthos.BenthosBatchUI;
import fr.ifremer.tutti.ui.swing.util.TuttiComputedOrNotData;
-import fr.ifremer.tutti.ui.swing.util.table.AbstractSelectTableAction;
+import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil;
import fr.ifremer.tutti.ui.swing.util.table.ColumnIdentifier;
import jaxx.runtime.SwingUtil;
import org.apache.commons.logging.Log;
@@ -264,7 +264,7 @@
stopCellEditing();
// reselect this cell
- AbstractSelectTableAction.doSelectCell(table, r, c);
+ TuttiUIUtil.doSelectCell(table, r, c);
table.requestFocus();
} else {
@@ -284,7 +284,7 @@
editRow = tableModel.getEntry(rowIndex);
// will save the previous row in the species row
- AbstractSelectTableAction.doSelectCell(table, rowIndex, c);
+ TuttiUIUtil.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-10-14 17:36:22 UTC (rev 1296)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyUIHandler.java 2013-10-14 17:42:10 UTC (rev 1297)
@@ -41,7 +41,6 @@
import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor;
import fr.ifremer.tutti.ui.swing.util.TuttiUI;
import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil;
-import fr.ifremer.tutti.ui.swing.util.table.AbstractSelectTableAction;
import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIHandler;
import jaxx.runtime.SwingUtil;
import jaxx.runtime.swing.editor.bean.BeanFilterableComboBox;
@@ -447,7 +446,7 @@
model.setRows(rows);
// select first cell in table (see http://forge.codelutin.com/issues/2496)
- AbstractSelectTableAction.doSelectCell(getUI().getTable(), 0, 1);
+ TuttiUIUtil.doSelectCell(getUI().getTable(), 0, 1);
}
public void applyRafaleStep(Float step) {
@@ -692,7 +691,7 @@
message);
// focus to first error row
- AbstractSelectTableAction.doSelectCell(getTable(), index, 0);
+ TuttiUIUtil.selectFirstCellOnRow(getTable(), index);
return;
}
@@ -733,7 +732,7 @@
message);
// focus to first error row
- AbstractSelectTableAction.doSelectCell(getTable(), index, 0);
+ TuttiUIUtil.selectFirstCellOnRow(getTable(), index);
return;
}
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-10-14 17:36:22 UTC (rev 1296)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyCellComponent.java 2013-10-14 17:42:10 UTC (rev 1297)
@@ -31,7 +31,7 @@
import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchTableModel;
import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchUI;
import fr.ifremer.tutti.ui.swing.util.TuttiComputedOrNotData;
-import fr.ifremer.tutti.ui.swing.util.table.AbstractSelectTableAction;
+import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil;
import fr.ifremer.tutti.ui.swing.util.table.ColumnIdentifier;
import jaxx.runtime.SwingUtil;
import org.apache.commons.logging.Log;
@@ -264,7 +264,7 @@
stopCellEditing();
// reselect this cell
- AbstractSelectTableAction.doSelectCell(table, r, c);
+ TuttiUIUtil.doSelectCell(table, r, c);
table.requestFocus();
} else {
@@ -284,7 +284,7 @@
editRow = tableModel.getEntry(rowIndex);
// will save the previous row in the species row
- AbstractSelectTableAction.doSelectCell(table, rowIndex, c);
+ TuttiUIUtil.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-10-14 17:36:22 UTC (rev 1296)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java 2013-10-14 17:42:10 UTC (rev 1297)
@@ -42,7 +42,6 @@
import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor;
import fr.ifremer.tutti.ui.swing.util.TuttiUI;
import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil;
-import fr.ifremer.tutti.ui.swing.util.table.AbstractSelectTableAction;
import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIHandler;
import jaxx.runtime.SwingUtil;
import jaxx.runtime.swing.editor.bean.BeanFilterableComboBox;
@@ -444,7 +443,7 @@
model.setRows(rows);
// select first cell in table (see http://forge.codelutin.com/issues/2496)
- AbstractSelectTableAction.doSelectCell(getUI().getTable(), 0, 1);
+ TuttiUIUtil.doSelectCell(getUI().getTable(), 0, 1);
}
public void applyRafaleStep(Float step) {
@@ -690,7 +689,7 @@
message);
// focus to first error row
- AbstractSelectTableAction.doSelectCell(getTable(), index, 0);
+ TuttiUIUtil.selectFirstCellOnRow(getTable(), index);
return;
}
@@ -731,7 +730,7 @@
message);
// focus to first error row
- AbstractSelectTableAction.doSelectCell(getTable(), index, 0);
+ TuttiUIUtil.selectFirstCellOnRow(getTable(), index);
return;
}
1
0
r1296 - in trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing: content/operation/catches/accidental content/operation/catches/individualobservation content/operation/catches/marinelitter util/caracteristics util/table
by tchemit@users.forge.codelutin.com 14 Oct '13
by tchemit@users.forge.codelutin.com 14 Oct '13
14 Oct '13
Author: tchemit
Date: 2013-10-14 19:36:22 +0200 (Mon, 14 Oct 2013)
New Revision: 1296
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1296
Log:
fixes #3502: Row index out of range
fixes #3098: Une erreur s'est produite: Column index out of range
Modified:
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/RemoveAccidentalBatchAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/RemoveAllIndividualObservationBatchAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/RemoveIndividualObservationBatchAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/MarineLitterBatchUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/RemoveMarineLitterBatchAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/caracteristics/CaracteristicMapCellComponent.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractSelectTableAction.java
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUIHandler.java 2013-10-14 17:35:01 UTC (rev 1295)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUIHandler.java 2013-10-14 17:36:22 UTC (rev 1296)
@@ -45,6 +45,7 @@
import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchTableModel;
import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor;
import fr.ifremer.tutti.ui.swing.util.TuttiUI;
+import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil;
import fr.ifremer.tutti.ui.swing.util.attachment.AttachmentCellEditor;
import fr.ifremer.tutti.ui.swing.util.attachment.AttachmentCellRenderer;
import fr.ifremer.tutti.ui.swing.util.caracteristics.CaracteristicMapCellComponent;
@@ -52,7 +53,6 @@
import fr.ifremer.tutti.ui.swing.util.caracteristics.CaracteristicMapEditorUI;
import fr.ifremer.tutti.ui.swing.util.comment.CommentCellEditor;
import fr.ifremer.tutti.ui.swing.util.comment.CommentCellRenderer;
-import fr.ifremer.tutti.ui.swing.util.table.AbstractSelectTableAction;
import fr.ifremer.tutti.ui.swing.util.table.ColumnIdentifier;
import jaxx.runtime.SwingUtil;
import jaxx.runtime.validator.swing.SwingValidator;
@@ -409,7 +409,7 @@
saveRow(newRow);
tableModel.addNewRow(newRow);
- AbstractSelectTableAction.doSelectCell(getTable(), tableModel.getRowCount() - 1, 0);
+ TuttiUIUtil.selectFirstCellOnLastRow(getTable());
}
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/RemoveAccidentalBatchAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/RemoveAccidentalBatchAction.java 2013-10-14 17:35:01 UTC (rev 1295)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/RemoveAccidentalBatchAction.java 2013-10-14 17:36:22 UTC (rev 1296)
@@ -25,8 +25,8 @@
import com.google.common.base.Preconditions;
import fr.ifremer.tutti.persistence.TuttiPersistence;
import fr.ifremer.tutti.persistence.entities.TuttiEntities;
+import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil;
import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction;
-import fr.ifremer.tutti.ui.swing.util.table.AbstractSelectTableAction;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jdesktop.swingx.JXTable;
@@ -107,16 +107,6 @@
tableModel.removeRow(rowIndex);
- if (!tableModel.getRows().isEmpty()) {
-
- // select first row
- AbstractSelectTableAction.doSelectCell(table, 0, 0);
- }
-
- if (table.isEditing()) {
-
- // but no edit it
- table.getCellEditor().stopCellEditing();
- }
+ TuttiUIUtil.selectFirstCellOnFirstRowAndStopEditing(table);
}
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java 2013-10-14 17:35:01 UTC (rev 1295)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java 2013-10-14 17:36:22 UTC (rev 1296)
@@ -47,6 +47,7 @@
import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyRowModel;
import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor;
import fr.ifremer.tutti.ui.swing.util.TuttiUI;
+import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil;
import fr.ifremer.tutti.ui.swing.util.attachment.AttachmentCellEditor;
import fr.ifremer.tutti.ui.swing.util.attachment.AttachmentCellRenderer;
import fr.ifremer.tutti.ui.swing.util.caracteristics.CaracteristicMapCellComponent;
@@ -54,7 +55,6 @@
import fr.ifremer.tutti.ui.swing.util.caracteristics.CaracteristicMapEditorUI;
import fr.ifremer.tutti.ui.swing.util.comment.CommentCellEditor;
import fr.ifremer.tutti.ui.swing.util.comment.CommentCellRenderer;
-import fr.ifremer.tutti.ui.swing.util.table.AbstractSelectTableAction;
import fr.ifremer.tutti.ui.swing.util.table.CaracteristicColumnIdentifier;
import fr.ifremer.tutti.ui.swing.util.table.ColumnIdentifier;
import jaxx.runtime.SwingUtil;
@@ -657,9 +657,7 @@
tableModel.addNewRow(newRow);
}
- AbstractSelectTableAction.doSelectCell(getTable(),
- tableModel.getRowCount() - 1,
- 0);
+ TuttiUIUtil.selectFirstCellOnLastRow(getTable());
}
} else {
@@ -676,9 +674,7 @@
saveRow(newRow);
tableModel.addNewRow(newRow);
- AbstractSelectTableAction.doSelectCell(getTable(),
- tableModel.getRowCount() - 1,
- 0);
+ TuttiUIUtil.selectFirstCellOnLastRow(getTable());
}
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/RemoveAllIndividualObservationBatchAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/RemoveAllIndividualObservationBatchAction.java 2013-10-14 17:35:01 UTC (rev 1295)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/RemoveAllIndividualObservationBatchAction.java 2013-10-14 17:36:22 UTC (rev 1296)
@@ -29,8 +29,8 @@
import fr.ifremer.tutti.persistence.TuttiPersistence;
import fr.ifremer.tutti.persistence.entities.TuttiEntities;
import fr.ifremer.tutti.persistence.entities.referential.Species;
+import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil;
import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction;
-import fr.ifremer.tutti.ui.swing.util.table.AbstractSelectTableAction;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jdesktop.swingx.JXTable;
@@ -148,16 +148,6 @@
tableModel.removeRow(rowIndex);
}
- if (!tableModel.getRows().isEmpty()) {
-
- // select first row
- AbstractSelectTableAction.doSelectCell(table, 0, 0);
- }
-
- if (table.isEditing()) {
-
- // but no edit it
- table.getCellEditor().stopCellEditing();
- }
+ TuttiUIUtil.selectFirstCellOnFirstRowAndStopEditing(table);
}
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/RemoveIndividualObservationBatchAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/RemoveIndividualObservationBatchAction.java 2013-10-14 17:35:01 UTC (rev 1295)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/RemoveIndividualObservationBatchAction.java 2013-10-14 17:36:22 UTC (rev 1296)
@@ -25,8 +25,8 @@
import com.google.common.base.Preconditions;
import fr.ifremer.tutti.persistence.TuttiPersistence;
import fr.ifremer.tutti.persistence.entities.TuttiEntities;
+import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil;
import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction;
-import fr.ifremer.tutti.ui.swing.util.table.AbstractSelectTableAction;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jdesktop.swingx.JXTable;
@@ -108,16 +108,6 @@
tableModel.removeRow(rowIndex);
- if (!tableModel.getRows().isEmpty()) {
-
- // select first row
- AbstractSelectTableAction.doSelectCell(table, 0, 0);
- }
-
- if (table.isEditing()) {
-
- // but no edit it
- table.getCellEditor().stopCellEditing();
- }
+ TuttiUIUtil.selectFirstCellOnFirstRowAndStopEditing(table);
}
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/MarineLitterBatchUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/MarineLitterBatchUIHandler.java 2013-10-14 17:35:01 UTC (rev 1295)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/MarineLitterBatchUIHandler.java 2013-10-14 17:36:22 UTC (rev 1296)
@@ -43,11 +43,11 @@
import fr.ifremer.tutti.ui.swing.content.operation.catches.marinelitter.create.CreateMarineLitterBatchUIModel;
import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor;
import fr.ifremer.tutti.ui.swing.util.TuttiUI;
+import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil;
import fr.ifremer.tutti.ui.swing.util.attachment.AttachmentCellEditor;
import fr.ifremer.tutti.ui.swing.util.attachment.AttachmentCellRenderer;
import fr.ifremer.tutti.ui.swing.util.comment.CommentCellEditor;
import fr.ifremer.tutti.ui.swing.util.comment.CommentCellRenderer;
-import fr.ifremer.tutti.ui.swing.util.table.AbstractSelectTableAction;
import fr.ifremer.tutti.ui.swing.util.table.ColumnIdentifier;
import jaxx.runtime.SwingUtil;
import jaxx.runtime.validator.swing.SwingValidator;
@@ -357,7 +357,7 @@
saveRow(newRow);
tableModel.addNewRow(newRow);
- AbstractSelectTableAction.doSelectCell(getTable(), tableModel.getRowCount() - 1, 0);
+ TuttiUIUtil.selectFirstCellOnLastRow(getTable());
//update categories used
addToMarineLitterCategoriesUsed(newRow);
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/RemoveMarineLitterBatchAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/RemoveMarineLitterBatchAction.java 2013-10-14 17:35:01 UTC (rev 1295)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/RemoveMarineLitterBatchAction.java 2013-10-14 17:36:22 UTC (rev 1296)
@@ -28,8 +28,8 @@
import fr.ifremer.tutti.persistence.TuttiPersistence;
import fr.ifremer.tutti.persistence.entities.TuttiEntities;
import fr.ifremer.tutti.ui.swing.content.operation.catches.species.RemoveSpeciesSubBatchAction;
+import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil;
import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction;
-import fr.ifremer.tutti.ui.swing.util.table.AbstractSelectTableAction;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jdesktop.swingx.JXTable;
@@ -118,16 +118,6 @@
tableModel.removeRow(rowIndex);
- if (!tableModel.getRows().isEmpty()) {
-
- // select first row
- AbstractSelectTableAction.doSelectCell(table, 0, 0);
- }
-
- if (table.isEditing()) {
-
- // but no edit it
- table.getCellEditor().stopCellEditing();
- }
+ TuttiUIUtil.selectFirstCellOnFirstRowAndStopEditing(table);
}
}
\ No newline at end of file
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/caracteristics/CaracteristicMapCellComponent.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/caracteristics/CaracteristicMapCellComponent.java 2013-10-14 17:35:01 UTC (rev 1295)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/caracteristics/CaracteristicMapCellComponent.java 2013-10-14 17:36:22 UTC (rev 1296)
@@ -29,7 +29,7 @@
import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue;
import fr.ifremer.tutti.ui.swing.TuttiUIContext;
import fr.ifremer.tutti.ui.swing.util.TuttiUI;
-import fr.ifremer.tutti.ui.swing.util.table.AbstractSelectTableAction;
+import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil;
import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableModel;
import jaxx.runtime.SwingUtil;
import org.apache.commons.collections.MapUtils;
@@ -226,7 +226,7 @@
stopCellEditing();
// reselect this cell
- AbstractSelectTableAction.doSelectCell(table, r, c);
+ TuttiUIUtil.doSelectCell(table, r, c);
table.requestFocus();
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractSelectTableAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractSelectTableAction.java 2013-10-14 17:35:01 UTC (rev 1295)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractSelectTableAction.java 2013-10-14 17:36:22 UTC (rev 1296)
@@ -24,6 +24,7 @@
* #L%
*/
+import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -44,15 +45,6 @@
private static final Log log =
LogFactory.getLog(AbstractSelectTableAction.class);
- public static void doSelectCell(JTable table,
- int rowIndex,
- int columnIndex) {
-
- table.setColumnSelectionInterval(columnIndex, columnIndex);
- table.setRowSelectionInterval(rowIndex, rowIndex);
- table.editCellAt(rowIndex, columnIndex);
- }
-
private final M model;
private final JTable table;
@@ -68,7 +60,7 @@
log.debug("Will select cell at " +
getCellCoordinate(rowIndex, columnIndex));
}
- doSelectCell(table, rowIndex, columnIndex);
+ TuttiUIUtil.doSelectCell(table, rowIndex, columnIndex);
}
protected int getSelectedRow() {
1
0
Author: tchemit
Date: 2013-10-14 19:35:01 +0200 (Mon, 14 Oct 2013)
New Revision: 1295
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1295
Log:
add bluecove dependencies
Modified:
trunk/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2013-10-14 17:34:01 UTC (rev 1294)
+++ trunk/pom.xml 2013-10-14 17:35:01 UTC (rev 1295)
@@ -140,6 +140,8 @@
<adagioVersion>3.4</adagioVersion>
<!--<adagioVersion>3.4.1-SNAPSHOT</adagioVersion>-->
+ <bluecoveVersion>2.1.0</bluecoveVersion>
+
<i18n.bundles>fr_FR,en_GB</i18n.bundles>
<i18n.silent>true</i18n.silent>
@@ -448,6 +450,18 @@
<scope>compile</scope>
</dependency>
+ <dependency>
+ <groupId>net.sf.bluecove</groupId>
+ <artifactId>bluecove</artifactId>
+ <version>${bluecoveVersion}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>net.sf.bluecove</groupId>
+ <artifactId>bluecove-gpl</artifactId>
+ <version>${bluecoveVersion}</version>
+ </dependency>
+
</dependencies>
</dependencyManagement>
1
0
r1294 - trunk/tutti-service/src/main/java/fr/ifremer/tutti/service
by tchemit@users.forge.codelutin.com 14 Oct '13
by tchemit@users.forge.codelutin.com 14 Oct '13
14 Oct '13
Author: tchemit
Date: 2013-10-14 19:34:01 +0200 (Mon, 14 Oct 2013)
New Revision: 1294
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1294
Log:
get the expression of a decorator
Modified:
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDecorator.java
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDecorator.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDecorator.java 2013-10-14 16:35:28 UTC (rev 1293)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDecorator.java 2013-10-14 17:34:01 UTC (rev 1294)
@@ -282,6 +282,8 @@
return result;
}
-
+ public String getExpression() {
+ return expression;
+ }
}
}
1
0
r1293 - in trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches: individualobservation individualobservation/create species
by tchemit@users.forge.codelutin.com 14 Oct '13
by tchemit@users.forge.codelutin.com 14 Oct '13
14 Oct '13
Author: tchemit
Date: 2013-10-14 18:35:28 +0200 (Mon, 14 Oct 2013)
New Revision: 1293
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1293
Log:
fixes #3503: [CAPTURE] recopie d'une esp?\195?\168ce vers les donn?\195?\169es individelles si le lot esp?\195?\168ce poss?\195?\168de plusieurs individus il ne faut pas pouvoir saisir de poids et de taille
Modified:
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/RemoveAllIndividualObservationBatchAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUI.css
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIModel.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/individualobservation/IndividualObservationBatchUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java 2013-10-14 16:04:35 UTC (rev 1292)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java 2013-10-14 16:35:28 UTC (rev 1293)
@@ -560,16 +560,20 @@
int nbRow = TuttiEntities.getValueOrComputedValue(frequency.getNumber(), 0);
- float weight = TuttiEntities.getValueOrComputedValue(frequency.getWeight(), 0f);
- if (nbRow > 0) {
- weight /= nbRow;
+ Float weight = null;
+ if (nbRow == 1) {
+
+ // apply also weight found
+ weight = frequency.getWeight();
+
+ if (weight != null) {
+ // convert weight units
+ weight = speciesWeightUnit.toEntity(weight);
+ weight = weightUnit.fromEntity(weight);
+ }
}
- // convert weight units
- weight = speciesWeightUnit.toEntity(weight);
- weight = weightUnit.fromEntity(weight);
-
for (int i = 0; i < nbRow; i++) {
IndividualObservationBatchRowModel newRow = tableModel.createNewRow();
newRow.setSpecies(species);
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/RemoveAllIndividualObservationBatchAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/RemoveAllIndividualObservationBatchAction.java 2013-10-14 16:04:35 UTC (rev 1292)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/RemoveAllIndividualObservationBatchAction.java 2013-10-14 16:35:28 UTC (rev 1293)
@@ -110,8 +110,6 @@
Preconditions.checkNotNull(rowIndexToRemove);
Preconditions.checkNotNull(species);
- JXTable table = handler.getTable();
-
IndividualObservationBatchTableModel tableModel = handler.getTableModel();
for (Integer rowIndex : rowIndexToRemove) {
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUI.css
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUI.css 2013-10-14 16:04:35 UTC (rev 1292)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUI.css 2013-10-14 16:35:28 UTC (rev 1293)
@@ -51,7 +51,7 @@
#individualObservationCreateFromBatch {
text: "tutti.createIndividualObservationBatch.field.createFromBatch";
- selected: {model.isSpeciesFromBatch() && model.isCreateFromBatch()};
+ selected: {model.isCreateFromBatch()};
enabled: {model.isSpeciesFromBatch()};
toolTipText: "tutti.createIndividualObservationBatch.field.createFromBatch.tip";
_help: {"tutti.createIndividualObservationBatch.field.createFromBatch.help"};
@@ -120,17 +120,6 @@
_help: {"tutti.createIndividualObservationBatch.action.saveAndClose.help"};
}
-/*
-#saveFromBatchAndCloseButton {
- actionIcon: save;
- text: "tutti.createIndividualObservationBatch.action.saveFromBatchAndClose";
- toolTipText: "tutti.createIndividualObservationBatch.action.saveFromBatchAndClose.tip";
- i18nMnemonic: "tutti.createIndividualObservationBatch.action.saveFromBatchAndClose.mnemonic";
- enabled: {model.isValid() && model.isSpeciesFromBatch()};
- _help: {"tutti.createIndividualObservationBatch.action.saveFromBatchAndClose.help"};
-}
-*/
-
#cancelButton {
actionIcon: cancel;
text: "tutti.createIndividualObservationBatch.action.cancel";
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIHandler.java 2013-10-14 16:04:35 UTC (rev 1292)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIHandler.java 2013-10-14 16:35:28 UTC (rev 1293)
@@ -23,6 +23,7 @@
*/
import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import fr.ifremer.tutti.persistence.entities.TuttiEntities;
import fr.ifremer.tutti.persistence.entities.data.IndividualObservationBatch;
@@ -36,7 +37,7 @@
import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchRowModel;
import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchUI;
import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchUIModel;
-import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchRowModel;
+import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchUIModel;
import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler;
import fr.ifremer.tutti.ui.swing.util.Cancelable;
import fr.ifremer.tutti.ui.swing.util.TuttiUI;
@@ -115,13 +116,14 @@
Lists.newArrayList(lengthStepCaracteristics),
null);
+ final Set<JComponent> editorComponents = Sets.newHashSet();
+
+ editorComponents.add(ui.getIndividualObservationWeightField());
+ editorComponents.add(ui.getIndividualObservationSizeField());
+ editorComponents.add(ui.getIndividualObservationLengthStepCaracteristicComboBox());
+
if (getDataContext().isProtocolFilled()) {
-// // get loaded protocol
-// TuttiProtocol protocol = getDataContext().getProtocol();
-// Preconditions.checkNotNull(protocol,
-// "Could not find protocol in ui context");
-
final Map<Integer, SpeciesProtocol> speciesProtocolMap =
getContext().getPersistenceService().toSpeciesProtocolMap();
@@ -243,6 +245,8 @@
initTextField(textField);
break;
}
+
+ editorComponents.add(editor);
JLabel jLabel = new JLabel();
jLabel.setText(caracteristicDecorator.toString(caracteristic));
jLabel.setToolTipText(caracteristicTipDecorator.toString(caracteristic));
@@ -256,6 +260,59 @@
}
}
+ getModel().addPropertyChangeListener(IndividualObservationBatch.PROPERTY_SPECIES,
+ new PropertyChangeListener() {
+ @Override
+ public void propertyChange(PropertyChangeEvent evt) {
+
+ CreateIndividualObservationBatchUIModel source = (CreateIndividualObservationBatchUIModel) evt.getSource();
+
+ Species species = (Species) evt.getNewValue();
+
+ if (species == null ||
+ !source.isSpeciesFromBatch()) {
+
+ // reset create from batch flag
+ source.setCreateFromBatch(false);
+ }
+
+ // compute editors enable property
+ boolean enabled = species != null &&
+ (!source.isCreateFromBatch() ||
+ !source.isSpeciesFromBatch() ||
+ source.isSpeciesFromBatchWithOneCount());
+ if (log.isInfoEnabled()) {
+ log.info("can edit? " + enabled + " (species changed: " + species + ")");
+ }
+ for (JComponent editorComponent : editorComponents) {
+ editorComponent.setEnabled(enabled);
+ }
+ }
+ });
+
+ getModel().addPropertyChangeListener(CreateIndividualObservationBatchUIModel.PROPERTY_CREATE_FROM_BATCH,
+ new PropertyChangeListener() {
+ @Override
+ public void propertyChange(PropertyChangeEvent evt) {
+
+ CreateIndividualObservationBatchUIModel source = (CreateIndividualObservationBatchUIModel) evt.getSource();
+
+ Boolean newValue = (Boolean) evt.getNewValue();
+ newValue = newValue != null && newValue;
+
+ // compute editors enable property
+ boolean enabled = !newValue ||
+ !source.isSpeciesFromBatch() ||
+ source.isSpeciesFromBatchWithOneCount();
+ if (log.isInfoEnabled()) {
+ log.info("can edit? " + enabled + " (createFromBatch changed: " + newValue + ")");
+ }
+ for (JComponent editorComponent : editorComponents) {
+ editorComponent.setEnabled(enabled);
+ }
+ }
+ });
+
listenValidatorValid(getValidator(), getModel());
}
@@ -316,27 +373,22 @@
List<Species> speciesListWithSurveyCode =
getDataContext().getReferentSpeciesWithSurveyCode();
- List<Species> batchesSpeciesList = Lists.newArrayList();
+ Map<Species, Integer> batchesSpeciesList;
List<Species> speciesList;
EditCatchesUI parent =
SwingUtil.getParentContainer(ui, EditCatchesUI.class);
- List<SpeciesBatchRowModel> speciesRows =
- parent.getSpeciesTabContent().getModel().getRows();
- boolean withSpeciesBatch = CollectionUtils.isNotEmpty(speciesRows);
+ SpeciesBatchUIModel speciesBatchUIModel = parent.getSpeciesTabContent().getModel();
+
+ boolean withSpeciesBatch =
+ CollectionUtils.isNotEmpty(speciesBatchUIModel.getRows());
if (withSpeciesBatch) {
// use species from species batch
- Set<Species> speciesSet = Sets.newHashSet();
- for (SpeciesBatchRowModel row : speciesRows) {
- if (row.isBatchRoot()) {
- Species species = row.getSpecies();
- speciesSet.add(species);
- }
- }
+ batchesSpeciesList = speciesBatchUIModel.getSpeciesCount();
- batchesSpeciesList.addAll(speciesSet);
+ Set<Species> speciesSet = Sets.newHashSet(batchesSpeciesList.keySet());
// plus readd the species filled here (individualObservations)
List<IndividualObservationBatchRowModel> rows = batchModel.getRows();
@@ -353,6 +405,8 @@
}
} else {
+ batchesSpeciesList = Maps.newHashMap();
+
if (getDataContext().isProtocolFilled()) {
// using protocol species
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIModel.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIModel.java 2013-10-14 16:04:35 UTC (rev 1292)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIModel.java 2013-10-14 16:35:28 UTC (rev 1293)
@@ -23,18 +23,20 @@
*/
import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
import fr.ifremer.tutti.persistence.entities.CaracteristicMap;
import fr.ifremer.tutti.persistence.entities.data.IndividualObservationBatch;
import fr.ifremer.tutti.persistence.entities.data.IndividualObservationBatchs;
import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
import fr.ifremer.tutti.persistence.entities.referential.Species;
import fr.ifremer.tutti.ui.swing.util.AbstractTuttiBeanUIModel;
-import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.jdesktop.beans.AbstractSerializableBean;
import java.io.Serializable;
import java.util.List;
+import java.util.Map;
/**
* @author kmorin <kmorin(a)codelutin.com>
@@ -50,6 +52,8 @@
public static final String PROPERTY_SPECIES_FROM_BATCH = "speciesFromBatch";
+ public static final String PROPERTY_SPECIES_FROM_BATCH_WITH_ONE_COUNT = "speciesFromBatchWihtOneCount";
+
public static final String PROPERTY_CREATE_FROM_BATCH = "createFromBatch";
public static final String PROPERTY_CARACTERISTICS = "caracteristics";
@@ -62,11 +66,11 @@
protected List<Species> availableSpecies;
/**
- * All species used in batches.
+ * All species used in batches with their count.
*
* @since 2.7
*/
- protected List<Species> batchSpecies;
+ protected Map<Species, Integer> batchSpecies;
/**
* Does we want to create rows from batch?
@@ -108,41 +112,44 @@
return editObject.getSpecies();
}
- public void setSpecies(Species individualObservationSpecies) {
+ public void setSpecies(Species species) {
Object oldValue = getSpecies();
- editObject.setSpecies(individualObservationSpecies);
- firePropertyChange(IndividualObservationBatch.PROPERTY_SPECIES, oldValue, individualObservationSpecies);
- firePropertyChange(PROPERTY_SPECIES_FROM_BATCH, null, isSpeciesFromBatch());
+ Object oldSpeciesFromBatch = isSpeciesFromBatch();
+ Object oldSpeciesFromBatchWithOneCount = isSpeciesFromBatchWithOneCount();
+ editObject.setSpecies(species);
+ firePropertyChange(IndividualObservationBatch.PROPERTY_SPECIES, oldValue, species);
+ firePropertyChange(PROPERTY_SPECIES_FROM_BATCH, oldSpeciesFromBatch, isSpeciesFromBatch());
+ firePropertyChange(PROPERTY_SPECIES_FROM_BATCH_WITH_ONE_COUNT, oldSpeciesFromBatchWithOneCount, isSpeciesFromBatchWithOneCount());
}
public Float getWeight() {
return editObject.getWeight();
}
- public void setWeight(Float individualObservationWeight) {
+ public void setWeight(Float weight) {
Object oldValue = getWeight();
- editObject.setWeight(individualObservationWeight);
- firePropertyChange(IndividualObservationBatch.PROPERTY_WEIGHT, oldValue, individualObservationWeight);
+ editObject.setWeight(weight);
+ firePropertyChange(IndividualObservationBatch.PROPERTY_WEIGHT, oldValue, weight);
}
public Float getSize() {
return editObject.getSize();
}
- public void setSize(Float individualObservationSize) {
+ public void setSize(Float size) {
Object oldValue = getSize();
- editObject.setSize(individualObservationSize);
- firePropertyChange(IndividualObservationBatch.PROPERTY_SIZE, oldValue, individualObservationSize);
+ editObject.setSize(size);
+ firePropertyChange(IndividualObservationBatch.PROPERTY_SIZE, oldValue, size);
}
public Caracteristic getLengthStepCaracteristic() {
return editObject.getLengthStepCaracteristic();
}
- public void setLengthStepCaracteristic(Caracteristic individualObservationLengthStepCaracteristic) {
+ public void setLengthStepCaracteristic(Caracteristic lengthStepCaracteristic) {
Object oldValue = getLengthStepCaracteristic();
- editObject.setLengthStepCaracteristic(individualObservationLengthStepCaracteristic);
- firePropertyChange(IndividualObservationBatch.PROPERTY_LENGTH_STEP_CARACTERISTIC, oldValue, individualObservationLengthStepCaracteristic);
+ editObject.setLengthStepCaracteristic(lengthStepCaracteristic);
+ firePropertyChange(IndividualObservationBatch.PROPERTY_LENGTH_STEP_CARACTERISTIC, oldValue, lengthStepCaracteristic);
}
public CaracteristicMap getCaracteristics() {
@@ -165,20 +172,25 @@
firePropertyChange(PROPERTY_AVAILABLE_SPECIES, null, availableSpecies);
}
- public List<Species> getBatchSpecies() {
+ public Map<Species, Integer> getBatchSpecies() {
return batchSpecies;
}
public boolean isSpeciesFromBatch() {
- return CollectionUtils.isNotEmpty(batchSpecies) &&
+ return MapUtils.isNotEmpty(batchSpecies) &&
getSpecies() != null &&
- batchSpecies.contains(getSpecies());
+ batchSpecies.containsKey(getSpecies());
}
- public void setBatchSpecies(List<Species> batchSpecies) {
+ public boolean isSpeciesFromBatchWithOneCount() {
+ return isSpeciesFromBatch() && batchSpecies.get(getSpecies()) == 1;
+ }
+
+ public void setBatchSpecies(Map<Species, Integer> batchSpecies) {
this.batchSpecies = batchSpecies;
firePropertyChange(PROPERTY_BATCH_SPECIES, null, batchSpecies);
firePropertyChange(PROPERTY_SPECIES_FROM_BATCH, null, isSpeciesFromBatch());
+ firePropertyChange(PROPERTY_SPECIES_FROM_BATCH_WITH_ONE_COUNT, null, isSpeciesFromBatchWithOneCount());
setCreateFromBatch(isCreateFromBatch());
}
@@ -199,7 +211,7 @@
public void reset() {
setAvailableSpecies(Lists.<Species>newArrayList());
- setBatchSpecies(Lists.<Species>newArrayList());
+ setBatchSpecies(Maps.<Species, Integer>newHashMap());
setSpecies(null);
setWeight(null);
setSize(null);
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-10-14 16:04:35 UTC (rev 1292)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIModel.java 2013-10-14 16:35:28 UTC (rev 1293)
@@ -25,17 +25,21 @@
*/
import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
import com.google.common.collect.Multimap;
+import fr.ifremer.tutti.persistence.entities.TuttiEntities;
import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue;
import fr.ifremer.tutti.persistence.entities.referential.Species;
import fr.ifremer.tutti.ui.swing.content.operation.AbstractTuttiBatchUIModel;
import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUIModel;
import fr.ifremer.tutti.ui.swing.content.operation.catches.TableViewMode;
+import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyRowModel;
import fr.ifremer.tutti.ui.swing.util.TabContentModel;
import fr.ifremer.tutti.ui.swing.util.TuttiComputedOrNotData;
import org.apache.commons.collections.CollectionUtils;
import java.util.List;
+import java.util.Map;
import static org.nuiton.i18n.I18n.n_;
@@ -406,4 +410,36 @@
}
}
}
+
+ public Map<Species, Integer> getSpeciesCount() {
+ Map<Species, Integer> result = Maps.newHashMap();
+ for (SpeciesBatchRowModel row : getRows()) {
+ if (row.isBatchLeaf()) {
+
+ Species species = row.getSpecies();
+ Integer count =
+ TuttiEntities.getValueOrComputedValue(result.get(species),
+ 0);
+
+ List<SpeciesFrequencyRowModel> frequencies = row.getFrequency();
+ if (CollectionUtils.isEmpty(frequencies)) {
+
+ //
+ Integer number = row.getNumber();
+ if (number != null) {
+ count += number;
+ }
+ } else {
+ for (SpeciesFrequencyRowModel frequency : frequencies) {
+ Integer number = frequency.getNumber();
+ if (number != null) {
+ count += number;
+ }
+ }
+ }
+ result.put(species, count);
+ }
+ }
+ return result;
+ }
}
1
0
r1292 - in trunk/tutti-ui-swing/src/main: . conception conception/specifications conception/specifications/Concepts-metiers conception/specifications/Fonctionnalites-metiers conception/specifications/Fonctionnalites-transversales conception/specifications/Presentation
by lkaufmann@users.forge.codelutin.com 14 Oct '13
by lkaufmann@users.forge.codelutin.com 14 Oct '13
14 Oct '13
Author: lkaufmann
Date: 2013-10-14 18:04:35 +0200 (Mon, 14 Oct 2013)
New Revision: 1292
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1292
Log:
Specifications : Initialisation
Added:
trunk/tutti-ui-swing/src/main/conception/
trunk/tutti-ui-swing/src/main/conception/specifications/
trunk/tutti-ui-swing/src/main/conception/specifications/Concepts-metiers/
trunk/tutti-ui-swing/src/main/conception/specifications/Concepts-metiers/Campagne.txt
trunk/tutti-ui-swing/src/main/conception/specifications/Concepts-metiers/Capture.txt
trunk/tutti-ui-swing/src/main/conception/specifications/Concepts-metiers/OperationPeche.txt
trunk/tutti-ui-swing/src/main/conception/specifications/Concepts-metiers/ProtocoleSaisie.txt
trunk/tutti-ui-swing/src/main/conception/specifications/Concepts-metiers/SerieCampagne.txt
trunk/tutti-ui-swing/src/main/conception/specifications/Concepts-metiers/Trait.txt
trunk/tutti-ui-swing/src/main/conception/specifications/Concepts-metiers/VracHorsVrac.txt
trunk/tutti-ui-swing/src/main/conception/specifications/Fonctionnalites-metiers/
trunk/tutti-ui-swing/src/main/conception/specifications/Fonctionnalites-metiers/GestionCampagnes.txt
trunk/tutti-ui-swing/src/main/conception/specifications/Fonctionnalites-metiers/GestionCaptures.txt
trunk/tutti-ui-swing/src/main/conception/specifications/Fonctionnalites-metiers/GestionProtocoles.txt
trunk/tutti-ui-swing/src/main/conception/specifications/Fonctionnalites-metiers/GestionRef?\195?\169rentielsTemporaires.txt
trunk/tutti-ui-swing/src/main/conception/specifications/Fonctionnalites-transversales/
trunk/tutti-ui-swing/src/main/conception/specifications/Fonctionnalites-transversales/ConfigurationApplication.txt
trunk/tutti-ui-swing/src/main/conception/specifications/Fonctionnalites-transversales/ConfigurationCategorisation.txt
trunk/tutti-ui-swing/src/main/conception/specifications/Fonctionnalites-transversales/ContexteSaisie.txt
trunk/tutti-ui-swing/src/main/conception/specifications/Fonctionnalites-transversales/ControleSaisie.txt
trunk/tutti-ui-swing/src/main/conception/specifications/Fonctionnalites-transversales/GestionMisesAJour.txt
trunk/tutti-ui-swing/src/main/conception/specifications/Fonctionnalites-transversales/GestionnaireBase.txt
trunk/tutti-ui-swing/src/main/conception/specifications/Fonctionnalites-transversales/OrigineDonneesAffichees.txt
trunk/tutti-ui-swing/src/main/conception/specifications/Fonctionnalites-transversales/RaccourcisClavier.txt
trunk/tutti-ui-swing/src/main/conception/specifications/Fonctionnalites-transversales/SaisieMultiOrdinateurs.txt
trunk/tutti-ui-swing/src/main/conception/specifications/Presentation/
trunk/tutti-ui-swing/src/main/conception/specifications/Presentation/PresentationGenerale.txt
trunk/tutti-ui-swing/src/main/conception/specifications/Scenarios-utilisation/
/opt/redmine-tools/commit-email.pl: `/usr/bin/svnlook diff /var/lib/svn/svn-forge.codelutin.com/tutti -r 1292' failed with this output:
Added: trunk/tutti-ui-swing/src/main/conception/specifications/Concepts-metiers/Campagne.txt
===================================================================
--- trunk/tutti-ui-swing/src/main/conception/specifications/Concepts-metiers/Campagne.txt (rev 0)
+++ trunk/tutti-ui-swing/src/main/conception/specifications/Concepts-metiers/Campagne.txt 2013-10-14 16:04:35 UTC (rev 1292)
@@ -0,0 +1,3 @@
+Les campagnes scientifiques à vocation halieutique ont pour objectif de produire des indices biologiques pour connaître l'état et l'évolution des espèces exploitées : abondance et distribution des espèces commerciales, stades clés du cycle de vie des espèces, description des populations. Elles ont aussi pour but d'élaborer des indicateurs sur les écosystèmes exploités.
+
+Les campagnes de pêche scientifique standardisées ont pour objectif d'observer les ressources halieutiques, en suivant toujours les mêmes méthodes d'échantillonnage. Elles sont toujours réalisées dans la même zone, à la même saison, avec des engins de pêche standardisés, afin que les données soient comparables d'année en année. Elles servent à décrire les espèces, qu'elles soient commerciales ou non, d'une zone et à observer les changements s'il y en a. Les poissons, les mollusques et les crustacés sont dénombrés, mesurés et pesés. Certains d'entre eux font l'objet de prélèvements biologiques. Chaque campagne fournit ainsi une représentation quantitative de l'ensemble des espèces de la zone à une période donnée.
Added: trunk/tutti-ui-swing/src/main/conception/specifications/Concepts-metiers/Capture.txt
===================================================================
--- trunk/tutti-ui-swing/src/main/conception/specifications/Concepts-metiers/Capture.txt (rev 0)
+++ trunk/tutti-ui-swing/src/main/conception/specifications/Concepts-metiers/Capture.txt 2013-10-14 16:04:35 UTC (rev 1292)
@@ -0,0 +1,12 @@
+
+
+Espèces
+
+
+Benthos
+Le benthos regroupe l'ensemble des organismes vivant en relation étroite avec les fonds subaquatiques.
+
+
+
+Macro déchets
+
Added: trunk/tutti-ui-swing/src/main/conception/specifications/Concepts-metiers/OperationPeche.txt
===================================================================
Added: trunk/tutti-ui-swing/src/main/conception/specifications/Concepts-metiers/ProtocoleSaisie.txt
===================================================================
Added: trunk/tutti-ui-swing/src/main/conception/specifications/Concepts-metiers/SerieCampagne.txt
===================================================================
--- trunk/tutti-ui-swing/src/main/conception/specifications/Concepts-metiers/SerieCampagne.txt (rev 0)
+++ trunk/tutti-ui-swing/src/main/conception/specifications/Concepts-metiers/SerieCampagne.txt 2013-10-14 16:04:35 UTC (rev 1292)
@@ -0,0 +1,3 @@
+Chaque série de campagnes est conduite selon une stratégie d'échantillonnage spécifique. Sauf cas particuliers, les analyses et interprétations doivent être conduites par série, en prenant en compte les stratégies d'échantillonnage propres à chacune de ces séries. Sur le site, les données sont présentées par série.
+
+Chaque série de campagne est définie par zone.
Added: trunk/tutti-ui-swing/src/main/conception/specifications/Concepts-metiers/Trait.txt
===================================================================
Added: trunk/tutti-ui-swing/src/main/conception/specifications/Concepts-metiers/VracHorsVrac.txt
===================================================================
--- trunk/tutti-ui-swing/src/main/conception/specifications/Concepts-metiers/VracHorsVrac.txt (rev 0)
+++ trunk/tutti-ui-swing/src/main/conception/specifications/Concepts-metiers/VracHorsVrac.txt 2013-10-14 16:04:35 UTC (rev 1292)
@@ -0,0 +1,12 @@
+Les notions de Vrac et Hors vrac sont liées à l'échantillonnage des
+
+
+
+HORS VRAC
+catégorie associée à un lot ou un individu qui a été prélevé directement sur la capture sans passer par le pesage automatique ni le tri.
+Cas 1
+Cette notion est utile dans les cas de capture abondante où seule une fraction de la capture va être observée. Dans cette configuration, les lots (catégorisés à VRAC) observés dans l'échantillon seront élevés (facteur d'élévation) pour obtenir les poids et nombre totaux dans la capture.
+Cas 2
+Les individus rares ou atypiques qui auront été extraits de la capture avant échantillonnage ne devront pas être élevés car leur facteur d'élévation = 1.
+Cas 3
+par convention, lorsque la totalité de la capture est observée (pesée et triée), on catégorise tous les lots à VRAC.
\ No newline at end of file
Added: trunk/tutti-ui-swing/src/main/conception/specifications/Fonctionnalites-metiers/GestionCampagnes.txt
===================================================================
--- trunk/tutti-ui-swing/src/main/conception/specifications/Fonctionnalites-metiers/GestionCampagnes.txt (rev 0)
+++ trunk/tutti-ui-swing/src/main/conception/specifications/Fonctionnalites-metiers/GestionCampagnes.txt 2013-10-14 16:04:35 UTC (rev 1292)
@@ -0,0 +1,17 @@
+a. Création d'une série de campagne
+
+Pour identifier une série de campagne, un nom et un description sont à saisir lors de la création d'une série de campagne.
+
+
+b. Création d'une campagne
+
+
+c. Export de campagnes
+Export d'une campagne
+
+Export Sumatra d'une campagne
+
+Export d'une série de campagne
+
+d. Envoi d'une campagne
+
Added: trunk/tutti-ui-swing/src/main/conception/specifications/Fonctionnalites-metiers/GestionCaptures.txt
===================================================================
--- trunk/tutti-ui-swing/src/main/conception/specifications/Fonctionnalites-metiers/GestionCaptures.txt (rev 0)
+++ trunk/tutti-ui-swing/src/main/conception/specifications/Fonctionnalites-metiers/GestionCaptures.txt 2013-10-14 16:04:35 UTC (rev 1292)
@@ -0,0 +1,62 @@
+a. Opérations de pêche / traits
+Caractéristiques du trait
+
+Mise en œuvre de l'engin
+
+Autres paramètres
+
+
+b. Saisie des captures
+
+Résumé
+
+Espèces
+- Création d'un lot pour une espèce
+
+- Élever les poids
+
+- Import Pupitri
+
+- Import de lots d'espèces
+
+- Export de lots d'espèces
+
+Benthos
+- Création d'un lot pour une espèce
+
+- Élever les poids
+
+- Import Pupitri
+
+- Import de lots de benthos
+
+- Export de lots de benthos
+
+Macro déchets
+- Création d'un lot de déchets
+
+- Élever les poids
+
+- Import de lots de déchets
+
+- Export de lots de déchets
+
+
+Observations individuelles
+- Création d'une observation
+
+- Import d'observations
+
+- Export d'observations
+
+
+Captures accidentelles
+- Création d'une capture accidentelle
+
+- Import de captures accidentelles
+
+- Export de captures accidentelles
+
+
+
+b. Validation des captures
\ No newline at end of file
Added: trunk/tutti-ui-swing/src/main/conception/specifications/Fonctionnalites-metiers/GestionProtocoles.txt
===================================================================
--- trunk/tutti-ui-swing/src/main/conception/specifications/Fonctionnalites-metiers/GestionProtocoles.txt (rev 0)
+++ trunk/tutti-ui-swing/src/main/conception/specifications/Fonctionnalites-metiers/GestionProtocoles.txt 2013-10-14 16:04:35 UTC (rev 1292)
@@ -0,0 +1,9 @@
+a. Création
+
+b. Suppression
+
+c. Import
+
+d. Configuration
+
+e. Clonage
\ No newline at end of file
Added: trunk/tutti-ui-swing/src/main/conception/specifications/Fonctionnalites-metiers/GestionRef?\195?\169rentielsTemporaires.txt
===================================================================
svnlook: Can't convert string from 'UTF-8' to native encoding:
svnlook: --- trunk/tutti-ui-swing/src/main/conception/specifications/Fonctionnalites-metiers/GestionRef?\195?\169rentielsTemporaires.txt (rev 0)
+++ trunk/tutti-ui-swing/src/main/conception/specifications/Fonctionnalites-metiers/GestionRef?\195?\169rentielsTemporaires.txt 2013-10-14 16:04:35 UTC (rev 1292)
1
0
09 Oct '13
Author: tchemit
Date: 2013-10-09 18:27:15 +0200 (Wed, 09 Oct 2013)
New Revision: 1291
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1291
Log:
refs #3328: [ERGO] Tri du tableau des esp?\195?\168ces
Modified:
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDecorator.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/AbstractTuttiBatchTableUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUIHandler.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/BenthosBatchUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/MarineLitterBatchUIHandler.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/SpeciesBatchUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/AddBenthosProtocolAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/AddSpeciesProtocolAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesTableModel.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/RemoveBenthosProtocolAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/RemoveSpeciesProtocolAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.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/DecoratorService.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java 2013-10-08 16:24:46 UTC (rev 1290)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java 2013-10-09 16:27:15 UTC (rev 1291)
@@ -197,7 +197,7 @@
@Override
protected Object onNullValue(Species bean, String token) {
Object result = null;
- if ("refTaxCode".equals(token)) {
+ if (Species.PROPERTY_REF_TAX_CODE.equals(token)) {
result = _("tutti.propety.no.species.speciesCode");
}
return result;
@@ -215,7 +215,7 @@
@Override
protected Object getValue(Species bean, String token) {
Object result = super.getValue(bean, token);
- if ("surveyCode".equals(token) && result == null) {
+ if (Species.PROPERTY_SURVEY_CODE.equals(token) && result == null) {
result = bean.getRefTaxCode();
}
return result;
@@ -224,7 +224,7 @@
@Override
protected Object onNullValue(Species bean, String token) {
Object result;
- if ("surveyCode".equals(token)) {
+ if (Species.PROPERTY_SURVEY_CODE.equals(token)) {
result = _("tutti.propety.no.species.speciesCode");
} else {
@@ -245,7 +245,7 @@
@Override
protected Object getValue(Program bean, String token) {
Object result = super.getValue(bean, token);
- if ("zone".equals(token) && result != null) {
+ if (Program.PROPERTY_ZONE.equals(token) && result != null) {
result = ((TuttiLocation) result).getLabel();
}
return result;
@@ -254,7 +254,7 @@
@Override
protected Object onNullValue(Program bean, String token) {
Object result = null;
- if ("zone".equals(token)) {
+ if (Program.PROPERTY_ZONE.equals(token)) {
result = _("tutti.propety.no.zone");
}
return result;
@@ -274,7 +274,7 @@
// handle the null internationalRegistrationCode here,
// otherwise this will be considered null during sorting
Object result = super.getValue(bean, token);
- if ("internationalRegistrationCode".equals(token) && result == null) {
+ if (Vessel.PROPERTY_INTERNATIONAL_REGISTRATION_CODE.equals(token) && result == null) {
// use national registration code
result = _("tutti.propety.vessel.nation.registrationCode", bean.getRegistrationCode());
}
@@ -284,7 +284,7 @@
@Override
protected Object onNullValue(Vessel bean, String token) {
Object result = null;
- if ("name".equals(token)) {
+ if (Vessel.PROPERTY_NAME.equals(token)) {
result = _("tutti.propety.no.vessel.name");
}
return result;
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDecorator.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDecorator.java 2013-10-08 16:24:46 UTC (rev 1290)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDecorator.java 2013-10-09 16:27:15 UTC (rev 1291)
@@ -31,7 +31,6 @@
import com.google.common.collect.Maps;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.nuiton.decorator.Decorator;
import org.nuiton.decorator.DecoratorUtil;
import org.nuiton.decorator.JXPathDecorator;
import org.nuiton.decorator.MultiJXPathDecorator;
@@ -41,7 +40,6 @@
import java.io.Serializable;
import java.lang.reflect.Method;
import java.util.Arrays;
-import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -75,8 +73,9 @@
/**
* List of tokens to sort using the {@link #sortOnlyOnSelectedContext} mode.
+ * <p/>
+ * If the mode is not set, then won't use this.
*
- * If the mode is not set, then won't use this.
* @since 2.8
*/
protected Set<String> sortOnlyOnSelectedContextTokens;
@@ -100,9 +99,8 @@
separator,
separatorReplacement));
tokenMethods = Maps.newHashMap();
- Set<PropertyDescriptor> descriptors = BeanUtil.getDescriptors(type, BeanUtil.IS_READ_DESCRIPTOR);
-// PropertyDescriptor[] descriptors =
-// PropertyUtils.getPropertyDescriptors(type);
+ Set<PropertyDescriptor> descriptors =
+ BeanUtil.getDescriptors(type, BeanUtil.IS_READ_DESCRIPTOR);
for (String token : getTokens()) {
Method m = null;
@@ -113,7 +111,8 @@
}
}
if (m == null) {
- throw new IllegalArgumentException("could not find the property " + token + " in " + type);
+ throw new IllegalArgumentException(
+ "could not find the property " + token + " in " + type);
}
tokenMethods.put(token, m);
}
@@ -162,8 +161,8 @@
this.sortOnlyOnSelectedContextTokens = sortOnlyOnSelectedContextTokens;
}
- public Comparator getCurrentComparator() {
- return context.getComparator(0);
+ public TuttiDecoratorComparator<O> getCurrentComparator() {
+ return (TuttiDecoratorComparator<O>) context.getComparator(0);
}
@Override
@@ -241,7 +240,7 @@
return super.clone();
}
- public static class TuttiDecoratorComparator<O> extends JXPathComparator<O> implements Serializable {
+ public static class TuttiDecoratorComparator<O> extends JXPathComparator<O> implements Serializable, Cloneable {
private static final long serialVersionUID = 1L;
@@ -258,7 +257,9 @@
TuttiDecorator<O> tuttiDecorator = (TuttiDecorator<O>) decorator;
String token = decorator.getTokens()[0];
boolean sortOnlyOnSelectedContext =
- tuttiDecorator.isSortOnlyOnSelectedContext() && tuttiDecorator.getSortOnlyOnSelectedContextTokens()!=null && tuttiDecorator.getSortOnlyOnSelectedContextTokens().contains(token);
+ tuttiDecorator.isSortOnlyOnSelectedContext() &&
+ tuttiDecorator.getSortOnlyOnSelectedContextTokens() != null &&
+ tuttiDecorator.getSortOnlyOnSelectedContextTokens().contains(token);
for (O data : datas) {
if (sortOnlyOnSelectedContext) {
@@ -273,5 +274,14 @@
}
}
}
+
+ @Override
+ public TuttiDecoratorComparator<O> clone() {
+ TuttiDecoratorComparator<O> result =
+ new TuttiDecoratorComparator<O>(expression);
+ return result;
+ }
+
+
}
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/AbstractTuttiBatchTableUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/AbstractTuttiBatchTableUIHandler.java 2013-10-08 16:24:46 UTC (rev 1290)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/AbstractTuttiBatchTableUIHandler.java 2013-10-09 16:27:15 UTC (rev 1291)
@@ -38,6 +38,7 @@
import org.jdesktop.swingx.decorator.HighlightPredicate;
import org.jdesktop.swingx.decorator.Highlighter;
import org.jdesktop.swingx.sort.TableSortController;
+import org.jdesktop.swingx.table.TableColumnModelExt;
import javax.swing.table.TableColumnModel;
import javax.swing.table.TableModel;
@@ -51,7 +52,7 @@
* @author tchemit <chemit(a)codelutin.com>
* @since 0.2
*/
-public abstract class AbstractTuttiBatchTableUIHandler<R extends AbstractTuttiBeanUIModel, M extends AbstractTuttiBatchUIModel<R, M>, UI extends TuttiUI<M, ?>> extends AbstractTuttiTableUIHandler<R, M, UI> {
+public abstract class AbstractTuttiBatchTableUIHandler<R extends AbstractTuttiBeanUIModel, M extends AbstractTuttiBatchUIModel<R, M>, T extends AbstractTuttiTableModel<R>, UI extends TuttiUI<M, ?>> extends AbstractTuttiTableUIHandler<R, M, UI> {
protected abstract ColumnIdentifier<R> getCommentIdentifier();
@@ -98,8 +99,8 @@
}
protected void initBatchTable(JXTable table,
- TableColumnModel columnModel,
- AbstractTuttiTableModel<R> tableModel) {
+ TableColumnModelExt columnModel,
+ T tableModel) {
installTableKeyListener(columnModel, table);
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUIHandler.java 2013-10-08 16:24:46 UTC (rev 1290)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUIHandler.java 2013-10-09 16:27:15 UTC (rev 1291)
@@ -71,7 +71,7 @@
* @since 0.2
*/
public class AccidentalBatchUIHandler
- extends AbstractTuttiBatchTableUIHandler<AccidentalBatchRowModel, AccidentalBatchUIModel, AccidentalBatchUI>
+ extends AbstractTuttiBatchTableUIHandler<AccidentalBatchRowModel, AccidentalBatchUIModel, AccidentalBatchTableModel, AccidentalBatchUI>
implements CaracteristicMapColumnUIHandler {
/** Logger. */
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-10-08 16:24:46 UTC (rev 1290)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchTableModel.java 2013-10-09 16:27:15 UTC (rev 1291)
@@ -25,6 +25,7 @@
*/
import com.google.common.base.Preconditions;
+import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import fr.ifremer.tutti.persistence.entities.data.SampleCategory;
import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel;
@@ -381,6 +382,23 @@
}
/**
+ * Return the list of used species in the table (used to fill the
+ * comparator cache for species sort)
+ *
+ * @return the list of used species in the table.
+ * @since 2.8
+ */
+ public List<Species> getSpeciesList() {
+ List<Species> result = Lists.newArrayList();
+ for (BenthosBatchRowModel row : rows) {
+ if (row.isBatchRoot()) {
+ result.add(row.getSpecies());
+ }
+ }
+ return result;
+ }
+
+ /**
* Update all the cells of the given row shell for a given column.
*
* @param entry the first row to update
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-10-08 16:24:46 UTC (rev 1290)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUI.css 2013-10-09 16:27:15 UTC (rev 1291)
@@ -133,9 +133,8 @@
#table {
selectionMode: {ListSelectionModel.MULTIPLE_INTERVAL_SELECTION};
- /*selectionBackground: {null};*/
selectionForeground: {Color.BLACK};
- sortable: false;
+ sortable: true;
}
#filterTablePane {
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-10-08 16:24:46 UTC (rev 1290)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUIHandler.java 2013-10-09 16:27:15 UTC (rev 1291)
@@ -40,6 +40,7 @@
import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue;
import fr.ifremer.tutti.persistence.entities.referential.Species;
import fr.ifremer.tutti.service.DecoratorService;
+import fr.ifremer.tutti.service.TuttiDecorator;
import fr.ifremer.tutti.service.ValidationService;
import fr.ifremer.tutti.service.WeightUnit;
import fr.ifremer.tutti.service.catches.ValidateCruiseOperationsService;
@@ -82,6 +83,7 @@
import org.jdesktop.swingx.decorator.HighlightPredicate;
import org.jdesktop.swingx.decorator.Highlighter;
import org.jdesktop.swingx.table.DefaultTableColumnModelExt;
+import org.jdesktop.swingx.table.TableColumnExt;
import org.jdesktop.swingx.table.TableColumnModelExt;
import org.nuiton.decorator.Decorator;
import org.nuiton.validator.NuitonValidatorResult;
@@ -90,6 +92,8 @@
import javax.swing.JComponent;
import javax.swing.JOptionPane;
import javax.swing.RowFilter;
+import javax.swing.event.TableModelEvent;
+import javax.swing.event.TableModelListener;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumnModel;
import java.awt.Color;
@@ -109,7 +113,7 @@
* @author tchemit <chemit(a)codelutin.com>
* @since 0.1
*/
-public class BenthosBatchUIHandler extends AbstractTuttiBatchTableUIHandler<BenthosBatchRowModel, BenthosBatchUIModel, BenthosBatchUI> {
+public class BenthosBatchUIHandler extends AbstractTuttiBatchTableUIHandler<BenthosBatchRowModel, BenthosBatchUIModel, BenthosBatchTableModel, BenthosBatchUI> {
/** Logger. */
private static final Log log =
@@ -710,10 +714,15 @@
{ // Species column
- addColumnToModel(columnModel,
- null,
- newTableCellRender(Species.class, DecoratorService.FROM_PROTOCOL),
- BenthosBatchTableModel.SPECIES);
+ TableColumnExt speciesColumn = addColumnToModel(
+ columnModel,
+ null,
+ null,
+ BenthosBatchTableModel.SPECIES);
+// speciesColumn.setSortable(true);
+ DecoratorService.SpeciesFromProtocolDecorator speciesDecorator = new DecoratorService.SpeciesFromProtocolDecorator();
+ speciesColumn.putClientProperty(TuttiUIUtil.SPECIES_DECORATOR, speciesDecorator);
+ speciesColumn.setCellRenderer(newTableCellRender(speciesDecorator));
}
// Sample category columns
@@ -805,6 +814,70 @@
}
@Override
+ protected void initBatchTable(final JXTable table,
+ TableColumnModelExt columnModel,
+ BenthosBatchTableModel tableModel) {
+ super.initBatchTable(table,
+ columnModel,
+ tableModel);
+
+ // by default do not authorize to change column orders
+ table.getTableHeader().setReorderingAllowed(false);
+
+ // get species column
+ final TableColumnExt speciesColumn =
+ (TableColumnExt) table.getColumns().get(0);
+
+ // when model change, then rebuild the species comparator + set model as modified
+ tableModel.addTableModelListener(new TableModelListener() {
+ @Override
+ public void tableChanged(TableModelEvent e) {
+
+ BenthosBatchTableModel tableModel =
+ (BenthosBatchTableModel) e.getSource();
+ int type = e.getType();
+ if (type == TableModelEvent.DELETE ||
+ type == TableModelEvent.INSERT ||
+ e.getLastRow() == Integer.MAX_VALUE) {
+
+ // get column comparator
+ TuttiDecorator.TuttiDecoratorComparator<Species> comparator =
+ (TuttiDecorator.TuttiDecoratorComparator<Species>)
+ speciesColumn.getComparator();
+
+ // get column comparator
+ TuttiDecorator<Species> decorator =
+ TuttiUIUtil.getSpeciesColumnDecorator(speciesColumn);
+
+ boolean comparatorNull = comparator == null;
+ if (comparatorNull) {
+
+ // first time coming here, add the comparator
+ comparator = decorator.getCurrentComparator();
+ }
+
+ // init comparator with model species list
+ comparator.init(decorator, tableModel.getSpeciesList());
+
+ if (comparatorNull) {
+
+ // affect it to colum
+ speciesColumn.setComparator(comparator);
+ }
+ }
+ }
+ });
+
+ // create popup to change species decorator
+ TuttiUIUtil.<BenthosBatchRowModel, BenthosBatchTableModel>installSpeciesColumnComparatorPopup(
+ table,
+ speciesColumn,
+ _("tutti.species.surveyCode.tip"),
+ _("tutti.species.name.tip")
+ );
+ }
+
+ @Override
protected JComponent getComponentToFocus() {
return getUI().getTable();
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java 2013-10-08 16:24:46 UTC (rev 1290)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java 2013-10-09 16:27:15 UTC (rev 1291)
@@ -82,7 +82,7 @@
* @since 1.4
*/
public class IndividualObservationBatchUIHandler
- extends AbstractTuttiBatchTableUIHandler<IndividualObservationBatchRowModel, IndividualObservationBatchUIModel, IndividualObservationBatchUI>
+ extends AbstractTuttiBatchTableUIHandler<IndividualObservationBatchRowModel, IndividualObservationBatchUIModel, IndividualObservationBatchTableModel, IndividualObservationBatchUI>
implements CaracteristicMapColumnUIHandler {
private static final Log log =
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/MarineLitterBatchUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/MarineLitterBatchUIHandler.java 2013-10-08 16:24:46 UTC (rev 1290)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/MarineLitterBatchUIHandler.java 2013-10-09 16:27:15 UTC (rev 1291)
@@ -64,7 +64,7 @@
* @author tchemit <chemit(a)codelutin.com>
* @since 0.2
*/
-public class MarineLitterBatchUIHandler extends AbstractTuttiBatchTableUIHandler<MarineLitterBatchRowModel, MarineLitterBatchUIModel, MarineLitterBatchUI> {
+public class MarineLitterBatchUIHandler extends AbstractTuttiBatchTableUIHandler<MarineLitterBatchRowModel, MarineLitterBatchUIModel, MarineLitterBatchTableModel, MarineLitterBatchUI> {
private static final Log log =
LogFactory.getLog(MarineLitterBatchUIHandler.class);
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-10-08 16:24:46 UTC (rev 1290)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchTableModel.java 2013-10-09 16:27:15 UTC (rev 1291)
@@ -25,6 +25,7 @@
*/
import com.google.common.base.Preconditions;
+import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import fr.ifremer.tutti.persistence.entities.data.SampleCategory;
import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel;
@@ -380,6 +381,23 @@
}
/**
+ * Return the list of used species in the table (used to fill the
+ * comparator cache for species sort)
+ *
+ * @return the list of used species in the table.
+ * @since 2.8
+ */
+ public List<Species> getSpeciesList() {
+ List<Species> result = Lists.newArrayList();
+ for (SpeciesBatchRowModel row : rows) {
+ if (row.isBatchRoot()) {
+ result.add(row.getSpecies());
+ }
+ }
+ return result;
+ }
+
+ /**
* Update all the cells of the given row shell for a given column.
*
* @param entry the first row to update
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-10-08 16:24:46 UTC (rev 1290)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.css 2013-10-09 16:27:15 UTC (rev 1291)
@@ -133,9 +133,8 @@
#table {
selectionMode: {ListSelectionModel.MULTIPLE_INTERVAL_SELECTION};
- /*selectionBackground: {null};*/
selectionForeground: {Color.BLACK};
- sortable: false;
+ sortable: true;
}
#filterTablePane {
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-10-08 16:24:46 UTC (rev 1290)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java 2013-10-09 16:27:15 UTC (rev 1291)
@@ -40,6 +40,7 @@
import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue;
import fr.ifremer.tutti.persistence.entities.referential.Species;
import fr.ifremer.tutti.service.DecoratorService;
+import fr.ifremer.tutti.service.TuttiDecorator;
import fr.ifremer.tutti.service.ValidationService;
import fr.ifremer.tutti.service.WeightUnit;
import fr.ifremer.tutti.service.catches.ValidateCruiseOperationsService;
@@ -81,6 +82,7 @@
import org.jdesktop.swingx.decorator.HighlightPredicate;
import org.jdesktop.swingx.decorator.Highlighter;
import org.jdesktop.swingx.table.DefaultTableColumnModelExt;
+import org.jdesktop.swingx.table.TableColumnExt;
import org.jdesktop.swingx.table.TableColumnModelExt;
import org.nuiton.decorator.Decorator;
import org.nuiton.validator.NuitonValidatorResult;
@@ -89,6 +91,8 @@
import javax.swing.JComponent;
import javax.swing.JOptionPane;
import javax.swing.RowFilter;
+import javax.swing.event.TableModelEvent;
+import javax.swing.event.TableModelListener;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumnModel;
import java.awt.Color;
@@ -108,7 +112,7 @@
* @author tchemit <chemit(a)codelutin.com>
* @since 0.1
*/
-public class SpeciesBatchUIHandler extends AbstractTuttiBatchTableUIHandler<SpeciesBatchRowModel, SpeciesBatchUIModel, SpeciesBatchUI> {
+public class SpeciesBatchUIHandler extends AbstractTuttiBatchTableUIHandler<SpeciesBatchRowModel, SpeciesBatchUIModel, SpeciesBatchTableModel, SpeciesBatchUI> {
/** Logger. */
private static final Log log =
@@ -718,10 +722,15 @@
{ // Species column
- addColumnToModel(columnModel,
- null,
- newTableCellRender(Species.class, DecoratorService.FROM_PROTOCOL),
- SpeciesBatchTableModel.SPECIES);
+ TableColumnExt speciesColumn = addColumnToModel(
+ columnModel,
+ null,
+ null,
+ SpeciesBatchTableModel.SPECIES);
+// speciesColumn.setSortable(true);
+ DecoratorService.SpeciesFromProtocolDecorator speciesDecorator = new DecoratorService.SpeciesFromProtocolDecorator();
+ speciesColumn.putClientProperty(TuttiUIUtil.SPECIES_DECORATOR, speciesDecorator);
+ speciesColumn.setCellRenderer(newTableCellRender(speciesDecorator));
}
// Sample category columns
@@ -813,6 +822,71 @@
}
@Override
+ protected void initBatchTable(final JXTable table,
+ TableColumnModelExt columnModel,
+ SpeciesBatchTableModel tableModel) {
+ super.initBatchTable(table,
+ columnModel,
+ tableModel);
+
+ // by default do not authorize to change column orders
+ table.getTableHeader().setReorderingAllowed(false);
+
+ // get the species column
+ final TableColumnExt speciesColumn =
+ (TableColumnExt) table.getColumns().get(0);
+
+ // when model change, then rebuild the species comparator + set model as modified
+
+ tableModel.addTableModelListener(new TableModelListener() {
+ @Override
+ public void tableChanged(TableModelEvent e) {
+
+ SpeciesBatchTableModel tableModel =
+ (SpeciesBatchTableModel) e.getSource();
+ int type = e.getType();
+ if (type == TableModelEvent.DELETE ||
+ type == TableModelEvent.INSERT ||
+ e.getLastRow() == Integer.MAX_VALUE) {
+
+ // get column comparator
+ TuttiDecorator.TuttiDecoratorComparator<Species> comparator =
+ (TuttiDecorator.TuttiDecoratorComparator<Species>)
+ speciesColumn.getComparator();
+
+ // get column comparator
+ TuttiDecorator<Species> decorator =
+ TuttiUIUtil.getSpeciesColumnDecorator(speciesColumn);
+
+ boolean comparatorNull = comparator == null;
+ if (comparatorNull) {
+
+ // first time coming here, add the comparator
+ comparator = decorator.getCurrentComparator();
+ }
+
+ // init comparator with model species list
+ comparator.init(decorator, tableModel.getSpeciesList());
+
+ if (comparatorNull) {
+
+ // affect it to colum
+ speciesColumn.setComparator(comparator);
+ }
+ }
+ }
+ });
+
+ // create popup to change species decorator
+ TuttiUIUtil.<SpeciesBatchRowModel, SpeciesBatchTableModel>installSpeciesColumnComparatorPopup(
+ table,
+ speciesColumn,
+ _("tutti.species.surveyCode.tip"),
+ _("tutti.species.name.tip")
+ );
+ }
+
+ @Override
protected JComponent getComponentToFocus() {
return getUI().getTable();
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/AddBenthosProtocolAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/AddBenthosProtocolAction.java 2013-10-08 16:24:46 UTC (rev 1290)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/AddBenthosProtocolAction.java 2013-10-09 16:27:15 UTC (rev 1291)
@@ -77,6 +77,10 @@
EditProtocolSpeciesRowModel protocol = tableModel.createNewRow();
protocol.setSpecies(species);
tableModel.addNewRow(protocol);
+
+ int rowIndex = tableModel.getRowIndex(protocol);
+ int selectedRowIndex = handler.getBenthosTable().convertRowIndexToView(rowIndex);
+ handler.getBenthosTable().getSelectionModel().setSelectionInterval(selectedRowIndex, selectedRowIndex);
}
@Override
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/AddSpeciesProtocolAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/AddSpeciesProtocolAction.java 2013-10-08 16:24:46 UTC (rev 1290)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/AddSpeciesProtocolAction.java 2013-10-09 16:27:15 UTC (rev 1291)
@@ -75,6 +75,9 @@
EditProtocolSpeciesRowModel protocol = tableModel.createNewRow();
protocol.setSpecies(species);
tableModel.addNewRow(protocol);
+ int rowIndex = tableModel.getRowIndex(protocol);
+ int selectedRowIndex = handler.getSpeciesTable().convertRowIndexToView(rowIndex);
+ handler.getSpeciesTable().getSelectionModel().setSelectionInterval(selectedRowIndex, selectedRowIndex);
}
@Override
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-10-08 16:24:46 UTC (rev 1290)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesTableModel.java 2013-10-09 16:27:15 UTC (rev 1291)
@@ -26,6 +26,7 @@
import com.google.common.collect.Lists;
import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel;
+import fr.ifremer.tutti.persistence.entities.referential.Species;
import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableModel;
import fr.ifremer.tutti.ui.swing.util.table.ColumnIdentifier;
import org.jdesktop.swingx.table.TableColumnModelExt;
@@ -113,4 +114,19 @@
fireTableCellUpdated(rowIndex, columnIndex);
}
+ /**
+ * Return the list of used species in the table (used to fill the
+ * comparator cache for species sort)
+ *
+ * @return the list of used species in the table.
+ * @since 2.8
+ */
+ public List<Species> getSpeciesList() {
+ List<Species> result = Lists.newArrayList();
+ for (EditProtocolSpeciesRowModel row : rows) {
+ result.add(row.getSpecies());
+ }
+ return result;
+ }
+
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java 2013-10-08 16:24:46 UTC (rev 1290)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java 2013-10-09 16:27:15 UTC (rev 1291)
@@ -36,6 +36,7 @@
import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol;
import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
import fr.ifremer.tutti.persistence.entities.referential.Species;
+import fr.ifremer.tutti.service.DecoratorService;
import fr.ifremer.tutti.service.PersistenceService;
import fr.ifremer.tutti.service.TuttiDecorator;
import fr.ifremer.tutti.ui.swing.content.home.CloneProtocolAction;
@@ -44,6 +45,7 @@
import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler;
import fr.ifremer.tutti.ui.swing.util.CloseableUI;
import fr.ifremer.tutti.ui.swing.util.TuttiUI;
+import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil;
import fr.ifremer.tutti.ui.swing.util.species.SelectSpeciesUI;
import fr.ifremer.tutti.ui.swing.util.species.SelectSpeciesUIModel;
import jaxx.runtime.SwingUtil;
@@ -72,6 +74,7 @@
import javax.swing.event.ListSelectionListener;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
+import javax.swing.table.JTableHeader;
import javax.swing.table.TableColumnModel;
import java.awt.Dimension;
import java.beans.PropertyChangeEvent;
@@ -94,6 +97,8 @@
private static final Log log =
LogFactory.getLog(EditProtocolUIHandler.class);
+// public static final String SPECIES_DECORATOR_INDEX = "decoratorIndex";
+
public static String getTitle(boolean exist) {
String result;
@@ -307,8 +312,10 @@
newTableCellRender(Species.class),
EditProtocolSpeciesTableModel.SPECIES_ID);
speciesColumn.setSortable(true);
+ DecoratorService.SpeciesDecorator speciesDecorator = new DecoratorService.SpeciesDecorator();
+ speciesColumn.putClientProperty(TuttiUIUtil.SPECIES_DECORATOR, speciesDecorator);
+ speciesColumn.setCellRenderer(newTableCellRender(speciesDecorator));
-
TableColumnExt speciesSurveyCodeColumn = addColumnToModel(columnModel,
null,
null,
@@ -339,25 +346,17 @@
addBooleanColumnToModel(columnModel, EditProtocolSpeciesTableModel.CALCIFY_SAMPLE_ENABLED, table);
- EditProtocolSpeciesTableModel tableModel =
- new EditProtocolSpeciesTableModel(sampleCategoryModel, columnModel);
- table.setModel(tableModel);
- table.setColumnModel(columnModel);
-
- initTable(table);
-
- table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
- @Override
- public void valueChanged(ListSelectionEvent e) {
- ListSelectionModel source = (ListSelectionModel) e.getSource();
- getModel().setRemoveSpeciesEnabled(!source.isSelectionEmpty());
- }
- });
-
- tableModel.setRows(speciesRows);
- getModel().setRemoveSpeciesEnabled(false);
-
- initSpeciesComparator();
+ initTable(table,
+ columnModel,
+ speciesColumn,
+ speciesRows,
+ new ListSelectionListener() {
+ @Override
+ public void valueChanged(ListSelectionEvent e) {
+ ListSelectionModel source = (ListSelectionModel) e.getSource();
+ getModel().setRemoveSpeciesEnabled(!source.isSelectionEmpty());
+ }
+ });
}
{
@@ -372,8 +371,9 @@
newTableCellRender(Species.class),
EditProtocolSpeciesTableModel.SPECIES_ID);
speciesColumn.setSortable(true);
- TuttiDecorator<Species> decorator = (TuttiDecorator<Species>) getDecorator(Species.class, null);
- speciesColumn.setComparator(decorator.getCurrentComparator());
+ DecoratorService.SpeciesDecorator speciesDecorator = new DecoratorService.SpeciesDecorator();
+ speciesColumn.putClientProperty(TuttiUIUtil.SPECIES_DECORATOR, speciesDecorator);
+ speciesColumn.setCellRenderer(newTableCellRender(speciesDecorator));
TableColumnExt speciesSurveyCodeColumn = addColumnToModel(columnModel,
null,
@@ -405,26 +405,16 @@
addBooleanColumnToModel(columnModel, EditProtocolSpeciesTableModel.CALCIFY_SAMPLE_ENABLED, table);
- EditProtocolSpeciesTableModel tableModel =
- new EditProtocolSpeciesTableModel(sampleCategoryModel,
- columnModel);
- table.setModel(tableModel);
- table.setColumnModel(columnModel);
-
- initTable(table);
-
- table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
- @Override
- public void valueChanged(ListSelectionEvent e) {
- ListSelectionModel source = (ListSelectionModel) e.getSource();
- getModel().setRemoveBenthosEnabled(!source.isSelectionEmpty());
- }
- });
-
- tableModel.setRows(benthosRows);
- getModel().setRemoveBenthosEnabled(false);
-
- initBenthosComparator();
+ initTable(table,
+ columnModel,
+ speciesColumn, speciesRows,
+ new ListSelectionListener() {
+ @Override
+ public void valueChanged(ListSelectionEvent e) {
+ ListSelectionModel source = (ListSelectionModel) e.getSource();
+ getModel().setRemoveBenthosEnabled(!source.isSelectionEmpty());
+ }
+ });
}
allDoubleLists = Lists.newArrayList(
@@ -493,39 +483,6 @@
dialog = new SelectSpeciesUI(ui);
}
- protected void initSpeciesComparator() {
-
- JXTable table = getSpeciesTable();
-
- TuttiDecorator<Species> decorator = (TuttiDecorator<Species>) getDecorator(Species.class, null);
- TuttiDecorator.TuttiDecoratorComparator currentComparator = (TuttiDecorator.TuttiDecoratorComparator) decorator.getCurrentComparator();
- TableColumnExt tableColumn = (TableColumnExt) table.getColumns().get(0);
- List<Species> species = Lists.newArrayList();
- List<EditProtocolSpeciesRowModel> rows = getModel().getSpeciesRow();
- for (EditProtocolSpeciesRowModel row : rows) {
- species.add(row.getSpecies());
- }
- currentComparator.init(decorator, species);
-
- tableColumn.setComparator(currentComparator);
- }
-
- protected void initBenthosComparator() {
-
- JXTable table = getBenthosTable();
-
- TuttiDecorator<Species> decorator = (TuttiDecorator<Species>) getDecorator(Species.class, null);
- TuttiDecorator.TuttiDecoratorComparator currentComparator = (TuttiDecorator.TuttiDecoratorComparator) decorator.getCurrentComparator();
- TableColumnExt tableColumn = (TableColumnExt) table.getColumns().get(0);
- List<Species> species = Lists.newArrayList();
- List<EditProtocolSpeciesRowModel> rows = getModel().getBenthosRow();
- for (EditProtocolSpeciesRowModel row : rows) {
- species.add(row.getSpecies());
- }
- currentComparator.init(decorator, species);
-
- tableColumn.setComparator(currentComparator);
- }
@Override
protected JComponent getComponentToFocus() {
return getUI().getNameField();
@@ -726,22 +683,84 @@
EditProtocolSpeciesTableModel.LENGTH_STEP_PMFM_ID);
}
- protected void initTable(JXTable table) {
+ protected void initTable(final JXTable table,
+ DefaultTableColumnModelExt columnModel,
+ TableColumnExt speciesColumn,
+ List<EditProtocolSpeciesRowModel> rows,
+ ListSelectionListener selectionListener) {
+ final EditProtocolSpeciesTableModel tableModel =
+ new EditProtocolSpeciesTableModel(sampleCategoryModel, columnModel);
+ table.setModel(tableModel);
+ table.setColumnModel(columnModel);
+
+ JTableHeader tableHeader = table.getTableHeader();
+
// by default do not authorize to change column orders
- table.getTableHeader().setReorderingAllowed(false);
+ tableHeader.setReorderingAllowed(false);
addHighlighters(table);
// always scroll to selected row
SwingUtil.scrollToTableSelection(table);
- table.getModel().addTableModelListener(new TableModelListener() {
+ // add selection listener
+ table.getSelectionModel().addListSelectionListener(selectionListener);
+
+ // when model change, then rebuild the species comparator + set model as modified
+ tableModel.addTableModelListener(new TableModelListener() {
@Override
public void tableChanged(TableModelEvent e) {
getModel().setModify(true);
+
+ int type = e.getType();
+ if (type == TableModelEvent.DELETE ||
+ type == TableModelEvent.INSERT ||
+ e.getLastRow() == Integer.MAX_VALUE) {
+
+ // get species column
+ TableColumnExt tableColumn =
+ (TableColumnExt) table.getColumns().get(0);
+
+ // get column comparator
+ TuttiDecorator.TuttiDecoratorComparator<Species> comparator =
+ (TuttiDecorator.TuttiDecoratorComparator<Species>)
+ tableColumn.getComparator();
+
+ // get column comparator
+ TuttiDecorator<Species> decorator =
+ TuttiUIUtil.getSpeciesColumnDecorator(tableColumn);
+
+ boolean comparatorNull = comparator == null;
+ if (comparatorNull) {
+
+ // first time coming here, add the comparator
+ comparator = decorator.getCurrentComparator();
+ }
+
+ // init comparator with model species list
+ comparator.init(decorator, tableModel.getSpeciesList());
+
+ if (comparatorNull) {
+
+ // affect it to colum
+ tableColumn.setComparator(comparator);
+ }
+ }
}
});
+
+ // create popup to change species decorator
+
+ TuttiUIUtil.<EditProtocolSpeciesRowModel, EditProtocolSpeciesTableModel>installSpeciesColumnComparatorPopup(
+ table,
+ speciesColumn,
+ _("tutti.species.refTaxCode.tip"),
+ _("tutti.species.name.tip")
+ );
+
+ // at the very end, set rows to model
+ tableModel.setRows(rows);
}
protected static class UpdateSelectedList implements PropertyChangeListener {
@@ -813,4 +832,85 @@
return result;
}
}
+
+// public static class SpeciesDecoratorListener implements ActionListener {
+//
+// protected final JXTable table;
+//
+// protected final ButtonGroup buttonGroup;
+//
+// protected final TuttiDecorator<Species> decorator;
+//
+// protected final TableColumnExt column;
+//
+// public SpeciesDecoratorListener(JXTable table,
+// ButtonGroup buttonGroup) {
+// this.table = table;
+// this.buttonGroup = buttonGroup;
+// this.column = (TableColumnExt) table.getColumn(0);
+// this.decorator = TuttiUIUtil.getSpeciesColumnDecorator(column);
+// }
+//
+// @Override
+// public void actionPerformed(ActionEvent e) {
+//
+// JRadioButtonMenuItem source = (JRadioButtonMenuItem) e.getSource();
+// buttonGroup.setSelected(source.getModel(), true);
+//
+// Integer index =
+// (Integer) source.getClientProperty(SPECIES_DECORATOR_INDEX);
+//
+// if (log.isInfoEnabled()) {
+// log.info("Selected decorator context index: " + index);
+// }
+//
+// decorator.setContextIndex(index);
+//
+// column.setComparator(decorator.getCurrentComparator());
+//
+//
+// EditProtocolSpeciesTableModel tableModel =
+// (EditProtocolSpeciesTableModel) table.getModel();
+//
+// // keep selected rows
+// int[] rowIndexes = table.getSelectedRows();
+// List<EditProtocolSpeciesRowModel> rowsToReSelect = Lists.newArrayList();
+// for (int viewRowIndex : rowIndexes) {
+// int modelRowIndex = table.convertRowIndexToModel(viewRowIndex);
+// EditProtocolSpeciesRowModel row = tableModel.getEntry(modelRowIndex);
+// rowsToReSelect.add(row);
+// }
+//
+// // fire model (will reload the comparator)
+// tableModel.fireTableDataChanged();
+//
+// // reselect rows
+// for (EditProtocolSpeciesRowModel row : rowsToReSelect) {
+// int modelRowIndex = tableModel.getRowIndex(row);
+// int viewRowIndex = table.convertRowIndexToView(modelRowIndex);
+// table.addRowSelectionInterval(viewRowIndex, viewRowIndex);
+// }
+// }
+// }
+//
+// private static class ShowSpeciesDecoratorPopupListener extends MouseAdapter {
+// private final JPopupMenu popup;
+//
+// public ShowSpeciesDecoratorPopupListener(JPopupMenu popup) {
+// this.popup = popup;
+// }
+//
+// @Override
+// public void mouseClicked(MouseEvent e) {
+// JTableHeader source = (JTableHeader) e.getSource();
+// Point point = e.getPoint();
+// int columnIndex = source.columnAtPoint(point);
+//
+// boolean rightClick = SwingUtilities.isRightMouseButton(e);
+// if (columnIndex == 0 && rightClick) {
+// e.consume();
+// popup.show(source, e.getX(), e.getY());
+// }
+// }
+// }
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/RemoveBenthosProtocolAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/RemoveBenthosProtocolAction.java 2013-10-08 16:24:46 UTC (rev 1290)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/RemoveBenthosProtocolAction.java 2013-10-09 16:27:15 UTC (rev 1291)
@@ -24,6 +24,7 @@
* #L%
*/
+import com.google.common.base.Preconditions;
import com.google.common.collect.Lists;
import fr.ifremer.tutti.persistence.entities.TuttiEntities;
import fr.ifremer.tutti.persistence.entities.referential.Species;
@@ -52,12 +53,26 @@
JTable table = handler.getBenthosTable();
- EditProtocolSpeciesTableModel tableModel = handler.getBenthosTableModel();
+ // need to have a selection
+ Preconditions.checkState(!table.getSelectionModel().isSelectionEmpty());
- int[] rowIndex = table.getSelectedRows();
+ // build the list of model row indexes from selected view row indexes
+ List<Integer> modelIndexes = Lists.newArrayList();
- for (int i = rowIndex.length - 1; i > -1; i--) {
- int index = rowIndex[i];
+ for (int index : table.getSelectedRows()) {
+ int modelRowIndex = table.convertRowIndexToModel(index);
+ modelIndexes.add(modelRowIndex);
+ }
+
+ // sort it and reverse it (must delete first max row index)
+ Collections.sort(modelIndexes);
+ Collections.reverse(modelIndexes);
+
+ EditProtocolSpeciesTableModel tableModel =
+ (EditProtocolSpeciesTableModel) table.getModel();
+
+ for (Integer index : modelIndexes) {
+
removeRow(tableModel, index);
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/RemoveSpeciesProtocolAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/RemoveSpeciesProtocolAction.java 2013-10-08 16:24:46 UTC (rev 1290)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/RemoveSpeciesProtocolAction.java 2013-10-09 16:27:15 UTC (rev 1291)
@@ -24,6 +24,7 @@
* #L%
*/
+import com.google.common.base.Preconditions;
import com.google.common.collect.Lists;
import fr.ifremer.tutti.persistence.entities.TuttiEntities;
import fr.ifremer.tutti.persistence.entities.referential.Species;
@@ -52,12 +53,26 @@
JTable table = handler.getSpeciesTable();
- EditProtocolSpeciesTableModel tableModel = handler.getSpeciesTableModel();
+ // need to have a selection
+ Preconditions.checkState(!table.getSelectionModel().isSelectionEmpty());
- int[] rowIndex = table.getSelectedRows();
+ // build the list of model row indexes from selected view row indexes
+ List<Integer> modelIndexes = Lists.newArrayList();
- for (int i = rowIndex.length - 1; i > -1; i--) {
- int index = rowIndex[i];
+ for (int index : table.getSelectedRows()) {
+ int modelRowIndex = table.convertRowIndexToModel(index);
+ modelIndexes.add(modelRowIndex);
+ }
+
+ // sort it and reverse it (must delete first max row index)
+ Collections.sort(modelIndexes);
+ Collections.reverse(modelIndexes);
+
+ EditProtocolSpeciesTableModel tableModel =
+ (EditProtocolSpeciesTableModel) table.getModel();
+
+ for (Integer index : modelIndexes) {
+
removeRow(tableModel, index);
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java 2013-10-08 16:24:46 UTC (rev 1290)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java 2013-10-09 16:27:15 UTC (rev 1291)
@@ -24,19 +24,39 @@
* #L%
*/
+import com.google.common.base.Joiner;
import com.google.common.base.Preconditions;
+import com.google.common.collect.Lists;
import fr.ifremer.tutti.TuttiBusinessException;
import fr.ifremer.tutti.TuttiTechnicalException;
+import fr.ifremer.tutti.persistence.entities.referential.Species;
+import fr.ifremer.tutti.service.TuttiDecorator;
+import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableModel;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.jdesktop.swingx.JXTable;
import org.jdesktop.swingx.decorator.HighlightPredicate;
import org.jdesktop.swingx.decorator.Highlighter;
+import org.jdesktop.swingx.table.TableColumnExt;
+import javax.swing.ButtonGroup;
+import javax.swing.JLabel;
+import javax.swing.JPopupMenu;
+import javax.swing.JRadioButtonMenuItem;
+import javax.swing.JSeparator;
+import javax.swing.SwingUtilities;
+import javax.swing.table.JTableHeader;
import java.awt.Color;
import java.awt.Desktop;
+import java.awt.Point;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
import java.io.InputStream;
+import java.io.Serializable;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
@@ -44,6 +64,7 @@
import java.net.URLConnection;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
+import java.util.List;
import static org.nuiton.i18n.I18n._;
@@ -55,6 +76,10 @@
*/
public final class TuttiUIUtil {
+ public static final String SPECIES_DECORATOR = "decorator";
+
+ public static final String SPECIES_DECORATOR_INDEX = "decoratorIndex";
+
/** Logger. */
private static final Log log = LogFactory.getLog(TuttiUIUtil.class);
@@ -280,4 +305,146 @@
return result;
}
+ public static TuttiDecorator<Species> getSpeciesColumnDecorator(TableColumnExt tableColumn) {
+ TuttiDecorator<Species> decorator = (TuttiDecorator<Species>)
+ tableColumn.getClientProperty(SPECIES_DECORATOR);
+ return decorator;
+ }
+
+ public static <R extends Serializable, T extends AbstractTuttiTableModel<R>> void installSpeciesColumnComparatorPopup(JXTable table,
+ TableColumnExt speciesColumn,
+ String... tips) {
+
+ ButtonGroup buttonGroup = new ButtonGroup();
+
+ SpeciesDecoratorListener<R, T> speciesDecoratorListener =
+ new SpeciesDecoratorListener<R, T>(table, buttonGroup);
+
+ TuttiDecorator<Species> decorator =
+ getSpeciesColumnDecorator(speciesColumn);
+
+ JPopupMenu popup = new JPopupMenu();
+ popup.add(new JLabel(_("tutti.ui.change.species.decorator")));
+ popup.add(new JSeparator());
+
+ for (int i = 0, nbContext = decorator.getNbContext(); i < nbContext; i++) {
+ String property = decorator.getProperty(i);
+
+ String i18nName = "tutti.property." + property;
+ speciesColumn.putClientProperty(i18nName, tips[i]);
+ JRadioButtonMenuItem item = new JRadioButtonMenuItem(tips[i]);
+ item.putClientProperty(TuttiUIUtil.SPECIES_DECORATOR_INDEX, i);
+ item.addActionListener(speciesDecoratorListener);
+ if (i == 0) {
+ // select the first property (as it is the
+ item.setSelected(true);
+ }
+ buttonGroup.add(item);
+ popup.add(item);
+ }
+
+ // recompute the header tip using the decorator
+ speciesDecoratorListener.recomputeSpeciesColumnTip();
+
+ // listen when to show popup menu on cell header
+ table.getTableHeader().addMouseListener(
+ new ShowSpeciesDecoratorPopupListener(popup));
+
+ }
+
+ protected static class SpeciesDecoratorListener<R extends Serializable, T extends AbstractTuttiTableModel<R>> implements ActionListener {
+
+ protected final JXTable table;
+
+ protected final ButtonGroup buttonGroup;
+
+ protected final TuttiDecorator<Species> decorator;
+
+ protected final TableColumnExt column;
+
+ public SpeciesDecoratorListener(JXTable table,
+ ButtonGroup buttonGroup) {
+ this.table = table;
+ this.buttonGroup = buttonGroup;
+ this.column = (TableColumnExt) table.getColumn(0);
+ this.decorator = TuttiUIUtil.getSpeciesColumnDecorator(column);
+ }
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+
+ JRadioButtonMenuItem source = (JRadioButtonMenuItem) e.getSource();
+ buttonGroup.setSelected(source.getModel(), true);
+
+ Integer index =
+ (Integer) source.getClientProperty(TuttiUIUtil.SPECIES_DECORATOR_INDEX);
+
+ if (log.isInfoEnabled()) {
+ log.info("Selected decorator context index: " + index);
+ }
+
+ decorator.setContextIndex(index);
+
+ column.setComparator(decorator.getCurrentComparator());
+
+ // recompute the header tip
+ recomputeSpeciesColumnTip();
+
+ T tableModel = (T) table.getModel();
+
+ // keep selected rows
+ int[] rowIndexes = table.getSelectedRows();
+ List<R> rowsToReSelect = Lists.newArrayList();
+ for (int viewRowIndex : rowIndexes) {
+ int modelRowIndex = table.convertRowIndexToModel(viewRowIndex);
+ R row = tableModel.getEntry(modelRowIndex);
+ rowsToReSelect.add(row);
+ }
+
+ // fire model (will reload the comparator)
+ tableModel.fireTableDataChanged();
+
+ // reselect rows
+ for (R row : rowsToReSelect) {
+ int modelRowIndex = tableModel.getRowIndex(row);
+ int viewRowIndex = table.convertRowIndexToView(modelRowIndex);
+ table.addRowSelectionInterval(viewRowIndex, viewRowIndex);
+ }
+ }
+
+ public void recomputeSpeciesColumnTip() {
+ List<String> tips = Lists.newArrayList();
+ for (int i = 0, nbContext = decorator.getNbContext(); i < nbContext; i++) {
+ String property = decorator.getProperty(i);
+
+ String i18nName = "tutti.property." + property;
+ String tip = (String) column.getClientProperty(i18nName);
+ tips.add(tip);
+ }
+ String tip = Joiner.on(" - ").join(tips);
+ column.setToolTipText(tip);
+ }
+ }
+
+ protected static class ShowSpeciesDecoratorPopupListener extends MouseAdapter {
+
+ private final JPopupMenu popup;
+
+ public ShowSpeciesDecoratorPopupListener(JPopupMenu popup) {
+ this.popup = popup;
+ }
+
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ JTableHeader source = (JTableHeader) e.getSource();
+ Point point = e.getPoint();
+ int columnIndex = source.columnAtPoint(point);
+
+ boolean rightClick = SwingUtilities.isRightMouseButton(e);
+ if (columnIndex == 0 && rightClick) {
+ e.consume();
+ popup.show(source, e.getX(), e.getY());
+ }
+ }
+ }
}
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-10-08 16:24:46 UTC (rev 1290)
+++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-10-09 16:27:15 UTC (rev 1291)
@@ -86,6 +86,8 @@
tutti.common.file.tuttiMarineLitter=
tutti.common.file.tuttiSpecies=
tutti.common.file.zip=
+tutti.common.name=
+tutti.common.refTaxCode=
tutti.common.validate=
tutti.common.validate.mnemonic=
tutti.config.action.reload.actions=
@@ -1357,7 +1359,10 @@
tutti.option.edit=
tutti.option.import=
tutti.property.get.error=
+tutti.property.name=
+tutti.property.refTaxCode=
tutti.property.set.error=
+tutti.property.surveycode=
tutti.reimport.step.backupDb=
tutti.reimport.step.closeDb=
tutti.reimport.step.reloadApplication=
@@ -1429,6 +1434,9 @@
tutti.sendCruiseReport.mail.body=
tutti.sendCruiseReport.mail.subject=
tutti.sendCruiseReport.title.choose.exportFile=
+tutti.species.name.tip=
+tutti.species.refTaxCode.tip=
+tutti.species.surveyCode.tip=
tutti.splitBenthosBatch.action.cancel=
tutti.splitBenthosBatch.action.cancel.mnemonic=
tutti.splitBenthosBatch.action.cancel.tip=
@@ -1462,6 +1470,7 @@
tutti.splitSpeciesBatch.table.header.weight=
tutti.splitSpeciesBatch.title=
tutti.timeeditor.H=
+tutti.ui.change.species.decorator=
tutti.update.db=
tutti.update.help=
tutti.update.i18n=
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-10-08 16:24:46 UTC (rev 1290)
+++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-10-09 16:27:15 UTC (rev 1291)
@@ -1357,7 +1357,10 @@
tutti.option.edit=Éditer
tutti.option.import=Importer
tutti.property.get.error=Propriété %1s non trouvée sur l'objet de type %2s
+tutti.property.name=
+tutti.property.refTaxCode=
tutti.property.set.error=Propriété %1s non trouvée sur l'objet de type %2s
+tutti.property.surveycode=
tutti.reimport.step.backupDb=Sauvegarde de la base dans l'archive %s
tutti.reimport.step.closeDb=Fermeture de la base
tutti.reimport.step.reloadApplication=Redémarrage de l'application...
@@ -1429,6 +1432,9 @@
tutti.sendCruiseReport.mail.body=Bonjour,\n\nVeuillez trouver ci-joint le rapport des captures de la campagne %1s.\n*Pensez à joindre le fichier %2s*\n\nCordialement,\n\n*Votre nom*
tutti.sendCruiseReport.mail.subject=Captures de la campagne %s
tutti.sendCruiseReport.title.choose.exportFile=Envoyer les captures de la campagne
+tutti.species.name.tip=Nom scientifique
+tutti.species.refTaxCode.tip=Code Rubin
+tutti.species.surveyCode.tip=Code campagne ou code rubin
tutti.splitBenthosBatch.action.cancel=Annuler
tutti.splitBenthosBatch.action.cancel.mnemonic=A
tutti.splitBenthosBatch.action.cancel.tip=Annuler le sous-échantillonnage
@@ -1462,6 +1468,7 @@
tutti.splitSpeciesBatch.table.header.weight=Poids
tutti.splitSpeciesBatch.title=Catégorisation du lot
tutti.timeeditor.H=H
+tutti.ui.change.species.decorator=Changer la décoration
tutti.update.db=Base de données
tutti.update.help=Aide en ligne
tutti.update.i18n=Traductions
1
0
r1290 - in trunk: tutti-service/src/main/java/fr/ifremer/tutti/service tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util
by tchemit@users.forge.codelutin.com 08 Oct '13
by tchemit@users.forge.codelutin.com 08 Oct '13
08 Oct '13
Author: tchemit
Date: 2013-10-08 18:24:46 +0200 (Tue, 08 Oct 2013)
New Revision: 1290
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1290
Log:
refs #3328: [ERGO] Tri du tableau des esp?\195?\168ces
Modified:
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDecorator.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.css
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDecorator.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDecorator.java 2013-10-08 15:34:55 UTC (rev 1289)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDecorator.java 2013-10-08 16:24:46 UTC (rev 1290)
@@ -31,6 +31,7 @@
import com.google.common.collect.Maps;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.nuiton.decorator.Decorator;
import org.nuiton.decorator.DecoratorUtil;
import org.nuiton.decorator.JXPathDecorator;
import org.nuiton.decorator.MultiJXPathDecorator;
@@ -40,6 +41,7 @@
import java.io.Serializable;
import java.lang.reflect.Method;
import java.util.Arrays;
+import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -160,6 +162,10 @@
this.sortOnlyOnSelectedContextTokens = sortOnlyOnSelectedContextTokens;
}
+ public Comparator getCurrentComparator() {
+ return context.getComparator(0);
+ }
+
@Override
public String toString(Object bean) {
O bean1 = (O) bean;
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.css
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.css 2013-10-08 15:34:55 UTC (rev 1289)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.css 2013-10-08 16:24:46 UTC (rev 1290)
@@ -88,9 +88,8 @@
}
#speciesTable {
- /*selectionBackground: {null};*/
selectionForeground: {Color.BLACK};
- sortable: false;
+ sortable: true;
_help: {"tutti.editProtocol.field.species.help"};
}
@@ -105,9 +104,8 @@
}
#benthosTable {
- /*selectionBackground: {null};*/
selectionForeground: {Color.BLACK};
- sortable: false;
+ sortable: true;
_help: {"tutti.editProtocol.field.benthos.help"};
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java 2013-10-08 15:34:55 UTC (rev 1289)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java 2013-10-08 16:24:46 UTC (rev 1290)
@@ -37,6 +37,7 @@
import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
import fr.ifremer.tutti.persistence.entities.referential.Species;
import fr.ifremer.tutti.service.PersistenceService;
+import fr.ifremer.tutti.service.TuttiDecorator;
import fr.ifremer.tutti.ui.swing.content.home.CloneProtocolAction;
import fr.ifremer.tutti.ui.swing.content.home.EditProtocolAction;
import fr.ifremer.tutti.ui.swing.content.home.ImportProtocolAction;
@@ -58,6 +59,7 @@
import org.jdesktop.swingx.autocomplete.ComboBoxCellEditor;
import org.jdesktop.swingx.autocomplete.ObjectToStringConverter;
import org.jdesktop.swingx.table.DefaultTableColumnModelExt;
+import org.jdesktop.swingx.table.TableColumnExt;
import org.nuiton.decorator.Decorator;
import javax.swing.JComboBox;
@@ -300,16 +302,19 @@
DefaultTableColumnModelExt columnModel = new DefaultTableColumnModelExt();
- addColumnToModel(columnModel,
- null,
- newTableCellRender(Species.class),
- EditProtocolSpeciesTableModel.SPECIES_ID);
+ TableColumnExt speciesColumn = addColumnToModel(columnModel,
+ null,
+ newTableCellRender(Species.class),
+ EditProtocolSpeciesTableModel.SPECIES_ID);
+ speciesColumn.setSortable(true);
- addColumnToModel(columnModel,
- null,
- null,
- EditProtocolSpeciesTableModel.SURVEY_CODE_ID);
+ TableColumnExt speciesSurveyCodeColumn = addColumnToModel(columnModel,
+ null,
+ null,
+ EditProtocolSpeciesTableModel.SURVEY_CODE_ID);
+ speciesSurveyCodeColumn.setSortable(true);
+
addLengthClassesColumnToModel(columnModel, model.getLengthClassesPmfmId());
addBooleanColumnToModel(columnModel, EditProtocolSpeciesTableModel.WEIGHT_ENABLED, table);
@@ -351,6 +356,8 @@
tableModel.setRows(speciesRows);
getModel().setRemoveSpeciesEnabled(false);
+
+ initSpeciesComparator();
}
{
@@ -360,15 +367,19 @@
DefaultTableColumnModelExt columnModel = new DefaultTableColumnModelExt();
- addColumnToModel(columnModel,
- null,
- newTableCellRender(Species.class),
- EditProtocolSpeciesTableModel.SPECIES_ID);
+ TableColumnExt speciesColumn = addColumnToModel(columnModel,
+ null,
+ newTableCellRender(Species.class),
+ EditProtocolSpeciesTableModel.SPECIES_ID);
+ speciesColumn.setSortable(true);
+ TuttiDecorator<Species> decorator = (TuttiDecorator<Species>) getDecorator(Species.class, null);
+ speciesColumn.setComparator(decorator.getCurrentComparator());
- addColumnToModel(columnModel,
- null,
- null,
- EditProtocolSpeciesTableModel.SURVEY_CODE_ID);
+ TableColumnExt speciesSurveyCodeColumn = addColumnToModel(columnModel,
+ null,
+ null,
+ EditProtocolSpeciesTableModel.SURVEY_CODE_ID);
+ speciesSurveyCodeColumn.setSortable(true);
addLengthClassesColumnToModel(columnModel, model.getLengthClassesPmfmId());
@@ -412,6 +423,8 @@
tableModel.setRows(benthosRows);
getModel().setRemoveBenthosEnabled(false);
+
+ initBenthosComparator();
}
allDoubleLists = Lists.newArrayList(
@@ -480,6 +493,39 @@
dialog = new SelectSpeciesUI(ui);
}
+ protected void initSpeciesComparator() {
+
+ JXTable table = getSpeciesTable();
+
+ TuttiDecorator<Species> decorator = (TuttiDecorator<Species>) getDecorator(Species.class, null);
+ TuttiDecorator.TuttiDecoratorComparator currentComparator = (TuttiDecorator.TuttiDecoratorComparator) decorator.getCurrentComparator();
+ TableColumnExt tableColumn = (TableColumnExt) table.getColumns().get(0);
+ List<Species> species = Lists.newArrayList();
+ List<EditProtocolSpeciesRowModel> rows = getModel().getSpeciesRow();
+ for (EditProtocolSpeciesRowModel row : rows) {
+ species.add(row.getSpecies());
+ }
+ currentComparator.init(decorator, species);
+
+ tableColumn.setComparator(currentComparator);
+ }
+
+ protected void initBenthosComparator() {
+
+ JXTable table = getBenthosTable();
+
+ TuttiDecorator<Species> decorator = (TuttiDecorator<Species>) getDecorator(Species.class, null);
+ TuttiDecorator.TuttiDecoratorComparator currentComparator = (TuttiDecorator.TuttiDecoratorComparator) decorator.getCurrentComparator();
+ TableColumnExt tableColumn = (TableColumnExt) table.getColumns().get(0);
+ List<Species> species = Lists.newArrayList();
+ List<EditProtocolSpeciesRowModel> rows = getModel().getBenthosRow();
+ for (EditProtocolSpeciesRowModel row : rows) {
+ species.add(row.getSpecies());
+ }
+ currentComparator.init(decorator, species);
+
+ tableColumn.setComparator(currentComparator);
+ }
@Override
protected JComponent getComponentToFocus() {
return getUI().getNameField();
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java 2013-10-08 15:34:55 UTC (rev 1289)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java 2013-10-08 16:24:46 UTC (rev 1290)
@@ -1085,20 +1085,20 @@
validator.setBean(bean);
}
- protected <R extends AbstractTuttiBeanUIModel> void addColumnToModel(TableColumnModel model,
- TableCellEditor editor,
- TableCellRenderer renderer,
- ColumnIdentifier<R> identifier) {
+ protected <R extends AbstractTuttiBeanUIModel> TableColumnExt addColumnToModel(TableColumnModel model,
+ TableCellEditor editor,
+ TableCellRenderer renderer,
+ ColumnIdentifier<R> identifier) {
- addColumnToModel(model, editor, renderer, identifier, null);
+ return addColumnToModel(model, editor, renderer, identifier, null);
}
- protected <R extends AbstractTuttiBeanUIModel> void addColumnToModel(TableColumnModel model,
- TableCellEditor editor,
- TableCellRenderer renderer,
- ColumnIdentifier<R> identifier,
- WeightUnit weightUnit) {
+ protected <R extends AbstractTuttiBeanUIModel> TableColumnExt addColumnToModel(TableColumnModel model,
+ TableCellEditor editor,
+ TableCellRenderer renderer,
+ ColumnIdentifier<R> identifier,
+ WeightUnit weightUnit) {
TableColumnExt col = new TableColumnExt(model.getColumnCount());
col.setCellEditor(editor);
@@ -1116,32 +1116,22 @@
col.setIdentifier(identifier);
model.addColumn(col);
+ // by default no column is sortable, must specify it
+ col.setSortable(false);
+ return col;
}
- protected <R extends AbstractTuttiBeanUIModel> void addColumnToModel(TableColumnModel model,
- ColumnIdentifier<R> identifier) {
+ protected <R extends AbstractTuttiBeanUIModel> TableColumnExt addColumnToModel(TableColumnModel model,
+ ColumnIdentifier<R> identifier) {
- addColumnToModel(model, null, null, identifier, null);
+ return addColumnToModel(model, null, null, identifier, null);
}
-// protected <R extends AbstractTuttiBeanUIModel> void addFloatColumnToModel(TableColumnModel model,
-// ColumnIdentifier<R> identifier,
-// String numberPattern) {
-//
-// NumberCellEditor<Float> editor =
-// JAXXWidgetUtil.newNumberTableCellEditor(Float.class, false);
-// editor.getNumberEditor().setSelectAllTextOnError(true);
-// editor.getNumberEditor().getTextField().setBorder(new LineBorder(Color.GRAY, 2));
-// editor.getNumberEditor().setNumberPattern(numberPattern);
-//
-// addColumnToModel(model, editor, null, identifier, null);
-// }
+ protected <R extends AbstractTuttiBeanUIModel> TableColumnExt addFloatColumnToModel(TableColumnModel model,
+ ColumnIdentifier<R> identifier,
+ String numberPattern,
+ JTable table) {
- protected <R extends AbstractTuttiBeanUIModel> void addFloatColumnToModel(TableColumnModel model,
- ColumnIdentifier<R> identifier,
- String numberPattern,
- JTable table) {
-
NumberCellEditor<Float> editor =
JAXXWidgetUtil.newNumberTableCellEditor(Float.class, false);
editor.getNumberEditor().setSelectAllTextOnError(true);
@@ -1151,13 +1141,13 @@
TableCellRenderer renderer =
newNumberCellRenderer(table.getDefaultRenderer(Number.class));
- addColumnToModel(model, editor, renderer, identifier, null);
+ return addColumnToModel(model, editor, renderer, identifier, null);
}
- protected <R extends AbstractTuttiBeanUIModel> void addFloatColumnToModel(TableColumnModel model,
- ColumnIdentifier<R> identifier,
- WeightUnit weightUnit,
- JTable table) {
+ protected <R extends AbstractTuttiBeanUIModel> TableColumnExt addFloatColumnToModel(TableColumnModel model,
+ ColumnIdentifier<R> identifier,
+ WeightUnit weightUnit,
+ JTable table) {
Preconditions.checkNotNull(weightUnit);
NumberCellEditor<Float> editor =
@@ -1169,13 +1159,13 @@
TableCellRenderer renderer =
newNumberCellRenderer(table.getDefaultRenderer(Number.class));
- addColumnToModel(model, editor, renderer, identifier, weightUnit);
+ return addColumnToModel(model, editor, renderer, identifier, weightUnit);
}
- protected <R extends AbstractTuttiBeanUIModel> void addIntegerColumnToModel(TableColumnModel model,
- ColumnIdentifier<R> identifier,
- String numberPattern,
- JTable table) {
+ protected <R extends AbstractTuttiBeanUIModel> TableColumnExt addIntegerColumnToModel(TableColumnModel model,
+ ColumnIdentifier<R> identifier,
+ String numberPattern,
+ JTable table) {
NumberCellEditor<Integer> editor =
JAXXWidgetUtil.newNumberTableCellEditor(Integer.class, false);
@@ -1184,7 +1174,7 @@
editor.getNumberEditor().setNumberPattern(numberPattern);
TableCellRenderer renderer = newNumberCellRenderer(table.getDefaultRenderer(Number.class));
- addColumnToModel(model, editor, renderer, identifier, null);
+ return addColumnToModel(model, editor, renderer, identifier, null);
}
@@ -1205,21 +1195,21 @@
}
- protected <R extends AbstractTuttiBeanUIModel> void addBooleanColumnToModel(TableColumnModel model,
- ColumnIdentifier<R> identifier,
- JTable table) {
+ protected <R extends AbstractTuttiBeanUIModel> TableColumnExt addBooleanColumnToModel(TableColumnModel model,
+ ColumnIdentifier<R> identifier,
+ JTable table) {
- addColumnToModel(model,
- table.getDefaultEditor(Boolean.class),
- table.getDefaultRenderer(Boolean.class),
- identifier,
- null);
+ return addColumnToModel(model,
+ table.getDefaultEditor(Boolean.class),
+ table.getDefaultRenderer(Boolean.class),
+ identifier,
+ null);
}
- protected <R extends AbstractTuttiBeanUIModel, B> void addComboDataColumnToModel(TableColumnModel model,
- ColumnIdentifier<R> identifier,
- Decorator<B> decorator,
- List<B> data) {
+ protected <R extends AbstractTuttiBeanUIModel, B> TableColumnExt addComboDataColumnToModel(TableColumnModel model,
+ ColumnIdentifier<R> identifier,
+ Decorator<B> decorator,
+ List<B> data) {
JComboBox comboBox = new JComboBox();
comboBox.setRenderer(newListCellRender(decorator));
@@ -1235,11 +1225,11 @@
BeanUIUtil.decorate(comboBox, converter);
ComboBoxCellEditor editor = new ComboBoxCellEditor(comboBox);
- addColumnToModel(model,
- editor,
- newTableCellRender(decorator),
- identifier,
- null);
+ return addColumnToModel(model,
+ editor,
+ newTableCellRender(decorator),
+ identifier,
+ null);
}
protected <O> TableCellRenderer newTableCellRender(Class<O> type) {
1
0
r1289 - trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost
by tchemit@users.forge.codelutin.com 08 Oct '13
by tchemit@users.forge.codelutin.com 08 Oct '13
08 Oct '13
Author: tchemit
Date: 2013-10-08 17:34:55 +0200 (Tue, 08 Oct 2013)
New Revision: 1289
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1289
Log:
fixes #3463: [CAPTURE] test des imports exports mutipostes, probl?\195?\168me sur import observations individuelles
fixes #3464: [CAPTURE] test des imports exports mutipostes, probl?\195?\168me sur import capture accidentelle
Modified:
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MultiPostImportService.java
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MultiPostImportService.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MultiPostImportService.java 2013-10-08 15:19:57 UTC (rev 1288)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MultiPostImportService.java 2013-10-08 15:34:55 UTC (rev 1289)
@@ -895,7 +895,9 @@
// Import caracteristics
- importIndividualObservationCaracteristics(file, batches, caracteristics);
+ importIndividualObservationCaracteristics(tempDir,
+ batches,
+ caracteristics);
// Persist batches
@@ -941,8 +943,6 @@
batch.setWeight(row.getWeight());
batch.setSize(row.getSize());
batch.setLengthStepCaracteristic(row.getLengthStepCaracteristic());
-// batch.setSamplingCode(row.getSamplingCode());
-// batch.setCalcifiedPieceSamplingCode(row.getCalcifiedPieceSamplingCode());
batch.setComment(row.getComment());
batch.setCaracteristics(new CaracteristicMap());
@@ -1052,7 +1052,9 @@
// Import caracteristics
- importAccidentalCatchesCaracteristics(file, batches, caracteristics);
+ importAccidentalCatchesCaracteristics(tempDir,
+ batches,
+ caracteristics);
// Persist batches
@@ -1069,7 +1071,8 @@
persistenceService.invoke(call);
}
- protected Map<String, AccidentalBatch> importAccidentalCatchesBatches(File file, FishingOperation operation,
+ protected Map<String, AccidentalBatch> importAccidentalCatchesBatches(File file,
+ FishingOperation operation,
List<Species> speciesList,
List<CaracteristicQualitativeValue> genderValues,
List<Caracteristic> caracteristics,
@@ -1078,7 +1081,7 @@
Map<String, AccidentalBatch> batches = Maps.newLinkedHashMap();
Reader reader = TuttiIOUtil.newReader(
- new File(file, INDIVIDUAL_OBSERVATION_FILE),
+ new File(file, ACCIDENTAL_CATCHES_FILE),
n_("tutti.service.multipost.import.batches.error"));
try {
@@ -1122,7 +1125,8 @@
return batches;
}
- protected void importAccidentalCatchesCaracteristics(File file, Map<String, AccidentalBatch> batches,
+ protected void importAccidentalCatchesCaracteristics(File file,
+ Map<String, AccidentalBatch> batches,
List<Caracteristic> caracteristics) {
CaracteristicRowModel caracteristicModel = new CaracteristicRowModel(csvSeparator,
1
0
r1288 - in trunk/tutti-service/src: main/java/fr/ifremer/tutti/service test/java/fr/ifremer/tutti/service
by tchemit@users.forge.codelutin.com 08 Oct '13
by tchemit@users.forge.codelutin.com 08 Oct '13
08 Oct '13
Author: tchemit
Date: 2013-10-08 17:19:57 +0200 (Tue, 08 Oct 2013)
New Revision: 1288
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1288
Log:
fixes #3462: [TRAIT] le tri de la liste des traits ne marche pas
Modified:
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDecorator.java
trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/DecoratorServiceTest.java
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java 2013-10-08 14:12:38 UTC (rev 1287)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java 2013-10-08 15:19:57 UTC (rev 1288)
@@ -24,6 +24,7 @@
* #L%
*/
+import com.google.common.collect.Sets;
import fr.ifremer.tutti.LabelAware;
import fr.ifremer.tutti.persistence.entities.data.Attachment;
import fr.ifremer.tutti.persistence.entities.data.Cruise;
@@ -102,7 +103,7 @@
registerTuttiDecorator(TuttiLocation.class, "${label}$s#${name}$s", SEPARATOR, " - ");
registerTuttiDecorator(Cruise.class, "${name}$s", SEPARATOR, " - ");
registerTuttiDecorator(TuttiProtocol.class, "${name}$s", SEPARATOR, " - ");
- registerTuttiDecorator(FishingOperation.class, "${stationNumber}$s#${fishingOperationNumber}$s#${multirigAggregation}$s#${gearShootingStartDate}$td/%4$tm/%4$tY", SEPARATOR, " - ");
+ registerTuttiDecorator(FishingOperation.class, "${stationNumber}$s#${fishingOperationNumber}$d#${multirigAggregation}$s#${gearShootingStartDate}$td/%4$tm/%4$tY", SEPARATOR, " - ");
registerTuttiDecorator(FishingOperation.class, FILE_NAME_COMPATIBLE, "${stationNumber}$s#${fishingOperationNumber}$s#${multirigAggregation}$s#${gearShootingStartDate}$td%4$tm%4$tY", SEPARATOR, "-");
registerTuttiDecorator(Gear.class, "${label}$s#${name}$s", SEPARATOR, " - ");
registerTuttiDecorator(Gear.class, GEAR_WITH_RANK_ORDER, "${rankOrder}$d#${label}$s#${name}$s", SEPARATOR, " - ");
@@ -129,6 +130,10 @@
registerDecorator(new SpeciesDecorator());
registerDecorator(FROM_PROTOCOL, new SpeciesFromProtocolDecorator());
registerTuttiDecorator(Caracteristic.class, CARACTERISTIC_WITH_UNIT, "${parameterName}$s#${matrixName}$s#${fractionName}$s#${methodName}$s (${unit}$s)", SEPARATOR, " - ");
+
+ TuttiDecorator<FishingOperation> fishingOperationTuttiDecorator = (TuttiDecorator<FishingOperation>) getDecoratorByType(FishingOperation.class);
+ fishingOperationTuttiDecorator.setSortOnlyOnSelectedContext(true);
+ fishingOperationTuttiDecorator.setSortOnlyOnSelectedContextTokens(Sets.newHashSet(FishingOperation.PROPERTY_FISHING_OPERATION_NUMBER));
}
public void registerTuttiDecorator(Class<?> klass, String expression, String separator, String separatorReplacement) {
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDecorator.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDecorator.java 2013-10-08 14:12:38 UTC (rev 1287)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDecorator.java 2013-10-08 15:19:57 UTC (rev 1288)
@@ -64,6 +64,21 @@
protected boolean useCache;
+ /**
+ * To sort always on the selected context.
+ *
+ * @since 2.8
+ */
+ protected boolean sortOnlyOnSelectedContext;
+
+ /**
+ * List of tokens to sort using the {@link #sortOnlyOnSelectedContext} mode.
+ *
+ * If the mode is not set, then won't use this.
+ * @since 2.8
+ */
+ protected Set<String> sortOnlyOnSelectedContextTokens;
+
public static <O> TuttiDecorator<O> newDecorator(Class<O> internalClass,
String expression,
String separator,
@@ -129,6 +144,22 @@
cache.invalidateAll();
}
+ public boolean isSortOnlyOnSelectedContext() {
+ return sortOnlyOnSelectedContext;
+ }
+
+ public void setSortOnlyOnSelectedContext(boolean sortOnlyOnSelectedContext) {
+ this.sortOnlyOnSelectedContext = sortOnlyOnSelectedContext;
+ }
+
+ public Set<String> getSortOnlyOnSelectedContextTokens() {
+ return sortOnlyOnSelectedContextTokens;
+ }
+
+ public void setSortOnlyOnSelectedContextTokens(Set<String> sortOnlyOnSelectedContextTokens) {
+ this.sortOnlyOnSelectedContextTokens = sortOnlyOnSelectedContextTokens;
+ }
+
@Override
public String toString(Object bean) {
O bean1 = (O) bean;
@@ -218,12 +249,20 @@
@Override
public void init(JXPathDecorator<O> decorator, List<O> datas) {
clear();
- TuttiDecorator<O> tuttDecorator = (TuttiDecorator<O>) decorator;
+ TuttiDecorator<O> tuttiDecorator = (TuttiDecorator<O>) decorator;
+ String token = decorator.getTokens()[0];
+ boolean sortOnlyOnSelectedContext =
+ tuttiDecorator.isSortOnlyOnSelectedContext() && tuttiDecorator.getSortOnlyOnSelectedContextTokens()!=null && tuttiDecorator.getSortOnlyOnSelectedContextTokens().contains(token);
+
for (O data : datas) {
- if (data instanceof Number) {
- valueCache.put(data, (Comparable)data);
+ if (sortOnlyOnSelectedContext) {
+ Object tokenValue = tuttiDecorator.getValue(data, token);
+
+ valueCache.put(data, (Comparable) tokenValue);
+ } else if (data instanceof Number) {
+ valueCache.put(data, (Comparable) data);
} else {
- Comparable key = (Comparable) tuttDecorator.toString(data);
+ Comparable key = tuttiDecorator.toString(data);
valueCache.put(data, key);
}
}
Modified: trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/DecoratorServiceTest.java
===================================================================
--- trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/DecoratorServiceTest.java 2013-10-08 14:12:38 UTC (rev 1287)
+++ trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/DecoratorServiceTest.java 2013-10-08 15:19:57 UTC (rev 1288)
@@ -54,6 +54,7 @@
import fr.ifremer.tutti.persistence.entities.referential.Vessel;
import fr.ifremer.tutti.persistence.entities.referential.Vessels;
import fr.ifremer.tutti.service.config.TuttiServiceConfig;
+import org.apache.commons.lang3.time.DateUtils;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
@@ -61,6 +62,7 @@
import org.nuiton.decorator.DecoratorUtil;
import org.nuiton.decorator.JXPathDecorator;
+import java.text.ParseException;
import java.util.List;
import static org.nuiton.i18n.I18n._;
@@ -147,7 +149,46 @@
}
+ // see http://forge.codelutin.com/issues/3462
@Test
+ public void decorateFishingOperation() throws ParseException {
+
+ JXPathDecorator<FishingOperation> d = (JXPathDecorator<FishingOperation>) assertDecoratorByTypeFound(FishingOperation.class);
+
+ List<FishingOperation> data = Lists.newArrayList();
+
+ FishingOperation p0 = FishingOperations.newFishingOperation();
+ p0.setStationNumber("A");
+ p0.setFishingOperationNumber(1);
+ p0.setMultirigAggregation("1");
+ p0.setGearShootingStartDate(DateUtils.parseDate("08/10/2013", "dd/MM/yyyy"));
+ data.add(p0);
+
+ FishingOperation p1 = FishingOperations.newFishingOperation();
+ p1.setStationNumber("A");
+ p1.setFishingOperationNumber(10);
+ p1.setMultirigAggregation("1");
+ p1.setGearShootingStartDate(DateUtils.parseDate("08/10/2013", "dd/MM/yyyy"));
+ data.add(p1);
+
+ FishingOperation p2 = FishingOperations.newFishingOperation();
+ p2.setStationNumber("A");
+ p2.setFishingOperationNumber(2);
+ p2.setMultirigAggregation("1");
+ p2.setGearShootingStartDate(DateUtils.parseDate("08/10/2013", "dd/MM/yyyy"));
+ data.add(p2);
+
+ DecoratorUtil.sort(d, data, 0);
+ // A1 A10 A2
+ Assert.assertEquals(Lists.newArrayList(p0, p1, p2), data);
+
+
+ DecoratorUtil.sort(d, data, 1);
+ // A1 A2 A10
+ Assert.assertEquals(Lists.newArrayList(p0, p2, p1), data);
+ }
+
+ @Test
public void decorateGear() {
Decorator<Gear> d = assertDecoratorByTypeFound(DecoratorService.GEAR_WITH_RANK_ORDER, Gear.class);
@@ -184,7 +225,7 @@
Assert.assertEquals(gears, Lists.newArrayList(g0, g1, g2, g11));
DecoratorUtil.sort((JXPathDecorator<Gear>) d, gears, 0, true);
- Assert.assertEquals(gears, Lists.newArrayList( g11,g2, g1, g0));
+ Assert.assertEquals(gears, Lists.newArrayList(g11, g2, g1, g0));
}
1
0