branch develop-4.4.x updated (4eb3698 -> 799bf96)
This is an automated email from the git hooks/post-receive script. New change to branch develop-4.4.x in repository tutti. See http://git.codelutin.com/tutti.git from 4eb3698 on ne fait pas la valeur absolue de la coordonnées (fixes #7984) new 713c84a ajout d'un event quand une ligne est sauvée, pour mettre à jour la liste des validations quand on modifie une ligne (fixes #7972) new 1f7c1e0 le BatchSavedEvent étend EventObject refs #7972 new a50f804 Surcharge de la méthode getSource new 799bf96 Et les listeners doivent étendre EventListener... The 4 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit 799bf962dce51e331a052d7028d2ebcc8798836d Author: Tony CHEMIT <chemit@codelutin.com> Date: Thu Feb 11 14:32:03 2016 +0100 Et les listeners doivent étendre EventListener... commit a50f8045c463b7e4255263c8da4bd736bf6172a8 Author: Tony CHEMIT <chemit@codelutin.com> Date: Thu Feb 11 14:28:52 2016 +0100 Surcharge de la méthode getSource commit 1f7c1e0915081c64e949ecdd7b88e5ce4fa1190a Author: Kevin Morin <morin@codelutin.com> Date: Thu Feb 11 13:52:53 2016 +0100 le BatchSavedEvent étend EventObject refs #7972 commit 713c84ab10af9890a16be13102ee6b0381a1ed2f Author: Kevin Morin <morin@codelutin.com> Date: Tue Feb 9 14:30:11 2016 +0100 ajout d'un event quand une ligne est sauvée, pour mettre à jour la liste des validations quand on modifie une ligne (fixes #7972) Summary of changes: .../catches/AbstractTuttiBatchTableUIHandler.java | 25 ++++++++++- .../content/operation/catches/BatchSavedEvent.java | 28 ++++++++++++ .../operation/catches/BatchSavedListener.java | 12 +++++ .../accidental/AccidentalBatchUIHandler.java | 1 + .../catches/benthos/BenthosBatchUIHandler.java | 2 + .../IndividualObservationBatchUIHandler.java | 1 + .../marinelitter/MarineLitterBatchUIHandler.java | 2 + .../catches/species/SpeciesBatchUIHandler.java | 2 + .../EditFishingOperationInValidationUIAction.java | 51 ++++++++++++++++++++-- 9 files changed, 119 insertions(+), 5 deletions(-) create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/BatchSavedEvent.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/BatchSavedListener.java -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop-4.4.x in repository tutti. See http://git.codelutin.com/tutti.git commit 713c84ab10af9890a16be13102ee6b0381a1ed2f Author: Kevin Morin <morin@codelutin.com> Date: Tue Feb 9 14:30:11 2016 +0100 ajout d'un event quand une ligne est sauvée, pour mettre à jour la liste des validations quand on modifie une ligne (fixes #7972) --- .../catches/AbstractTuttiBatchTableUIHandler.java | 25 ++++++++++- .../content/operation/catches/BatchSavedEvent.java | 27 ++++++++++++ .../operation/catches/BatchSavedListener.java | 10 +++++ .../accidental/AccidentalBatchUIHandler.java | 1 + .../catches/benthos/BenthosBatchUIHandler.java | 2 + .../IndividualObservationBatchUIHandler.java | 1 + .../marinelitter/MarineLitterBatchUIHandler.java | 2 + .../catches/species/SpeciesBatchUIHandler.java | 2 + .../EditFishingOperationInValidationUIAction.java | 51 ++++++++++++++++++++-- 9 files changed, 116 insertions(+), 5 deletions(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/AbstractTuttiBatchTableUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/AbstractTuttiBatchTableUIHandler.java index 51babd5..bda1683 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/AbstractTuttiBatchTableUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/AbstractTuttiBatchTableUIHandler.java @@ -40,12 +40,17 @@ import org.nuiton.decorator.Decorator; import org.nuiton.jaxx.application.swing.table.AbstractApplicationTableModel; import org.nuiton.jaxx.application.swing.table.ColumnIdentifier; -import javax.swing.*; +import javax.swing.JLabel; +import javax.swing.JTable; +import javax.swing.SwingConstants; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumnModel; import javax.swing.table.TableModel; -import java.awt.*; +import java.awt.Color; +import java.awt.Component; +import java.util.ArrayList; import java.util.Collection; +import java.util.List; /** * Abstract ui handler forbatch ui. @@ -61,6 +66,8 @@ public abstract class AbstractTuttiBatchTableUIHandler<R extends AbstractTuttiBe public abstract void selectFishingOperation(FishingOperation bean); + protected final List<BatchSavedListener> batchSavedListeners = new ArrayList<>(); + protected AbstractTuttiBatchTableUIHandler(String... properties) { super(properties); } @@ -86,6 +93,20 @@ public abstract class AbstractTuttiBatchTableUIHandler<R extends AbstractTuttiBe table.clearSelection(); } + public void addBatchSavedListener(BatchSavedListener listener) { + batchSavedListeners.add(listener); + } + + public void removeBatchSavedListener(BatchSavedListener listener) { + batchSavedListeners.remove(listener); + } + + public void fireBatchSaved(R row) { + for (BatchSavedListener listener : batchSavedListeners) { + listener.onBatchSaved(new BatchSavedEvent(getModel(), row)); + } + } + @Override protected void onRowModified(int rowIndex, R row, diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/BatchSavedEvent.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/BatchSavedEvent.java new file mode 100644 index 0000000..6632ba8 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/BatchSavedEvent.java @@ -0,0 +1,27 @@ +package fr.ifremer.tutti.ui.swing.content.operation.catches; + +import fr.ifremer.tutti.ui.swing.util.AbstractTuttiBeanUIModel; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.4.2 + */ +public class BatchSavedEvent { + + protected final AbstractTuttiBatchUIModel model; + + protected final AbstractTuttiBeanUIModel row; + + public BatchSavedEvent(AbstractTuttiBatchUIModel model, AbstractTuttiBeanUIModel row) { + this.model = model; + this.row = row; + } + + public AbstractTuttiBatchUIModel getModel() { + return model; + } + + public AbstractTuttiBeanUIModel getRow() { + return row; + } +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/BatchSavedListener.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/BatchSavedListener.java new file mode 100644 index 0000000..8a6d91a --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/BatchSavedListener.java @@ -0,0 +1,10 @@ +package fr.ifremer.tutti.ui.swing.content.operation.catches; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.4.2 + */ +public interface BatchSavedListener { + + void onBatchSaved(BatchSavedEvent evt); +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUIHandler.java index 266016f..2ea50ce 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUIHandler.java @@ -442,5 +442,6 @@ public class AccidentalBatchUIHandler getPersistenceService().saveAccidentalBatch(entityToSave); } + fireBatchSaved(row); } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUIHandler.java index 76ec945..4b7e12c 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUIHandler.java @@ -1289,6 +1289,8 @@ public class BenthosBatchUIHandler extends AbstractTuttiBatchTableUIHandler<Bent getPersistenceService().saveBenthosBatch(entityToSave); } + fireBatchSaved(row); + List<BenthosFrequencyRowModel> frequencyRows = row.getFrequency(); List<BenthosBatchFrequency> frequency = diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java index e692476..3f47e37 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java @@ -754,5 +754,6 @@ public class IndividualObservationBatchUIHandler getPersistenceService().saveIndividualObservationBatch(entityToSave); } + fireBatchSaved(row); } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/MarineLitterBatchUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/MarineLitterBatchUIHandler.java index 954c6b4..a2cf97a 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/MarineLitterBatchUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/MarineLitterBatchUIHandler.java @@ -390,6 +390,8 @@ public class MarineLitterBatchUIHandler extends AbstractTuttiBatchTableUIHandler getPersistenceService().saveMarineLitterBatch(entityToSave); } + fireBatchSaved(row); + } public void removeFromMarineLitterCategoriesUsed(MarineLitterBatchRowModel row) { diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java index 01475e0..e816265 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java @@ -1310,6 +1310,8 @@ public class SpeciesBatchUIHandler extends AbstractTuttiBatchTableUIHandler<Spec getPersistenceService().saveSpeciesBatch(catchBean); } + fireBatchSaved(row); + List<SpeciesFrequencyRowModel> frequencyRows = row.getFrequency(); List<SpeciesBatchFrequency> frequency = diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/validation/actions/EditFishingOperationInValidationUIAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/validation/actions/EditFishingOperationInValidationUIAction.java index 3ed5596..207d9f1 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/validation/actions/EditFishingOperationInValidationUIAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/validation/actions/EditFishingOperationInValidationUIAction.java @@ -27,13 +27,17 @@ import fr.ifremer.tutti.persistence.entities.data.CatchBatch; import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.service.catches.ValidateCruiseOperationsService; -import fr.ifremer.tutti.ui.swing.util.actions.LongActionSupport; import fr.ifremer.tutti.ui.swing.content.operation.EditFishingOperationUIModel; import fr.ifremer.tutti.ui.swing.content.operation.FishingOperationsUI; +import fr.ifremer.tutti.ui.swing.content.operation.catches.AbstractTuttiBatchUIModel; +import fr.ifremer.tutti.ui.swing.content.operation.catches.BatchSavedEvent; +import fr.ifremer.tutti.ui.swing.content.operation.catches.BatchSavedListener; +import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUI; import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUIModel; import fr.ifremer.tutti.ui.swing.content.validation.ValidateCruiseUI; import fr.ifremer.tutti.ui.swing.content.validation.ValidateCruiseUIHandler; import fr.ifremer.tutti.ui.swing.content.validation.ValidateCruiseUIModel; +import fr.ifremer.tutti.ui.swing.util.actions.LongActionSupport; import org.nuiton.validator.NuitonValidatorResult; import java.beans.PropertyChangeEvent; @@ -150,6 +154,29 @@ public class EditFishingOperationInValidationUIAction extends LongActionSupport< } }; + protected final BatchSavedListener batchSavedListener = new BatchSavedListener() { + + @Override + public void onBatchSaved(BatchSavedEvent evt) { + + AbstractTuttiBatchUIModel model = evt.getModel(); + + if (model.getFishingOperation() != null) { + + // after a save, or a reset, reload model cruise, since the synchronizationStatus may have changed + Cruise cruise = getDataContext().reloadCruise(); + getModel().setCruise(cruise); + + NuitonValidatorResult validationResult = validationService.validateCruiseOperation(model.getFishingOperation()); + + ValidateCruiseUIModel uiModel = getModel(); + uiModel.addValidatorResult(uiModel.getSelectedFishingOperation(), validationResult); + + getHandler().updateCurrentOperationNode(validationResult); + } + } + }; + public EditFishingOperationInValidationUIAction(ValidateCruiseUIHandler handler) { super(handler, true); setActionDescription(t("tutti.editFishingOperation.action.editFishingOperation.tip")); @@ -172,8 +199,17 @@ public class EditFishingOperationInValidationUIAction extends LongActionSupport< FishingOperationsUI operationPanel = getUI().getOperationPanel(); operationPanel.getFishingOperationTabContent().getModel(). removePropertyChangeListener(editFishingOperationModelListener); - operationPanel.getCatchesTabContent().getModel(). + + EditCatchesUI catchesTabContent = operationPanel.getCatchesTabContent(); + + catchesTabContent.getModel(). removePropertyChangeListener(editCatchesModelListener); + + catchesTabContent.getSpeciesTabContent().getHandler().removeBatchSavedListener(batchSavedListener); + catchesTabContent.getBenthosTabContent().getHandler().removeBatchSavedListener(batchSavedListener); + catchesTabContent.getAccidentalTabContent().getHandler().removeBatchSavedListener(batchSavedListener); + catchesTabContent.getMarineLitterTabContent().getHandler().removeBatchSavedListener(batchSavedListener); + catchesTabContent.getIndividualObservationTabContent().getHandler().removeBatchSavedListener(batchSavedListener); } @Override @@ -187,7 +223,16 @@ public class EditFishingOperationInValidationUIAction extends LongActionSupport< FishingOperationsUI operationPanel = getUI().getOperationPanel(); operationPanel.getFishingOperationTabContent().getModel().addPropertyChangeListener(editFishingOperationModelListener); - operationPanel.getCatchesTabContent().getModel().addPropertyChangeListener(editCatchesModelListener); + + EditCatchesUI catchesTabContent = operationPanel.getCatchesTabContent(); + + catchesTabContent.getModel().addPropertyChangeListener(editCatchesModelListener); + + catchesTabContent.getSpeciesTabContent().getHandler().addBatchSavedListener(batchSavedListener); + catchesTabContent.getBenthosTabContent().getHandler().addBatchSavedListener(batchSavedListener); + catchesTabContent.getAccidentalTabContent().getHandler().addBatchSavedListener(batchSavedListener); + catchesTabContent.getMarineLitterTabContent().getHandler().addBatchSavedListener(batchSavedListener); + catchesTabContent.getIndividualObservationTabContent().getHandler().addBatchSavedListener(batchSavedListener); } @Override -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop-4.4.x in repository tutti. See http://git.codelutin.com/tutti.git commit 1f7c1e0915081c64e949ecdd7b88e5ce4fa1190a Author: Kevin Morin <morin@codelutin.com> Date: Thu Feb 11 13:52:53 2016 +0100 le BatchSavedEvent étend EventObject refs #7972 --- .../ui/swing/content/operation/catches/BatchSavedEvent.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/BatchSavedEvent.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/BatchSavedEvent.java index 6632ba8..f3e981f 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/BatchSavedEvent.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/BatchSavedEvent.java @@ -2,23 +2,23 @@ package fr.ifremer.tutti.ui.swing.content.operation.catches; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiBeanUIModel; +import java.util.EventObject; + /** * @author Kevin Morin (Code Lutin) * @since 4.4.2 */ -public class BatchSavedEvent { - - protected final AbstractTuttiBatchUIModel model; +public class BatchSavedEvent extends EventObject { protected final AbstractTuttiBeanUIModel row; public BatchSavedEvent(AbstractTuttiBatchUIModel model, AbstractTuttiBeanUIModel row) { - this.model = model; + super(model); this.row = row; } public AbstractTuttiBatchUIModel getModel() { - return model; + return (AbstractTuttiBatchUIModel) source; } public AbstractTuttiBeanUIModel getRow() { -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop-4.4.x in repository tutti. See http://git.codelutin.com/tutti.git commit a50f8045c463b7e4255263c8da4bd736bf6172a8 Author: Tony CHEMIT <chemit@codelutin.com> Date: Thu Feb 11 14:28:52 2016 +0100 Surcharge de la méthode getSource --- .../tutti/ui/swing/content/operation/catches/BatchSavedEvent.java | 5 +++-- .../validation/actions/EditFishingOperationInValidationUIAction.java | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/BatchSavedEvent.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/BatchSavedEvent.java index f3e981f..0fb4dae 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/BatchSavedEvent.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/BatchSavedEvent.java @@ -17,8 +17,9 @@ public class BatchSavedEvent extends EventObject { this.row = row; } - public AbstractTuttiBatchUIModel getModel() { - return (AbstractTuttiBatchUIModel) source; + @Override + public AbstractTuttiBatchUIModel getSource() { + return (AbstractTuttiBatchUIModel) super.getSource(); } public AbstractTuttiBeanUIModel getRow() { diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/validation/actions/EditFishingOperationInValidationUIAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/validation/actions/EditFishingOperationInValidationUIAction.java index 207d9f1..db19e08 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/validation/actions/EditFishingOperationInValidationUIAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/validation/actions/EditFishingOperationInValidationUIAction.java @@ -159,7 +159,7 @@ public class EditFishingOperationInValidationUIAction extends LongActionSupport< @Override public void onBatchSaved(BatchSavedEvent evt) { - AbstractTuttiBatchUIModel model = evt.getModel(); + AbstractTuttiBatchUIModel model = evt.getSource(); if (model.getFishingOperation() != null) { -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop-4.4.x in repository tutti. See http://git.codelutin.com/tutti.git commit 799bf962dce51e331a052d7028d2ebcc8798836d Author: Tony CHEMIT <chemit@codelutin.com> Date: Thu Feb 11 14:32:03 2016 +0100 Et les listeners doivent étendre EventListener... --- .../tutti/ui/swing/content/operation/catches/BatchSavedListener.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/BatchSavedListener.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/BatchSavedListener.java index 8a6d91a..938543d 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/BatchSavedListener.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/BatchSavedListener.java @@ -1,10 +1,12 @@ package fr.ifremer.tutti.ui.swing.content.operation.catches; +import java.util.EventListener; + /** * @author Kevin Morin (Code Lutin) * @since 4.4.2 */ -public interface BatchSavedListener { +public interface BatchSavedListener extends EventListener { void onBatchSaved(BatchSavedEvent evt); } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm