1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.hadoop.hbase.client;
21
22 import org.apache.hadoop.hbase.classification.InterfaceAudience;
23 import org.apache.hadoop.hbase.classification.InterfaceStability;
24 import org.apache.hadoop.hbase.util.Bytes;
25 import org.apache.hadoop.hbase.util.ClassSize;
26
27 import java.util.Collections;
28 import java.util.HashMap;
29 import java.util.Map;
30
31 @InterfaceAudience.Public
32 @InterfaceStability.Evolving
33 public abstract class OperationWithAttributes extends Operation implements Attributes {
34
35 private Map<String, byte[]> attributes;
36
37
38 public static final String ID_ATRIBUTE = "_operation.attributes.id";
39
40 public void setAttribute(String name, byte[] value) {
41 if (attributes == null && value == null) {
42 return;
43 }
44
45 if (attributes == null) {
46 attributes = new HashMap<String, byte[]>();
47 }
48
49 if (value == null) {
50 attributes.remove(name);
51 if (attributes.isEmpty()) {
52 this.attributes = null;
53 }
54 } else {
55 attributes.put(name, value);
56 }
57 }
58
59 public byte[] getAttribute(String name) {
60 if (attributes == null) {
61 return null;
62 }
63
64 return attributes.get(name);
65 }
66
67 public Map<String, byte[]> getAttributesMap() {
68 if (attributes == null) {
69 return Collections.emptyMap();
70 }
71 return Collections.unmodifiableMap(attributes);
72 }
73
74 protected long getAttributeSize() {
75 long size = 0;
76 if (attributes != null) {
77 size += ClassSize.align(this.attributes.size() * ClassSize.MAP_ENTRY);
78 for(Map.Entry<String, byte[]> entry : this.attributes.entrySet()) {
79 size += ClassSize.align(ClassSize.STRING + entry.getKey().length());
80 size += ClassSize.align(ClassSize.ARRAY + entry.getValue().length);
81 }
82 }
83 return size;
84 }
85
86
87
88
89
90
91
92
93
94
95 public void setId(String id) {
96 setAttribute(ID_ATRIBUTE, Bytes.toBytes(id));
97 }
98
99
100
101
102
103
104 public String getId() {
105 byte[] attr = getAttribute(ID_ATRIBUTE);
106 return attr == null? null: Bytes.toString(attr);
107 }
108 }