blob: 398af192046b4376a9e133390db72de8296f7e78 [file] [log] [blame]
alshabibab984662014-12-04 18:56:18 -08001/*
2 * Copyright 2014 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 */
Brian O'Connorabafb502014-12-02 22:26:20 -080016package org.onosproject.store.service;
Madan Jampani12390c12014-11-12 00:35:56 -080017
Madan Jampani12390c12014-11-12 00:35:56 -080018import java.util.List;
19
Madan Jampanif5d263b2014-11-13 10:04:40 -080020import com.google.common.base.MoreObjects;
Madan Jampani7aad2332014-11-12 01:57:07 -080021import com.google.common.collect.ImmutableList;
Madan Jampani12390c12014-11-12 00:35:56 -080022import com.google.common.collect.Lists;
23
24/**
25 * Collection of write requests to be submitted as one batch.
26 */
Madan Jampani23af4fc2014-11-12 00:54:18 -080027public final class BatchWriteRequest {
Madan Jampani12390c12014-11-12 00:35:56 -080028
Madan Jampani23af4fc2014-11-12 00:54:18 -080029 private final List<WriteRequest> writeRequests;
Madan Jampani12390c12014-11-12 00:35:56 -080030
Madan Jampani23af4fc2014-11-12 00:54:18 -080031 /**
32 * Creates a new BatchWriteRequest object from the specified list of write requests.
33 * @param writeRequests write requests.
34 * @return BatchWriteRequest object.
35 */
36 public static BatchWriteRequest create(List<WriteRequest> writeRequests) {
37 return new BatchWriteRequest(writeRequests);
38 }
Madan Jampani12390c12014-11-12 00:35:56 -080039
Madan Jampani23af4fc2014-11-12 00:54:18 -080040 private BatchWriteRequest(List<WriteRequest> writeRequests) {
Madan Jampani7aad2332014-11-12 01:57:07 -080041 this.writeRequests = ImmutableList.copyOf(writeRequests);
Madan Jampani23af4fc2014-11-12 00:54:18 -080042 }
Madan Jampani12390c12014-11-12 00:35:56 -080043
Madan Jampani23af4fc2014-11-12 00:54:18 -080044 /**
45 * Returns the requests in this batch as a list.
46 * @return list of write requests
47 */
48 public List<WriteRequest> getAsList() {
49 return writeRequests;
50 }
Madan Jampani12390c12014-11-12 00:35:56 -080051
Madan Jampani23af4fc2014-11-12 00:54:18 -080052 /**
53 * Returns the number of requests in this batch.
54 * @return size of request batch.
55 */
56 public int batchSize() {
57 return writeRequests.size();
58 }
Madan Jampani12390c12014-11-12 00:35:56 -080059
Madan Jampanif5d263b2014-11-13 10:04:40 -080060 @Override
61 public String toString() {
62 return MoreObjects.toStringHelper(getClass())
63 .add("writeRequests", writeRequests)
64 .toString();
65 }
66
Yuta HIGUCHI35242292014-11-12 18:53:15 -080067 public static Builder newBuilder() {
68 return new Builder();
69 }
70
Madan Jampani23af4fc2014-11-12 00:54:18 -080071 /**
72 * Builder for BatchWriteRequest.
73 */
74 public static class Builder {
Madan Jampani12390c12014-11-12 00:35:56 -080075
Madan Jampani23af4fc2014-11-12 00:54:18 -080076 private final List<WriteRequest> writeRequests = Lists.newLinkedList();
Madan Jampani12390c12014-11-12 00:35:56 -080077
Madan Jampani23af4fc2014-11-12 00:54:18 -080078 public Builder put(String tableName, String key, byte[] value) {
79 writeRequests.add(WriteRequest.put(tableName, key, value));
80 return this;
81 }
Madan Jampani12390c12014-11-12 00:35:56 -080082
Madan Jampani23af4fc2014-11-12 00:54:18 -080083 public Builder putIfAbsent(String tableName, String key, byte[] value) {
84 writeRequests.add(WriteRequest.putIfAbsent(tableName, key, value));
85 return this;
86 }
Madan Jampani12390c12014-11-12 00:35:56 -080087
Madan Jampani23af4fc2014-11-12 00:54:18 -080088 public Builder putIfValueMatches(String tableName, String key, byte[] oldValue, byte[] newValue) {
89 writeRequests.add(WriteRequest.putIfValueMatches(tableName, key, oldValue, newValue));
90 return this;
91 }
Madan Jampani12390c12014-11-12 00:35:56 -080092
Madan Jampani23af4fc2014-11-12 00:54:18 -080093 public Builder putIfVersionMatches(String tableName, String key, byte[] value, long version) {
94 writeRequests.add(WriteRequest.putIfVersionMatches(tableName, key, value, version));
95 return this;
96 }
Madan Jampani12390c12014-11-12 00:35:56 -080097
Madan Jampani23af4fc2014-11-12 00:54:18 -080098 public Builder remove(String tableName, String key) {
99 writeRequests.add(WriteRequest.remove(tableName, key));
100 return this;
101 }
Madan Jampani12390c12014-11-12 00:35:56 -0800102
Madan Jampani23af4fc2014-11-12 00:54:18 -0800103 public Builder removeIfVersionMatches(String tableName, String key, long version) {
104 writeRequests.add(WriteRequest.removeIfVersionMatches(tableName, key, version));
105 return this;
106 }
Madan Jampani12390c12014-11-12 00:35:56 -0800107
Madan Jampani23af4fc2014-11-12 00:54:18 -0800108 public Builder removeIfValueMatches(String tableName, String key, byte[] value) {
109 writeRequests.add(WriteRequest.removeIfValueMatches(tableName, key, value));
110 return this;
111 }
Madan Jampani12390c12014-11-12 00:35:56 -0800112
Madan Jampani23af4fc2014-11-12 00:54:18 -0800113 public BatchWriteRequest build() {
114 return new BatchWriteRequest(writeRequests);
115 }
116 }
117}