blob: c0b323abcf1b18589c2e9fe80dd01f05b9c46494 [file] [log] [blame]
Madan Jampani10073672016-01-21 19:13:59 -08001/*
Brian O'Connor5ab426f2016-04-09 01:19:45 -07002 * Copyright 2016-present Open Networking Laboratory
Madan Jampani10073672016-01-21 19:13:59 -08003 *
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.impl;
18
19import static com.google.common.base.Preconditions.checkNotNull;
20
21import java.util.Collection;
22import java.util.Map.Entry;
23import java.util.Objects;
24import java.util.Set;
25import java.util.concurrent.CompletableFuture;
Madan Jampani0463cf92016-05-04 14:46:08 -070026import java.util.concurrent.Executor;
Madan Jampani10073672016-01-21 19:13:59 -080027import java.util.function.BiFunction;
Madan Jampani1d3b6172016-04-28 13:22:57 -070028import java.util.function.Consumer;
Madan Jampani10073672016-01-21 19:13:59 -080029import java.util.function.Predicate;
30
31import org.onosproject.core.ApplicationId;
Jordan Halterman948d6592017-04-20 17:18:24 -070032import org.onosproject.store.primitives.MapUpdate;
Madan Jampani74da78b2016-02-09 21:18:36 -080033import org.onosproject.store.primitives.TransactionId;
Madan Jampani10073672016-01-21 19:13:59 -080034import org.onosproject.store.service.AsyncConsistentMap;
35import org.onosproject.store.service.MapEventListener;
Jordan Halterman948d6592017-04-20 17:18:24 -070036import org.onosproject.store.service.TransactionLog;
37import org.onosproject.store.service.Version;
Madan Jampani10073672016-01-21 19:13:59 -080038import org.onosproject.store.service.Versioned;
Madan Jampani0463cf92016-05-04 14:46:08 -070039
Madan Jampani10073672016-01-21 19:13:59 -080040import com.google.common.base.MoreObjects;
41
42/**
43 * {@code AsyncConsistentMap} that merely delegates control to
44 * another AsyncConsistentMap.
45 *
46 * @param <K> key type
47 * @param <V> value type
48 */
49public class DelegatingAsyncConsistentMap<K, V> implements AsyncConsistentMap<K, V> {
50
51 private final AsyncConsistentMap<K, V> delegateMap;
52
53 DelegatingAsyncConsistentMap(AsyncConsistentMap<K, V> delegateMap) {
54 this.delegateMap = checkNotNull(delegateMap, "delegate map cannot be null");
55 }
56
57 @Override
58 public String name() {
59 return delegateMap.name();
60 }
61
62 @Override
63 public ApplicationId applicationId() {
64 return delegateMap.applicationId();
65 }
66
67 @Override
68 public CompletableFuture<Integer> size() {
69 return delegateMap.size();
70 }
71
72 @Override
73 public CompletableFuture<Boolean> containsKey(K key) {
74 return delegateMap.containsKey(key);
75 }
76
77 @Override
78 public CompletableFuture<Boolean> containsValue(V value) {
79 return delegateMap.containsValue(value);
80 }
81
82 @Override
83 public CompletableFuture<Versioned<V>> get(K key) {
84 return delegateMap.get(key);
85 }
86
87 @Override
Jordan Haltermanf6272442017-04-20 02:18:08 -070088 public CompletableFuture<Versioned<V>> getOrDefault(K key, V defaultValue) {
89 return delegateMap.getOrDefault(key, defaultValue);
90 }
91
92 @Override
Madan Jampani10073672016-01-21 19:13:59 -080093 public CompletableFuture<Versioned<V>> computeIf(K key,
94 Predicate<? super V> condition,
95 BiFunction<? super K, ? super V, ? extends V> remappingFunction) {
96 return delegateMap.computeIf(key, condition, remappingFunction);
97 }
98
99 @Override
100 public CompletableFuture<Versioned<V>> put(K key, V value) {
101 return delegateMap.put(key, value);
102 }
103
104 @Override
105 public CompletableFuture<Versioned<V>> putAndGet(K key, V value) {
106 return delegateMap.putAndGet(key, value);
107 }
108
109 @Override
110 public CompletableFuture<Versioned<V>> remove(K key) {
111 return delegateMap.remove(key);
112 }
113
114 @Override
115 public CompletableFuture<Void> clear() {
116 return delegateMap.clear();
117 }
118
119 @Override
120 public CompletableFuture<Set<K>> keySet() {
121 return delegateMap.keySet();
122 }
123
124 @Override
125 public CompletableFuture<Collection<Versioned<V>>> values() {
126 return delegateMap.values();
127 }
128
129 @Override
130 public CompletableFuture<Set<Entry<K, Versioned<V>>>> entrySet() {
131 return delegateMap.entrySet();
132 }
133
134 @Override
135 public CompletableFuture<Versioned<V>> putIfAbsent(K key, V value) {
136 return delegateMap.putIfAbsent(key, value);
137 }
138
139 @Override
140 public CompletableFuture<Boolean> remove(K key, V value) {
141 return delegateMap.remove(key, value);
142 }
143
144 @Override
145 public CompletableFuture<Boolean> remove(K key, long version) {
146 return delegateMap.remove(key, version);
147 }
148
149 @Override
150 public CompletableFuture<Versioned<V>> replace(K key, V value) {
151 return delegateMap.replace(key, value);
152 }
153
154 @Override
155 public CompletableFuture<Boolean> replace(K key, V oldValue, V newValue) {
156 return delegateMap.replace(key, oldValue, newValue);
157 }
158
159 @Override
160 public CompletableFuture<Boolean> replace(K key, long oldVersion, V newValue) {
161 return delegateMap.replace(key, oldVersion, newValue);
162 }
163
164 @Override
Madan Jampani0463cf92016-05-04 14:46:08 -0700165 public CompletableFuture<Void> addListener(MapEventListener<K, V> listener, Executor executor) {
166 return delegateMap.addListener(listener, executor);
Madan Jampani10073672016-01-21 19:13:59 -0800167 }
168
169 @Override
170 public CompletableFuture<Void> removeListener(MapEventListener<K, V> listener) {
171 return delegateMap.removeListener(listener);
172 }
173
174 @Override
Jordan Halterman948d6592017-04-20 17:18:24 -0700175 public CompletableFuture<Version> begin(TransactionId transactionId) {
176 return delegateMap.begin(transactionId);
177 }
178
179 @Override
180 public CompletableFuture<Boolean> prepare(TransactionLog<MapUpdate<K, V>> transactionLog) {
181 return delegateMap.prepare(transactionLog);
182 }
183
184 @Override
185 public CompletableFuture<Boolean> prepareAndCommit(TransactionLog<MapUpdate<K, V>> transactionLog) {
186 return delegateMap.prepareAndCommit(transactionLog);
Madan Jampani74da78b2016-02-09 21:18:36 -0800187 }
188
189 @Override
190 public CompletableFuture<Void> commit(TransactionId transactionId) {
191 return delegateMap.commit(transactionId);
192 }
193
194 @Override
195 public CompletableFuture<Void> rollback(TransactionId transactionId) {
196 return delegateMap.rollback(transactionId);
197 }
198
199 @Override
Madan Jampani1d3b6172016-04-28 13:22:57 -0700200 public void addStatusChangeListener(Consumer<Status> listener) {
201 delegateMap.addStatusChangeListener(listener);
202 }
203
204 @Override
205 public void removeStatusChangeListener(Consumer<Status> listener) {
206 delegateMap.removeStatusChangeListener(listener);
207 }
208
209 @Override
210 public Collection<Consumer<Status>> statusChangeListeners() {
211 return delegateMap.statusChangeListeners();
212 }
213
214 @Override
Madan Jampani10073672016-01-21 19:13:59 -0800215 public String toString() {
216 return MoreObjects.toStringHelper(getClass())
217 .add("delegateMap", delegateMap)
218 .toString();
219 }
220
221 @Override
222 public int hashCode() {
223 return Objects.hash(delegateMap);
224 }
225
226 @Override
227 public boolean equals(Object other) {
228 if (other instanceof DelegatingAsyncConsistentMap) {
229 DelegatingAsyncConsistentMap<K, V> that = (DelegatingAsyncConsistentMap) other;
230 return this.delegateMap.equals(that.delegateMap);
231 }
232 return false;
233 }
234}