Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions MODULE.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -222,6 +222,7 @@ maven.install(
"org.redisson:redisson:3.35.0",
"org.slf4j:slf4j-api:2.0.16",
"org.slf4j:slf4j-jdk14:2.0.16",
"org.tomlj:tomlj:1.1.1",
"org.zeromq:jeromq:0.6.0",
],
excluded_artifacts = [
Expand Down
39 changes: 37 additions & 2 deletions java/maven_install.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL",
"__INPUT_ARTIFACTS_HASH": 1231734442,
"__RESOLVED_ARTIFACTS_HASH": 1820339376,
"__INPUT_ARTIFACTS_HASH": -1493944461,
"__RESOLVED_ARTIFACTS_HASH": -469751719,
"conflict_resolution": {
"com.google.code.gson:gson:2.8.9": "com.google.code.gson:gson:2.11.0",
"com.google.errorprone:error_prone_annotations:2.3.2": "com.google.errorprone:error_prone_annotations:2.28.0",
Expand Down Expand Up @@ -514,6 +514,13 @@
},
"version": "12.4"
},
"org.antlr:antlr4-runtime": {
"shasums": {
"jar": "e06c6553c1ccc14d36052ec4b0fc6f13b808cf957b5b1dc3f61bf401996ada59",
"sources": "6fa0efb711a152842ecda1d41ceab94fb2049f833e00e360e161ac0e7a3819fe"
},
"version": "4.11.1"
},
"org.apache.bcel:bcel": {
"shasums": {
"jar": "a119a4420350dea669acfd84120ecc7e5742dcabcc82b0b9f9755dc692335aa2",
Expand Down Expand Up @@ -801,6 +808,13 @@
},
"version": "1.7.21"
},
"org.tomlj:tomlj": {
"shasums": {
"jar": "383b7c66966c42ee4913ec977a7b6573631866bddc5318ec4a6215b688dd0d6c",
"sources": "533276104d58ebc92ce049c59a129717ce7daf0e9340969256fdb61f4f06f717"
},
"version": "1.1.1"
},
"org.xmlresolver:xmlresolver": {
"shasums": {
"data": "173904bdbd783ba0fac92c5bcc05da5d09f0ce7eed24346666ea0a239461f9b4",
Expand Down Expand Up @@ -1159,6 +1173,10 @@
"org.slf4j:slf4j-simple": [
"org.slf4j:slf4j-api"
],
"org.tomlj:tomlj": [
"org.antlr:antlr4-runtime",
"org.checkerframework:checker-qual"
],
"org.xmlresolver:xmlresolver": [
"org.apache.httpcomponents.client5:httpclient5",
"org.apache.httpcomponents.core5:httpcore5"
Expand Down Expand Up @@ -2007,6 +2025,15 @@
"net.sf.saxon.xpath",
"net.sf.saxon.z"
],
"org.antlr:antlr4-runtime": [
"org.antlr.v4.runtime",
"org.antlr.v4.runtime.atn",
"org.antlr.v4.runtime.dfa",
"org.antlr.v4.runtime.misc",
"org.antlr.v4.runtime.tree",
"org.antlr.v4.runtime.tree.pattern",
"org.antlr.v4.runtime.tree.xpath"
],
"org.apache.bcel:bcel": [
"org.apache.bcel",
"org.apache.bcel.classfile",
Expand Down Expand Up @@ -2888,6 +2915,10 @@
"org.slf4j:slf4j-simple": [
"org.slf4j.impl"
],
"org.tomlj:tomlj": [
"org.tomlj",
"org.tomlj.internal"
],
"org.xmlresolver:xmlresolver": [
"org.xmlresolver",
"org.xmlresolver.cache",
Expand Down Expand Up @@ -3105,6 +3136,8 @@
"net.bytebuddy:byte-buddy:jar:sources",
"net.sf.saxon:Saxon-HE",
"net.sf.saxon:Saxon-HE:jar:sources",
"org.antlr:antlr4-runtime",
"org.antlr:antlr4-runtime:jar:sources",
"org.apache.bcel:bcel",
"org.apache.bcel:bcel:jar:sources",
"org.apache.commons:commons-exec",
Expand Down Expand Up @@ -3187,6 +3220,8 @@
"org.slf4j:slf4j-jdk14:jar:sources",
"org.slf4j:slf4j-simple",
"org.slf4j:slf4j-simple:jar:sources",
"org.tomlj:tomlj",
"org.tomlj:tomlj:jar:sources",
"org.xmlresolver:xmlresolver",
"org.xmlresolver:xmlresolver:jar:data",
"org.xmlresolver:xmlresolver:jar:sources",
Expand Down
1 change: 1 addition & 0 deletions java/src/org/openqa/selenium/grid/config/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,6 @@ java_library(
artifact("com.beust:jcommander"),
artifact("com.google.guava:guava"),
artifact("io.ous:jtoml"),
artifact("org.tomlj:tomlj")
],
)
57 changes: 42 additions & 15 deletions java/src/org/openqa/selenium/grid/config/TomlConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,30 +19,27 @@

import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSortedSet;
import io.ous.jtoml.JToml;
import io.ous.jtoml.ParseException;
import io.ous.jtoml.Toml;
import io.ous.jtoml.TomlTable;
import java.io.IOException;
import java.io.Reader;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Collection;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.*;
import java.util.stream.Collectors;

import org.openqa.selenium.internal.Require;
import org.tomlj.*;

public class TomlConfig implements Config {

private final Toml toml;
private final TomlParseResult toml;

public TomlConfig(Reader reader) {
try {
toml = JToml.parse(reader);
toml = Toml.parse(reader);
System.out.println(toml.toToml());
} catch (IOException e) {
throw new ConfigException("Unable to read TOML.", e);
} catch (ParseException e) {
} catch (TomlParseError e) {
throw new ConfigException(
e.getCause()
+ "\n Validate the config using https://www.toml-lint.com/. "
Expand All @@ -65,22 +62,43 @@ public Optional<List<String>> getAll(String section, String option) {
Require.nonNull("Section to read", section);
Require.nonNull("Option to read", option);

if (!toml.containsKey(section)) {
if (!toml.contains(section)) {
return Optional.empty();
}

/*
if (toml.hasErrors()) {
System.out.println(toml.errors());
}
*/
Object raw = toml.get(section);
if (!(raw instanceof TomlTable)) {
throw new ConfigException(String.format("Section %s is not a section! %s", section, raw));
}

TomlTable table = toml.getTomlTable(section);
TomlTable table = toml.getTable(section);
Object value = null;
if (table != null) {
value = table.get(option);
}

Object value = table.getOrDefault(option, null);
if (value == null) {
return Optional.empty();
}

if (value instanceof TomlArray) {
// System.out.println("Inside array... here");
TomlArray array = (TomlArray) value;
List<String> result = array.toList().stream()
.map(item -> {
if (item instanceof TomlTable) {
return getTableAsString((TomlTable) item);
}
return String.valueOf(item);
})
.collect(Collectors.toList());
return Optional.of(result);
}

if (value instanceof Collection) {
Collection<?> collection = (Collection<?>) value;
// Case when an array of tables is used as config
Expand Down Expand Up @@ -114,6 +132,15 @@ public Set<String> getSectionNames() {
return ImmutableSortedSet.copyOf(toml.keySet());
}

public String getTableAsString(TomlTable table) {
List<String> result = new ArrayList<>();
for (Map.Entry<String, Object> entry : table.entrySet()) {
result.add(entry.getKey() + "=" + entry.getValue());
}

return String.join(" ", result);
}

@Override
public Set<String> getOptions(String section) {
Require.nonNull("Section name to get options for", section);
Expand Down
5 changes: 2 additions & 3 deletions java/test/org/openqa/selenium/grid/config/TomlConfigTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,8 @@ class TomlConfigTest {

@Test
void shouldUseATableAsASection() {
String raw = "[cheeses]\nselected=brie";
String raw = "[cheeses]\nselected=\"brie\"";
Config config = new TomlConfig(new StringReader(raw));

assertThat(config.get("cheeses", "selected")).isEqualTo(Optional.of("brie"));
}

Expand All @@ -41,7 +40,7 @@ void shouldContainConfigFromArrayOfTables() {
String[] rawConfig =
new String[] {
"[cheeses]",
"default = manchego",
"default = \"manchego\"",
"[[cheeses.type]]",
"name = \"soft cheese\"",
"default = \"brie\"",
Expand Down