blob: 9ce14a155654c676a60bd803b8deeae3fedd0e2f [file] [log] [blame]
Madan Jampani12390c12014-11-12 00:35:56 -08001package org.onlab.onos.store.service;
2
3import java.util.Collections;
4import java.util.List;
5
6import com.google.common.collect.Lists;
7
8/**
9 * Collection of write requests to be submitted as one batch.
10 */
11public class BatchWriteRequest {
12
13 private final List<WriteRequest> writeRequests;
14
15 /**
16 * Creates a new BatchWriteRequest object from the specified list of write requests.
17 * @param writeRequests write requests.
18 * @return BatchWriteRequest object.
19 */
20 public static BatchWriteRequest create(List<WriteRequest> writeRequests) {
21 return new BatchWriteRequest(writeRequests);
22 }
23
24 private BatchWriteRequest(List<WriteRequest> writeRequests) {
25 this.writeRequests = Collections.unmodifiableList(writeRequests);
26 }
27
28 /**
29 * Returns the requests in this batch as a list.
30 * @return list of write requests
31 */
32 public List<WriteRequest> getAsList() {
33 return writeRequests;
34 }
35
36 /**
37 * Returns the number of requests in this batch.
38 * @return size of request batch.
39 */
40 public int batchSize() {
41 return writeRequests.size();
42 }
43
44 /**
45 * Builder for BatchWriteRequest.
46 */
47 public static class Builder {
48
49 private final List<WriteRequest> writeRequests = Lists.newLinkedList();
50
51 public Builder put(String tableName, String key, byte[] value) {
52 writeRequests.add(WriteRequest.put(tableName, key, value));
53 return this;
54 }
55
56 public Builder putIfAbsent(String tableName, String key, byte[] value) {
57 writeRequests.add(WriteRequest.putIfAbsent(tableName, key, value));
58 return this;
59 }
60
61 public Builder putIfValueMatches(String tableName, String key, byte[] oldValue, byte[] newValue) {
62 writeRequests.add(WriteRequest.putIfValueMatches(tableName, key, oldValue, newValue));
63 return this;
64 }
65
66 public Builder putIfVersionMatches(String tableName, String key, byte[] value, long version) {
67 writeRequests.add(WriteRequest.putIfVersionMatches(tableName, key, value, version));
68 return this;
69 }
70
71 public Builder remove(String tableName, String key) {
72 writeRequests.add(WriteRequest.remove(tableName, key));
73 return this;
74 }
75
76 public Builder removeIfVersionMatches(String tableName, String key, long version) {
77 writeRequests.add(WriteRequest.removeIfVersionMatches(tableName, key, version));
78 return this;
79 }
80
81 public Builder removeIfValueMatches(String tableName, String key, byte[] value) {
82 writeRequests.add(WriteRequest.removeIfValueMatches(tableName, key, value));
83 return this;
84 }
85
86 public BatchWriteRequest build() {
87 return new BatchWriteRequest(writeRequests);
88 }
89 }
90}