Now we output merging warnings on status panel #7357
This commit is contained in:
parent
73d262c5a8
commit
554e766bcc
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue