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