From a85cebf2ccd32e2db6b2108202f02d6d6a2da818 Mon Sep 17 00:00:00 2001 From: rusefillc Date: Sat, 7 Oct 2023 11:50:45 -0400 Subject: [PATCH] only:preparation, flexibility and status-quo --- .../com/rusefi/test/SdCardFieldsGeneratorTest.java | 1 + .../com/rusefi/output/GetConfigValueConsumer.java | 13 ++++++++++++- .../output/PerFieldWithStructuresIterator.java | 12 ++++++++++-- .../java/com/rusefi/output/SdCardFieldsContent.java | 13 ++++++++++++- 4 files changed, 35 insertions(+), 4 deletions(-) diff --git a/java_tools/configuration_definition/src/test/java/com/rusefi/test/SdCardFieldsGeneratorTest.java b/java_tools/configuration_definition/src/test/java/com/rusefi/test/SdCardFieldsGeneratorTest.java index 9279f7020c..c954a428fa 100644 --- a/java_tools/configuration_definition/src/test/java/com/rusefi/test/SdCardFieldsGeneratorTest.java +++ b/java_tools/configuration_definition/src/test/java/com/rusefi/test/SdCardFieldsGeneratorTest.java @@ -65,6 +65,7 @@ public class SdCardFieldsGeneratorTest { " struct pid_status_s\n" + " \tfloat pTerm;;\"\", 1, 0, -50000, 50000, 2\n" + " end_struct\n" + + "\tpid_status_s[2 iterate] vvtStatus\n" + "\tpid_status_s alternatorStatus\n" + "end_struct", "\t{engine->outputChannels->alternatorStatus.pTerm, \"alternatorStatus.pTerm\", \"\", 2},\n", diff --git a/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/GetConfigValueConsumer.java b/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/GetConfigValueConsumer.java index d6ea51bdf7..9d8fe9696e 100644 --- a/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/GetConfigValueConsumer.java +++ b/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/GetConfigValueConsumer.java @@ -68,8 +68,19 @@ public class GetConfigValueConsumer implements ConfigurationConsumer { @Override public void handleEndStruct(ReaderState state, ConfigStructure structure) throws IOException { if (state.isStackEmpty()) { + PerFieldWithStructuresIterator.Strategy strategy = new PerFieldWithStructuresIterator.Strategy() { + @Override + public String process(ReaderState state, ConfigField cf, String prefix) { + return processConfig(cf, prefix); + } + + @Override + public String getArrayElementName(ConfigField cf) { + return cf.getOriginalArrayName(); + } + }; PerFieldWithStructuresIterator iterator = new PerFieldWithStructuresIterator(state, structure.getTsFields(), "", - (readerState, cf, prefix) -> processConfig(cf, prefix), "."); + strategy, "."); iterator.loop(); } } diff --git a/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/PerFieldWithStructuresIterator.java b/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/PerFieldWithStructuresIterator.java index a8c99d52df..dfa5652aa7 100644 --- a/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/PerFieldWithStructuresIterator.java +++ b/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/PerFieldWithStructuresIterator.java @@ -34,12 +34,12 @@ class PerFieldWithStructuresIterator extends FieldIterator { ConfigStructure cs = cf.getState().getStructures().get(cf.getType()); String content; if (cs != null) { - if (cf.isFromIterate()) { + if (strategy.skip(cf)) { // do not support this case yet content = ""; } else { // java side of things does not care for 'cs.withPrefix' - String extraPrefix = prefix + cf.getName() + prefixSeparator; + String extraPrefix = prefix + strategy.getArrayElementName(cf) + prefixSeparator; PerFieldWithStructuresIterator fieldIterator = new PerFieldWithStructuresIterator(state, cs.getTsFields(), extraPrefix, strategy, prefixSeparator); fieldIterator.loop(); content = fieldIterator.sb.toString(); @@ -57,5 +57,13 @@ class PerFieldWithStructuresIterator extends FieldIterator { interface Strategy { String process(ReaderState state, ConfigField configField, String prefix); + + default String getArrayElementName(ConfigField cf) { + return cf.getName(); + } + + default boolean skip(ConfigField cf) { + return cf.isFromIterate(); + } } } diff --git a/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/SdCardFieldsContent.java b/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/SdCardFieldsContent.java index 312b5b9894..754e5577f5 100644 --- a/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/SdCardFieldsContent.java +++ b/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/SdCardFieldsContent.java @@ -16,8 +16,19 @@ public class SdCardFieldsContent { public void handleEndStruct(ReaderState state, ConfigStructure structure) throws IOException { if (state.isStackEmpty()) { + PerFieldWithStructuresIterator.Strategy strategy = new PerFieldWithStructuresIterator.Strategy() { + @Override + public String process(ReaderState state, ConfigField configField, String prefix) { + return processOutput(configField, prefix); + } + + @Override + public String getArrayElementName(ConfigField cf) { + return cf.getOriginalArrayName(); + } + }; PerFieldWithStructuresIterator iterator = new PerFieldWithStructuresIterator(state, structure.getTsFields(), "", - (configField, prefix, prefix2) -> processOutput(prefix, prefix2), "."); + strategy, "."); iterator.loop(); String content = iterator.getContent(); body.append(content);