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 c9daf3947a656e7d92034640571439b81c77d26c Author: Kevin Morin <morin@codelutin.com> Date: Thu Feb 11 21:19:22 2016 +0100 - persistence - chargement des lignes existantes - chargement de la combo des especes avec les especes du protocole (especes et benthos) refs #7930 --- .../entities/protocol/TuttiProtocols.java | 2 + .../src/main/xmi/tutti-persistence.zargo | Bin 61039 -> 62059 bytes .../protocol/EditProtocolSpeciesRowModel.java | 67 ++++++++ .../content/protocol/EditProtocolUIHandler.java | 31 +++- .../content/protocol/EditProtocolUIModel.java | 2 + .../protocol/actions/AddBenthosProtocolAction.java | 1 + .../protocol/actions/AddSpeciesProtocolAction.java | 3 +- .../actions/RemoveBenthosProtocolAction.java | 5 + .../actions/RemoveSpeciesProtocolAction.java | 9 +- .../protocol/actions/SaveProtocolAction.java | 25 ++- .../CalcifiedPiecesSamplingEditorRowModel.java | 171 +++++++++++++++------ .../CalcifiedPiecesSamplingEditorTableModel.java | 22 +-- .../CalcifiedPiecesSamplingEditorUIHandler.java | 159 ++++++++++--------- .../actions/AddSpeciesAction.java | 16 +- .../actions/DeleteRowAction.java | 7 +- .../actions/DeleteSpeciesAction.java | 11 +- .../actions/SplitSpeciesAction.java | 18 +-- .../actions/ValidateMinSizeAction.java | 20 --- .../protocol/zones/tree/ZonesTreeModel.java | 1 - 19 files changed, 370 insertions(+), 200 deletions(-) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java index 48193dd..9168b1f 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java @@ -374,6 +374,8 @@ public class TuttiProtocols extends AbstractTuttiProtocols { YamlConfig result = new YamlConfig(); result.setClassTag(SpeciesProtocol.class.getSimpleName(), SpeciesProtocols.typeOfSpeciesProtocol()); + result.setClassTag(CalcifiedPiecesSamplingDefinition.class.getSimpleName(), + CalcifiedPiecesSamplingDefinitions.typeOfCalcifiedPiecesSamplingDefinition()); result.setClassTag(CaracteristicMappingRow.class.getSimpleName(), CaracteristicMappingRows.typeOfCaracteristicMappingRow()); result.setClassTag(Zone.class.getSimpleName(), Zones.typeOfZone()); diff --git a/tutti-persistence/src/main/xmi/tutti-persistence.zargo b/tutti-persistence/src/main/xmi/tutti-persistence.zargo index ec0a03b..71c1af7 100644 Binary files a/tutti-persistence/src/main/xmi/tutti-persistence.zargo and b/tutti-persistence/src/main/xmi/tutti-persistence.zargo differ diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesRowModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesRowModel.java index 505d2a3..5850ae5 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesRowModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesRowModel.java @@ -22,6 +22,7 @@ package fr.ifremer.tutti.ui.swing.content.protocol; * #L% */ +import fr.ifremer.tutti.persistence.entities.protocol.CalcifiedPiecesSamplingDefinition; import fr.ifremer.tutti.persistence.entities.protocol.Rtp; import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol; import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocols; @@ -32,6 +33,7 @@ import org.nuiton.util.beans.Binder; import org.nuiton.util.beans.BinderFactory; import java.util.Collection; +import java.util.LinkedList; import java.util.List; /** @@ -76,6 +78,8 @@ public class EditProtocolSpeciesRowModel extends AbstractTuttiBeanUIModel<Specie protected Rtp rtpUndefined; + Collection<CalcifiedPiecesSamplingDefinition> calcifiedPiecesSamplingDefinition; + protected static final Binder<SpeciesProtocol, EditProtocolSpeciesRowModel> fromBeanBinder = BinderFactory.newBinder(SpeciesProtocol.class, EditProtocolSpeciesRowModel.class); @@ -305,6 +309,69 @@ public class EditProtocolSpeciesRowModel extends AbstractTuttiBeanUIModel<Specie } @Override + public CalcifiedPiecesSamplingDefinition getCalcifiedPiecesSamplingDefinition(int index) { + CalcifiedPiecesSamplingDefinition o = getChild(calcifiedPiecesSamplingDefinition, index); + return o; + } + + @Override + public boolean isCalcifiedPiecesSamplingDefinitionEmpty() { + return calcifiedPiecesSamplingDefinition == null || calcifiedPiecesSamplingDefinition.isEmpty(); + } + + @Override + public int sizeCalcifiedPiecesSamplingDefinition() { + return calcifiedPiecesSamplingDefinition == null ? 0 : calcifiedPiecesSamplingDefinition.size(); + } + + @Override + public void addCalcifiedPiecesSamplingDefinition(CalcifiedPiecesSamplingDefinition calcifiedPiecesSamplingDefinition) { + getCalcifiedPiecesSamplingDefinition().add(calcifiedPiecesSamplingDefinition); + } + + @Override + public void addAllCalcifiedPiecesSamplingDefinition(Collection<CalcifiedPiecesSamplingDefinition> calcifiedPiecesSamplingDefinition) { + getCalcifiedPiecesSamplingDefinition().addAll(calcifiedPiecesSamplingDefinition); + } + + @Override + public boolean removeCalcifiedPiecesSamplingDefinition(CalcifiedPiecesSamplingDefinition calcifiedPiecesSamplingDefinition) { + boolean removed = getCalcifiedPiecesSamplingDefinition().remove(calcifiedPiecesSamplingDefinition); + return removed; + } + + @Override + public boolean removeAllCalcifiedPiecesSamplingDefinition(Collection<CalcifiedPiecesSamplingDefinition> calcifiedPiecesSamplingDefinition) { + boolean removed = getCalcifiedPiecesSamplingDefinition().removeAll(calcifiedPiecesSamplingDefinition); + return removed; + } + + @Override + public boolean containsCalcifiedPiecesSamplingDefinition(CalcifiedPiecesSamplingDefinition calcifiedPiecesSamplingDefinition) { + boolean contains = getCalcifiedPiecesSamplingDefinition().contains(calcifiedPiecesSamplingDefinition); + return contains; + } + + @Override + public boolean containsAllCalcifiedPiecesSamplingDefinition(Collection<CalcifiedPiecesSamplingDefinition> calcifiedPiecesSamplingDefinition) { + boolean contains = getCalcifiedPiecesSamplingDefinition().containsAll(calcifiedPiecesSamplingDefinition); + return contains; + } + + @Override + public Collection<CalcifiedPiecesSamplingDefinition> getCalcifiedPiecesSamplingDefinition() { + if (calcifiedPiecesSamplingDefinition == null) { + calcifiedPiecesSamplingDefinition = new LinkedList<>(); + } + return calcifiedPiecesSamplingDefinition; + } + + @Override + public void setCalcifiedPiecesSamplingDefinition(Collection<CalcifiedPiecesSamplingDefinition> calcifiedPiecesSamplingDefinition) { + this.calcifiedPiecesSamplingDefinition = calcifiedPiecesSamplingDefinition; + } + + @Override public boolean withRtpMale() { return rtpMale != null; } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java index 4957bf5..b2888e0 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java @@ -35,6 +35,7 @@ import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.data.FishingOperations; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModelEntry; +import fr.ifremer.tutti.persistence.entities.protocol.CalcifiedPiecesSamplingDefinition; import fr.ifremer.tutti.persistence.entities.protocol.CaracteristicMappingRow; import fr.ifremer.tutti.persistence.entities.protocol.CaracteristicType; import fr.ifremer.tutti.persistence.entities.protocol.OperationFieldMappingRow; @@ -54,6 +55,7 @@ import fr.ifremer.tutti.ui.swing.content.home.actions.CloneProtocolAction; import fr.ifremer.tutti.ui.swing.content.home.actions.EditProtocolAction; import fr.ifremer.tutti.ui.swing.content.home.actions.ImportProtocolAction; import fr.ifremer.tutti.ui.swing.content.operation.catches.SpeciesAbleBatchRowHelper; +import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorRowModel; import fr.ifremer.tutti.ui.swing.content.protocol.rtp.RtpCellEditor; import fr.ifremer.tutti.ui.swing.content.protocol.rtp.RtpCellRenderer; import fr.ifremer.tutti.ui.swing.content.protocol.zones.models.StrataUIModel; @@ -327,12 +329,15 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI incrementsMessage("Préparation des interfaces graphiques"); - // build species and benthos rows + getModel().setCpsRows(Lists.newArrayList()); + + // build protocolSpecies and benthos rows if (protocol == null) { caracteristicMappingRows = Lists.newArrayList(); operationFieldMappingRows = Lists.newArrayList(); speciesRows = Lists.newArrayList(); benthosRows = Lists.newArrayList(); + } else { caracteristicMappingRows = toProtocolCaracteristicRows(protocol.getCaracteristicMapping()); @@ -341,9 +346,14 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI speciesRows = toSpeciesRows(protocol.getSpecies()); benthosRows = toSpeciesRows(protocol.getBenthos()); + // set a copy of the list to refresh the cps table + List<CalcifiedPiecesSamplingEditorRowModel> cpsRows = new ArrayList<>(getModel().getCpsRows()); + cpsRows.sort(CalcifiedPiecesSamplingEditorRowModel.COMPARATOR); + getModel().setCpsRows(cpsRows); + if (log.isDebugEnabled()) { log.debug("Will edit protocol with " + - speciesRows.size() + " species and " + + speciesRows.size() + " protocolSpecies and " + benthosRows.size() + " benthos declared."); } } @@ -359,7 +369,7 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI this.ui.getCaracteristicMappingComboBox().reset(); { - // create species table model + // create protocolSpecies table model JXTable table = getSpeciesTable(); @@ -660,7 +670,7 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI Set<TuttiLocation> usedLocations = new LinkedHashSet<>(); - getModel().getZone().stream().forEach(zone -> { + getModel().getZone().forEach(zone -> { Collection<Strata> zoneStratas = zone.getStrata(); Set<TuttiLocation> locations = zoneStratas.stream().map(Strata::getLocation).collect(Collectors.toSet()); @@ -718,6 +728,7 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI Set<Species> speciesSet = Sets.newHashSet(); List<EditProtocolSpeciesRowModel> result = Lists.newArrayList(); + List<CalcifiedPiecesSamplingEditorRowModel> cpsRows = Lists.newArrayList(); if (CollectionUtils.isNotEmpty(speciesProtocols)) { for (SpeciesProtocol speciesProtocol : speciesProtocols) { Integer taxonId = speciesProtocol.getSpeciesReferenceTaxonId(); @@ -758,6 +769,18 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI // make sure to get a clean copy of the list row.setMandatorySampleCategoryId(Lists.newArrayList(speciesProtocol.getMandatorySampleCategoryId())); result.add(row); + + // add all the cps rows + Collection<CalcifiedPiecesSamplingDefinition> cpsDefs = speciesProtocol.getCalcifiedPiecesSamplingDefinition(); + if (cpsDefs != null) { + cpsDefs.forEach(def -> { + CalcifiedPiecesSamplingEditorRowModel cpsRow = new CalcifiedPiecesSamplingEditorRowModel(); + cpsRow.fromEntity(def); + cpsRow.setProtocolSpecies(row); + getModel().getCpsRows().add(cpsRow); + }); + } + } // remove once for all in comboboxes 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 bf2be98..eab2c3e 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 @@ -987,6 +987,8 @@ public class EditProtocolUIModel extends AbstractTuttiBeanUIModel<TuttiProtocol, firePropertyChanged(TuttiProtocol.PROPERTY_USE_CALCIFIED_PIECE_SAMPLING, oldValue, useCalcifiedPieceSampling); } + + public int numberOfRows(String column) { int result = 0; MutableInt mutableInt = numberOfRowsByColumn.get(column); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/AddBenthosProtocolAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/AddBenthosProtocolAction.java index 45bd0ae..0679e29 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/AddBenthosProtocolAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/AddBenthosProtocolAction.java @@ -89,6 +89,7 @@ public class AddBenthosProtocolAction extends LongActionSupport<EditProtocolUIMo // update comboboxes getUI().getBenthosComboBox().removeItem(species); getUI().getSpeciesComboBox().removeItem(species); + getUI().getCalcifiedPiecesSamplingEditorUI().getSpeciesComboBox().addItem(species); // fire row was inserted in table model EditProtocolSpeciesTableModel tableModel = getHandler().getBenthosTableModel(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/AddSpeciesProtocolAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/AddSpeciesProtocolAction.java index 8730b24..0c73a65 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/AddSpeciesProtocolAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/AddSpeciesProtocolAction.java @@ -38,7 +38,7 @@ import java.util.Collection; import static org.nuiton.i18n.I18n.t; /** - * To add a new species protocol. + * To add a new protocolSpecies protocol. * * @author Tony Chemit - chemit@codelutin.com * @since 1.0 @@ -87,6 +87,7 @@ public class AddSpeciesProtocolAction extends LongActionSupport<EditProtocolUIMo // update comboboxes getUI().getBenthosComboBox().removeItem(species); getUI().getSpeciesComboBox().removeItem(species); + getUI().getCalcifiedPiecesSamplingEditorUI().getSpeciesComboBox().addItem(species); // fire row was inserted in table model EditProtocolSpeciesTableModel tableModel = getHandler().getSpeciesTableModel(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/RemoveBenthosProtocolAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/RemoveBenthosProtocolAction.java index 9b847aa..39079f8 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/RemoveBenthosProtocolAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/RemoveBenthosProtocolAction.java @@ -27,6 +27,7 @@ import com.google.common.collect.Lists; import com.google.common.collect.Sets; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.persistence.entities.referential.Speciess; +import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorUI; import fr.ifremer.tutti.ui.swing.util.actions.LongActionSupport; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolSpeciesRowModel; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolSpeciesTableModel; @@ -123,6 +124,10 @@ public class RemoveBenthosProtocolAction extends LongActionSupport<EditProtocolU // remove all rows from model getModel().getBenthosRow().removeAll(removedRows); + // remove the protocolSpecies from the cps table or combobox + CalcifiedPiecesSamplingEditorUI cspEditor = getUI().getCalcifiedPiecesSamplingEditorUI(); + //TODO remove the protocolSpecies from the cps table or combobox + // fire table data changed handler.getBenthosTableModel().fireTableDataChanged(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/RemoveSpeciesProtocolAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/RemoveSpeciesProtocolAction.java index ab9eb27..4630e1a 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/RemoveSpeciesProtocolAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/RemoveSpeciesProtocolAction.java @@ -27,6 +27,7 @@ import com.google.common.collect.Lists; import com.google.common.collect.Sets; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.persistence.entities.referential.Speciess; +import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorUI; import fr.ifremer.tutti.ui.swing.util.actions.LongActionSupport; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolSpeciesRowModel; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolSpeciesTableModel; @@ -43,7 +44,7 @@ import java.util.Set; import static org.nuiton.i18n.I18n.t; /** - * To remove all the selected species rows from protocol. + * To remove all the selected protocolSpecies rows from protocol. * * @author Tony Chemit - chemit@codelutin.com * @since 1.0 @@ -51,7 +52,7 @@ import static org.nuiton.i18n.I18n.t; public class RemoveSpeciesProtocolAction extends LongActionSupport<EditProtocolUIModel, EditProtocolUI, EditProtocolUIHandler> { /** - * Set of removed species. + * Set of removed protocolSpecies. * * @since 2.8 */ @@ -120,6 +121,10 @@ public class RemoveSpeciesProtocolAction extends LongActionSupport<EditProtocolU // remove all rows from model getModel().getSpeciesRow().removeAll(removedRows); + // remove the protocolSpecies from the cps table or combobox + CalcifiedPiecesSamplingEditorUI cspEditor = getUI().getCalcifiedPiecesSamplingEditorUI(); + //TODO remove the protocolSpecies from the cps table or combobox + // fire table data changed handler.getSpeciesTableModel().fireTableDataChanged(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/SaveProtocolAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/SaveProtocolAction.java index 70c9409..f6b0448 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/SaveProtocolAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/SaveProtocolAction.java @@ -23,6 +23,8 @@ package fr.ifremer.tutti.ui.swing.content.protocol.actions; */ import com.google.common.collect.Lists; +import com.google.common.collect.Multimap; +import com.google.common.collect.Multimaps; import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.persistence.entities.protocol.CaracteristicMappingRow; import fr.ifremer.tutti.persistence.entities.protocol.OperationFieldMappingRow; @@ -36,6 +38,7 @@ import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolSpeciesRowModel; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUI; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUIHandler; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUIModel; +import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorRowModel; import fr.ifremer.tutti.ui.swing.util.actions.LongActionSupport; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; @@ -44,6 +47,7 @@ import org.apache.commons.logging.LogFactory; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.stream.Collectors; import static org.nuiton.i18n.I18n.t; @@ -75,7 +79,7 @@ public class SaveProtocolAction extends LongActionSupport<EditProtocolUIModel, E TuttiProtocol bean = model.toEntity(); - Collection<EditProtocolCaracteristicsRowModel> protocolCaracteristicMappingRows = getUI().getModel().getCaracteristicMappingRows(); + Collection<EditProtocolCaracteristicsRowModel> protocolCaracteristicMappingRows = model.getCaracteristicMappingRows(); List<CaracteristicMappingRow> caracteristicMappingRows = new ArrayList<CaracteristicMappingRow>(); for (EditProtocolCaracteristicsRowModel row : protocolCaracteristicMappingRows) { if (row.isValid()) { @@ -84,7 +88,7 @@ public class SaveProtocolAction extends LongActionSupport<EditProtocolUIModel, E } bean.setCaracteristicMapping(caracteristicMappingRows); - List<EditProtocolOperationFieldsRowModel> protocolOperationFieldMappingRows = getUI().getModel().getOperationFieldMappingRows(); + List<EditProtocolOperationFieldsRowModel> protocolOperationFieldMappingRows = model.getOperationFieldMappingRows(); List<OperationFieldMappingRow> operationFieldMappingRows = new ArrayList<OperationFieldMappingRow>(); for (EditProtocolOperationFieldsRowModel row : protocolOperationFieldMappingRows) { if (StringUtils.isNotBlank(row.getField()) && StringUtils.isNotBlank(row.getImportColumn()) @@ -94,6 +98,10 @@ public class SaveProtocolAction extends LongActionSupport<EditProtocolUIModel, E } bean.setOperationFieldMapping(operationFieldMappingRows); + // map the cps rows by species row + Multimap<EditProtocolSpeciesRowModel, CalcifiedPiecesSamplingEditorRowModel> cpsRowsBySpecies = + Multimaps.index(model.getCpsRows(), input -> input.getProtocolSpecies()); + // get the species protocols from the table List<SpeciesProtocol> speciesProtocols = Lists.newArrayList(); @@ -101,6 +109,12 @@ public class SaveProtocolAction extends LongActionSupport<EditProtocolUIModel, E if (row.isValid()) { SpeciesProtocol protocol = row.toEntity(); speciesProtocols.add(protocol); + + //TODO check validity + Collection<CalcifiedPiecesSamplingEditorRowModel> cpsRows = cpsRowsBySpecies.get(row); + protocol.setCalcifiedPiecesSamplingDefinition(cpsRows.stream() + .map(CalcifiedPiecesSamplingEditorRowModel::toEntity) + .collect(Collectors.toList())); } } bean.setSpecies(speciesProtocols); @@ -111,12 +125,17 @@ public class SaveProtocolAction extends LongActionSupport<EditProtocolUIModel, E if (row.isValid()) { SpeciesProtocol protocol = row.toEntity(); benthosProtocols.add(protocol); + + //TODO check validity + Collection<CalcifiedPiecesSamplingEditorRowModel> cpsRows = cpsRowsBySpecies.get(row); + protocol.setCalcifiedPiecesSamplingDefinition(cpsRows.stream() + .map(CalcifiedPiecesSamplingEditorRowModel::toEntity) + .collect(Collectors.toList())); } } bean.setBenthos(benthosProtocols); - if (log.isInfoEnabled()) { log.info("bean zones " + bean.getZone()); log.info("bean zones " + bean.getZone()); 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 b19a893..c537d60 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 @@ -1,138 +1,211 @@ package fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling; +import fr.ifremer.tutti.persistence.entities.protocol.CalcifiedPiecesSamplingDefinition; +import fr.ifremer.tutti.persistence.entities.protocol.CalcifiedPiecesSamplingDefinitions; import fr.ifremer.tutti.persistence.entities.referential.Species; -import org.jdesktop.beans.AbstractSerializableBean; +import fr.ifremer.tutti.service.DecoratorService; +import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolSpeciesRowModel; +import fr.ifremer.tutti.ui.swing.util.AbstractTuttiBeanUIModel; +import org.nuiton.util.beans.Binder; +import org.nuiton.util.beans.BinderFactory; + +import java.util.Comparator; /** * @author Kevin Morin (Code Lutin) * @since 4.5 */ -public class CalcifiedPiecesSamplingEditorRowModel extends AbstractSerializableBean { - - - public static final String PROPERTY_SPECIES = "species"; - - public static final String PROPERTY_MATURITY = "maturity"; +public class CalcifiedPiecesSamplingEditorRowModel extends AbstractTuttiBeanUIModel<CalcifiedPiecesSamplingDefinition, + CalcifiedPiecesSamplingEditorRowModel> + implements CalcifiedPiecesSamplingDefinition { - public static final String PROPERTY_SEX = "sex"; + public static final String PROPERTY_PROTOCOL_SPECIES = "protocolSpecies"; - public static final String PROPERTY_MIN_SIZE = "minSize"; + public static final Comparator<CalcifiedPiecesSamplingEditorRowModel> COMPARATOR = + new Comparator<CalcifiedPiecesSamplingEditorRowModel>() { - public static final String PROPERTY_MAX_SIZE = "maxSize"; + private final DecoratorService.SpeciesDecoratorWithSurveyCode speciesDecorator = + new DecoratorService.SpeciesDecoratorWithSurveyCode(); - public static final String PROPERTY_MAX_BY_LENGHT_STEP = "maxByLenghtStep"; + @Override + public int compare(CalcifiedPiecesSamplingEditorRowModel o1, CalcifiedPiecesSamplingEditorRowModel o2) { - public static final String PROPERTY_SAMPLING_INTERVAL = "samplingInterval"; + boolean o1null = o1 == null || o1.getProtocolSpecies() == null; + boolean o2null = o2 == null || o2.getProtocolSpecies() == null; - public static final String PROPERTY_OPERATION_LIMITATION = "operationLimitation"; + if (o1null) { + return o2null ? 0 : -1; + } + if (o2null) { + return 1; + } - public static final String PROPERTY_ZONE_LIMITATION = "zoneLimitation"; + Species species1 = o1.getProtocolSpecies().getSpecies(); + Species species2 = o2.getProtocolSpecies().getSpecies(); + if (!(species1.equals(species2))) { + return speciesDecorator.toString(species1).compareTo(speciesDecorator.toString(species2)); + } - protected Species species; + if (o1.getMaturity() == null && o2.getMaturity() != null) { + return -1; - protected Boolean maturity; + } else if (o1.getMaturity() != null && o2.getMaturity() == null) { + return 1; - protected boolean sex; + } else if (o1.getMaturity() != null && !o1.getMaturity().equals(o2.getMaturity())) { + return o1.getMaturity() ? -1 : 1; + } - protected Integer minSize; + return o1.getMinSize() - o2.getMinSize(); + } + }; - protected Integer maxSize; + /** + * Delegate edit object. + * + * @since 4.5 + */ + protected final CalcifiedPiecesSamplingDefinition editObject = + CalcifiedPiecesSamplingDefinitions.newCalcifiedPiecesSamplingDefinition(); - protected Integer maxByLenghtStep; + protected EditProtocolSpeciesRowModel protocolSpecies; - protected Integer samplingInterval; + protected static final Binder<CalcifiedPiecesSamplingDefinition, CalcifiedPiecesSamplingEditorRowModel> fromBeanBinder = + BinderFactory.newBinder(CalcifiedPiecesSamplingDefinition.class, + CalcifiedPiecesSamplingEditorRowModel.class); - protected Integer operationLimitation; + protected static final Binder<CalcifiedPiecesSamplingEditorRowModel, CalcifiedPiecesSamplingDefinition> toBeanBinder = + BinderFactory.newBinder(CalcifiedPiecesSamplingEditorRowModel.class, + CalcifiedPiecesSamplingDefinition.class); - protected Integer zoneLimitation; + public CalcifiedPiecesSamplingEditorRowModel() { + super(fromBeanBinder, toBeanBinder); + } + @Override public Integer getMaxSize() { - return maxSize; + return editObject.getMaxSize(); } + @Override public void setMaxSize(Integer maxSize) { Object oldValue = getMaxSize(); - this.maxSize = maxSize; + editObject.setMaxSize(maxSize); firePropertyChange(PROPERTY_MAX_SIZE, oldValue, maxSize); } - public Integer getMinSize() { - return minSize; + @Override + public int getMinSize() { + return editObject.getMinSize(); } - public void setMinSize(Integer minSize) { + @Override + public void setMinSize(int minSize) { Object oldValue = getMinSize(); - this.minSize = minSize; + editObject.setMinSize(minSize); firePropertyChange(PROPERTY_MIN_SIZE, oldValue, minSize); } - public Species getSpecies() { - return species; + public void setMinSize(Integer minSize) { + if (minSize != null) { + setMinSize(minSize.intValue()); + } else { + firePropertyChange(PROPERTY_MIN_SIZE, getMinSize(), null); + } } - public void setSpecies(Species species) { - Object oldValue = getSpecies(); - this.species = species; - firePropertyChange(PROPERTY_SPECIES, oldValue, species); + public EditProtocolSpeciesRowModel getProtocolSpecies() { + return protocolSpecies; } + public void setProtocolSpecies(EditProtocolSpeciesRowModel protocolSpecies) { + Object oldValue = getProtocolSpecies(); + this.protocolSpecies = protocolSpecies; + firePropertyChange(PROPERTY_PROTOCOL_SPECIES, oldValue, protocolSpecies); + } + + @Override public Boolean getMaturity() { - return maturity; + return editObject.getMaturity(); } + @Override public void setMaturity(Boolean maturity) { Object oldValue = getMaturity(); - this.maturity = maturity; + editObject.setMaturity(maturity); firePropertyChange(PROPERTY_MATURITY, oldValue, maturity); } + @Override public Integer getOperationLimitation() { - return operationLimitation; + return editObject.getOperationLimitation(); } + @Override public void setOperationLimitation(Integer operationLimitation) { Object oldValue = getOperationLimitation(); - this.operationLimitation = operationLimitation; + editObject.setOperationLimitation(operationLimitation); firePropertyChange(PROPERTY_OPERATION_LIMITATION, oldValue, operationLimitation); } + @Override public Integer getMaxByLenghtStep() { - return maxByLenghtStep; + return editObject.getMaxByLenghtStep(); } + @Override public void setMaxByLenghtStep(Integer maxByLenghtStep) { Object oldValue = getMaxByLenghtStep(); - this.maxByLenghtStep = maxByLenghtStep; + editObject.setMaxByLenghtStep(maxByLenghtStep); firePropertyChange(PROPERTY_MAX_BY_LENGHT_STEP, oldValue, maxByLenghtStep); } - public Integer getSamplingInterval() { - return samplingInterval; + @Override + public int getSamplingInterval() { + return editObject.getSamplingInterval(); } - public void setSamplingInterval(Integer samplingInterval) { + @Override + public void setSamplingInterval(int samplingInterval) { Object oldValue = getSamplingInterval(); - this.samplingInterval = samplingInterval; + editObject.setSamplingInterval(samplingInterval); firePropertyChange(PROPERTY_SAMPLING_INTERVAL, oldValue, samplingInterval); } + public void setSamplingInterval(Integer samplingInterval) { + if (samplingInterval != null) { + setMinSize(samplingInterval.intValue()); + } else { + firePropertyChange(PROPERTY_SAMPLING_INTERVAL, getSamplingInterval(), null); + } + } + + @Override public boolean isSex() { - return sex; + return editObject.isSex(); } + @Override public void setSex(boolean sex) { Object oldValue = isSex(); - this.sex = sex; + editObject.setSex(sex); firePropertyChange(PROPERTY_SEX, oldValue, sex); } + @Override public Integer getZoneLimitation() { - return zoneLimitation; + return editObject.getZoneLimitation(); } + @Override public void setZoneLimitation(Integer zoneLimitation) { Object oldValue = getZoneLimitation(); - this.zoneLimitation = zoneLimitation; + editObject.setZoneLimitation(zoneLimitation); firePropertyChange(PROPERTY_ZONE_LIMITATION, oldValue, zoneLimitation); } + + @Override + protected CalcifiedPiecesSamplingDefinition newEntity() { + return CalcifiedPiecesSamplingDefinitions.newCalcifiedPiecesSamplingDefinition(); + } } 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 48cee24..815a024 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,7 +1,7 @@ package fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling; import com.google.common.collect.Lists; -import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolSpeciesRowModel; import org.jdesktop.swingx.table.TableColumnModelExt; import org.nuiton.jaxx.application.swing.table.AbstractApplicationTableModel; import org.nuiton.jaxx.application.swing.table.ColumnIdentifier; @@ -17,7 +17,7 @@ import static org.nuiton.i18n.I18n.n; public class CalcifiedPiecesSamplingEditorTableModel extends AbstractApplicationTableModel<CalcifiedPiecesSamplingEditorRowModel> { public static final ColumnIdentifier<CalcifiedPiecesSamplingEditorRowModel> SPECIES = ColumnIdentifier.newId( - CalcifiedPiecesSamplingEditorRowModel.PROPERTY_SPECIES, + CalcifiedPiecesSamplingEditorRowModel.PROPERTY_PROTOCOL_SPECIES, n("tutti.editCps.table.header.species.field"), n("tutti.editCps.table.header.species.field.tip")); @@ -72,20 +72,20 @@ public class CalcifiedPiecesSamplingEditorTableModel extends AbstractApplication return new CalcifiedPiecesSamplingEditorRowModel(); } - public CalcifiedPiecesSamplingEditorRowModel createNewRow(Species species, + public CalcifiedPiecesSamplingEditorRowModel createNewRow(EditProtocolSpeciesRowModel species, Boolean maturity, boolean sex) { return createNewRow(species, maturity,sex, 0, null); } - public CalcifiedPiecesSamplingEditorRowModel createNewRow(Species species, + public CalcifiedPiecesSamplingEditorRowModel createNewRow(EditProtocolSpeciesRowModel species, Boolean maturity, boolean sex, Integer minSize, Integer maxSize) { CalcifiedPiecesSamplingEditorRowModel newRow = createNewRow(); - newRow.setSpecies(species); + newRow.setProtocolSpecies(species); newRow.setMaturity(maturity); newRow.setSex(sex); newRow.setMinSize(minSize); @@ -99,16 +99,16 @@ public class CalcifiedPiecesSamplingEditorTableModel extends AbstractApplication } /** - * Return the list of used species in the table (used to fill the - * comparator cache for species sort) + * Return the list of used protocolSpecies in the table (used to fill the + * comparator cache for protocolSpecies sort) * - * @return the list of used species in the table. + * @return the list of used protocolSpecies in the table. * @since 2.8 */ - public List<Species> getSpeciesList() { - List<Species> result = Lists.newArrayList(); + public List<EditProtocolSpeciesRowModel> getSpeciesList() { + List<EditProtocolSpeciesRowModel> result = Lists.newArrayList(); for (CalcifiedPiecesSamplingEditorRowModel row : rows) { - result.add(row.getSpecies()); + result.add(row.getProtocolSpecies()); } return result; } 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 881f9b3..615e7ac 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 @@ -3,8 +3,6 @@ package fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling; 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.TuttiDecorator; -import fr.ifremer.tutti.ui.swing.content.operation.catches.SpeciesAbleBatchRowHelper; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolSpeciesRowModel; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUIModel; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; @@ -17,7 +15,6 @@ 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.JLabel; @@ -25,7 +22,6 @@ import javax.swing.SwingConstants; import javax.swing.border.LineBorder; import javax.swing.event.CellEditorListener; import javax.swing.event.ChangeEvent; -import javax.swing.event.TableModelEvent; import javax.swing.table.JTableHeader; import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellRenderer; @@ -37,8 +33,6 @@ import java.util.Optional; import java.util.TreeSet; import java.util.stream.Collectors; -import static org.nuiton.i18n.I18n.t; - /** * @author Kevin Morin (Code Lutin) * @since 4.5 @@ -60,7 +54,31 @@ public class CalcifiedPiecesSamplingEditorUIHandler extends AbstractTuttiUIHandl public void afterInit(CalcifiedPiecesSamplingEditorUI calcifiedPiecesSamplingEditorUI) { initUI(calcifiedPiecesSamplingEditorUI); - initBeanFilterableComboBox(ui.getSpeciesComboBox(), getModel().getAllSpecies(), null); + initBeanFilterableComboBox(ui.getSpeciesComboBox(), new ArrayList<>(), null, DecoratorService.WITH_SURVEY_CODE); + + getModel().addPropertyChangeListener(evt -> { + if (EditProtocolUIModel.PROPERTY_BENTHOS_ROW.equals(evt.getPropertyName()) + ||EditProtocolUIModel.PROPERTY_SPECIES_ROW.equals(evt.getPropertyName())) { + + List<Species> protocolSpecies = new ArrayList<>(); + + List<EditProtocolSpeciesRowModel> speciesRows = getModel().getSpeciesRow(); + if (speciesRows != null) { + protocolSpecies.addAll(speciesRows.stream() + .map(EditProtocolSpeciesRowModel::getSpecies) + .collect(Collectors.toList())); + } + + speciesRows = getModel().getBenthosRow(); + if (speciesRows != null) { + protocolSpecies.addAll(speciesRows.stream() + .map(EditProtocolSpeciesRowModel::getSpecies) + .collect(Collectors.toList())); + } + + ui.getSpeciesComboBox().setData(protocolSpecies); + } + }); JXTable cpsTable = ui.getCpsTable(); @@ -76,69 +94,15 @@ public class CalcifiedPiecesSamplingEditorUIHandler extends AbstractTuttiUIHandl // 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(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, - columnModel.getColumnExt(0), - 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().setCpsRows(rows); - tableModel.setRows(rows); + getModel().addPropertyChangeListener(EditProtocolUIModel.PROPERTY_CSP_ROWS, + evt -> { + tableModel.setRows(getModel().getCpsRows()); + tableModel.fireTableDataChanged(); + }); } protected DefaultTableColumnModelExt initTableColumnModel() { @@ -162,7 +126,7 @@ public class CalcifiedPiecesSamplingEditorUIHandler extends AbstractTuttiUIHandl return result; }; - // sex cell listener to update the sex value of other rows with the same species + // sex cell listener to update the sex value of other rows with the same protocolSpecies CellEditorListener sexEditorListener = new CellEditorListener() { @Override @@ -174,7 +138,7 @@ public class CalcifiedPiecesSamplingEditorUIHandler extends AbstractTuttiUIHandl CalcifiedPiecesSamplingEditorRowModel row = cpsRows.get(selectedRow); List<CalcifiedPiecesSamplingEditorRowModel> rowsToChangeSex = - cpsRows.stream().filter(r -> r.getSpecies().equals(row.getSpecies())).collect(Collectors.toList()); + cpsRows.stream().filter(r -> r.getProtocolSpecies().equals(row.getProtocolSpecies())).collect(Collectors.toList()); rowsToChangeSex.forEach(r -> r.setSex(row.isSex())); @@ -196,13 +160,22 @@ public class CalcifiedPiecesSamplingEditorUIHandler extends AbstractTuttiUIHandl DefaultTableColumnModelExt columnModel = new DefaultTableColumnModelExt(); - TableColumnExt speciesColumn = addColumnToModel(columnModel, - null, - newTableCellRender(Species.class), - CalcifiedPiecesSamplingEditorTableModel.SPECIES); - DecoratorService.SpeciesDecorator speciesDecorator = new DecoratorService.SpeciesDecorator(); - speciesColumn.putClientProperty(SpeciesAbleBatchRowHelper.SPECIES_DECORATOR, speciesDecorator); - speciesColumn.setCellRenderer(newTableCellRender(speciesDecorator)); + // renderer to display the species + TableCellRenderer speciesRenderer = (table, value, isSelected, hasFocus, row, column) -> { + + Component result = table.getDefaultRenderer(String.class) + .getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); + if (result instanceof JLabel) { + JLabel jLabel = (JLabel) result; + EditProtocolSpeciesRowModel species = (EditProtocolSpeciesRowModel) value; + jLabel.setText(decorate(species.getSpecies(), DecoratorService.WITH_SURVEY_CODE)); + } + return result; + }; + addColumnToModel(columnModel, + null, + speciesRenderer, + CalcifiedPiecesSamplingEditorTableModel.SPECIES); // renderer to display infinite instead of null @@ -278,15 +251,11 @@ public class CalcifiedPiecesSamplingEditorUIHandler extends AbstractTuttiUIHandl public CalcifiedPiecesSamplingEditorRowModel createNewRow(Species species, Boolean maturity) { - Optional<EditProtocolSpeciesRowModel> speciesProtocolRow = getModel().getSpeciesRow() - .stream() - .filter(sp -> species.equals(sp.getSpecies())) - .findFirst(); - + Optional<EditProtocolSpeciesRowModel> speciesProtocolRow = getEditProtocolSpeciesRowModel(species); boolean sex = speciesProtocolRow.isPresent() && speciesProtocolRow.get().containsMandatorySampleCategoryId(sexCaracteristic.getIdAsInt()); - return createNewRow(species, maturity, sex, 0, null); + return createNewRow(speciesProtocolRow.orElse(null), maturity, sex, 0, null); } public CalcifiedPiecesSamplingEditorRowModel createNewRow(Species species, @@ -295,12 +264,24 @@ public class CalcifiedPiecesSamplingEditorUIHandler extends AbstractTuttiUIHandl Integer minSize, Integer maxSize) { + Optional<EditProtocolSpeciesRowModel> speciesProtocolRow = getEditProtocolSpeciesRowModel(species); + + return createNewRow(speciesProtocolRow.orElse(null), maturity, sex, minSize, maxSize); + } + + public CalcifiedPiecesSamplingEditorRowModel createNewRow(EditProtocolSpeciesRowModel species, + Boolean maturity, + boolean sex, + Integer minSize, + Integer maxSize) { + JXTable cpsTable = getUI().getCpsTable(); CalcifiedPiecesSamplingEditorTableModel tableModel = (CalcifiedPiecesSamplingEditorTableModel) cpsTable.getModel(); List<CalcifiedPiecesSamplingEditorRowModel> cpsRows = getModel().getCpsRows(); CalcifiedPiecesSamplingEditorRowModel newRow = tableModel.createNewRow(species, maturity, sex, minSize, maxSize); + //FIXME il faudrait ajouter ces listener sur les lignes qu'on charge au chargement du protocole newRow.addPropertyChangeListener(CalcifiedPiecesSamplingEditorRowModel.PROPERTY_MIN_SIZE, evt -> { int newRowIndex = cpsRows.indexOf(newRow); @@ -332,4 +313,20 @@ public class CalcifiedPiecesSamplingEditorUIHandler extends AbstractTuttiUIHandl return newRow; } + + protected Optional<EditProtocolSpeciesRowModel> getEditProtocolSpeciesRowModel(Species species) { + + Optional<EditProtocolSpeciesRowModel> speciesProtocolRow = getModel().getSpeciesRow() + .stream() + .filter(sp -> species.equals(sp.getSpecies())) + .findFirst(); + + if (!speciesProtocolRow.isPresent()) { + speciesProtocolRow = getModel().getBenthosRow() + .stream() + .filter(sp -> species.equals(sp.getSpecies())) + .findFirst(); + } + return speciesProtocolRow; + } } 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 52e493c..3178960 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,16 +1,16 @@ package fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.actions; import fr.ifremer.tutti.persistence.entities.referential.Species; -import fr.ifremer.tutti.service.DecoratorService; 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; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import java.util.ArrayList; -import java.util.Comparator; import java.util.List; /** @@ -19,7 +19,8 @@ import java.util.List; */ public class AddSpeciesAction extends SimpleActionSupport<CalcifiedPiecesSamplingEditorUI> { - protected final DecoratorService.SpeciesDecorator speciesDecorator = new DecoratorService.SpeciesDecorator(); + /** Logger. */ + private static final Log log = LogFactory.getLog(AddSpeciesAction.class); public AddSpeciesAction(CalcifiedPiecesSamplingEditorUI ui) { super(ui); @@ -46,7 +47,7 @@ public class AddSpeciesAction extends SimpleActionSupport<CalcifiedPiecesSamplin List<CalcifiedPiecesSamplingEditorRowModel> cpsRows = ui.getModel().getCpsRows(); cpsRows.addAll(newRows); - cpsRows.sort(Comparator.comparing(row -> speciesDecorator.toString(row.getSpecies()))); + cpsRows.sort(CalcifiedPiecesSamplingEditorRowModel.COMPARATOR); speciesComboBox.removeItem(species); @@ -55,6 +56,13 @@ public class AddSpeciesAction extends SimpleActionSupport<CalcifiedPiecesSamplin CalcifiedPiecesSamplingEditorTableModel tableModel = (CalcifiedPiecesSamplingEditorTableModel) ui.getCpsTable().getModel(); + + if (log.isInfoEnabled()) { + log.info(cpsRows); + log.info(tableModel.getRows()); + log.info("insert in " +firstRowIndex + " " + lastRowIndex ); + } + tableModel.fireTableRowsInserted(firstRowIndex, lastRowIndex); // select this new row SwingUtil.setSelectionInterval(ui.getCpsTable(), firstRowIndex); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/DeleteRowAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/DeleteRowAction.java index b058b5e..adcd7fb 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/DeleteRowAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/DeleteRowAction.java @@ -2,6 +2,7 @@ package fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.actio import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.service.DecoratorService; +import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolSpeciesRowModel; 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; @@ -41,9 +42,9 @@ public class DeleteRowAction extends SimpleActionSupport<CalcifiedPiecesSampling CalcifiedPiecesSamplingEditorRowModel row = cspRows.get(selectedRow); if (row.getMinSize() > 0) { - Species speciesToDelete = row.getSpecies(); - //TODO decorator quand on aura le modele persisté - String decoratedSpecies = ui.getHandler().getDecorator(Species.class, null).toString(speciesToDelete); + EditProtocolSpeciesRowModel speciesToDelete = row.getProtocolSpecies(); + + String decoratedSpecies = ui.getHandler().getDecorator(Species.class, null).toString(speciesToDelete.getSpecies()); String decoratedRow = decoratedSpecies + " | "; if (row.getMaturity() != null) { decoratedRow += ui.getHandler().getDecorator(Boolean.class, DecoratorService.MATURITY).toString(row.getMaturity()) + " | "; diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/DeleteSpeciesAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/DeleteSpeciesAction.java index 07911f1..0fcb29b 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/DeleteSpeciesAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/DeleteSpeciesAction.java @@ -1,6 +1,8 @@ package fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.actions; import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.service.DecoratorService; +import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolSpeciesRowModel; 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; @@ -41,8 +43,9 @@ public class DeleteSpeciesAction extends SimpleActionSupport<CalcifiedPiecesSamp CalcifiedPiecesSamplingEditorRowModel row = cspRows.get(selectedRow); - Species speciesToDelete = row.getSpecies(); - String decoratedSpecies = ui.getHandler().getDecorator(Species.class, null).toString(speciesToDelete); + EditProtocolSpeciesRowModel speciesToDelete = row.getProtocolSpecies(); + String decoratedSpecies = ui.getHandler().getDecorator(Species.class, DecoratorService.WITH_SURVEY_CODE) + .toString(speciesToDelete.getSpecies()); int confirmDeletion = JOptionPane.showConfirmDialog(ui, t("tutti.editCps.deleteSpecies.message", decoratedSpecies), t("tutti.editCps.deleteSpecies.title"), @@ -52,7 +55,7 @@ public class DeleteSpeciesAction extends SimpleActionSupport<CalcifiedPiecesSamp if (confirmDeletion == JOptionPane.YES_OPTION) { List<CalcifiedPiecesSamplingEditorRowModel> rowsToDelete = - cspRows.stream().filter(r -> r.getSpecies().equals(speciesToDelete)).collect(Collectors.toList()); + cspRows.stream().filter(r -> r.getProtocolSpecies().equals(speciesToDelete)).collect(Collectors.toList()); TreeSet<Integer> indexesToDelete = new TreeSet<>(rowsToDelete.stream().map(cspRows::indexOf).collect(Collectors.toSet())); @@ -61,7 +64,7 @@ public class DeleteSpeciesAction extends SimpleActionSupport<CalcifiedPiecesSamp tableModel.fireTableRowsDeleted(indexesToDelete.first(), indexesToDelete.last()); - ui.getSpeciesComboBox().addItem(speciesToDelete); + ui.getSpeciesComboBox().addItem(speciesToDelete.getSpecies()); } } 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 index ba04fd6..adcc93b 100644 --- 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 @@ -1,7 +1,5 @@ package fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.actions; -import fr.ifremer.tutti.persistence.entities.referential.Species; -import fr.ifremer.tutti.service.DecoratorService; 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; @@ -38,20 +36,6 @@ public class SplitSpeciesAction extends SimpleActionSupport<CalcifiedPiecesSampl CalcifiedPiecesSamplingEditorRowModel row = cpsRows.get(selectedRow); - if (log.isInfoEnabled()) { - Species speciesToDelete = row.getSpecies(); - String decoratedSpecies = ui.getHandler().getDecorator(Species.class, null).toString(speciesToDelete); - String decoratedRow = decoratedSpecies + " | "; - if (row.getMaturity() != null) { - decoratedRow += ui.getHandler().getDecorator(Boolean.class, DecoratorService.MATURITY).toString(row.getMaturity()) + " | "; - } - - decoratedRow += row.getMinSize() + " | " - + ui.getHandler().getDecorator(Integer.class, DecoratorService.NULL_INFINITE).toString(row.getMaxSize()); - log.info("selected row " + selectedRow + " " + decoratedRow); - log.info("rows : " + cpsRows); - } - int minMinSize = row.getMinSize() + 1; Integer maxMinSize = row.getMaxSize() != null ? row.getMaxSize() - 1 : null; @@ -64,7 +48,7 @@ public class SplitSpeciesAction extends SimpleActionSupport<CalcifiedPiecesSampl Integer exMaxSize = row.getMaxSize(); row.setMaxSize(minSize - 1); - CalcifiedPiecesSamplingEditorRowModel newRow = ui.getHandler().createNewRow(row.getSpecies(), + CalcifiedPiecesSamplingEditorRowModel newRow = ui.getHandler().createNewRow(row.getProtocolSpecies(), row.getMaturity(), row.isSex(), minSize, diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/ValidateMinSizeAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/ValidateMinSizeAction.java deleted file mode 100644 index 61da88b..0000000 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/ValidateMinSizeAction.java +++ /dev/null @@ -1,20 +0,0 @@ -package fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.actions; - -import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.MinSizePopupUI; -import fr.ifremer.tutti.ui.swing.util.actions.SimpleActionSupport; - -/** - * @author Kevin Morin (Code Lutin) - * @since x.x - */ -public class ValidateMinSizeAction extends SimpleActionSupport<MinSizePopupUI> { - - public ValidateMinSizeAction(MinSizePopupUI minSizePopupUI) { - super(minSizePopupUI); - } - - @Override - protected void onActionPerformed(MinSizePopupUI minSizePopupUI) { - minSizePopupUI.getHandler().validate(); - } -} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/ZonesTreeModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/ZonesTreeModel.java index 2b88ddb..b57242f 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/ZonesTreeModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/ZonesTreeModel.java @@ -28,7 +28,6 @@ public class ZonesTreeModel extends AbstractZoneEditorTreeModel { public ZonesTreeModel() { super(t("tutti.zoneEditor.zones.root.label")); - log.info(t("tutti.test", "test1", "test2", 1.0d)); } public void removeZones(Collection<ZoneUIModel> zonesToRemove) { -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.