blob: 534b59f9c9d7d755cd16205b3680755c5dcd9681 [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;
9import org.onosproject.store.service.Serializer;
10
11/**
12 * Default Consistent Map builder.
13 *
14 * @param <K> type for map key
15 * @param <V> type for map value
16 */
17public class DefaultConsistentMapBuilder<K, V> implements ConsistentMapBuilder<K, V> {
18
19 private Serializer serializer;
20 private String name;
21 private boolean partitionsEnabled = true;
Madan Jampani02b7fb82015-05-01 13:01:20 -070022 private boolean readOnly = false;
Madan Jampanif1b8e172015-03-23 11:42:02 -070023 private final Database partitionedDatabase;
24 private final Database inMemoryDatabase;
25
26 public DefaultConsistentMapBuilder(Database inMemoryDatabase, Database partitionedDatabase) {
27 this.inMemoryDatabase = inMemoryDatabase;
28 this.partitionedDatabase = partitionedDatabase;
29 }
30
31 @Override
32 public ConsistentMapBuilder<K, V> withName(String name) {
33 checkArgument(name != null && !name.isEmpty());
34 this.name = name;
35 return this;
36 }
37
38 @Override
39 public ConsistentMapBuilder<K, V> withSerializer(Serializer serializer) {
40 checkArgument(serializer != null);
41 this.serializer = serializer;
42 return this;
43 }
44
45 @Override
46 public ConsistentMapBuilder<K, V> withPartitionsDisabled() {
47 partitionsEnabled = false;
48 return this;
49 }
50
Madan Jampani02b7fb82015-05-01 13:01:20 -070051 @Override
52 public ConsistentMapBuilder<K, V> withUpdatesDisabled() {
53 readOnly = true;
54 return this;
55 }
56
Madan Jampanif1b8e172015-03-23 11:42:02 -070057 private boolean validInputs() {
58 return name != null && serializer != null;
59 }
60
61 @Override
62 public ConsistentMap<K, V> build() {
63 checkState(validInputs());
64 return new DefaultConsistentMap<>(
65 name,
66 partitionsEnabled ? partitionedDatabase : inMemoryDatabase,
Madan Jampani02b7fb82015-05-01 13:01:20 -070067 serializer,
68 readOnly);
Madan Jampanif1b8e172015-03-23 11:42:02 -070069 }
70
71 @Override
72 public AsyncConsistentMap<K, V> buildAsyncMap() {
73 checkState(validInputs());
74 return new DefaultAsyncConsistentMap<>(
75 name,
76 partitionsEnabled ? partitionedDatabase : inMemoryDatabase,
Madan Jampani02b7fb82015-05-01 13:01:20 -070077 serializer,
78 readOnly);
Madan Jampanif1b8e172015-03-23 11:42:02 -070079 }
80}