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