1 /*
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements. See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership. The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License. You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 */
19 package org.apache.hadoop.hbase.client;
20
21 import java.io.IOException;
22 import java.util.Map;
23
24 import org.apache.hadoop.hbase.classification.InterfaceAudience;
25 import org.apache.hadoop.hbase.classification.InterfaceStability;
26 import org.apache.hadoop.hbase.util.JsonMapper;
27
28 /**
29 * Superclass for any type that maps to a potentially application-level query.
30 * (e.g. Put, Get, Delete, Scan, Next, etc.)
31 * Contains methods for exposure to logging and debugging tools.
32 */
33 @InterfaceAudience.Public
34 @InterfaceStability.Evolving
35 public abstract class Operation {
36 // TODO make this configurable
37 // TODO Do we need this anymore now we have protobuffed it all?
38 private static final int DEFAULT_MAX_COLS = 5;
39
40 /**
41 * Produces a Map containing a fingerprint which identifies the type and
42 * the static schema components of a query (i.e. column families)
43 * @return a map containing fingerprint information (i.e. column families)
44 */
45 public abstract Map<String, Object> getFingerprint();
46
47 /**
48 * Produces a Map containing a summary of the details of a query
49 * beyond the scope of the fingerprint (i.e. columns, rows...)
50 * @param maxCols a limit on the number of columns output prior to truncation
51 * @return a map containing parameters of a query (i.e. rows, columns...)
52 */
53 public abstract Map<String, Object> toMap(int maxCols);
54
55 /**
56 * Produces a Map containing a full summary of a query.
57 * @return a map containing parameters of a query (i.e. rows, columns...)
58 */
59 public Map<String, Object> toMap() {
60 return toMap(DEFAULT_MAX_COLS);
61 }
62
63 /**
64 * Produces a JSON object for fingerprint and details exposure in a
65 * parseable format.
66 * @param maxCols a limit on the number of columns to include in the JSON
67 * @return a JSONObject containing this Operation's information, as a string
68 */
69 public String toJSON(int maxCols) throws IOException {
70 return JsonMapper.writeMapAsString(toMap(maxCols));
71 }
72
73 /**
74 * Produces a JSON object sufficient for description of a query
75 * in a debugging or logging context.
76 * @return the produced JSON object, as a string
77 */
78 public String toJSON() throws IOException {
79 return toJSON(DEFAULT_MAX_COLS);
80 }
81
82 /**
83 * Produces a string representation of this Operation. It defaults to a JSON
84 * representation, but falls back to a string representation of the
85 * fingerprint and details in the case of a JSON encoding failure.
86 * @param maxCols a limit on the number of columns output in the summary
87 * prior to truncation
88 * @return a JSON-parseable String
89 */
90 public String toString(int maxCols) {
91 /* for now this is merely a wrapper from producing a JSON string, but
92 * toJSON is kept separate in case this is changed to be a less parsable
93 * pretty printed representation.
94 */
95 try {
96 return toJSON(maxCols);
97 } catch (IOException ioe) {
98 return toMap(maxCols).toString();
99 }
100 }
101
102 /**
103 * Produces a string representation of this Operation. It defaults to a JSON
104 * representation, but falls back to a string representation of the
105 * fingerprint and details in the case of a JSON encoding failure.
106 * @return String
107 */
108 @Override
109 public String toString() {
110 return toString(DEFAULT_MAX_COLS);
111 }
112 }