11package org .javawebstack .webutils .config ;
22
3+ import org .javawebstack .abstractdata .AbstractElement ;
4+ import org .javawebstack .abstractdata .AbstractObject ;
5+
36import java .util .*;
7+ import java .util .function .Function ;
8+ import java .util .stream .Collectors ;
9+ import java .util .stream .Stream ;
410
511public class Config {
612
@@ -11,42 +17,41 @@ public Config set(String path, String key, String value) {
1117 return set (prefix + key .toLowerCase (Locale .ROOT ), value );
1218 }
1319
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 ) {
1521 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 );
1925 });
2026 return this ;
2127 }
2228
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 );
2531 }
2632
2733 public Config add (String path , Map <String , String > data ) {
28- return add (path , data , null );
34+ return add (path , data , k -> k );
2935 }
3036
3137 public Config add (Map <String , String > data ) {
32- return add (null , data , null );
38+ return add (null , data , k -> k );
3339 }
3440
35- public Config add (String path , EnvFile envFile , Map <String , String > mapping ) {
41+ public Config add (String path , EnvFile envFile , Function <String , String > mapping ) {
3642 return add (path , envFile .getValues (), mapping );
3743 }
3844
3945 public Config add (String path , EnvFile envFile ) {
40- return add (path , envFile , null );
46+ return add (path , envFile , k -> k );
4147 }
4248
43- public Config add (EnvFile envFile , Map <String , String > mapping ) {
49+ public Config add (EnvFile envFile , Function <String , String > mapping ) {
4450 return add (null , envFile , mapping );
45-
4651 }
4752
4853 public Config add (EnvFile envFile ) {
49- return add (null , envFile , null );
54+ return add (null , envFile , k -> k );
5055 }
5156
5257 public Config set (String key , String value ) {
@@ -64,6 +69,21 @@ public String get(String key) {
6469 return get (key , null );
6570 }
6671
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+
6787 public int getInt (String key , int defaultValue ) {
6888 String value = get (key );
6989 if (value == null )
@@ -88,4 +108,12 @@ public boolean has(String key) {
88108 return config .containsKey (key );
89109 }
90110
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+
91119}
0 commit comments