blob: 7e014ccc68d6180b063775b4212fa18f32f85a94 [file] [log] [blame]
Ray Milkey2eb91672018-04-24 10:07:52 -07001/*
2 * Copyright 2018-present Open Networking Foundation
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package org.onosproject.store.primitives;
18
19import com.google.common.collect.Maps;
20import org.onosproject.core.ApplicationId;
21import org.onosproject.store.service.AsyncConsistentTreeMap;
Jordan Haltermandae11602018-07-03 00:00:47 -070022import org.onosproject.store.service.AsyncIterator;
Ray Milkey2eb91672018-04-24 10:07:52 -070023import org.onosproject.store.service.ConsistentMap;
24import org.onosproject.store.service.ConsistentTreeMap;
25import org.onosproject.store.service.MapEventListener;
26import org.onosproject.store.service.TransactionLog;
27import org.onosproject.store.service.Version;
28import org.onosproject.store.service.Versioned;
29
30import java.util.AbstractMap;
31import java.util.Collection;
32import java.util.HashMap;
33import java.util.Map;
34import java.util.NavigableMap;
35import java.util.NavigableSet;
36import java.util.Set;
37import java.util.TreeMap;
38import java.util.concurrent.CompletableFuture;
39import java.util.concurrent.Executor;
40import java.util.function.BiFunction;
41import java.util.function.Consumer;
42import java.util.function.Function;
43import java.util.function.Predicate;
44import java.util.stream.Collectors;
45
46public class AsyncConsistentTreeMapAdapter<V> implements AsyncConsistentTreeMap<V> {
47
48 private TreeMap<String, V> map = Maps.newTreeMap();
49
50 private CompletableFuture<Map.Entry<String, Versioned<V>>> makeVersionedEntry(Map.Entry<String, V> entry) {
51 return CompletableFuture.completedFuture(
52 new AbstractMap.SimpleImmutableEntry<>(entry.getKey(),
53 makeVersioned(entry.getValue())));
54 }
55
56 private CompletableFuture<Versioned<V>> makeVersionedFuture(V value) {
57 return CompletableFuture.completedFuture(makeVersioned(value));
58 }
59
60 private Versioned<V> makeVersioned(V value) {
61 return new Versioned<>(value, 1);
62 }
63
64 @Override
65 public CompletableFuture<String> firstKey() {
66 return CompletableFuture.completedFuture(map.firstKey());
67 }
68
69 @Override
70 public CompletableFuture<String> lastKey() {
71 return CompletableFuture.completedFuture(map.lastKey());
72 }
73
74 @Override
75 public CompletableFuture<Map.Entry<String, Versioned<V>>> ceilingEntry(String key) {
76 return makeVersionedEntry(map.ceilingEntry(key));
77 }
78
79 @Override
80 public CompletableFuture<Map.Entry<String, Versioned<V>>> floorEntry(String key) {
81 return makeVersionedEntry(map.floorEntry(key));
82 }
83
84 @Override
85 public CompletableFuture<Map.Entry<String, Versioned<V>>> higherEntry(String key) {
86 return makeVersionedEntry(map.higherEntry(key));
87 }
88
89 @Override
90 public CompletableFuture<Map.Entry<String, Versioned<V>>> lowerEntry(String key) {
91 return makeVersionedEntry(map.lowerEntry(key));
92 }
93
94 @Override
95 public CompletableFuture<Map.Entry<String, Versioned<V>>> firstEntry() {
96 return makeVersionedEntry(map.firstEntry());
97 }
98
99 @Override
100 public CompletableFuture<Map.Entry<String, Versioned<V>>> lastEntry() {
101 return makeVersionedEntry(map.lastEntry());
102 }
103
104 @Override
105 public CompletableFuture<Map.Entry<String, Versioned<V>>> pollFirstEntry() {
106 return makeVersionedEntry(map.pollFirstEntry());
107 }
108
109 @Override
110 public CompletableFuture<Map.Entry<String, Versioned<V>>> pollLastEntry() {
111 return makeVersionedEntry(map.pollLastEntry());
112 }
113
114 @Override
115 public CompletableFuture<String> lowerKey(String key) {
116 return CompletableFuture.completedFuture(map.lowerKey(key));
117 }
118
119 @Override
120 public CompletableFuture<String> floorKey(String key) {
121 return CompletableFuture.completedFuture(map.floorKey(key));
122 }
123
124 @Override
125 public CompletableFuture<String> ceilingKey(String key) {
126 return CompletableFuture.completedFuture(map.ceilingKey(key));
127 }
128
129 @Override
130 public CompletableFuture<String> higherKey(String key) {
131 return CompletableFuture.completedFuture(map.higherKey(key));
132 }
133
134 @Override
135 public CompletableFuture<NavigableSet<String>> navigableKeySet() {
136 return CompletableFuture.completedFuture(map.navigableKeySet());
137 }
138
139 @Override
140 public CompletableFuture<NavigableMap<String, V>> subMap(String upperKey, String lowerKey,
141 boolean inclusiveUpper, boolean inclusiveLower) {
142 NavigableMap<String, V> subMap = map.subMap(upperKey, inclusiveLower, lowerKey, inclusiveLower);
143 return CompletableFuture.completedFuture(subMap);
144 }
145
146 @Override
147 public ConsistentTreeMap<V> asTreeMap() {
148 return null;
149 }
150
151 @Override
152 public ConsistentTreeMap<V> asTreeMap(long timeoutMillis) {
153 return null;
154 }
155
156 @Override
157 public Type primitiveType() {
158 return null;
159 }
160
161 @Override
162 public CompletableFuture<Integer> size() {
163 return CompletableFuture.completedFuture(map.size());
164 }
165
166 @Override
167 public CompletableFuture<Boolean> isEmpty() {
168 return CompletableFuture.completedFuture(map.isEmpty());
169 }
170
171 @Override
172 public CompletableFuture<Boolean> containsKey(String key) {
173 return CompletableFuture.completedFuture(map.containsKey(key));
174 }
175
176 @Override
177 public CompletableFuture<Boolean> containsValue(V value) {
178 return CompletableFuture.completedFuture(map.containsValue(value));
179 }
180
181 @Override
182 public CompletableFuture<Versioned<V>> get(String key) {
183 return makeVersionedFuture(map.get(key));
184 }
185
186 @Override
187 public CompletableFuture<Versioned<V>> getOrDefault(String key, V defaultValue) {
188 return makeVersionedFuture(map.getOrDefault(key, defaultValue));
189 }
190
191 @Override
192 public CompletableFuture<Versioned<V>>
193 computeIfAbsent(String key, Function<? super String, ? extends V> mappingFunction) {
194 return makeVersionedFuture(map.computeIfAbsent(key, mappingFunction));
195 }
196
197 @Override
198 public CompletableFuture<Versioned<V>>
199 computeIfPresent(String key, BiFunction<? super String, ? super V, ? extends V> remappingFunction) {
200 return makeVersionedFuture(map.computeIfPresent(key, remappingFunction));
201 }
202
203 @Override
204 public CompletableFuture<Versioned<V>>
205 compute(String key, BiFunction<? super String, ? super V, ? extends V> remappingFunction) {
206 return makeVersionedFuture(map.compute(key, remappingFunction));
207 }
208
209 @Override
210 public CompletableFuture<Versioned<V>>
211 computeIf(String key, Predicate<? super V> condition,
212 BiFunction<? super String, ? super V, ? extends V> remappingFunction) {
213
214 V value = map.get(key);
215
216 if (condition.test(value)) {
217 value = map.compute(key, remappingFunction);
218 }
219 return makeVersionedFuture(value);
220 }
221
222 @Override
223 public CompletableFuture<Versioned<V>> put(String key, V value) {
224 return makeVersionedFuture(map.put(key, value));
225 }
226
227 @Override
228 public CompletableFuture<Versioned<V>> putAndGet(String key, V value) {
229 return makeVersionedFuture(map.put(key, value));
230 }
231
232 @Override
233 public CompletableFuture<Versioned<V>> remove(String key) {
234 return makeVersionedFuture(map.remove(key));
235 }
236
237 @Override
238 public CompletableFuture<Void> clear() {
239 map.clear();
240 return CompletableFuture.completedFuture(null);
241 }
242
243 @Override
244 public CompletableFuture<Set<String>> keySet() {
245 return CompletableFuture.completedFuture(map.keySet());
246 }
247
248 @Override
249 public CompletableFuture<Collection<Versioned<V>>> values() {
250 Set<Versioned<V>> valuesAsVersionedCollection =
251 map.values().stream().map(this::makeVersioned)
252 .collect(Collectors.toSet());
253 return CompletableFuture.completedFuture(valuesAsVersionedCollection);
254 }
255
256 @Override
257 public CompletableFuture<Set<Map.Entry<String, Versioned<V>>>> entrySet() {
258 Map<String, Versioned<V>> valuesAsVersionedMap = new HashMap<>();
259 map.forEach((key, value) ->
260 valuesAsVersionedMap.put(key, makeVersioned(value))
261 );
262 return CompletableFuture.completedFuture(valuesAsVersionedMap.entrySet());
263 }
264
265 @Override
266 public CompletableFuture<Versioned<V>> putIfAbsent(String key, V value) {
267 return makeVersionedFuture(map.putIfAbsent(key, value));
268 }
269
270 @Override
271 public CompletableFuture<Boolean> remove(String key, V value) {
272 return CompletableFuture.completedFuture(map.remove(key, value));
273 }
274
275 @Override
276 public CompletableFuture<Boolean> remove(String key, long version) {
277 Object value = map.remove(key);
278 return CompletableFuture.completedFuture(value != null);
279 }
280
281 @Override
282 public CompletableFuture<Versioned<V>> replace(String key, V value) {
283 return makeVersionedFuture(map.replace(key, value));
284 }
285
286 @Override
287 public CompletableFuture<Boolean> replace(String key, V oldValue, V newValue) {
288 return CompletableFuture.completedFuture(map.replace(key, oldValue, newValue));
289 }
290
291 @Override
292 public CompletableFuture<Boolean> replace(String key, long oldVersion, V newValue) {
293 map.replace(key, newValue);
294 return CompletableFuture.completedFuture(true);
295 }
296
297 @Override
298 public CompletableFuture<Void> addListener(MapEventListener<String, V> listener) {
299 return null;
300 }
301
302 @Override
303 public CompletableFuture<Void> addListener(MapEventListener<String, V> listener, Executor executor) {
304 return null;
305 }
306
307 @Override
308 public CompletableFuture<Void> removeListener(MapEventListener<String, V> listener) {
309 return null;
310 }
311
312 @Override
313 public ConsistentMap<String, V> asConsistentMap() {
314 return null;
315 }
316
317 @Override
318 public ConsistentMap<String, V> asConsistentMap(long timeoutMillis) {
319 return null;
320 }
321
322 @Override
323 public String name() {
324 return null;
325 }
326
327 @Override
328 public ApplicationId applicationId() {
329 return null;
330 }
331
332 @Override
333 public void addStatusChangeListener(Consumer<Status> listener) {
334
335 }
336
337 @Override
338 public void removeStatusChangeListener(Consumer<Status> listener) {
339
340 }
341
342 @Override
343 public Collection<Consumer<Status>> statusChangeListeners() {
344 return null;
345 }
346
347 @Override
348 public CompletableFuture<Version> begin(TransactionId transactionId) {
349 return null;
350 }
351
352 @Override
353 public CompletableFuture<Boolean> prepare(TransactionLog<MapUpdate<String, V>> transactionLog) {
354 return null;
355 }
356
357 @Override
358 public CompletableFuture<Boolean> prepareAndCommit(TransactionLog<MapUpdate<String, V>> transactionLog) {
359 return null;
360 }
361
362 @Override
363 public CompletableFuture<Void> commit(TransactionId transactionId) {
364 return null;
365 }
366
367 @Override
368 public CompletableFuture<Void> rollback(TransactionId transactionId) {
369 return null;
370 }
Jordan Haltermandae11602018-07-03 00:00:47 -0700371
372 @Override
373 public CompletableFuture<AsyncIterator<Map.Entry<String, Versioned<V>>>> iterator() {
374 return null;
375 }
Ray Milkey2eb91672018-04-24 10:07:52 -0700376}