1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.hadoop.hbase.rest.model;
20
21 import java.io.IOException;
22 import java.io.Serializable;
23 import java.util.ArrayList;
24 import java.util.List;
25
26 import javax.xml.bind.annotation.XmlAccessType;
27 import javax.xml.bind.annotation.XmlAccessorType;
28 import javax.xml.bind.annotation.XmlElement;
29 import javax.xml.bind.annotation.XmlRootElement;
30
31 import org.apache.hadoop.hbase.HConstants;
32 import org.apache.hadoop.hbase.classification.InterfaceAudience;
33 import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
34 import org.apache.hadoop.hbase.rest.ProtobufMessageHandler;
35 import org.apache.hadoop.hbase.rest.protobuf.generated.CellMessage.Cell;
36 import org.apache.hadoop.hbase.rest.protobuf.generated.CellSetMessage.CellSet;
37 import org.apache.hadoop.hbase.util.ByteStringer;
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72 @XmlRootElement(name="CellSet")
73 @XmlAccessorType(XmlAccessType.FIELD)
74 @InterfaceAudience.Private
75 public class CellSetModel implements Serializable, ProtobufMessageHandler {
76 private static final long serialVersionUID = 1L;
77
78 @XmlElement(name="Row")
79 private List<RowModel> rows;
80
81
82
83
84 public CellSetModel() {
85 this.rows = new ArrayList<>();
86 }
87
88
89
90
91 public CellSetModel(List<RowModel> rows) {
92 super();
93 this.rows = rows;
94 }
95
96
97
98
99
100 public void addRow(RowModel row) {
101 rows.add(row);
102 }
103
104
105
106
107 public List<RowModel> getRows() {
108 return rows;
109 }
110
111 @Override
112 public byte[] createProtobufOutput() {
113 CellSet.Builder builder = CellSet.newBuilder();
114 for (RowModel row : getRows()) {
115 CellSet.Row.Builder rowBuilder = CellSet.Row.newBuilder();
116 rowBuilder.setKey(ByteStringer.wrap(row.getKey()));
117 for (CellModel cell : row.getCells()) {
118 Cell.Builder cellBuilder = Cell.newBuilder();
119 cellBuilder.setColumn(ByteStringer.wrap(cell.getColumn()));
120 cellBuilder.setData(ByteStringer.wrap(cell.getValue()));
121 if (cell.hasUserTimestamp()) {
122 cellBuilder.setTimestamp(cell.getTimestamp());
123 }
124 rowBuilder.addValues(cellBuilder);
125 }
126 builder.addRows(rowBuilder);
127 }
128 return builder.build().toByteArray();
129 }
130
131 @Override
132 public ProtobufMessageHandler getObjectFromMessage(byte[] message)
133 throws IOException {
134 CellSet.Builder builder = CellSet.newBuilder();
135 ProtobufUtil.mergeFrom(builder, message);
136 for (CellSet.Row row : builder.getRowsList()) {
137 RowModel rowModel = new RowModel(row.getKey().toByteArray());
138 for (Cell cell : row.getValuesList()) {
139 long timestamp = HConstants.LATEST_TIMESTAMP;
140 if (cell.hasTimestamp()) {
141 timestamp = cell.getTimestamp();
142 }
143 rowModel.addCell(
144 new CellModel(cell.getColumn().toByteArray(), timestamp,
145 cell.getData().toByteArray()));
146 }
147 addRow(rowModel);
148 }
149 return this;
150 }
151 }