1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package io.github.tonywasher.joceanus.prometheus.maps;
18
19 import io.github.tonywasher.joceanus.oceanus.format.OceanusDataFormatter;
20 import io.github.tonywasher.joceanus.metis.data.MetisDataItem.MetisDataFieldId;
21 import io.github.tonywasher.joceanus.metis.data.MetisDataResource;
22 import io.github.tonywasher.joceanus.metis.field.MetisFieldItem;
23 import io.github.tonywasher.joceanus.metis.field.MetisFieldSet;
24 import io.github.tonywasher.joceanus.metis.list.MetisListKey;
25 import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataItem;
26
27 import java.util.HashMap;
28 import java.util.Map;
29 import java.util.function.Function;
30
31
32
33
34 public class PrometheusMapsInstanceCtl
35 implements MetisFieldItem {
36
37
38
39 private static final MetisFieldSet<PrometheusMapsInstanceCtl> FIELD_DEFS = MetisFieldSet.newFieldSet(PrometheusMapsInstanceCtl.class);
40
41
42
43
44 static {
45 FIELD_DEFS.declareLocalField(MetisDataResource.DATA_VERSION, PrometheusMapsInstanceCtl::getVersion);
46 FIELD_DEFS.declareLocalField(PrometheusMapsResource.MAPS_INSTANCEMAP, PrometheusMapsInstanceCtl::getInstanceMap);
47 }
48
49
50
51
52 private final Map<Integer, PrometheusMapsDataSetInstance> theHistory;
53
54
55
56
57 private Integer theVersion;
58
59
60
61
62 private PrometheusMapsDataSetInstance theInstanceMap;
63
64
65
66
67 PrometheusMapsInstanceCtl() {
68 theHistory = new HashMap<>();
69 theVersion = 0;
70 setVersion(0);
71 }
72
73 @Override
74 public MetisFieldSetDef getDataFieldSet() {
75 return FIELD_DEFS;
76 }
77
78 @Override
79 public String formatObject(final OceanusDataFormatter pFormatter) {
80 return PrometheusMapsInstanceCtl.class.getSimpleName();
81 }
82
83
84
85
86
87
88 private Integer getVersion() {
89 return theVersion;
90 }
91
92
93
94
95
96
97 private PrometheusMapsDataSetInstance getInstanceMap() {
98 return theInstanceMap;
99 }
100
101
102
103
104
105
106 void setVersion(final Integer pVersion) {
107
108 if (pVersion < theVersion) {
109
110 theHistory.entrySet().removeIf(myEntry -> myEntry.getKey() > pVersion);
111 }
112
113
114 theInstanceMap = theInstanceMap == null
115 ? new PrometheusMapsDataSetInstance()
116 : theHistory.computeIfAbsent(pVersion, i -> new PrometheusMapsDataSetInstance(theInstanceMap));
117 theVersion = pVersion;
118 }
119
120
121
122
123
124
125
126 void declareFieldIdMap(final MetisListKey pListKey,
127 final MetisDataFieldId pFieldId) {
128 theInstanceMap.declareFieldIdMap(pListKey, pFieldId);
129 }
130
131
132
133
134
135
136
137
138 void declareFieldIdMap(final MetisListKey pListKey,
139 final MetisDataFieldId pFieldId,
140 final Function<PrometheusDataItem, Boolean> pFilter) {
141 theInstanceMap.declareFieldIdMap(pListKey, pFieldId, pFilter);
142 }
143
144
145
146
147
148
149
150
151 void declareFieldIdMap(final MetisListKey pListKey,
152 final MetisDataFieldId pFieldId,
153 final MetisListKey pSharedKey) {
154 theInstanceMap.declareFieldIdMap(pListKey, pFieldId, pSharedKey);
155 }
156
157
158
159
160
161
162
163
164
165 void declareDateIdMap(final MetisListKey pListKey,
166 final MetisDataFieldId pOwnerId,
167 final MetisDataFieldId pDateId,
168 final boolean pAllowNull) {
169 theInstanceMap.declareDateIdMap(pListKey, pOwnerId, pDateId, pAllowNull);
170 }
171
172
173
174
175
176
177 void addItemToMaps(final PrometheusDataItem pItem) {
178 theInstanceMap.addItemToMaps(pItem);
179 }
180
181
182
183
184
185
186
187
188 boolean isKeyDuplicate(final MetisDataFieldId pFieldId,
189 final PrometheusDataItem pItem) {
190 return theInstanceMap.isKeyDuplicate(pFieldId, pItem);
191 }
192
193
194
195
196
197
198
199
200
201 boolean isKeyAvailable(final MetisListKey pListKey,
202 final MetisDataFieldId pFieldId,
203 final Object pKey) {
204 return theInstanceMap.isKeyAvailable(pListKey, pFieldId, pKey);
205 }
206
207
208
209
210
211
212
213
214
215 PrometheusDataItem getItemForKey(final MetisListKey pListKey,
216 final MetisDataFieldId pFieldId,
217 final Object pKey) {
218 return theInstanceMap.getItemForKey(pListKey, pFieldId, pKey);
219 }
220
221
222
223
224 void resetMaps() {
225 theInstanceMap.resetMaps();
226 }
227 }