From 3d1f560ed74a247f0b937c2936d04b31637414fa Mon Sep 17 00:00:00 2001 From: rusefi Date: Wed, 1 Mar 2017 16:00:13 -0500 Subject: [PATCH] extracting opensr5 --- java_console/opensr5/opensr5.iml | 1 + .../src/com/opensr5/io/IniFileReader.java | 54 ++++++++++++++++++ .../opensr5/io/test/IniFileReaderTest.java | 55 +++++++++++++++++++ .../ui/src/com/rusefi/ui/SettingsTab.java | 4 +- .../com/rusefi/ui/config/IniFileModel.java | 31 +---------- .../ui/config/test/IniFileModelTest.java | 49 ----------------- 6 files changed, 115 insertions(+), 79 deletions(-) create mode 100644 java_console/opensr5/src/com/opensr5/io/IniFileReader.java create mode 100644 java_console/opensr5/src/com/opensr5/io/test/IniFileReaderTest.java delete mode 100644 java_console/ui/src/com/rusefi/ui/config/test/IniFileModelTest.java diff --git a/java_console/opensr5/opensr5.iml b/java_console/opensr5/opensr5.iml index d8b6cffef8..a797b96e7c 100644 --- a/java_console/opensr5/opensr5.iml +++ b/java_console/opensr5/opensr5.iml @@ -9,5 +9,6 @@ + \ No newline at end of file diff --git a/java_console/opensr5/src/com/opensr5/io/IniFileReader.java b/java_console/opensr5/src/com/opensr5/io/IniFileReader.java new file mode 100644 index 0000000000..e9256deac2 --- /dev/null +++ b/java_console/opensr5/src/com/opensr5/io/IniFileReader.java @@ -0,0 +1,54 @@ +package com.opensr5.io; + +import java.util.ArrayList; + +/** + * (c) Andrey Belomutskiy + * 3/1/2017 + */ +public class IniFileReader { + private IniFileReader() { + } + + /** + *
+     * This method reads
+     *    x = y, "Z"
+     * lines returning
+     *  {x, y, "Z"}
+     * array of Strings
+     *
+     * equals sign, space, tab and commas are all equally considered not parts of the token, quotes are supportd
+     *
+     * Technically a line like
+     *     x, y = z
+     * is also supported and would produce same valid output
+     *
+     * 
+ */ + public static String[] split(String str) { + ArrayList strings = new ArrayList<>(); + boolean inQuote = false; + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < str.length(); i++) { + char c = str.charAt(i); + if (c == '\"' || isTokenSeparator(c) && !inQuote) { + if (c == '\"') + inQuote = !inQuote; + if (!inQuote && sb.length() > 0) { + strings.add(sb.toString()); + sb.delete(0, sb.length()); + } + } else + sb.append(c); + } + if (sb.length() > 0) + strings.add(sb.toString()); + + return strings.toArray(new String[strings.size()]); + } + + private static boolean isTokenSeparator(int c) { + return c == ' ' || c == '\t' || c == '=' || c == ','; + } +} diff --git a/java_console/opensr5/src/com/opensr5/io/test/IniFileReaderTest.java b/java_console/opensr5/src/com/opensr5/io/test/IniFileReaderTest.java new file mode 100644 index 0000000000..929fb309ed --- /dev/null +++ b/java_console/opensr5/src/com/opensr5/io/test/IniFileReaderTest.java @@ -0,0 +1,55 @@ +package com.opensr5.io.test; + +import com.opensr5.io.IniFileReader; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +/** + * (c) Andrey Belomutskiy + * 3/1/2017 + */ +public class IniFileReaderTest { + @Test + public void testSplit() { + { + String[] s = IniFileReader.split("1"); + assertEquals(s.length, 1); + assertEquals("1", s[0]); + } + { + String[] s = IniFileReader.split("hello"); + assertEquals(s.length, 1); + assertEquals("hello", s[0]); + } + { + String[] s = IniFileReader.split("\"hello\""); + assertEquals(s.length, 1); + assertEquals("hello", s[0]); + } + { + String[] s = IniFileReader.split("\"hello\",\"w\""); + assertEquals(s.length, 2); + assertEquals("hello", s[0]); + assertEquals("w", s[1]); + } + } + @Test + public void testQuotedTokens() { + { + String[] result = IniFileReader.split("\"hel lo\""); + assertEquals(result.length, 1); + assertEquals("hel lo", result[0]); + } + } + + @Test + public void testRealLine() { + String[] result = IniFileReader.split("\tdialog = engineChars,\t\"Base Engine Settings\""); + assertEquals(result.length, 3); + + assertEquals("dialog", result[0]); + assertEquals("engineChars", result[1]); + assertEquals("Base Engine Settings", result[2]); + } +} diff --git a/java_console/ui/src/com/rusefi/ui/SettingsTab.java b/java_console/ui/src/com/rusefi/ui/SettingsTab.java index 2c43b44b54..e6618b38b7 100644 --- a/java_console/ui/src/com/rusefi/ui/SettingsTab.java +++ b/java_console/ui/src/com/rusefi/ui/SettingsTab.java @@ -29,7 +29,7 @@ public class SettingsTab { } public void showContent() { - final Map dialogs = IniFileModel.getinstance().getDialogs(); + final Map dialogs = IniFileModel.getInstance().getDialogs(); if (dialogs.isEmpty()) { // todo: show error label return; @@ -121,7 +121,7 @@ public class SettingsTab { dialog.setText(name); dialogBody.removeAll(); - DialogModel m = IniFileModel.getinstance().getDialogs().get(name); + DialogModel m = IniFileModel.getInstance().getDialogs().get(name); dialogBody.setLayout(new GridLayout(m.getFields().size(), 1)); diff --git a/java_console/ui/src/com/rusefi/ui/config/IniFileModel.java b/java_console/ui/src/com/rusefi/ui/config/IniFileModel.java index c0e4564cdc..18572ce988 100644 --- a/java_console/ui/src/com/rusefi/ui/config/IniFileModel.java +++ b/java_console/ui/src/com/rusefi/ui/config/IniFileModel.java @@ -1,6 +1,6 @@ package com.rusefi.ui.config; -import com.rusefi.config.Field; +import com.opensr5.io.IniFileReader; import java.io.*; import java.util.*; @@ -67,7 +67,7 @@ public class IniFileModel { private void handleLine(String line) { try { - LinkedList list = new LinkedList<>(Arrays.asList(split(line))); + LinkedList list = new LinkedList<>(Arrays.asList(IniFileReader.split(line))); trim(list); @@ -122,33 +122,8 @@ public class IniFileModel { DIALOG } - public static String[] split(String str) { - ArrayList strings = new ArrayList<>(); - boolean inQuote = false; - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < str.length(); i++) { - char c = str.charAt(i); - if (c == '\"' || isWhitespace(c) && !inQuote) { - if (c == '\"') - inQuote = !inQuote; - if (!inQuote && sb.length() > 0) { - strings.add(sb.toString()); - sb.delete(0, sb.length()); - } - } else - sb.append(c); - } - if (sb.length() > 0) - strings.add(sb.toString()); - return strings.toArray(new String[strings.size()]); - } - - private static boolean isWhitespace(int c) { - return c == ' ' || c == '\t' || c == '=' || c == ','; - } - - public static IniFileModel getinstance() { + public static IniFileModel getInstance() { return INSTANCE; } diff --git a/java_console/ui/src/com/rusefi/ui/config/test/IniFileModelTest.java b/java_console/ui/src/com/rusefi/ui/config/test/IniFileModelTest.java deleted file mode 100644 index 0917c20a23..0000000000 --- a/java_console/ui/src/com/rusefi/ui/config/test/IniFileModelTest.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.rusefi.ui.config.test; - -import com.rusefi.ui.config.IniFileModel; -import org.junit.Test; - -import java.util.Arrays; - -import static org.junit.Assert.assertEquals; - -/** - * (c) Andrey Belomutskiy - * 12/23/2015. - */ -public class IniFileModelTest { - @Test - public void testSplit() { - { - String[] s = IniFileModel.split("1"); - assertEquals(s.length, 1); - } - { - String[] s = IniFileModel.split("hello"); - assertEquals(s.length, 1); - } - { - String[] s = IniFileModel.split("\"hello\""); - assertEquals(s.length, 1); - } - { - String[] s = IniFileModel.split("\"hello\",\"w\""); - assertEquals(s.length, 2); - } - } - - @Test - public void testQuotedTokens() { - { - String[] s = IniFileModel.split("\"hel lo\""); - assertEquals(s.length, 1); - } - } - - @Test - public void testRealLine() { - String[] s = IniFileModel.split("\tdialog = engineChars,\t\"Base Engine Settings\""); - assertEquals(s.length, 3); - System.out.println(Arrays.toString(s)); - } -}