blob: 7686c7cc473c26c99098ee9f95b70ccbdcf8fde2 [file] [log] [blame]
Brian O'Connorabafb502014-12-02 22:26:20 -08001package org.onosproject.store.service;
Madan Jampani12390c12014-11-12 00:35:56 -08002
Madan Jampani12390c12014-11-12 00:35:56 -08003import java.util.List;
4
Madan Jampanif5d263b2014-11-13 10:04:40 -08005import com.google.common.base.MoreObjects;
Madan Jampani7aad2332014-11-12 01:57:07 -08006import com.google.common.collect.ImmutableList;
Madan Jampani12390c12014-11-12 00:35:56 -08007import com.google.common.collect.Lists;
8
9/**
10 * Collection of write requests to be submitted as one batch.
11 */
Madan Jampani23af4fc2014-11-12 00:54:18 -080012public final class BatchWriteRequest {
Madan Jampani12390c12014-11-12 00:35:56 -080013
Madan Jampani23af4fc2014-11-12 00:54:18 -080014 private final List<WriteRequest> writeRequests;
Madan Jampani12390c12014-11-12 00:35:56 -080015
Madan Jampani23af4fc2014-11-12 00:54:18 -080016 /**
17 * Creates a new BatchWriteRequest object from the specified list of write requests.
18 * @param writeRequests write requests.
19 * @return BatchWriteRequest object.
20 */
21 public static BatchWriteRequest create(List<WriteRequest> writeRequests) {
22 return new BatchWriteRequest(writeRequests);
23 }
Madan Jampani12390c12014-11-12 00:35:56 -080024
Madan Jampani23af4fc2014-11-12 00:54:18 -080025 private BatchWriteRequest(List<WriteRequest> writeRequests) {
Madan Jampani7aad2332014-11-12 01:57:07 -080026 this.writeRequests = ImmutableList.copyOf(writeRequests);
Madan Jampani23af4fc2014-11-12 00:54:18 -080027 }
Madan Jampani12390c12014-11-12 00:35:56 -080028
Madan Jampani23af4fc2014-11-12 00:54:18 -080029 /**
30 * Returns the requests in this batch as a list.
31 * @return list of write requests
32 */
33 public List<WriteRequest> getAsList() {
34 return writeRequests;
35 }
Madan Jampani12390c12014-11-12 00:35:56 -080036
Madan Jampani23af4fc2014-11-12 00:54:18 -080037 /**
38 * Returns the number of requests in this batch.
39 * @return size of request batch.
40 */
41 public int batchSize() {
42 return writeRequests.size();
43 }
Madan Jampani12390c12014-11-12 00:35:56 -080044
Madan Jampanif5d263b2014-11-13 10:04:40 -080045 @Override
46 public String toString() {
47 return MoreObjects.toStringHelper(getClass())
48 .add("writeRequests", writeRequests)
49 .toString();
50 }
51
Yuta HIGUCHI35242292014-11-12 18:53:15 -080052 public static Builder newBuilder() {
53 return new Builder();
54 }
55
Madan Jampani23af4fc2014-11-12 00:54:18 -080056 /**
57 * Builder for BatchWriteRequest.
58 */
59 public static class Builder {
Madan Jampani12390c12014-11-12 00:35:56 -080060
Madan Jampani23af4fc2014-11-12 00:54:18 -080061 private final List<WriteRequest> writeRequests = Lists.newLinkedList();
Madan Jampani12390c12014-11-12 00:35:56 -080062
Madan Jampani23af4fc2014-11-12 00:54:18 -080063 public Builder put(String tableName, String key, byte[] value) {
64 writeRequests.add(WriteRequest.put(tableName, key, value));
65 return this;
66 }
Madan Jampani12390c12014-11-12 00:35:56 -080067
Madan Jampani23af4fc2014-11-12 00:54:18 -080068 public Builder putIfAbsent(String tableName, String key, byte[] value) {
69 writeRequests.add(WriteRequest.putIfAbsent(tableName, key, value));
70 return this;
71 }
Madan Jampani12390c12014-11-12 00:35:56 -080072
Madan Jampani23af4fc2014-11-12 00:54:18 -080073 public Builder putIfValueMatches(String tableName, String key, byte[] oldValue, byte[] newValue) {
74 writeRequests.add(WriteRequest.putIfValueMatches(tableName, key, oldValue, newValue));
75 return this;
76 }
Madan Jampani12390c12014-11-12 00:35:56 -080077
Madan Jampani23af4fc2014-11-12 00:54:18 -080078 public Builder putIfVersionMatches(String tableName, String key, byte[] value, long version) {
79 writeRequests.add(WriteRequest.putIfVersionMatches(tableName, key, value, version));
80 return this;
81 }
Madan Jampani12390c12014-11-12 00:35:56 -080082
Madan Jampani23af4fc2014-11-12 00:54:18 -080083 public Builder remove(String tableName, String key) {
84 writeRequests.add(WriteRequest.remove(tableName, key));
85 return this;
86 }
Madan Jampani12390c12014-11-12 00:35:56 -080087
Madan Jampani23af4fc2014-11-12 00:54:18 -080088 public Builder removeIfVersionMatches(String tableName, String key, long version) {
89 writeRequests.add(WriteRequest.removeIfVersionMatches(tableName, key, version));
90 return this;
91 }
Madan Jampani12390c12014-11-12 00:35:56 -080092
Madan Jampani23af4fc2014-11-12 00:54:18 -080093 public Builder removeIfValueMatches(String tableName, String key, byte[] value) {
94 writeRequests.add(WriteRequest.removeIfValueMatches(tableName, key, value));
95 return this;
96 }
Madan Jampani12390c12014-11-12 00:35:56 -080097
Madan Jampani23af4fc2014-11-12 00:54:18 -080098 public BatchWriteRequest build() {
99 return new BatchWriteRequest(writeRequests);
100 }
101 }
102}