blob: 59f36edaf6ba6483968439c0b579ef9df20d2561 [file] [log] [blame]
Madan Jampani12390c12014-11-12 00:35:56 -08001package org.onlab.onos.store.service;
2
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
Madan Jampani23af4fc2014-11-12 00:54:18 -080052 /**
53 * Builder for BatchWriteRequest.
54 */
55 public static class Builder {
Madan Jampani12390c12014-11-12 00:35:56 -080056
Madan Jampani23af4fc2014-11-12 00:54:18 -080057 private final List<WriteRequest> writeRequests = Lists.newLinkedList();
Madan Jampani12390c12014-11-12 00:35:56 -080058
Madan Jampani23af4fc2014-11-12 00:54:18 -080059 public Builder put(String tableName, String key, byte[] value) {
60 writeRequests.add(WriteRequest.put(tableName, key, value));
61 return this;
62 }
Madan Jampani12390c12014-11-12 00:35:56 -080063
Madan Jampani23af4fc2014-11-12 00:54:18 -080064 public Builder putIfAbsent(String tableName, String key, byte[] value) {
65 writeRequests.add(WriteRequest.putIfAbsent(tableName, key, value));
66 return this;
67 }
Madan Jampani12390c12014-11-12 00:35:56 -080068
Madan Jampani23af4fc2014-11-12 00:54:18 -080069 public Builder putIfValueMatches(String tableName, String key, byte[] oldValue, byte[] newValue) {
70 writeRequests.add(WriteRequest.putIfValueMatches(tableName, key, oldValue, newValue));
71 return this;
72 }
Madan Jampani12390c12014-11-12 00:35:56 -080073
Madan Jampani23af4fc2014-11-12 00:54:18 -080074 public Builder putIfVersionMatches(String tableName, String key, byte[] value, long version) {
75 writeRequests.add(WriteRequest.putIfVersionMatches(tableName, key, value, version));
76 return this;
77 }
Madan Jampani12390c12014-11-12 00:35:56 -080078
Madan Jampani23af4fc2014-11-12 00:54:18 -080079 public Builder remove(String tableName, String key) {
80 writeRequests.add(WriteRequest.remove(tableName, key));
81 return this;
82 }
Madan Jampani12390c12014-11-12 00:35:56 -080083
Madan Jampani23af4fc2014-11-12 00:54:18 -080084 public Builder removeIfVersionMatches(String tableName, String key, long version) {
85 writeRequests.add(WriteRequest.removeIfVersionMatches(tableName, key, version));
86 return this;
87 }
Madan Jampani12390c12014-11-12 00:35:56 -080088
Madan Jampani23af4fc2014-11-12 00:54:18 -080089 public Builder removeIfValueMatches(String tableName, String key, byte[] value) {
90 writeRequests.add(WriteRequest.removeIfValueMatches(tableName, key, value));
91 return this;
92 }
Madan Jampani12390c12014-11-12 00:35:56 -080093
Madan Jampani23af4fc2014-11-12 00:54:18 -080094 public BatchWriteRequest build() {
95 return new BatchWriteRequest(writeRequests);
96 }
97 }
98}