blob: 23024eaf8f1a54bc00787476e1ee5a7e2dba7c38 [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
Madan Jampanie8af1cc2015-06-23 14:23:31 -07006import org.onosproject.core.ApplicationId;
Madan Jampanif1b8e172015-03-23 11:42:02 -07007import org.onosproject.store.service.AsyncConsistentMap;
8import org.onosproject.store.service.ConsistentMap;
9import org.onosproject.store.service.ConsistentMapBuilder;
Madan Jampani50589ac2015-06-08 11:38:46 -070010import org.onosproject.store.service.MapEvent;
Madan Jampanif1b8e172015-03-23 11:42:02 -070011import org.onosproject.store.service.Serializer;
12
13/**
14 * Default Consistent Map builder.
15 *
16 * @param <K> type for map key
17 * @param <V> type for map value
18 */
19public class DefaultConsistentMapBuilder<K, V> implements ConsistentMapBuilder<K, V> {
20
21 private Serializer serializer;
22 private String name;
Madan Jampanie8af1cc2015-06-23 14:23:31 -070023 private ApplicationId applicationId;
24 private boolean purgeOnUninstall = false;
Madan Jampanif1b8e172015-03-23 11:42:02 -070025 private boolean partitionsEnabled = true;
Madan Jampani02b7fb82015-05-01 13:01:20 -070026 private boolean readOnly = false;
Madan Jampani50589ac2015-06-08 11:38:46 -070027 private final DatabaseManager manager;
Madan Jampanif1b8e172015-03-23 11:42:02 -070028
Madan Jampani50589ac2015-06-08 11:38:46 -070029 public DefaultConsistentMapBuilder(DatabaseManager manager) {
30 this.manager = manager;
Madan Jampanif1b8e172015-03-23 11:42:02 -070031 }
32
33 @Override
34 public ConsistentMapBuilder<K, V> withName(String name) {
35 checkArgument(name != null && !name.isEmpty());
36 this.name = name;
37 return this;
38 }
39
40 @Override
Madan Jampanie8af1cc2015-06-23 14:23:31 -070041 public ConsistentMapBuilder<K, V> withApplicationId(ApplicationId id) {
42 checkArgument(id != null);
43 this.applicationId = id;
44 return this;
45 }
46
47 @Override
48 public ConsistentMapBuilder<K, V> withPurgeOnUninstall() {
49 purgeOnUninstall = true;
50 return this;
51 }
52
53 @Override
Madan Jampanif1b8e172015-03-23 11:42:02 -070054 public ConsistentMapBuilder<K, V> withSerializer(Serializer serializer) {
55 checkArgument(serializer != null);
56 this.serializer = serializer;
57 return this;
58 }
59
60 @Override
61 public ConsistentMapBuilder<K, V> withPartitionsDisabled() {
62 partitionsEnabled = false;
63 return this;
64 }
65
Madan Jampani02b7fb82015-05-01 13:01:20 -070066 @Override
67 public ConsistentMapBuilder<K, V> withUpdatesDisabled() {
68 readOnly = true;
69 return this;
70 }
71
Madan Jampanie8af1cc2015-06-23 14:23:31 -070072 private void validateInputs() {
73 checkState(name != null, "name must be specified");
74 checkState(serializer != null, "serializer must be specified");
75 if (purgeOnUninstall) {
76 checkState(applicationId != null, "ApplicationId must be specified when purgeOnUninstall is enabled");
77 }
Madan Jampanif1b8e172015-03-23 11:42:02 -070078 }
79
80 @Override
81 public ConsistentMap<K, V> build() {
Madan Jampani50589ac2015-06-08 11:38:46 -070082 return new DefaultConsistentMap<>(buildAndRegisterMap());
Madan Jampanif1b8e172015-03-23 11:42:02 -070083 }
84
85 @Override
86 public AsyncConsistentMap<K, V> buildAsyncMap() {
Madan Jampani50589ac2015-06-08 11:38:46 -070087 return buildAndRegisterMap();
88 }
89
90 private DefaultAsyncConsistentMap<K, V> buildAndRegisterMap() {
Madan Jampanie8af1cc2015-06-23 14:23:31 -070091 validateInputs();
Madan Jampani50589ac2015-06-08 11:38:46 -070092 DefaultAsyncConsistentMap<K, V> asyncMap = new DefaultAsyncConsistentMap<>(
Madan Jampanif1b8e172015-03-23 11:42:02 -070093 name,
Madan Jampanie8af1cc2015-06-23 14:23:31 -070094 applicationId,
Madan Jampani50589ac2015-06-08 11:38:46 -070095 partitionsEnabled ? manager.partitionedDatabase : manager.inMemoryDatabase,
Madan Jampani02b7fb82015-05-01 13:01:20 -070096 serializer,
Madan Jampani50589ac2015-06-08 11:38:46 -070097 readOnly,
Madan Jampanie8af1cc2015-06-23 14:23:31 -070098 purgeOnUninstall,
Madan Jampani50589ac2015-06-08 11:38:46 -070099 event -> manager.clusterCommunicator.<MapEvent<K, V>>broadcast(event,
100 DatabaseManager.mapUpdatesSubject(name),
101 serializer::encode));
Brian O'Connor24cf6562015-06-11 18:42:30 -0700102 return manager.registerMap(asyncMap);
Madan Jampanif1b8e172015-03-23 11:42:02 -0700103 }
104}