Skip to content

Commit 7082c62

Browse files
Add Java interface in config module
1 parent 401b902 commit 7082c62

File tree

2 files changed

+121
-0
lines changed

2 files changed

+121
-0
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package scala.cli.config;
2+
3+
import java.nio.file.Path;
4+
5+
import scala.cli.config.internal.JavaHelper;
6+
7+
public final class JavaInterface {
8+
9+
public static void open(Path dbPath) {
10+
JavaHelper.open(dbPath);
11+
}
12+
13+
public static void close() {
14+
JavaHelper.close();
15+
}
16+
17+
public static String getString(String key) {
18+
return JavaHelper.getString(key);
19+
}
20+
21+
public static Boolean getBoolean(String key) {
22+
return JavaHelper.getBoolean(key);
23+
}
24+
25+
public static String[] getStringList(String key) {
26+
return JavaHelper.getStringList(key);
27+
}
28+
29+
public static String getPassword(String key) {
30+
return JavaHelper.getPassword(key);
31+
}
32+
33+
public static byte[] getPasswordBytes(String key) {
34+
return JavaHelper.getPasswordBytes(key);
35+
}
36+
37+
}
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
package scala.cli.config.internal
2+
3+
import java.lang.{Boolean => JBoolean}
4+
import java.nio.file.Path
5+
6+
import scala.cli.config._
7+
8+
object JavaHelper {
9+
10+
private var dbOpt = Option.empty[ConfigDb]
11+
12+
def open(dbPath: Path): Unit =
13+
if (dbOpt.isEmpty) {
14+
val db0 = ConfigDb.open(dbPath) match {
15+
case Left(ex) => throw new Exception(ex)
16+
case Right(db1) => db1
17+
}
18+
dbOpt = Some(db0)
19+
}
20+
21+
def close(): Unit =
22+
if (dbOpt.nonEmpty)
23+
dbOpt = None
24+
25+
private def split(key: String): (Seq[String], String) = {
26+
val elems = key.split("\\.")
27+
(elems.init.toSeq, elems.last)
28+
}
29+
30+
def getString(key: String): String = {
31+
val db = dbOpt.getOrElse(sys.error("DB not open"))
32+
val (prefix, name) = split(key)
33+
val key0 = new Key.StringEntry(prefix, name)
34+
db.get(key0) match {
35+
case Left(ex) => throw new Exception(ex)
36+
case Right(None) => null
37+
case Right(Some(str)) => str
38+
}
39+
}
40+
41+
def getBoolean(key: String): JBoolean = {
42+
val db = dbOpt.getOrElse(sys.error("DB not open"))
43+
val (prefix, name) = split(key)
44+
val key0 = new Key.BooleanEntry(prefix, name)
45+
db.get(key0) match {
46+
case Left(ex) => throw new Exception(ex)
47+
case Right(None) => null
48+
case Right(Some(value)) => value
49+
}
50+
}
51+
52+
def getStringList(key: String): Array[String] = {
53+
val db = dbOpt.getOrElse(sys.error("DB not open"))
54+
val (prefix, name) = split(key)
55+
val key0 = new Key.StringListEntry(prefix, name)
56+
db.get(key0) match {
57+
case Left(ex) => throw new Exception(ex)
58+
case Right(None) => null
59+
case Right(Some(value)) => value.toArray
60+
}
61+
}
62+
63+
def getPassword(key: String): String = {
64+
val db = dbOpt.getOrElse(sys.error("DB not open"))
65+
val (prefix, name) = split(key)
66+
val key0 = new Key.PasswordEntry(prefix, name)
67+
db.get(key0) match {
68+
case Left(ex) => throw new Exception(ex)
69+
case Right(None) => null
70+
case Right(Some(str)) => str.get().value
71+
}
72+
}
73+
74+
def getPasswordBytes(key: String): Array[Byte] = {
75+
val db = dbOpt.getOrElse(sys.error("DB not open"))
76+
val (prefix, name) = split(key)
77+
val key0 = new Key.PasswordEntry(prefix, name)
78+
db.get(key0) match {
79+
case Left(ex) => throw new Exception(ex)
80+
case Right(None) => null
81+
case Right(Some(str)) => str.getBytes().value
82+
}
83+
}
84+
}

0 commit comments

Comments
 (0)