Now we output merging warnings on status panel #7357

This commit is contained in:
kifir23917 2025-02-06 18:24:00 +03:00 committed by rusefillc
parent 73d262c5a8
commit 554e766bcc
2 changed files with 122 additions and 87 deletions

View File

@ -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();

View File

@ -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<String, Constant> prevValues,
final IniFileModel newIni,
final Map<String, Constant> newValues
final Map<String, Constant> newValues,
final UpdateOperationCallbacks callbacks
) {
final List<Pair<IniField, Constant>> result = new ArrayList<>();
final Map<String, IniField> 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;