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
August 2017
- 1 participants
- 135 discussions
[Git][ultreiaio/ird-observe][develop] 3 commits: Amélioration du format des logs (Closes #832)
by Tony CHEMIT 06 Aug '17
by Tony CHEMIT 06 Aug '17
06 Aug '17
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
f6c46b6b by Tony CHEMIT at 2017-08-06T17:47:40+02:00
Amélioration du format des logs (Closes #832)
- - - - -
5f6b4cd0 by Tony CHEMIT at 2017-08-06T19:31:10+02:00
Impossible de valider le référentiel (See #834)
- - - - -
3154f6f1 by Tony CHEMIT at 2017-08-06T19:32:17+02:00
Review validation layouts (See #806) Ok everything is ok now (remove other module), but still need to review the validation report
- - - - -
30 changed files:
- CONTRIBUTING.md
- client-configuration/pom.xml
- client-configuration/src/main/resources/observe-log4j.properties
- − client-validation/src/main/resources/fr/ird/observe/services/dto/referential/longline/LineTypeDto-update-error-validation.xml
- − client-validation/src/main/resources/fr/ird/observe/services/dto/referential/longline/LineTypeDto-update-warning-validation.xml
- − client-validation/src/main/resources/fr/ird/observe/services/dto/referential/longline/MaturityStatusDto-create-error-validation.xml
- − client-validation/src/main/resources/fr/ird/observe/services/dto/referential/longline/MaturityStatusDto-create-warning-validation.xml
- − client-validation/src/main/resources/fr/ird/observe/services/dto/referential/longline/MaturityStatusDto-update-error-validation.xml
- − client-validation/src/main/resources/fr/ird/observe/services/dto/referential/longline/MaturityStatusDto-update-warning-validation.xml
- − client-validation/src/main/resources/fr/ird/observe/services/dto/referential/longline/MitigationTypeDto-create-error-validation.xml
- − client-validation/src/main/resources/fr/ird/observe/services/dto/referential/longline/MitigationTypeDto-create-warning-validation.xml
- − client-validation/src/main/resources/fr/ird/observe/services/dto/referential/longline/MitigationTypeDto-update-error-validation.xml
- − client-validation/src/main/resources/fr/ird/observe/services/dto/referential/longline/MitigationTypeDto-update-warning-validation.xml
- − client-validation/src/main/resources/fr/ird/observe/services/dto/referential/longline/SensorBrandDto-create-error-validation.xml
- − client-validation/src/main/resources/fr/ird/observe/services/dto/referential/longline/SensorBrandDto-create-warning-validation.xml
- − client-validation/src/main/resources/fr/ird/observe/services/dto/referential/longline/SensorBrandDto-update-error-validation.xml
- − client-validation/src/main/resources/fr/ird/observe/services/dto/referential/longline/SensorBrandDto-update-warning-validation.xml
- − client-validation/src/main/resources/fr/ird/observe/services/dto/referential/longline/SensorDataFormatDto-create-error-validation.xml
- − client-validation/src/main/resources/fr/ird/observe/services/dto/referential/longline/SensorDataFormatDto-create-warning-validation.xml
- − client-validation/src/main/resources/fr/ird/observe/services/dto/referential/longline/SensorDataFormatDto-update-error-validation.xml
- − client-validation/src/main/resources/fr/ird/observe/services/dto/referential/longline/SensorDataFormatDto-update-warning-validation.xml
- − client-validation/src/main/resources/fr/ird/observe/services/dto/referential/longline/SensorTypeDto-create-error-validation.xml
- − client-validation/src/main/resources/fr/ird/observe/services/dto/referential/longline/SensorTypeDto-create-warning-validation.xml
- − client-validation/src/main/resources/fr/ird/observe/services/dto/referential/longline/SensorTypeDto-update-error-validation.xml
- − client-validation/src/main/resources/fr/ird/observe/services/dto/referential/longline/SensorTypeDto-update-warning-validation.xml
- − client-validation/src/main/resources/fr/ird/observe/services/dto/referential/longline/SettingShapeDto-create-error-validation.xml
- − client-validation/src/main/resources/fr/ird/observe/services/dto/referential/longline/SettingShapeDto-create-warning-validation.xml
- − client-validation/src/main/resources/fr/ird/observe/services/dto/referential/longline/SettingShapeDto-update-error-validation.xml
- − client-validation/src/main/resources/fr/ird/observe/services/dto/referential/longline/SettingShapeDto-update-warning-validation.xml
- − client-validation/src/main/resources/fr/ird/observe/services/dto/referential/longline/StomacFullnessDto-create-error-validation.xml
The diff was not included because it is too large.
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/compare/14336144bc40669516f79a41fa…
---
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/compare/14336144bc40669516f79a41fa…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] Amélioration du format des logs (Closes #832)
by Tony CHEMIT 06 Aug '17
by Tony CHEMIT 06 Aug '17
06 Aug '17
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
14336144 by Tony CHEMIT at 2017-08-06T17:45:14+02:00
Amélioration du format des logs (Closes #832)
- - - - -
6 changed files:
- client-configuration/src/main/resources/log4j.properties
- client-validation/src/test/resources/log4j.properties
- server-configuration/src/main/resources/log4j.properties
- services-topia/src/test/resources/log4j.properties
- services-validation/src/test/resources/log4j.properties
- toolbox-maven-plugin/src/main/resources/log4j.properties
Changes:
=====================================
client-configuration/src/main/resources/log4j.properties
=====================================
--- a/client-configuration/src/main/resources/log4j.properties
+++ b/client-configuration/src/main/resources/log4j.properties
@@ -20,37 +20,28 @@
# #L%
###
-# Global logging configuration
log4j.rootLogger=WARN, stdout, file
-# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%c:%L) - %m%n
+log4j.appender.stdout.layout=org.apache.log4j.EnhancedPatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%-5p %d{ISO8601} [%t] %40C{1} :%4L - %m%n
-# file output...
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=\${user.home}/.observe/log/observe-boot.log
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=4
-log4j.appender.file.layout=org.apache.log4j.PatternLayout
-log4j.appender.file.layout.ConversionPattern=%d{dd MMM yyyy HH:mm:ss} %5p [%t] (%c:%L) - %m%n
-
-# levels
+log4j.appender.file.layout=org.apache.log4j.EnhancedPatternLayout
+log4j.appender.file.layout.ConversionPattern=%-5p %d{ISO8601} [%t] %40C{1} :%4L - %m%n
log4j.logger.fr.ird.observe=INFO
-log4j.logger.fr.ird.observe.client.db.impl.DataContext=WARN
-log4j.logger.fr.ird.observe.client.db.impl.DataService=WARN
log4j.logger.fr.ird.observe.client.validators=WARN
-
log4j.logger.fr.ird.observe.client.ui.tree=INFO
log4j.logger.fr.ird.observe.client.ui.util.decorator=ERROR
-log4j.logger.io.ultreia=INFO
-log4j.logger.org.nuiton.config=INFO
-log4j.logger.org.nuiton.topia.migration=INFO
log4j.logger.org.nuiton.topia.service.sql=INFO
-#log4j.logger.org.nuiton.jaxx.widgets.gis=INFO
+log4j.logger.org.nuiton.topia.migration=INFO
+log4j.logger.org.nuiton.config=INFO
+log4j.logger.io.ultreia=INFO
log4j.logger.org.nuiton.jaxx.validator.swing.SwingValidator=ERROR
log4j.logger.org.hibernate.orm.deprecation=ERROR
=====================================
client-validation/src/test/resources/log4j.properties
=====================================
--- a/client-validation/src/test/resources/log4j.properties
+++ b/client-validation/src/test/resources/log4j.properties
@@ -25,8 +25,8 @@ log4j.rootLogger=WARN, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%c:%L) %M - %m%n
+log4j.appender.stdout.layout=org.apache.log4j.EnhancedPatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%-5p %d{ISO8601} [%t] %40C{1} :%4L - %m%n
# levels
=====================================
server-configuration/src/main/resources/log4j.properties
=====================================
--- a/server-configuration/src/main/resources/log4j.properties
+++ b/server-configuration/src/main/resources/log4j.properties
@@ -20,16 +20,14 @@
# #L%
###
-# Global logging configuration
log4j.rootLogger=WARN, stdout
-# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%c:%L) - %m%n
+log4j.appender.stdout.layout=org.apache.log4j.EnhancedPatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%-5p %d{ISO8601} [%t] %40C{1} :%4L - %m%n
-# levels
-log4j.logger.fr.ird.observe=DEBUG
+log4j.logger.fr.ird.observe=INFO
+log4j.logger.fr.ird.observe.client.validators=WARN
log4j.logger.org.nuiton=INFO
log4j.logger.org.debux=INFO
log4j.logger.io.ultreia=INFO
=====================================
services-topia/src/test/resources/log4j.properties
=====================================
--- a/services-topia/src/test/resources/log4j.properties
+++ b/services-topia/src/test/resources/log4j.properties
@@ -20,16 +20,13 @@
# #L%
###
-# Global logging configuration
log4j.rootLogger=ERROR, stdout
-#log4j.rootLogger=ERROR, stdout
-# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%c:%L) %M - %m%n
-#log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) %M - %m%n
+log4j.appender.stdout.layout=org.apache.log4j.EnhancedPatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%-5p %d{ISO8601} [%t] %40C{1} :%4L - %m%n
log4j.logger.fr.ird.observe=INFO
#log4j.logger.fr.ird.observe.persistence.RunScriptTopiaSqlWork=DEBUG
log4j.logger.org.nuiton.topia=INFO
log4j.logger.org.nuiton.topia.service.sql=DEBUG
+log4j.logger.fr.ird.observe.client.validators=WARN
=====================================
services-validation/src/test/resources/log4j.properties
=====================================
--- a/services-validation/src/test/resources/log4j.properties
+++ b/services-validation/src/test/resources/log4j.properties
@@ -24,8 +24,8 @@
log4j.rootLogger=ERROR, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%c:%L) %M - %m%n
+log4j.appender.stdout.layout=org.apache.log4j.EnhancedPatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%-5p %d{ISO8601} [%t] %40C{1} :%4L - %m%n
# package level
log4j.logger.fr.ird.observe=INFO
=====================================
toolbox-maven-plugin/src/main/resources/log4j.properties
=====================================
--- a/toolbox-maven-plugin/src/main/resources/log4j.properties
+++ b/toolbox-maven-plugin/src/main/resources/log4j.properties
@@ -23,7 +23,7 @@
log4j.rootLogger=ERROR, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout=org.apache.log4j.EnhancedPatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) %M - %m%n
# package level
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/14336144bc40669516f79a41fab…
---
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/14336144bc40669516f79a41fab…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] Harmonisation des constantes (et on essaye de générer les clefs i18n au plus tôt…
by Tony CHEMIT 05 Aug '17
by Tony CHEMIT 05 Aug '17
05 Aug '17
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
617c81ee by Tony CHEMIT at 2017-08-05T21:23:05+02:00
Harmonisation des constantes (et on essaye de générer les clefs i18n au plus tôt car le module client est cleui le plus souvent buildé, autant que ce ne
soit pas lui qui génère des choses somme toute très stable...)
- - - - -
30 changed files:
- client-configuration/pom.xml
- client-configuration/src/main/config/Client.ini
- client-configuration/src/main/java/fr/ird/observe/client/configuration/ClientConfig.java
- client/src/main/java/fr/ird/observe/client/ui/content/table/impl/seine/ModeSaisieEchantillonEnum.java → client-configuration/src/main/java/fr/ird/observe/client/constants/AcquisitionMode.java
- client/src/main/java/fr/ird/observe/client/ui/content/table/impl/longline/CatchAcquisitionModeEnum.java → client-configuration/src/main/java/fr/ird/observe/client/constants/CatchAcquisitionMode.java
- client/src/main/java/fr/ird/observe/client/db/constants/ConnexionStatus.java → client-configuration/src/main/java/fr/ird/observe/client/constants/ConnexionStatus.java
- client-configuration/src/main/java/fr/ird/observe/client/configuration/constants/CreationMode.java → client-configuration/src/main/java/fr/ird/observe/client/constants/CreationMode.java
- client-configuration/src/main/java/fr/ird/observe/client/configuration/constants/DbMode.java → client-configuration/src/main/java/fr/ird/observe/client/constants/DbMode.java
- client/src/main/java/fr/ird/observe/client/ui/content/ref/impl/common/ProgramObservationEnum.java → client-configuration/src/main/java/fr/ird/observe/client/constants/ProgramObservation.java
- client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/referential/ReferentialSynchronizeMode.java → client-configuration/src/main/java/fr/ird/observe/client/constants/ReferentialSynchronizeMode.java
- client/src/main/java/fr/ird/observe/client/validation/ValidationModelMode.java → client-configuration/src/main/java/fr/ird/observe/client/constants/ValidationModelMode.java
- client-configuration/src/main/resources/i18n/client-configuration_en_GB.properties
- client-configuration/src/main/resources/i18n/client-configuration_es_ES.properties
- client-configuration/src/main/resources/i18n/client-configuration_fr_FR.properties
- client/pom.xml
- client/src/main/java/fr/ird/observe/client/db/ObserveDataSourcesManager.java
- client/src/main/java/fr/ird/observe/client/ui/actions/menu/storage/ChangeStorageAction.java
- client/src/main/java/fr/ird/observe/client/ui/actions/menu/storage/ImportStorageFromFileAction.java
- client/src/main/java/fr/ird/observe/client/ui/actions/storage/UseRemoteConfigurationUIAction.java
- client/src/main/java/fr/ird/observe/client/ui/actions/storage/UseServerConfigurationUIAction.java
- client/src/main/java/fr/ird/observe/client/ui/admin/AdminStep.java
- client/src/main/java/fr/ird/observe/client/ui/admin/AdminUIModel.java
- client/src/main/java/fr/ird/observe/client/ui/admin/config/ConfigModel.java
- client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/referential/ng/ReferentialSynchroConfigUI.jaxx
- client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/referential/ng/ReferentialSynchroModel.java
- client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/referential/ng/ReferentialSynchroUIHandler.java
- client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/referential/ng/tree/ReferentialSynchronizeTreeModelsBuilder.java
- client/src/main/java/fr/ird/observe/client/ui/admin/validate/ValidateConfigUI.jaxx
- client/src/main/java/fr/ird/observe/client/ui/admin/validate/ValidateModel.java
- client/src/main/java/fr/ird/observe/client/ui/admin/validate/ValidateUIHandler.java
The diff was not included because it is too large.
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/617c81ee5cf3f6f24adb8c701de…
---
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/617c81ee5cf3f6f24adb8c701de…
You're receiving this email because of your account on gitlab.com.
1
0
05 Aug '17
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
45aa53d8 by Tony CHEMIT at 2017-08-05T12:36:08+02:00
Review log level
- - - - -
dbd5e228 by Tony CHEMIT at 2017-08-05T19:27:48+02:00
Mise en place la validation sur les FOB (See #830)
- - - - -
29 changed files:
- client-validation/src/main/resources/fr/ird/observe/services/dto/seine/FloatingObjectDto-create-error-validation.xml
- client-validation/src/main/resources/fr/ird/observe/services/dto/seine/FloatingObjectDto-update-error-validation.xml
- client-validation/src/main/resources/i18n/client-validation_en_GB.properties
- client-validation/src/main/resources/i18n/client-validation_es_ES.properties
- client-validation/src/main/resources/i18n/client-validation_fr_FR.properties
- client/pom.xml
- client/src/main/java/fr/ird/observe/client/ui/actions/content/CopyFloatingObjectPartToLeftAction.java
- client/src/main/java/fr/ird/observe/client/ui/actions/content/CopyFloatingObjectPartToRightAction.java
- client/src/main/java/fr/ird/observe/client/ui/content/ContentUIHandler.java
- − client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/FloatingObjectPartsTreeNode.java
- client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/FloatingObjectUI.jaxx
- client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/FloatingObjectUI.jcss
- client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/FloatingObjectUIHandler.java
- client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/FloatingObjectUIModel.java
- + client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/dcp/FloatingObjectPartLegendTreeCellRenderer.java
- + client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/dcp/FloatingObjectPartsTableCellEditor.java
- + client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/dcp/FloatingObjectPartsTableCellRenderer.java
- + client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/dcp/FloatingObjectPartsTreeNode.java
- + client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/dcp/FloatingObjectPartsTreeTableModel.java
- + client/src/main/java/fr/ird/observe/client/ui/util/treetable/JRadioButtonCellEditor.java
- + client/src/main/java/fr/ird/observe/client/ui/util/treetable/JRadioButtonProvider.java
- + client/src/main/java/fr/ird/observe/client/ui/util/treetable/JRendererRadioButton.java
- persistence/src/main/java/fr/ird/observe/persistence/ObserveTopiaPersistenceContext.java
- services/src/main/java/fr/ird/observe/services/decoration/ObserveI18nDecoratorHelper.java
- + services/src/main/java/fr/ird/observe/services/dto/referential/seine/ObjectMaterialDto.java
- services/src/main/models/Observe.model
- services/src/main/resources/i18n/services_en_GB.properties
- services/src/main/resources/i18n/services_es_ES.properties
- services/src/main/resources/i18n/services_fr_FR.properties
Changes:
=====================================
client-validation/src/main/resources/fr/ird/observe/services/dto/seine/FloatingObjectDto-create-error-validation.xml
=====================================
--- a/client-validation/src/main/resources/fr/ird/observe/services/dto/seine/FloatingObjectDto-create-error-validation.xml
+++ b/client-validation/src/main/resources/fr/ird/observe/services/dto/seine/FloatingObjectDto-create-error-validation.xml
@@ -82,4 +82,16 @@
</field>
+ <field name="materialsValid">
+
+ <!-- erreurs sur les materiaux -->
+ <field-validator type="fieldexpression">
+ <param name="expression">
+ <![CDATA[ materialsValid ]]>
+ </param>
+ <message>observe.validation.floatingObject.invalid.parts</message>
+ </field-validator>
+
+ </field>
+
</validators>
=====================================
client-validation/src/main/resources/fr/ird/observe/services/dto/seine/FloatingObjectDto-update-error-validation.xml
=====================================
--- a/client-validation/src/main/resources/fr/ird/observe/services/dto/seine/FloatingObjectDto-update-error-validation.xml
+++ b/client-validation/src/main/resources/fr/ird/observe/services/dto/seine/FloatingObjectDto-update-error-validation.xml
@@ -81,4 +81,16 @@
</field-validator>
</field>
+ <field name="materialsValid">
+
+ <!-- erreurs sur les materiaux -->
+ <field-validator type="fieldexpression">
+ <param name="expression">
+ <![CDATA[ materialsValid ]]>
+ </param>
+ <message>observe.validation.floatingObject.invalid.parts</message>
+ </field-validator>
+
+ </field>
+
</validators>
=====================================
client-validation/src/main/resources/i18n/client-validation_en_GB.properties
=====================================
--- a/client-validation/src/main/resources/i18n/client-validation_en_GB.properties
+++ b/client-validation/src/main/resources/i18n/client-validation_en_GB.properties
@@ -102,6 +102,7 @@ observe.validation.encounter.required.species=Species must be filled.
observe.validation.floatingObject.comment.tobig=Comment size can not exceed 1024 characters.
observe.validation.floatingObject.desactivated.objectOperation=Selected operation is disabled.
observe.validation.floatingObject.desactivated.type=Selected type is disabled.
+observe.validation.floatingObject.invalid.parts=There is some errors in materials table.
observe.validation.floatingObject.required.comment.for.balise1=A comment is required for the selected buoy.
observe.validation.floatingObject.required.comment.for.balise2=A comment is required for the selected buoy.
observe.validation.floatingObject.required.comment.for.objectFate=A comment is required for the selected object fate.
=====================================
client-validation/src/main/resources/i18n/client-validation_es_ES.properties
=====================================
--- a/client-validation/src/main/resources/i18n/client-validation_es_ES.properties
+++ b/client-validation/src/main/resources/i18n/client-validation_es_ES.properties
@@ -102,6 +102,7 @@ observe.validation.encounter.required.species=La selección de una especie es ma
observe.validation.floatingObject.comment.tobig=La longitud del campo de comentarios está limitada a 1024 carácteres.
observe.validation.floatingObject.desactivated.objectOperation=Al menos una de las operaciones seleccionadas está desactivada.
observe.validation.floatingObject.desactivated.type=El tipo de objeto seleccionado está desactivado.
+observe.validation.floatingObject.invalid.parts=There is some errors in materials table. \#TODO
observe.validation.floatingObject.required.comment.for.balise1=Se requiere un comentario para la primera baliza (étant donné son type).
observe.validation.floatingObject.required.comment.for.balise2=Se requiere un comentario para la segunda baliza (étant donné son type).
observe.validation.floatingObject.required.comment.for.objectFate=Se requiere un comentario para el devenir.
=====================================
client-validation/src/main/resources/i18n/client-validation_fr_FR.properties
=====================================
--- a/client-validation/src/main/resources/i18n/client-validation_fr_FR.properties
+++ b/client-validation/src/main/resources/i18n/client-validation_fr_FR.properties
@@ -102,6 +102,7 @@ observe.validation.encounter.required.species=La sélection d'une espèce est ob
observe.validation.floatingObject.comment.tobig=La taille du commentaire est limitée à 1024 caractères.
observe.validation.floatingObject.desactivated.objectOperation=Au moins une des opérations sélectionnée est désactivée.
observe.validation.floatingObject.desactivated.type=Le type d'objet sélectionné est désactivé.
+observe.validation.floatingObject.invalid.parts=Erreurs détectées sur le tableau des matériaux.
observe.validation.floatingObject.required.comment.for.balise1=Un commentaire est requis pour la première balise (étant donné son type).
observe.validation.floatingObject.required.comment.for.balise2=Un commentaire est requis pour la seconde balise (étant donné son type).
observe.validation.floatingObject.required.comment.for.objectFate=Un commentaire est requis pour le devenir objet.
=====================================
client/pom.xml
=====================================
--- a/client/pom.xml
+++ b/client/pom.xml
@@ -588,6 +588,11 @@
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.jetbrains</groupId>
+ <artifactId>annotations</artifactId>
+ <version>RELEASE</version>
+ </dependency>
</dependencies>
=====================================
client/src/main/java/fr/ird/observe/client/ui/actions/content/CopyFloatingObjectPartToLeftAction.java
=====================================
--- a/client/src/main/java/fr/ird/observe/client/ui/actions/content/CopyFloatingObjectPartToLeftAction.java
+++ b/client/src/main/java/fr/ird/observe/client/ui/actions/content/CopyFloatingObjectPartToLeftAction.java
@@ -25,7 +25,7 @@ package fr.ird.observe.client.ui.actions.content;
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.impl.seine.FloatingObjectPartsTreeNode;
+import fr.ird.observe.client.ui.content.impl.seine.dcp.FloatingObjectPartsTreeNode;
import fr.ird.observe.client.ui.content.impl.seine.FloatingObjectUI;
import java.util.Enumeration;
import org.apache.commons.logging.Log;
=====================================
client/src/main/java/fr/ird/observe/client/ui/actions/content/CopyFloatingObjectPartToRightAction.java
=====================================
--- a/client/src/main/java/fr/ird/observe/client/ui/actions/content/CopyFloatingObjectPartToRightAction.java
+++ b/client/src/main/java/fr/ird/observe/client/ui/actions/content/CopyFloatingObjectPartToRightAction.java
@@ -25,7 +25,7 @@ package fr.ird.observe.client.ui.actions.content;
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.impl.seine.FloatingObjectPartsTreeNode;
+import fr.ird.observe.client.ui.content.impl.seine.dcp.FloatingObjectPartsTreeNode;
import fr.ird.observe.client.ui.content.impl.seine.FloatingObjectUI;
import java.util.Enumeration;
import org.apache.commons.logging.Log;
=====================================
client/src/main/java/fr/ird/observe/client/ui/content/ContentUIHandler.java
=====================================
--- a/client/src/main/java/fr/ird/observe/client/ui/content/ContentUIHandler.java
+++ b/client/src/main/java/fr/ird/observe/client/ui/content/ContentUIHandler.java
@@ -563,9 +563,7 @@ public abstract class ContentUIHandler<E extends IdDto, U extends ContentUI<E, U
NavigationTreeNodeSupport parentNode = treeHelper.getSelectedNode();
String id = entity.getId();
NavigationTreeNodeSupport node = treeHelper.getChild(parentNode, id);
- if (log.isInfoEnabled()) {
- log.info("will go to node " + node + " for " + id);
- }
+ log.debug("will go to node " + node + " for " + id);
treeHelper.selectNode(node);
}
@@ -602,7 +600,7 @@ public abstract class ContentUIHandler<E extends IdDto, U extends ContentUI<E, U
ImmutableMap.Builder<String, ReferentialReferenceSet<?>> modelReferentialReferenceSets = ImmutableMap.builder();
- log.info("Update referential reference sets for: " + requestName);
+ log.debug("Update referential reference sets for: " + requestName);
// mettre à jour le cache de référentiel
ImmutableMap<Class<?>, ReferentialReferenceSet<?>> referentialReferenceSetsByType = getDataSource().updateReferentialReferenceSetsCache(requestName);
=====================================
client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/FloatingObjectPartsTreeNode.java deleted
=====================================
--- a/client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/FloatingObjectPartsTreeNode.java
+++ /dev/null
@@ -1,105 +0,0 @@
-package fr.ird.observe.client.ui.content.impl.seine;
-
-/*-
- * #%L
- * ObServe :: Client
- * %%
- * Copyright (C) 2008 - 2017 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.services.dto.referential.seine.ObjectMaterialDto;
-import fr.ird.observe.services.dto.seine.ObjectMaterialHierarchyDto;
-import java.util.Iterator;
-import org.jdesktop.swingx.treetable.AbstractMutableTreeTableNode;
-import org.nuiton.decorator.Decorator;
-
-/**
- * Created by tchemit on 30/05/17.
- *
- * @author Tony Chemit - dev(a)tchemit.fr
- */
-public class FloatingObjectPartsTreeNode extends AbstractMutableTreeTableNode implements Iterable<FloatingObjectPartsTreeNode> {
-
- private final FloatingObjectUIModel model;
- private final Decorator<ObjectMaterialDto> decorator;
-
- FloatingObjectPartsTreeNode(Decorator<ObjectMaterialDto> decorator, FloatingObjectUIModel model, ObjectMaterialHierarchyDto userObject) {
- super(userObject);
- this.decorator = decorator;
- this.model = model;
- userObject.getChildren().forEach(u -> add(new FloatingObjectPartsTreeNode(decorator, model, u)));
- }
-
- @Override
- public ObjectMaterialHierarchyDto getUserObject() {
- return (ObjectMaterialHierarchyDto) super.getUserObject();
- }
-
- @Override
- public Object getValueAt(int column) {
- switch (column) {
- case 0: // label
- return decorator.toString(getUserObject());
- case 1: // when arriving
- return model.getWhenArriving().get(getUserObject());
- case 2: // when leaving
- return model.getWhenLeaving().get(getUserObject());
-
-
- }
- return null;
- }
-
- @Override
- public void setValueAt(Object aValue, int column) {
- switch (column) {
- case 1: // when arriving
- model.setWhenArriving(getUserObject().getId(), aValue == null ? null : String.valueOf(aValue));
- break;
- case 2: // when leaving
- model.setWhenLeaving(getUserObject().getId(), aValue == null ? null : String.valueOf(aValue));
- break;
- }
- }
-
- @Override
- public boolean isEditable(int column) {
- boolean result = column > 0 && getUserObject().isSelectable();
- if (result) {
- switch (column) {
- case 1: // when arriving
- result = model.isArriving();
- break;
- case 2: // when leaving
- result = model.isLeaving();
- break;
- }
- }
- return result;
- }
-
- @Override
- public int getColumnCount() {
- return 3;
- }
-
- @Override
- public Iterator<FloatingObjectPartsTreeNode> iterator() {
- return (Iterator) children.iterator();
- }
-}
=====================================
client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/FloatingObjectUI.jaxx
=====================================
--- a/client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/FloatingObjectUI.jaxx
+++ b/client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/FloatingObjectUI.jaxx
@@ -38,6 +38,8 @@
fr.ird.observe.client.ui.actions.global.DeleteDataGlobalUIAction
fr.ird.observe.client.ui.actions.global.ResetDataGlobalUIAction
fr.ird.observe.client.ui.actions.global.SaveDataGlobalUIAction
+ fr.ird.observe.client.ui.content.impl.seine.dcp.FloatingObjectPartsTreeTableModel
+ fr.ird.observe.client.ui.content.impl.seine.dcp.FloatingObjectPartLegendTreeCellRenderer
fr.ird.observe.client.ui.util.JComment
org.jdesktop.swingx.JXTreeTable
@@ -46,6 +48,7 @@
org.nuiton.jaxx.widgets.select.BeanComboBox
java.awt.Dimension
+ javax.swing.ListSelectionModel
static fr.ird.observe.client.ui.UIHelper.getStringValue
static org.nuiton.i18n.I18n.n
@@ -61,7 +64,9 @@
<!-- validator -->
<BeanValidator id='validator' autoField='true' context='create' errorTableModel='{getErrorTableModel()}'
- beanClass='fr.ird.observe.services.dto.seine.FloatingObjectDto'/>
+ beanClass='fr.ird.observe.services.dto.seine.FloatingObjectDto'>
+ <field name="materialsValid" component="tableScroll"/>
+ </BeanValidator>
<!-- formulaire -->
<JPanel id="body" layout='{new BorderLayout()}'>
=====================================
client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/FloatingObjectUI.jcss
=====================================
--- a/client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/FloatingObjectUI.jcss
+++ b/client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/FloatingObjectUI.jcss
@@ -168,3 +168,9 @@ BeanComboBox {
focusable:false;
}
+#table {
+ treeTableModel:{new FloatingObjectPartsTreeTableModel(getModel())};
+ treeCellRenderer:{new FloatingObjectPartLegendTreeCellRenderer()};
+ selectionMode:{ListSelectionModel.SINGLE_SELECTION};
+}
+
=====================================
client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/FloatingObjectUIHandler.java
=====================================
--- a/client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/FloatingObjectUIHandler.java
+++ b/client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/FloatingObjectUIHandler.java
@@ -29,6 +29,10 @@ import fr.ird.observe.client.db.constants.DataContextType;
import fr.ird.observe.client.ui.content.ContentMode;
import fr.ird.observe.client.ui.content.ContentUIHandler;
import fr.ird.observe.client.ui.content.ContentUIModel;
+import fr.ird.observe.client.ui.content.impl.seine.dcp.FloatingObjectPartsTableCellEditor;
+import fr.ird.observe.client.ui.content.impl.seine.dcp.FloatingObjectPartsTableCellRenderer;
+import fr.ird.observe.client.ui.content.impl.seine.dcp.FloatingObjectPartsTreeNode;
+import fr.ird.observe.client.ui.content.impl.seine.dcp.FloatingObjectPartsTreeTableModel;
import fr.ird.observe.client.ui.tree.navigation.NavigationTree;
import fr.ird.observe.client.ui.tree.navigation.nodes.NavigationTreeNodeSupport;
import fr.ird.observe.services.dto.FloatingObjectReference;
@@ -44,9 +48,7 @@ import fr.ird.observe.services.dto.seine.FloatingObjectHelper;
import fr.ird.observe.services.dto.seine.FloatingObjectPartDto;
import fr.ird.observe.services.dto.seine.ObjectMaterialHierarchyDto;
import fr.ird.observe.services.service.data.seine.FloatingObjectService;
-import java.awt.Component;
-import java.util.Arrays;
-import java.util.EventObject;
+import java.awt.Color;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
@@ -55,25 +57,17 @@ import java.util.Optional;
import java.util.Set;
import java.util.TreeMap;
import javax.swing.Icon;
-import javax.swing.JTable;
-import javax.swing.JTree;
import javax.swing.SwingUtilities;
-import javax.swing.event.CellEditorListener;
import javax.swing.event.TableModelListener;
import javax.swing.event.TreeModelEvent;
-import javax.swing.table.TableCellEditor;
-import javax.swing.table.TableCellRenderer;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.log4j.lf5.viewer.categoryexplorer.TreeModelAdapter;
import org.jdesktop.swingx.JXTable;
import org.jdesktop.swingx.JXTreeTable;
+import org.jdesktop.swingx.decorator.ColorHighlighter;
import org.jdesktop.swingx.table.ColumnFactory;
import org.jdesktop.swingx.table.TableColumnExt;
-import org.jdesktop.swingx.tree.DefaultXTreeCellRenderer;
-import org.jdesktop.swingx.treetable.DefaultMutableTreeTableNode;
-import org.jdesktop.swingx.treetable.DefaultTreeTableModel;
-import org.nuiton.decorator.Decorator;
import org.nuiton.jaxx.runtime.spi.UIHandler;
import org.nuiton.jaxx.runtime.swing.SwingUtil;
import org.nuiton.jaxx.validator.swing.SwingValidatorMessage;
@@ -219,13 +213,16 @@ public class FloatingObjectUIHandler extends ContentUIHandler<FloatingObjectDto,
String objectMaterialId = (String) p.getPropertyValue(FloatingObjectPartDto.PROPERTY_OBJECT_MATERIAL + "Id");
String whenArriving = (String) p.getPropertyValue(FloatingObjectPartDto.PROPERTY_WHEN_ARRIVING);
String whenLeaving = (String) p.getPropertyValue(FloatingObjectPartDto.PROPERTY_WHEN_LEAVING);
- model.setWhenArriving(objectMaterialId, whenArriving);
- model.setWhenLeaving(objectMaterialId, whenLeaving);
+ if (whenArriving != null && !Objects.equals("false", whenArriving)) {
+ model.setWhenArriving(objectMaterialId, whenArriving);
+ }
+ if (whenLeaving != null && !Objects.equals("false", whenLeaving)) {
+ model.setWhenLeaving(objectMaterialId, whenLeaving);
+ }
}
- DefaultTreeTableModel treeTableModel = (DefaultTreeTableModel) table.getTreeTableModel();
- // force to reload model
- treeTableModel.setRoot(treeTableModel.getRoot());
+ FloatingObjectPartsTreeTableModel treeTableModel = (FloatingObjectPartsTreeTableModel) table.getTreeTableModel();
+ treeTableModel.reset();
table.expandAll();
}
@@ -373,42 +370,8 @@ public class FloatingObjectUIHandler extends ContentUIHandler<FloatingObjectDto,
private void initTable(List<ObjectMaterialHierarchyDto> materials, JXTreeTable table) {
- DefaultMutableTreeTableNode root = getModel().createRoot(getDecoratorService().getDecoratorByType(ObjectMaterialDto.class), materials);
- DefaultTreeTableModel treeModel = new DefaultTreeTableModel(root, Arrays.asList(
- t("observe.content.floatingObject.table.type"),
- t("observe.common.whenArriving"),
- t("observe.common.whenLeaving"))) {
-
- @Override
- public int getColumnCount() {
- return 3;
- }
-
- @Override
- public Class<?> getColumnClass(int column) {
- switch (column) {
- case 0:
- return String.class;
- case 1:
- case 2:
- return Object.class;
-
- }
- throw new IllegalStateException();
- }
-
- @Override
- public boolean isCellEditable(Object node, int column) {
- if (node instanceof FloatingObjectPartsTreeNode) {
- boolean rowEnabled = ((FloatingObjectPartsTreeNode) node).getUserObject().isEnabled();
- if (!rowEnabled) {
- return false;
- }
- }
- return super.isCellEditable(node, column);
- }
- };
- table.setTreeTableModel(treeModel);
+ FloatingObjectPartsTreeTableModel treeModel = (FloatingObjectPartsTreeTableModel) table.getTreeTableModel();
+ treeModel.rebuildRootNode(materials);
table.setColumnFactory(new ColumnFactory() {
@@ -431,29 +394,26 @@ public class FloatingObjectUIHandler extends ContentUIHandler<FloatingObjectDto,
}
});
- DefaultXTreeCellRenderer cellRenderer = new DefaultXTreeCellRenderer() {
- Decorator<ObjectMaterialDto> decorator = getDecoratorService().getDecoratorByType(ObjectMaterialDto.class);
-
- @Override
- public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) {
- if (!(value instanceof FloatingObjectPartsTreeNode)) {
- return super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
- }
- FloatingObjectPartsTreeNode node = (FloatingObjectPartsTreeNode) value;
- Component result = super.getTreeCellRendererComponent(tree, decorator.toString(node.getUserObject()), sel, expanded, leaf, row, hasFocus);
- result.setEnabled(node.getUserObject().isEnabled());
- return result;
+ table.setDefaultRenderer(Object.class, new FloatingObjectPartsTableCellRenderer(table));
+ table.setDefaultEditor(Object.class, new FloatingObjectPartsTableCellEditor(table));
+ table.addHighlighter(new ColorHighlighter((renderer, adapter) -> {
+ JXTreeTable component = (JXTreeTable) adapter.getComponent();
+ int row = adapter.convertRowIndexToModel(adapter.row);
+ FloatingObjectPartsTreeNode node = (FloatingObjectPartsTreeNode) component.getPathForRow(row).getLastPathComponent();
+ boolean valid1 = node.isValid(1);
+ boolean valid2 = node.isValid(2);
+ boolean valid = valid1 && valid2;
+ switch (adapter.convertRowIndexToModel(adapter.column)) {
+ case 0:
+ return !valid;
+ case 1:
+ return !valid1;
+ case 2:
+ return !valid2;
}
- };
-
- cellRenderer.setLeafIcon(null);
- cellRenderer.setOpenIcon(null);
- cellRenderer.setClosedIcon(null);
- table.setTreeCellRenderer(cellRenderer);
- TableCellRenderer defaultRenderer = new MyRenderer(table.getDefaultRenderer(Boolean.class), table.getDefaultRenderer(String.class));
- table.setDefaultRenderer(Object.class, defaultRenderer);
- table.setDefaultEditor(Object.class, new MyTableCellEditor(table.getDefaultEditor(Boolean.class), table.getDefaultEditor(String.class)));
+ return true;
+ }, Color.RED, Color.WHITE));
}
private FloatingObjectService getFloatingObjectService() {
@@ -486,117 +446,4 @@ public class FloatingObjectUIHandler extends ContentUIHandler<FloatingObjectDto,
return (FloatingObjectUIModel) super.getModel();
}
- private static class MyRenderer implements TableCellRenderer {
-
- private final TableCellRenderer editableRenderer;
-
- private final TableCellRenderer notEditableRenderer;
-
- private MyRenderer(TableCellRenderer editableRenderer, TableCellRenderer notEditableRenderer) {
- this.editableRenderer = editableRenderer;
- this.notEditableRenderer = notEditableRenderer;
- }
-
- @Override
- public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
- FloatingObjectPartsTreeNode node = (FloatingObjectPartsTreeNode) ((JXTreeTable) table).getPathForRow(row).getLastPathComponent();
- Objects.requireNonNull(node);
- TableCellRenderer renderer = notEditableRenderer;
- Object newValue = value;
- boolean enabled = true;
- if (node.getUserObject().getObjectMaterialType() != null && (!node.getUserObject().isEnabled() || table.isCellEditable(row, column))) {
- String objectMaterialType = node.getUserObject().getObjectMaterialType().getId();
- if ("fr.ird.observe.entities.referentiel.seine.ObjectMaterialType#0#0".equals(objectMaterialType)) {
- newValue = value == null ? null : Boolean.valueOf(String.valueOf(value));
- renderer = editableRenderer;
- }
- enabled = node.getUserObject().isEnabled();
- } else {
- newValue = "";
- }
-
- Component component = renderer.getTableCellRendererComponent(table, newValue, isSelected, hasFocus, row, column);
- component.setEnabled(enabled);
- return component;
- }
- }
-
- private static class MyTableCellEditor implements TableCellEditor {
-
-
- private final TableCellEditor booleanEditor;
- private final TableCellEditor stringEditor;
-
- TableCellEditor editor = null;
-
- MyTableCellEditor(TableCellEditor booleanEditor, TableCellEditor StringEditor) {
- this.booleanEditor = booleanEditor;
- stringEditor = StringEditor;
- }
-
- @Override
- public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
- FloatingObjectPartsTreeNode node = (FloatingObjectPartsTreeNode) ((JXTreeTable) table).getPathForRow(row).getLastPathComponent();
- String objectMaterialType = node.getUserObject().getObjectMaterialType().getId();
-
- switch (objectMaterialType) {
- case "fr.ird.observe.entities.referentiel.seine.ObjectMaterialType#0#0": //boolean
- editor = booleanEditor;
- break;
- case "fr.ird.observe.entities.referentiel.seine.ObjectMaterialType#0#1": // decimal one digit
- editor = stringEditor;
- break;
- case "fr.ird.observe.entities.referentiel.seine.ObjectMaterialType#0#2": // integer
- editor = stringEditor;
- break;
- case "fr.ird.observe.entities.referentiel.seine.ObjectMaterialType#0#3": // string
- editor = stringEditor;
- break;
- default:
- throw new IllegalStateException("Can't manage type: " + objectMaterialType);
-
- }
- return editor.getTableCellEditorComponent(table, value, isSelected, row, column);
- }
-
- @Override
- public Object getCellEditorValue() {
- Object o = editor == null ? null : editor.getCellEditorValue();
- return o == null ? null : String.valueOf(o);
- }
-
- @Override
- public boolean isCellEditable(EventObject anEvent) {
- return stringEditor.isCellEditable(anEvent) || booleanEditor.isCellEditable(anEvent);
- }
-
- @Override
- public boolean shouldSelectCell(EventObject anEvent) {
- return true;
- }
-
- @Override
- public boolean stopCellEditing() {
- return editor != null && editor.stopCellEditing();
- }
-
- @Override
- public void cancelCellEditing() {
- if (editor != null) {
- editor.cancelCellEditing();
- }
- }
-
- @Override
- public void addCellEditorListener(CellEditorListener l) {
- stringEditor.addCellEditorListener(l);
- booleanEditor.addCellEditorListener(l);
- }
-
- @Override
- public void removeCellEditorListener(CellEditorListener l) {
- stringEditor.removeCellEditorListener(l);
- booleanEditor.removeCellEditorListener(l);
- }
- }
}
=====================================
client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/FloatingObjectUIModel.java
=====================================
--- a/client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/FloatingObjectUIModel.java
+++ b/client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/FloatingObjectUIModel.java
@@ -33,17 +33,14 @@ import fr.ird.observe.services.dto.constants.ReferentialLocale;
import fr.ird.observe.services.dto.referential.seine.ObjectMaterialDto;
import fr.ird.observe.services.dto.seine.FloatingObjectDto;
import fr.ird.observe.services.dto.seine.FloatingObjectPartDto;
-import fr.ird.observe.services.dto.seine.ObjectMaterialHierarchyDto;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
-import java.util.List;
import java.util.Map;
+import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.jdesktop.swingx.treetable.DefaultMutableTreeTableNode;
-import org.nuiton.decorator.Decorator;
import static org.nuiton.i18n.I18n.t;
@@ -52,12 +49,18 @@ import static org.nuiton.i18n.I18n.t;
* Created on 9/28/14.
*
* @author Tony Chemit - dev(a)tchemit.fr
- * @since XXX
+ * @since 3.0
*/
public class FloatingObjectUIModel extends ContentUIModel<FloatingObjectDto> {
private static final long serialVersionUID = 1L;
+
static final String PROPERTY_PARTS_MODIFIED = "partsModified";
+ public static final String PROPERTY_GENERAL_TAB_VALID = "generalTabValid";
+ private static final String PROPERTY_MATERIALS_TAB_VALID = "materialsTabValid";
+ static final String PROPERTY_REFERENCE = "reference";
+ private static final String PROPERTY_ARRIVING = "arriving";
+ private static final String PROPERTY_LEAVING = "leaving";
private final ReferenceBinderEngine referenceBinderEngine;
private final ReferentialLocale referentialLocale;
@@ -67,6 +70,7 @@ public class FloatingObjectUIModel extends ContentUIModel<FloatingObjectDto> {
private boolean arriving;
private boolean leaving;
+
public FloatingObjectUIModel() {
super(FloatingObjectDto.class);
@@ -77,20 +81,13 @@ public class FloatingObjectUIModel extends ContentUIModel<FloatingObjectDto> {
this.whenLeaving = new LinkedHashMap<>();
}
- public static final String PROPERTY_GENERAL_TAB_VALID = "generalTabValid";
-
- private static final String PROPERTY_MATERIALS_TAB_VALID = "materialsTabValid";
- static final String PROPERTY_REFERENCE = "reference";
- private static final String PROPERTY_ARRIVING = "arriving";
- private static final String PROPERTY_LEAVING = "leaving";
-
public static final Set<String> GENERAL_TAB_PROPERTIES =
ImmutableSet.<String>builder().add(FloatingObjectDto.PROPERTY_OBJECT_OPERATION,
FloatingObjectDto.PROPERTY_SUPPORT_VESSEL_NAME,
FloatingObjectDto.PROPERTY_COMMENT).build();
static final Set<String> MATERIALS_TAB_PROPERTIES =
- ImmutableSet.<String>builder().add(FloatingObjectDto.PROPERTY_COMMENT).build();
+ ImmutableSet.<String>builder().add(FloatingObjectDto.PROPERTY_COMMENT, FloatingObjectDto.PROPERTY_MATERIALS_VALID).build();
protected boolean generalTabValid;
private boolean materialsTabValid;
@@ -141,6 +138,7 @@ public class FloatingObjectUIModel extends ContentUIModel<FloatingObjectDto> {
public void reset() {
whenArriving.clear();
whenLeaving.clear();
+ getBean().setMaterialsValid(true);
fireComputedValuesChanged();
}
@@ -162,39 +160,27 @@ public class FloatingObjectUIModel extends ContentUIModel<FloatingObjectDto> {
}
public Set<ObjectMaterialDto> getAll() {
- Set<ObjectMaterialDto> alls = new LinkedHashSet<>(whenArriving.keySet());
- alls.addAll(whenLeaving.keySet());
- return alls;
+ Set<ObjectMaterialDto> all = new LinkedHashSet<>(whenArriving.keySet());
+ all.addAll(whenLeaving.keySet());
+ return all;
}
void setReferentialMap(Map<String, ObjectMaterialDto> referentialMap) {
this.referentialMap = referentialMap;
}
- void setWhenArriving(String id, String value) {
+ public void setWhenArriving(String id, String value) {
ObjectMaterialDto dto = referentialMap.get(id);
- if (dto == null) {
- return;
- }
+ Objects.requireNonNull(dto);
whenArriving.put(dto, value);
}
- void setWhenLeaving(String id, String value) {
+ public void setWhenLeaving(String id, String value) {
ObjectMaterialDto dto = referentialMap.get(id);
- if (dto == null) {
- return;
- }
+ Objects.requireNonNull(dto);
whenLeaving.put(dto, value);
}
- DefaultMutableTreeTableNode createRoot(Decorator<ObjectMaterialDto> decoratorByType, List<ObjectMaterialHierarchyDto> referential) {
- DefaultMutableTreeTableNode root = new DefaultMutableTreeTableNode();
- for (ObjectMaterialHierarchyDto dto : referential) {
- root.add(new FloatingObjectPartsTreeNode(decoratorByType, this, dto));
- }
- return root;
- }
-
public Optional<FloatingObjectReference> getReference() {
return Optional.ofNullable(reference);
}
@@ -273,4 +259,5 @@ public class FloatingObjectUIModel extends ContentUIModel<FloatingObjectDto> {
bean.setComputedWhenLeavingSimplifiedObjectType(null);
fireComputedValuesChanged();
}
+
}
=====================================
client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/dcp/FloatingObjectPartLegendTreeCellRenderer.java
=====================================
--- /dev/null
+++ b/client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/dcp/FloatingObjectPartLegendTreeCellRenderer.java
@@ -0,0 +1,64 @@
+package fr.ird.observe.client.ui.content.impl.seine.dcp;
+
+/*-
+ * #%L
+ * ObServe :: Client
+ * %%
+ * Copyright (C) 2008 - 2017 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.client.ObserveSwingApplicationContext;
+import fr.ird.observe.services.dto.referential.seine.ObjectMaterialDto;
+import java.awt.Component;
+import javax.swing.JTree;
+import org.jdesktop.swingx.tree.DefaultXTreeCellRenderer;
+import org.nuiton.decorator.Decorator;
+
+/**
+ * Created by tchemit on 05/08/17.
+ *
+ * @author Tony Chemit - dev(a)tchemit.fr
+ * @since 7.0
+ */
+public class FloatingObjectPartLegendTreeCellRenderer extends DefaultXTreeCellRenderer {
+
+ private Decorator<ObjectMaterialDto> decorator;
+
+ public FloatingObjectPartLegendTreeCellRenderer() {
+ super();
+ setLeafIcon(null);
+ setOpenIcon(null);
+ setClosedIcon(null);
+ }
+
+ @Override
+ public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) {
+ FloatingObjectPartsTreeNode node = (FloatingObjectPartsTreeNode) value;
+ Component result = super.getTreeCellRendererComponent(tree, getDecorator().toString(node.getValueAt(0)), sel, expanded, leaf, row, hasFocus);
+ result.setEnabled(node.isEnabled());
+ return result;
+ }
+
+ private Decorator<ObjectMaterialDto> getDecorator() {
+ if (decorator == null) {
+ decorator = ObserveSwingApplicationContext.get().getDecoratorService().getDecoratorByType(ObjectMaterialDto.class);
+ }
+ return decorator;
+ }
+
+}
=====================================
client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/dcp/FloatingObjectPartsTableCellEditor.java
=====================================
--- /dev/null
+++ b/client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/dcp/FloatingObjectPartsTableCellEditor.java
@@ -0,0 +1,140 @@
+package fr.ird.observe.client.ui.content.impl.seine.dcp;
+
+/*-
+ * #%L
+ * ObServe :: Client
+ * %%
+ * Copyright (C) 2008 - 2017 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 com.google.common.collect.ImmutableSet;
+import fr.ird.observe.client.ui.UIHelper;
+import fr.ird.observe.client.ui.util.treetable.JRadioButtonCellEditor;
+import java.awt.Component;
+import java.util.EventObject;
+import java.util.Objects;
+import javax.swing.JTable;
+import javax.swing.event.CellEditorListener;
+import javax.swing.table.TableCellEditor;
+import org.jdesktop.swingx.JXTreeTable;
+import org.nuiton.jaxx.widgets.number.NumberCellEditor;
+
+/**
+ * Created by tchemit on 05/08/17.
+ *
+ * @author Tony Chemit - dev(a)tchemit.fr
+ * @since 7.0
+ */
+public class FloatingObjectPartsTableCellEditor implements TableCellEditor {
+
+ private final TableCellEditor booleanEditor;
+ private final TableCellEditor stringEditor;
+ private final TableCellEditor radioEditor;
+ private final TableCellEditor intEditor;
+ private final TableCellEditor floatEditor;
+ private TableCellEditor editor;
+
+ private final ImmutableSet<TableCellEditor> editors;
+
+ public FloatingObjectPartsTableCellEditor(JXTreeTable table) {
+ // register as a default editors to get correct integration with ui
+ table.setDefaultEditor(boolean.class, new JRadioButtonCellEditor());
+ table.setDefaultEditor(int.class, new IntegerCellEditor());
+ table.setDefaultEditor(float.class, new FloatCellEditor());
+
+ ImmutableSet.Builder<TableCellEditor> editorBuilder = ImmutableSet.builder();
+
+ editorBuilder.add(this.booleanEditor = table.getDefaultEditor(Boolean.class));
+ editorBuilder.add(this.stringEditor = table.getDefaultEditor(Object.class));
+ editorBuilder.add(this.radioEditor = table.getDefaultEditor(boolean.class));
+ editorBuilder.add(this.intEditor = table.getDefaultEditor(int.class));
+ editorBuilder.add(this.floatEditor = table.getDefaultEditor(float.class));
+ this.editors = editorBuilder.build();
+ }
+
+ @Override
+ public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
+ FloatingObjectPartsTreeNode node = (FloatingObjectPartsTreeNode) ((JXTreeTable) table).getPathForRow(row).getLastPathComponent();
+
+ if (node.isBoolean()) {
+ editor = node.isExclusive() ? radioEditor : booleanEditor;
+ } else if (node.isText()) {
+ editor = stringEditor;
+ } else if (node.isFloat()) {
+ editor = floatEditor;
+ } else if (node.isInteger()) {
+ editor = intEditor;
+ } else {
+ throw new IllegalStateException("Can't manage type: " + node.getObjectMaterialType());
+ }
+ return editor.getTableCellEditorComponent(table, value, isSelected, row, column);
+ }
+
+ @Override
+ public Object getCellEditorValue() {
+ Object o = editor == null ? null : editor.getCellEditorValue();
+ return o == null ? null : Objects.equals(false, o) ? null : String.valueOf(o);
+ }
+
+ @Override
+ public boolean isCellEditable(EventObject anEvent) {
+ return editors.stream().anyMatch(e -> e.isCellEditable(anEvent));
+ }
+
+ @Override
+ public boolean shouldSelectCell(EventObject anEvent) {
+ return true;
+ }
+
+ @Override
+ public boolean stopCellEditing() {
+ return editor != null && editor.stopCellEditing();
+ }
+
+ @Override
+ public void cancelCellEditing() {
+ if (editor != null) {
+ editor.cancelCellEditing();
+ }
+ }
+
+ @Override
+ public void addCellEditorListener(CellEditorListener l) {
+ editors.forEach(e -> e.addCellEditorListener(l));
+ }
+
+ @Override
+ public void removeCellEditorListener(CellEditorListener l) {
+ editors.forEach(e -> e.removeCellEditorListener(l));
+ }
+
+ private static class IntegerCellEditor extends NumberCellEditor<Integer> {
+ IntegerCellEditor() {
+ super(Integer.class, false);
+ numberEditor.setNumberPattern(UIHelper.INT_6_DIGITS_PATTERN);
+ }
+ }
+
+ private static class FloatCellEditor extends NumberCellEditor<Float> {
+ FloatCellEditor() {
+ super(Float.class, false);
+ numberEditor.setNumberPattern(UIHelper.DECIMAL1_PATTERN);
+ }
+ }
+
+}
=====================================
client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/dcp/FloatingObjectPartsTableCellRenderer.java
=====================================
--- /dev/null
+++ b/client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/dcp/FloatingObjectPartsTableCellRenderer.java
@@ -0,0 +1,78 @@
+package fr.ird.observe.client.ui.content.impl.seine.dcp;
+
+/*-
+ * #%L
+ * ObServe :: Client
+ * %%
+ * Copyright (C) 2008 - 2017 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.client.ui.util.treetable.JRadioButtonProvider;
+import fr.ird.observe.services.dto.seine.ObjectMaterialHierarchyDto;
+import java.awt.Component;
+import java.util.Objects;
+import javax.swing.JTable;
+import javax.swing.table.TableCellRenderer;
+import org.jdesktop.swingx.JXTreeTable;
+import org.jdesktop.swingx.renderer.DefaultTableRenderer;
+
+/**
+ * Created by tchemit on 05/08/17.
+ *
+ * @author Tony Chemit - dev(a)tchemit.fr
+ * @since 7.0
+ */
+public class FloatingObjectPartsTableCellRenderer implements TableCellRenderer {
+
+ // Render booleans (inclusive)
+ private final TableCellRenderer booleanInclusiveRenderer;
+ // Render booleans (exclusive)
+ private final TableCellRenderer booleanExclusiveRenderer;
+ // Render anything else
+ private final TableCellRenderer objectRenderer;
+
+ public FloatingObjectPartsTableCellRenderer(JXTreeTable table) {
+ // register as a default renderer to get correct integration with ui
+ table.setDefaultRenderer(boolean.class, new DefaultTableRenderer(new JRadioButtonProvider()));
+ this.booleanInclusiveRenderer = table.getDefaultRenderer(Boolean.class);
+ this.objectRenderer = table.getDefaultRenderer(Object.class);
+ this.booleanExclusiveRenderer = table.getDefaultRenderer(boolean.class);
+ }
+
+ @Override
+ public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
+ FloatingObjectPartsTreeNode node = (FloatingObjectPartsTreeNode) ((JXTreeTable) table).getPathForRow(row).getLastPathComponent();
+ Objects.requireNonNull(node);
+ TableCellRenderer renderer = objectRenderer;
+ Object newValue = value;
+ boolean enabled = true;
+ if (node.isEditable() && table.isCellEditable(row, column)) {
+ if (node.isBoolean()) {
+ newValue = value == null ? null : Boolean.valueOf(String.valueOf(value));
+ renderer = node.isExclusive() ? booleanExclusiveRenderer : booleanInclusiveRenderer;
+ }
+ enabled = node.isEnabled();
+ } else {
+ newValue = "";
+ }
+
+ Component component = renderer.getTableCellRendererComponent(table, newValue, isSelected, hasFocus, row, column);
+ component.setEnabled(enabled);
+ return component;
+ }
+}
=====================================
client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/dcp/FloatingObjectPartsTreeNode.java
=====================================
--- /dev/null
+++ b/client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/dcp/FloatingObjectPartsTreeNode.java
@@ -0,0 +1,361 @@
+package fr.ird.observe.client.ui.content.impl.seine.dcp;
+
+/*-
+ * #%L
+ * ObServe :: Client
+ * %%
+ * Copyright (C) 2008 - 2017 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 com.google.common.collect.ImmutableSet;
+import fr.ird.observe.client.ui.content.impl.seine.FloatingObjectUIModel;
+import fr.ird.observe.services.dto.reference.ReferentialReference;
+import fr.ird.observe.services.dto.referential.seine.ObjectMaterialTypeDto;
+import fr.ird.observe.services.dto.seine.ObjectMaterialHierarchyDto;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.jdesktop.swingx.treetable.AbstractMutableTreeTableNode;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * Created by tchemit on 30/05/17.
+ *
+ * @author Tony Chemit - dev(a)tchemit.fr
+ */
+public class FloatingObjectPartsTreeNode extends AbstractMutableTreeTableNode implements Iterable<FloatingObjectPartsTreeNode> {
+
+ /** Logger. */
+ private static final Log log = LogFactory.getLog(FloatingObjectPartsTreeNode.class);
+
+ static FloatingObjectPartsTreeNode createRoot(FloatingObjectUIModel model, List<ObjectMaterialHierarchyDto> referential) {
+ FloatingObjectPartsTreeNodeContext rootModel = new FloatingObjectPartsTreeNodeContext(model);
+ FloatingObjectPartsTreeNode root = new FloatingObjectPartsTreeNode(rootModel);
+ if (referential != null) {
+ for (ObjectMaterialHierarchyDto dto : referential) {
+ FloatingObjectPartsTreeNodeContext childModel = new FloatingObjectPartsTreeNodeContext(dto, rootModel);
+ FloatingObjectPartsTreeNode node = new FloatingObjectPartsTreeNode(childModel);
+ root.add(node);
+ ImmutableSet.Builder<FloatingObjectPartsTreeNode> companionsBuilder = dto.isChildrenMultiSelectable() ? ImmutableSet.builder() : null;
+ node.computeCompanions(companionsBuilder);
+ node.setCompanions(companionsBuilder);
+ }
+ }
+ return root;
+ }
+
+ boolean isNotValid() {
+ return !(getUserObject().validWhenArriving && getUserObject().validWhenLeaving);
+ }
+
+ private static class FloatingObjectPartsTreeNodeContext {
+
+ // main model to get and store values
+ private final FloatingObjectUIModel uiModel;
+ // dto (null for root)
+ private final ObjectMaterialHierarchyDto dto;
+ // Is the node is enabled (hierarchic value) ?
+ private final boolean enabled;
+ // Is this node editable ?
+ private final boolean editable;
+ // Is this node need at least one child selected ?
+ private final boolean needOneSelection;
+ // Is this node in the path of at least one mandatory child ancestor ?
+ private final boolean mandatory;
+ // Is the node is exclusive (means only one value possible for him and his brothers) ?
+ private final boolean exclusive;
+ // Is the node valid for whenArriving column ?
+ private boolean validWhenArriving = true;
+ // Is the node valid for whenLeaving column ?
+ private boolean validWhenLeaving = true;
+ // Set of brothers of this node that is in a exclusive group of node (only one value among all of them)
+ private ImmutableSet<FloatingObjectPartsTreeNode> companions;
+ // Internal to store debug node text
+ private String text;
+
+ FloatingObjectPartsTreeNodeContext(FloatingObjectUIModel uiModel) {
+ Objects.requireNonNull(uiModel);
+ this.uiModel = uiModel;
+ this.dto = null;
+ this.enabled = true;
+ this.editable = false;
+ this.mandatory = false;
+ this.exclusive = false;
+ this.needOneSelection = false;
+ }
+
+ FloatingObjectPartsTreeNodeContext(ObjectMaterialHierarchyDto dto, FloatingObjectPartsTreeNodeContext parent) {
+ Objects.requireNonNull(dto);
+ Objects.requireNonNull(parent);
+ this.uiModel = parent.uiModel;
+ this.dto = dto;
+ // enabled if parent is enabled and dto is enabled
+ this.enabled = parent.enabled && dto.isEnabled();
+ // need one selection if is enabled and dto requires it
+ this.needOneSelection = enabled && dto.isChildSelectionMandatory();
+ // editable if dto is selectable (we also make sure that the object material type is here too)
+ this.editable = dto.isSelectable() && dto.getObjectMaterialType() != null;
+ // mandatory if enabled parent is so or parent makes this child to be
+ this.mandatory = parent.mandatory || parent.needOneSelection;
+ // exclusive if his parent requires it
+ this.exclusive = parent.dto != null && parent.dto.isChildrenMultiSelectable();
+ log.info(String.format("New node: %s - mandatory %s - needOneSelection %s - exclusive %s", dto.getLabel2(), mandatory, needOneSelection, exclusive));
+ }
+
+ Object getValueAt(int column) {
+ switch (column) {
+ case 0: // dto
+ return dto;
+ case 1: // when arriving
+ return uiModel.getWhenArriving().get(dto);
+ case 2: // when leaving
+ return uiModel.getWhenLeaving().get(dto);
+ }
+ throw new IllegalStateException();
+ }
+
+ void setValueAt(Object aValue, int column) {
+ switch (column) {
+ case 1: // when arriving
+ uiModel.setWhenArriving(dto.getId(), aValue == null ? null : String.valueOf(aValue));
+ return;
+ case 2: // when leaving
+ uiModel.setWhenLeaving(dto.getId(), aValue == null ? null : String.valueOf(aValue));
+ return;
+ }
+ throw new IllegalStateException();
+ }
+
+ boolean isColumnEditable(int column) {
+ switch (column) {
+ case 1: // when arriving
+ return uiModel.isArriving();
+ case 2: // when leaving
+ return uiModel.isLeaving();
+ }
+ throw new IllegalStateException();
+ }
+
+ boolean isValid(int column) {
+ switch (column) {
+ case 1: // when arriving
+ return validWhenArriving;
+ case 2: // when leaving
+ return validWhenLeaving;
+ }
+ throw new IllegalStateException();
+ }
+
+ Optional<FloatingObjectPartsTreeNode> getSelectedCompanion(int column) {
+ return companions.stream().filter(n -> n.getValueAt(column) != null).findFirst();
+ }
+
+ public String getText() {
+ if (text == null && dto != null) {
+ text = String.format("%s [value: %s-%s] [valid: %s-%s]", dto.getLabel2(), getValueAt(1), getValueAt(2), isValid(1), isValid(2));
+ }
+ return text;
+ }
+
+ }
+
+ private FloatingObjectPartsTreeNode(FloatingObjectPartsTreeNodeContext context) {
+ super(context);
+ if (context.dto != null) {
+ for (ObjectMaterialHierarchyDto dto : context.dto.getChildren()) {
+ FloatingObjectPartsTreeNodeContext childContext = new FloatingObjectPartsTreeNodeContext(dto, context);
+ add(new FloatingObjectPartsTreeNode(childContext));
+ }
+ }
+ }
+
+ @Override
+ public String toString() {
+ return getUserObject().getText();
+ }
+
+ @Override
+ public FloatingObjectPartsTreeNodeContext getUserObject() {
+ return (FloatingObjectPartsTreeNodeContext) super.getUserObject();
+ }
+
+ @Override
+ public Object getValueAt(int column) {
+ return getUserObject().getValueAt(column);
+ }
+
+ @Override
+ public void setValueAt(Object aValue, int column) {
+ getUserObject().setValueAt(aValue, column);
+ }
+
+ @Override
+ public boolean isEditable(int column) {
+ return column > 0 && getUserObject().enabled && getUserObject().editable && isColumnEditable(column);
+ }
+
+ private boolean isColumnEditable(int column) {
+ return getUserObject().isColumnEditable(column);
+ }
+
+ @Override
+ public int getColumnCount() {
+ return 3;
+ }
+
+ @SuppressWarnings({"unchecked"})
+ @Override
+ @NotNull
+ public Iterator<FloatingObjectPartsTreeNode> iterator() {
+ return (Iterator) (children == null ? Collections.emptyIterator() : children.iterator());
+ }
+
+ public boolean isValid(int column) {
+ return getUserObject().isValid(column);
+ }
+
+ boolean isExclusive() {
+ return getUserObject().exclusive;
+ }
+
+ public boolean isEditable() {
+ return getUserObject().editable;
+ }
+
+ public boolean isEnabled() {
+ return getUserObject().enabled;
+ }
+
+ public String getId() {
+ return getUserObject().dto.getId();
+ }
+
+ public boolean isBoolean() {
+ return getUserObject().dto.isBoolean();
+ }
+
+ public boolean isText() {
+ return getUserObject().dto.isText();
+ }
+
+ public boolean isInteger() {
+ return getUserObject().dto.isInteger();
+ }
+
+ public boolean isFloat() {
+ return getUserObject().dto.isFloat();
+ }
+
+ ReferentialReference<ObjectMaterialTypeDto> getObjectMaterialType() {
+ return getUserObject().dto.getObjectMaterialType();
+ }
+
+ Optional<FloatingObjectPartsTreeNode> getSelectedCompanion(int column) {
+ return getUserObject().getSelectedCompanion(column);
+ }
+
+ void resetStates() {
+ getUserObject().text = null;
+ getUserObject().validWhenArriving = true;
+ getUserObject().validWhenLeaving = true;
+ }
+
+ @Override
+ public FloatingObjectPartsTreeNode getParent() {
+ return (FloatingObjectPartsTreeNode) super.getParent();
+ }
+
+ void fillNodeSets(ImmutableSet.Builder<FloatingObjectPartsTreeNode> allNodesBuilder,
+ ImmutableSet.Builder<FloatingObjectPartsTreeNode> needOneSelectionNodesBuilder,
+ ImmutableSet.Builder<FloatingObjectPartsTreeNode> mandatoryNodesBuilder) {
+
+ allNodesBuilder.add(this);
+ if (getUserObject().needOneSelection) {
+ needOneSelectionNodesBuilder.add(this);
+ }
+ if (getUserObject().mandatory) {
+ mandatoryNodesBuilder.add(this);
+ }
+
+ for (FloatingObjectPartsTreeNode child : this) {
+ child.fillNodeSets(allNodesBuilder, needOneSelectionNodesBuilder, mandatoryNodesBuilder);
+ }
+
+ }
+
+ void computeNeedAtLeastOnSelectValidState(boolean whenArriving, boolean whenLeaving) {
+
+ if (whenArriving) {
+ getUserObject().validWhenArriving = isAtLeastOneSelected(1);
+ }
+ if (whenLeaving) {
+ getUserObject().validWhenLeaving = isAtLeastOneSelected(2);
+ }
+
+ log.info("Validate node " + this);
+
+ }
+
+ void computeMandatoryValidState(boolean whenArriving, boolean whenLeaving) {
+ if (whenArriving) {
+ getUserObject().validWhenArriving = getParent().getUserObject().validWhenArriving;
+ }
+ if (whenLeaving) {
+ getUserObject().validWhenLeaving = getParent().getUserObject().validWhenLeaving;
+ }
+
+ log.info("Validate node " + this);
+ }
+
+ private void setCompanions(ImmutableSet.Builder<FloatingObjectPartsTreeNode> companionsBuilder) {
+ if (companionsBuilder != null) {
+ ImmutableSet<FloatingObjectPartsTreeNode> companions = companionsBuilder.build();
+ for (FloatingObjectPartsTreeNode child : this) {
+ child.getUserObject().companions = companions;
+ }
+ }
+ }
+
+ private boolean isAtLeastOneSelected(int column) {
+ if (getValueAt(column) != null) {
+ return true;
+ }
+ for (FloatingObjectPartsTreeNode child : this) {
+ if (child.isAtLeastOneSelected(column)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private void computeCompanions(ImmutableSet.Builder<FloatingObjectPartsTreeNode> companionsBuilder) {
+ if (companionsBuilder != null) {
+ companionsBuilder.add(this);
+ }
+
+ ImmutableSet.Builder<FloatingObjectPartsTreeNode> childCompanionsBuilder = getUserObject().dto.isChildrenMultiSelectable() ? ImmutableSet.builder() : null;
+ for (FloatingObjectPartsTreeNode child : this) {
+ child.computeCompanions(childCompanionsBuilder);
+ }
+ setCompanions(childCompanionsBuilder);
+ }
+}
=====================================
client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/dcp/FloatingObjectPartsTreeTableModel.java
=====================================
--- /dev/null
+++ b/client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/dcp/FloatingObjectPartsTreeTableModel.java
@@ -0,0 +1,131 @@
+package fr.ird.observe.client.ui.content.impl.seine.dcp;
+
+/*-
+ * #%L
+ * ObServe :: Client
+ * %%
+ * Copyright (C) 2008 - 2017 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 com.google.common.collect.ImmutableSet;
+import fr.ird.observe.client.ui.content.impl.seine.FloatingObjectUIModel;
+import fr.ird.observe.services.dto.seine.ObjectMaterialHierarchyDto;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.jdesktop.swingx.treetable.DefaultTreeTableModel;
+import org.jdesktop.swingx.treetable.TreeTableNode;
+import org.nuiton.i18n.I18n;
+
+/**
+ * Created by tchemit on 05/08/17.
+ *
+ * @author Tony Chemit - dev(a)tchemit.fr
+ * @since 7.0
+ */
+public class FloatingObjectPartsTreeTableModel extends DefaultTreeTableModel {
+
+ /** Logger. */
+ private static final Log log = LogFactory.getLog(FloatingObjectPartsTreeTableModel.class);
+
+ private final FloatingObjectUIModel uiModel;
+
+ private ImmutableSet<FloatingObjectPartsTreeNode> allNodes;
+ private ImmutableSet<FloatingObjectPartsTreeNode> needOneSelectionNodes;
+ private ImmutableSet<FloatingObjectPartsTreeNode> mandatoryNodes;
+
+ public FloatingObjectPartsTreeTableModel(FloatingObjectUIModel uiModel) {
+ super(FloatingObjectPartsTreeNode.createRoot(uiModel, Collections.emptyList()), Arrays.asList(
+ I18n.t("observe.content.floatingObject.table.type"),
+ I18n.t("observe.common.whenArriving"),
+ I18n.t("observe.common.whenLeaving")));
+ this.uiModel = uiModel;
+ }
+
+ @Override
+ public FloatingObjectPartsTreeNode getRoot() {
+ return (FloatingObjectPartsTreeNode) super.getRoot();
+ }
+
+ public void rebuildRootNode(List<ObjectMaterialHierarchyDto> materials) {
+ FloatingObjectPartsTreeNode root = FloatingObjectPartsTreeNode.createRoot(uiModel, materials);
+ setRoot(root);
+ }
+
+ @Override
+ public void setRoot(TreeTableNode root) {
+ super.setRoot(root);
+
+ FloatingObjectPartsTreeNode myRoot = (FloatingObjectPartsTreeNode) root;
+
+ ImmutableSet.Builder<FloatingObjectPartsTreeNode> allNodesBuilder = ImmutableSet.builder();
+ ImmutableSet.Builder<FloatingObjectPartsTreeNode> needOneSelectionNodesBuilder = ImmutableSet.builder();
+ ImmutableSet.Builder<FloatingObjectPartsTreeNode> mandatoryNodesBuilder = ImmutableSet.builder();
+
+ myRoot.fillNodeSets(allNodesBuilder, needOneSelectionNodesBuilder, mandatoryNodesBuilder);
+
+ allNodes = allNodesBuilder.build();
+ needOneSelectionNodes = needOneSelectionNodesBuilder.build();
+ mandatoryNodes = mandatoryNodesBuilder.build();
+ }
+
+ @Override
+ public int getColumnCount() {
+ return 3;
+ }
+
+ @Override
+ public Class<?> getColumnClass(int column) {
+ switch (column) {
+ case 0:
+ return String.class;
+ case 1:
+ case 2:
+ return Object.class;
+ }
+ throw new IllegalStateException();
+ }
+
+ @Override
+ public void setValueAt(Object value, Object node, int column) {
+ FloatingObjectPartsTreeNode treeNode = (FloatingObjectPartsTreeNode) node;
+ Optional<FloatingObjectPartsTreeNode> previousNode = treeNode.isExclusive() && value != null ? treeNode.getSelectedCompanion(column) : Optional.empty();
+ previousNode.ifPresent(p -> log.info("Previous selected node: " + p));
+ super.setValueAt(value, node, column);
+ previousNode.ifPresent(t -> super.setValueAt(null, t, column));
+ reset();
+ uiModel.setModified(true);
+ }
+
+ public void reset() {
+ allNodes.forEach(FloatingObjectPartsTreeNode::resetStates);
+
+ boolean whenArriving = uiModel.isArriving();
+ boolean whenLeaving = uiModel.isLeaving();
+
+ needOneSelectionNodes.forEach(n -> n.computeNeedAtLeastOnSelectValidState(whenArriving, whenLeaving));
+ mandatoryNodes.forEach(n -> n.computeMandatoryValidState(whenArriving, whenLeaving));
+
+ boolean notValid = allNodes.stream().anyMatch(FloatingObjectPartsTreeNode::isNotValid);
+ uiModel.getBean().setMaterialsValid(!notValid);
+ }
+
+}
=====================================
client/src/main/java/fr/ird/observe/client/ui/util/treetable/JRadioButtonCellEditor.java
=====================================
--- /dev/null
+++ b/client/src/main/java/fr/ird/observe/client/ui/util/treetable/JRadioButtonCellEditor.java
@@ -0,0 +1,159 @@
+package fr.ird.observe.client.ui.util.treetable;
+
+/*-
+ * #%L
+ * ObServe :: Client
+ * %%
+ * Copyright (C) 2008 - 2017 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 java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.awt.event.MouseEvent;
+import java.io.Serializable;
+import java.util.EventObject;
+import javax.swing.AbstractCellEditor;
+import javax.swing.JComponent;
+import javax.swing.JRadioButton;
+import javax.swing.JTable;
+import javax.swing.SwingConstants;
+import javax.swing.table.TableCellEditor;
+import javax.swing.table.TableCellRenderer;
+
+/**
+ * Created by tchemit on 05/08/17.
+ *
+ * @author Tony Chemit - dev(a)tchemit.fr
+ * @since 7.0
+ */
+public class JRadioButtonCellEditor extends AbstractCellEditor implements TableCellEditor {
+
+ private JRadioButton editorComponent;
+ private EditorDelegate delegate;
+
+ public JRadioButtonCellEditor() {
+ editorComponent = new JRadioButton();
+ editorComponent.setHorizontalAlignment(SwingConstants.CENTER);
+ delegate = new EditorDelegate();
+ editorComponent.addActionListener(delegate);
+ editorComponent.setRequestFocusEnabled(false);
+ }
+
+ public Component getComponent() {
+ return editorComponent;
+ }
+
+ @Override
+ public Object getCellEditorValue() {
+ return delegate.getCellEditorValue();
+ }
+
+ @Override
+ public boolean isCellEditable(EventObject anEvent) {
+ return delegate.isCellEditable(anEvent);
+ }
+
+ @Override
+ public boolean shouldSelectCell(EventObject anEvent) {
+ return delegate.shouldSelectCell(anEvent);
+ }
+
+ @Override
+ public boolean stopCellEditing() {
+ return delegate.stopCellEditing();
+ }
+
+ @Override
+ public void cancelCellEditing() {
+ delegate.cancelCellEditing();
+ }
+
+ @Override
+ public Component getTableCellEditorComponent(JTable table, Object value,
+ boolean isSelected,
+ int row, int column) {
+ delegate.setValue(value);
+ //in order to avoid a "flashing" effect when clicking a checkbox
+ //in a table, it is important for the editor to have as a border
+ //the same border that the renderer has, and have as the background
+ //the same color as the renderer has. This is primarily only
+ //needed for JCheckBox since this editor doesn't fill all the
+ //visual space of the table cell, unlike a text field.
+ TableCellRenderer renderer = table.getCellRenderer(row, column);
+ Component c = renderer.getTableCellRendererComponent(table, value, isSelected, true, row, column);
+ if (c != null) {
+ editorComponent.setOpaque(true);
+ editorComponent.setBackground(c.getBackground());
+ if (c instanceof JComponent) {
+ editorComponent.setBorder(((JComponent) c).getBorder());
+ }
+ } else {
+ editorComponent.setOpaque(false);
+ }
+ return editorComponent;
+ }
+
+ protected class EditorDelegate implements ActionListener, ItemListener, Serializable {
+
+ boolean getCellEditorValue() {
+ return editorComponent.isSelected();
+ }
+
+ public void setValue(Object value) {
+
+ boolean selected = false;
+ if (value instanceof Boolean) {
+ selected = (Boolean) value;
+ } else if (value instanceof String) {
+ selected = value.equals("true");
+ }
+ editorComponent.setSelected(selected);
+ }
+
+ public boolean isCellEditable(EventObject anEvent) {
+ return !(anEvent instanceof MouseEvent) || ((MouseEvent) anEvent).getClickCount() > 0;
+ }
+
+ boolean shouldSelectCell(@SuppressWarnings("unused") EventObject ignored) {
+ return true;
+ }
+
+ boolean stopCellEditing() {
+ fireEditingStopped();
+ return true;
+ }
+
+ void cancelCellEditing() {
+ fireEditingCanceled();
+ }
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ this.stopCellEditing();
+ }
+
+ @Override
+ public void itemStateChanged(ItemEvent e) {
+ this.stopCellEditing();
+ }
+ }
+
+}
=====================================
client/src/main/java/fr/ird/observe/client/ui/util/treetable/JRadioButtonProvider.java
=====================================
--- /dev/null
+++ b/client/src/main/java/fr/ird/observe/client/ui/util/treetable/JRadioButtonProvider.java
@@ -0,0 +1,55 @@
+package fr.ird.observe.client.ui.util.treetable;
+
+/*-
+ * #%L
+ * ObServe :: Client
+ * %%
+ * Copyright (C) 2008 - 2017 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 javax.swing.JLabel;
+import javax.swing.JRadioButton;
+import org.jdesktop.swingx.renderer.CellContext;
+import org.jdesktop.swingx.renderer.ComponentProvider;
+
+/**
+ * Created by tchemit on 05/08/17.
+ *
+ * @author Tony Chemit - dev(a)tchemit.fr
+ * @since 7.0
+ */
+public class JRadioButtonProvider extends ComponentProvider<JRadioButton> {
+
+ @Override
+ protected void format(CellContext context) {
+ rendererComponent.setSelected(Boolean.TRUE.equals(context.getValue()));
+ }
+
+ @Override
+ protected void configureState(CellContext context) {
+ rendererComponent.setHorizontalAlignment(JLabel.CENTER);
+ rendererComponent.setBorderPainted(true);
+ }
+
+ @Override
+ protected JRendererRadioButton createRendererComponent() {
+ return new JRendererRadioButton();
+ }
+
+}
=====================================
client/src/main/java/fr/ird/observe/client/ui/util/treetable/JRendererRadioButton.java
=====================================
--- /dev/null
+++ b/client/src/main/java/fr/ird/observe/client/ui/util/treetable/JRendererRadioButton.java
@@ -0,0 +1,275 @@
+package fr.ird.observe.client.ui.util.treetable;
+
+/*-
+ * #%L
+ * ObServe :: Client
+ * %%
+ * Copyright (C) 2008 - 2017 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 java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import javax.swing.JRadioButton;
+import javax.swing.UIManager;
+import org.jdesktop.swingx.painter.Painter;
+import org.jdesktop.swingx.renderer.PainterAware;
+
+/**
+ * Created by tchemit on 05/08/17.
+ *
+ * @author Tony Chemit - dev(a)tchemit.fr
+ * @since 7.0
+ */
+public class JRendererRadioButton extends JRadioButton implements PainterAware {
+ /** the swingx painter */
+ private Painter painter;
+ /** a flag to prevent ui painting from filling the background. */
+ private boolean fakeTransparency;
+
+ JRendererRadioButton() {
+ super();
+ // fix # 1546-swingx: striping lost in synth-based lafs
+ // forcing opaque to enable painting the background
+ setOpaque(true);
+ }
+
+ @Override
+ public Painter getPainter() {
+ return painter;
+ }
+
+ @Override
+ public void setPainter(Painter painter) {
+ Painter old = getPainter();
+ this.painter = painter;
+ firePropertyChange("painter", old, getPainter());
+ }
+
+ /**
+ * Overridden to return false if painting flag is true.<p>
+ */
+ @Override
+ public boolean isOpaque() {
+ return !fakeTransparency && super.isOpaque();
+ }
+
+ /**
+ * Overridden to return false if painting flag is true.<p>
+ */
+ @Override
+ public boolean isContentAreaFilled() {
+ return !fakeTransparency && super.isContentAreaFilled();
+ }
+
+ /**
+ * Overridden to not automatically de/register itself from/to the ToolTipManager.
+ * As rendering component it is not considered to be active in any way, so the
+ * manager must not listen.
+ */
+ @Override
+ public void setToolTipText(String text) {
+ putClientProperty(TOOL_TIP_TEXT_KEY, text);
+ }
+
+ /**
+ * Overridden to snatch painting from super if a painter installed or Nimbus
+ * detected.<p>
+ * <p>
+ * The overall logic currently (since 1.6.5) is to simply call super without SwingX
+ * painter. Otherwise, that is with SwingX painter:
+ * <ol>
+ * <li> if opaque
+ * <ol>
+ * <li> set a flag which fakes transparency, that is both
+ * <code>contentAreaFilled</code> and
+ * <code>opaque</code> return false
+ * <li> fill background with the component's background color
+ * <li> apply swingx painter
+ * <li> hook into <code>ui.paint(...)</code>
+ * <li> reset the flag
+ * </ol>
+ * <li> else
+ * <ol> apply swingx painter
+ * <ol> call super
+ * <li>
+ * <ol>
+ * </ol>
+ * <p>
+ * Note that Nimbus is special cased (mainly due to its bug of
+ * even row striping instead of odd)
+ * and handled as if a SwingX painter were set.
+ */
+ @Override
+ protected void paintComponent(Graphics g) {
+ // JW: hack around for #1178-swingx (core issue)
+ // grab painting if Nimbus detected
+ if ((painter != null) || isNimbus()) {
+ // we have a custom (background) painter
+ // try to inject if possible
+ // there's no guarantee - some LFs have their own background
+ // handling elsewhere
+ if (isOpaque()) {
+ // replace the paintComponent completely
+ fakeTransparency = true;
+ paintComponentWithPainter((Graphics2D) g);
+ fakeTransparency = false;
+ } else {
+ // transparent apply the background painter before calling super
+ paintPainter(g);
+ super.paintComponent(g);
+ }
+ } else {
+ // nothing to worry about - delegate to super
+ super.paintComponent(g);
+ }
+ }
+
+ /**
+ * Hack around Nimbus not respecting background colors if UIResource.
+ * So by-pass ...
+ */
+ private boolean isNimbus() {
+ return UIManager.getLookAndFeel().getName().contains("Nimbus");
+ }
+
+
+ /**
+ * Hack around AbstractPainter.paint bug which disposes the Graphics.
+ * So here we give it a scratch to paint on. <p>
+ * TODO - remove again, the issue is fixed?
+ *
+ * @param g the graphics to paint on
+ */
+ private void paintPainter(Graphics g) {
+ if (painter == null) return;
+ // fail fast: we assume that g must not be null
+ // which throws an NPE here instead deeper down the bowels
+ // this differs from corresponding core implementation!
+ Graphics2D scratch = (Graphics2D) g.create();
+ try {
+ painter.paint(scratch, this, getWidth(), getHeight());
+ } finally {
+ scratch.dispose();
+ }
+ }
+
+ private void paintComponentWithPainter(Graphics2D g) {
+ // 1. be sure to fill the background
+ // 2. paint the painter
+ // by-pass ui.update and hook into ui.paint directly
+ if (ui != null) {
+ // fail fast: we assume that g must not be null
+ // which throws an NPE here instead deeper down the bowels
+ // this differs from corresponding core implementation!
+ Graphics scratchGraphics = g.create();
+ try {
+ scratchGraphics.setColor(getBackground());
+ scratchGraphics.fillRect(0, 0, getWidth(), getHeight());
+ paintPainter(g);
+ ui.paint(scratchGraphics, this);
+ } finally {
+ scratchGraphics.dispose();
+ }
+ }
+
+ }
+
+ /**
+ * Overridden for performance reasons.
+ * See the <a href="#override">Implementation Note</a>
+ * for more information.
+ *
+ * @since 1.5
+ */
+ @Override
+ public void invalidate() {
+ }
+
+ /**
+ * Overridden for performance reasons.
+ * See the <a href="#override">Implementation Note</a>
+ * for more information.
+ */
+ @Override
+ public void validate() {
+ }
+
+ /**
+ * Overridden for performance reasons.
+ * See the <a href="#override">Implementation Note</a>
+ * for more information.
+ */
+ @Override
+ public void revalidate() {
+ }
+
+ /**
+ * Overridden for performance reasons.
+ * See the <a href="#override">Implementation Note</a>
+ * for more information.
+ */
+ @Override
+ public void repaint(long tm, int x, int y, int width, int height) {
+ }
+
+ /**
+ * Overridden for performance reasons.
+ * See the <a href="#override">Implementation Note</a>
+ * for more information.
+ */
+ @Override
+ public void repaint(Rectangle r) {
+ }
+
+ /**
+ * Overridden for performance reasons.
+ * See the <a href="#override">Implementation Note</a>
+ * for more information.
+ *
+ * @since 1.5
+ */
+ @Override
+ public void repaint() {
+ }
+
+ /**
+ * Overridden for performance reasons.
+ * See the <a href="#override">Implementation Note</a>
+ * for more information.
+ */
+ @Override
+ protected void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
+ // Strings get interned...
+ if ("text".equals(propertyName)) {
+ super.firePropertyChange(propertyName, oldValue, newValue);
+ }
+ }
+
+ /**
+ * Overridden for performance reasons.
+ * See the <a href="#override">Implementation Note</a>
+ * for more information.
+ */
+ @Override
+ public void firePropertyChange(String propertyName, boolean oldValue, boolean newValue) {
+ }
+
+
+}
=====================================
persistence/src/main/java/fr/ird/observe/persistence/ObserveTopiaPersistenceContext.java
=====================================
--- a/persistence/src/main/java/fr/ird/observe/persistence/ObserveTopiaPersistenceContext.java
+++ b/persistence/src/main/java/fr/ird/observe/persistence/ObserveTopiaPersistenceContext.java
@@ -55,8 +55,8 @@ public class ObserveTopiaPersistenceContext extends AbstractObserveTopiaPersiste
LastUpdateDateTopiaDao dao = getDao(LastUpdateDate.class, LastUpdateDateTopiaDao.class);
LastUpdateDate lastUpdateDate = dao.findUniqueByType(entityType.getName());
- if (log.isInfoEnabled()) {
- log.info("getLastUpdateDate: " + lastUpdateDate.getLastUpdateDate() + " for entity type: " + entityType.getName());
+ if (log.isDebugEnabled()) {
+ log.debug("getLastUpdateDate: " + lastUpdateDate.getLastUpdateDate() + " for entity type: " + entityType.getName());
}
return lastUpdateDate.getLastUpdateDate();
@@ -66,7 +66,7 @@ public class ObserveTopiaPersistenceContext extends AbstractObserveTopiaPersiste
entity.setLastUpdateDate(date);
- // on met à jour l'entité (cela permet de récupérer son topiaId si l'objet est créé)
+ // update (will then get new id if was not persisted)
getDao(entity).update(entity);
Class<E> type = getType(entity);
@@ -86,14 +86,14 @@ public class ObserveTopiaPersistenceContext extends AbstractObserveTopiaPersiste
lastUpdateDate.setLastUpdateDate(date);
lastUpdateDate.setType(entityTypeName);
dao.create(lastUpdateDate);
- if (log.isInfoEnabled()) {
- log.info("Add LastUpdateDate: " + date + " for entity type: " + entityTypeName);
+ if (log.isDebugEnabled()) {
+ log.debug("Add LastUpdateDate: " + date + " for entity type: " + entityTypeName);
}
} else {
lastUpdateDate = optionalLastUpdateDate.get();
- if (log.isInfoEnabled()) {
- log.info("Change LastUpdateDate: " + date + " for entity type: " + entityTypeName);
+ if (log.isDebugEnabled()) {
+ log.debug("Change LastUpdateDate: " + date + " for entity type: " + entityTypeName);
}
lastUpdateDate.setLastUpdateDate(date);
}
@@ -108,6 +108,7 @@ public class ObserveTopiaPersistenceContext extends AbstractObserveTopiaPersiste
ObserveEntityEnum entityEnum = ObserveEntityEnum.valueOf(entity);
Objects.requireNonNull(entityEnum, "Entity " + entity + " is not managed by ToPIA");
+ //noinspection unchecked
return (Class<E>) entityEnum.getContract();
}
@@ -135,13 +136,13 @@ public class ObserveTopiaPersistenceContext extends AbstractObserveTopiaPersiste
private final String fullyTableName;
- public CountTableSqlWork(String fullyTableName) {
+ CountTableSqlWork(String fullyTableName) {
this.fullyTableName = fullyTableName;
}
@Override
public PreparedStatement prepareQuery(Connection connection) throws SQLException {
- String sql = "SELECT count(*) FROM " + fullyTableName;
+ String sql = String.format("SELECT count(*) FROM %s", fullyTableName);
if (showSql) {
log.debug(sql);
}
=====================================
services/src/main/java/fr/ird/observe/services/decoration/ObserveI18nDecoratorHelper.java
=====================================
--- a/services/src/main/java/fr/ird/observe/services/decoration/ObserveI18nDecoratorHelper.java
+++ b/services/src/main/java/fr/ird/observe/services/decoration/ObserveI18nDecoratorHelper.java
@@ -329,5 +329,6 @@ public class ObserveI18nDecoratorHelper {
n("observe.common.yearService");
n("observe.common.whenArriving");
n("observe.common.whenLeaving");
+ n("observe.common.materialsValid");
}
}
=====================================
services/src/main/java/fr/ird/observe/services/dto/referential/seine/ObjectMaterialDto.java
=====================================
--- /dev/null
+++ b/services/src/main/java/fr/ird/observe/services/dto/referential/seine/ObjectMaterialDto.java
@@ -0,0 +1,44 @@
+package fr.ird.observe.services.dto.referential.seine;
+
+/*-
+ * #%L
+ * ObServe :: Services
+ * %%
+ * Copyright (C) 2008 - 2017 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%
+ */
+
+public class ObjectMaterialDto extends GeneratedObjectMaterialDto {
+
+ private static final long serialVersionUID = 1L;
+
+ public boolean isBoolean() {
+ return objectMaterialType != null && "fr.ird.observe.entities.referentiel.seine.ObjectMaterialType#0#0".equals(objectMaterialType.getId());
+ }
+
+ public boolean isText() {
+ return objectMaterialType != null && "fr.ird.observe.entities.referentiel.seine.ObjectMaterialType#0#3".equals(objectMaterialType.getId());
+ }
+
+ public boolean isInteger() {
+ return objectMaterialType != null && "fr.ird.observe.entities.referentiel.seine.ObjectMaterialType#0#2".equals(objectMaterialType.getId());
+ }
+
+ public boolean isFloat() {
+ return objectMaterialType != null && "fr.ird.observe.entities.referentiel.seine.ObjectMaterialType#0#1".equals(objectMaterialType.getId());
+ }
+}
=====================================
services/src/main/models/Observe.model
=====================================
--- a/services/src/main/models/Observe.model
+++ b/services/src/main/models/Observe.model
@@ -628,6 +628,7 @@ computedWhenArrivingSimplifiedObjectType + {*:1} String
computedWhenLeavingBiodegradable + {*:1} !fr.ird.observe.common.constants.seine.DcpComputedValue
computedWhenLeavingNonEntangling + {*:1} !fr.ird.observe.common.constants.seine.DcpComputedValue
computedWhenLeavingSimplifiedObjectType + {*:1} String
+materialsValid + {*:1} boolean
seine.FloatingObjectObservedSpecies > Commentable
objectObservedSpecies {*} seine.ObjectObservedSpecies
=====================================
services/src/main/resources/i18n/services_en_GB.properties
=====================================
--- a/services/src/main/resources/i18n/services_en_GB.properties
+++ b/services/src/main/resources/i18n/services_en_GB.properties
@@ -111,6 +111,7 @@ observe.common.lightsticksType=Lightsticks type
observe.common.lineType=Line type
observe.common.locode=Locode
observe.common.longitude=Longitude
+observe.common.materialsValid=Materials
observe.common.maturityStatus=Maturity status
observe.common.maxDepthTargeted=Max depth targeted
observe.common.maxGearDepth=Max gear depth
=====================================
services/src/main/resources/i18n/services_es_ES.properties
=====================================
--- a/services/src/main/resources/i18n/services_es_ES.properties
+++ b/services/src/main/resources/i18n/services_es_ES.properties
@@ -111,6 +111,7 @@ observe.common.lightsticksType=Tipo de barrita de luz
observe.common.lineType=Tipo de línea
observe.common.locode=Locode
observe.common.longitude=Longitude
+observe.common.materialsValid=Materials \#TODO
observe.common.maturityStatus=Maturidad
observe.common.maxDepthTargeted=Profundidad máxima deseada
observe.common.maxGearDepth=Profundidad máxima (m)
=====================================
services/src/main/resources/i18n/services_fr_FR.properties
=====================================
--- a/services/src/main/resources/i18n/services_fr_FR.properties
+++ b/services/src/main/resources/i18n/services_fr_FR.properties
@@ -111,6 +111,7 @@ observe.common.lightsticksType=Type de cyalumes
observe.common.lineType=Type de ligne
observe.common.locode=Locode
observe.common.longitude=Longitude
+observe.common.materialsValid=Matériels
observe.common.maturityStatus=Maturité sexuelle
observe.common.maxDepthTargeted=Profondeur maximum ciblée
observe.common.maxGearDepth=Profondeur maximum (m)
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/compare/d9a448941ed45d4ab7d267b7e5…
---
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/compare/d9a448941ed45d4ab7d267b7e5…
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:
d9a44894 by Tony CHEMIT at 2017-08-04T23:59:27+02:00
reformat code
- - - - -
15 changed files:
- client/src/main/java/fr/ird/observe/client/ui/admin/consolidate/ConsolidateUIHandler.java
- client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/FloatingObjectUIHandler.java
- client/src/main/java/fr/ird/observe/client/ui/storage/StorageUIBlockingLayerUI.java
- client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/longline/CatchLonglineNavigationTreeNode.java
- client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/longline/SetGlobalCompositionLonglineNavigationTreeNode.java
- client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/seine/ActivitiesSeineNavigationTreeNode.java
- client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/seine/DiscardedTargetCatchSeineNavigationTreeNode.java
- client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/seine/GearUseFeaturesSeineNavigationTreeNode.java
- services-topia/src/main/java/fr/ird/observe/services/binder/referential/ReferentialBinderSupport.java
- services-topia/src/main/java/fr/ird/observe/services/topia/ObserveServiceTopiaClassMapping.java
- services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/consolidate/ConsolidateDataServiceTopia.java
- services/src/main/java/fr/ird/observe/services/dto/AbstractObserveDto.java
- services/src/main/java/fr/ird/observe/services/dto/referential/seine/WeightCategoryHelper.java
- services/src/main/java/fr/ird/observe/services/gson/ObserveDtoGsonSupplier.java
- services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/ConsolidateFloatingObjectRequest.java
Changes:
=====================================
client/src/main/java/fr/ird/observe/client/ui/admin/consolidate/ConsolidateUIHandler.java
=====================================
--- a/client/src/main/java/fr/ird/observe/client/ui/admin/consolidate/ConsolidateUIHandler.java
+++ b/client/src/main/java/fr/ird/observe/client/ui/admin/consolidate/ConsolidateUIHandler.java
@@ -28,10 +28,10 @@ import fr.ird.observe.client.ui.ObserveKeyStrokes;
import fr.ird.observe.client.ui.admin.AdminTabUIHandler;
import fr.ird.observe.client.ui.util.ProgressModel;
import fr.ird.observe.services.dto.reference.DataReference;
-import fr.ird.observe.services.service.actions.consolidate.set.ConsolidateActivitySeineDataResult;
import fr.ird.observe.services.service.actions.consolidate.ConsolidateDataService;
import fr.ird.observe.services.service.actions.consolidate.ConsolidateTripSeineDataRequest;
import fr.ird.observe.services.service.actions.consolidate.ConsolidateTripSeineDataResult;
+import fr.ird.observe.services.service.actions.consolidate.set.ConsolidateActivitySeineDataResult;
import java.util.Date;
import java.util.Set;
import java.util.stream.Collectors;
=====================================
client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/FloatingObjectUIHandler.java
=====================================
--- a/client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/FloatingObjectUIHandler.java
+++ b/client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/FloatingObjectUIHandler.java
@@ -78,7 +78,6 @@ import org.nuiton.jaxx.runtime.spi.UIHandler;
import org.nuiton.jaxx.runtime.swing.SwingUtil;
import org.nuiton.jaxx.validator.swing.SwingValidatorMessage;
import org.nuiton.jaxx.validator.swing.SwingValidatorMessageTableModel;
-import org.nuiton.jaxx.validator.swing.SwingValidatorUtil;
import org.nuiton.validator.NuitonValidatorScope;
=====================================
client/src/main/java/fr/ird/observe/client/ui/storage/StorageUIBlockingLayerUI.java
=====================================
--- a/client/src/main/java/fr/ird/observe/client/ui/storage/StorageUIBlockingLayerUI.java
+++ b/client/src/main/java/fr/ird/observe/client/ui/storage/StorageUIBlockingLayerUI.java
@@ -25,7 +25,6 @@ package fr.ird.observe.client.ui.storage;
import com.google.common.collect.ImmutableSet;
import fr.ird.observe.client.ObserveSwingApplicationContext;
import fr.ird.observe.client.ui.actions.AbstractUIAction;
-import fr.ird.observe.client.ui.content.ContentUI;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
=====================================
client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/longline/CatchLonglineNavigationTreeNode.java
=====================================
--- a/client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/longline/CatchLonglineNavigationTreeNode.java
+++ b/client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/longline/CatchLonglineNavigationTreeNode.java
@@ -38,7 +38,7 @@ import static org.nuiton.i18n.I18n.t;
public class CatchLonglineNavigationTreeNode extends ClassNavigationTreeNode<CatchLonglineDto> {
CatchLonglineNavigationTreeNode() {
- super(CatchLonglineDto.class,t("observe.ui.tree.longline.catch"));
+ super(CatchLonglineDto.class, t("observe.ui.tree.longline.catch"));
}
@Override
=====================================
client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/longline/SetGlobalCompositionLonglineNavigationTreeNode.java
=====================================
--- a/client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/longline/SetGlobalCompositionLonglineNavigationTreeNode.java
+++ b/client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/longline/SetGlobalCompositionLonglineNavigationTreeNode.java
@@ -38,7 +38,7 @@ import static org.nuiton.i18n.I18n.t;
public class SetGlobalCompositionLonglineNavigationTreeNode extends ClassNavigationTreeNode<SetLonglineGlobalCompositionDto> {
SetGlobalCompositionLonglineNavigationTreeNode() {
- super(SetLonglineGlobalCompositionDto.class,t("observe.ui.tree.longline.setGlobalComposition"));
+ super(SetLonglineGlobalCompositionDto.class, t("observe.ui.tree.longline.setGlobalComposition"));
}
@Override
=====================================
client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/seine/ActivitiesSeineNavigationTreeNode.java
=====================================
--- a/client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/seine/ActivitiesSeineNavigationTreeNode.java
+++ b/client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/seine/ActivitiesSeineNavigationTreeNode.java
@@ -41,7 +41,7 @@ import static org.nuiton.i18n.I18n.t;
public class ActivitiesSeineNavigationTreeNode extends ClassNavigationTreeNode<ActivitySeineDto> implements WithChildsToReload {
ActivitiesSeineNavigationTreeNode() {
- super(ActivitySeineDto.class, true,t("observe.ui.tree.activities"));
+ super(ActivitySeineDto.class, true, t("observe.ui.tree.activities"));
}
@Override
=====================================
client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/seine/DiscardedTargetCatchSeineNavigationTreeNode.java
=====================================
--- a/client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/seine/DiscardedTargetCatchSeineNavigationTreeNode.java
+++ b/client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/seine/DiscardedTargetCatchSeineNavigationTreeNode.java
@@ -38,7 +38,7 @@ import static org.nuiton.i18n.I18n.t;
public class DiscardedTargetCatchSeineNavigationTreeNode extends ClassNavigationTreeNode<DiscardedTargetCatchDto> {
DiscardedTargetCatchSeineNavigationTreeNode() {
- super(DiscardedTargetCatchDto.class,t("observe.ui.tree.seine.discardedTargetCatch"));
+ super(DiscardedTargetCatchDto.class, t("observe.ui.tree.seine.discardedTargetCatch"));
}
@Override
=====================================
client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/seine/GearUseFeaturesSeineNavigationTreeNode.java
=====================================
--- a/client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/seine/GearUseFeaturesSeineNavigationTreeNode.java
+++ b/client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/seine/GearUseFeaturesSeineNavigationTreeNode.java
@@ -39,7 +39,7 @@ import static org.nuiton.i18n.I18n.t;
public class GearUseFeaturesSeineNavigationTreeNode extends ClassNavigationTreeNode<GearUseFeaturesSeineDto> {
GearUseFeaturesSeineNavigationTreeNode() {
- super(GearUseFeaturesSeineDto.class,t("observe.ui.tree.gearUseFeatures"));
+ super(GearUseFeaturesSeineDto.class, t("observe.ui.tree.gearUseFeatures"));
}
@Override
=====================================
services-topia/src/main/java/fr/ird/observe/services/binder/referential/ReferentialBinderSupport.java
=====================================
--- a/services-topia/src/main/java/fr/ird/observe/services/binder/referential/ReferentialBinderSupport.java
+++ b/services-topia/src/main/java/fr/ird/observe/services/binder/referential/ReferentialBinderSupport.java
@@ -55,8 +55,8 @@ public abstract class ReferentialBinderSupport<E extends ObserveReferentialEntit
protected ReferentialReference<D> toReferentialReference(E entity, Serializable... values) {
- ReferentialReference<D> reference=null;
- if (entity!=null) {
+ ReferentialReference<D> reference = null;
+ if (entity != null) {
reference = new ReferentialReference<>();
reference.setId(entity.getTopiaId());
=====================================
services-topia/src/main/java/fr/ird/observe/services/topia/ObserveServiceTopiaClassMapping.java
=====================================
--- a/services-topia/src/main/java/fr/ird/observe/services/topia/ObserveServiceTopiaClassMapping.java
+++ b/services-topia/src/main/java/fr/ird/observe/services/topia/ObserveServiceTopiaClassMapping.java
@@ -25,7 +25,6 @@ package fr.ird.observe.services.topia;
import fr.ird.observe.services.service.DataSourceService;
import fr.ird.observe.services.service.LastUpdateDateService;
import fr.ird.observe.services.service.ObserveService;
-import fr.ird.observe.services.service.PingService;
import fr.ird.observe.services.service.actions.consolidate.ConsolidateDataService;
import fr.ird.observe.services.service.actions.report.ReportService;
import fr.ird.observe.services.service.actions.synchro.referential.diff.ReferentialSynchronizeDiffService;
=====================================
services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/consolidate/ConsolidateDataServiceTopia.java
=====================================
--- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/consolidate/ConsolidateDataServiceTopia.java
+++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/consolidate/ConsolidateDataServiceTopia.java
@@ -313,7 +313,7 @@ public class ConsolidateDataServiceTopia extends ObserveServiceTopia implements
ConsolidateFloatingObjectRequest request = new ConsolidateFloatingObjectRequest(floatingObjectDto, floatingObjectPartDtos);
Optional<ConsolidateFloatingObjectResult> result = floatingObjectConsolidateEngine.consolidate(request);
- result.ifPresent(r->activityContext.flushDcp(dcp, r));
+ result.ifPresent(r -> activityContext.flushDcp(dcp, r));
}
=====================================
services/src/main/java/fr/ird/observe/services/dto/AbstractObserveDto.java
=====================================
--- a/services/src/main/java/fr/ird/observe/services/dto/AbstractObserveDto.java
+++ b/services/src/main/java/fr/ird/observe/services/dto/AbstractObserveDto.java
@@ -32,7 +32,7 @@ import org.nuiton.util.CollectionUtil;
* @author Tony Chemit - dev(a)tchemit.fr
* @since 7.0
*/
-public abstract class AbstractObserveDto extends AbstractSerializableBean implements ObserveDto{
+public abstract class AbstractObserveDto extends AbstractSerializableBean implements ObserveDto {
private static final long serialVersionUID = 1L;
=====================================
services/src/main/java/fr/ird/observe/services/dto/referential/seine/WeightCategoryHelper.java
=====================================
--- a/services/src/main/java/fr/ird/observe/services/dto/referential/seine/WeightCategoryHelper.java
+++ b/services/src/main/java/fr/ird/observe/services/dto/referential/seine/WeightCategoryHelper.java
@@ -25,7 +25,6 @@ package fr.ird.observe.services.dto.referential.seine;
import fr.ird.observe.services.dto.reference.ReferentialReference;
import java.util.Collection;
import java.util.List;
-import java.util.Set;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import org.apache.commons.logging.Log;
=====================================
services/src/main/java/fr/ird/observe/services/gson/ObserveDtoGsonSupplier.java
=====================================
--- a/services/src/main/java/fr/ird/observe/services/gson/ObserveDtoGsonSupplier.java
+++ b/services/src/main/java/fr/ird/observe/services/gson/ObserveDtoGsonSupplier.java
@@ -47,8 +47,8 @@ import fr.ird.observe.services.gson.reference.DataReferenceSetAdapter;
import fr.ird.observe.services.gson.reference.ReferentialReferenceAdapter;
import fr.ird.observe.services.gson.reference.ReferentialReferenceSetAdapter;
import fr.ird.observe.services.gson.reference.UnknownReferenceAdapter;
-import io.ultreia.java4all.http.HResponseError;
import fr.ird.observe.services.service.actions.report.ReportVariable;
+import io.ultreia.java4all.http.HResponseError;
import io.ultreia.java4all.http.HResponseErrorAdapter;
import java.sql.Blob;
import java.util.Collection;
=====================================
services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/ConsolidateFloatingObjectRequest.java
=====================================
--- a/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/ConsolidateFloatingObjectRequest.java
+++ b/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/ConsolidateFloatingObjectRequest.java
@@ -39,7 +39,6 @@ public class ConsolidateFloatingObjectRequest implements ObserveDto {
private final ImmutableSet<FloatingObjectPartDto> whenArriving;
private final ImmutableSet<FloatingObjectPartDto> whenLeaving;
-
public ConsolidateFloatingObjectRequest(FloatingObjectDto dcp, ImmutableSet<FloatingObjectPartDto> floatingObjectParts) {
this.dcp = dcp;
whenArriving = ImmutableSet.copyOf(floatingObjectParts.stream().filter(p -> p.getWhenArriving() != null).collect(Collectors.toSet()));
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/d9a448941ed45d4ab7d267b7e59…
---
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/d9a448941ed45d4ab7d267b7e59…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] add minimun maven version in pom even if the m-versions-p does not print correct warnings...
by Tony CHEMIT 04 Aug '17
by Tony CHEMIT 04 Aug '17
04 Aug '17
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
127acda5 by Tony CHEMIT at 2017-08-04T23:57:06+02:00
add minimun maven version in pom even if the m-versions-p does not print correct warnings...
- - - - -
1 changed file:
- pom.xml
Changes:
=====================================
pom.xml
=====================================
--- a/pom.xml
+++ b/pom.xml
@@ -20,7 +20,8 @@
<http://www.gnu.org/licenses/gpl-3.0.html>.
#L%
-->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
@@ -855,6 +856,33 @@
</extensions>
<plugins>
+
+
+ <plugin>
+ <artifactId>maven-enforcer-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>enforce-maven</id>
+ <goals>
+ <goal>enforce</goal>
+ </goals>
+ <inherited>true</inherited>
+ <phase>initialize</phase>
+ <configuration>
+ <rules>
+ <requireMavenVersion>
+ <version>3.5.0</version>
+ </requireMavenVersion>
+ </rules>
+ <ignoreCache>true</ignoreCache>
+ <failFast>true</failFast>
+ <fail>true</fail>
+
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/127acda5bbe7bc5daa7a79c82ce…
---
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/127acda5bbe7bc5daa7a79c82ce…
You're receiving this email because of your account on gitlab.com.
1
0
04 Aug '17
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
3ff3ec97 by Tony CHEMIT at 2017-08-04T23:49:18+02:00
add missing license headers
- - - - -
9 changed files:
- services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/ConsolidateFloatingObjectRequest.java
- services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/ConsolidateFloatingObjectResultBuilder.java
- services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/FloatingObjectConsolidateEngine.java
- services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/FloatingObjectModification.java
- services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/SimplifiedObjectTypeManager.java
- services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/SimplifiedObjectTypeNode.java
- services/src/main/java/fr/ird/observe/services/service/actions/consolidate/set/NonTargetCatchModification.java
- services/src/main/java/fr/ird/observe/services/service/actions/consolidate/set/NonTargetLengthModification.java
- services/src/main/java/fr/ird/observe/services/service/actions/consolidate/set/TargetLengthModification.java
Changes:
=====================================
services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/ConsolidateFloatingObjectRequest.java
=====================================
--- a/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/ConsolidateFloatingObjectRequest.java
+++ b/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/ConsolidateFloatingObjectRequest.java
@@ -1,5 +1,27 @@
package fr.ird.observe.services.service.actions.consolidate.dcp;
+/*-
+ * #%L
+ * ObServe :: Services
+ * %%
+ * Copyright (C) 2008 - 2017 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 com.google.common.collect.ImmutableSet;
import fr.ird.observe.services.dto.ObserveDto;
import fr.ird.observe.services.dto.seine.FloatingObjectDto;
=====================================
services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/ConsolidateFloatingObjectResultBuilder.java
=====================================
--- a/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/ConsolidateFloatingObjectResultBuilder.java
+++ b/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/ConsolidateFloatingObjectResultBuilder.java
@@ -2,7 +2,7 @@ package fr.ird.observe.services.service.actions.consolidate.dcp;
/*
* #%L
- * ObServe :: Services ToPIA Implementation
+ * ObServe :: Services
* %%
* Copyright (C) 2008 - 2017 IRD, Code Lutin, Ultreia.io
* %%
=====================================
services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/FloatingObjectConsolidateEngine.java
=====================================
--- a/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/FloatingObjectConsolidateEngine.java
+++ b/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/FloatingObjectConsolidateEngine.java
@@ -1,5 +1,27 @@
package fr.ird.observe.services.service.actions.consolidate.dcp;
+/*-
+ * #%L
+ * ObServe :: Services
+ * %%
+ * Copyright (C) 2008 - 2017 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 com.google.common.collect.ImmutableSet;
import fr.ird.observe.common.constants.seine.DcpComputedValue;
import fr.ird.observe.services.dto.referential.seine.ObjectMaterialDto;
=====================================
services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/FloatingObjectModification.java
=====================================
--- a/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/FloatingObjectModification.java
+++ b/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/FloatingObjectModification.java
@@ -1,5 +1,27 @@
package fr.ird.observe.services.service.actions.consolidate.dcp;
+/*-
+ * #%L
+ * ObServe :: Services
+ * %%
+ * Copyright (C) 2008 - 2017 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 java.io.Serializable;
/**
=====================================
services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/SimplifiedObjectTypeManager.java
=====================================
--- a/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/SimplifiedObjectTypeManager.java
+++ b/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/SimplifiedObjectTypeManager.java
@@ -2,7 +2,7 @@ package fr.ird.observe.services.service.actions.consolidate.dcp;
/*-
* #%L
- * ObServe :: Services ToPIA Implementation
+ * ObServe :: Services
* %%
* Copyright (C) 2008 - 2017 IRD, Code Lutin, Ultreia.io
* %%
=====================================
services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/SimplifiedObjectTypeNode.java
=====================================
--- a/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/SimplifiedObjectTypeNode.java
+++ b/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/SimplifiedObjectTypeNode.java
@@ -2,7 +2,7 @@ package fr.ird.observe.services.service.actions.consolidate.dcp;
/*-
* #%L
- * ObServe :: Persistence
+ * ObServe :: Services
* %%
* Copyright (C) 2008 - 2017 IRD, Code Lutin, Ultreia.io
* %%
=====================================
services/src/main/java/fr/ird/observe/services/service/actions/consolidate/set/NonTargetCatchModification.java
=====================================
--- a/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/set/NonTargetCatchModification.java
+++ b/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/set/NonTargetCatchModification.java
@@ -1,5 +1,27 @@
package fr.ird.observe.services.service.actions.consolidate.set;
+/*-
+ * #%L
+ * ObServe :: Services
+ * %%
+ * Copyright (C) 2008 - 2017 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 java.io.Serializable;
/**
=====================================
services/src/main/java/fr/ird/observe/services/service/actions/consolidate/set/NonTargetLengthModification.java
=====================================
--- a/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/set/NonTargetLengthModification.java
+++ b/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/set/NonTargetLengthModification.java
@@ -1,5 +1,27 @@
package fr.ird.observe.services.service.actions.consolidate.set;
+/*-
+ * #%L
+ * ObServe :: Services
+ * %%
+ * Copyright (C) 2008 - 2017 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 java.io.Serializable;
/**
=====================================
services/src/main/java/fr/ird/observe/services/service/actions/consolidate/set/TargetLengthModification.java
=====================================
--- a/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/set/TargetLengthModification.java
+++ b/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/set/TargetLengthModification.java
@@ -1,5 +1,27 @@
package fr.ird.observe.services.service.actions.consolidate.set;
+/*-
+ * #%L
+ * ObServe :: Services
+ * %%
+ * Copyright (C) 2008 - 2017 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 java.io.Serializable;
/**
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/3ff3ec97a573846de415841d529…
---
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/3ff3ec97a573846de415841d529…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] Extraire la consolidation DCP pour pouvoir la rejouer à l'extérieur d'un service…
by Tony CHEMIT 04 Aug '17
by Tony CHEMIT 04 Aug '17
04 Aug '17
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
58a53683 by Tony CHEMIT at 2017-08-04T23:48:18+02:00
Extraire la consolidation DCP pour pouvoir la rejouer à l'extérieur d'un service (pour par exemple recalculer les valeurs en temps réel) (See #820)
- - - - -
23 changed files:
- client/src/main/java/fr/ird/observe/client/ui/admin/consolidate/ConsolidateUIHandler.java
- server/src/main/filtered-resources/mapping
- services-topia/src/main/java/fr/ird/observe/services/binder/data/seine/FloatingObjectPartBinder.java
- services-topia/src/main/java/fr/ird/observe/services/binder/referential/seine/ObjectMaterialBinder.java
- services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/consolidate/ConsolidateActivitySeineDataResultBuilder.java
- services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/consolidate/ConsolidateDataServiceTopia.java
- services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/consolidate/ConsolidationActivitySeineDataContext.java
- services-topia/src/test/java/fr/ird/observe/services/topia/service/actions/consolidate/SimplifiedObjectTypeManagerTest.java → services-topia/src/test/java/fr/ird/observe/services/topia/service/actions/consolidate/dcp/SimplifiedObjectTypeManagerTest.java
- services/src/main/java/fr/ird/observe/services/ObserveDtoInitializer.java
- services/src/main/java/fr/ird/observe/services/dto/reference/AbstractReference.java
- services/src/main/java/fr/ird/observe/services/service/actions/consolidate/ConsolidateDataService.java
- services/src/main/java/fr/ird/observe/services/service/actions/consolidate/ConsolidateTripSeineDataResult.java
- + services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/ConsolidateFloatingObjectRequest.java
- persistence/src/main/java/fr/ird/observe/entities/referentiel/seine/ObjectMaterialTopiaDao.java → services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/ConsolidateFloatingObjectResult.java
- + services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/ConsolidateFloatingObjectResultBuilder.java
- + services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/FloatingObjectConsolidateEngine.java
- + services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/FloatingObjectModification.java
- services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/consolidate/SimplifiedObjectTypeManager.java → services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/SimplifiedObjectTypeManager.java
- persistence/src/main/java/fr/ird/observe/entities/referentiel/seine/SimplifiedObjectTypeNode.java → services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/SimplifiedObjectTypeNode.java
- services/src/main/java/fr/ird/observe/services/service/actions/consolidate/ConsolidateActivitySeineDataResult.java → services/src/main/java/fr/ird/observe/services/service/actions/consolidate/set/ConsolidateActivitySeineDataResult.java
- + services/src/main/java/fr/ird/observe/services/service/actions/consolidate/set/NonTargetCatchModification.java
- + services/src/main/java/fr/ird/observe/services/service/actions/consolidate/set/NonTargetLengthModification.java
- + services/src/main/java/fr/ird/observe/services/service/actions/consolidate/set/TargetLengthModification.java
Changes:
=====================================
client/src/main/java/fr/ird/observe/client/ui/admin/consolidate/ConsolidateUIHandler.java
=====================================
--- a/client/src/main/java/fr/ird/observe/client/ui/admin/consolidate/ConsolidateUIHandler.java
+++ b/client/src/main/java/fr/ird/observe/client/ui/admin/consolidate/ConsolidateUIHandler.java
@@ -28,7 +28,7 @@ import fr.ird.observe.client.ui.ObserveKeyStrokes;
import fr.ird.observe.client.ui.admin.AdminTabUIHandler;
import fr.ird.observe.client.ui.util.ProgressModel;
import fr.ird.observe.services.dto.reference.DataReference;
-import fr.ird.observe.services.service.actions.consolidate.ConsolidateActivitySeineDataResult;
+import fr.ird.observe.services.service.actions.consolidate.set.ConsolidateActivitySeineDataResult;
import fr.ird.observe.services.service.actions.consolidate.ConsolidateDataService;
import fr.ird.observe.services.service.actions.consolidate.ConsolidateTripSeineDataRequest;
import fr.ird.observe.services.service.actions.consolidate.ConsolidateTripSeineDataResult;
=====================================
server/src/main/filtered-resources/mapping
=====================================
--- a/server/src/main/filtered-resources/mapping
+++ b/server/src/main/filtered-resources/mapping
@@ -68,6 +68,7 @@ POST /api/v1/LastUpdateDateService/updateReferentialLastUpdateDates
GET /api/v1/PingService/getModelVersion v1.PingServiceRestApi.getModelVersion
GET /api/v1/PingService/getServerVersion v1.PingServiceRestApi.getServerVersion
POST /api/v1/actions/consolidate/ConsolidateDataService/consolidateTripSeine v1.actions.consolidate.ConsolidateDataServiceRestApi.consolidateTripSeine
+GET /api/v1/actions/consolidate/ConsolidateDataService/newSimplifiedObjectTypeManager v1.actions.consolidate.ConsolidateDataServiceRestApi.newSimplifiedObjectTypeManager
POST /api/v1/actions/report/ReportService/executeReport v1.actions.report.ReportServiceRestApi.executeReport
POST /api/v1/actions/report/ReportService/populateVariables v1.actions.report.ReportServiceRestApi.populateVariables
GET /api/v1/actions/synchro/referential/diff/ReferentialSynchronizeDiffService/getEnabledReferentialReferenceSet v1.actions.synchro.referential.diff.ReferentialSynchronizeDiffServiceRestApi.getEnabledReferentialReferenceSet
=====================================
services-topia/src/main/java/fr/ird/observe/services/binder/data/seine/FloatingObjectPartBinder.java
=====================================
--- a/services-topia/src/main/java/fr/ird/observe/services/binder/data/seine/FloatingObjectPartBinder.java
+++ b/services-topia/src/main/java/fr/ird/observe/services/binder/data/seine/FloatingObjectPartBinder.java
@@ -57,8 +57,8 @@ public class FloatingObjectPartBinder extends DataBinderSupport<FloatingObjectPa
copyEntityDataFieldsToDto(entity, dto);
- dto.setWhenArriving(dto.getWhenArriving());
- dto.setWhenLeaving(dto.getWhenLeaving());
+ dto.setWhenArriving(entity.getWhenArriving());
+ dto.setWhenLeaving(entity.getWhenLeaving());
dto.setObjectMaterial(toReferentialReference(referentialLocale, entity.getObjectMaterial(), ObjectMaterialDto.class));
}
=====================================
services-topia/src/main/java/fr/ird/observe/services/binder/referential/seine/ObjectMaterialBinder.java
=====================================
--- a/services-topia/src/main/java/fr/ird/observe/services/binder/referential/seine/ObjectMaterialBinder.java
+++ b/services-topia/src/main/java/fr/ird/observe/services/binder/referential/seine/ObjectMaterialBinder.java
@@ -84,7 +84,9 @@ public class ObjectMaterialBinder extends ReferentialBinderSupport<ObjectMateria
entity.getCode(), getLabel(referentialLocale, entity),
Optional.ofNullable(entity.getParent()).map(ObjectMaterial::getTopiaId).orElse(null),
Optional.ofNullable(entity.getObjectMaterialType()).map(I18nReferentialEntity::getTopiaId).orElse(null),
- entity.getValidation());
+ entity.getValidation(),
+ entity.isBiodegradable(),
+ entity.isNonEntangling());
}
@@ -97,7 +99,9 @@ public class ObjectMaterialBinder extends ReferentialBinderSupport<ObjectMateria
dto.getCode(), getLabel(referentialLocale, dto),
Optional.ofNullable(dto.getParent()).map(r -> r.getPropertyValue(ObjectMaterialDto.PROPERTY_PARENT)).orElse(null),
Optional.ofNullable(dto.getObjectMaterialType()).map(ReferentialReference::getId).orElse(null),
- dto.getValidation());
+ dto.getValidation(),
+ dto.isBiodegradable(),
+ dto.isNonEntangling());
}
}
=====================================
services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/consolidate/ConsolidateActivitySeineDataResultBuilder.java
=====================================
--- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/consolidate/ConsolidateActivitySeineDataResultBuilder.java
+++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/consolidate/ConsolidateActivitySeineDataResultBuilder.java
@@ -29,15 +29,16 @@ import fr.ird.observe.entities.referentiel.Ocean;
import fr.ird.observe.entities.referentiel.Sex;
import fr.ird.observe.entities.referentiel.Species;
import fr.ird.observe.entities.referentiel.Species2;
-import fr.ird.observe.entities.seine.ActivitySeine;
-import fr.ird.observe.entities.seine.ActivitySeines;
-import fr.ird.observe.entities.seine.FloatingObject;
import fr.ird.observe.entities.seine.NonTargetCatch;
import fr.ird.observe.entities.seine.NonTargetLength;
import fr.ird.observe.entities.seine.TargetLength;
import fr.ird.observe.services.dto.constants.ReferentialLocale;
-import fr.ird.observe.services.service.actions.consolidate.ConsolidateActivitySeineDataResult;
-import fr.ird.observe.services.service.actions.consolidate.ConsolidateActivitySeineDataResult.DcpModification;
+import fr.ird.observe.services.service.actions.consolidate.dcp.ConsolidateFloatingObjectResult;
+import fr.ird.observe.services.service.actions.consolidate.dcp.FloatingObjectModification;
+import fr.ird.observe.services.service.actions.consolidate.set.ConsolidateActivitySeineDataResult;
+import fr.ird.observe.services.service.actions.consolidate.set.NonTargetCatchModification;
+import fr.ird.observe.services.service.actions.consolidate.set.NonTargetLengthModification;
+import fr.ird.observe.services.service.actions.consolidate.set.TargetLengthModification;
import java.util.Date;
import java.util.Locale;
import java.util.Optional;
@@ -45,9 +46,6 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import static fr.ird.observe.services.service.actions.consolidate.ConsolidateActivitySeineDataResult.NonTargetCatchModification;
-import static fr.ird.observe.services.service.actions.consolidate.ConsolidateActivitySeineDataResult.NonTargetLengthModification;
-import static fr.ird.observe.services.service.actions.consolidate.ConsolidateActivitySeineDataResult.TargetLengthModification;
import static org.nuiton.i18n.I18n.l;
/**
@@ -63,96 +61,26 @@ public class ConsolidateActivitySeineDataResultBuilder {
private static final Log log = LogFactory.getLog(ConsolidateActivitySeineDataResultBuilder.class);
private final ReferentialLocale referenceLocale;
protected final Locale locale;
- protected final ActivitySeine activitySeine;
private final ImmutableSet.Builder<String> lengthWeightParameterNotFoundBuilder = new ImmutableSet.Builder<>();
private final ImmutableSet.Builder<TargetLengthModification> targetLengthModificationBuilder = new ImmutableSet.Builder<>();
private final ImmutableSet.Builder<NonTargetLengthModification> nonTargetLengthModificationBuilder = new ImmutableSet.Builder<>();
private final ImmutableSet.Builder<NonTargetCatchModification> nonTargetCatchModificationBuilder = new ImmutableSet.Builder<>();
- private final ImmutableSet.Builder<DcpModification> dcpModificationBuilder = new ImmutableSet.Builder<>();
+ private final ImmutableSet.Builder<FloatingObjectModification> dcpModificationBuilder = new ImmutableSet.Builder<>();
private SchoolType oldSchoolType;
private SchoolType newSchoolType;
+ private final String activitySeineLabel;
+ private final String activitySeineId;
- private ConsolidateActivitySeineDataResultBuilder(Locale locale, ReferentialLocale referenceLocale, ActivitySeine activitySeine) {
+ public ConsolidateActivitySeineDataResultBuilder(Locale locale, ReferentialLocale referenceLocale, String activitySeineId, String activitySeineLabel) {
this.locale = locale;
this.referenceLocale = referenceLocale;
- this.activitySeine = activitySeine;
+ this.activitySeineId = activitySeineId;
+ this.activitySeineLabel = activitySeineLabel;
}
- public static ConsolidateActivitySeineDataResultBuilder create(Locale locale, ReferentialLocale referenceLocale, ActivitySeine activitySeine) {
- return new ConsolidateActivitySeineDataResultBuilder(locale, referenceLocale, activitySeine);
- }
-
- void flushDcpModification(FloatingObject dcp, String... propertyNamesModified) {
-
- String dcpLabel = activitySeine.getVesselActivitySeine().getLabel2() + "[" + activitySeine.getTime() + "]" + " - " + (dcp.getObjectOperation() == null ? "" : dcp.getObjectOperation().getLabel2());
- for (String modifiedProperty : propertyNamesModified) {
- switch (modifiedProperty) {
- case FloatingObject.PROPERTY_COMPUTED_WHEN_ARRIVING_BIODEGRADABLE: {
-
- DcpModification element = new DcpModification();
- element.setDcpId(dcp.getTopiaId());
- element.setDcpLabel(dcpLabel);
- element.setPropertyName(FloatingObject.PROPERTY_COMPUTED_WHEN_ARRIVING_BIODEGRADABLE);
- element.setNewValue(dcp.getComputedWhenArrivingBiodegradable());
- dcpModificationBuilder.add(element);
-
- break;
- }
- case FloatingObject.PROPERTY_COMPUTED_WHEN_ARRIVING_NON_ENTANGLING: {
-
- DcpModification element = new DcpModification();
- element.setDcpId(dcp.getTopiaId());
- element.setDcpLabel(dcpLabel);
- element.setPropertyName(FloatingObject.PROPERTY_COMPUTED_WHEN_ARRIVING_NON_ENTANGLING);
- element.setNewValue(dcp.getComputedWhenArrivingNonEntangling());
- dcpModificationBuilder.add(element);
-
- break;
- }
- case FloatingObject.PROPERTY_COMPUTED_WHEN_ARRIVING_SIMPLIFIED_OBJECT_TYPE: {
-
- DcpModification element = new DcpModification();
- element.setDcpId(dcp.getTopiaId());
- element.setDcpLabel(dcpLabel);
- element.setPropertyName(FloatingObject.PROPERTY_COMPUTED_WHEN_ARRIVING_SIMPLIFIED_OBJECT_TYPE);
- element.setNewValue(dcp.getComputedWhenArrivingSimplifiedObjectType());
- dcpModificationBuilder.add(element);
- break;
- }
- case FloatingObject.PROPERTY_COMPUTED_WHEN_LEAVING_BIODEGRADABLE: {
-
- DcpModification element = new DcpModification();
- element.setDcpId(dcp.getTopiaId());
- element.setDcpLabel(dcpLabel);
- element.setPropertyName(FloatingObject.PROPERTY_COMPUTED_WHEN_LEAVING_BIODEGRADABLE);
- element.setNewValue(dcp.getComputedWhenLeavingBiodegradable());
- dcpModificationBuilder.add(element);
-
- break;
- }
- case FloatingObject.PROPERTY_COMPUTED_WHEN_LEAVING_NON_ENTANGLING: {
-
- DcpModification element = new DcpModification();
- element.setDcpId(dcp.getTopiaId());
- element.setDcpLabel(dcpLabel);
- element.setPropertyName(FloatingObject.PROPERTY_COMPUTED_WHEN_LEAVING_NON_ENTANGLING);
- element.setNewValue(dcp.getComputedWhenLeavingNonEntangling());
- dcpModificationBuilder.add(element);
+ void flushDcpModification(ConsolidateFloatingObjectResult result) {
- break;
- }
- case FloatingObject.PROPERTY_COMPUTED_WHEN_LEAVING_SIMPLIFIED_OBJECT_TYPE: {
-
- DcpModification element = new DcpModification();
- element.setDcpId(dcp.getTopiaId());
- element.setDcpLabel(dcpLabel);
- element.setPropertyName(FloatingObject.PROPERTY_COMPUTED_WHEN_LEAVING_SIMPLIFIED_OBJECT_TYPE);
- element.setNewValue(dcp.getComputedWhenLeavingSimplifiedObjectType());
- dcpModificationBuilder.add(element);
- break;
- }
- }
- }
+ dcpModificationBuilder.addAll(result.getFloatingObjectModifications());
}
@@ -294,12 +222,12 @@ public class ConsolidateActivitySeineDataResultBuilder {
ImmutableSet<TargetLengthModification> targetLengthModifications = targetLengthModificationBuilder.build();
ImmutableSet<NonTargetLengthModification> nonTargetLengthModifications = nonTargetLengthModificationBuilder.build();
ImmutableSet<NonTargetCatchModification> nonTargetCatchModifications = nonTargetCatchModificationBuilder.build();
- ImmutableSet<DcpModification> dcpModifications = dcpModificationBuilder.build();
+ ImmutableSet<FloatingObjectModification> floatingObjectModifications = dcpModificationBuilder.build();
boolean noModification = (targetLengthModifications.isEmpty()
&& nonTargetLengthModifications.isEmpty()
&& nonTargetCatchModifications.isEmpty()
- && dcpModifications.isEmpty()
+ && floatingObjectModifications.isEmpty()
&& newSchoolType == null);
ConsolidateActivitySeineDataResult consolidateActivitySeineDataResult;
@@ -310,8 +238,8 @@ public class ConsolidateActivitySeineDataResultBuilder {
} else {
consolidateActivitySeineDataResult = new ConsolidateActivitySeineDataResult();
- consolidateActivitySeineDataResult.setActivitySeineId(activitySeine.getTopiaId());
- consolidateActivitySeineDataResult.setActivitySeineLabel(ActivitySeines.decorate(referenceLocale.ordinal(), activitySeine));
+ consolidateActivitySeineDataResult.setActivitySeineId(activitySeineId);
+ consolidateActivitySeineDataResult.setActivitySeineLabel(activitySeineLabel);
if (newSchoolType != null) {
consolidateActivitySeineDataResult.setSchoolTypeChanged(oldSchoolType, newSchoolType);
@@ -319,7 +247,7 @@ public class ConsolidateActivitySeineDataResultBuilder {
consolidateActivitySeineDataResult.setTargetLengthModifications(targetLengthModifications);
consolidateActivitySeineDataResult.setNonTargetLengthModifications(nonTargetLengthModifications);
consolidateActivitySeineDataResult.setNonTargetCatchModifications(nonTargetCatchModifications);
- consolidateActivitySeineDataResult.setDcpModifications(dcpModifications);
+ consolidateActivitySeineDataResult.setFloatingObjectModifications(floatingObjectModifications);
}
=====================================
services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/consolidate/ConsolidateDataServiceTopia.java
=====================================
--- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/consolidate/ConsolidateDataServiceTopia.java
+++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/consolidate/ConsolidateDataServiceTopia.java
@@ -24,7 +24,6 @@ package fr.ird.observe.services.topia.service.actions.consolidate;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
-import fr.ird.observe.common.constants.seine.DcpComputedValue;
import fr.ird.observe.common.constants.seine.NonTargetCatchComputedValueSource;
import fr.ird.observe.common.constants.seine.SchoolType;
import fr.ird.observe.entities.LengthWeightComputable;
@@ -34,8 +33,9 @@ import fr.ird.observe.entities.referentiel.LengthWeightParameter;
import fr.ird.observe.entities.referentiel.Sex;
import fr.ird.observe.entities.referentiel.SizeMeasureType;
import fr.ird.observe.entities.referentiel.Species;
-import fr.ird.observe.entities.referentiel.seine.SimplifiedObjectTypeNode;
+import fr.ird.observe.entities.referentiel.seine.ObjectMaterial;
import fr.ird.observe.entities.seine.ActivitySeine;
+import fr.ird.observe.entities.seine.ActivitySeines;
import fr.ird.observe.entities.seine.FloatingObject;
import fr.ird.observe.entities.seine.FloatingObjectPart;
import fr.ird.observe.entities.seine.NonTargetCatch;
@@ -50,17 +50,29 @@ import fr.ird.observe.entities.seine.TargetSample;
import fr.ird.observe.entities.seine.TripSeine;
import fr.ird.observe.entities.seine.TripSeines;
import fr.ird.observe.persistence.ObserveTopiaPersistenceContext;
+import fr.ird.observe.services.binder.data.DataBinderSupport;
import fr.ird.observe.services.dto.constants.ReferentialLocale;
+import fr.ird.observe.services.dto.seine.FloatingObjectDto;
+import fr.ird.observe.services.dto.seine.FloatingObjectPartDto;
import fr.ird.observe.services.dto.seine.TripSeineDto;
-import fr.ird.observe.services.service.actions.consolidate.ConsolidateActivitySeineDataResult;
import fr.ird.observe.services.service.actions.consolidate.ConsolidateDataService;
import fr.ird.observe.services.service.actions.consolidate.ConsolidateTripSeineDataRequest;
import fr.ird.observe.services.service.actions.consolidate.ConsolidateTripSeineDataResult;
+import fr.ird.observe.services.service.actions.consolidate.dcp.ConsolidateFloatingObjectRequest;
+import fr.ird.observe.services.service.actions.consolidate.dcp.ConsolidateFloatingObjectResult;
+import fr.ird.observe.services.service.actions.consolidate.dcp.FloatingObjectConsolidateEngine;
+import fr.ird.observe.services.service.actions.consolidate.dcp.SimplifiedObjectTypeManager;
+import fr.ird.observe.services.service.actions.consolidate.dcp.SimplifiedObjectTypeNode;
+import fr.ird.observe.services.service.actions.consolidate.set.ConsolidateActivitySeineDataResult;
import fr.ird.observe.services.topia.service.ObserveServiceTopia;
import java.util.Collection;
+import java.util.LinkedHashSet;
+import java.util.List;
import java.util.Locale;
+import java.util.Objects;
import java.util.Optional;
import java.util.Set;
+import java.util.TreeMap;
import java.util.stream.Collectors;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.logging.Log;
@@ -85,6 +97,13 @@ public class ConsolidateDataServiceTopia extends ObserveServiceTopia implements
return consolidateTripSeineDataResult.orElse(null);
}
+ @Override
+ public SimplifiedObjectTypeManager newSimplifiedObjectTypeManager() {
+ ObserveTopiaPersistenceContext persistenceContext = getTopiaPersistenceContext();
+ ImmutableMap<String, SimplifiedObjectTypeNode> materialMapping = create(persistenceContext.getObjectMaterialDao().findAll());
+ return new SimplifiedObjectTypeManager(materialMapping);
+ }
+
private Optional<ConsolidateTripSeineDataResult> consolidateTripSeine(ReferentialLocale referenceLocale, String tripSeineId, boolean failIfLenghtWeightParameterNotFound) {
TripSeine tripSeine = loadEntity(TripSeineDto.class, tripSeineId);
@@ -112,24 +131,19 @@ public class ConsolidateDataServiceTopia extends ObserveServiceTopia implements
NonTargetCatch.PROPERTY_TOTAL_COUNT_COMPUTED_SOURCE
);
- BeanMonitor dcpMonitor = new BeanMonitor(
- FloatingObject.PROPERTY_COMPUTED_WHEN_ARRIVING_BIODEGRADABLE,
- FloatingObject.PROPERTY_COMPUTED_WHEN_ARRIVING_NON_ENTANGLING,
- FloatingObject.PROPERTY_COMPUTED_WHEN_ARRIVING_SIMPLIFIED_OBJECT_TYPE,
- FloatingObject.PROPERTY_COMPUTED_WHEN_LEAVING_BIODEGRADABLE,
- FloatingObject.PROPERTY_COMPUTED_WHEN_LEAVING_NON_ENTANGLING,
- FloatingObject.PROPERTY_COMPUTED_WHEN_LEAVING_SIMPLIFIED_OBJECT_TYPE
- );
-
Locale applicationLocale = serviceContext.getApplicationLocale();
ObserveTopiaPersistenceContext persistenceContext = getTopiaPersistenceContext();
- ImmutableMap<String, SimplifiedObjectTypeNode> materialMapping = persistenceContext.getObjectMaterialDao().createMaterialMapping();
- SimplifiedObjectTypeManager simplifiedObjectTypeManager = new SimplifiedObjectTypeManager(materialMapping);
+ SimplifiedObjectTypeManager simplifiedObjectTypeManager = newSimplifiedObjectTypeManager();
+
+ FloatingObjectConsolidateEngine floatingObjectConsolidateEngine = new FloatingObjectConsolidateEngine(simplifiedObjectTypeManager);
ImmutableSet.Builder<ConsolidateActivitySeineDataResult> activitiesResultBuilder = new ImmutableSet.Builder<>();
+ DataBinderSupport<FloatingObject, FloatingObjectDto> floatingObjectBinder = getDataBinder(FloatingObjectDto.class);
+ DataBinderSupport<FloatingObjectPart, FloatingObjectPartDto> floatingObjectPartBinder = getDataBinder(FloatingObjectPartDto.class);
+
for (Route route : tripSeine.getRoute()) {
for (ActivitySeine activitySeine : route.getActivitySeine()) {
@@ -141,7 +155,8 @@ public class ConsolidateDataServiceTopia extends ObserveServiceTopia implements
continue;
}
- ConsolidateActivitySeineDataResultBuilder resultBuilder = ConsolidateActivitySeineDataResultBuilder.create(applicationLocale, referenceLocale, activitySeine);
+
+ ConsolidateActivitySeineDataResultBuilder resultBuilder = new ConsolidateActivitySeineDataResultBuilder(applicationLocale, referenceLocale, activitySeine.getTopiaId(), ActivitySeines.decorate(referenceLocale.ordinal(), activitySeine));
ConsolidationActivitySeineDataContext activityContext = new ConsolidationActivitySeineDataContext();
activityContext.locale = applicationLocale;
@@ -154,8 +169,9 @@ public class ConsolidateDataServiceTopia extends ObserveServiceTopia implements
activityContext.targetLengthMonitor = targetLengthMonitor;
activityContext.nonTargetLengthMonitor = nonTargetSampleMonitor;
activityContext.nonTargetCatchMonitor = nonTargetCatchMonitor;
- activityContext.dcpMonitor = dcpMonitor;
- activityContext.simplifiedObjectTypeManager = simplifiedObjectTypeManager;
+ activityContext.floatingObjectConsolidateEngine = floatingObjectConsolidateEngine;
+ activityContext.floatingObjectBinder = floatingObjectBinder;
+ activityContext.floatingObjectPartBinder = floatingObjectPartBinder;
consolidateActivitySeine(activityContext);
@@ -285,73 +301,20 @@ public class ConsolidateDataServiceTopia extends ObserveServiceTopia implements
}
private void updateDcp(FloatingObject dcp, ConsolidationActivitySeineDataContext activityContext) {
- activityContext.watchDcp(dcp);
-
- Set<FloatingObjectPart> whenArriving = dcp.getFloatingObjectPart().stream().filter(p -> p.getWhenArriving() != null).collect(Collectors.toSet());
- Set<FloatingObjectPart> whenLeaving = dcp.getFloatingObjectPart().stream().filter(p -> p.getWhenLeaving() != null).collect(Collectors.toSet());
- computeDcpBiodegradable(dcp, whenArriving, whenLeaving);
- computeDcpNonEntangling(dcp, whenArriving, whenLeaving);
- computeDcpSimplifiedObjectType(dcp, whenArriving, whenLeaving, activityContext.simplifiedObjectTypeManager);
- activityContext.flushDcp();
+ FloatingObjectConsolidateEngine floatingObjectConsolidateEngine = activityContext.floatingObjectConsolidateEngine;
- }
+ ReferentialLocale referentialLocale = getReferentialLocale();
+ DataBinderSupport<FloatingObjectPart, FloatingObjectPartDto> floatingObjectPartBinder = activityContext.floatingObjectPartBinder;
- private void computeDcpSimplifiedObjectType(FloatingObject dcp, Set<FloatingObjectPart> whenArriving, Set<FloatingObjectPart> whenLeaving, SimplifiedObjectTypeManager simplifiedObjectTypeManager) {
- String whenArrivingValue = computeDcpSimplifiedObjectType0(whenArriving, simplifiedObjectTypeManager);
- dcp.setComputedWhenArrivingSimplifiedObjectType(whenArrivingValue);
+ FloatingObjectDto floatingObjectDto = activityContext.floatingObjectBinder.toData(referentialLocale, dcp);
- String whenLeavingValue = computeDcpSimplifiedObjectType0(whenLeaving, simplifiedObjectTypeManager);
- dcp.setComputedWhenLeavingSimplifiedObjectType(whenLeavingValue);
- }
+ ImmutableSet<FloatingObjectPartDto> floatingObjectPartDtos = ImmutableSet.copyOf(dcp.getFloatingObjectPart().stream().map(p -> floatingObjectPartBinder.toData(referentialLocale, p)).collect(Collectors.toSet()));
+ ConsolidateFloatingObjectRequest request = new ConsolidateFloatingObjectRequest(floatingObjectDto, floatingObjectPartDtos);
+ Optional<ConsolidateFloatingObjectResult> result = floatingObjectConsolidateEngine.consolidate(request);
- private void computeDcpNonEntangling(FloatingObject dcp, Set<FloatingObjectPart> whenArriving, Set<FloatingObjectPart> whenLeaving) {
- DcpComputedValue whenArrivingValue = computeDcpNonEntangling0(whenArriving);
- dcp.setComputedWhenArrivingNonEntangling(whenArrivingValue);
+ result.ifPresent(r->activityContext.flushDcp(dcp, r));
- DcpComputedValue whenLeavingValue = computeDcpNonEntangling0(whenLeaving);
- dcp.setComputedWhenLeavingNonEntangling(whenLeavingValue);
- }
-
- private void computeDcpBiodegradable(FloatingObject dcp, Set<FloatingObjectPart> whenArriving, Set<FloatingObjectPart> whenLeaving) {
- DcpComputedValue whenArrivingValue = computeDcpBiodegradable0(whenArriving);
- dcp.setComputedWhenArrivingBiodegradable(whenArrivingValue);
-
- DcpComputedValue whenLeavingValue = computeDcpBiodegradable0(whenLeaving);
- dcp.setComputedWhenLeavingBiodegradable(whenLeavingValue);
- }
-
- private DcpComputedValue computeDcpBiodegradable0(Set<FloatingObjectPart> floatingObjectParts) {
- DcpComputedValue result = DcpComputedValue.UNKNOWN;
- if (!floatingObjectParts.isEmpty()) {
- result = DcpComputedValue.TRUE;
- for (FloatingObjectPart floatingObjectPart : floatingObjectParts) {
- if (!floatingObjectPart.getObjectMaterial().isBiodegradable()) {
- result = DcpComputedValue.FALSE;
- break;
- }
- }
- }
- return result;
- }
-
- private String computeDcpSimplifiedObjectType0(Set<FloatingObjectPart> floatingObjectParts, SimplifiedObjectTypeManager simplifiedObjectTypeManager) {
- Set<String> objectMaterialIds = floatingObjectParts.stream().map(p -> p.getObjectMaterial().getTopiaId()).collect(Collectors.toSet());
- return simplifiedObjectTypeManager.getStandardCode(objectMaterialIds);
- }
-
- private DcpComputedValue computeDcpNonEntangling0(Set<FloatingObjectPart> floatingObjectParts) {
- DcpComputedValue result = DcpComputedValue.UNKNOWN;
- if (!floatingObjectParts.isEmpty()) {
- result = DcpComputedValue.TRUE;
- for (FloatingObjectPart floatingObjectPart : floatingObjectParts) {
- if (!floatingObjectPart.getObjectMaterial().isNonEntangling()) {
- result = DcpComputedValue.FALSE;
- break;
- }
- }
- }
- return result;
}
private void updateNonTargetCatch(ConsolidationActivitySeineDataContext activityContext, NonTargetCatch nonTargetCatch) {
@@ -734,4 +697,54 @@ public class ConsolidateDataServiceTopia extends ObserveServiceTopia implements
}
}
+ static ImmutableMap<String, SimplifiedObjectTypeNode> create(List<ObjectMaterial> materials) {
+ TreeMap<String, SimplifiedObjectTypeNode> mappingBuilder = new TreeMap<>();
+
+ Set<ObjectMaterial> materialsDone = new LinkedHashSet<>();
+ Set<ObjectMaterial> materialsTodo = new LinkedHashSet<>(materials);
+
+ while (!materialsTodo.isEmpty()) {
+
+ Set<ObjectMaterial> currentRoundMaterials;
+ if (materialsDone.isEmpty()) {
+
+ // first round
+ currentRoundMaterials = materialsTodo.stream().filter(f -> f.getParent() == null).collect(Collectors.toSet());
+
+ } else {
+ currentRoundMaterials = materialsTodo.stream().filter(f -> materialsDone.contains(f.getParent())).collect(Collectors.toSet());
+ }
+
+ materialsDone.addAll(currentRoundMaterials);
+ materialsTodo.removeAll(currentRoundMaterials);
+
+ for (ObjectMaterial currentRoundMaterial : currentRoundMaterials) {
+
+ ObjectMaterial simplifiedObjectMaterial = currentRoundMaterial.getSimplifiedObjectMaterial();
+
+ SimplifiedObjectTypeNode node;
+ if (Objects.equals(currentRoundMaterial, simplifiedObjectMaterial)) {
+
+ // new node
+ ObjectMaterial simplifiedParentObjectMaterial = currentRoundMaterial.getSimplifiedParentObjectMaterial();
+ SimplifiedObjectTypeNode parentNode = simplifiedParentObjectMaterial == null ? null : mappingBuilder.get(simplifiedParentObjectMaterial.getTopiaId());
+ node = new SimplifiedObjectTypeNode(currentRoundMaterial.getTopiaId(), currentRoundMaterial.getStandardCode(), parentNode);
+
+ } else {
+
+ // simplified object material is a parent, so must have been process in previous round
+ Objects.requireNonNull(simplifiedObjectMaterial);
+
+ node = mappingBuilder.get(simplifiedObjectMaterial.getTopiaId());
+ Objects.requireNonNull(node);
+
+ }
+
+ mappingBuilder.put(currentRoundMaterial.getTopiaId(), node);
+
+ }
+ }
+ return ImmutableMap.copyOf(mappingBuilder);
+ }
+
}
=====================================
services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/consolidate/ConsolidationActivitySeineDataContext.java
=====================================
--- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/consolidate/ConsolidationActivitySeineDataContext.java
+++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/consolidate/ConsolidationActivitySeineDataContext.java
@@ -22,6 +22,7 @@ package fr.ird.observe.services.topia.service.actions.consolidate;
* #L%
*/
+import fr.ird.observe.common.constants.seine.DcpComputedValue;
import fr.ird.observe.common.constants.seine.SchoolType;
import fr.ird.observe.entities.referentiel.LengthWeightParameter;
import fr.ird.observe.entities.referentiel.LengthWeightParameterNotFoundException;
@@ -32,6 +33,7 @@ import fr.ird.observe.entities.referentiel.SizeMeasureType;
import fr.ird.observe.entities.referentiel.Species;
import fr.ird.observe.entities.seine.ActivitySeine;
import fr.ird.observe.entities.seine.FloatingObject;
+import fr.ird.observe.entities.seine.FloatingObjectPart;
import fr.ird.observe.entities.seine.NonTargetCatch;
import fr.ird.observe.entities.seine.NonTargetLength;
import fr.ird.observe.entities.seine.Route;
@@ -39,6 +41,12 @@ import fr.ird.observe.entities.seine.SetSeine;
import fr.ird.observe.entities.seine.TargetLength;
import fr.ird.observe.entities.seine.TripSeine;
import fr.ird.observe.persistence.ObserveTopiaDaoSupplier;
+import fr.ird.observe.services.binder.data.DataBinderSupport;
+import fr.ird.observe.services.dto.seine.FloatingObjectDto;
+import fr.ird.observe.services.dto.seine.FloatingObjectPartDto;
+import fr.ird.observe.services.service.actions.consolidate.dcp.ConsolidateFloatingObjectResult;
+import fr.ird.observe.services.service.actions.consolidate.dcp.FloatingObjectConsolidateEngine;
+import fr.ird.observe.services.service.actions.consolidate.dcp.FloatingObjectModification;
import java.util.Date;
import java.util.Locale;
import org.nuiton.util.beans.BeanMonitor;
@@ -68,11 +76,11 @@ class ConsolidationActivitySeineDataContext {
BeanMonitor nonTargetCatchMonitor;
- BeanMonitor dcpMonitor;
-
ConsolidateActivitySeineDataResultBuilder resultBuilder;
- SimplifiedObjectTypeManager simplifiedObjectTypeManager;
+ FloatingObjectConsolidateEngine floatingObjectConsolidateEngine;
+ DataBinderSupport<FloatingObject, FloatingObjectDto> floatingObjectBinder;
+ DataBinderSupport<FloatingObjectPart, FloatingObjectPartDto> floatingObjectPartBinder;
public Ocean getOcean() {
return tripSeine.getOcean();
@@ -134,16 +142,43 @@ class ConsolidationActivitySeineDataContext {
}
}
- void watchDcp(FloatingObject dcp) {
- dcpMonitor.setBean(dcp);
- }
-
- void flushDcp() {
- if (dcpMonitor.wasModified()) {
- FloatingObject dcp = (FloatingObject) dcpMonitor.getBean();
- resultBuilder.flushDcpModification(dcp, dcpMonitor.getModifiedProperties());
+ void flushDcp(FloatingObject dcp, ConsolidateFloatingObjectResult consolidateFloatingObjectResult) {
+ resultBuilder.flushDcpModification(consolidateFloatingObjectResult);
+ for (FloatingObjectModification floatingObjectModification : consolidateFloatingObjectResult.getFloatingObjectModifications()) {
+ String modifiedProperty = floatingObjectModification.getPropertyName();
+ switch (modifiedProperty) {
+ case FloatingObjectDto.PROPERTY_COMPUTED_WHEN_ARRIVING_BIODEGRADABLE: {
+
+ dcp.setComputedWhenArrivingBiodegradable((DcpComputedValue) floatingObjectModification.getNewValue());
+ break;
+ }
+ case FloatingObjectDto.PROPERTY_COMPUTED_WHEN_ARRIVING_NON_ENTANGLING: {
+
+ dcp.setComputedWhenArrivingNonEntangling((DcpComputedValue) floatingObjectModification.getNewValue());
+ break;
+ }
+ case FloatingObjectDto.PROPERTY_COMPUTED_WHEN_ARRIVING_SIMPLIFIED_OBJECT_TYPE: {
+
+ dcp.setComputedWhenArrivingSimplifiedObjectType((String) floatingObjectModification.getNewValue());
+ break;
+ }
+ case FloatingObjectDto.PROPERTY_COMPUTED_WHEN_LEAVING_BIODEGRADABLE: {
+
+ dcp.setComputedWhenLeavingBiodegradable((DcpComputedValue) floatingObjectModification.getNewValue());
+ break;
+ }
+ case FloatingObjectDto.PROPERTY_COMPUTED_WHEN_LEAVING_NON_ENTANGLING: {
+
+ dcp.setComputedWhenLeavingNonEntangling((DcpComputedValue) floatingObjectModification.getNewValue());
+ break;
+ }
+ case FloatingObjectDto.PROPERTY_COMPUTED_WHEN_LEAVING_SIMPLIFIED_OBJECT_TYPE: {
+
+ dcp.setComputedWhenLeavingSimplifiedObjectType((String) floatingObjectModification.getNewValue());
+ break;
+ }
+ }
}
- dcpMonitor.setBean(null);
}
void flushTargetLength() {
=====================================
services-topia/src/test/java/fr/ird/observe/services/topia/service/actions/consolidate/SimplifiedObjectTypeManagerTest.java → services-topia/src/test/java/fr/ird/observe/services/topia/service/actions/consolidate/dcp/SimplifiedObjectTypeManagerTest.java
=====================================
--- a/services-topia/src/test/java/fr/ird/observe/services/topia/service/actions/consolidate/SimplifiedObjectTypeManagerTest.java
+++ b/services-topia/src/test/java/fr/ird/observe/services/topia/service/actions/consolidate/dcp/SimplifiedObjectTypeManagerTest.java
@@ -1,4 +1,4 @@
-package fr.ird.observe.services.topia.service.actions.consolidate;
+package fr.ird.observe.services.topia.service.actions.consolidate.dcp;
/*-
* #%L
@@ -22,10 +22,10 @@ package fr.ird.observe.services.topia.service.actions.consolidate;
* #L%
*/
-import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
-import fr.ird.observe.entities.referentiel.seine.SimplifiedObjectTypeNode;
-import fr.ird.observe.persistence.ObserveTopiaPersistenceContext;
+import fr.ird.observe.services.service.actions.consolidate.ConsolidateDataService;
+import fr.ird.observe.services.service.actions.consolidate.dcp.SimplifiedObjectTypeManager;
+import fr.ird.observe.services.service.actions.consolidate.dcp.SimplifiedObjectTypeNode;
import fr.ird.observe.services.topia.service.AbstractServiceTopiaTest;
import fr.ird.observe.test.DatabaseName;
import fr.ird.observe.test.spi.DatabaseNameConfiguration;
@@ -46,12 +46,8 @@ public class SimplifiedObjectTypeManagerTest extends AbstractServiceTopiaTest {
@Before
public void setUp() throws Exception {
- try (ObserveTopiaPersistenceContext persistenceContext = topiaTestMethodResource.newPersistenceContext()) {
-
- ImmutableMap<String, SimplifiedObjectTypeNode> materialMapping = persistenceContext.getObjectMaterialDao().createMaterialMapping();
- simplifiedObjectTypeManager = new SimplifiedObjectTypeManager(materialMapping);
- }
+ simplifiedObjectTypeManager = topiaTestMethodResource.newService(ConsolidateDataService.class).newSimplifiedObjectTypeManager();
}
=====================================
services/src/main/java/fr/ird/observe/services/ObserveDtoInitializer.java
=====================================
--- a/services/src/main/java/fr/ird/observe/services/ObserveDtoInitializer.java
+++ b/services/src/main/java/fr/ird/observe/services/ObserveDtoInitializer.java
@@ -693,7 +693,9 @@ public class ObserveDtoInitializer {
flushReferential(referentialDefaultDefinitionBuilder(ObjectMaterialDto.class)
.addProperty(String.class, ObjectMaterialDto.PROPERTY_PARENT)
.addProperty(String.class, ObjectMaterialDto.PROPERTY_OBJECT_MATERIAL_TYPE)
- .addProperty(String.class, ObjectMaterialDto.PROPERTY_VALIDATION));
+ .addProperty(String.class, ObjectMaterialDto.PROPERTY_VALIDATION)
+ .addProperty(boolean.class, ObjectMaterialDto.PROPERTY_BIODEGRADABLE)
+ .addProperty(boolean.class, ObjectMaterialDto.PROPERTY_NON_ENTANGLING));
}
@Override
=====================================
services/src/main/java/fr/ird/observe/services/dto/reference/AbstractReference.java
=====================================
--- a/services/src/main/java/fr/ird/observe/services/dto/reference/AbstractReference.java
+++ b/services/src/main/java/fr/ird/observe/services/dto/reference/AbstractReference.java
@@ -155,6 +155,10 @@ public abstract class AbstractReference<D extends IdDto> implements ObserveDto,
return labelPropertyValues[propertyIndex];
}
+ public Boolean getBooleanPropertyValue(String propertyName) {
+ return (Boolean) getPropertyValue(propertyName);
+ }
+
public Serializable[] getLabelPropertyValues() {
return labelPropertyValues;
}
=====================================
services/src/main/java/fr/ird/observe/services/service/actions/consolidate/ConsolidateDataService.java
=====================================
--- a/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/ConsolidateDataService.java
+++ b/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/ConsolidateDataService.java
@@ -23,7 +23,9 @@ package fr.ird.observe.services.service.actions.consolidate;
*/
import fr.ird.observe.services.service.ObserveService;
+import fr.ird.observe.services.service.actions.consolidate.dcp.SimplifiedObjectTypeManager;
import fr.ird.observe.services.spi.ReadDataPermission;
+import fr.ird.observe.services.spi.ReadReferentialPermission;
import fr.ird.observe.services.spi.Write;
import fr.ird.observe.services.spi.WriteDataPermission;
import io.ultreia.java4all.http.spi.Post;
@@ -38,6 +40,9 @@ import io.ultreia.java4all.http.spi.Post;
*/
public interface ConsolidateDataService extends ObserveService {
+ @ReadReferentialPermission
+ SimplifiedObjectTypeManager newSimplifiedObjectTypeManager();
+
/**
* Effectue la consolitation à partir de la demande passé en paramètre et retourne les résultats pour les marées
* modifiées.
=====================================
services/src/main/java/fr/ird/observe/services/service/actions/consolidate/ConsolidateTripSeineDataResult.java
=====================================
--- a/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/ConsolidateTripSeineDataResult.java
+++ b/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/ConsolidateTripSeineDataResult.java
@@ -24,6 +24,7 @@ package fr.ird.observe.services.service.actions.consolidate;
import com.google.common.collect.ImmutableSet;
import fr.ird.observe.services.dto.ObserveDto;
+import fr.ird.observe.services.service.actions.consolidate.set.ConsolidateActivitySeineDataResult;
import java.io.Serializable;
/**
=====================================
services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/ConsolidateFloatingObjectRequest.java
=====================================
--- /dev/null
+++ b/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/ConsolidateFloatingObjectRequest.java
@@ -0,0 +1,38 @@
+package fr.ird.observe.services.service.actions.consolidate.dcp;
+
+import com.google.common.collect.ImmutableSet;
+import fr.ird.observe.services.dto.ObserveDto;
+import fr.ird.observe.services.dto.seine.FloatingObjectDto;
+import fr.ird.observe.services.dto.seine.FloatingObjectPartDto;
+import java.util.stream.Collectors;
+
+/**
+ * Created by tchemit on 04/08/17.
+ *
+ * @author Tony Chemit - dev(a)tchemit.fr
+ */
+public class ConsolidateFloatingObjectRequest implements ObserveDto {
+
+ private final FloatingObjectDto dcp;
+ private final ImmutableSet<FloatingObjectPartDto> whenArriving;
+ private final ImmutableSet<FloatingObjectPartDto> whenLeaving;
+
+
+ public ConsolidateFloatingObjectRequest(FloatingObjectDto dcp, ImmutableSet<FloatingObjectPartDto> floatingObjectParts) {
+ this.dcp = dcp;
+ whenArriving = ImmutableSet.copyOf(floatingObjectParts.stream().filter(p -> p.getWhenArriving() != null).collect(Collectors.toSet()));
+ whenLeaving = ImmutableSet.copyOf(floatingObjectParts.stream().filter(p -> p.getWhenLeaving() != null).collect(Collectors.toSet()));
+ }
+
+ public FloatingObjectDto getDcp() {
+ return dcp;
+ }
+
+ public ImmutableSet<FloatingObjectPartDto> getWhenArriving() {
+ return whenArriving;
+ }
+
+ public ImmutableSet<FloatingObjectPartDto> getWhenLeaving() {
+ return whenLeaving;
+ }
+}
=====================================
persistence/src/main/java/fr/ird/observe/entities/referentiel/seine/ObjectMaterialTopiaDao.java → services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/ConsolidateFloatingObjectResult.java
=====================================
--- a/persistence/src/main/java/fr/ird/observe/entities/referentiel/seine/ObjectMaterialTopiaDao.java
+++ b/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/ConsolidateFloatingObjectResult.java
@@ -1,8 +1,8 @@
-package fr.ird.observe.entities.referentiel.seine;
+package fr.ird.observe.services.service.actions.consolidate.dcp;
-/*-
+/*
* #%L
- * ObServe :: Persistence
+ * ObServe :: Services
* %%
* Copyright (C) 2008 - 2017 IRD, Code Lutin, Ultreia.io
* %%
@@ -22,10 +22,34 @@ package fr.ird.observe.entities.referentiel.seine;
* #L%
*/
-import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+import fr.ird.observe.services.dto.ObserveDto;
+import java.io.Serializable;
-public class ObjectMaterialTopiaDao extends AbstractObjectMaterialTopiaDao<ObjectMaterial> {
- public ImmutableMap<String, SimplifiedObjectTypeNode> createMaterialMapping() {
- return SimplifiedObjectTypeNode.create(findAll());
+/**
+ * Pour retourner le résultat de la consolidation d'une activité de type Seine.
+ * <p>
+ * Un tel objet est créé uniquement si des modifications on été effectuée sur l'activité.
+ * <p>
+ * Created on 28/08/15.
+ *
+ * @author Tony Chemit - dev(a)tchemit.fr
+ */
+public class ConsolidateFloatingObjectResult implements Serializable, ObserveDto {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * L'ensemble des modifications sur les objets flottants.
+ */
+ private final ImmutableSet<FloatingObjectModification> floatingObjectModifications;
+
+ ConsolidateFloatingObjectResult(ImmutableSet<FloatingObjectModification> floatingObjectModifications) {
+ this.floatingObjectModifications = floatingObjectModifications;
}
+
+ public ImmutableSet<FloatingObjectModification> getFloatingObjectModifications() {
+ return floatingObjectModifications;
+ }
+
}
=====================================
services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/ConsolidateFloatingObjectResultBuilder.java
=====================================
--- /dev/null
+++ b/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/ConsolidateFloatingObjectResultBuilder.java
@@ -0,0 +1,94 @@
+package fr.ird.observe.services.service.actions.consolidate.dcp;
+
+/*
+ * #%L
+ * ObServe :: Services ToPIA Implementation
+ * %%
+ * Copyright (C) 2008 - 2017 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 com.google.common.collect.ImmutableSet;
+import fr.ird.observe.services.dto.seine.FloatingObjectDto;
+import java.util.Optional;
+
+/**
+ * @author Tony Chemit - dev(a)tchemit.fr
+ * @since 7.0
+ */
+public class ConsolidateFloatingObjectResultBuilder {
+
+ private final ImmutableSet.Builder<FloatingObjectModification> modificationsBuilder = new ImmutableSet.Builder<>();
+
+ public Optional<ConsolidateFloatingObjectResult> build() {
+
+ ImmutableSet<FloatingObjectModification> modifications = modificationsBuilder.build();
+
+ boolean noModification = modifications.isEmpty();
+
+ return Optional.ofNullable(noModification ? null : new ConsolidateFloatingObjectResult(modifications));
+
+ }
+
+ void flushDcpModification(FloatingObjectDto dcp, String... propertyNamesModified) {
+
+ for (String modifiedProperty : propertyNamesModified) {
+ switch (modifiedProperty) {
+ case FloatingObjectDto.PROPERTY_COMPUTED_WHEN_ARRIVING_BIODEGRADABLE: {
+
+ FloatingObjectModification element = new FloatingObjectModification(dcp.getId(), modifiedProperty, dcp.getComputedWhenArrivingBiodegradable());
+ modificationsBuilder.add(element);
+
+ break;
+ }
+ case FloatingObjectDto.PROPERTY_COMPUTED_WHEN_ARRIVING_NON_ENTANGLING: {
+
+ FloatingObjectModification element = new FloatingObjectModification(dcp.getId(), modifiedProperty, dcp.getComputedWhenArrivingNonEntangling());
+ modificationsBuilder.add(element);
+
+ break;
+ }
+ case FloatingObjectDto.PROPERTY_COMPUTED_WHEN_ARRIVING_SIMPLIFIED_OBJECT_TYPE: {
+
+ FloatingObjectModification element = new FloatingObjectModification(dcp.getId(), modifiedProperty, dcp.getComputedWhenArrivingSimplifiedObjectType());
+ modificationsBuilder.add(element);
+ break;
+ }
+ case FloatingObjectDto.PROPERTY_COMPUTED_WHEN_LEAVING_BIODEGRADABLE: {
+
+ FloatingObjectModification element = new FloatingObjectModification(dcp.getId(), modifiedProperty, dcp.getComputedWhenArrivingBiodegradable());
+ modificationsBuilder.add(element);
+ break;
+ }
+ case FloatingObjectDto.PROPERTY_COMPUTED_WHEN_LEAVING_NON_ENTANGLING: {
+
+ FloatingObjectModification element = new FloatingObjectModification(dcp.getId(), FloatingObjectDto.PROPERTY_COMPUTED_WHEN_LEAVING_NON_ENTANGLING, dcp.getComputedWhenLeavingNonEntangling());
+ modificationsBuilder.add(element);
+
+ break;
+ }
+ case FloatingObjectDto.PROPERTY_COMPUTED_WHEN_LEAVING_SIMPLIFIED_OBJECT_TYPE: {
+
+ FloatingObjectModification element = new FloatingObjectModification(dcp.getId(), FloatingObjectDto.PROPERTY_COMPUTED_WHEN_LEAVING_SIMPLIFIED_OBJECT_TYPE, dcp.getComputedWhenLeavingSimplifiedObjectType());
+ modificationsBuilder.add(element);
+ break;
+ }
+ }
+ }
+
+ }
+}
=====================================
services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/FloatingObjectConsolidateEngine.java
=====================================
--- /dev/null
+++ b/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/FloatingObjectConsolidateEngine.java
@@ -0,0 +1,136 @@
+package fr.ird.observe.services.service.actions.consolidate.dcp;
+
+import com.google.common.collect.ImmutableSet;
+import fr.ird.observe.common.constants.seine.DcpComputedValue;
+import fr.ird.observe.services.dto.referential.seine.ObjectMaterialDto;
+import fr.ird.observe.services.dto.seine.FloatingObjectDto;
+import fr.ird.observe.services.dto.seine.FloatingObjectPartDto;
+import java.util.Optional;
+import java.util.Set;
+import java.util.stream.Collectors;
+import org.nuiton.util.beans.BeanMonitor;
+
+/**
+ * Created by tchemit on 04/08/17.
+ *
+ * @author Tony Chemit - dev(a)tchemit.fr
+ */
+public class FloatingObjectConsolidateEngine {
+
+ private final SimplifiedObjectTypeManager simplifiedObjectTypeManager;
+
+ private static class FloatingObjectConsolidateContext {
+
+ final ConsolidateFloatingObjectResultBuilder resultBuilder;
+ final BeanMonitor dcpMonitor;
+
+ FloatingObjectConsolidateContext(ConsolidateFloatingObjectResultBuilder resultBuilder) {
+ this.resultBuilder = resultBuilder;
+ dcpMonitor = new BeanMonitor(
+ FloatingObjectDto.PROPERTY_COMPUTED_WHEN_ARRIVING_BIODEGRADABLE,
+ FloatingObjectDto.PROPERTY_COMPUTED_WHEN_ARRIVING_NON_ENTANGLING,
+ FloatingObjectDto.PROPERTY_COMPUTED_WHEN_ARRIVING_SIMPLIFIED_OBJECT_TYPE,
+ FloatingObjectDto.PROPERTY_COMPUTED_WHEN_LEAVING_BIODEGRADABLE,
+ FloatingObjectDto.PROPERTY_COMPUTED_WHEN_LEAVING_NON_ENTANGLING,
+ FloatingObjectDto.PROPERTY_COMPUTED_WHEN_LEAVING_SIMPLIFIED_OBJECT_TYPE
+ );
+ }
+
+
+ void watchDcp(FloatingObjectDto dcp) {
+ dcpMonitor.setBean(dcp);
+ }
+
+ void flushDcp() {
+ if (dcpMonitor.wasModified()) {
+ FloatingObjectDto dcp = (FloatingObjectDto) dcpMonitor.getBean();
+ resultBuilder.flushDcpModification(dcp, dcpMonitor.getModifiedProperties());
+ }
+ dcpMonitor.setBean(null);
+ }
+ }
+
+ public FloatingObjectConsolidateEngine(SimplifiedObjectTypeManager simplifiedObjectTypeManager) {
+ this.simplifiedObjectTypeManager = simplifiedObjectTypeManager;
+ }
+
+ public Optional<ConsolidateFloatingObjectResult> consolidate(ConsolidateFloatingObjectRequest request) {
+
+ ConsolidateFloatingObjectResultBuilder builder = new ConsolidateFloatingObjectResultBuilder();
+ FloatingObjectConsolidateContext context = new FloatingObjectConsolidateContext(builder);
+
+ FloatingObjectDto dcp = request.getDcp();
+
+ context.watchDcp(dcp);
+
+ ImmutableSet<FloatingObjectPartDto> whenArriving = request.getWhenArriving();
+ ImmutableSet<FloatingObjectPartDto> whenLeaving = request.getWhenLeaving();
+
+ computeDcpSimplifiedObjectType(dcp, whenArriving, whenLeaving);
+ computeDcpNonEntangling(dcp, whenArriving, whenLeaving);
+ computeDcpBiodegradable(dcp, whenArriving, whenLeaving);
+
+ context.flushDcp();
+
+ return builder.build();
+
+ }
+
+ private void computeDcpSimplifiedObjectType(FloatingObjectDto dcp, Set<FloatingObjectPartDto> whenArriving, Set<FloatingObjectPartDto> whenLeaving) {
+ String whenArrivingValue = computeDcpSimplifiedObjectType0(whenArriving);
+ dcp.setComputedWhenArrivingSimplifiedObjectType(whenArrivingValue);
+
+ String whenLeavingValue = computeDcpSimplifiedObjectType0(whenLeaving);
+ dcp.setComputedWhenLeavingSimplifiedObjectType(whenLeavingValue);
+ }
+
+ private void computeDcpNonEntangling(FloatingObjectDto dcp, Set<FloatingObjectPartDto> whenArriving, Set<FloatingObjectPartDto> whenLeaving) {
+ DcpComputedValue whenArrivingValue = computeDcpNonEntangling0(whenArriving);
+ dcp.setComputedWhenArrivingNonEntangling(whenArrivingValue);
+
+ DcpComputedValue whenLeavingValue = computeDcpNonEntangling0(whenLeaving);
+ dcp.setComputedWhenLeavingNonEntangling(whenLeavingValue);
+ }
+
+ private void computeDcpBiodegradable(FloatingObjectDto dcp, Set<FloatingObjectPartDto> whenArriving, Set<FloatingObjectPartDto> whenLeaving) {
+ DcpComputedValue whenArrivingValue = computeDcpBiodegradable0(whenArriving);
+ dcp.setComputedWhenArrivingBiodegradable(whenArrivingValue);
+
+ DcpComputedValue whenLeavingValue = computeDcpBiodegradable0(whenLeaving);
+ dcp.setComputedWhenLeavingBiodegradable(whenLeavingValue);
+ }
+
+ private DcpComputedValue computeDcpBiodegradable0(Set<FloatingObjectPartDto> FloatingObjectPartDtos) {
+ DcpComputedValue result = DcpComputedValue.UNKNOWN;
+ if (!FloatingObjectPartDtos.isEmpty()) {
+ result = DcpComputedValue.TRUE;
+ for (FloatingObjectPartDto FloatingObjectPartDto : FloatingObjectPartDtos) {
+ if (!FloatingObjectPartDto.getObjectMaterial().getBooleanPropertyValue(ObjectMaterialDto.PROPERTY_BIODEGRADABLE)) {
+ result = DcpComputedValue.FALSE;
+ break;
+ }
+ }
+ }
+ return result;
+ }
+
+ private String computeDcpSimplifiedObjectType0(Set<FloatingObjectPartDto> FloatingObjectPartDtos) {
+ Set<String> objectMaterialIds = FloatingObjectPartDtos.stream().map(p -> p.getObjectMaterial().getId()).collect(Collectors.toSet());
+ return simplifiedObjectTypeManager.getStandardCode(objectMaterialIds);
+ }
+
+ private DcpComputedValue computeDcpNonEntangling0(Set<FloatingObjectPartDto> FloatingObjectPartDtos) {
+ DcpComputedValue result = DcpComputedValue.UNKNOWN;
+ if (!FloatingObjectPartDtos.isEmpty()) {
+ result = DcpComputedValue.TRUE;
+ for (FloatingObjectPartDto FloatingObjectPartDto : FloatingObjectPartDtos) {
+ if (!FloatingObjectPartDto.getObjectMaterial().getBooleanPropertyValue(ObjectMaterialDto.PROPERTY_NON_ENTANGLING)) {
+ result = DcpComputedValue.FALSE;
+ break;
+ }
+ }
+ }
+ return result;
+ }
+
+}
=====================================
services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/FloatingObjectModification.java
=====================================
--- /dev/null
+++ b/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/FloatingObjectModification.java
@@ -0,0 +1,38 @@
+package fr.ird.observe.services.service.actions.consolidate.dcp;
+
+import java.io.Serializable;
+
+/**
+ * Created by tchemit on 04/08/17.
+ *
+ * @author Tony Chemit - dev(a)tchemit.fr
+ */
+public class FloatingObjectModification implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ private final String dcpId;
+
+ private final String propertyName;
+
+ private final Serializable newValue;
+
+ public FloatingObjectModification(String dcpId, String propertyName, Serializable newValue) {
+ this.dcpId = dcpId;
+ this.propertyName = propertyName;
+ this.newValue = newValue;
+ }
+
+ public String getDcpId() {
+ return dcpId;
+ }
+
+ public String getPropertyName() {
+ return propertyName;
+ }
+
+ public Serializable getNewValue() {
+ return newValue;
+ }
+
+}
=====================================
services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/consolidate/SimplifiedObjectTypeManager.java → services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/SimplifiedObjectTypeManager.java
=====================================
--- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/consolidate/SimplifiedObjectTypeManager.java
+++ b/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/SimplifiedObjectTypeManager.java
@@ -1,4 +1,4 @@
-package fr.ird.observe.services.topia.service.actions.consolidate;
+package fr.ird.observe.services.service.actions.consolidate.dcp;
/*-
* #%L
@@ -23,7 +23,7 @@ package fr.ird.observe.services.topia.service.actions.consolidate;
*/
import com.google.common.collect.ImmutableMap;
-import fr.ird.observe.entities.referentiel.seine.SimplifiedObjectTypeNode;
+import fr.ird.observe.services.dto.ObserveDto;
import java.util.Comparator;
import java.util.Iterator;
import java.util.LinkedList;
@@ -37,21 +37,20 @@ import java.util.Set;
* @author Tony Chemit - dev(a)tchemit.fr
* @since 7.0
*/
-class SimplifiedObjectTypeManager {
-
+public class SimplifiedObjectTypeManager implements ObserveDto {
// For each object material, get his simplified object type node
private final ImmutableMap<String, SimplifiedObjectTypeNode> mapping;
- SimplifiedObjectTypeManager(ImmutableMap<String, SimplifiedObjectTypeNode> mapping) {
+ public SimplifiedObjectTypeManager(ImmutableMap<String, SimplifiedObjectTypeNode> mapping) {
this.mapping = mapping;
}
- SimplifiedObjectTypeNode getNodeForStandardCode(String standardCode) {
+ public SimplifiedObjectTypeNode getNodeForStandardCode(String standardCode) {
return mapping.values().stream().filter(n -> n.getStandardCode().equals(standardCode)).findFirst().orElseThrow(IllegalArgumentException::new);
}
- String getStandardCode(Set<String> objectMaterialIds) {
+ public String getStandardCode(Set<String> objectMaterialIds) {
List<SimplifiedObjectTypeNode> availableNodes = new LinkedList<>();
for (String objectMaterialId : objectMaterialIds) {
availableNodes.add(mapping.get(objectMaterialId));
=====================================
persistence/src/main/java/fr/ird/observe/entities/referentiel/seine/SimplifiedObjectTypeNode.java → services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/SimplifiedObjectTypeNode.java
=====================================
--- a/persistence/src/main/java/fr/ird/observe/entities/referentiel/seine/SimplifiedObjectTypeNode.java
+++ b/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/SimplifiedObjectTypeNode.java
@@ -1,4 +1,4 @@
-package fr.ird.observe.entities.referentiel.seine;
+package fr.ird.observe.services.service.actions.consolidate.dcp;
/*-
* #%L
@@ -23,14 +23,9 @@ package fr.ird.observe.entities.referentiel.seine;
*/
import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Objects;
-import java.util.Set;
-import java.util.TreeMap;
-import java.util.stream.Collectors;
/**
* Created by tchemit on 02/08/17.
@@ -39,64 +34,14 @@ import java.util.stream.Collectors;
*/
public class SimplifiedObjectTypeNode {
- static ImmutableMap<String, SimplifiedObjectTypeNode> create(List<ObjectMaterial> materials) {
- TreeMap<String, SimplifiedObjectTypeNode> mappingBuilder = new TreeMap<>();
-
- Set<ObjectMaterial> materialsDone = new LinkedHashSet<>();
- Set<ObjectMaterial> materialsTodo = new LinkedHashSet<>(materials);
-
- while (!materialsTodo.isEmpty()) {
-
- Set<ObjectMaterial> currentRoundMaterials;
- if (materialsDone.isEmpty()) {
-
- // first round
- currentRoundMaterials = materialsTodo.stream().filter(f -> f.getParent() == null).collect(Collectors.toSet());
-
- } else {
- currentRoundMaterials = materialsTodo.stream().filter(f -> materialsDone.contains(f.getParent())).collect(Collectors.toSet());
- }
-
- materialsDone.addAll(currentRoundMaterials);
- materialsTodo.removeAll(currentRoundMaterials);
-
- for (ObjectMaterial currentRoundMaterial : currentRoundMaterials) {
-
- ObjectMaterial simplifiedObjectMaterial = currentRoundMaterial.getSimplifiedObjectMaterial();
-
- SimplifiedObjectTypeNode node;
- if (Objects.equals(currentRoundMaterial, simplifiedObjectMaterial)) {
-
- // new node
- ObjectMaterial simplifiedParentObjectMaterial = currentRoundMaterial.getSimplifiedParentObjectMaterial();
- SimplifiedObjectTypeNode parentNode = simplifiedParentObjectMaterial == null ? null : mappingBuilder.get(simplifiedParentObjectMaterial.getTopiaId());
- node = new SimplifiedObjectTypeNode(currentRoundMaterial, parentNode);
-
- } else {
-
- // simplified object material is a parent, so must have been process in previous round
- Objects.requireNonNull(simplifiedObjectMaterial);
-
- node = mappingBuilder.get(simplifiedObjectMaterial.getTopiaId());
- Objects.requireNonNull(node);
-
- }
-
- mappingBuilder.put(currentRoundMaterial.getTopiaId(), node);
-
- }
- }
- return ImmutableMap.copyOf(mappingBuilder);
- }
-
private final int level;
private final String id;
private final String standardCode;
private final SimplifiedObjectTypeNode parent;
- private SimplifiedObjectTypeNode(ObjectMaterial material, SimplifiedObjectTypeNode parent) {
- this.id = material.getTopiaId();
- this.standardCode = material.getStandardCode();
+ public SimplifiedObjectTypeNode(String id, String standardCode, SimplifiedObjectTypeNode parent) {
+ this.id = id;
+ this.standardCode = standardCode;
this.parent = parent;
this.level = (parent == null ? 0 : 1 + parent.getLevel());
}
=====================================
services/src/main/java/fr/ird/observe/services/service/actions/consolidate/ConsolidateActivitySeineDataResult.java → services/src/main/java/fr/ird/observe/services/service/actions/consolidate/set/ConsolidateActivitySeineDataResult.java
=====================================
--- a/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/ConsolidateActivitySeineDataResult.java
+++ b/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/set/ConsolidateActivitySeineDataResult.java
@@ -1,4 +1,4 @@
-package fr.ird.observe.services.service.actions.consolidate;
+package fr.ird.observe.services.service.actions.consolidate.set;
/*
* #%L
@@ -25,6 +25,7 @@ package fr.ird.observe.services.service.actions.consolidate;
import com.google.common.collect.ImmutableSet;
import fr.ird.observe.common.constants.seine.SchoolType;
import fr.ird.observe.services.dto.ObserveDto;
+import fr.ird.observe.services.service.actions.consolidate.dcp.FloatingObjectModification;
import java.io.Serializable;
/**
@@ -77,7 +78,7 @@ public class ConsolidateActivitySeineDataResult implements Serializable, Observe
/**
* L'ensemble des modifications sur les objets flottants.
*/
- private ImmutableSet<DcpModification> dcpModifications;
+ private ImmutableSet<FloatingObjectModification> floatingObjectModifications;
private SchoolType oldSchoolType;
private SchoolType newSchoolType;
@@ -101,8 +102,8 @@ public class ConsolidateActivitySeineDataResult implements Serializable, Observe
return nonTargetCatchModifications;
}
- public ImmutableSet<DcpModification> getDcpModifications() {
- return dcpModifications;
+ public ImmutableSet<FloatingObjectModification> getFloatingObjectModifications() {
+ return floatingObjectModifications;
}
public SchoolType getOldSchoolType() {
@@ -113,186 +114,6 @@ public class ConsolidateActivitySeineDataResult implements Serializable, Observe
return newSchoolType;
}
- public static class TargetLengthModification implements Serializable {
-
- private static final long serialVersionUID = 1L;
-
- String targetLengthId;
-
- protected String speciesLabel;
-
- protected String propertyName;
-
- protected Float newValue;
-
- public String getTargetLengthId() {
- return targetLengthId;
- }
-
- public String getSpeciesLabel() {
- return speciesLabel;
- }
-
- public String getPropertyName() {
- return propertyName;
- }
-
- public Float getNewValue() {
- return newValue;
- }
-
- public void setTargetLengthId(String targetLengthId) {
- this.targetLengthId = targetLengthId;
- }
-
- public void setSpeciesLabel(String speciesLabel) {
- this.speciesLabel = speciesLabel;
- }
-
- public void setPropertyName(String propertyName) {
- this.propertyName = propertyName;
- }
-
- public void setNewValue(Float newValue) {
- this.newValue = newValue;
- }
- }
-
- public static class NonTargetLengthModification implements Serializable {
-
- private static final long serialVersionUID = 1L;
-
- String nonTargetLengthId;
-
- protected String speciesLabel;
-
- protected String propertyName;
-
- protected Float newValue;
-
- public String getNonTargetLengthId() {
- return nonTargetLengthId;
- }
-
- public String getSpeciesLabel() {
- return speciesLabel;
- }
-
- public String getPropertyName() {
- return propertyName;
- }
-
- public Float getNewValue() {
- return newValue;
- }
-
- public void setNonTargetLengthId(String nonTargetLengthId) {
- this.nonTargetLengthId = nonTargetLengthId;
- }
-
- public void setSpeciesLabel(String speciesLabel) {
- this.speciesLabel = speciesLabel;
- }
-
- public void setPropertyName(String propertyName) {
- this.propertyName = propertyName;
- }
-
- public void setNewValue(Float newValue) {
- this.newValue = newValue;
- }
- }
-
- public static class NonTargetCatchModification implements Serializable {
-
- private static final long serialVersionUID = 1L;
-
- String nonTargetCatchId;
-
- protected String speciesLabel;
-
- protected String propertyName;
-
- protected Number newValue;
-
- public String getNonTargetCatchId() {
- return nonTargetCatchId;
- }
-
- public String getSpeciesLabel() {
- return speciesLabel;
- }
-
- public String getPropertyName() {
- return propertyName;
- }
-
- public Number getNewValue() {
- return newValue;
- }
-
- public void setNonTargetCatchId(String nonTargetCatchId) {
- this.nonTargetCatchId = nonTargetCatchId;
- }
-
- public void setSpeciesLabel(String speciesLabel) {
- this.speciesLabel = speciesLabel;
- }
-
- public void setPropertyName(String propertyName) {
- this.propertyName = propertyName;
- }
-
- public void setNewValue(Number newValue) {
- this.newValue = newValue;
- }
- }
-
- public static class DcpModification implements Serializable {
-
- private static final long serialVersionUID = 1L;
-
- String dcpId;
-
- protected String dcpLabel;
-
- protected String propertyName;
-
- protected Serializable newValue;
-
- public String getDcpId() {
- return dcpId;
- }
-
- public String getDcpLabel() {
- return dcpLabel;
- }
-
- public String getPropertyName() {
- return propertyName;
- }
-
- public Serializable getNewValue() {
- return newValue;
- }
-
- public void setDcpId(String dcpId) {
- this.dcpId = dcpId;
- }
-
- public void setDcpLabel(String dcpLabel) {
- this.dcpLabel = dcpLabel;
- }
-
- public void setPropertyName(String propertyName) {
- this.propertyName = propertyName;
- }
-
- public void setNewValue(Serializable newValue) {
- this.newValue = newValue;
- }
- }
-
public void setActivitySeineId(String activitySeineId) {
this.activitySeineId = activitySeineId;
}
@@ -318,7 +139,7 @@ public class ConsolidateActivitySeineDataResult implements Serializable, Observe
this.nonTargetCatchModifications = nonTargetCatchModifications;
}
- public void setDcpModifications(ImmutableSet<DcpModification> dcpModifications) {
- this.dcpModifications = dcpModifications;
+ public void setFloatingObjectModifications(ImmutableSet<FloatingObjectModification> floatingObjectModifications) {
+ this.floatingObjectModifications = floatingObjectModifications;
}
}
=====================================
services/src/main/java/fr/ird/observe/services/service/actions/consolidate/set/NonTargetCatchModification.java
=====================================
--- /dev/null
+++ b/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/set/NonTargetCatchModification.java
@@ -0,0 +1,53 @@
+package fr.ird.observe.services.service.actions.consolidate.set;
+
+import java.io.Serializable;
+
+/**
+ * Created by tchemit on 04/08/17.
+ *
+ * @author Tony Chemit - dev(a)tchemit.fr
+ */
+public class NonTargetCatchModification implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ String nonTargetCatchId;
+
+ protected String speciesLabel;
+
+ protected String propertyName;
+
+ protected Number newValue;
+
+ public String getNonTargetCatchId() {
+ return nonTargetCatchId;
+ }
+
+ public String getSpeciesLabel() {
+ return speciesLabel;
+ }
+
+ public String getPropertyName() {
+ return propertyName;
+ }
+
+ public Number getNewValue() {
+ return newValue;
+ }
+
+ public void setNonTargetCatchId(String nonTargetCatchId) {
+ this.nonTargetCatchId = nonTargetCatchId;
+ }
+
+ public void setSpeciesLabel(String speciesLabel) {
+ this.speciesLabel = speciesLabel;
+ }
+
+ public void setPropertyName(String propertyName) {
+ this.propertyName = propertyName;
+ }
+
+ public void setNewValue(Number newValue) {
+ this.newValue = newValue;
+ }
+}
=====================================
services/src/main/java/fr/ird/observe/services/service/actions/consolidate/set/NonTargetLengthModification.java
=====================================
--- /dev/null
+++ b/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/set/NonTargetLengthModification.java
@@ -0,0 +1,53 @@
+package fr.ird.observe.services.service.actions.consolidate.set;
+
+import java.io.Serializable;
+
+/**
+ * Created by tchemit on 04/08/17.
+ *
+ * @author Tony Chemit - dev(a)tchemit.fr
+ */
+public class NonTargetLengthModification implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ String nonTargetLengthId;
+
+ protected String speciesLabel;
+
+ protected String propertyName;
+
+ protected Float newValue;
+
+ public String getNonTargetLengthId() {
+ return nonTargetLengthId;
+ }
+
+ public String getSpeciesLabel() {
+ return speciesLabel;
+ }
+
+ public String getPropertyName() {
+ return propertyName;
+ }
+
+ public Float getNewValue() {
+ return newValue;
+ }
+
+ public void setNonTargetLengthId(String nonTargetLengthId) {
+ this.nonTargetLengthId = nonTargetLengthId;
+ }
+
+ public void setSpeciesLabel(String speciesLabel) {
+ this.speciesLabel = speciesLabel;
+ }
+
+ public void setPropertyName(String propertyName) {
+ this.propertyName = propertyName;
+ }
+
+ public void setNewValue(Float newValue) {
+ this.newValue = newValue;
+ }
+}
=====================================
services/src/main/java/fr/ird/observe/services/service/actions/consolidate/set/TargetLengthModification.java
=====================================
--- /dev/null
+++ b/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/set/TargetLengthModification.java
@@ -0,0 +1,53 @@
+package fr.ird.observe.services.service.actions.consolidate.set;
+
+import java.io.Serializable;
+
+/**
+ * Created by tchemit on 04/08/17.
+ *
+ * @author Tony Chemit - dev(a)tchemit.fr
+ */
+public class TargetLengthModification implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ private String targetLengthId;
+
+ protected String speciesLabel;
+
+ protected String propertyName;
+
+ protected Float newValue;
+
+ public String getTargetLengthId() {
+ return targetLengthId;
+ }
+
+ public String getSpeciesLabel() {
+ return speciesLabel;
+ }
+
+ public String getPropertyName() {
+ return propertyName;
+ }
+
+ public Float getNewValue() {
+ return newValue;
+ }
+
+ public void setTargetLengthId(String targetLengthId) {
+ this.targetLengthId = targetLengthId;
+ }
+
+ public void setSpeciesLabel(String speciesLabel) {
+ this.speciesLabel = speciesLabel;
+ }
+
+ public void setPropertyName(String propertyName) {
+ this.propertyName = propertyName;
+ }
+
+ public void setNewValue(Float newValue) {
+ this.newValue = newValue;
+ }
+}
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/58a536835f17b71c3cb8a60ddfc…
---
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/58a536835f17b71c3cb8a60ddfc…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] Raccourcis sur assistant de connexion (See #822)
by Tony CHEMIT 04 Aug '17
by Tony CHEMIT 04 Aug '17
04 Aug '17
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
a72cf7a2 by Tony CHEMIT at 2017-08-04T21:43:04+02:00
Raccourcis sur assistant de connexion (See #822)
- - - - -
4 changed files:
- client/src/main/java/fr/ird/observe/client/ui/storage/StorageUI.jaxx
- + client/src/main/java/fr/ird/observe/client/ui/storage/StorageUIBlockingLayerUI.java
- client/src/main/java/fr/ird/observe/client/ui/storage/StorageUIHandler.java
- client/src/main/java/fr/ird/observe/client/ui/storage/tabs/ChooseDbModeUIHandler.java
Changes:
=====================================
client/src/main/java/fr/ird/observe/client/ui/storage/StorageUI.jaxx
=====================================
--- a/client/src/main/java/fr/ird/observe/client/ui/storage/StorageUI.jaxx
+++ b/client/src/main/java/fr/ird/observe/client/ui/storage/StorageUI.jaxx
@@ -44,7 +44,7 @@
<StorageUIModel id='model' javaBean='getContextValue(StorageUIModel.class)'/>
<!-- le bloqueur d'ui lorsqu'une action est en cours ou annulée -->
- <BlockingLayerUI id='busyBlockLayerUI'/>
+ <StorageUIBlockingLayerUI id='busyBlockLayerUI' constructorParams='this'/>
<CardLayout>
<!-- les differents contenu d'onglets -->
=====================================
client/src/main/java/fr/ird/observe/client/ui/storage/StorageUIBlockingLayerUI.java
=====================================
--- /dev/null
+++ b/client/src/main/java/fr/ird/observe/client/ui/storage/StorageUIBlockingLayerUI.java
@@ -0,0 +1,170 @@
+package fr.ird.observe.client.ui.storage;
+
+/*-
+ * #%L
+ * ObServe :: Client
+ * %%
+ * Copyright (C) 2008 - 2017 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 com.google.common.collect.ImmutableSet;
+import fr.ird.observe.client.ObserveSwingApplicationContext;
+import fr.ird.observe.client.ui.actions.AbstractUIAction;
+import fr.ird.observe.client.ui.content.ContentUI;
+import java.awt.event.ActionEvent;
+import java.awt.event.KeyEvent;
+import java.awt.event.MouseEvent;
+import java.util.Set;
+import javax.swing.Action;
+import javax.swing.ActionMap;
+import javax.swing.InputMap;
+import javax.swing.JComponent;
+import javax.swing.KeyStroke;
+import javax.swing.SwingUtilities;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.jdesktop.jxlayer.JXLayer;
+import org.nuiton.jaxx.runtime.swing.BlockingLayerUI;
+
+/**
+ * Created on 09/11/16.
+ *
+ * @author Tony Chemit - dev(a)tchemit.fr
+ * @since 6.0
+ */
+public class StorageUIBlockingLayerUI extends BlockingLayerUI {
+
+ /** Logger */
+ private static final Log log = LogFactory.getLog(StorageUIBlockingLayerUI.class);
+
+ private static final Set<Integer> GLOBAL_KEY_CODES = ImmutableSet.of(
+ KeyEvent.VK_F1,
+ KeyEvent.VK_F2,
+ KeyEvent.VK_F3,
+ KeyEvent.VK_F4,
+ KeyEvent.VK_F5,
+ KeyEvent.VK_F6,
+ KeyEvent.VK_F7,
+ KeyEvent.VK_F8,
+ KeyEvent.VK_F9,
+ KeyEvent.VK_F10,
+ KeyEvent.VK_F11,
+ KeyEvent.VK_F12
+ );
+
+ private final StorageUI ui;
+
+ StorageUIBlockingLayerUI(StorageUI ui) {
+ this.ui = ui;
+ }
+
+ @Override
+ protected void processMouseEvent(MouseEvent e, JXLayer<? extends JComponent> l) {
+
+ switch (e.getID()) {
+ case MouseEvent.MOUSE_ENTERED:
+ if (log.isDebugEnabled()) {
+ log.debug("Enter in formula zone: " + e);
+ }
+ ObserveSwingApplicationContext.get().getMainUI().getModel().setFocusOnNavigation(false);
+ }
+ super.processMouseEvent(e, l);
+ }
+
+ @Override
+ protected void processKeyEvent(KeyEvent e, JXLayer<? extends JComponent> l) {
+
+ if (block) {
+ return;
+ }
+
+ InputMap inputMap = ui.getTabs().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
+ ActionMap actionMap = ui.getTabs().getActionMap();
+
+ boolean consumed = e.isConsumed();
+
+ if (!consumed && e.isControlDown() && e.getKeyChar() != '\uFFFF') {
+
+ KeyStroke keyStroke = KeyStroke.getKeyStroke("ctrl pressed " + (char) e.getKeyCode());
+
+ if (keyStroke == null) {
+ super.processKeyEvent(e, l);
+ return;
+ }
+ consumed = doAction(keyStroke, inputMap, actionMap);
+ }
+
+ if (!consumed && e.getID() == KeyEvent.KEY_RELEASED && !e.isAltDown() && !e.isAltGraphDown()
+ && !e.isMetaDown() && GLOBAL_KEY_CODES.contains(e.getKeyCode())) {
+
+ if (!e.isShiftDown()) {
+
+ KeyStroke keyStroke = KeyStroke.getKeyStroke(e.getKeyCode(), e.isControlDown() ? KeyEvent.CTRL_DOWN_MASK : 0);
+ if (keyStroke == null) {
+ super.processKeyEvent(e, l);
+ return;
+ }
+
+ consumed = doAction(keyStroke, inputMap, actionMap);
+
+ } else if (e.isControlDown()) {
+
+ KeyStroke keyStroke = KeyStroke.getKeyStroke(e.getKeyCode(), KeyEvent.CTRL_DOWN_MASK + KeyEvent.SHIFT_DOWN_MASK);
+ if (keyStroke == null) {
+ super.processKeyEvent(e, l);
+ return;
+ }
+
+ consumed = doAction(keyStroke, inputMap, actionMap);
+ }
+
+ }
+
+ if (consumed) {
+ e.consume();
+ } else {
+ super.processKeyEvent(e, l);
+ }
+
+ }
+
+ protected boolean doAction(KeyStroke keyStroke, InputMap inputMap, ActionMap actionMap) {
+
+ String actionName = (String) inputMap.get(keyStroke);
+ if (actionName != null) {
+
+ Action action = actionMap.get(actionName);
+
+ JComponent editor = (JComponent) action.getValue(AbstractUIAction.EDITOR);
+ if (editor == null || (editor.isVisible() && editor.isEnabled())) {
+
+ if (log.isInfoEnabled()) {
+ log.info("Found action: " + action.getValue(Action.NAME) + " for keyStroke: " + keyStroke);
+ }
+ SwingUtilities.invokeLater(() -> action.actionPerformed(new ActionEvent(ui, 0, (String) action.getValue(Action.NAME))));
+ } else {
+ if (log.isInfoEnabled()) {
+ log.info("Found disabled action: " + action.getValue(Action.NAME) + " for keyStroke: " + keyStroke);
+ }
+ }
+ // We found the action, it is now consumed whatever we have done with it.
+ return true;
+ }
+ return false;
+ }
+}
=====================================
client/src/main/java/fr/ird/observe/client/ui/storage/StorageUIHandler.java
=====================================
--- a/client/src/main/java/fr/ird/observe/client/ui/storage/StorageUIHandler.java
+++ b/client/src/main/java/fr/ird/observe/client/ui/storage/StorageUIHandler.java
@@ -36,6 +36,8 @@ import fr.ird.observe.client.db.constants.ConnexionStatus;
import fr.ird.observe.client.ui.ObserveKeyStrokes;
import fr.ird.observe.client.ui.ObserveMainUI;
import fr.ird.observe.client.ui.UIHelper;
+import fr.ird.observe.client.ui.actions.AbstractUIAction;
+import fr.ird.observe.client.ui.storage.tabs.ChooseDbModeUI;
import fr.ird.observe.client.ui.storage.tabs.ConfigUI;
import fr.ird.observe.client.ui.storage.tabs.RolesTableModel;
import fr.ird.observe.client.ui.storage.tabs.SecurityModel;
@@ -60,18 +62,22 @@ import java.awt.event.ActionEvent;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
+import java.util.Enumeration;
import java.util.Objects;
import java.util.Set;
import javax.swing.AbstractAction;
+import javax.swing.AbstractButton;
import javax.swing.ActionMap;
import javax.swing.InputMap;
import javax.swing.JComponent;
import javax.swing.JTabbedPane;
+import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;
import org.apache.commons.io.FileUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.nuiton.jaxx.runtime.spi.UIHandler;
+import org.nuiton.jaxx.runtime.swing.JAXXButtonGroup;
import org.nuiton.jaxx.runtime.swing.wizard.WizardUILancher;
@@ -755,6 +761,45 @@ public class StorageUIHandler implements UIHandler<StorageUI> {
// chargement du modèle
model.init(ui, dataSourceConfiguration);
+
+ ChooseDbModeUI tabUi = ui.getCHOOSE_DB_MODE();
+
+ addGroupMnemonic(tabUi.getDbMode(), "pressed F");
+ addGroupMnemonic(tabUi.getCreationMode(), "ctrl F");
+
+ }
+
+ private void addGroupMnemonic(JAXXButtonGroup buttonGroup, String keystrokePrefix) {
+ Enumeration<AbstractButton> elements = buttonGroup.getElements();
+ int index = 1;
+
+ InputMap inputMap = ui.getTabs().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
+ ActionMap actionMap = ui.getTabs().getActionMap();
+ while (elements.hasMoreElements()) {
+ AbstractButton abstractButton = elements.nextElement();
+ KeyStroke k = KeyStroke.getKeyStroke(keystrokePrefix + (index++));
+ String actionName = abstractButton.getName();
+ inputMap.put(k, actionName);
+ AbstractAction action = new AbstractAction() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ abstractButton.doClick();
+ Boolean changeStep = (Boolean) abstractButton.getClientProperty("changeStep");
+ if (changeStep != null && changeStep) {
+ SwingUtilities.invokeLater(ui.getNextAction()::doClick);
+ return;
+ }
+ Boolean apply = (Boolean) abstractButton.getClientProperty("apply");
+ if (apply != null && apply) {
+ SwingUtilities.invokeLater(ui.getNextAction()::doClick);
+ SwingUtilities.invokeLater(ui.getApplyAction()::doClick);
+ }
+ }
+ };
+ action.putValue(AbstractUIAction.EDITOR, abstractButton);
+ actionMap.put(actionName, action);
+ ObserveKeyStrokes.addKeyStroke(abstractButton, k);
+ }
}
private void initSelectData(StorageUI ui) {
=====================================
client/src/main/java/fr/ird/observe/client/ui/storage/tabs/ChooseDbModeUIHandler.java
=====================================
--- a/client/src/main/java/fr/ird/observe/client/ui/storage/tabs/ChooseDbModeUIHandler.java
+++ b/client/src/main/java/fr/ird/observe/client/ui/storage/tabs/ChooseDbModeUIHandler.java
@@ -26,27 +26,15 @@ import fr.ird.observe.client.I18nEnumHelper;
import fr.ird.observe.client.ObserveSwingApplicationContext;
import fr.ird.observe.client.ObserveTextGenerator;
import fr.ird.observe.client.configuration.constants.CreationMode;
-import fr.ird.observe.client.ui.ObserveKeyStrokes;
import fr.ird.observe.client.ui.storage.StorageStep;
-import fr.ird.observe.client.ui.storage.StorageUI;
import fr.ird.observe.client.ui.storage.StorageUIModel;
import java.awt.Component;
-import java.awt.event.ActionEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
import java.util.Date;
-import java.util.Enumeration;
-import javax.swing.AbstractAction;
-import javax.swing.AbstractButton;
-import javax.swing.ActionMap;
-import javax.swing.InputMap;
-import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
-import javax.swing.KeyStroke;
-import javax.swing.SwingUtilities;
import org.nuiton.jaxx.runtime.spi.UIHandler;
-import org.nuiton.jaxx.runtime.swing.JAXXButtonGroup;
import static org.nuiton.i18n.I18n.t;
@@ -73,42 +61,6 @@ public class ChooseDbModeUIHandler extends StorageTabUIHandler<ChooseDbModeUI> i
model.addPropertyChangeListener(StorageUIModel.DB_MODE_PROPERTY_NAME, listener);
model.addPropertyChangeListener(StorageUIModel.CREATION_MODE_PROPERTY_NAME, listener);
ui.setDescriptionText(t(StorageStep.CHOOSE_DB_MODE.getDescription()));
-
- addGroupMnemonic(ui.getDbMode(), "pressed F");
- addGroupMnemonic(ui.getCreationMode(), "ctrl F");
-
- }
-
- private void addGroupMnemonic(JAXXButtonGroup buttonGroup, String keystrokePrefix) {
- Enumeration<AbstractButton> elements = buttonGroup.getElements();
- int index = 1;
- InputMap inputMap = ui.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
- ActionMap actionMap = ui.getActionMap();
- while (elements.hasMoreElements()) {
- AbstractButton abstractButton = elements.nextElement();
- KeyStroke k = KeyStroke.getKeyStroke(keystrokePrefix + (index++));
- String actionName = abstractButton.getName();
- inputMap.put(k, actionName);
- actionMap.put(actionName, new AbstractAction() {
- @Override
- public void actionPerformed(ActionEvent e) {
- abstractButton.doClick();
- Boolean changeStep = (Boolean) abstractButton.getClientProperty("changeStep");
- if (changeStep != null && changeStep) {
- StorageUI parentContainer = ui.getParentContainer(StorageUI.class);
- SwingUtilities.invokeLater(parentContainer.getNextAction()::doClick);
- return;
- }
- Boolean apply = (Boolean) abstractButton.getClientProperty("apply");
- if (apply != null && apply) {
- StorageUI parentContainer = ui.getParentContainer(StorageUI.class);
- SwingUtilities.invokeLater(parentContainer.getNextAction()::doClick);
- SwingUtilities.invokeLater(parentContainer.getApplyAction()::doClick);
- }
- }
- });
- ObserveKeyStrokes.addKeyStroke(abstractButton, k);
- }
}
protected String updateInternalDumpModeLabel(@SuppressWarnings("unused") boolean dumpExist) {
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/a72cf7a2f08de9f405f37a8012f…
---
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/a72cf7a2f08de9f405f37a8012f…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] Amélioration de l'onglet des ObjectMaterials (See #828)
by Tony CHEMIT 04 Aug '17
by Tony CHEMIT 04 Aug '17
04 Aug '17
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
bdcb5034 by Tony CHEMIT at 2017-08-04T20:53:41+02:00
Amélioration de l'onglet des ObjectMaterials (See #828)
- - - - -
8 changed files:
- client/src/main/java/fr/ird/observe/client/db/ObserveDataSourcesManager.java
- client/src/main/java/fr/ird/observe/client/db/ObserveMainDataSourceServicesProvider.java
- client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/FloatingObjectUIHandler.java
- client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/FloatingObjectUIModel.java
- 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
- pom.xml
Changes:
=====================================
client/src/main/java/fr/ird/observe/client/db/ObserveDataSourcesManager.java
=====================================
--- a/client/src/main/java/fr/ird/observe/client/db/ObserveDataSourcesManager.java
+++ b/client/src/main/java/fr/ird/observe/client/db/ObserveDataSourcesManager.java
@@ -287,6 +287,7 @@ public class ObserveDataSourcesManager implements Closeable {
// une base locale existe, on l'ouvre
ObserveSwingDataSource dataSource = newLocalDatasource(config);
+ dataSource.setProgressModel(new ProgressModel());
try {
@@ -566,7 +567,7 @@ public class ObserveDataSourcesManager implements Closeable {
}
if (source.canWriteData()) {
- applicationContext.getFloatingObjectReferencesManager().sanitize(progressModel,source);
+ applicationContext.getFloatingObjectReferencesManager().sanitize(progressModel, source);
}
dataContext.populateOpens(openIds);
=====================================
client/src/main/java/fr/ird/observe/client/db/ObserveMainDataSourceServicesProvider.java
=====================================
--- a/client/src/main/java/fr/ird/observe/client/db/ObserveMainDataSourceServicesProvider.java
+++ b/client/src/main/java/fr/ird/observe/client/db/ObserveMainDataSourceServicesProvider.java
@@ -25,7 +25,6 @@ package fr.ird.observe.client.db;
import fr.ird.observe.client.ObserveSwingApplicationContext;
import fr.ird.observe.services.ObserveServicesProviderSupport;
import fr.ird.observe.services.service.ObserveService;
-import java.util.function.Supplier;
/**
* Created by tchemit on 03/08/17.
@@ -34,19 +33,13 @@ import java.util.function.Supplier;
*/
public class ObserveMainDataSourceServicesProvider extends ObserveServicesProviderSupport {
- private final Supplier<ObserveSwingDataSource> dataSourceSupplier;
-
- ObserveMainDataSourceServicesProvider() {
- this.dataSourceSupplier = ObserveSwingApplicationContext.get().getDataSourcesManager()::getMainDataSource;
- }
-
@Override
public void close() {
}
@Override
public <S extends ObserveService> S getService(Class<S> serviceType) {
- return dataSourceSupplier.get().getService(serviceType);
+ return ObserveSwingApplicationContext.get().getDataSourcesManager().getMainDataSource().getService(serviceType);
}
}
=====================================
client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/FloatingObjectUIHandler.java
=====================================
--- a/client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/FloatingObjectUIHandler.java
+++ b/client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/FloatingObjectUIHandler.java
@@ -50,11 +50,13 @@ import java.util.EventObject;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.TreeMap;
import javax.swing.Icon;
import javax.swing.JTable;
+import javax.swing.JTree;
import javax.swing.SwingUtilities;
import javax.swing.event.CellEditorListener;
import javax.swing.event.TableModelListener;
@@ -64,13 +66,19 @@ import javax.swing.table.TableCellRenderer;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.log4j.lf5.viewer.categoryexplorer.TreeModelAdapter;
+import org.jdesktop.swingx.JXTable;
import org.jdesktop.swingx.JXTreeTable;
+import org.jdesktop.swingx.table.ColumnFactory;
+import org.jdesktop.swingx.table.TableColumnExt;
+import org.jdesktop.swingx.tree.DefaultXTreeCellRenderer;
import org.jdesktop.swingx.treetable.DefaultMutableTreeTableNode;
import org.jdesktop.swingx.treetable.DefaultTreeTableModel;
+import org.nuiton.decorator.Decorator;
import org.nuiton.jaxx.runtime.spi.UIHandler;
import org.nuiton.jaxx.runtime.swing.SwingUtil;
import org.nuiton.jaxx.validator.swing.SwingValidatorMessage;
import org.nuiton.jaxx.validator.swing.SwingValidatorMessageTableModel;
+import org.nuiton.jaxx.validator.swing.SwingValidatorUtil;
import org.nuiton.validator.NuitonValidatorScope;
@@ -345,6 +353,8 @@ public class FloatingObjectUIHandler extends ContentUIHandler<FloatingObjectDto,
}
});
+ getModel().addPropertyChangeListener(FloatingObjectUIModel.PROPERTY_PARTS_MODIFIED, e -> getModel().recomputeComputedValues());
+
getBean().addPropertyChangeListener(FloatingObjectDto.PROPERTY_OBJECT_OPERATION, e -> updateMaterials((ReferentialReference) e.getNewValue()));
}
@@ -362,10 +372,18 @@ public class FloatingObjectUIHandler extends ContentUIHandler<FloatingObjectDto,
private static final Icon ICON_NOT_A_REFERENCE = SwingUtil.createImageIcon("star-empty.png");
private static final Icon ICON_IS_A_REFERENCE = SwingUtil.createImageIcon("star.png");
- private void initTable(List<ObjectMaterialHierarchyDto> dtos, JXTreeTable table) {
+ private void initTable(List<ObjectMaterialHierarchyDto> materials, JXTreeTable table) {
+
+ DefaultMutableTreeTableNode root = getModel().createRoot(getDecoratorService().getDecoratorByType(ObjectMaterialDto.class), materials);
+ DefaultTreeTableModel treeModel = new DefaultTreeTableModel(root, Arrays.asList(
+ t("observe.content.floatingObject.table.type"),
+ t("observe.common.whenArriving"),
+ t("observe.common.whenLeaving"))) {
- DefaultMutableTreeTableNode root = getModel().createRoot(getDecoratorService().getDecoratorByType(ObjectMaterialDto.class), dtos);
- DefaultTreeTableModel treeModel = new DefaultTreeTableModel(root, Arrays.asList("Type", "À l'arrivée", "Au départ")) {
+ @Override
+ public int getColumnCount() {
+ return 3;
+ }
@Override
public Class<?> getColumnClass(int column) {
@@ -379,20 +397,61 @@ public class FloatingObjectUIHandler extends ContentUIHandler<FloatingObjectDto,
}
throw new IllegalStateException();
}
+
+ @Override
+ public boolean isCellEditable(Object node, int column) {
+ if (node instanceof FloatingObjectPartsTreeNode) {
+ boolean rowEnabled = ((FloatingObjectPartsTreeNode) node).getUserObject().isEnabled();
+ if (!rowEnabled) {
+ return false;
+ }
+ }
+ return super.isCellEditable(node, column);
+ }
};
table.setTreeTableModel(treeModel);
- table.setLeafIcon(null);
- table.setOpenIcon(null);
- table.setClosedIcon(null);
- table.setCollapsedIcon(null);
+ table.setColumnFactory(new ColumnFactory() {
+
+ @Override
+ public void configureColumnWidths(JXTable table, TableColumnExt columnExt) {
+ if (table.getColumn(0).equals(columnExt)) {
+ columnExt.setPreferredWidth(getUi().getPreferredSize().width - 200);
+ columnExt.setMinWidth(columnExt.getPreferredWidth());
+ return;
+ }
+ super.configureColumnWidths(table, columnExt);
+ columnExt.setMinWidth(columnExt.getPreferredWidth());
+ }
+ });
treeModel.addTreeModelListener(new TreeModelAdapter() {
@Override
public void treeNodesChanged(TreeModelEvent e) {
getModel().setModified(true);
+ getModel().setPartsModified();
}
});
+ DefaultXTreeCellRenderer cellRenderer = new DefaultXTreeCellRenderer() {
+
+ Decorator<ObjectMaterialDto> decorator = getDecoratorService().getDecoratorByType(ObjectMaterialDto.class);
+
+ @Override
+ public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) {
+ if (!(value instanceof FloatingObjectPartsTreeNode)) {
+ return super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
+ }
+ FloatingObjectPartsTreeNode node = (FloatingObjectPartsTreeNode) value;
+ Component result = super.getTreeCellRendererComponent(tree, decorator.toString(node.getUserObject()), sel, expanded, leaf, row, hasFocus);
+ result.setEnabled(node.getUserObject().isEnabled());
+ return result;
+ }
+ };
+
+ cellRenderer.setLeafIcon(null);
+ cellRenderer.setOpenIcon(null);
+ cellRenderer.setClosedIcon(null);
+ table.setTreeCellRenderer(cellRenderer);
TableCellRenderer defaultRenderer = new MyRenderer(table.getDefaultRenderer(Boolean.class), table.getDefaultRenderer(String.class));
table.setDefaultRenderer(Object.class, defaultRenderer);
table.setDefaultEditor(Object.class, new MyTableCellEditor(table.getDefaultEditor(Boolean.class), table.getDefaultEditor(String.class)));
@@ -441,17 +500,25 @@ public class FloatingObjectUIHandler extends ContentUIHandler<FloatingObjectDto,
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
- if (table.isCellEditable(row, column)) {
- FloatingObjectPartsTreeNode node = (FloatingObjectPartsTreeNode) ((JXTreeTable) table).getPathForRow(row).getLastPathComponent();
+ FloatingObjectPartsTreeNode node = (FloatingObjectPartsTreeNode) ((JXTreeTable) table).getPathForRow(row).getLastPathComponent();
+ Objects.requireNonNull(node);
+ TableCellRenderer renderer = notEditableRenderer;
+ Object newValue = value;
+ boolean enabled = true;
+ if (node.getUserObject().getObjectMaterialType() != null && (!node.getUserObject().isEnabled() || table.isCellEditable(row, column))) {
String objectMaterialType = node.getUserObject().getObjectMaterialType().getId();
if ("fr.ird.observe.entities.referentiel.seine.ObjectMaterialType#0#0".equals(objectMaterialType)) {
- value = value == null ? null : Boolean.valueOf(String.valueOf(value));
- return editableRenderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
- } else
- return notEditableRenderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
+ newValue = value == null ? null : Boolean.valueOf(String.valueOf(value));
+ renderer = editableRenderer;
+ }
+ enabled = node.getUserObject().isEnabled();
} else {
- return notEditableRenderer.getTableCellRendererComponent(table, "", isSelected, hasFocus, row, column);
+ newValue = "";
}
+
+ Component component = renderer.getTableCellRendererComponent(table, newValue, isSelected, hasFocus, row, column);
+ component.setEnabled(enabled);
+ return component;
}
}
@@ -487,7 +554,7 @@ public class FloatingObjectUIHandler extends ContentUIHandler<FloatingObjectDto,
editor = stringEditor;
break;
default:
- throw new IllegalStateException("Cant manage with type: " + objectMaterialType);
+ throw new IllegalStateException("Can't manage type: " + objectMaterialType);
}
return editor.getTableCellEditorComponent(table, value, isSelected, row, column);
=====================================
client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/FloatingObjectUIModel.java
=====================================
--- a/client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/FloatingObjectUIModel.java
+++ b/client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/FloatingObjectUIModel.java
@@ -57,6 +57,8 @@ import static org.nuiton.i18n.I18n.t;
public class FloatingObjectUIModel extends ContentUIModel<FloatingObjectDto> {
private static final long serialVersionUID = 1L;
+ static final String PROPERTY_PARTS_MODIFIED = "partsModified";
+
private final ReferenceBinderEngine referenceBinderEngine;
private final ReferentialLocale referentialLocale;
@@ -132,9 +134,17 @@ public class FloatingObjectUIModel extends ContentUIModel<FloatingObjectDto> {
return result.build();
}
+ void setPartsModified() {
+ firePropertyChange(PROPERTY_PARTS_MODIFIED, true);
+ }
+
public void reset() {
whenArriving.clear();
whenLeaving.clear();
+ fireComputedValuesChanged();
+ }
+
+ private void fireComputedValuesChanged() {
firePropertyChange("computedWhenArrivingBiodegradableValue", getComputedWhenArrivingBiodegradableValue());
firePropertyChange("computedWhenArrivingNonEntanglingValue", getComputedWhenArrivingNonEntanglingValue());
firePropertyChange("computedWhenArrivingSimplifiedObjectTypeValue", getComputedWhenArrivingSimplifiedObjectTypeValue());
@@ -161,7 +171,7 @@ public class FloatingObjectUIModel extends ContentUIModel<FloatingObjectDto> {
this.referentialMap = referentialMap;
}
- public void setWhenArriving(String id, String value) {
+ void setWhenArriving(String id, String value) {
ObjectMaterialDto dto = referentialMap.get(id);
if (dto == null) {
return;
@@ -169,7 +179,7 @@ public class FloatingObjectUIModel extends ContentUIModel<FloatingObjectDto> {
whenArriving.put(dto, value);
}
- public void setWhenLeaving(String id, String value) {
+ void setWhenLeaving(String id, String value) {
ObjectMaterialDto dto = referentialMap.get(id);
if (dto == null) {
return;
@@ -250,4 +260,17 @@ public class FloatingObjectUIModel extends ContentUIModel<FloatingObjectDto> {
log.debug("setLeaving: " + leaving);
firePropertyChange(PROPERTY_LEAVING, leaving);
}
+
+ void recomputeComputedValues() {
+ FloatingObjectDto bean = getBean();
+
+ log.info("Computed values need to be recomputed.");
+ bean.setComputedWhenArrivingBiodegradable(null);
+ bean.setComputedWhenArrivingNonEntangling(null);
+ bean.setComputedWhenArrivingSimplifiedObjectType(null);
+ bean.setComputedWhenLeavingBiodegradable(null);
+ bean.setComputedWhenLeavingNonEntangling(null);
+ bean.setComputedWhenLeavingSimplifiedObjectType(null);
+ fireComputedValuesChanged();
+ }
}
=====================================
client/src/main/resources/i18n/client_en_GB.properties
=====================================
--- a/client/src/main/resources/i18n/client_en_GB.properties
+++ b/client/src/main/resources/i18n/client_en_GB.properties
@@ -762,6 +762,7 @@ observe.content.floatingObject.message.updating=updating a floating object
observe.content.floatingObject.not.a.reference=Floating object is not a reference.
observe.content.floatingObject.tab.general=General caracteristics
observe.content.floatingObject.tab.materials=Materials
+observe.content.floatingObject.table.type=Type
observe.content.floatingObject.title=DCP
observe.content.floatingObjectTransmittingBuoyOperation.title=Transmitting buoy operations
observe.content.floatlinesComposition.action.create=Insert this floatline
=====================================
client/src/main/resources/i18n/client_es_ES.properties
=====================================
--- a/client/src/main/resources/i18n/client_es_ES.properties
+++ b/client/src/main/resources/i18n/client_es_ES.properties
@@ -762,6 +762,7 @@ observe.content.floatingObject.message.updating=Se está modificando el objeto f
observe.content.floatingObject.not.a.reference=L'objet flottant n'est pas une référence. \#TODO
observe.content.floatingObject.tab.general=Características generales
observe.content.floatingObject.tab.materials=Materials \#TODO
+observe.content.floatingObject.table.type=Typo
observe.content.floatingObject.title=Objeto flotante
observe.content.floatingObjectTransmittingBuoyOperation.title=Operación sur balises
observe.content.floatlinesComposition.action.create=Insertar este orinque
=====================================
client/src/main/resources/i18n/client_fr_FR.properties
=====================================
--- a/client/src/main/resources/i18n/client_fr_FR.properties
+++ b/client/src/main/resources/i18n/client_fr_FR.properties
@@ -762,6 +762,7 @@ observe.content.floatingObject.message.updating=L'objet flottant est en cours de
observe.content.floatingObject.not.a.reference=L'objet flottant n'est pas une référence.
observe.content.floatingObject.tab.general=Caractéristiques générales
observe.content.floatingObject.tab.materials=Matériaux
+observe.content.floatingObject.table.type=Type
observe.content.floatingObject.title=Objet flottant
observe.content.floatingObjectTransmittingBuoyOperation.title=Opération sur balises
observe.content.floatlinesComposition.action.create=Insérer cet orin
=====================================
pom.xml
=====================================
--- a/pom.xml
+++ b/pom.xml
@@ -171,7 +171,7 @@
<eugenePluginVersion>3.0-alpha-11</eugenePluginVersion>
<processorPluginVersion>1.3</processorPluginVersion>
- <jaxxVersion>3.0-alpha-9</jaxxVersion>
+ <jaxxVersion>3.0-alpha-10</jaxxVersion>
<nuitonI18nVersion>4.0-alpha-3</nuitonI18nVersion>
<nuitonConfigVersion>3.2</nuitonConfigVersion>
<topiaVersion>3.2.1</topiaVersion>
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/bdcb50349cf0155ce142370ab1c…
---
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/bdcb50349cf0155ce142370ab1c…
You're receiving this email because of your account on gitlab.com.
1
0