6
6
import java .util .Queue ;
7
7
8
8
/** Handles placeholder replacement with given params. */
9
- public class Params {
9
+ public interface Params {
10
10
11
- public static Params EMPTY = new Params ();
11
+ public static final Params EMPTY = new Empty ();
12
12
13
- private Holder params ;
13
+ boolean isEmpty ();
14
+
15
+ Object get ();
16
+
17
+ Object getByName (String key );
14
18
15
19
/** @param params query param */
16
- public Params (Map <String , ?> params ) {
17
- this . params = new NamedParamHolder (params );
20
+ public static Params of (Map <String , ?> params ) {
21
+ return new NamedParams (params );
18
22
}
19
23
20
24
/** @param params query param */
21
- public Params (List <?> params ) {
22
- this . params = new IndexedParamHolder (params );
25
+ public static Params of (List <?> params ) {
26
+ return new IndexedParams (params );
23
27
}
24
28
25
- private Params () {}
26
-
27
29
/**
28
30
* Returns param value that matches given placeholder with param key.
29
31
*
30
32
* @param token token.key Placeholder key token.value Placeholder value
31
33
* @return param or token.value when params are missing
32
34
*/
33
- Object get (Token token ) {
34
- if (this .params == null || this . params . isEmpty ()) {
35
+ default Object get (Token token ) {
36
+ if (this .isEmpty ()) {
35
37
return token .value ;
36
38
}
37
39
if (!(token .key == null || token .key .isEmpty ())) {
38
- return this .params . getByName (token .key );
40
+ return this .getByName (token .key );
39
41
} else {
40
- return params .get ();
42
+ return this .get ();
41
43
}
42
44
}
43
45
44
- private interface Holder {
45
- boolean isEmpty ();
46
-
47
- Object get ();
48
-
49
- Object getByName (String key );
50
- }
51
-
52
- private static class NamedParamHolder implements Holder {
46
+ public static class NamedParams implements Params {
53
47
private final Map <String , ?> params ;
54
48
55
- NamedParamHolder (Map <String , ?> params ) {
49
+ NamedParams (Map <String , ?> params ) {
56
50
this .params = params ;
57
51
}
58
52
@@ -76,10 +70,10 @@ public String toString() {
76
70
}
77
71
}
78
72
79
- private static class IndexedParamHolder implements Holder {
73
+ public static class IndexedParams implements Params {
80
74
private final Queue <?> params ;
81
75
82
- IndexedParamHolder (List <?> params ) {
76
+ IndexedParams (List <?> params ) {
83
77
this .params = new PriorityQueue <>(params );
84
78
}
85
79
@@ -103,8 +97,26 @@ public String toString() {
103
97
}
104
98
}
105
99
106
- @ Override
107
- public String toString () {
108
- return String .valueOf (this .params );
100
+ public static class Empty implements Params {
101
+ Empty () {}
102
+
103
+ public boolean isEmpty () {
104
+ return true ;
105
+ }
106
+
107
+ @ Override
108
+ public Object get () {
109
+ return null ;
110
+ }
111
+
112
+ @ Override
113
+ public Object getByName (String key ) {
114
+ return null ;
115
+ }
116
+
117
+ @ Override
118
+ public String toString () {
119
+ return "[]" ;
120
+ }
109
121
}
110
122
}
0 commit comments