mirror of https://github.com/rusefi/rusefi-1.git
extracting opensr5
This commit is contained in:
parent
a9e703ce4a
commit
3d1f560ed7
|
@ -9,5 +9,6 @@
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
<orderEntry type="library" name="annotations" level="project" />
|
<orderEntry type="library" name="annotations" level="project" />
|
||||||
<orderEntry type="library" name="jssc" level="project" />
|
<orderEntry type="library" name="jssc" level="project" />
|
||||||
|
<orderEntry type="library" name="junit" level="project" />
|
||||||
</component>
|
</component>
|
||||||
</module>
|
</module>
|
|
@ -0,0 +1,54 @@
|
||||||
|
package com.opensr5.io;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* (c) Andrey Belomutskiy
|
||||||
|
* 3/1/2017
|
||||||
|
*/
|
||||||
|
public class IniFileReader {
|
||||||
|
private IniFileReader() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <pre>
|
||||||
|
* 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
|
||||||
|
*
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public static String[] split(String str) {
|
||||||
|
ArrayList<String> 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 == ',';
|
||||||
|
}
|
||||||
|
}
|
|
@ -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]);
|
||||||
|
}
|
||||||
|
}
|
|
@ -29,7 +29,7 @@ public class SettingsTab {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void showContent() {
|
public void showContent() {
|
||||||
final Map<String, DialogModel> dialogs = IniFileModel.getinstance().getDialogs();
|
final Map<String, DialogModel> dialogs = IniFileModel.getInstance().getDialogs();
|
||||||
if (dialogs.isEmpty()) {
|
if (dialogs.isEmpty()) {
|
||||||
// todo: show error label
|
// todo: show error label
|
||||||
return;
|
return;
|
||||||
|
@ -121,7 +121,7 @@ public class SettingsTab {
|
||||||
dialog.setText(name);
|
dialog.setText(name);
|
||||||
dialogBody.removeAll();
|
dialogBody.removeAll();
|
||||||
|
|
||||||
DialogModel m = IniFileModel.getinstance().getDialogs().get(name);
|
DialogModel m = IniFileModel.getInstance().getDialogs().get(name);
|
||||||
|
|
||||||
dialogBody.setLayout(new GridLayout(m.getFields().size(), 1));
|
dialogBody.setLayout(new GridLayout(m.getFields().size(), 1));
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package com.rusefi.ui.config;
|
package com.rusefi.ui.config;
|
||||||
|
|
||||||
import com.rusefi.config.Field;
|
import com.opensr5.io.IniFileReader;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
@ -67,7 +67,7 @@ public class IniFileModel {
|
||||||
|
|
||||||
private void handleLine(String line) {
|
private void handleLine(String line) {
|
||||||
try {
|
try {
|
||||||
LinkedList<String> list = new LinkedList<>(Arrays.asList(split(line)));
|
LinkedList<String> list = new LinkedList<>(Arrays.asList(IniFileReader.split(line)));
|
||||||
|
|
||||||
trim(list);
|
trim(list);
|
||||||
|
|
||||||
|
@ -122,33 +122,8 @@ public class IniFileModel {
|
||||||
DIALOG
|
DIALOG
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String[] split(String str) {
|
|
||||||
ArrayList<String> 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()]);
|
public static IniFileModel getInstance() {
|
||||||
}
|
|
||||||
|
|
||||||
private static boolean isWhitespace(int c) {
|
|
||||||
return c == ' ' || c == '\t' || c == '=' || c == ',';
|
|
||||||
}
|
|
||||||
|
|
||||||
public static IniFileModel getinstance() {
|
|
||||||
return INSTANCE;
|
return INSTANCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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));
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue