This is an automated email from the git hooks/post-receive script. New commit to branch feature/7930 in repository tutti. See http://git.codelutin.com/tutti.git commit b2d9145b0d53fa6c115127a2e93b328fcb70993f Author: Kevin Morin <morin@codelutin.com> Date: Fri Feb 5 14:09:11 2016 +0100 combo de selection de l'espece + ajout de lignes dans le tableau + possibilité de splitter une ligne (refs #7930) --- pom.xml | 4 + .../fr/ifremer/tutti/service/DecoratorService.java | 39 +++++++ .../resources/i18n/tutti-service_en_GB.properties | 4 + .../resources/i18n/tutti-service_fr_FR.properties | 4 + .../content/protocol/EditProtocolUIModel.java | 15 +++ .../CalcifiedPiecesSamplingEditorRowModel.java | 20 +++- .../CalcifiedPiecesSamplingEditorTableModel.java | 25 +++++ .../CalcifiedPiecesSamplingEditorUI.jaxx | 7 +- .../CalcifiedPiecesSamplingEditorUI.jcss | 20 ++++ .../CalcifiedPiecesSamplingEditorUIHandler.java | 113 +++++++++++++++++++++ .../actions/AddSpeciesAction.java | 25 +++++ .../actions/SplitSpeciesAction.java | 60 +++++++++++ .../resources/i18n/tutti-ui-swing_en_GB.properties | 4 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 4 + 14 files changed, 339 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index fb1ca02..a0988a1 100644 --- a/pom.xml +++ b/pom.xml @@ -121,6 +121,8 @@ <projectId>tutti</projectId> + <javaVersion>1.8</javaVersion> + <!-- libraries version --> <nuitonI18nVersion>3.3</nuitonI18nVersion> <nuitonValidatorVersion>3.0</nuitonValidatorVersion> @@ -158,6 +160,8 @@ <!-- Where are deployed software components --> <distroUrl>https://nexus.nuiton.org/nexus/content/repositories/other-releases</distroUrl> + + </properties> <repositories> diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java index 77c3f6a..e7aaf49 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java @@ -80,6 +80,10 @@ public class DecoratorService extends AbstractTuttiService { public static final String SEPARATOR = "#"; + public static final String MATURITY = "maturity"; + + public static final String SHORT_MATURITY = "shortMaturity"; + public static final Comparator<FishingOperation> FISHING_OPERATION_COMPARATOR_BY_GEAR_SHOOTING_START_DATE = new Comparator<FishingOperation>() { @Override public int compare(FishingOperation o1, FishingOperation o2) { @@ -87,6 +91,7 @@ public class DecoratorService extends AbstractTuttiService { } }; + /** Delegate decorator provider. */ protected DecoratorProvider decoratorProvider; @@ -156,6 +161,8 @@ public class DecoratorService extends AbstractTuttiService { } }); registerDecorator(SPACE_EVERY_3_DIGIT, new SpaceEvery3DigitDecorator()); + registerDecorator(MATURITY, new MaturityDecorator(false)); + registerDecorator(SHORT_MATURITY, new MaturityDecorator(true)); registerDecorator(new VesselDecorator()); registerDecorator(new ProgramDecorator()); registerTuttiDecorator(Program.class, ONLY_NAME, "${name}$s", SEPARATOR, " - "); @@ -426,4 +433,36 @@ public class DecoratorService extends AbstractTuttiService { } } } + + public static class MaturityDecorator extends Decorator<Boolean> { + + protected boolean shortRendering; + + protected MaturityDecorator(boolean shortRendering) { + super(Boolean.class); + this.shortRendering = shortRendering; + } + + @Override + public String toString(Object bean) { + String result; + + if (bean == null) { + result = ""; + + } else { + + Boolean maturity = (Boolean) bean; + + if (shortRendering) { + result = maturity ? t("tutti.maturity.mature.short") : t("tutti.maturity.immature.short"); + + } else { + result = maturity ? t("tutti.maturity.mature") : t("tutti.maturity.immature"); + } + } + + return result; + } + } } diff --git a/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties b/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties index 2b30977..fa432d4 100644 --- a/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties +++ b/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties @@ -13,6 +13,10 @@ tutti.error.messages= tutti.error.species.not.in.protocol= tutti.fatal.messages= tutti.io.mkDir.error= +tutti.maturity.immature= +tutti.maturity.immature.short= +tutti.maturity.mature= +tutti.maturity.mature.short= tutti.pdf.export.missing.species.code= tutti.property.attachment= tutti.property.caracteristic= diff --git a/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties b/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties index 76332e6..2b2727f 100644 --- a/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties +++ b/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties @@ -8,6 +8,10 @@ tutti.csv.import.error.on.row=Des erreurs ont été détectées à la ligne %s \ tutti.error.messages=Erreurs \:\n %s tutti.fatal.messages=Erreurs critiques \:\n %s tutti.io.mkDir.error=Erreur à la création du dossier %s +tutti.maturity.immature=Immature +tutti.maturity.immature.short=I +tutti.maturity.mature=Mature +tutti.maturity.mature.short=M tutti.pdf.export.missing.species.code=Une espèce (referenceId %s, nom scientifique %s) n'a ni code campagne, ni code refTax. tutti.property.attachment=Pièce jointe tutti.property.caracteristic=Caractéristique diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java index 84b1f81..af261a1 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java @@ -35,6 +35,7 @@ import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocols; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorRowModel; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiBeanUIModel; import org.apache.commons.lang3.mutable.MutableInt; import org.nuiton.util.beans.Binder; @@ -78,6 +79,8 @@ public class EditProtocolUIModel extends AbstractTuttiBeanUIModel<TuttiProtocol, public static final String PROPERTY_CLEANED = "cleaned"; + public static final String PROPERTY_CSP_ROWS = "cspRows"; + /** * Delegate edit object. * @@ -155,6 +158,8 @@ public class EditProtocolUIModel extends AbstractTuttiBeanUIModel<TuttiProtocol, protected List<EditProtocolSpeciesRowModel> benthosRow; + protected List<CalcifiedPiecesSamplingEditorRowModel> cspRows; + protected static Binder<EditProtocolUIModel, TuttiProtocol> toBeanBinder = BinderFactory.newBinder(EditProtocolUIModel.class, TuttiProtocol.class); @@ -249,6 +254,16 @@ public class EditProtocolUIModel extends AbstractTuttiBeanUIModel<TuttiProtocol, firePropertyChange(PROPERTY_BENTHOS_ROW, oldValue, benthosRow); } + public List<CalcifiedPiecesSamplingEditorRowModel> getCspRows() { + return cspRows; + } + + public void setCspRows(List<CalcifiedPiecesSamplingEditorRowModel> cspRows) { + Object oldValue = getCspRows(); + this.cspRows = cspRows; + firePropertyChange(PROPERTY_CSP_ROWS, oldValue, cspRows); + } + public boolean isRemoveSpeciesEnabled() { return removeSpeciesEnabled; } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorRowModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorRowModel.java index 3edea71..a808c7f 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorRowModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorRowModel.java @@ -16,17 +16,21 @@ public class CalcifiedPiecesSamplingEditorRowModel extends AbstractSerializableB public static final String PROPERTY_MAX_SIZE = "maxSize"; + public static final String PROPERTY_MATURITY = "maturity"; + protected Species species; protected int minSize; - protected int maxSize; + protected Integer maxSize; + + protected Boolean maturity; - public int getMaxSize() { + public Integer getMaxSize() { return maxSize; } - public void setMaxSize(int maxSize) { + public void setMaxSize(Integer maxSize) { Object oldValue = getMaxSize(); this.maxSize = maxSize; firePropertyChange(PROPERTY_MAX_SIZE, oldValue, maxSize); @@ -51,4 +55,14 @@ public class CalcifiedPiecesSamplingEditorRowModel extends AbstractSerializableB this.species = species; firePropertyChange(PROPERTY_SPECIES, oldValue, species); } + + public Boolean getMaturity() { + return maturity; + } + + public void setMaturity(Boolean maturity) { + Object oldValue = getMaturity(); + this.maturity = maturity; + firePropertyChange(PROPERTY_MATURITY, oldValue, maturity); + } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorTableModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorTableModel.java index a9fb747..25c8064 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorTableModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorTableModel.java @@ -1,9 +1,13 @@ package fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling; +import com.google.common.collect.Lists; +import fr.ifremer.tutti.persistence.entities.referential.Species; import org.jdesktop.swingx.table.TableColumnModelExt; import org.nuiton.jaxx.application.swing.table.AbstractApplicationTableModel; import org.nuiton.jaxx.application.swing.table.ColumnIdentifier; +import java.util.List; + import static org.nuiton.i18n.I18n.n; /** @@ -27,12 +31,33 @@ public class CalcifiedPiecesSamplingEditorTableModel extends AbstractApplication n("tutti.editCps.table.header.maxSize.field"), n("tutti.editCps.table.header.maxSize.field.tip")); + public static final ColumnIdentifier<CalcifiedPiecesSamplingEditorRowModel> MATURITY = ColumnIdentifier.newId( + CalcifiedPiecesSamplingEditorRowModel.PROPERTY_MATURITY, + n("tutti.editCps.table.header.maturity.field"), + n("tutti.editCps.table.header.maturity.field.tip")); + public CalcifiedPiecesSamplingEditorTableModel(TableColumnModelExt columnModel) { super(columnModel, false, false); + setNoneEditableCols(SPECIES, MAX_SIZE, MATURITY); } @Override public CalcifiedPiecesSamplingEditorRowModel createNewRow() { return new CalcifiedPiecesSamplingEditorRowModel(); } + + /** + * 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 (CalcifiedPiecesSamplingEditorRowModel row : rows) { + result.add(row.getSpecies()); + } + return result; + } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jaxx index 7e9bba5..7cffb53 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jaxx +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jaxx @@ -2,8 +2,9 @@ implements='fr.ifremer.tutti.ui.swing.util.TuttiUI<EditProtocolUIModel, CalcifiedPiecesSamplingEditorUIHandler>'> <import> - fr.ifremer.tutti.persistence.entities.referential.Species + fr.ifremer.tutti.persistence.entities.referential.Species + fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolSpeciesRowModel fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUIModel fr.ifremer.tutti.ui.swing.util.TuttiUI fr.ifremer.tutti.ui.swing.util.TuttiUIUtil @@ -12,7 +13,6 @@ org.jdesktop.swingx.JXTable - </import> <script><![CDATA[ @@ -39,6 +39,9 @@ genericType='Species'/> </cell> <cell fill='both'> + <JComboBox id='maturityComboBox'/> + </cell> + <cell fill='both'> <JButton id='addSpeciesButton'/> </cell> </row> diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jcss b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jcss index cafa9da..d3207f3 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jcss +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jcss @@ -1,4 +1,24 @@ +BeanFilterableComboBox { + showReset: true; +} + +#speciesComboBox { + enabled: {!speciesComboBox.isEmpty()}; + toolTipText: "tutti.editCps.field.species.tip"; + _help: {"tutti.editCps.field.species.help"}; +} + +#maturityComboBox { + toolTipText: "tutti.editCps.field.maturity.tip"; + _help: {"tutti.editCps.field.maturity.help"}; +} + #addSpeciesButton { actionIcon: add; _simpleAction: {fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.actions.AddSpeciesAction.class}; +} + +#splitCpsRowMenu { + actionIcon: add; + _simpleAction: {fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.actions.SplitSpeciesAction.class}; } \ No newline at end of file diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java index d413d3b..dd67edf 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java @@ -1,10 +1,27 @@ package fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling; +import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.service.DecoratorService; +import fr.ifremer.tutti.service.TuttiDecorator; +import fr.ifremer.tutti.ui.swing.content.operation.catches.SpeciesAbleBatchRowHelper; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUIModel; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; +import jaxx.runtime.SwingUtil; import jaxx.runtime.validator.swing.SwingValidator; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.jdesktop.swingx.JXTable; +import org.jdesktop.swingx.table.DefaultTableColumnModelExt; +import org.jdesktop.swingx.table.TableColumnExt; import javax.swing.JComponent; +import javax.swing.event.TableModelEvent; +import javax.swing.event.TableModelListener; +import javax.swing.table.JTableHeader; +import java.util.ArrayList; +import java.util.List; + +import static org.nuiton.i18n.I18n.t; /** * @author Kevin Morin (Code Lutin) @@ -12,12 +29,108 @@ import javax.swing.JComponent; */ public class CalcifiedPiecesSamplingEditorUIHandler extends AbstractTuttiUIHandler<EditProtocolUIModel, CalcifiedPiecesSamplingEditorUI> { + /** Logger. */ + private static final Log log = LogFactory.getLog(CalcifiedPiecesSamplingEditorUIHandler.class); @Override public void afterInit(CalcifiedPiecesSamplingEditorUI calcifiedPiecesSamplingEditorUI) { initUI(calcifiedPiecesSamplingEditorUI); + initBeanFilterableComboBox(ui.getSpeciesComboBox(), getModel().getAllSpecies(), null); + + JXTable cpsTable = ui.getCpsTable(); + + DefaultTableColumnModelExt columnModel = new DefaultTableColumnModelExt(); + + TableColumnExt speciesColumn = addColumnToModel(columnModel, + null, + newTableCellRender(Species.class), + CalcifiedPiecesSamplingEditorTableModel.SPECIES); + speciesColumn.setSortable(true); + DecoratorService.SpeciesDecorator speciesDecorator = new DecoratorService.SpeciesDecorator(); + speciesColumn.putClientProperty(SpeciesAbleBatchRowHelper.SPECIES_DECORATOR, speciesDecorator); + speciesColumn.setCellRenderer(newTableCellRender(speciesDecorator)); + + addColumnToModel(columnModel, CalcifiedPiecesSamplingEditorTableModel.MATURITY); + addColumnToModel(columnModel, CalcifiedPiecesSamplingEditorTableModel.MIN_SIZE); + addColumnToModel(columnModel, CalcifiedPiecesSamplingEditorTableModel.MAX_SIZE); + + final CalcifiedPiecesSamplingEditorTableModel tableModel = + new CalcifiedPiecesSamplingEditorTableModel(columnModel); + cpsTable.setModel(tableModel); + cpsTable.setColumnModel(columnModel); + + JTableHeader tableHeader = cpsTable.getTableHeader(); + + // by default do not authorize to change column orders + tableHeader.setReorderingAllowed(false); + +// addHighlighters(cpsTable); + + // always scroll to selected row + SwingUtil.scrollToTableSelection(cpsTable); + + // add selection listener +// cpsTable.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) cpsTable.getColumns().get(0); + + // get column comparator + TuttiDecorator.TuttiDecoratorComparator<Species> comparator = + (TuttiDecorator.TuttiDecoratorComparator<Species>) + tableColumn.getComparator(); + + // get column comparator + TuttiDecorator<Species> decorator = + SpeciesAbleBatchRowHelper.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 + + SpeciesAbleBatchRowHelper.installSpeciesColumnComparatorPopup( + cpsTable, + speciesColumn, + null, + t("tutti.species.refTaxCode.tip"), + t("tutti.species.name.tip") + ); + // at the very end, set rows to model + List<CalcifiedPiecesSamplingEditorRowModel> rows = new ArrayList<>(); + getModel().setCspRows(rows); + tableModel.setRows(rows); } @Override diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/AddSpeciesAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/AddSpeciesAction.java index a0c660b..0413981 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/AddSpeciesAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/AddSpeciesAction.java @@ -1,7 +1,12 @@ package fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.actions; +import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorRowModel; +import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorTableModel; import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorUI; import fr.ifremer.tutti.ui.swing.util.actions.SimpleActionSupport; +import jaxx.runtime.SwingUtil; +import jaxx.runtime.swing.editor.bean.BeanFilterableComboBox; /** * @author Kevin Morin (Code Lutin) @@ -15,6 +20,26 @@ public class AddSpeciesAction extends SimpleActionSupport<CalcifiedPiecesSamplin @Override protected void onActionPerformed(CalcifiedPiecesSamplingEditorUI ui) { + BeanFilterableComboBox<Species> speciesComboBox = ui.getSpeciesComboBox(); + Species species = (Species) speciesComboBox.getSelectedItem(); + CalcifiedPiecesSamplingEditorTableModel tableModel = (CalcifiedPiecesSamplingEditorTableModel) ui.getCpsTable().getModel(); + + CalcifiedPiecesSamplingEditorRowModel newRow = tableModel.createNewRow(); + newRow.setSpecies(species); + newRow.setMaturity(null); + newRow.setMinSize(0); + newRow.setMaxSize(null); + + ui.getModel().getCspRows().add(newRow); + + speciesComboBox.removeItem(species); + + tableModel.fireTableRowsInserted(newRow); + + // select this new row + int rowIndex = tableModel.getRowIndex(newRow); + SwingUtil.setSelectionInterval(ui.getCpsTable(), rowIndex); } + } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/SplitSpeciesAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/SplitSpeciesAction.java new file mode 100644 index 0000000..2407855 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/SplitSpeciesAction.java @@ -0,0 +1,60 @@ +package fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.actions; + +import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorRowModel; +import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorTableModel; +import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorUI; +import fr.ifremer.tutti.ui.swing.util.actions.SimpleActionSupport; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.jdesktop.swingx.JXTable; + +import javax.swing.JOptionPane; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.5 + */ +public class SplitSpeciesAction extends SimpleActionSupport<CalcifiedPiecesSamplingEditorUI> { + + /** Logger. */ + private static final Log log = LogFactory.getLog(SplitSpeciesAction.class); + + public SplitSpeciesAction(CalcifiedPiecesSamplingEditorUI ui) { + super(ui); + } + + @Override + protected void onActionPerformed(CalcifiedPiecesSamplingEditorUI ui) { + + String value = JOptionPane.showInputDialog(ui, "min size"); + int minSize = Integer.parseInt(value); + + JXTable cpsTable = ui.getCpsTable(); + CalcifiedPiecesSamplingEditorTableModel tableModel = (CalcifiedPiecesSamplingEditorTableModel) cpsTable.getModel(); + + int selectedRow = cpsTable.getSelectedRow(); + if (log.isInfoEnabled()) { + log.info("selected row " + selectedRow); + } + + CalcifiedPiecesSamplingEditorRowModel row = ui.getModel().getCspRows().get(selectedRow); + Integer exMaxSize = row.getMaxSize(); + row.setMaxSize(minSize - 1); + + CalcifiedPiecesSamplingEditorRowModel newRow = tableModel.createNewRow(); + newRow.setSpecies(row.getSpecies()); + newRow.setMaturity(row.getMaturity()); + newRow.setMinSize(minSize); + newRow.setMaxSize(exMaxSize); + + ui.getModel().getCspRows().add(newRow); + + tableModel.fireTableRowsUpdated(selectedRow, selectedRow); + tableModel.fireTableRowsInserted(newRow); + + // select this new row +// int rowIndex = tableModel.getRowIndex(newRow); +// SwingUtil.setSelectionInterval(cpsTable, rowIndex); + } + +} diff --git a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties index 7e288ee..aafae6f 100644 --- a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties +++ b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties @@ -717,6 +717,10 @@ tutti.editCatchBatch.legend.marineLitter= tutti.editCatchBatch.legend.species= tutti.editCatchBatch.legend.total= tutti.editCatchBatch.svgLoading.error= +tutti.editCps.field.maturity.tip= +tutti.editCps.field.species.tip= +tutti.editCps.table.header.maturity.field= +tutti.editCps.table.header.maturity.field.tip= tutti.editCps.table.header.maxSize.field= tutti.editCps.table.header.maxSize.field.tip= tutti.editCps.table.header.minSize.field= diff --git a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties index 7754560..661dce3 100644 --- a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties +++ b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties @@ -684,6 +684,10 @@ tutti.editCatchBatch.legend.marineLitter=Macro déchets tutti.editCatchBatch.legend.species=Espèces tutti.editCatchBatch.legend.total=Capture tutti.editCatchBatch.svgLoading.error=Erreur lors du chargement du diagramme du résumé +tutti.editCps.field.maturity.tip= +tutti.editCps.field.species.tip= +tutti.editCps.table.header.maturity.field= +tutti.editCps.table.header.maturity.field.tip= tutti.editCps.table.header.maxSize.field= tutti.editCps.table.header.maxSize.field.tip= tutti.editCps.table.header.minSize.field= -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.