1
2
3
4
5
6
7 package com.varmateo.yawg.spi;
8
9 import java.util.Collections;
10 import java.util.HashMap;
11 import java.util.Map;
12 import java.util.Optional;
13
14
15
16
17
18 public final class PageVarsBuilder {
19
20
21 private final Map<String, Object> _map;
22
23
24
25
26
27 private PageVarsBuilder(final Map<String, Object> map) {
28
29 _map = new HashMap<>(map);
30 }
31
32
33
34
35
36
37
38 public static PageVarsBuilder create() {
39
40 return new PageVarsBuilder(Collections.emptyMap());
41 }
42
43
44
45
46
47
48
49
50
51
52 public static PageVarsBuilder create(final Map<String, Object> data) {
53
54 return new PageVarsBuilder(data);
55 }
56
57
58
59
60
61
62
63
64
65
66 public static PageVarsBuilder create(final PageVars pageVars) {
67
68 return new PageVarsBuilder(pageVars.asMap());
69 }
70
71
72
73
74
75 public PageVarsBuilder addVar(
76 final String varName,
77 final Object varValue) {
78
79 _map.put(varName, varValue);
80 return this;
81 }
82
83
84
85
86
87
88 public PageVarsBuilder addPageVars(final PageVars pageVars) {
89
90 _map.putAll(pageVars.asMap());
91 return this;
92 }
93
94
95
96
97
98
99
100
101 public PageVars build() {
102
103 return new PageVarsImpl(_map);
104 }
105
106
107
108
109
110 private static final class PageVarsImpl
111 implements PageVars {
112
113
114 private final Map<String, Object> _map;
115
116
117
118
119
120 PageVarsImpl() {
121
122 _map = Collections.emptyMap();
123 }
124
125
126
127
128
129 PageVarsImpl(final Map<String, Object> data) {
130
131 _map = Collections.unmodifiableMap(data);
132 }
133
134
135
136
137
138 @Override
139 public Optional<Object> get(final String key) {
140
141 final Object value = _map.get(key);
142 return Optional.ofNullable(value);
143 }
144
145
146
147
148
149 @Override
150 public Map<String, Object> asMap() {
151
152 return _map;
153 }
154
155 }
156
157
158 }