blob: 24db74f274137249a88d9e0e69e4f94e018c7227 [file] [log] [blame]
Madan Jampanif1b8e172015-03-23 11:42:02 -07001package org.onosproject.store.consistent.impl;
2
3import static com.google.common.base.Preconditions.checkArgument;
4import static com.google.common.base.Preconditions.checkState;
5
6import org.onosproject.store.service.AsyncConsistentMap;
7import org.onosproject.store.service.ConsistentMap;
8import org.onosproject.store.service.ConsistentMapBuilder;
Madan Jampani50589ac2015-06-08 11:38:46 -07009import org.onosproject.store.service.MapEvent;
Madan Jampanif1b8e172015-03-23 11:42:02 -070010import org.onosproject.store.service.Serializer;
11
12/**
13 * Default Consistent Map builder.
14 *
15 * @param <K> type for map key
16 * @param <V> type for map value
17 */
18public class DefaultConsistentMapBuilder<K, V> implements ConsistentMapBuilder<K, V> {
19
20 private Serializer serializer;
21 private String name;
22 private boolean partitionsEnabled = true;
Madan Jampani02b7fb82015-05-01 13:01:20 -070023 private boolean readOnly = false;
Madan Jampani50589ac2015-06-08 11:38:46 -070024 private final DatabaseManager manager;
Madan Jampanif1b8e172015-03-23 11:42:02 -070025
Madan Jampani50589ac2015-06-08 11:38:46 -070026 public DefaultConsistentMapBuilder(DatabaseManager manager) {
27 this.manager = manager;
Madan Jampanif1b8e172015-03-23 11:42:02 -070028 }
29
30 @Override
31 public ConsistentMapBuilder<K, V> withName(String name) {
32 checkArgument(name != null && !name.isEmpty());
33 this.name = name;
34 return this;
35 }
36
37 @Override
38 public ConsistentMapBuilder<K, V> withSerializer(Serializer serializer) {
39 checkArgument(serializer != null);
40 this.serializer = serializer;
41 return this;
42 }
43
44 @Override
45 public ConsistentMapBuilder<K, V> withPartitionsDisabled() {
46 partitionsEnabled = false;
47 return this;
48 }
49
Madan Jampani02b7fb82015-05-01 13:01:20 -070050 @Override
51 public ConsistentMapBuilder<K, V> withUpdatesDisabled() {
52 readOnly = true;
53 return this;
54 }
55
Madan Jampanif1b8e172015-03-23 11:42:02 -070056 private boolean validInputs() {
57 return name != null && serializer != null;
58 }
59
60 @Override
61 public ConsistentMap<K, V> build() {
Madan Jampani50589ac2015-06-08 11:38:46 -070062 return new DefaultConsistentMap<>(buildAndRegisterMap());
Madan Jampanif1b8e172015-03-23 11:42:02 -070063 }
64
65 @Override
66 public AsyncConsistentMap<K, V> buildAsyncMap() {
Madan Jampani50589ac2015-06-08 11:38:46 -070067 return buildAndRegisterMap();
68 }
69
70 private DefaultAsyncConsistentMap<K, V> buildAndRegisterMap() {
Madan Jampanif1b8e172015-03-23 11:42:02 -070071 checkState(validInputs());
Madan Jampani50589ac2015-06-08 11:38:46 -070072 DefaultAsyncConsistentMap<K, V> asyncMap = new DefaultAsyncConsistentMap<>(
Madan Jampanif1b8e172015-03-23 11:42:02 -070073 name,
Madan Jampani50589ac2015-06-08 11:38:46 -070074 partitionsEnabled ? manager.partitionedDatabase : manager.inMemoryDatabase,
Madan Jampani02b7fb82015-05-01 13:01:20 -070075 serializer,
Madan Jampani50589ac2015-06-08 11:38:46 -070076 readOnly,
77 event -> manager.clusterCommunicator.<MapEvent<K, V>>broadcast(event,
78 DatabaseManager.mapUpdatesSubject(name),
79 serializer::encode));
80 manager.registerMap(asyncMap);
81 return asyncMap;
Madan Jampanif1b8e172015-03-23 11:42:02 -070082 }
83}