Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: 655f2efb by Tony Chemit at 2024-09-11T15:49:54+02:00 Reduce digits to 2 for floatline3Length and floatline2Length - - - - - b90951e3 by Tony Chemit at 2024-09-11T15:49:54+02:00 Reduce digits to 2 for floatline3Length and floatline2Length from migration - - - - - 9670ccf7 by Tony Chemit at 2024-09-11T15:49:54+02:00 SectionTemplateDto now treat all floats with 2 digits only - - - - - 2aaeae8d by Tony Chemit at 2024-09-11T15:49:55+02:00 On ui validation, let's use only two digits to compare FloatlineLengths - - - - - 97886cfb by Tony Chemit at 2024-09-11T15:49:55+02:00 On ui editors, let's use only two digits - - - - - 81566471 by Tony Chemit at 2024-09-11T15:51:04+02:00 Merge branch 'feature/issue-2914' into develop Utilisation du convertisseur d'unité sur la définition détaillée de palangre et décimales - Closes #2914 - - - - - 8 changed files: - client/core/src/main/java/fr/ird/observe/client/util/table/JXTableUtil.java - client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/observation/SetDetailCompositionUIInitializer.java - client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/observation/composition/SetDetailCompositionValidatorService.java - core/api/dto/src/main/java/fr/ird/observe/dto/data/ll/observation/SectionTemplateDto.java - core/persistence/java/src/main/resources/META-INF/persistence/Observe/TopiaEntitySqlModel.json - core/persistence/java/src/main/resources/fr/ird/observe/entities/data/ll/observation/BasketImpl.hbm.xml - core/persistence/migration/src/main/java/fr/ird/observe/spi/migration/v9/DataSourceMigrationForVersion_9_4.java - model/src/main/models/Observe/persistence/attribute/digits.properties Changes: ===================================== client/core/src/main/java/fr/ird/observe/client/util/table/JXTableUtil.java ===================================== @@ -31,14 +31,18 @@ import io.ultreia.java4all.decoration.Decorator; import org.jdesktop.swingx.JXTable; import org.jdesktop.swingx.renderer.DefaultTableRenderer; import org.jdesktop.swingx.renderer.StringValue; +import org.nuiton.jaxx.runtime.swing.SwingUtil; +import org.nuiton.jaxx.widgets.number.NumberCellEditor; import javax.swing.JComponent; import javax.swing.JScrollPane; import javax.swing.JTable; +import javax.swing.border.LineBorder; import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumn; import javax.swing.table.TableColumnModel; +import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.util.Collection; @@ -221,6 +225,14 @@ public class JXTableUtil { return getDefaultTableRenderer(sv, true); } + public static TableCellEditor newFloat2ColumnEditor() { + @SuppressWarnings("unchecked") NumberCellEditor<Float> editor = (NumberCellEditor<Float>) NumberCellEditor.newFloatColumnEditor(); + editor.getNumberEditor().setSelectAllTextOnError(true); + editor.getNumberEditor().getTextField().setBorder(new LineBorder(Color.GRAY, 2)); + editor.getNumberEditor().setNumberPattern(SwingUtil.DECIMAL2_PATTERN); + return editor; + } + private static DefaultTableRenderer getDefaultTableRenderer(StringValue sv, boolean useStringValue) { return getDefaultTableRenderer(sv, useStringValue, null); } ===================================== client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/observation/SetDetailCompositionUIInitializer.java ===================================== @@ -174,8 +174,8 @@ public class SetDetailCompositionUIInitializer extends ContentSimpleUIInitialize JXTableUtil.initEditors(table, null, NumberCellEditor.newIntegerColumnEditor(), - NumberCellEditor.newFloatColumnEditor(), - NumberCellEditor.newFloatColumnEditor()); + JXTableUtil.newFloat2ColumnEditor(), + JXTableUtil.newFloat2ColumnEditor()); table.installTableKeyListener(); // table.installTableFocusListener(); ===================================== client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/observation/composition/SetDetailCompositionValidatorService.java ===================================== @@ -92,7 +92,7 @@ public class SetDetailCompositionValidatorService { Float basketFloatline1Length = basket.getFloatline1Length(); if (previousBasketFloatline2Length != null && basketFloatline1Length != null - && Math.abs(previousBasketFloatline2Length - basketFloatline1Length) > 0.001f) { + && Math.abs(previousBasketFloatline2Length - basketFloatline1Length) > 0.01f) { validationContext.addMessage(basketValidator, NuitonValidatorScope.ERROR, "floatline2Length", t("observe.data.ll.observation.SetDetailComposition.basket.invalid.nextFloatline1Length", previousBasketFloatline2Length, basketFloatline1Length)); } } ===================================== core/api/dto/src/main/java/fr/ird/observe/dto/data/ll/observation/SectionTemplateDto.java ===================================== @@ -25,6 +25,7 @@ package fr.ird.observe.dto.data.ll.observation; import io.ultreia.java4all.bean.spi.GenerateJavaBeanDefinition; import io.ultreia.java4all.decoration.Decorated; import io.ultreia.java4all.jaxx.widgets.length.nautical.NauticalLengthFormat; +import io.ultreia.java4all.lang.Numbers; import io.ultreia.java4all.lang.Strings; import java.util.ArrayList; @@ -72,7 +73,7 @@ public class SectionTemplateDto extends GeneratedSectionTemplateDto { String[] parts = floatlineLengths.substring(0, floatlineLengths.indexOf(":")).split("/"); List<Float> newLengths = new ArrayList<>(parts.length); for (String part : parts) { - Float aFloat = Float.valueOf(part); + float aFloat = Numbers.roundTwoDigits(Float.valueOf(part)); newLengths.add(aFloat); } return newLengths; @@ -105,8 +106,8 @@ public class SectionTemplateDto extends GeneratedSectionTemplateDto { Iterator<BasketDto> basketIterator = baskets.iterator(); { // on first basket, using the two first lengths - floatline1 = unitFormat.convert(NauticalLengthFormat.M, lengthsIterator.next()); - floatline2 = unitFormat.convert(NauticalLengthFormat.M,lengthsIterator.next()); + floatline1 = Numbers.roundTwoDigits(unitFormat.convert(NauticalLengthFormat.M, lengthsIterator.next())); + floatline2 = Numbers.roundTwoDigits(unitFormat.convert(NauticalLengthFormat.M,lengthsIterator.next())); BasketDto basket = basketIterator.next(); basket.setFloatline1Length(floatline1); basket.setFloatline2Length(floatline2); @@ -114,7 +115,7 @@ public class SectionTemplateDto extends GeneratedSectionTemplateDto { while (basketIterator.hasNext()) { // floatline1 is previous floatline2 floatline1 = floatline2; - floatline2 = unitFormat.convert(NauticalLengthFormat.M,lengthsIterator.next()); + floatline2 = Numbers.roundTwoDigits(unitFormat.convert(NauticalLengthFormat.M,lengthsIterator.next())); BasketDto basket = basketIterator.next(); basket.setFloatline1Length(floatline1); basket.setFloatline2Length(floatline2); ===================================== core/persistence/java/src/main/resources/META-INF/persistence/Observe/TopiaEntitySqlModel.json ===================================== @@ -664,8 +664,8 @@ "settingIdentifier": "java.lang.Integer" }, "decimalPropertiesScales": { - "floatline1Length": 4, - "floatline2Length": 4 + "floatline1Length": 2, + "floatline2Length": 2 } }, "replicationOrder": [ ===================================== core/persistence/java/src/main/resources/fr/ird/observe/entities/data/ll/observation/BasketImpl.hbm.xml ===================================== @@ -38,10 +38,10 @@ <property name="settingIdentifier" access="field" type="java.lang.Integer" column="settingIdentifier" not-null="true"/> <property name="haulingIdentifier" access="field" type="java.lang.Integer" column="haulingIdentifier"/> <property name="floatline1Length" access="field" type="java.lang.Float"> - <column name="floatline1Length" precision="6" scale="4" sql-type="numeric"/> + <column name="floatline1Length" precision="6" scale="2" sql-type="numeric"/> </property> <property name="floatline2Length" access="field" type="java.lang.Float"> - <column name="floatline2Length" precision="6" scale="4" sql-type="numeric"/> + <column name="floatline2Length" precision="6" scale="2" sql-type="numeric"/> </property> <set name="branchline" order-by="settingIdentifier" lazy="true" cascade="all,delete-orphan" > <key column="basket" foreign-key="fk_ll_observation_basket_branchline" not-null="true" /> ===================================== core/persistence/migration/src/main/java/fr/ird/observe/spi/migration/v9/DataSourceMigrationForVersion_9_4.java ===================================== @@ -24,11 +24,17 @@ package fr.ird.observe.spi.migration.v9; import com.google.auto.service.AutoService; import fr.ird.observe.spi.migration.ByMajorMigrationVersionResource; +import io.ultreia.java4all.lang.Numbers; import io.ultreia.java4all.util.Version; import io.ultreia.java4all.util.sql.SqlQuery; import org.nuiton.topia.service.migration.resources.MigrationVersionResource; import org.nuiton.topia.service.migration.resources.MigrationVersionResourceExecutor; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.sql.ResultSet; +import java.sql.SQLException; + /** * Created at 11/09/2024. * @@ -46,9 +52,48 @@ public class DataSourceMigrationForVersion_9_4 extends ByMajorMigrationVersionRe @Override public void generateSqlScript(MigrationVersionResourceExecutor executor) { boolean withIds = executor.findSingleResult(SqlQuery.wrap("SELECT COUNT (*) FROM common.person", r -> r.getInt(1) > 0)); + if (withIds) { + // See https://gitlab.com/ultreiaio/ird-observe/-/issues/2914 + issue2914(executor); + } + } + private void issue2914(MigrationVersionResourceExecutor executor) { + executor.findMultipleResult(SqlQuery.wrap("SELECT topiaId, floatline1Length, floatline2Length FROM ll_observation.Basket WHERE floatline1Length IS NOT NULL OR floatline2Length IS NOT NULL", BasketRecord::new)) + .stream() + .filter(BasketRecord::isModified) + .map(BasketRecord::toSql) + .forEach(executor::writeSql); } + private static class BasketRecord { + private final String id; + private final Float floatline1Length; + private final Float floatline2Length; + private final boolean modified; + + public BasketRecord(ResultSet r) throws SQLException { + this.id = r.getString(1); + Double floatline1Length = toDouble(r.getObject(2)); + Double floatline2Length = toDouble(r.getObject(3)); + this.floatline1Length = floatline1Length == null ? null : Numbers.roundNDigits(floatline1Length.floatValue(), 2); + this.floatline2Length = floatline2Length == null ? null : Numbers.roundNDigits(floatline2Length.floatValue(), 2); + this.modified = (this.floatline1Length != null && this.floatline1Length.toString().equals(floatline1Length.toString())) || + (this.floatline2Length != null && this.floatline2Length.toString().equals(floatline2Length.toString())); + } + + private static Double toDouble(Object r) { + return r == null ? null : new BigDecimal(r.toString()).setScale(10, RoundingMode.HALF_UP).doubleValue(); + } + + public boolean isModified() { + return modified; + } + + public String toSql() { + return String.format("UPDATE ll_observation.Basket SET floatline1Length = %s, floatline2Length = %s WHERE topiaId ='%s';", floatline1Length, floatline2Length, id); + } + } } ===================================== model/src/main/models/Observe/persistence/attribute/digits.properties ===================================== @@ -58,8 +58,8 @@ data.ll.observation.Activity.attribute.latitude=4 data.ll.observation.Activity.attribute.longitude=4 data.ll.observation.Activity.attribute.seaSurfaceTemperature=2 data.ll.observation.BaitsComposition.attribute.individualWeight=3 -data.ll.observation.Basket.attribute.floatline1Length=4 -data.ll.observation.Basket.attribute.floatline2Length=4 +data.ll.observation.Basket.attribute.floatline1Length=2 +data.ll.observation.Basket.attribute.floatline2Length=2 data.ll.observation.Branchline.attribute.branchlineLength=4 data.ll.observation.Branchline.attribute.snapWeight=3 data.ll.observation.Branchline.attribute.swivelWeight=3 View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/c834f986f40d80af8d7d3bdbd... -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/c834f986f40d80af8d7d3bdbd... You're receiving this email because of your account on gitlab.com.
participants (1)
-
Tony CHEMIT (@tchemit)