Observe-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- 7199 discussions
[Git][ultreiaio/ird-observe][develop-7.x] [PS] Raccourcis F5 non fonctionnel - Closes #1022
by Tony CHEMIT 10 Jul '18
by Tony CHEMIT 10 Jul '18
10 Jul '18
Tony CHEMIT pushed to branch develop-7.x at ultreiaio / ird-observe
Commits:
2e34b2db by Tony CHEMIT at 2018-07-10T13:47:26Z
[PS] Raccourcis F5 non fonctionnel - Closes #1022
- - - - -
1 changed file:
- client/src/main/java/fr/ird/observe/client/ui/content/ContentUIInitializer.java
Changes:
=====================================
client/src/main/java/fr/ird/observe/client/ui/content/ContentUIInitializer.java
=====================================
@@ -696,6 +696,8 @@ public class ContentUIInitializer<E extends IdDto, UI extends ContentUI<E, UI>>
protected void init(JXDatePicker picker) {
log.debug("init JXDatePicker editor" + picker.getName());
+ picker.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_F5, 0), "none");
+
picker.setLocale(ObserveSwingApplicationContext.get().getConfig().getLocale());
JFormattedTextField editor = picker.getEditor();
editor.setEditable(true);
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/2e34b2db2dc6e0aa534e0be7460…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/2e34b2db2dc6e0aa534e0be7460…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop-7.x] [LL] Ajout de 2 racourcis - closes #1027
by Tony CHEMIT 10 Jul '18
by Tony CHEMIT 10 Jul '18
10 Jul '18
Tony CHEMIT pushed to branch develop-7.x at ultreiaio / ird-observe
Commits:
fd9b4b6d by Tony CHEMIT at 2018-07-10T13:25:41Z
[LL] Ajout de 2 racourcis - closes #1027
- - - - -
9 changed files:
- + client/src/main/java/fr/ird/observe/client/ui/actions/content/LonglineDetailCompositionDeleteAllSectionsAction.java
- + client/src/main/java/fr/ird/observe/client/ui/actions/content/LonglineDetailCompositionGenerateAllSectionsAction.java
- client/src/main/java/fr/ird/observe/client/ui/content/data/longline/BasketsTableModel.java
- client/src/main/java/fr/ird/observe/client/ui/content/data/longline/BranchlinesTableModel.java
- client/src/main/java/fr/ird/observe/client/ui/content/data/longline/LonglineDetailCompositionUI.jaxx
- client/src/main/java/fr/ird/observe/client/ui/content/data/longline/LonglineDetailCompositionUI.jcss
- client/src/main/java/fr/ird/observe/client/ui/content/data/longline/LonglineDetailCompositionUIHandler.java
- client/src/main/java/fr/ird/observe/client/ui/content/data/longline/LonglineDetailCompositionUIValidationHelper.java
- client/src/main/java/fr/ird/observe/client/ui/content/data/longline/SectionsTableModel.java
Changes:
=====================================
client/src/main/java/fr/ird/observe/client/ui/actions/content/LonglineDetailCompositionDeleteAllSectionsAction.java
=====================================
@@ -0,0 +1,104 @@
+package fr.ird.observe.client.ui.actions.content;
+
+import fr.ird.observe.client.ObserveSwingApplicationContext;
+import fr.ird.observe.client.ui.ObserveKeyStrokes;
+import fr.ird.observe.client.ui.ObserveMainUI;
+import fr.ird.observe.client.ui.content.ContentUI;
+import fr.ird.observe.client.ui.content.data.longline.LonglineDetailCompositionUI;
+import fr.ird.observe.client.ui.content.data.longline.LonglineDetailCompositionUIValidationHelper;
+import fr.ird.observe.client.ui.content.data.longline.SectionsTableModel;
+import fr.ird.observe.client.ui.util.UIHelper;
+import fr.ird.observe.dto.data.longline.SectionWithTemplate;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import javax.swing.JOptionPane;
+import java.util.ArrayList;
+
+import static org.nuiton.i18n.I18n.t;
+
+/**
+ * Created by tchemit on 10/07/2018.
+ *
+ * @author Tony Chemit - dev(a)tchemit.fr
+ */
+public class LonglineDetailCompositionDeleteAllSectionsAction extends AbstractContentUIAction {
+
+ public static final String ACTION_NAME = LonglineDetailCompositionDeleteAllSectionsAction.class.getName();
+ private static final Log log = LogFactory.getLog(LonglineDetailCompositionDeleteAllSectionsAction.class);
+
+ public LonglineDetailCompositionDeleteAllSectionsAction(ObserveMainUI mainUI) {
+ super(mainUI, NAME, t("observe.common.LonglineDetailCompositionDto.action.deleteAllSections"), t("observe.common.LonglineDetailCompositionDto.action.deleteAllSections.tip"), "delete", ObserveKeyStrokes.KEY_STROKE_DELETE_DATA_GLOBAL);
+ }
+
+ @Override
+ protected void actionPerformed(ContentUI<?, ?> contentUI) {
+
+ LonglineDetailCompositionUI ui = (LonglineDetailCompositionUI) contentUI;
+
+ LonglineDetailCompositionUIValidationHelper validationHelper = ui.getHandler().getValidationHelper();
+
+ if (log.isInfoEnabled()) {
+ log.info("Generate all sections.");
+ }
+
+ SectionsTableModel sectionsTableModel = ui.getSectionsTableModel();
+ if (sectionsTableModel.isEmpty()) {
+
+ // no section
+ return;
+ }
+
+ boolean canDelete = true;
+ for (SectionWithTemplate sectionWithTemplate : sectionsTableModel.getNotEmptyData()) {
+
+ if (!ui.getHandler().canDeleteSection(sectionWithTemplate.getDelegate())) {
+ canDelete = false;
+ break;
+ }
+ }
+
+ if (!canDelete) {
+
+ // there is some references, can't delete
+ UIHelper.displayWarning(t("observe.common.LonglineDetailCompositionDto.section.cant.delete.title"), t("observe.common.LonglineDetailCompositionDto.section.cant.delete.message"));
+ return;
+
+ }
+
+ ObserveMainUI mainUI = ObserveSwingApplicationContext.get().getMainUI();
+ int response = UIHelper.askUser(mainUI,
+ t("observe.title.delete"),
+ t("observe.common.LonglineDetailCompositionDto.section.delete.message"),
+ JOptionPane.WARNING_MESSAGE,
+ new Object[]{t("observe.choice.confirm.delete"),
+ t("observe.choice.cancel")},
+ 1);
+
+ if (response != 0) {
+
+ // user cancel
+ return;
+ }
+
+ if (log.isInfoEnabled()) {
+ log.info("Remove all sections.");
+ }
+
+ validationHelper.setObjectValueAdjusting(true);
+
+ try {
+
+ sectionsTableModel.setData(new ArrayList<>());
+ ui.getBean().getSection().clear();
+ ui.getModel().setModified(true);
+
+ } finally {
+
+ validationHelper.setObjectValueAdjusting(false);
+ validationHelper.whenSectionChanged();
+
+ }
+ }
+
+}
=====================================
client/src/main/java/fr/ird/observe/client/ui/actions/content/LonglineDetailCompositionGenerateAllSectionsAction.java
=====================================
@@ -0,0 +1,155 @@
+package fr.ird.observe.client.ui.actions.content;
+
+import com.google.common.collect.Lists;
+import fr.ird.observe.client.ui.ObserveKeyStrokes;
+import fr.ird.observe.client.ui.ObserveMainUI;
+import fr.ird.observe.client.ui.content.ContentUI;
+import fr.ird.observe.client.ui.content.data.longline.BasketsTableModel;
+import fr.ird.observe.client.ui.content.data.longline.BranchlinesTableModel;
+import fr.ird.observe.client.ui.content.data.longline.LonglineDetailCompositionUI;
+import fr.ird.observe.client.ui.content.data.longline.LonglineDetailCompositionUIValidationHelper;
+import fr.ird.observe.client.ui.content.data.longline.SectionTemplatesTableModel;
+import fr.ird.observe.client.ui.content.data.longline.SectionsTableModel;
+import fr.ird.observe.client.ui.util.UIHelper;
+import fr.ird.observe.dto.data.longline.BasketDto;
+import fr.ird.observe.dto.data.longline.BranchlineDto;
+import fr.ird.observe.dto.data.longline.SectionDto;
+import fr.ird.observe.dto.data.longline.SectionTemplate;
+import fr.ird.observe.dto.data.longline.SectionWithTemplate;
+import fr.ird.observe.dto.data.longline.SetLonglineDetailCompositionDto;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import static org.nuiton.i18n.I18n.t;
+
+/**
+ * Created by tchemit on 10/07/2018.
+ *
+ * @author Tony Chemit - dev(a)tchemit.fr
+ */
+public class LonglineDetailCompositionGenerateAllSectionsAction extends AbstractContentUIAction {
+
+ public static final String ACTION_NAME = LonglineDetailCompositionGenerateAllSectionsAction.class.getName();
+ private static final Log log = LogFactory.getLog(LonglineDetailCompositionGenerateAllSectionsAction.class);
+ public LonglineDetailCompositionGenerateAllSectionsAction(ObserveMainUI mainUI) {
+
+ super(mainUI, ACTION_NAME, t("observe.common.LonglineDetailCompositionDto.action.generateAllSections"), t("observe.common.LonglineDetailCompositionDto.action.generateAllSections.tip"), "generate", ObserveKeyStrokes.KEY_STROKE_NEW_NEXT_DATA);
+ }
+
+ @Override
+ protected void actionPerformed(ContentUI<?, ?> contentUI) {
+
+ LonglineDetailCompositionUI ui = (LonglineDetailCompositionUI) contentUI;
+
+ LonglineDetailCompositionUIValidationHelper validationHelper = ui.getHandler().getValidationHelper();
+
+ if (log.isInfoEnabled()) {
+ log.info("Generate all sections.");
+ }
+
+ SetLonglineDetailCompositionDto bean = ui.getBean();
+ Integer nbSections = bean.getTotalSectionsCount();
+ Integer basketsCount = bean.getBasketsPerSectionCount();
+ Integer nbBranchlines = bean.getBranchlinesPerBasketCount();
+
+ SectionTemplate template = null;
+
+ SectionTemplatesTableModel sectionTemplatesTableModel = ui.getSectionTemplatesTableModel();
+ List<SectionTemplate> sectionTemplates = sectionTemplatesTableModel.getNotEmptyData();
+ if (sectionTemplates.size() == 1) {
+
+ template = sectionTemplates.get(0);
+
+ boolean compliantWithBasketCount = template.isCompiliantWithBasketCount(basketsCount);
+ if (!compliantWithBasketCount) {
+
+ if (log.isWarnEnabled()) {
+ log.warn("sectionTemplate " + template + " is not compliant with basketCount: " + basketsCount);
+ }
+
+ UIHelper.displayWarning(t("observe.common.LonglineDetailCompositionDto.title.section.cant.use.firstTemplate"), t("observe.common.LonglineDetailCompositionDto.firstTemplate.template.notCompilant.basketCount", template.getFloatlineLengths(), basketsCount));
+
+ template = null;
+
+ }
+
+ }
+
+ boolean usingTemplate = template != null;
+
+ if (usingTemplate) {
+
+ if (log.isInfoEnabled()) {
+ log.info("Will use sectionTemplate: " + template);
+ }
+ }
+
+ validationHelper.setObjectValueAdjusting(true);
+
+ try {
+
+ SectionsTableModel sectionsTableModel = ui.getSectionsTableModel();
+ BasketsTableModel basketsTableModel = ui.getBasketsTableModel();
+ BranchlinesTableModel branchlinesTableModel = ui.getBranchlinesTableModel();
+
+ List<SectionWithTemplate> sections = new ArrayList<>(nbSections);
+
+ for (int sectionNumber = 0; sectionNumber < nbSections; sectionNumber++) {
+
+ SectionWithTemplate section = sectionsTableModel.createNewRow();
+ sections.add(section);
+
+ for (int basketNumber = 0; basketNumber < basketsCount; basketNumber++) {
+
+ BasketDto basket = basketsTableModel.createNewRow();
+ section.addBasket(basket);
+
+ for (int branchlineNumber = 0; branchlineNumber < nbBranchlines; branchlineNumber++) {
+
+ BranchlineDto branchline = branchlinesTableModel.createNewRow();
+ basket.addBranchline(branchline);
+
+ }
+
+ LinkedList<BranchlineDto> branchlines = Lists.newLinkedList(basket.getBranchline());
+ branchlinesTableModel.rearrangeIds(branchlines);
+
+ }
+
+ List<BasketDto> baskets = Lists.newLinkedList(section.getBasket());
+ basketsTableModel.rearrangeIds(baskets);
+
+ if (usingTemplate) {
+
+ section.setSectionTemplate(template);
+ template.applyToBaskets(baskets);
+
+ }
+
+ }
+
+ sectionsTableModel.rearrangeIds(sections);
+ sectionsTableModel.setData(sections);
+
+ List<SectionDto> sectionHelper = sections.stream()
+ .map(SectionWithTemplate::getDelegate)
+ .collect(Collectors.toList());
+
+ ui.getBean().addAllSection(sectionHelper);
+
+ ui.getModel().setModified(true);
+
+ } finally {
+
+ validationHelper.setObjectValueAdjusting(false);
+ validationHelper.whenSectionChanged();
+
+ }
+ }
+
+}
=====================================
client/src/main/java/fr/ird/observe/client/ui/content/data/longline/BasketsTableModel.java
=====================================
@@ -40,7 +40,7 @@ public class BasketsTableModel extends LonglineCompositionTableModelSupport<Bask
}
@Override
- protected BasketDto createNewRow() {
+ public BasketDto createNewRow() {
return new BasketDto();
}
=====================================
client/src/main/java/fr/ird/observe/client/ui/content/data/longline/BranchlinesTableModel.java
=====================================
@@ -49,7 +49,7 @@ public class BranchlinesTableModel extends LonglineCompositionTableModelSupport<
}
@Override
- protected BranchlineDto createNewRow() {
+ public BranchlineDto createNewRow() {
BranchlineDto branchline = new BranchlineDto();
branchline.setTimerTimeOnBoard(defaultDate);
=====================================
client/src/main/java/fr/ird/observe/client/ui/content/data/longline/LonglineDetailCompositionUI.jaxx
=====================================
@@ -26,6 +26,8 @@
<import>
fr.ird.observe.client.ObserveSwingApplicationContext
fr.ird.observe.dto.data.longline.SetLonglineDetailCompositionDto
+ fr.ird.observe.client.ui.actions.content.LonglineDetailCompositionDeleteAllSectionsAction
+ fr.ird.observe.client.ui.actions.content.LonglineDetailCompositionGenerateAllSectionsAction
fr.ird.observe.client.ui.actions.content.ResetEditUIAction
fr.ird.observe.client.ui.actions.content.SaveEditUIAction
fr.ird.observe.client.ui.actions.main.global.ResetDataGlobalUIAction
@@ -146,8 +148,8 @@
<JPanel layout='{new BorderLayout()}'>
<JPanel id="compositionActionPanel" constraints='BorderLayout.NORTH' layout='{new GridLayout()}'>
- <JButton id='generateAll' onActionPerformed='getHandler().generateAllSections()'/>
- <JButton id='deleteAll' onActionPerformed='getHandler().deleteAllSections()'/>
+ <JButton id='generateAll' />
+ <JButton id='deleteAll' />
</JPanel>
<JPanel id="compositionTablesPanel" constraints='BorderLayout.CENTER' layout='{new GridLayout(0,1)}'>
=====================================
client/src/main/java/fr/ird/observe/client/ui/content/data/longline/LonglineDetailCompositionUI.jcss
=====================================
@@ -81,17 +81,13 @@
}
#generateAll {
- text: "observe.common.LonglineDetailCompositionDto.action.generateAllSections";
- toolTipText: "observe.common.LonglineDetailCompositionDto.action.generateAllSections.tip";
- actionIcon: generate;
+ _observeAction:{LonglineDetailCompositionGenerateAllSectionsAction.ACTION_NAME};
visible: {model.isUpdatingMode()};
enabled: {model.isCanGenerate() && sectionsTableModel.isEmpty()};
}
#deleteAll {
- text: "observe.common.LonglineDetailCompositionDto.action.deleteAllSections";
- toolTipText: "observe.common.LonglineDetailCompositionDto.action.deleteAllSections.tip";
- actionIcon: delete;
+ _observeAction:{LonglineDetailCompositionDeleteAllSectionsAction.ACTION_NAME};
visible: {model.isUpdatingMode()};
enabled: {!sectionsTableModel.isEmpty()};
}
=====================================
client/src/main/java/fr/ird/observe/client/ui/content/data/longline/LonglineDetailCompositionUIHandler.java
=====================================
@@ -22,7 +22,6 @@ package fr.ird.observe.client.ui.content.data.longline;
* #L%
*/
-import com.google.common.collect.Lists;
import fr.ird.observe.client.ObserveSwingApplicationContext;
import fr.ird.observe.client.db.ClientDataContext;
import fr.ird.observe.client.db.ObserveSwingDataSource;
@@ -64,10 +63,8 @@ import javax.swing.event.TableModelListener;
import java.beans.PropertyChangeListener;
import java.util.ArrayList;
import java.util.LinkedHashSet;
-import java.util.LinkedList;
import java.util.List;
import java.util.Optional;
-import java.util.stream.Collectors;
import static com.google.common.collect.Lists.newArrayList;
import static org.nuiton.i18n.I18n.t;
@@ -490,174 +487,6 @@ public class LonglineDetailCompositionUIHandler extends ContentUIHandler<SetLong
return continueSave;
}
- public void generateAllSections() {
-
- if (log.isInfoEnabled()) {
- log.info("Generate all sections.");
- }
-
- SetLonglineDetailCompositionDto bean = getBean();
- Integer nbSections = bean.getTotalSectionsCount();
- Integer basketsCount = bean.getBasketsPerSectionCount();
- Integer nbBranchlines = bean.getBranchlinesPerBasketCount();
-
- SectionTemplate template = null;
-
- SectionTemplatesTableModel sectionTemplatesTableModel = getSectionTemplatesTableModel();
- List<SectionTemplate> sectionTemplates = sectionTemplatesTableModel.getNotEmptyData();
- if (sectionTemplates.size() == 1) {
-
- template = sectionTemplates.get(0);
-
- boolean compliantWithBasketCount = template.isCompiliantWithBasketCount(basketsCount);
- if (!compliantWithBasketCount) {
-
- if (log.isWarnEnabled()) {
- log.warn("sectionTemplate " + template + " is not compliant with basketCount: " + basketsCount);
- }
-
- UIHelper.displayWarning(t("observe.common.LonglineDetailCompositionDto.title.section.cant.use.firstTemplate"), t("observe.common.LonglineDetailCompositionDto.firstTemplate.template.notCompilant.basketCount", template.getFloatlineLengths(), basketsCount));
-
- template = null;
-
- }
-
- }
-
- boolean usingTemplate = template != null;
-
- if (usingTemplate) {
-
- if (log.isInfoEnabled()) {
- log.info("Will use sectionTemplate: " + template);
- }
- }
-
- validationHelper.setObjectValueAdjusting(true);
-
- try {
-
- SectionsTableModel sectionsTableModel = getSectionsTableModel();
- BasketsTableModel basketsTableModel = getBasketsTableModel();
- BranchlinesTableModel branchlinesTableModel = getBranchlinesTableModel();
-
- List<SectionWithTemplate> sections = new ArrayList<>(nbSections);
-
- for (int sectionNumber = 0; sectionNumber < nbSections; sectionNumber++) {
-
- SectionWithTemplate section = sectionsTableModel.createNewRow();
- sections.add(section);
-
- for (int basketNumber = 0; basketNumber < basketsCount; basketNumber++) {
-
- BasketDto basket = basketsTableModel.createNewRow();
- section.addBasket(basket);
-
- for (int branchlineNumber = 0; branchlineNumber < nbBranchlines; branchlineNumber++) {
-
- BranchlineDto branchline = branchlinesTableModel.createNewRow();
- basket.addBranchline(branchline);
-
- }
-
- LinkedList<BranchlineDto> branchlines = Lists.newLinkedList(basket.getBranchline());
- branchlinesTableModel.rearrangeIds(branchlines);
-
- }
-
- List<BasketDto> baskets = Lists.newLinkedList(section.getBasket());
- basketsTableModel.rearrangeIds(baskets);
-
- if (usingTemplate) {
-
- section.setSectionTemplate(template);
- template.applyToBaskets(baskets);
-
- }
-
- }
-
- sectionsTableModel.rearrangeIds(sections);
- sectionsTableModel.setData(sections);
-
- List<SectionDto> sectionHelper = sections.stream()
- .map(SectionWithTemplate::getDelegate)
- .collect(Collectors.toList());
-
- getBean().addAllSection(sectionHelper);
-
- getModel().setModified(true);
-
- } finally {
-
- validationHelper.setObjectValueAdjusting(false);
- validationHelper.whenSectionChanged();
-
- }
-
- }
-
- public void deleteAllSections() {
-
- if (getSectionsTableModel().isEmpty()) {
-
- // no section
- return;
- }
-
- boolean canDelete = true;
- for (SectionWithTemplate sectionWithTemplate : getSectionsTableModel().getNotEmptyData()) {
-
- if (!canDeleteSection(sectionWithTemplate.getDelegate())) {
- canDelete = false;
- break;
- }
- }
-
- if (!canDelete) {
-
- // there is some references, can't delete
- UIHelper.displayWarning(t("observe.common.LonglineDetailCompositionDto.section.cant.delete.title"), t("observe.common.LonglineDetailCompositionDto.section.cant.delete.message"));
- return;
-
- }
-
- ObserveMainUI mainUI = ObserveSwingApplicationContext.get().getMainUI();
- int response = UIHelper.askUser(mainUI,
- t("observe.title.delete"),
- t("observe.common.LonglineDetailCompositionDto.section.delete.message"),
- JOptionPane.WARNING_MESSAGE,
- new Object[]{t("observe.choice.confirm.delete"),
- t("observe.choice.cancel")},
- 1);
-
- if (response != 0) {
-
- // user cancel
- return;
- }
-
- if (log.isInfoEnabled()) {
- log.info("Remove all sections.");
- }
-
- validationHelper.setObjectValueAdjusting(true);
-
- try {
-
- getSectionsTableModel().setData(new ArrayList<>());
- getBean().getSection().clear();
- getModel().setModified(true);
-
- } finally {
-
- validationHelper.setObjectValueAdjusting(false);
- validationHelper.whenSectionChanged();
-
- }
-
- }
-
public void insertBeforeSelectedSectionTemplate() {
getSectionTemplatesTableModel().insertBeforeSelectedRow();
}
@@ -1367,7 +1196,7 @@ public class LonglineDetailCompositionUIHandler extends ContentUIHandler<SetLong
return getUi().getBranchlineDetailUIModel();
}
- private boolean canDeleteSection(SectionDto section) {
+ public boolean canDeleteSection(SectionDto section) {
return section.isNotPersisted() || getSetLonglineDetailCompositionService().canDeleteSection(section.getId());
@@ -1385,4 +1214,7 @@ public class LonglineDetailCompositionUIHandler extends ContentUIHandler<SetLong
}
+ public LonglineDetailCompositionUIValidationHelper getValidationHelper() {
+ return validationHelper;
+ }
}
=====================================
client/src/main/java/fr/ird/observe/client/ui/content/data/longline/LonglineDetailCompositionUIValidationHelper.java
=====================================
@@ -47,7 +47,7 @@ import java.util.Set;
* @author Tony Chemit - dev(a)tchemit.fr
* @since 3.15
*/
-class LonglineDetailCompositionUIValidationHelper {
+public class LonglineDetailCompositionUIValidationHelper {
/** Logger. */
private static final Log log = LogFactory.getLog(LonglineDetailCompositionUIValidationHelper.class);
@@ -89,7 +89,7 @@ class LonglineDetailCompositionUIValidationHelper {
);
}
- void whenSectionChanged() {
+ public void whenSectionChanged() {
if (!objectValueAdjusting) {
@@ -157,7 +157,7 @@ class LonglineDetailCompositionUIValidationHelper {
});
}
- void setObjectValueAdjusting(boolean objectValueAdjusting) {
+ public void setObjectValueAdjusting(boolean objectValueAdjusting) {
this.objectValueAdjusting = objectValueAdjusting;
}
=====================================
client/src/main/java/fr/ird/observe/client/ui/content/data/longline/SectionsTableModel.java
=====================================
@@ -47,7 +47,7 @@ public class SectionsTableModel extends LonglineCompositionTableModelSupport<Sec
}
@Override
- protected SectionWithTemplate createNewRow() {
+ public SectionWithTemplate createNewRow() {
return new SectionWithTemplate();
}
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/fd9b4b6d5dcf54a367aacdf87ae…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/fd9b4b6d5dcf54a367aacdf87ae…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop-7.x] [LL] Plus de validation sur snap et émerillon - Closes #1028
by Tony CHEMIT 10 Jul '18
by Tony CHEMIT 10 Jul '18
10 Jul '18
Tony CHEMIT pushed to branch develop-7.x at ultreiaio / ird-observe
Commits:
91f26bf0 by Tony CHEMIT at 2018-07-10T12:50:15Z
[LL] Plus de validation sur snap et émerillon - Closes #1028
- - - - -
14 changed files:
- client/src/main/resources/i18n/client_en_GB.properties
- client/src/main/resources/i18n/client_es_ES.properties
- client/src/main/resources/i18n/client_fr_FR.properties
- dto/src/main/java/fr/ird/observe/dto/decoration/ObserveI18nLabelsBuilder.java
- dto/src/main/resources/i18n/dto_en_GB.properties
- dto/src/main/resources/i18n/dto_es_ES.properties
- dto/src/main/resources/i18n/dto_fr_FR.properties
- validation/src/main/resources/fr/ird/observe/dto/data/longline/BranchlineDto-update-error-validation.xml
- validation/src/main/resources/fr/ird/observe/dto/data/longline/BranchlineDto-update-table-error-validation.xml
- validation/src/main/resources/fr/ird/observe/dto/data/longline/SetLonglineDto-create-error-validation.xml
- validation/src/main/resources/fr/ird/observe/dto/data/longline/SetLonglineDto-update-error-validation.xml
- validation/src/main/resources/i18n/validation_en_GB.properties
- validation/src/main/resources/i18n/validation_es_ES.properties
- validation/src/main/resources/i18n/validation_fr_FR.properties
Changes:
=====================================
client/src/main/resources/i18n/client_en_GB.properties
=====================================
@@ -410,8 +410,6 @@ observe.common.BranchlineDto.hookLost=Hook lost
observe.common.BranchlineDto.hookOffset=Hook offset
observe.common.BranchlineDto.message.modified=Branchline was modified and is valid.
observe.common.BranchlineDto.message.modified.but.invalid=Branchline was modified but is not valid.
-observe.common.BranchlineDto.snapWeight=Snap weight (kg)
-observe.common.BranchlineDto.swivelWeight=Swivel weight (kg)
observe.common.BranchlineDto.timeSinceContact=Time since contact
observe.common.BranchlineDto.timer=Timer
observe.common.BranchlineDto.timerTimeOnBoard=Time on board
=====================================
client/src/main/resources/i18n/client_es_ES.properties
=====================================
@@ -410,8 +410,6 @@ observe.common.BranchlineDto.hookLost=Anzuelo erdido
observe.common.BranchlineDto.hookOffset=Offset anzuelo (°)
observe.common.BranchlineDto.message.modified=El arponcillo que se está modificando actualmente ha sido modificado y es valido.
observe.common.BranchlineDto.message.modified.but.invalid=El arponcillo que se está modificando actualmente ha sido modificado, pero no es valido.
-observe.common.BranchlineDto.snapWeight=Peso snap (kg)
-observe.common.BranchlineDto.swivelWeight=Peso destorcedor (kg)
observe.common.BranchlineDto.timeSinceContact=Tiempo desde el estallido
observe.common.BranchlineDto.timer=Reloj
observe.common.BranchlineDto.timerTimeOnBoard=Timestamp de subida a bordo
=====================================
client/src/main/resources/i18n/client_fr_FR.properties
=====================================
@@ -410,8 +410,6 @@ observe.common.BranchlineDto.hookLost=Hameçon perdu
observe.common.BranchlineDto.hookOffset=Offset hameçon (°)
observe.common.BranchlineDto.message.modified=L'avançon en cours d'édition a été modifié et est valide.
observe.common.BranchlineDto.message.modified.but.invalid=L'avançon en cours d'édition a été modifié, mais n'est pas valide.
-observe.common.BranchlineDto.snapWeight=Poids snap (kg)
-observe.common.BranchlineDto.swivelWeight=Poids émerillon (kg)
observe.common.BranchlineDto.timeSinceContact=Temps depuis déclenchement
observe.common.BranchlineDto.timer=Horloge
observe.common.BranchlineDto.timerTimeOnBoard=Horodatage de montée à bord
=====================================
dto/src/main/java/fr/ird/observe/dto/decoration/ObserveI18nLabelsBuilder.java
=====================================
@@ -47,6 +47,7 @@ public class ObserveI18nLabelsBuilder extends I18nLabelsBuilder {
static {
n("observe.common.I18nReferentialDto.label");
n("observe.common.SetLonglineGlobalCompositionDto.type");
+ n("observe.common.SetLonglineDetailCompositionDto.type");
}
private static final ObserveI18nLabelsBuilder INSTANCE = new ObserveI18nLabelsBuilder(null);
=====================================
dto/src/main/resources/i18n/dto_en_GB.properties
=====================================
@@ -159,6 +159,7 @@ observe.common.SensorTypeDto.types=Sensors type
observe.common.SensorUsedDto.title=Sensors ursed
observe.common.SensorUsedDto.type=Sensor used
observe.common.SensorUsedDto.types=Sensors used
+observe.common.SetLonglineDetailCompositionDto.type=Detailed composition
observe.common.SetLonglineDto.title=Fishing operation
observe.common.SetLonglineDto.type=Set
observe.common.SetLonglineDto.types=Sets
=====================================
dto/src/main/resources/i18n/dto_es_ES.properties
=====================================
@@ -157,6 +157,7 @@ observe.common.SensorTypeDto.types=Tipos de sensor
observe.common.SensorUsedDto.title=Sensores
observe.common.SensorUsedDto.type=Sensor utilizado
observe.common.SensorUsedDto.types=Sensores utilizados
+observe.common.SetLonglineDetailCompositionDto.type=Esquema del palangre
observe.common.SetLonglineDto.title=Operación de pesca
observe.common.SetLonglineDto.type=Operación de pesca
observe.common.SetLonglineDto.types=Operaciones de pesca
=====================================
dto/src/main/resources/i18n/dto_fr_FR.properties
=====================================
@@ -159,6 +159,7 @@ observe.common.SensorTypeDto.types=Types de capteur
observe.common.SensorUsedDto.title=Capteurs
observe.common.SensorUsedDto.type=Capteur utilisé
observe.common.SensorUsedDto.types=Capteurs utilisés
+observe.common.SetLonglineDetailCompositionDto.type=Schéma de palangre
observe.common.SetLonglineDto.title=Opération de pêche
observe.common.SetLonglineDto.type=Opération de pêche
observe.common.SetLonglineDto.types=Opérations de pêche
=====================================
validation/src/main/resources/fr/ird/observe/dto/data/longline/BranchlineDto-update-error-validation.xml
=====================================
@@ -108,4 +108,30 @@
</field>
+ <field name="swivelWeight">
+
+ <!-- 0.0 <= swivelWeight <= 0.2 -->
+ <field-validator type="fieldexpressionwithparams" short-circuit="true">
+ <param name="doubleParams">min:0.0|max:0.2</param>
+ <param name="expression"><![CDATA[ !weightedSwivel || swivelWeight == null || (doubles.min < swivelWeight && (swivelWeight - doubles.max) * 1000 < 1)]]></param>
+ <message>
+ observe.validation.setLongline.bound.swivelWeight##${doubles.min}##${doubles.max}
+ </message>
+ </field-validator>
+
+ </field>
+
+ <field name="snapWeight">
+
+ <!-- 0.0 <= snapWeight <= 0.2 -->
+ <field-validator type="fieldexpressionwithparams" short-circuit="true">
+ <param name="doubleParams">min:0.0|max:0.2</param>
+ <param name="expression"><![CDATA[ !weightedSnap || snapWeight == null || (doubles.min < snapWeight && (snapWeight - doubles.max) * 1000 < 1)]]></param>
+ <message>
+ observe.validation.setLongline.bound.snapWeight##${doubles.min}##${doubles.max}
+ </message>
+ </field-validator>
+
+ </field>
+
</validators>
=====================================
validation/src/main/resources/fr/ird/observe/dto/data/longline/BranchlineDto-update-table-error-validation.xml
=====================================
@@ -39,7 +39,7 @@
<field-validator type="fieldexpressionwithparams" short-circuit="true">
<param name="doubleParams">min:0.0|max:50.0</param>
<param name="expression">
- <![CDATA[ branchlineLength == null || (doubles.min <= branchlineLength && branchlineLength <= doubles.max)]]>
+ <![CDATA[ branchlineLength == null || (doubles.min < branchlineLength && (branchlineLength - doubles.max) * 1000 < 1)]]>
</param>
<message>
observe.validation.branchline.bound.branchlineLength##${doubles.min}##${doubles.max}
@@ -54,7 +54,7 @@
<field-validator type="fieldexpressionwithparams" short-circuit="true">
<param name="doubleParams">min:0.0|max:50.0</param>
<param name="expression">
- <![CDATA[ tracelineLength == null || (doubles.min <= tracelineLength && tracelineLength <= doubles.max)]]>
+ <![CDATA[ tracelineLength == null || (doubles.min <= tracelineLength && (tracelineLength - doubles.max) * 1000 < 1)]]>
</param>
<message>
observe.validation.branchline.bound.tracelineLength##${doubles.min}##${doubles.max}
=====================================
validation/src/main/resources/fr/ird/observe/dto/data/longline/SetLonglineDto-create-error-validation.xml
=====================================
@@ -113,11 +113,8 @@
<!-- 0.0 <= swivelWeight <= 0.2 -->
<field-validator type="fieldexpressionwithparams" short-circuit="true">
- <param name="doubleParams">min:0.0|max:0.2001</param>
- <param name="expression"><![CDATA[
- swivelWeight == null || (doubles.min < swivelWeight && swivelWeight <= doubles.max)
- ]]>
- </param>
+ <param name="doubleParams">min:0.0|max:0.2</param>
+ <param name="expression"><![CDATA[ !weightedSwivel || swivelWeight == null || (doubles.min < swivelWeight && (swivelWeight - doubles.max) * 1000 < 1)]]></param>
<message>
observe.validation.setLongline.bound.swivelWeight##${doubles.min}##${doubles.max}
</message>
@@ -129,11 +126,8 @@
<!-- 0.0 <= snapWeight <= 0.2 -->
<field-validator type="fieldexpressionwithparams" short-circuit="true">
- <param name="doubleParams">min:0.0|max:0.2001</param>
- <param name="expression"><![CDATA[
- snapWeight == null || (doubles.min < snapWeight && snapWeight <= doubles.max)
- ]]>
- </param>
+ <param name="doubleParams">min:0.0|max:0.2</param>
+ <param name="expression"><![CDATA[ !weightedSnap || snapWeight == null || (doubles.min < snapWeight && (snapWeight - doubles.max) * 1000 < 1)]]></param>
<message>
observe.validation.setLongline.bound.snapWeight##${doubles.min}##${doubles.max}
</message>
=====================================
validation/src/main/resources/fr/ird/observe/dto/data/longline/SetLonglineDto-update-error-validation.xml
=====================================
@@ -147,11 +147,8 @@
<!-- 0.0 <= swivelWeight <= 0.2 -->
<field-validator type="fieldexpressionwithparams" short-circuit="true">
- <param name="doubleParams">min:0.0|max:0.20001</param>
- <param name="expression"><![CDATA[
- swivelWeight == null || (doubles.min < swivelWeight && swivelWeight <= doubles.max)
- ]]>
- </param>
+ <param name="doubleParams">min:0.0|max:0.2</param>
+ <param name="expression"><![CDATA[ !weightedSwivel || swivelWeight == null || (doubles.min < swivelWeight && (swivelWeight - doubles.max) * 1000 < 1)]]></param>
<message>
observe.validation.setLongline.bound.swivelWeight##${doubles.min}##${doubles.max}
</message>
@@ -163,11 +160,8 @@
<!-- 0.0 <= snapWeight <= 0.2 -->
<field-validator type="fieldexpressionwithparams" short-circuit="true">
- <param name="doubleParams">min:0.0|max:0.200001</param>
- <param name="expression"><![CDATA[
- snapWeight == null || (doubles.min < snapWeight && snapWeight <= doubles.max)
- ]]>
- </param>
+ <param name="doubleParams">min:0.0|max:0.2</param>
+ <param name="expression"><![CDATA[ !weightedSnap || snapWeight == null || (doubles.min < snapWeight && (snapWeight - doubles.max) * 1000 < 1)]]></param>
<message>
observe.validation.setLongline.bound.snapWeight##${doubles.min}##${doubles.max}
</message>
=====================================
validation/src/main/resources/i18n/validation_en_GB.properties
=====================================
@@ -44,6 +44,8 @@ observe.common.BranchlineDto.branchlineLength=Branchline length
observe.common.BranchlineDto.hookSize=Hook size
observe.common.BranchlineDto.hookType=Hook type
observe.common.BranchlineDto.settingIdentifier=Setting
+observe.common.BranchlineDto.snapWeight=Snap weight (kg)
+observe.common.BranchlineDto.swivelWeight=Swivel weight (kg)
observe.common.BranchlineDto.topType=Top part type
observe.common.BranchlineDto.tracelineLength=Traceline length
observe.common.BranchlineDto.tracelineType=Traceline type
=====================================
validation/src/main/resources/i18n/validation_es_ES.properties
=====================================
@@ -44,6 +44,8 @@ observe.common.BranchlineDto.branchlineLength=Arponcillo (m)
observe.common.BranchlineDto.hookSize=Tamaño del anzuelo
observe.common.BranchlineDto.hookType=Tipo de anzuelo
observe.common.BranchlineDto.settingIdentifier=Calada
+observe.common.BranchlineDto.snapWeight=Peso snap (kg)
+observe.common.BranchlineDto.swivelWeight=Peso de el destorcedor (kg)
observe.common.BranchlineDto.topType=Tipo parte superior
observe.common.BranchlineDto.tracelineLength=Parte baja (m)
observe.common.BranchlineDto.tracelineType=Tipo bajo de línea
@@ -457,7 +459,7 @@ observe.validation.lengthFormula.endDate.before.startDate=End date must be after
observe.validation.lengthLengthParameter.disabled.inputSizeMeasureType=Le type de mensuration d'entrée sélectionné est désactivé. \#TODO
observe.validation.lengthLengthParameter.invalid.inputOutputFormula=La formule n'est pas valide. \#TODO
observe.validation.lengthLengthParameter.invalid.outputInputFormula=La formule n'est pas valide. \#TODO
-observe.validation.lengthLengthParameter.invalid.uniqueKey=Tupla (especiesexo/océano/input size measure/ output size measure/startDate) debe ser única, la tupla ya se ha usado. #TODO
+observe.validation.lengthLengthParameter.invalid.uniqueKey=Tupla (especiesexo/océano/input size measure/ output size measure/startDate) debe ser única, la tupla ya se ha usado. \#TODO
observe.validation.lengthLengthParameter.null.inputSizeMeasureType=Le type de mensuration d'entrée n'est pas renseigné. \#TODO
observe.validation.lengthLengthParameter.null.ocean=No se ha seleccionado oceano.
observe.validation.lengthLengthParameter.null.outputSizeMeasureType=Le type de mensuration de sortie n'est pas renseigné. \#TODO
@@ -470,7 +472,7 @@ observe.validation.lengthLengthParameter.required.species=Especie no especificad
observe.validation.lengthLengthParameter.required.startDate=fecha de comienzo de validez no especificada.
observe.validation.lengthWeightParameter.disabled.sizeMeasureType=Le type de mensuration sélectionné est désactivé. \#TODO
observe.validation.lengthWeightParameter.invalid.lengthWeightFormula=Relación de peso introducida no es coherente.
-observe.validation.lengthWeightParameter.invalid.uniqueKey=Tupla (especie/sexo/océano/sizeMeasureType/startDate) debe ser única, la tupla ya se ha usado. #TODO
+observe.validation.lengthWeightParameter.invalid.uniqueKey=Tupla (especie/sexo/océano/sizeMeasureType/startDate) debe ser única, la tupla ya se ha usado. \#TODO
observe.validation.lengthWeightParameter.invalid.weightLengthFormula=Relación de talla introducida no es coherente.
observe.validation.lengthWeightParameter.null.ocean=No se ha seleccionado oceano.
observe.validation.lengthWeightParameter.null.sizeMeasureType=Type de mensuration non renseigné. \#TODO
=====================================
validation/src/main/resources/i18n/validation_fr_FR.properties
=====================================
@@ -44,6 +44,8 @@ observe.common.BranchlineDto.branchlineLength=Longueur Avançon (m)
observe.common.BranchlineDto.hookSize=Taille d'hameçon
observe.common.BranchlineDto.hookType=Type d'hameçon
observe.common.BranchlineDto.settingIdentifier=Filage
+observe.common.BranchlineDto.snapWeight=Poids snap (kg)
+observe.common.BranchlineDto.swivelWeight=Poids de l'émerillon (kg)
observe.common.BranchlineDto.topType=Type partie supérieure
observe.common.BranchlineDto.tracelineLength=Partie basse (m)
observe.common.BranchlineDto.tracelineType=Type bas de ligne
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/91f26bf075775a04ce7e4836b1d…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/91f26bf075775a04ce7e4836b1d…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop-7.x] [LL] Plus de validation sur snap et émerillon - Closes #1028
by Tony CHEMIT 10 Jul '18
by Tony CHEMIT 10 Jul '18
10 Jul '18
Tony CHEMIT pushed to branch develop-7.x at ultreiaio / ird-observe
Commits:
88d65a50 by Tony CHEMIT at 2018-07-10T12:39:49Z
[LL] Plus de validation sur snap et émerillon - Closes #1028
- - - - -
10 changed files:
- client/src/main/resources/i18n/client_en_GB.properties
- client/src/main/resources/i18n/client_es_ES.properties
- client/src/main/resources/i18n/client_fr_FR.properties
- validation/src/main/resources/fr/ird/observe/dto/data/longline/BranchlineDto-update-error-validation.xml
- validation/src/main/resources/fr/ird/observe/dto/data/longline/BranchlineDto-update-table-error-validation.xml
- validation/src/main/resources/fr/ird/observe/dto/data/longline/SetLonglineDto-create-error-validation.xml
- validation/src/main/resources/fr/ird/observe/dto/data/longline/SetLonglineDto-update-error-validation.xml
- validation/src/main/resources/i18n/validation_en_GB.properties
- validation/src/main/resources/i18n/validation_es_ES.properties
- validation/src/main/resources/i18n/validation_fr_FR.properties
Changes:
=====================================
client/src/main/resources/i18n/client_en_GB.properties
=====================================
@@ -410,8 +410,6 @@ observe.common.BranchlineDto.hookLost=Hook lost
observe.common.BranchlineDto.hookOffset=Hook offset
observe.common.BranchlineDto.message.modified=Branchline was modified and is valid.
observe.common.BranchlineDto.message.modified.but.invalid=Branchline was modified but is not valid.
-observe.common.BranchlineDto.snapWeight=Snap weight (kg)
-observe.common.BranchlineDto.swivelWeight=Swivel weight (kg)
observe.common.BranchlineDto.timeSinceContact=Time since contact
observe.common.BranchlineDto.timer=Timer
observe.common.BranchlineDto.timerTimeOnBoard=Time on board
=====================================
client/src/main/resources/i18n/client_es_ES.properties
=====================================
@@ -410,8 +410,6 @@ observe.common.BranchlineDto.hookLost=Anzuelo erdido
observe.common.BranchlineDto.hookOffset=Offset anzuelo (°)
observe.common.BranchlineDto.message.modified=El arponcillo que se está modificando actualmente ha sido modificado y es valido.
observe.common.BranchlineDto.message.modified.but.invalid=El arponcillo que se está modificando actualmente ha sido modificado, pero no es valido.
-observe.common.BranchlineDto.snapWeight=Peso snap (kg)
-observe.common.BranchlineDto.swivelWeight=Peso destorcedor (kg)
observe.common.BranchlineDto.timeSinceContact=Tiempo desde el estallido
observe.common.BranchlineDto.timer=Reloj
observe.common.BranchlineDto.timerTimeOnBoard=Timestamp de subida a bordo
=====================================
client/src/main/resources/i18n/client_fr_FR.properties
=====================================
@@ -410,8 +410,6 @@ observe.common.BranchlineDto.hookLost=Hameçon perdu
observe.common.BranchlineDto.hookOffset=Offset hameçon (°)
observe.common.BranchlineDto.message.modified=L'avançon en cours d'édition a été modifié et est valide.
observe.common.BranchlineDto.message.modified.but.invalid=L'avançon en cours d'édition a été modifié, mais n'est pas valide.
-observe.common.BranchlineDto.snapWeight=Poids snap (kg)
-observe.common.BranchlineDto.swivelWeight=Poids émerillon (kg)
observe.common.BranchlineDto.timeSinceContact=Temps depuis déclenchement
observe.common.BranchlineDto.timer=Horloge
observe.common.BranchlineDto.timerTimeOnBoard=Horodatage de montée à bord
=====================================
validation/src/main/resources/fr/ird/observe/dto/data/longline/BranchlineDto-update-error-validation.xml
=====================================
@@ -108,4 +108,30 @@
</field>
+ <field name="swivelWeight">
+
+ <!-- 0.0 <= swivelWeight <= 0.2 -->
+ <field-validator type="fieldexpressionwithparams" short-circuit="true">
+ <param name="doubleParams">min:0.0|max:0.2</param>
+ <param name="expression"><![CDATA[ !weightedSwivel || swivelWeight == null || (doubles.min < swivelWeight && (swivelWeight - doubles.max) * 1000 < 1)]]></param>
+ <message>
+ observe.validation.setLongline.bound.swivelWeight##${doubles.min}##${doubles.max}
+ </message>
+ </field-validator>
+
+ </field>
+
+ <field name="snapWeight">
+
+ <!-- 0.0 <= snapWeight <= 0.2 -->
+ <field-validator type="fieldexpressionwithparams" short-circuit="true">
+ <param name="doubleParams">min:0.0|max:0.2</param>
+ <param name="expression"><![CDATA[ !weightedSnap || snapWeight == null || (doubles.min < snapWeight && (snapWeight - doubles.max) * 1000 < 1)]]></param>
+ <message>
+ observe.validation.setLongline.bound.snapWeight##${doubles.min}##${doubles.max}
+ </message>
+ </field-validator>
+
+ </field>
+
</validators>
=====================================
validation/src/main/resources/fr/ird/observe/dto/data/longline/BranchlineDto-update-table-error-validation.xml
=====================================
@@ -39,7 +39,7 @@
<field-validator type="fieldexpressionwithparams" short-circuit="true">
<param name="doubleParams">min:0.0|max:50.0</param>
<param name="expression">
- <![CDATA[ branchlineLength == null || (doubles.min <= branchlineLength && branchlineLength <= doubles.max)]]>
+ <![CDATA[ branchlineLength == null || (doubles.min < branchlineLength && (branchlineLength - doubles.max) * 1000 < 1)]]>
</param>
<message>
observe.validation.branchline.bound.branchlineLength##${doubles.min}##${doubles.max}
@@ -54,7 +54,7 @@
<field-validator type="fieldexpressionwithparams" short-circuit="true">
<param name="doubleParams">min:0.0|max:50.0</param>
<param name="expression">
- <![CDATA[ tracelineLength == null || (doubles.min <= tracelineLength && tracelineLength <= doubles.max)]]>
+ <![CDATA[ tracelineLength == null || (doubles.min <= tracelineLength && (tracelineLength - doubles.max) * 1000 < 1)]]>
</param>
<message>
observe.validation.branchline.bound.tracelineLength##${doubles.min}##${doubles.max}
=====================================
validation/src/main/resources/fr/ird/observe/dto/data/longline/SetLonglineDto-create-error-validation.xml
=====================================
@@ -113,11 +113,8 @@
<!-- 0.0 <= swivelWeight <= 0.2 -->
<field-validator type="fieldexpressionwithparams" short-circuit="true">
- <param name="doubleParams">min:0.0|max:0.2001</param>
- <param name="expression"><![CDATA[
- swivelWeight == null || (doubles.min < swivelWeight && swivelWeight <= doubles.max)
- ]]>
- </param>
+ <param name="doubleParams">min:0.0|max:0.2</param>
+ <param name="expression"><![CDATA[ !weightedSwivel || swivelWeight == null || (doubles.min < swivelWeight && (swivelWeight - doubles.max) * 1000 < 1)]]></param>
<message>
observe.validation.setLongline.bound.swivelWeight##${doubles.min}##${doubles.max}
</message>
@@ -129,11 +126,8 @@
<!-- 0.0 <= snapWeight <= 0.2 -->
<field-validator type="fieldexpressionwithparams" short-circuit="true">
- <param name="doubleParams">min:0.0|max:0.2001</param>
- <param name="expression"><![CDATA[
- snapWeight == null || (doubles.min < snapWeight && snapWeight <= doubles.max)
- ]]>
- </param>
+ <param name="doubleParams">min:0.0|max:0.2</param>
+ <param name="expression"><![CDATA[ !weightedSnap || snapWeight == null || (doubles.min < snapWeight && (snapWeight - doubles.max) * 1000 < 1)]]></param>
<message>
observe.validation.setLongline.bound.snapWeight##${doubles.min}##${doubles.max}
</message>
=====================================
validation/src/main/resources/fr/ird/observe/dto/data/longline/SetLonglineDto-update-error-validation.xml
=====================================
@@ -147,11 +147,8 @@
<!-- 0.0 <= swivelWeight <= 0.2 -->
<field-validator type="fieldexpressionwithparams" short-circuit="true">
- <param name="doubleParams">min:0.0|max:0.20001</param>
- <param name="expression"><![CDATA[
- swivelWeight == null || (doubles.min < swivelWeight && swivelWeight <= doubles.max)
- ]]>
- </param>
+ <param name="doubleParams">min:0.0|max:0.2</param>
+ <param name="expression"><![CDATA[ !weightedSwivel || swivelWeight == null || (doubles.min < swivelWeight && (swivelWeight - doubles.max) * 1000 < 1)]]></param>
<message>
observe.validation.setLongline.bound.swivelWeight##${doubles.min}##${doubles.max}
</message>
@@ -163,11 +160,8 @@
<!-- 0.0 <= snapWeight <= 0.2 -->
<field-validator type="fieldexpressionwithparams" short-circuit="true">
- <param name="doubleParams">min:0.0|max:0.200001</param>
- <param name="expression"><![CDATA[
- snapWeight == null || (doubles.min < snapWeight && snapWeight <= doubles.max)
- ]]>
- </param>
+ <param name="doubleParams">min:0.0|max:0.2</param>
+ <param name="expression"><![CDATA[ !weightedSnap || snapWeight == null || (doubles.min < snapWeight && (snapWeight - doubles.max) * 1000 < 1)]]></param>
<message>
observe.validation.setLongline.bound.snapWeight##${doubles.min}##${doubles.max}
</message>
=====================================
validation/src/main/resources/i18n/validation_en_GB.properties
=====================================
@@ -44,6 +44,8 @@ observe.common.BranchlineDto.branchlineLength=Branchline length
observe.common.BranchlineDto.hookSize=Hook size
observe.common.BranchlineDto.hookType=Hook type
observe.common.BranchlineDto.settingIdentifier=Setting
+observe.common.BranchlineDto.snapWeight=Snap weight (kg)
+observe.common.BranchlineDto.swivelWeight=Swivel weight (kg)
observe.common.BranchlineDto.topType=Top part type
observe.common.BranchlineDto.tracelineLength=Traceline length
observe.common.BranchlineDto.tracelineType=Traceline type
=====================================
validation/src/main/resources/i18n/validation_es_ES.properties
=====================================
@@ -44,6 +44,8 @@ observe.common.BranchlineDto.branchlineLength=Arponcillo (m)
observe.common.BranchlineDto.hookSize=Tamaño del anzuelo
observe.common.BranchlineDto.hookType=Tipo de anzuelo
observe.common.BranchlineDto.settingIdentifier=Calada
+observe.common.BranchlineDto.snapWeight=Peso snap (kg)
+observe.common.BranchlineDto.swivelWeight=Peso de el destorcedor (kg)
observe.common.BranchlineDto.topType=Tipo parte superior
observe.common.BranchlineDto.tracelineLength=Parte baja (m)
observe.common.BranchlineDto.tracelineType=Tipo bajo de línea
@@ -457,7 +459,7 @@ observe.validation.lengthFormula.endDate.before.startDate=End date must be after
observe.validation.lengthLengthParameter.disabled.inputSizeMeasureType=Le type de mensuration d'entrée sélectionné est désactivé. \#TODO
observe.validation.lengthLengthParameter.invalid.inputOutputFormula=La formule n'est pas valide. \#TODO
observe.validation.lengthLengthParameter.invalid.outputInputFormula=La formule n'est pas valide. \#TODO
-observe.validation.lengthLengthParameter.invalid.uniqueKey=Tupla (especiesexo/océano/input size measure/ output size measure/startDate) debe ser única, la tupla ya se ha usado. #TODO
+observe.validation.lengthLengthParameter.invalid.uniqueKey=Tupla (especiesexo/océano/input size measure/ output size measure/startDate) debe ser única, la tupla ya se ha usado. \#TODO
observe.validation.lengthLengthParameter.null.inputSizeMeasureType=Le type de mensuration d'entrée n'est pas renseigné. \#TODO
observe.validation.lengthLengthParameter.null.ocean=No se ha seleccionado oceano.
observe.validation.lengthLengthParameter.null.outputSizeMeasureType=Le type de mensuration de sortie n'est pas renseigné. \#TODO
@@ -470,7 +472,7 @@ observe.validation.lengthLengthParameter.required.species=Especie no especificad
observe.validation.lengthLengthParameter.required.startDate=fecha de comienzo de validez no especificada.
observe.validation.lengthWeightParameter.disabled.sizeMeasureType=Le type de mensuration sélectionné est désactivé. \#TODO
observe.validation.lengthWeightParameter.invalid.lengthWeightFormula=Relación de peso introducida no es coherente.
-observe.validation.lengthWeightParameter.invalid.uniqueKey=Tupla (especie/sexo/océano/sizeMeasureType/startDate) debe ser única, la tupla ya se ha usado. #TODO
+observe.validation.lengthWeightParameter.invalid.uniqueKey=Tupla (especie/sexo/océano/sizeMeasureType/startDate) debe ser única, la tupla ya se ha usado. \#TODO
observe.validation.lengthWeightParameter.invalid.weightLengthFormula=Relación de talla introducida no es coherente.
observe.validation.lengthWeightParameter.null.ocean=No se ha seleccionado oceano.
observe.validation.lengthWeightParameter.null.sizeMeasureType=Type de mensuration non renseigné. \#TODO
=====================================
validation/src/main/resources/i18n/validation_fr_FR.properties
=====================================
@@ -44,6 +44,8 @@ observe.common.BranchlineDto.branchlineLength=Longueur Avançon (m)
observe.common.BranchlineDto.hookSize=Taille d'hameçon
observe.common.BranchlineDto.hookType=Type d'hameçon
observe.common.BranchlineDto.settingIdentifier=Filage
+observe.common.BranchlineDto.snapWeight=Poids snap (kg)
+observe.common.BranchlineDto.swivelWeight=Poids de l'émerillon (kg)
observe.common.BranchlineDto.topType=Type partie supérieure
observe.common.BranchlineDto.tracelineLength=Partie basse (m)
observe.common.BranchlineDto.tracelineType=Type bas de ligne
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/88d65a5006f501d9cad40e4eaaa…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/88d65a5006f501d9cad40e4eaaa…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop-7.x] Revoir la clé d'unicité sur le référentiel taille-taille - Closes #992
by Tony CHEMIT 10 Jul '18
by Tony CHEMIT 10 Jul '18
10 Jul '18
Tony CHEMIT pushed to branch develop-7.x at ultreiaio / ird-observe
Commits:
4575713f by Tony CHEMIT at 2018-07-10T10:40:21Z
Revoir la clé d'unicité sur le référentiel taille-taille - Closes #992
- - - - -
15 changed files:
- + dto/src/main/java/fr/ird/observe/dto/referential/LengthLengthParameterReference.java
- + dto/src/main/java/fr/ird/observe/dto/referential/LengthWeightParameterReference.java
- dto/src/main/java/fr/ird/observe/dto/referential/WithLengthFormula.java
- + dto/src/main/java/fr/ird/observe/dto/referential/WithStartEndDate.java
- persistence/src/main/java/fr/ird/observe/entities/referentiel/AbstractFormulaSupportTopiaDao.java
- services/src/main/java/fr/ird/observe/services/validation/ValidationContext.java
- services/src/main/java/fr/ird/observe/services/validation/validators/ObserveReferentialCollectionUniqueKeyDtoValidator.java → services/src/main/java/fr/ird/observe/services/validation/validators/ObserveLengthFormulaCollectionUniqueKeyDtoValidator.java
- validation/src/main/resources/fr/ird/observe/dto/referential/LengthLengthParameterDto-create-error-validation.xml
- validation/src/main/resources/fr/ird/observe/dto/referential/LengthLengthParameterDto-update-error-validation.xml
- validation/src/main/resources/fr/ird/observe/dto/referential/LengthWeightParameterDto-create-error-validation.xml
- validation/src/main/resources/fr/ird/observe/dto/referential/LengthWeightParameterDto-update-error-validation.xml
- validation/src/main/resources/i18n/validation_en_GB.properties
- validation/src/main/resources/i18n/validation_es_ES.properties
- validation/src/main/resources/i18n/validation_fr_FR.properties
- validation/src/main/resources/validators.xml
Changes:
=====================================
dto/src/main/java/fr/ird/observe/dto/referential/LengthLengthParameterReference.java
=====================================
@@ -0,0 +1,35 @@
+package fr.ird.observe.dto.referential;
+
+/*-
+ * #%L
+ * ObServe :: Dto
+ * %%
+ * Copyright (C) 2008 - 2018 IRD, Code Lutin, Ultreia.io
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
+
+import fr.ird.observe.dto.reference.ReferentialDtoReferenceAware;
+
+import java.util.Date;
+
+public class LengthLengthParameterReference extends GeneratedLengthLengthParameterReference implements WithStartEndDate {
+
+ public LengthLengthParameterReference(ReferentialDtoReferenceAware dto, String oceanLabel, String speciesLabel, String sexLabel, Date startDate, Date endDate, String inputSizeMeasureTypeCode, String inputSizeMeasureTypeLabel, String outputSizeMeasureTypeCode, String outputSizeMeasureTypeLabel, String inputOutputFormula, String outputInputFormula) {
+ super(dto, oceanLabel, speciesLabel, sexLabel, startDate, endDate, inputSizeMeasureTypeCode, inputSizeMeasureTypeLabel, outputSizeMeasureTypeCode, outputSizeMeasureTypeLabel, inputOutputFormula, outputInputFormula);
+ }
+
+}
=====================================
dto/src/main/java/fr/ird/observe/dto/referential/LengthWeightParameterReference.java
=====================================
@@ -0,0 +1,35 @@
+package fr.ird.observe.dto.referential;
+
+/*-
+ * #%L
+ * ObServe :: Dto
+ * %%
+ * Copyright (C) 2008 - 2018 IRD, Code Lutin, Ultreia.io
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
+
+import fr.ird.observe.dto.reference.ReferentialDtoReferenceAware;
+
+import java.util.Date;
+
+public class LengthWeightParameterReference extends GeneratedLengthWeightParameterReference implements WithStartEndDate {
+
+ public LengthWeightParameterReference(ReferentialDtoReferenceAware dto, String oceanLabel, String speciesLabel, String sexLabel, Date startDate, Date endDate, String lengthWeightFormula, String weightLengthFormula, String sizeMeasureTypeCode) {
+ super(dto, oceanLabel, speciesLabel, sexLabel, startDate, endDate, lengthWeightFormula, weightLengthFormula, sizeMeasureTypeCode);
+}
+
+}
=====================================
dto/src/main/java/fr/ird/observe/dto/referential/WithLengthFormula.java
=====================================
@@ -22,14 +22,10 @@ package fr.ird.observe.dto.referential;
* #L%
*/
-import com.google.common.collect.Ordering;
-import org.apache.commons.lang3.BooleanUtils;
-
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.Set;
-import java.util.stream.Collectors;
/**
* Created on 22/12/16.
@@ -37,7 +33,7 @@ import java.util.stream.Collectors;
* @author Tony Chemit - dev(a)tchemit.fr
* @since 6.0
*/
-public interface WithLengthFormula extends WithFormula {
+public interface WithLengthFormula extends WithFormula, WithStartEndDate {
String PROPERTY_OCEAN = "ocean";
String PROPERTY_SPECIES = "species";
@@ -47,32 +43,26 @@ public interface WithLengthFormula extends WithFormula {
String PROPERTY_COEFFICIENTS = "coefficients";
String PROPERTY_SOURCE = "source";
- Comparator<Date> START_DATE_COMPARATOR = Ordering.natural().nullsFirst();
- Comparator<Date> END_DATE_COMPARATOR = Ordering.natural().nullsLast();
- Comparator<WithLengthFormula> FORMULA_SUPPORT_START_DATE_COMPARATOR = Comparator.comparing(WithLengthFormula::getStartDate, WithLengthFormula.START_DATE_COMPARATOR);
- Comparator<WithLengthFormula> FORMULA_SUPPORT_END_DATE_COMPARATOR = Comparator.comparing(WithLengthFormula::getEndDate, WithLengthFormula.END_DATE_COMPARATOR);
+ Comparator<WithLengthFormula> FORMULA_SUPPORT_START_DATE_COMPARATOR = Comparator.comparing(WithStartEndDate::getStartDate, WithStartEndDate.START_DATE_COMPARATOR);
+ Comparator<WithLengthFormula> FORMULA_SUPPORT_END_DATE_COMPARATOR = Comparator.comparing(WithStartEndDate::getEndDate, WithStartEndDate.END_DATE_COMPARATOR);
Comparator<WithLengthFormula> FORMULA_SUPPORT_COMPARATOR = FORMULA_SUPPORT_START_DATE_COMPARATOR.thenComparing(FORMULA_SUPPORT_END_DATE_COMPARATOR);
static <D extends WithLengthFormula> void sort(List<D> list) {
list.sort(FORMULA_SUPPORT_COMPARATOR);
}
- static <D extends WithLengthFormula> List<D> filter(List<D> list, Date date) {
- return list.stream()
- .filter(f -> WithLengthFormula.START_DATE_COMPARATOR.compare(f.getStartDate(), date) <= 0 && WithLengthFormula.END_DATE_COMPARATOR.compare(date, f.getEndDate()) <= 0)
- .collect(Collectors.toList());
- }
+// static <D extends WithStartEndDate> List<D> filter(List<D> list, Date date) {
+// return list.stream()
+// .filter(f -> WithStartEndDate.START_DATE_COMPARATOR.compare(f.getStartDate(), date) <= 0 && WithStartEndDate.END_DATE_COMPARATOR.compare(date, f.getEndDate()) <= 0)
+// .collect(Collectors.toList());
+// }
String getFormulaOneVariableName();
String getFormulaTwoVariableName();
- Date getStartDate();
-
void setStartDate(Date startDate);
- Date getEndDate();
-
void setEndDate(Date endDate);
void setCoefficients(String coefficients);
@@ -96,10 +86,10 @@ public interface WithLengthFormula extends WithFormula {
boolean isFormulaOneValid();
- boolean isFormulaTwoValid();
-
void setFormulaOneValid(boolean formulaOneValid);
+ boolean isFormulaTwoValid();
+
void setFormulaTwoValid(boolean formulaTwoValid);
default void revalidateFormulaTwo() {
=====================================
dto/src/main/java/fr/ird/observe/dto/referential/WithStartEndDate.java
=====================================
@@ -0,0 +1,26 @@
+package fr.ird.observe.dto.referential;
+
+import com.google.common.collect.Ordering;
+import fr.ird.observe.dto.reference.DtoReferenceAware;
+
+import java.util.Comparator;
+import java.util.Date;
+
+/**
+ * Created by tchemit on 10/07/2018.
+ *
+ * @author Tony Chemit - dev(a)tchemit.fr
+ */
+public interface WithStartEndDate extends DtoReferenceAware {
+
+ Comparator<Date> START_DATE_COMPARATOR = Ordering.natural().nullsFirst();
+ Comparator<Date> END_DATE_COMPARATOR = Ordering.natural().nullsLast();
+
+ Comparator<WithStartEndDate> WITH_START_DATE_COMPARATOR = Comparator.comparing(WithStartEndDate::getStartDate, START_DATE_COMPARATOR);
+ Comparator<WithStartEndDate> WITH_END_DATE_COMPARATOR = Comparator.comparing(WithStartEndDate::getEndDate, END_DATE_COMPARATOR);
+
+ Date getStartDate();
+
+ Date getEndDate();
+
+}
=====================================
persistence/src/main/java/fr/ird/observe/entities/referentiel/AbstractFormulaSupportTopiaDao.java
=====================================
@@ -22,7 +22,7 @@ package fr.ird.observe.entities.referentiel;
* #L%
*/
-import fr.ird.observe.dto.referential.LengthFormulaSupportDto;
+import fr.ird.observe.dto.referential.WithStartEndDate;
import java.util.Comparator;
import java.util.Date;
@@ -32,13 +32,13 @@ import java.util.stream.Stream;
public class AbstractFormulaSupportTopiaDao<E extends FormulaSupport> extends GeneratedFormulaSupportTopiaDao<E> {
- public static final Comparator<FormulaSupport> FORMULA_SUPPORT_START_DATE_COMPARATOR = Comparator.comparing(FormulaSupport::getStartDate, LengthFormulaSupportDto.START_DATE_COMPARATOR);
- public static final Comparator<FormulaSupport> FORMULA_SUPPORT_END_DATE_COMPARATOR = Comparator.comparing(FormulaSupport::getEndDate, LengthFormulaSupportDto.END_DATE_COMPARATOR);
+ public static final Comparator<FormulaSupport> FORMULA_SUPPORT_START_DATE_COMPARATOR = Comparator.comparing(FormulaSupport::getStartDate, WithStartEndDate.START_DATE_COMPARATOR);
+ public static final Comparator<FormulaSupport> FORMULA_SUPPORT_END_DATE_COMPARATOR = Comparator.comparing(FormulaSupport::getEndDate, WithStartEndDate.END_DATE_COMPARATOR);
public static final Comparator<FormulaSupport> FORMULA_SUPPORT_COMPARATOR = FORMULA_SUPPORT_START_DATE_COMPARATOR.thenComparing(FORMULA_SUPPORT_END_DATE_COMPARATOR);
public static <E extends FormulaSupport> List<E> sortAndFilter(Stream<E> list, Date date) {
return list.sorted(FORMULA_SUPPORT_COMPARATOR)
- .filter(f -> LengthFormulaSupportDto.START_DATE_COMPARATOR.compare(f.getStartDate(), date) <= 0 && LengthFormulaSupportDto.END_DATE_COMPARATOR.compare(date, f.getEndDate()) <= 0)
+ .filter(f -> WithStartEndDate.START_DATE_COMPARATOR.compare(f.getStartDate(), date) <= 0 && WithStartEndDate.END_DATE_COMPARATOR.compare(date, f.getEndDate()) <= 0)
.collect(Collectors.toList());
}
=====================================
services/src/main/java/fr/ird/observe/services/validation/ValidationContext.java
=====================================
@@ -193,6 +193,7 @@ public abstract class ValidationContext extends AbstractSerializableBean {
return validationSpeedMaxValue;
}
+ @SuppressWarnings("unused")
public Function<ReferentialDto, ReferentialDtoReference> getReferentialReferenceFunction() {
return this::toReferentialReference;
}
=====================================
services/src/main/java/fr/ird/observe/services/validation/validators/ObserveReferentialCollectionUniqueKeyDtoValidator.java → services/src/main/java/fr/ird/observe/services/validation/validators/ObserveLengthFormulaCollectionUniqueKeyDtoValidator.java
=====================================
@@ -24,18 +24,18 @@ package fr.ird.observe.services.validation.validators;
import com.opensymphony.xwork2.validator.ValidationException;
import fr.ird.observe.dto.IdDto;
-import fr.ird.observe.dto.reference.ReferentialDtoReference;
+import fr.ird.observe.dto.referential.WithStartEndDate;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.nuiton.validator.xwork2.field.NuitonFieldValidatorSupport;
import java.util.Collection;
import java.util.Collections;
-import java.util.Comparator;
import java.util.Date;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
import java.util.Objects;
-import java.util.Set;
-import java.util.TreeSet;
import java.util.function.Function;
/**
@@ -44,9 +44,10 @@ import java.util.function.Function;
* @author Tony Chemit - dev(a)tchemit.fr
* @since 4.0.1
*/
-public class ObserveReferentialCollectionUniqueKeyDtoValidator extends NuitonFieldValidatorSupport {
+public class ObserveLengthFormulaCollectionUniqueKeyDtoValidator extends NuitonFieldValidatorSupport {
+
+ private static final Log log = LogFactory.getLog(ObserveLengthFormulaCollectionUniqueKeyDtoValidator.class);
- private static final Log log = LogFactory.getLog(ObserveReferentialCollectionUniqueKeyDtoValidator.class);
/**
* pour indiquer la propriété qui contient la liste à valider.
* <p>
@@ -65,7 +66,6 @@ public class ObserveReferentialCollectionUniqueKeyDtoValidator extends NuitonFie
* clef unique.
*/
protected String[] keys;
- private Comparator<?> comparator;
public String getCollectionFieldName() {
return collectionFieldName;
@@ -103,70 +103,72 @@ public class ObserveReferentialCollectionUniqueKeyDtoValidator extends NuitonFie
throw new ValidationException("keys not defined");
}
- Collection<?> col = getCollection(object);
- if (log.isDebugEnabled()) {
- log.debug("collection found : " + col);
- }
+ Collection<? super WithStartEndDate> col = getCollection(object);
- if (log.isDebugEnabled()) {
- log.debug("againtBean = " + object);
- }
+ log.debug("collection found : " + col);
+ log.debug("againstBean = " + object);
boolean answer = true;
@SuppressWarnings("unchecked")
- Set<Object> hashCodes = new TreeSet<>((Comparator<? super Object>) getComparator());
- Function decoratorService = (Function) getFieldValue("referentialReferenceFunction", object);
- ReferentialDtoReference referentialDtoReference = (ReferentialDtoReference) decoratorService.apply(object);
- hashCodes.add(referentialDtoReference);
+ Function<Object, WithStartEndDate> decoratorService = (Function) getFieldValue("referentialReferenceFunction", object);
+ WithStartEndDate referentialDtoReference = decoratorService.apply(object);
+
+ Date startDate = referentialDtoReference.getStartDate();
+ Date endDate = referentialDtoReference.getEndDate();
String idToExclude = ((IdDto) object).getId();
- int index = -1;
+ List<WithStartEndDate> challenges = new LinkedList<>();
for (Object o : col) {
- index++;
-
String id = ((IdDto) o).getId();
if (Objects.equals(idToExclude, id)) {
-
// Do not treat again object
continue;
-
}
- boolean wasAdded = hashCodes.add(o);
- if (!wasAdded) {
- answer = false;
- if (log.isDebugEnabled()) {
- log.debug("duplicated unique entry at " + index);
- }
+ if (equals(referentialDtoReference, o)) {
+ // same common key
+ challenges.add((WithStartEndDate) o);
break;
}
+ }
+ if (challenges.isEmpty()) {
+ // no other entries with same common key
+ return;
}
- if (!answer) {
+ Iterator<WithStartEndDate> iterator = challenges.iterator();
+ while (answer && iterator.hasNext()) {
+ WithStartEndDate challenge = iterator.next();
+ Date challengeStartDate = challenge.getStartDate();
+ Date challengeEndDate = challenge.getEndDate();
+ int min = WithStartEndDate.START_DATE_COMPARATOR.compare(startDate, challengeStartDate);
+ if (min == 0) {
+ // same lower bound
+ answer = false;
+ continue;
+ }
+ if (min < 0) {
+ // only valid if check upper bound is lower than chanllenge min bound
+ answer = WithStartEndDate.END_DATE_COMPARATOR.compare(endDate, challengeStartDate) < 0;
+ continue;
+ }
+ // check min is after challenge min
+ answer = WithStartEndDate.END_DATE_COMPARATOR.compare(startDate, challengeEndDate) > 0;
+ }
+
+ if (!answer) {
String fieldName = getFieldName();
addFieldError(fieldName, object);
-
}
}
- @Override
- public String getValidatorType() {
- return "observeReferentialCollectionUniqueKeyDto";
- }
- private Comparator<?> getComparator() {
- if (comparator == null) {
- comparator = new MyComparator<>(keys);
- }
- return comparator;
- }
-
- private Object getPropertyValue(String key, Object o) {
+ Object getPropertyValue(String key, Object o) {
Object result;
@@ -193,7 +195,7 @@ public class ObserveReferentialCollectionUniqueKeyDtoValidator extends NuitonFie
* property
* @throws ValidationException if any pb to retreave the collection
*/
- private Collection<?> getCollection(Object object) throws ValidationException {
+ Collection<? super WithStartEndDate> getCollection(Object object) throws ValidationException {
String fieldName = getCollectionFieldName();
@@ -227,53 +229,38 @@ public class ObserveReferentialCollectionUniqueKeyDtoValidator extends NuitonFie
}
- return (Collection<?>) obj;
+ return (Collection) obj;
}
- @SuppressWarnings("ComparatorNotSerializable")
- private class MyComparator<O> implements Comparator<O> {
-
- private final String[] comparatorKeys;
-
- MyComparator(String... comparatorKeys) {
-
- this.comparatorKeys = comparatorKeys;
- }
-
- @Override
- public int compare(O o1, O o2) {
-
- boolean equals = true;
- for (String key : comparatorKeys) {
+ protected boolean equals(Object o1, Object o2) {
+ boolean equals = true;
- Object property1 = getPropertyValue(key, o1);
- Object property2 = getPropertyValue(key, o2);
+ for (String key : keys) {
- equals = equals(property1, property2);
+ Object property1 = getPropertyValue(key, o1);
+ Object property2 = getPropertyValue(key, o2);
- if (!equals) {
- break;
- }
+ if (property1 instanceof Date) {
+ property1 = ((Date) property1).getTime();
}
-
- return equals ? 0 : -1;
- }
-
- protected boolean equals(Object o1, Object o2) {
-
- if (o1 instanceof Date) {
- o1 = ((Date) o1).getTime();
- }
- if (o2 instanceof Date) {
- o2 = ((Date) o2).getTime();
+ if (property2 instanceof Date) {
+ property2 = ((Date) property2).getTime();
}
- return Objects.equals(o1, o2);
+ equals = Objects.equals(property1, property2);
+ if (!equals) {
+ break;
+ }
}
+ return equals;
+ }
+ @Override
+ public String getValidatorType() {
+ return "observeLengthFormulaCollectionUniqueKeyDto";
}
}
=====================================
validation/src/main/resources/fr/ird/observe/dto/referential/LengthLengthParameterDto-create-error-validation.xml
=====================================
@@ -32,10 +32,10 @@
<message>observe.validation.lengthLengthParameter.required.species</message>
</field-validator>
- <!-- clef unique species - gender - ocean - startDate -->
- <field-validator type="observeReferentialCollectionUniqueKeyDto" short-circuit="true">
+ <!-- clef unique species - gender - ocean - inputSizeMeasureTypeCode - outputSizeMeasureTypeCode -->
+ <field-validator type="observeLengthFormulaCollectionUniqueKeyDto" short-circuit="true">
<param name="collectionFieldName">editingReferentielList</param>
- <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate</param>
+ <param name="keys">speciesLabel,sexLabel,oceanLabel,inputSizeMeasureTypeCode,outputSizeMeasureTypeCode</param>
<!--<param name="againstMe">true</param>-->
<message>observe.validation.lengthLengthParameter.invalid.uniqueKey</message>
</field-validator>
@@ -47,10 +47,10 @@
<message>observe.validation.lengthLengthParameter.null.ocean</message>
</field-validator>
- <!-- clef unique species - gender - ocean - startDate -->
- <field-validator type="observeReferentialCollectionUniqueKeyDto" short-circuit="true">
+ <!-- clef unique species - gender - ocean - inputSizeMeasureTypeCode - outputSizeMeasureTypeCode -->
+ <field-validator type="observeLengthFormulaCollectionUniqueKeyDto" short-circuit="true">
<param name="collectionFieldName">editingReferentielList</param>
- <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate</param>
+ <param name="keys">speciesLabel,sexLabel,oceanLabel,inputSizeMeasureTypeCode,outputSizeMeasureTypeCode</param>
<!--<param name="againstMe">true</param>-->
<message>observe.validation.lengthLengthParameter.invalid.uniqueKey</message>
</field-validator>
@@ -62,25 +62,38 @@
<message>observe.validation.lengthLengthParameter.null.sex</message>
</field-validator>
- <!-- clef unique species - gender - ocean - startDate -->
- <field-validator type="observeReferentialCollectionUniqueKeyDto" short-circuit="true">
+ <!-- clef unique species - gender - ocean - inputSizeMeasureTypeCode - outputSizeMeasureTypeCode -->
+ <field-validator type="observeLengthFormulaCollectionUniqueKeyDto" short-circuit="true">
<param name="collectionFieldName">editingReferentielList</param>
- <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate</param>
+ <param name="keys">speciesLabel,sexLabel,oceanLabel,inputSizeMeasureTypeCode,outputSizeMeasureTypeCode</param>
<!--<param name="againstMe">true</param>-->
<message>observe.validation.lengthLengthParameter.invalid.uniqueKey</message>
</field-validator>
</field>
<field name="startDate">
- <!-- clef unique species - gender - ocean - startDate -->
- <field-validator type="observeReferentialCollectionUniqueKeyDto" short-circuit="true">
+ <field-validator type="fieldexpression" short-circuit="true">
+ <param name="expression">
+ <![CDATA[ endDate == null || startDate == null || endDate.after(startDate) ]]>
+ </param>
+ <message>observe.validation.lengthFormula.endDate.before.startDate</message>
+ </field-validator>
+ <!-- clef unique species - gender - ocean - inputSizeMeasureTypeCode - outputSizeMeasureTypeCode -->
+ <field-validator type="observeLengthFormulaCollectionUniqueKeyDto" short-circuit="true">
<param name="collectionFieldName">editingReferentielList</param>
- <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate</param>
+ <param name="keys">speciesLabel,sexLabel,oceanLabel,inputSizeMeasureTypeCode,outputSizeMeasureTypeCode</param>
<!--<param name="againstMe">true</param>-->
<message>observe.validation.lengthLengthParameter.invalid.uniqueKey</message>
</field-validator>
</field>
-
+ <field name="endDate">
+ <field-validator type="fieldexpression">
+ <param name="expression">
+ <![CDATA[ endDate == null || startDate == null || endDate.after(startDate) ]]>
+ </param>
+ <message>observe.validation.lengthFormula.endDate.before.startDate</message>
+ </field-validator>
+ </field>
<field name="inputSizeMeasureType">
<!-- pas de inputSizeMeasureType selectionne -->
@@ -95,6 +108,14 @@
</param>
<message>observe.validation.lengthLengthParameter.disabled.inputSizeMeasureType</message>
</field-validator>
+
+ <!-- clef unique species - gender - ocean - inputSizeMeasureTypeCode - outputSizeMeasureTypeCode -->
+ <field-validator type="observeLengthFormulaCollectionUniqueKeyDto" short-circuit="true">
+ <param name="collectionFieldName">editingReferentielList</param>
+ <param name="keys">speciesLabel,sexLabel,oceanLabel,inputSizeMeasureTypeCode,outputSizeMeasureTypeCode</param>
+ <!--<param name="againstMe">true</param>-->
+ <message>observe.validation.lengthLengthParameter.invalid.uniqueKey</message>
+ </field-validator>
</field>
@@ -112,6 +133,14 @@
</param>
<message>observe.validation.lengthLengthParameter.disabled.inputSizeMeasureType</message>
</field-validator>
+
+ <!-- clef unique species - gender - ocean - inputSizeMeasureTypeCode - outputSizeMeasureTypeCode -->
+ <field-validator type="observeLengthFormulaCollectionUniqueKeyDto" short-circuit="true">
+ <param name="collectionFieldName">editingReferentielList</param>
+ <param name="keys">speciesLabel,sexLabel,oceanLabel,inputSizeMeasureTypeCode,outputSizeMeasureTypeCode</param>
+ <!--<param name="againstMe">true</param>-->
+ <message>observe.validation.lengthLengthParameter.invalid.uniqueKey</message>
+ </field-validator>
</field>
<field name="inputOutputFormula">
=====================================
validation/src/main/resources/fr/ird/observe/dto/referential/LengthLengthParameterDto-update-error-validation.xml
=====================================
@@ -32,10 +32,11 @@
<message>observe.validation.lengthLengthParameter.required.species</message>
</field-validator>
- <!-- clef unique species - gender - ocean - startDate -->
- <field-validator type="observeReferentialCollectionUniqueKeyDto" short-circuit="true">
+ <!-- clef unique species - gender - ocean - inputSizeMeasureTypeCode - outputSizeMeasureTypeCode -->
+ <field-validator type="observeLengthFormulaCollectionUniqueKeyDto" short-circuit="true">
<param name="collectionFieldName">editingReferentielList</param>
- <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate</param>
+ <param name="keys">speciesLabel,sexLabel,oceanLabel,inputSizeMeasureTypeCode,outputSizeMeasureTypeCode</param>
+ <!--<param name="againstMe">true</param>-->
<message>observe.validation.lengthLengthParameter.invalid.uniqueKey</message>
</field-validator>
</field>
@@ -46,12 +47,12 @@
<message>observe.validation.lengthLengthParameter.null.ocean</message>
</field-validator>
- <!-- clef unique species - gender - ocean - startDate -->
- <field-validator type="observeReferentialCollectionUniqueKeyDto" short-circuit="true">
+ <!-- clef unique species - gender - ocean - inputSizeMeasureTypeCode - outputSizeMeasureTypeCode -->
+ <field-validator type="observeLengthFormulaCollectionUniqueKeyDto" short-circuit="true">
<param name="collectionFieldName">editingReferentielList</param>
- <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate</param>
+ <param name="keys">speciesLabel,sexLabel,oceanLabel,inputSizeMeasureTypeCode,outputSizeMeasureTypeCode</param>
<!--<param name="againstMe">true</param>-->
- <message>observe.validation.lengthWeightParameter.invalid.uniqueKey</message>
+ <message>observe.validation.lengthLengthParameter.invalid.uniqueKey</message>
</field-validator>
</field>
@@ -61,24 +62,38 @@
<message>observe.validation.lengthLengthParameter.null.sex</message>
</field-validator>
- <!-- clef unique species - gender - ocean - startDate -->
- <field-validator type="observeReferentialCollectionUniqueKeyDto" short-circuit="true">
+ <!-- clef unique species - gender - ocean - inputSizeMeasureTypeCode - outputSizeMeasureTypeCode -->
+ <field-validator type="observeLengthFormulaCollectionUniqueKeyDto" short-circuit="true">
<param name="collectionFieldName">editingReferentielList</param>
- <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate</param>
+ <param name="keys">speciesLabel,sexLabel,oceanLabel,inputSizeMeasureTypeCode,outputSizeMeasureTypeCode</param>
<!--<param name="againstMe">true</param>-->
- <message>observe.validation.lengthWeightParameter.invalid.uniqueKey</message>
+ <message>observe.validation.lengthLengthParameter.invalid.uniqueKey</message>
</field-validator>
</field>
+
<field name="startDate">
- <!-- clef unique species - gender - ocean - startDate -->
- <field-validator type="observeReferentialCollectionUniqueKeyDto" short-circuit="true">
+ <field-validator type="fieldexpression" short-circuit="true">
+ <param name="expression">
+ <![CDATA[ endDate == null || startDate == null || endDate.after(startDate) ]]>
+ </param>
+ <message>observe.validation.lengthFormula.endDate.before.startDate</message>
+ </field-validator>
+ <!-- clef unique species - gender - ocean - inputSizeMeasureTypeCode - outputSizeMeasureTypeCode -->
+ <field-validator type="observeLengthFormulaCollectionUniqueKeyDto" short-circuit="true">
<param name="collectionFieldName">editingReferentielList</param>
- <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate</param>
+ <param name="keys">speciesLabel,sexLabel,oceanLabel,inputSizeMeasureTypeCode,outputSizeMeasureTypeCode</param>
<!--<param name="againstMe">true</param>-->
- <message>observe.validation.lengthWeightParameter.invalid.uniqueKey</message>
+ <message>observe.validation.lengthLengthParameter.invalid.uniqueKey</message>
+ </field-validator>
+ </field>
+ <field name="endDate">
+ <field-validator type="fieldexpression">
+ <param name="expression">
+ <![CDATA[ endDate == null || startDate == null || endDate.after(startDate) ]]>
+ </param>
+ <message>observe.validation.lengthFormula.endDate.before.startDate</message>
</field-validator>
</field>
-
<field name="inputSizeMeasureType">
<!-- pas de inputSizeMeasureType selectionne -->
@@ -93,6 +108,14 @@
</param>
<message>observe.validation.lengthLengthParameter.disabled.inputSizeMeasureType</message>
</field-validator>
+
+ <!-- clef unique species - gender - ocean - inputSizeMeasureTypeCode - outputSizeMeasureTypeCode -->
+ <field-validator type="observeLengthFormulaCollectionUniqueKeyDto" short-circuit="true">
+ <param name="collectionFieldName">editingReferentielList</param>
+ <param name="keys">speciesLabel,sexLabel,oceanLabel,inputSizeMeasureTypeCode,outputSizeMeasureTypeCode</param>
+ <!--<param name="againstMe">true</param>-->
+ <message>observe.validation.lengthLengthParameter.invalid.uniqueKey</message>
+ </field-validator>
</field>
@@ -110,6 +133,14 @@
</param>
<message>observe.validation.lengthLengthParameter.disabled.inputSizeMeasureType</message>
</field-validator>
+
+ <!-- clef unique species - gender - ocean - inputSizeMeasureTypeCode - outputSizeMeasureTypeCode -->
+ <field-validator type="observeLengthFormulaCollectionUniqueKeyDto" short-circuit="true">
+ <param name="collectionFieldName">editingReferentielList</param>
+ <param name="keys">speciesLabel,sexLabel,oceanLabel,inputSizeMeasureTypeCode,outputSizeMeasureTypeCode</param>
+ <!--<param name="againstMe">true</param>-->
+ <message>observe.validation.lengthLengthParameter.invalid.uniqueKey</message>
+ </field-validator>
</field>
<field name="inputOutputFormula">
=====================================
validation/src/main/resources/fr/ird/observe/dto/referential/LengthWeightParameterDto-create-error-validation.xml
=====================================
@@ -32,10 +32,10 @@
<message>observe.validation.lengthWeightParameter.required.species</message>
</field-validator>
- <!-- clef unique species - gender - ocean - startDate -->
- <field-validator type="observeReferentialCollectionUniqueKeyDto" short-circuit="true">
+ <!-- clef unique species - gender - ocean - startDate - sizeMeasureType -->
+ <field-validator type="observeLengthFormulaCollectionUniqueKeyDto" short-circuit="true">
<param name="collectionFieldName">editingReferentielList</param>
- <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate</param>
+ <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate,sizeMeasureTypeCode</param>
<!--<param name="againstMe">true</param>-->
<message>observe.validation.lengthWeightParameter.invalid.uniqueKey</message>
</field-validator>
@@ -47,10 +47,10 @@
<message>observe.validation.lengthWeightParameter.null.ocean</message>
</field-validator>
- <!-- clef unique species - gender - ocean - startDate -->
- <field-validator type="observeReferentialCollectionUniqueKeyDto" short-circuit="true">
+ <!-- clef unique species - gender - ocean - startDate - sizeMeasureType -->
+ <field-validator type="observeLengthFormulaCollectionUniqueKeyDto" short-circuit="true">
<param name="collectionFieldName">editingReferentielList</param>
- <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate</param>
+ <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate,sizeMeasureTypeCode</param>
<!--<param name="againstMe">true</param>-->
<message>observe.validation.lengthWeightParameter.invalid.uniqueKey</message>
</field-validator>
@@ -62,25 +62,40 @@
<message>observe.validation.lengthWeightParameter.null.sex</message>
</field-validator>
- <!-- clef unique species - gender - ocean - startDate -->
- <field-validator type="observeReferentialCollectionUniqueKeyDto" short-circuit="true">
+ <!-- clef unique species - gender - ocean - startDate - sizeMeasureType -->
+ <field-validator type="observeLengthFormulaCollectionUniqueKeyDto" short-circuit="true">
<param name="collectionFieldName">editingReferentielList</param>
- <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate</param>
+ <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate,sizeMeasureTypeCode</param>
<!--<param name="againstMe">true</param>-->
<message>observe.validation.lengthWeightParameter.invalid.uniqueKey</message>
</field-validator>
</field>
<field name="startDate">
- <!-- clef unique species - gender - ocean - startDate -->
- <field-validator type="observeReferentialCollectionUniqueKeyDto" short-circuit="true">
+ <field-validator type="fieldexpression" short-circuit="true">
+ <param name="expression">
+ <![CDATA[ endDate == null || startDate == null || endDate.after(startDate) ]]>
+ </param>
+ <message>observe.validation.lengthFormula.endDate.before.startDate</message>
+ </field-validator>
+ <!-- clef unique species - gender - ocean - startDate - sizeMeasureType -->
+ <field-validator type="observeLengthFormulaCollectionUniqueKeyDto" short-circuit="true">
<param name="collectionFieldName">editingReferentielList</param>
- <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate</param>
+ <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate,sizeMeasureTypeCode</param>
<!--<param name="againstMe">true</param>-->
<message>observe.validation.lengthWeightParameter.invalid.uniqueKey</message>
</field-validator>
</field>
+ <field name="endDate">
+ <field-validator type="fieldexpression">
+ <param name="expression">
+ <![CDATA[ endDate == null || startDate == null || endDate.after(startDate) ]]>
+ </param>
+ <message>observe.validation.lengthFormula.endDate.before.startDate</message>
+ </field-validator>
+ </field>
+
<field name="sizeMeasureType">
<!-- pas de sizeMeasureType renseigne -->
<field-validator type="required">
@@ -94,6 +109,14 @@
</param>
<message>observe.validation.lengthWeightParameter.disabled.sizeMeasureType</message>
</field-validator>
+ <!-- clef unique species - gender - ocean - startDate - sizeMeasureType -->
+ <field-validator type="observeLengthFormulaCollectionUniqueKeyDto" short-circuit="true">
+ <param name="collectionFieldName">editingReferentielList</param>
+ <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate,sizeMeasureTypeCode</param>
+ <!--<param name="againstMe">true</param>-->
+ <message>observe.validation.lengthWeightParameter.invalid.uniqueKey</message>
+ </field-validator>
+
</field>
<field name="lengthWeightFormula">
=====================================
validation/src/main/resources/fr/ird/observe/dto/referential/LengthWeightParameterDto-update-error-validation.xml
=====================================
@@ -26,43 +26,36 @@
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
- <!--<field name="code">-->
-
- <!--<!– clef unique sur le code –>-->
- <!--<field-validator type="referentialCode" short-circuit="true">-->
- <!--<message>observe.validation.referentiel.invalid.code.uniqueKey##${code}</message>-->
- <!--</field-validator>-->
-
- <!--</field>-->
-
<field name="species">
<!-- pas de species selectionne -->
<field-validator type="required" short-circuit="true">
<message>observe.validation.lengthWeightParameter.required.species</message>
</field-validator>
- <!-- clef unique species - gender - ocean - startDate -->
- <field-validator type="observeReferentialCollectionUniqueKeyDto" short-circuit="true">
+ <!-- clef unique species - gender - ocean - startDate - sizeMeasureType -->
+ <field-validator type="observeLengthFormulaCollectionUniqueKeyDto" short-circuit="true">
<param name="collectionFieldName">editingReferentielList</param>
- <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate</param>
+ <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate,sizeMeasureTypeCode</param>
<!--<param name="againstMe">true</param>-->
<message>observe.validation.lengthWeightParameter.invalid.uniqueKey</message>
</field-validator>
+
</field>
<field name="ocean">
<!-- pas de ocean renseigne -->
- <field-validator type="required">
+ <field-validator type="required" short-circuit="true">
<message>observe.validation.lengthWeightParameter.null.ocean</message>
</field-validator>
- <!-- clef unique species - gender - ocean - startDate -->
- <field-validator type="observeReferentialCollectionUniqueKeyDto" short-circuit="true">
+ <!-- clef unique species - gender - ocean - startDate - sizeMeasureType -->
+ <field-validator type="observeLengthFormulaCollectionUniqueKeyDto" short-circuit="true">
<param name="collectionFieldName">editingReferentielList</param>
- <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate</param>
+ <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate,sizeMeasureTypeCode</param>
<!--<param name="againstMe">true</param>-->
<message>observe.validation.lengthWeightParameter.invalid.uniqueKey</message>
</field-validator>
+
</field>
<field name="sex">
@@ -71,38 +64,62 @@
<message>observe.validation.lengthWeightParameter.null.sex</message>
</field-validator>
- <!-- clef unique species - gender - ocean - startDate -->
- <field-validator type="observeReferentialCollectionUniqueKeyDto" short-circuit="true">
+ <!-- clef unique species - gender - ocean - startDate - sizeMeasureType -->
+ <field-validator type="observeLengthFormulaCollectionUniqueKeyDto" short-circuit="true">
<param name="collectionFieldName">editingReferentielList</param>
- <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate</param>
+ <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate,sizeMeasureTypeCode</param>
<!--<param name="againstMe">true</param>-->
<message>observe.validation.lengthWeightParameter.invalid.uniqueKey</message>
</field-validator>
+
</field>
<field name="startDate">
- <!-- clef unique species - gender - ocean - startDate -->
- <field-validator type="observeReferentialCollectionUniqueKeyDto" short-circuit="true">
+ <field-validator type="fieldexpression" short-circuit="true">
+ <param name="expression">
+ <![CDATA[ endDate == null || startDate == null || endDate.after(startDate) ]]>
+ </param>
+ <message>observe.validation.lengthFormula.endDate.before.startDate</message>
+ </field-validator>
+ <!-- clef unique species - gender - ocean - startDate - sizeMeasureType -->
+ <field-validator type="observeLengthFormulaCollectionUniqueKeyDto" short-circuit="true">
<param name="collectionFieldName">editingReferentielList</param>
- <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate</param>
+ <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate,sizeMeasureTypeCode</param>
<!--<param name="againstMe">true</param>-->
<message>observe.validation.lengthWeightParameter.invalid.uniqueKey</message>
</field-validator>
</field>
+ <field name="endDate">
+ <field-validator type="fieldexpression">
+ <param name="expression">
+ <![CDATA[ endDate == null || startDate == null || endDate.after(startDate) ]]>
+ </param>
+ <message>observe.validation.lengthFormula.endDate.before.startDate</message>
+ </field-validator>
+ </field>
+
<field name="sizeMeasureType">
<!-- pas de sizeMeasureType renseigne -->
- <field-validator type="required">
+ <field-validator type="required" short-circuit="true">
<message>observe.validation.lengthWeightParameter.null.sizeMeasureType</message>
</field-validator>
<!-- sizeMeasureType desactive -->
- <field-validator type="fieldexpression">
+ <field-validator type="fieldexpression" short-circuit="true">
<param name="expression">
<![CDATA[ sizeMeasureType == null || sizeMeasureType.enabled ]]>
</param>
<message>observe.validation.lengthWeightParameter.disabled.sizeMeasureType</message>
</field-validator>
+ <!-- clef unique species - gender - ocean - startDate - sizeMeasureType -->
+ <field-validator type="observeLengthFormulaCollectionUniqueKeyDto" short-circuit="true">
+ <param name="collectionFieldName">editingReferentielList</param>
+ <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate,sizeMeasureTypeCode</param>
+ <!--<param name="againstMe">true</param>-->
+ <message>observe.validation.lengthWeightParameter.invalid.uniqueKey</message>
+ </field-validator>
+
</field>
<field name="lengthWeightFormula">
=====================================
validation/src/main/resources/i18n/validation_en_GB.properties
=====================================
@@ -451,10 +451,11 @@ observe.validation.hooksComposition.desactivated.hookSize=Selected hook size is
observe.validation.hooksComposition.desactivated.hookType=Selected hook type is disabled.
observe.validation.hooksComposition.required.hookType=Hook type must be filled.
observe.validation.hooksComposition.required.proportion=Proportion must be filled.
+observe.validation.lengthFormula.endDate.before.startDate=End date must be after start date
observe.validation.lengthLengthParameter.disabled.inputSizeMeasureType=Selected Input Size measure type is disabled
observe.validation.lengthLengthParameter.invalid.inputOutputFormula=Formula is not valid.
observe.validation.lengthLengthParameter.invalid.outputInputFormula=Formula is not valid.
-observe.validation.lengthLengthParameter.invalid.uniqueKey=Tuple (gender/ocean/species/startDate) must be unique.
+observe.validation.lengthLengthParameter.invalid.uniqueKey=Tuple (species/ocean/gender/input size measure/ output size measure/startDate) must be unique.
observe.validation.lengthLengthParameter.null.inputSizeMeasureType=Input size measure type is not filled.
observe.validation.lengthLengthParameter.null.ocean=Ocean is not filled.
observe.validation.lengthLengthParameter.null.outputSizeMeasureType=Output size measure type is not filled.
@@ -467,7 +468,7 @@ observe.validation.lengthLengthParameter.required.species=Species must be filled
observe.validation.lengthLengthParameter.required.startDate=Start date must be filled.
observe.validation.lengthWeightParameter.disabled.sizeMeasureType=Selected size measure type is disabled.
observe.validation.lengthWeightParameter.invalid.lengthWeightFormula=Formula is not valid.
-observe.validation.lengthWeightParameter.invalid.uniqueKey=Tuple (gender/ocean/species/startDate) must be unique.
+observe.validation.lengthWeightParameter.invalid.uniqueKey=Tuple (species/ocean/gender/sizeMeasureType/startDate) must be unique.
observe.validation.lengthWeightParameter.invalid.weightLengthFormula=Formula is not valid.
observe.validation.lengthWeightParameter.null.ocean=Ocean is not filled.
observe.validation.lengthWeightParameter.null.sizeMeasureType=Size measure type is not filled.
=====================================
validation/src/main/resources/i18n/validation_es_ES.properties
=====================================
@@ -453,10 +453,11 @@ observe.validation.hooksComposition.desactivated.hookSize=El tamaño de avanzuel
observe.validation.hooksComposition.desactivated.hookType=El tipo de avanzuelo seleccionado está desactivado.
observe.validation.hooksComposition.required.hookType=La selección de un tipo de avanzuelo es mandatoria.
observe.validation.hooksComposition.required.proportion=La proporción está vacía.
+observe.validation.lengthFormula.endDate.before.startDate=End date must be after start date \#TODO
observe.validation.lengthLengthParameter.disabled.inputSizeMeasureType=Le type de mensuration d'entrée sélectionné est désactivé. \#TODO
observe.validation.lengthLengthParameter.invalid.inputOutputFormula=La formule n'est pas valide. \#TODO
observe.validation.lengthLengthParameter.invalid.outputInputFormula=La formule n'est pas valide. \#TODO
-observe.validation.lengthLengthParameter.invalid.uniqueKey=Tupla (sexo/océano/especie) debe ser única, la tupla ya se ha usado.
+observe.validation.lengthLengthParameter.invalid.uniqueKey=Tupla (especiesexo/océano/input size measure/ output size measure/startDate) debe ser única, la tupla ya se ha usado. #TODO
observe.validation.lengthLengthParameter.null.inputSizeMeasureType=Le type de mensuration d'entrée n'est pas renseigné. \#TODO
observe.validation.lengthLengthParameter.null.ocean=No se ha seleccionado oceano.
observe.validation.lengthLengthParameter.null.outputSizeMeasureType=Le type de mensuration de sortie n'est pas renseigné. \#TODO
@@ -469,7 +470,7 @@ observe.validation.lengthLengthParameter.required.species=Especie no especificad
observe.validation.lengthLengthParameter.required.startDate=fecha de comienzo de validez no especificada.
observe.validation.lengthWeightParameter.disabled.sizeMeasureType=Le type de mensuration sélectionné est désactivé. \#TODO
observe.validation.lengthWeightParameter.invalid.lengthWeightFormula=Relación de peso introducida no es coherente.
-observe.validation.lengthWeightParameter.invalid.uniqueKey=Tupla (sexo/océano/especie) debe ser única, la tupla ya se ha usado.
+observe.validation.lengthWeightParameter.invalid.uniqueKey=Tupla (especie/sexo/océano/sizeMeasureType/startDate) debe ser única, la tupla ya se ha usado. #TODO
observe.validation.lengthWeightParameter.invalid.weightLengthFormula=Relación de talla introducida no es coherente.
observe.validation.lengthWeightParameter.null.ocean=No se ha seleccionado oceano.
observe.validation.lengthWeightParameter.null.sizeMeasureType=Type de mensuration non renseigné. \#TODO
=====================================
validation/src/main/resources/i18n/validation_fr_FR.properties
=====================================
@@ -451,10 +451,11 @@ observe.validation.hooksComposition.desactivated.hookSize=La taille d'hameçon s
observe.validation.hooksComposition.desactivated.hookType=Le type d'hameçon sélectionné est désactivée.
observe.validation.hooksComposition.required.hookType=La sélection d'un type d'hameçon est obligatoire.
observe.validation.hooksComposition.required.proportion=Proportion non renseignée.
+observe.validation.lengthFormula.endDate.before.startDate=La date de fin doit être ultérieure à celle de débuts
observe.validation.lengthLengthParameter.disabled.inputSizeMeasureType=Le type de mensuration d'entrée sélectionné est désactivé.
observe.validation.lengthLengthParameter.invalid.inputOutputFormula=La formule n'est pas valide.
observe.validation.lengthLengthParameter.invalid.outputInputFormula=La formule n'est pas valide.
-observe.validation.lengthLengthParameter.invalid.uniqueKey=Le tuple (sexe/océan/espèce/date de début) doit être unique
+observe.validation.lengthLengthParameter.invalid.uniqueKey=Le tuple (espèce/sexe/océan/type de measure en entrée/type de mesure en sortie/date de début) doit être unique
observe.validation.lengthLengthParameter.null.inputSizeMeasureType=Le type de mensuration d'entrée n'est pas renseigné.
observe.validation.lengthLengthParameter.null.ocean=Aucun océan sélectionné.
observe.validation.lengthLengthParameter.null.outputSizeMeasureType=Le type de mensuration de sortie n'est pas renseigné.
@@ -467,7 +468,7 @@ observe.validation.lengthLengthParameter.required.species=L'espèce n'est pas re
observe.validation.lengthLengthParameter.required.startDate=date de début de validité non renseignée.
observe.validation.lengthWeightParameter.disabled.sizeMeasureType=Le type de mensuration sélectionné est désactivé.
observe.validation.lengthWeightParameter.invalid.lengthWeightFormula=La relation poids saisie n'est pas cohérente.
-observe.validation.lengthWeightParameter.invalid.uniqueKey=Le tuple (sexe/océan/espèce/date de début) doit être unique
+observe.validation.lengthWeightParameter.invalid.uniqueKey=Le tuple (espèce/sexe/océan/type de measure/date de début) doit être unique
observe.validation.lengthWeightParameter.invalid.weightLengthFormula=La relation taille saisie n'est pas cohérente.
observe.validation.lengthWeightParameter.null.ocean=Aucun océan sélectionné.
observe.validation.lengthWeightParameter.null.sizeMeasureType=Type de mensuration non renseigné.
=====================================
validation/src/main/resources/validators.xml
=====================================
@@ -54,7 +54,7 @@
<!-- Les validateurs spécifique aux Dto dans observe -->
<validator name="collectionUniqueKeyDto" class="fr.ird.observe.services.validation.validators.CollectionUniqueKeyDtoValidator"/>
<validator name="observeCollectionUniqueKeyDto" class="fr.ird.observe.services.validation.validators.ObserveCollectionUniqueKeyDtoValidator"/>
- <validator name="observeReferentialCollectionUniqueKeyDto" class="fr.ird.observe.services.validation.validators.ObserveReferentialCollectionUniqueKeyDtoValidator"/>
+ <validator name="observeLengthFormulaCollectionUniqueKeyDto" class="fr.ird.observe.services.validation.validators.ObserveLengthFormulaCollectionUniqueKeyDtoValidator"/>
<validator name="openableDto" class="fr.ird.observe.services.validation.validators.OpenableDtoFieldValidator"/>
<validator name="species_lengthDto" class="fr.ird.observe.services.validation.validators.SpeciesLengthFieldDtoValidator"/>
<validator name="species_weightDto" class="fr.ird.observe.services.validation.validators.SpeciesWeightFieldDtoValidator"/>
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/4575713fd28cb2cd53d95b9c9f4…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/4575713fd28cb2cd53d95b9c9f4…
You're receiving this email because of your account on gitlab.com.
1
0
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
a66d04a1 by Tony CHEMIT at 2018-07-10T07:23:09Z
Fix some bugs...
- - - - -
6 changed files:
- client/src/main/java/fr/ird/observe/client/ui/content/ObserveFocusManager.java
- client/src/main/java/fr/ird/observe/client/ui/content/data/longline/logbook/CatchLonglineLogbookUI.jaxx
- client/src/main/java/fr/ird/observe/client/ui/content/data/longline/logbook/CatchLonglineLogbookUI.jcss
- client/src/main/java/fr/ird/observe/client/ui/content/data/longline/logbook/CatchLonglineLogbookUIHandler.java
- client/src/main/java/fr/ird/observe/client/ui/content/data/longline/logbook/TripLonglineSampleLogbookListUIHandler.java
- persistence/src/main/resources/db/migration/8.0/08_add_weight_category-common.sql
Changes:
=====================================
client/src/main/java/fr/ird/observe/client/ui/content/ObserveFocusManager.java
=====================================
@@ -35,6 +35,8 @@ import fr.ird.observe.client.ui.content.data.longline.logbook.FloatlinesComposit
import fr.ird.observe.client.ui.content.data.longline.logbook.HooksCompositionLogbookUI;
import fr.ird.observe.client.ui.content.data.longline.logbook.LonglineGlobalCompositionLogbookUI;
import fr.ird.observe.client.ui.content.data.longline.logbook.SetLonglineLogbookUI;
+import fr.ird.observe.client.ui.content.data.longline.logbook.TripLonglineLandingLogbookListUI;
+import fr.ird.observe.client.ui.content.data.longline.logbook.TripLonglineSampleLogbookListUI;
import fr.ird.observe.client.ui.content.data.longline.obs.ActivityLonglineObsListUI;
import fr.ird.observe.client.ui.content.data.longline.obs.ActivityLonglineObsUI;
import fr.ird.observe.client.ui.content.data.longline.obs.BaitsCompositionObsUI;
@@ -559,6 +561,9 @@ public class ObserveFocusManager {
builder.put(ActivityLonglineObsListUI.class, new ContentListUIObserveLayoutFocusTraversalPolicy());
builder.put(ActivityLonglineLogbookListUI.class, new ContentListUIObserveLayoutFocusTraversalPolicy());
+ builder.put(TripLonglineLandingLogbookListUI.class, new ContentListUIObserveLayoutFocusTraversalPolicy());
+ builder.put(TripLonglineSampleLogbookListUI.class, new ContentListUIObserveLayoutFocusTraversalPolicy());
+
builder.put(TripLonglineUI.class, new ObserveLayoutFocusTraversalPolicy<TripLonglineUI>() {
@Override
=====================================
client/src/main/java/fr/ird/observe/client/ui/content/data/longline/logbook/CatchLonglineLogbookUI.jaxx
=====================================
@@ -36,6 +36,7 @@
fr.ird.observe.dto.data.longline.SetLonglineLogbookCatchDto
fr.ird.observe.dto.referential.SpeciesReference
fr.ird.observe.dto.referential.SexReference
+ fr.ird.observe.dto.referential.WeightMeasureMethodReference
fr.ird.observe.dto.referential.longline.BaitHaulingStatusReference
fr.ird.observe.dto.referential.longline.CatchFateLonglineReference
fr.ird.observe.dto.referential.longline.HealthnessReference
@@ -156,10 +157,10 @@
<NumberEditor id='totalWeight' constructorParams='this' styleClass="float3"/>
</cell>
<cell>
- <JLabel id='weightDeterminationMethodLabel'/>
+ <JLabel id='weightMeasureMethodLabel'/>
</cell>
<cell weightx='1' anchor='east'>
- <BeanComboBox id='weightDeterminationMethod' constructorParams='this' genericType='HealthnessReference'/>
+ <BeanComboBox id='weightMeasureMethod' constructorParams='this' genericType='WeightMeasureMethodReference'/>
</cell>
</row>
=====================================
client/src/main/java/fr/ird/observe/client/ui/content/data/longline/logbook/CatchLonglineLogbookUI.jcss
=====================================
@@ -76,6 +76,10 @@
selectedItem:{tableEditBean.getSpeciesCatch()};
}
+#weightMeasureMethod {
+ selectedItem:{tableEditBean.getWeightMeasureMethod()};
+}
+
#onBoardProcessing {
selectedItem:{tableEditBean.getOnBoardProcessing()};
}
=====================================
client/src/main/java/fr/ird/observe/client/ui/content/data/longline/logbook/CatchLonglineLogbookUIHandler.java
=====================================
@@ -96,14 +96,14 @@ public class CatchLonglineLogbookUIHandler extends ContentTableUIHandler<SetLong
addReferentialFilter(CatchLonglineLogbookDto.PROPERTY_SPECIES_CATCH, (ReferentialReferencesFilter<SpeciesDto, SpeciesReference>) incomingReferences -> {
String speciesListId = ObserveSwingApplicationContext.get().getConfig().getSpeciesListLonglineCatchId();
- String tripLonglineId = getSelectedId();
+ String tripLonglineId = ObserveSwingApplicationContext.get().getNavigationSelect().getLongline().getTrip().getId();
List<SpeciesReference> result = getTripLonglineService().getSpeciesByListAndTrip(tripLonglineId, speciesListId).toList();
return DtoReferenceCollection.filterEnabled(result);
});
addReferentialFilter(CatchLonglineLogbookDto.PROPERTY_PREDATOR, (ReferentialReferencesFilter<SpeciesDto, SpeciesReference>) incomingReferences -> {
String speciesListId = ObserveSwingApplicationContext.get().getConfig().getSpeciesListLonglineDepredatorId();
- String tripLonglineId = getSelectedId();
+ String tripLonglineId = ObserveSwingApplicationContext.get().getNavigationSelect().getLongline().getTrip().getId();
List<SpeciesReference> result = getTripLonglineService().getSpeciesByListAndTrip(tripLonglineId, speciesListId).toList();
return DtoReferenceCollection.filterEnabled(result);
});
@@ -211,7 +211,7 @@ public class CatchLonglineLogbookUIHandler extends ContentTableUIHandler<SetLong
boolean isGrouped = CatchAcquisitionMode.GROUPED.equals(newMode);
ui.getTotalWeight().setEnabled(isGrouped);
- ui.getWeightDeterminationMethod().setEnabled(isGrouped);
+ ui.getWeightMeasureMethod().setEnabled(isGrouped);
ui.getCount().setEnabled(isGrouped);
if (createMode) {
=====================================
client/src/main/java/fr/ird/observe/client/ui/content/data/longline/logbook/TripLonglineSampleLogbookListUIHandler.java
=====================================
@@ -83,7 +83,7 @@ public class TripLonglineSampleLogbookListUIHandler extends ContentListUIHandler
@Override
protected ContentMode getContentMode() {
- String selectedId = getSelectedId();
+ String selectedId = getSelectedParentId();
if (!selectedId.equals(getEditNode().getId())) {
addInfoMessage(n("observe.common.TripLonglineDto.message.no.active.found"));
return ContentMode.READ;
=====================================
persistence/src/main/resources/db/migration/8.0/08_add_weight_category-common.sql
=====================================
@@ -21,4 +21,4 @@
---
CREATE TABLE observe_longline.WeightCategory(topiaid VARCHAR(255) NOT NULL,topiaversion BIGINT NOT NULL, topiacreatedate DATE, lastupdatedate TIMESTAMP NOT NULL, code VARCHAR(255), status INTEGER DEFAULT 1, needComment BOOLEAN DEFAULT false, uri VARCHAR(255), label1 VARCHAR(255), label2 VARCHAR(255), label3 VARCHAR(255),label4 VARCHAR(255),label5 VARCHAR(255),label6 VARCHAR(255),label7 VARCHAR(255),label8 VARCHAR(255));
ALTER TABLE observe_longline.WeightCategory ADD CONSTRAINT PK_WeightCategory PRIMARY KEY(topiaid);
-INSERT INTO observe_common.LASTUPDATEDATE(topiaId, topiaversion, topiacreatedate, TYPE , LASTUPDATEDATE) values ('fr.ird.observe.entities.LastUpdateDate#666#1005', 0,CURRENT_DATE, 'fr.ird.observe.entities.referentiel.longline.WeightCategory', CURRENT_TIMESTAMP);
+INSERT INTO observe_common.LASTUPDATEDATE(topiaId, topiaversion, topiacreatedate, TYPE , LASTUPDATEDATE) values ('fr.ird.observe.entities.LastUpdateDate#666#1005', 0,CURRENT_DATE, 'fr.ird.observe.entities.referentiel.longline.WeightCategoryLongline', CURRENT_TIMESTAMP);
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/a66d04a181aaf3d4f08db7cf941…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/a66d04a181aaf3d4f08db7cf941…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][pages] Site checkin for project ObServe :: Pom
by Tony CHEMIT 05 Jul '18
by Tony CHEMIT 05 Jul '18
05 Jul '18
Tony CHEMIT pushed to branch pages at ultreiaio / ird-observe
Commits:
39b9e4a5 by 166231 at 2018-07-05T14:34:29Z
Site checkin for project ObServe :: Pom
- - - - -
11 changed files:
- administration-web.html
- aggregate-third-party-report.html
- architecture-logicielle.html
- changelog.html
- changes-report.html
- config-report.html
- dependency-convergence.html
- dependency-info.html
- dependency-management.html
- dependency-updates-report.html
- dev-activity.html
The diff was not included because it is too large.
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/39b9e4a5c4ea80dcb5409b28ce3…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/39b9e4a5c4ea80dcb5409b28ce3…
You're receiving this email because of your account on gitlab.com.
1
0
05 Jul '18
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
1762645d by Tony CHEMIT at 2018-07-05T14:11:22Z
use last topia exntension
- - - - -
1 changed file:
- pom.xml
Changes:
=====================================
pom.xml
=====================================
--- a/pom.xml
+++ b/pom.xml
@@ -158,7 +158,7 @@
<!--<lib.version.java4all.jaxx>3.0-alpha-31</lib.version.java4all.jaxx>-->
<!--<lib.version.nuiton.topia>3.4.2-SNAPSHOT</lib.version.nuiton.topia>-->
<lib.version.nuiton.validation>3.1</lib.version.nuiton.validation>
- <!--<lib.version.java4all.config>1.0.3</lib.version.java4all.config>-->
+ <lib.version.java4all.topia>1.1.2-SNAPSHOT</lib.version.java4all.topia>
<xworkVersion>2.3.34</xworkVersion>
<!--<lib.version.hibernate>5.2.10.Final</lib.version.hibernate>-->
<!--can't use 1.4.197 (date has changed + blob also-->
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/1762645de1059ce44b45298d147…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/1762645de1059ce44b45298d147…
You're receiving this email because of your account on gitlab.com.
1
0
Tony CHEMIT deleted branch release/7.0-RC-16 at ultreiaio / ird-observe
--
You're receiving this email because of your account on gitlab.com.
1
0
Tony CHEMIT pushed new tag v7.0-RC-16 at ultreiaio / ird-observe
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/tree/v7.0-RC-16
You're receiving this email because of your account on gitlab.com.
1
0