blob: ea3665ea34755670e3555d80d23fb910865f4ba3 [file] [log] [blame]
Madan Jampani63c659f2015-06-11 00:52:58 -07001/*
2 * Copyright 2015 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 */
Madan Jampanif4c88502016-01-21 12:35:36 -080016package org.onosproject.store.primitives.impl;
Madan Jampani63c659f2015-06-11 00:52:58 -070017
Madan Jampani63c659f2015-06-11 00:52:58 -070018import org.onosproject.store.service.DistributedQueue;
19import org.onosproject.store.service.DistributedQueueBuilder;
20import org.onosproject.store.service.Serializer;
21
Flavio Castro41b1f3a2015-07-31 13:51:32 -070022import static com.google.common.base.Preconditions.checkArgument;
23import static com.google.common.base.Preconditions.checkState;
Madan Jampani63c659f2015-06-11 00:52:58 -070024
25/**
26 * Default implementation of a {@code DistributedQueueBuilder}.
27 *
28 * @param <E> queue entry type
29 */
30public class DefaultDistributedQueueBuilder<E> implements DistributedQueueBuilder<E> {
31
32 private Serializer serializer;
33 private String name;
34 private boolean persistenceEnabled = true;
35 private final DatabaseManager databaseManager;
Flavio Castro41b1f3a2015-07-31 13:51:32 -070036 private boolean metering = true;
Madan Jampani63c659f2015-06-11 00:52:58 -070037
Madan Jampania6d787b2015-08-11 11:02:02 -070038 public DefaultDistributedQueueBuilder(DatabaseManager databaseManager) {
Madan Jampani63c659f2015-06-11 00:52:58 -070039 this.databaseManager = databaseManager;
40 }
41
42 @Override
43 public DistributedQueueBuilder<E> withName(String name) {
44 checkArgument(name != null && !name.isEmpty());
45 this.name = name;
46 return this;
47 }
48
49 @Override
50 public DistributedQueueBuilder<E> withSerializer(Serializer serializer) {
51 checkArgument(serializer != null);
52 this.serializer = serializer;
53 return this;
54 }
55
56 @Override
Flavio Castro41b1f3a2015-07-31 13:51:32 -070057 public DistributedQueueBuilder<E> withMeteringDisabled() {
58 metering = false;
59 return this;
60 }
61
62 @Override
Madan Jampani63c659f2015-06-11 00:52:58 -070063 public DistributedQueueBuilder<E> withPersistenceDisabled() {
64 persistenceEnabled = false;
65 return this;
66 }
67
68 private boolean validInputs() {
69 return name != null && serializer != null;
70 }
71
72 @Override
73 public DistributedQueue<E> build() {
74 checkState(validInputs());
Madan Jampania6d787b2015-08-11 11:02:02 -070075 return new DefaultDistributedQueue<>(
Madan Jampani63c659f2015-06-11 00:52:58 -070076 name,
77 persistenceEnabled ? databaseManager.partitionedDatabase : databaseManager.inMemoryDatabase,
78 serializer,
Madan Jampania6d787b2015-08-11 11:02:02 -070079 metering);
Madan Jampani63c659f2015-06-11 00:52:58 -070080 }
81}