blob: 3a4fe85e54891b33b5f67bba03fd14ea0ce06ac3 [file] [log] [blame]
Jordan Halterman9bdc24f2017-04-19 23:45:12 -07001/*
2 * Copyright 2017-present Open Networking Laboratory
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 */
16package org.onosproject.store.primitives.impl;
17
18import java.util.Collection;
19import java.util.Map;
20import java.util.NavigableMap;
21import java.util.NavigableSet;
22import java.util.Set;
23import java.util.concurrent.CompletableFuture;
24import java.util.concurrent.Executor;
25import java.util.function.BiFunction;
26import java.util.function.Predicate;
27
Jordan Halterman9bdc24f2017-04-19 23:45:12 -070028import org.onosproject.store.primitives.MapUpdate;
29import org.onosproject.store.primitives.TransactionId;
30import org.onosproject.store.service.AsyncConsistentTreeMap;
31import org.onosproject.store.service.MapEventListener;
32import org.onosproject.store.service.TransactionLog;
33import org.onosproject.store.service.Version;
34import org.onosproject.store.service.Versioned;
35
36/**
37 * {@link org.onosproject.store.service.AsyncConsistentTreeMap} that executes asynchronous callbacks on a provided
38 * {@link Executor}.
39 */
40public class ExecutingAsyncConsistentTreeMap<V>
41 extends ExecutingDistributedPrimitive implements AsyncConsistentTreeMap<V> {
42 private final AsyncConsistentTreeMap<V> delegateMap;
Jordan Halterman9bdc24f2017-04-19 23:45:12 -070043
Jordan Halterman046faeb2017-05-01 15:10:13 -070044 public ExecutingAsyncConsistentTreeMap(
45 AsyncConsistentTreeMap<V> delegateMap, Executor orderedExecutor, Executor threadPoolExecutor) {
46 super(delegateMap, orderedExecutor, threadPoolExecutor);
Jordan Halterman9bdc24f2017-04-19 23:45:12 -070047 this.delegateMap = delegateMap;
Jordan Halterman9bdc24f2017-04-19 23:45:12 -070048 }
49
50 @Override
51 public CompletableFuture<String> firstKey() {
Jordan Halterman046faeb2017-05-01 15:10:13 -070052 return asyncFuture(delegateMap.firstKey());
Jordan Halterman9bdc24f2017-04-19 23:45:12 -070053 }
54
55 @Override
56 public CompletableFuture<String> lastKey() {
Jordan Halterman046faeb2017-05-01 15:10:13 -070057 return asyncFuture(delegateMap.lastKey());
Jordan Halterman9bdc24f2017-04-19 23:45:12 -070058 }
59
60 @Override
61 public CompletableFuture<Map.Entry<String, Versioned<V>>> ceilingEntry(String key) {
Jordan Halterman046faeb2017-05-01 15:10:13 -070062 return asyncFuture(delegateMap.ceilingEntry(key));
Jordan Halterman9bdc24f2017-04-19 23:45:12 -070063 }
64
65 @Override
66 public CompletableFuture<Map.Entry<String, Versioned<V>>> floorEntry(String key) {
Jordan Halterman046faeb2017-05-01 15:10:13 -070067 return asyncFuture(delegateMap.floorEntry(key));
Jordan Halterman9bdc24f2017-04-19 23:45:12 -070068 }
69
70 @Override
71 public CompletableFuture<Map.Entry<String, Versioned<V>>> higherEntry(String key) {
Jordan Halterman046faeb2017-05-01 15:10:13 -070072 return asyncFuture(delegateMap.higherEntry(key));
Jordan Halterman9bdc24f2017-04-19 23:45:12 -070073 }
74
75 @Override
76 public CompletableFuture<Map.Entry<String, Versioned<V>>> lowerEntry(String key) {
Jordan Halterman046faeb2017-05-01 15:10:13 -070077 return asyncFuture(delegateMap.lowerEntry(key));
Jordan Halterman9bdc24f2017-04-19 23:45:12 -070078 }
79
80 @Override
81 public CompletableFuture<Map.Entry<String, Versioned<V>>> firstEntry() {
Jordan Halterman046faeb2017-05-01 15:10:13 -070082 return asyncFuture(delegateMap.firstEntry());
Jordan Halterman9bdc24f2017-04-19 23:45:12 -070083 }
84
85 @Override
86 public CompletableFuture<Integer> size() {
Jordan Halterman046faeb2017-05-01 15:10:13 -070087 return asyncFuture(delegateMap.size());
Jordan Halterman9bdc24f2017-04-19 23:45:12 -070088 }
89
90 @Override
91 public CompletableFuture<Map.Entry<String, Versioned<V>>> lastEntry() {
Jordan Halterman046faeb2017-05-01 15:10:13 -070092 return asyncFuture(delegateMap.lastEntry());
Jordan Halterman9bdc24f2017-04-19 23:45:12 -070093 }
94
95 @Override
96 public CompletableFuture<Map.Entry<String, Versioned<V>>> pollFirstEntry() {
Jordan Halterman046faeb2017-05-01 15:10:13 -070097 return asyncFuture(delegateMap.pollFirstEntry());
Jordan Halterman9bdc24f2017-04-19 23:45:12 -070098 }
99
100 @Override
101 public CompletableFuture<Boolean> containsKey(String key) {
Jordan Halterman046faeb2017-05-01 15:10:13 -0700102 return asyncFuture(delegateMap.containsKey(key));
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700103 }
104
105 @Override
106 public CompletableFuture<Map.Entry<String, Versioned<V>>> pollLastEntry() {
Jordan Halterman046faeb2017-05-01 15:10:13 -0700107 return asyncFuture(delegateMap.pollLastEntry());
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700108 }
109
110 @Override
111 public CompletableFuture<String> lowerKey(String key) {
Jordan Halterman046faeb2017-05-01 15:10:13 -0700112 return asyncFuture(delegateMap.lowerKey(key));
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700113 }
114
115 @Override
116 public CompletableFuture<Boolean> containsValue(V value) {
Jordan Halterman046faeb2017-05-01 15:10:13 -0700117 return asyncFuture(delegateMap.containsValue(value));
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700118 }
119
120 @Override
121 public CompletableFuture<String> floorKey(String key) {
Jordan Halterman046faeb2017-05-01 15:10:13 -0700122 return asyncFuture(delegateMap.floorKey(key));
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700123 }
124
125 @Override
126 public CompletableFuture<String> ceilingKey(String key) {
Jordan Halterman046faeb2017-05-01 15:10:13 -0700127 return asyncFuture(delegateMap.ceilingKey(key));
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700128 }
129
130 @Override
131 public CompletableFuture<Versioned<V>> get(String key) {
Jordan Halterman046faeb2017-05-01 15:10:13 -0700132 return asyncFuture(delegateMap.get(key));
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700133 }
134
135 @Override
136 public CompletableFuture<Versioned<V>> getOrDefault(String key, V defaultValue) {
Jordan Halterman046faeb2017-05-01 15:10:13 -0700137 return asyncFuture(delegateMap.getOrDefault(key, defaultValue));
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700138 }
139
140 @Override
141 public CompletableFuture<String> higherKey(String key) {
Jordan Halterman046faeb2017-05-01 15:10:13 -0700142 return asyncFuture(delegateMap.higherKey(key));
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700143 }
144
145 @Override
146 public CompletableFuture<NavigableSet<String>> navigableKeySet() {
Jordan Halterman046faeb2017-05-01 15:10:13 -0700147 return asyncFuture(delegateMap.navigableKeySet());
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700148 }
149
150 @Override
151 public CompletableFuture<NavigableMap<String, V>> subMap(
152 String upperKey, String lowerKey, boolean inclusiveUpper, boolean inclusiveLower) {
Jordan Halterman046faeb2017-05-01 15:10:13 -0700153 return asyncFuture(delegateMap.subMap(upperKey, lowerKey, inclusiveUpper, inclusiveLower));
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700154 }
155
156 @Override
157 public CompletableFuture<Versioned<V>> computeIf(
158 String key, Predicate<? super V> condition,
159 BiFunction<? super String, ? super V, ? extends V> remappingFunction) {
Jordan Halterman046faeb2017-05-01 15:10:13 -0700160 return asyncFuture(delegateMap.computeIf(key, condition, remappingFunction));
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700161 }
162
163 @Override
164 public CompletableFuture<Versioned<V>> put(String key, V value) {
Jordan Halterman046faeb2017-05-01 15:10:13 -0700165 return asyncFuture(delegateMap.put(key, value));
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700166 }
167
168 @Override
169 public CompletableFuture<Versioned<V>> putAndGet(String key, V value) {
Jordan Halterman046faeb2017-05-01 15:10:13 -0700170 return asyncFuture(delegateMap.putAndGet(key, value));
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700171 }
172
173 @Override
174 public CompletableFuture<Versioned<V>> remove(String key) {
Jordan Halterman046faeb2017-05-01 15:10:13 -0700175 return asyncFuture(delegateMap.remove(key));
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700176 }
177
178 @Override
179 public CompletableFuture<Void> clear() {
Jordan Halterman046faeb2017-05-01 15:10:13 -0700180 return asyncFuture(delegateMap.clear());
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700181 }
182
183 @Override
184 public CompletableFuture<Set<String>> keySet() {
Jordan Halterman046faeb2017-05-01 15:10:13 -0700185 return asyncFuture(delegateMap.keySet());
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700186 }
187
188 @Override
189 public CompletableFuture<Collection<Versioned<V>>> values() {
Jordan Halterman046faeb2017-05-01 15:10:13 -0700190 return asyncFuture(delegateMap.values());
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700191 }
192
193 @Override
194 public CompletableFuture<Set<Map.Entry<String, Versioned<V>>>> entrySet() {
Jordan Halterman046faeb2017-05-01 15:10:13 -0700195 return asyncFuture(delegateMap.entrySet());
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700196 }
197
198 @Override
199 public CompletableFuture<Versioned<V>> putIfAbsent(String key, V value) {
Jordan Halterman046faeb2017-05-01 15:10:13 -0700200 return asyncFuture(delegateMap.putIfAbsent(key, value));
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700201 }
202
203 @Override
204 public CompletableFuture<Boolean> remove(String key, V value) {
Jordan Halterman046faeb2017-05-01 15:10:13 -0700205 return asyncFuture(delegateMap.remove(key, value));
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700206 }
207
208 @Override
209 public CompletableFuture<Boolean> remove(String key, long version) {
Jordan Halterman046faeb2017-05-01 15:10:13 -0700210 return asyncFuture(delegateMap.remove(key, version));
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700211 }
212
213 @Override
214 public CompletableFuture<Versioned<V>> replace(String key, V value) {
Jordan Halterman046faeb2017-05-01 15:10:13 -0700215 return asyncFuture(delegateMap.replace(key, value));
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700216 }
217
218 @Override
219 public CompletableFuture<Boolean> replace(String key, V oldValue, V newValue) {
Jordan Halterman046faeb2017-05-01 15:10:13 -0700220 return asyncFuture(delegateMap.replace(key, oldValue, newValue));
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700221 }
222
223 @Override
224 public CompletableFuture<Boolean> replace(String key, long oldVersion, V newValue) {
Jordan Halterman046faeb2017-05-01 15:10:13 -0700225 return asyncFuture(delegateMap.replace(key, oldVersion, newValue));
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700226 }
227
228 @Override
229 public CompletableFuture<Version> begin(TransactionId transactionId) {
Jordan Halterman046faeb2017-05-01 15:10:13 -0700230 return asyncFuture(delegateMap.begin(transactionId));
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700231 }
232
233 @Override
234 public CompletableFuture<Boolean> prepare(TransactionLog<MapUpdate<String, V>> transactionLog) {
Jordan Halterman046faeb2017-05-01 15:10:13 -0700235 return asyncFuture(delegateMap.prepare(transactionLog));
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700236 }
237
238 @Override
239 public CompletableFuture<Void> commit(TransactionId transactionId) {
Jordan Halterman046faeb2017-05-01 15:10:13 -0700240 return asyncFuture(delegateMap.commit(transactionId));
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700241 }
242
243 @Override
244 public CompletableFuture<Void> rollback(TransactionId transactionId) {
Jordan Halterman046faeb2017-05-01 15:10:13 -0700245 return asyncFuture(delegateMap.rollback(transactionId));
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700246 }
247
248 @Override
249 public CompletableFuture<Boolean> prepareAndCommit(TransactionLog<MapUpdate<String, V>> transactionLog) {
Jordan Halterman046faeb2017-05-01 15:10:13 -0700250 return asyncFuture(delegateMap.prepareAndCommit(transactionLog));
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700251 }
252
253 @Override
254 public CompletableFuture<Void> addListener(MapEventListener<String, V> listener) {
Jordan Halterman046faeb2017-05-01 15:10:13 -0700255 return addListener(listener);
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700256 }
257
258 @Override
259 public CompletableFuture<Void> addListener(MapEventListener<String, V> listener, Executor executor) {
Jordan Halterman046faeb2017-05-01 15:10:13 -0700260 return asyncFuture(delegateMap.addListener(listener, executor));
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700261 }
262
263 @Override
264 public CompletableFuture<Void> removeListener(MapEventListener<String, V> listener) {
Jordan Halterman046faeb2017-05-01 15:10:13 -0700265 return asyncFuture(delegateMap.removeListener(listener));
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700266 }
267}