1
1
package org .javawebstack .webutils .config ;
2
2
3
+ import org .javawebstack .abstractdata .AbstractElement ;
4
+ import org .javawebstack .abstractdata .AbstractObject ;
5
+
3
6
import java .util .*;
7
+ import java .util .function .Function ;
8
+ import java .util .stream .Collectors ;
9
+ import java .util .stream .Stream ;
4
10
5
11
public class Config {
6
12
@@ -11,42 +17,41 @@ public Config set(String path, String key, String value) {
11
17
return set (prefix + key .toLowerCase (Locale .ROOT ), value );
12
18
}
13
19
14
- public Config add (String path , Map <String , String > data , Map <String , String > mapping ) {
20
+ public Config add (String path , Map <String , String > data , Function <String , String > mapping ) {
15
21
data .forEach ((key , value ) -> {
16
- if ( mapping != null && mapping .containsKey (key ))
17
- key = mapping . get ( key );
18
- set (path , key , value );
22
+ key = mapping .apply (key );
23
+ if ( key != null )
24
+ set (path , key , value );
19
25
});
20
26
return this ;
21
27
}
22
28
23
- public Config add (Map <String , String > data , Map <String , String > mapping ) {
24
- return add (null , data , null );
29
+ public Config add (Map <String , String > data , Function <String , String > mapping ) {
30
+ return add (null , data , mapping );
25
31
}
26
32
27
33
public Config add (String path , Map <String , String > data ) {
28
- return add (path , data , null );
34
+ return add (path , data , k -> k );
29
35
}
30
36
31
37
public Config add (Map <String , String > data ) {
32
- return add (null , data , null );
38
+ return add (null , data , k -> k );
33
39
}
34
40
35
- public Config add (String path , EnvFile envFile , Map <String , String > mapping ) {
41
+ public Config add (String path , EnvFile envFile , Function <String , String > mapping ) {
36
42
return add (path , envFile .getValues (), mapping );
37
43
}
38
44
39
45
public Config add (String path , EnvFile envFile ) {
40
- return add (path , envFile , null );
46
+ return add (path , envFile , k -> k );
41
47
}
42
48
43
- public Config add (EnvFile envFile , Map <String , String > mapping ) {
49
+ public Config add (EnvFile envFile , Function <String , String > mapping ) {
44
50
return add (null , envFile , mapping );
45
-
46
51
}
47
52
48
53
public Config add (EnvFile envFile ) {
49
- return add (null , envFile , null );
54
+ return add (null , envFile , k -> k );
50
55
}
51
56
52
57
public Config set (String key , String value ) {
@@ -64,6 +69,21 @@ public String get(String key) {
64
69
return get (key , null );
65
70
}
66
71
72
+ public AbstractObject getObject (String key ) {
73
+ String prefix = key .length () > 0 ? (key + "." ) : "" ;
74
+ Set <String > s = config .keySet ().stream ().filter (k -> k .startsWith (prefix )).collect (Collectors .toSet ());
75
+ if (s .size () == 0 )
76
+ return null ;
77
+ return AbstractElement .fromTree (s .stream ().collect (Collectors .toMap (k -> k .substring (prefix .length ()).split ("\\ ." ), config ::get ))).object ();
78
+ }
79
+
80
+ public Config set (String key , AbstractObject object ) {
81
+ String prefix = key .length () > 0 ? (key + "." ) : "" ;
82
+ config .keySet ().stream ().filter (k -> k .startsWith (prefix )).forEach (config ::remove );
83
+ object .toTree ().forEach ((k , v ) -> config .put (prefix + String .join ("." , k ), v .toString ()));
84
+ return this ;
85
+ }
86
+
67
87
public int getInt (String key , int defaultValue ) {
68
88
String value = get (key );
69
89
if (value == null )
@@ -88,4 +108,12 @@ public boolean has(String key) {
88
108
return config .containsKey (key );
89
109
}
90
110
111
+ public Set <String > keys () {
112
+ return config .keySet ();
113
+ }
114
+
115
+ public static String basicEnvMapping (String k ) {
116
+ return k .toLowerCase (Locale .ROOT ).replace ("_" , "." );
117
+ }
118
+
91
119
}
0 commit comments