From 554e766bcc6c87f30bbc22f38819299afa133fae Mon Sep 17 00:00:00 2001 From: kifir23917 Date: Thu, 6 Feb 2025 18:24:00 +0300 Subject: [PATCH] Now we output merging warnings on status panel #7357 --- .../maintenance/CalibrationsHelper.java | 3 +- .../rusefi/maintenance/IniFieldsAnalizer.java | 206 ++++++++++-------- 2 files changed, 122 insertions(+), 87 deletions(-) diff --git a/java_console/ui/src/main/java/com/rusefi/maintenance/CalibrationsHelper.java b/java_console/ui/src/main/java/com/rusefi/maintenance/CalibrationsHelper.java index 0554d936b3..0da608eec7 100644 --- a/java_console/ui/src/main/java/com/rusefi/maintenance/CalibrationsHelper.java +++ b/java_console/ui/src/main/java/com/rusefi/maintenance/CalibrationsHelper.java @@ -138,7 +138,8 @@ public class CalibrationsHelper { prevIniFile, prevMsq.getConstantsAsMap(), newIniFile, - newMsq.getConstantsAsMap() + newMsq.getConstantsAsMap(), + callbacks ); if (!valuesToUpdate.isEmpty()) { final ConfigurationImage mergedImage = newCalibrations.getImage().getConfigurationImage().clone(); diff --git a/java_console/ui/src/main/java/com/rusefi/maintenance/IniFieldsAnalizer.java b/java_console/ui/src/main/java/com/rusefi/maintenance/IniFieldsAnalizer.java index d63d435aec..59c7d51ac6 100644 --- a/java_console/ui/src/main/java/com/rusefi/maintenance/IniFieldsAnalizer.java +++ b/java_console/ui/src/main/java/com/rusefi/maintenance/IniFieldsAnalizer.java @@ -4,6 +4,7 @@ import com.devexperts.logging.Logging; import com.opensr5.ini.IniFileModel; import com.opensr5.ini.field.*; import com.rusefi.core.Pair; +import com.rusefi.io.UpdateOperationCallbacks; import com.rusefi.tune.xml.Constant; import java.util.*; @@ -19,7 +20,8 @@ public class IniFieldsAnalizer { final IniFileModel prevIni, final Map prevValues, final IniFileModel newIni, - final Map newValues + final Map newValues, + final UpdateOperationCallbacks callbacks ) { final List> result = new ArrayList<>(); final Map prevIniFields = prevIni.getAllIniFields(); @@ -33,51 +35,56 @@ public class IniFieldsAnalizer { if (prevValue != null && newValue != null) { if (!Objects.equals(prevValue.getValue(), newValue.getValue())) { if (!Objects.equals(prevValue.getName(), newValue.getName())) { - log.warn(String.format( - "Field `%s` cannot be updated because its name is updated: %s -> %s", + callbacks.logLine(String.format( + "WARNING! Field `%s` cannot be updated because its name is updated: `%s` -> `%s`", prevFieldName, - prevValue, - newValue + prevValue.getName(), + newValue.getName() )); } else if (!Objects.equals(prevValue.getUnits(), newValue.getUnits())) { - log.warn(String.format( - "Field `%s` cannot be updated because its units are updated: %s -> %s", + callbacks.logLine(String.format( + "WARNING! Field `%s` cannot be updated because its units are updated: `%s` -> `%s`", prevFieldName, - prevValue, - newValue + prevValue.getUnits(), + newValue.getUnits() )); } else if (!Objects.equals(prevValue.getDigits(), newValue.getDigits())) { - log.warn(String.format( - "Field `%s` cannot be updated because its digits are updated: %s -> %s", + callbacks.logLine(String.format( + "WARNING! Field `%s` cannot be updated because its digits are updated: `%s` -> `%s`", prevFieldName, - prevValue, - newValue + prevValue.getDigits(), + newValue.getDigits() )); } else if (!Objects.equals(prevValue.getCols(), newValue.getCols())) { - log.warn(String.format( - "Field `%s` cannot be updated because its column count is updated: %s -> %s", + callbacks.logLine(String.format( + "WARNING! Field `%s` cannot be updated because its column count is updated: `%s` -> `%s`", prevFieldName, - prevValue, - newValue + prevValue.getCols(), + newValue.getCols() )); } else if (!Objects.equals(prevValue.getRows(), newValue.getRows())) { - log.warn(String.format( - "Field `%s` cannot be updated because its column count is updated: %s -> %s", + callbacks.logLine(String.format( + "WARNING! Field `%s` cannot be updated because its row count is updated: `%s` -> `%s`", prevFieldName, - prevValue, - newValue + prevValue.getRows(), + newValue.getRows() )); - } else if (canValueBeMigrated(prevFieldEntry.getValue(), newField, prevValue.getValue())) { + } else if (canValueBeMigrated( + prevFieldEntry.getValue(), + newField, + prevValue.getValue(), + callbacks + )) { log.info(String.format( - "Field `%s` will be updated: %s -> %s", + "Field `%s` is going to be restored: `%s` -> `%s`", prevFieldName, - prevValue, - newValue + prevValue.getValue(), + newValue.getValue() )); result.add(new Pair<>(newField, prevValue)); } else { log.warn(String.format( - "Field `%s` cannot be updated: %s -> %s", + "Field `%s` cannot be updated: `%s` -> `%s`", prevFieldName, prevFieldEntry.getValue(), newField @@ -95,53 +102,51 @@ public class IniFieldsAnalizer { private static boolean canValueBeMigrated( final IniField prevField, final IniField newField, - final String prevValue + final String prevValue, + final UpdateOperationCallbacks callbacks ) { boolean result = false; final String prevFieldName = prevField.getName(); if (!INI_FIELDS_TO_IGNORE.contains(prevFieldName)) { if (prevField instanceof ScalarIniField) { if (newField instanceof ScalarIniField) { - result = canScalarValueBeMigrated((ScalarIniField) prevField, (ScalarIniField) newField); + result = canScalarValueBeMigrated((ScalarIniField) prevField, (ScalarIniField) newField, callbacks); } else { - log.warn(String.format( - "Field `%s` cannot be migrated because it is no is no longer scalar in new .ini file: %s -> %s", - prevFieldName, - prevField, - newField + callbacks.logLine(String.format( + "WARNING! Field `%s` cannot be migrated because it is no is no longer scalar in new .ini file", + prevFieldName )); } } else if (prevField instanceof StringIniField) { if (newField instanceof StringIniField) { result = true; } else { - log.warn(String.format( - "Field `%s` cannot be migrated because it is no longer string in new .ini file: %s -> %s", - prevFieldName, - prevField, - newField + callbacks.logLine(String.format( + "WARNING! Field `%s` cannot be migrated because it is no longer string in new .ini file", + prevFieldName )); } } else if (prevField instanceof EnumIniField) { if (newField instanceof EnumIniField) { - result = canEnumValueBeMigrated((EnumIniField) prevField, (EnumIniField) newField, prevValue); + result = canEnumValueBeMigrated( + (EnumIniField) prevField, + (EnumIniField) newField, + prevValue, + callbacks + ); } else { - log.warn(String.format( - "Field `%s` cannot be migrated because it is no longer enum in new .ini file: %s -> %s", - prevFieldName, - prevField, - newField + callbacks.logLine(String.format( + "WARNING! `%s` cannot be migrated because it is no longer enum in new .ini file", + prevFieldName )); } } else if (prevField instanceof ArrayIniField) { if (newField instanceof ArrayIniField) { - result = canArrayValueBeMigrated((ArrayIniField) prevField, (ArrayIniField) newField); + result = canArrayValueBeMigrated((ArrayIniField) prevField, (ArrayIniField) newField, callbacks); } else { - log.warn(String.format( - "Field `%s` cannot be migrated because it is no longer array in new .ini file: %s -> %s", - prevFieldName, - prevField, - newField + callbacks.logLine(String.format( + "WARNING! Field `%s` cannot be migrated because it is no longer array in new .ini file", + prevFieldName )); } } else { @@ -151,19 +156,30 @@ public class IniFieldsAnalizer { return result; } - private static boolean canScalarValueBeMigrated(final ScalarIniField prevField, final ScalarIniField newField) { + private static boolean canScalarValueBeMigrated( + final ScalarIniField prevField, + final ScalarIniField newField, + final UpdateOperationCallbacks callbacks + ) { boolean result = false; if (!Objects.equals(prevField.getUnits(), newField.getUnits())) { - log.warn(String.format( - "Field cannot be migrated because units are updated: %s -> %s", + callbacks.logLine(String.format( + "WARNING! Field `%s` cannot be migrated because units are updated: `%s` -> `%s`", + prevField.getName(), prevField, newField )); } else if (!Objects.equals(prevField.getType(), newField.getType())) { - log.warn(String.format("Field cannot be migrated because type is updated: %s -> %s", prevField, newField)); + callbacks.logLine(String.format( + "WARNING! Field `%s` cannot be migrated because type is updated: `%s` -> `%s`", + prevField.getName(), + prevField, + newField + )); } else if (!Objects.equals(prevField.getDigits(), newField.getDigits())) { - log.warn(String.format( - "Field cannot be migrated because digits are updated: %s -> %s", + callbacks.logLine(String.format( + "WARNING! Field `%s` cannot be migrated because digits are updated: `%s` -> `%s`", + prevField.getName(), prevField, newField )); @@ -176,30 +192,36 @@ public class IniFieldsAnalizer { private static boolean canEnumValueBeMigrated( final EnumIniField prevField, final EnumIniField newField, - final String prevValue + final String prevValue, + final UpdateOperationCallbacks callbacks ) { boolean result = false; - //TODO: Should we check if `enums` map is updated? if (!Objects.equals(prevField.getType(), newField.getType())) { - log.warn(String.format("Field cannot be migrated because type is updated: %s -> %s", prevField, newField)); + callbacks.logLine(String.format( + "WARNING! Field `%s` cannot be migrated because type is updated: `%s` -> `%s`", + prevField.getName(), + prevField.getType(), + newField.getType() + )); } else if (!Objects.equals(prevField.getBitPosition(), newField.getBitPosition())) { - log.warn(String.format( - "Field cannot be migrated because bit position is updated: %s -> %s", - prevField, - newField + callbacks.logLine(String.format( + "WARNING! Field `%s` cannot be migrated because bit position is updated: `%s` -> `%s`", + prevField.getName(), + prevField.getBitPosition(), + newField.getBitPosition() )); } else if (!Objects.equals(prevField.getBitSize0(), newField.getBitSize0())) { - log.warn(String.format( - "Field cannot be migrated because bit size 0 is updated: %s -> %s", - prevField, - newField + callbacks.logLine(String.format( + "WARNING! Field `%s` cannot be migrated because bit size 0 is updated: `%s` -> `%s`", + prevField.getName(), + prevField.getBitSize0(), + newField.getBitSize0() )); } else if (newField.getEnums().indexOf(prevValue) == -1) { - log.warn(String.format( - "Field cannot be migrated because previous value `%s` disappeared: %s -> %s", - prevValue, - prevField, - newField + callbacks.logLine(String.format( + "WARNING! Field `%s` cannot be migrated because value `%s` has disappeared", + prevField.getName(), + prevValue )); } else { result = true; @@ -207,27 +229,39 @@ public class IniFieldsAnalizer { return result; } - private static boolean canArrayValueBeMigrated(final ArrayIniField prevField, final ArrayIniField newField) { + private static boolean canArrayValueBeMigrated( + final ArrayIniField prevField, + final ArrayIniField newField, + final UpdateOperationCallbacks callbacks + ) { boolean result = false; if (!Objects.equals(prevField.getType(), newField.getType())) { - log.warn(String.format("Field cannot be migrated because type is updated: %s -> %s", prevField, newField)); + callbacks.logLine(String.format( + "WARNING! Field `%s` cannot be migrated because type is updated: `%s` -> `%s`", + prevField.getName(), + prevField.getType(), + newField.getType() + )); } else if (!Objects.equals(prevField.getCols(), newField.getCols())) { - log.warn(String.format( - "Field cannot be migrated because column count is updated: %s -> %s", - prevField, - newField + callbacks.logLine(String.format( + "WARNING! Field `%s` cannot be migrated because column count is updated: `%s` -> `%s`", + prevField.getName(), + prevField.getCols(), + newField.getCols() )); } else if (!Objects.equals(prevField.getRows(), newField.getRows())) { - log.warn(String.format( - "Field cannot be migrated because row count is updated: %s -> %s", - prevField, - newField + callbacks.logLine(String.format( + "WARNING! Field `%s` cannot be migrated because row count is updated: `%s` -> `%s`", + prevField.getName(), + prevField.getRows(), + newField.getRows() )); } else if (!Objects.equals(prevField.getDigits(), newField.getDigits())) { - log.warn(String.format( - "Field cannot be migrated because digits are updated: %s -> %s", - prevField, - newField + callbacks.logLine(String.format( + "WARNING! Field `%s` cannot be migrated because digits are updated: `%s` -> `%s`", + prevField.getName(), + prevField.getDigits(), + newField.getDigits() )); } else { result = true;