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));
- }
-}