/*
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.hadoop.hbase.client;
import java.io.IOException;
import java.util.Map;
import org.apache.hadoop.classification.InterfaceAudience;
import org.apache.hadoop.classification.InterfaceStability;
import org.codehaus.jackson.map.ObjectMapper;
/**
* Superclass for any type that maps to a potentially application-level query.
* (e.g. Put, Get, Delete, Scan, Next, etc.)
* Contains methods for exposure to logging and debugging tools.
*/
@InterfaceAudience.Public
@InterfaceStability.Evolving
public abstract class Operation {
// TODO make this configurable
private static final int DEFAULT_MAX_COLS = 5;
/**
* Produces a Map containing a fingerprint which identifies the type and
* the static schema components of a query (i.e. column families)
* @return a map containing fingerprint information (i.e. column families)
*/
public abstract Map<String, Object> getFingerprint();
/**
* Produces a Map containing a summary of the details of a query
* beyond the scope of the fingerprint (i.e. columns, rows...)
* @param maxCols a limit on the number of columns output prior to truncation
* @return a map containing parameters of a query (i.e. rows, columns...)
*/
public abstract Map<String, Object> toMap(int maxCols);
/**
* Produces a Map containing a full summary of a query.
* @return a map containing parameters of a query (i.e. rows, columns...)
*/
public Map<String, Object> toMap() {
return toMap(DEFAULT_MAX_COLS);
}
/**
* Produces a JSON object for fingerprint and details exposure in a
* parseable format.
* @param maxCols a limit on the number of columns to include in the JSON
* @return a JSONObject containing this Operation's information, as a string
*/
public String toJSON(int maxCols) throws IOException {
ObjectMapper mapper = new ObjectMapper();
return mapper.writeValueAsString(toMap(maxCols));
}
/**
* Produces a JSON object sufficient for description of a query
* in a debugging or logging context.
* @return the produced JSON object, as a string
*/
public String toJSON() throws IOException {
return toJSON(DEFAULT_MAX_COLS);
}
/**
* Produces a string representation of this Operation. It defaults to a JSON
* representation, but falls back to a string representation of the
* fingerprint and details in the case of a JSON encoding failure.
* @param maxCols a limit on the number of columns output in the summary
* prior to truncation
* @return a JSON-parseable String
*/
public String toString(int maxCols) {
/* for now this is merely a wrapper from producing a JSON string, but
* toJSON is kept separate in case this is changed to be a less parsable
* pretty printed representation.
*/
try {
return toJSON(maxCols);
} catch (IOException ioe) {
return toMap(maxCols).toString();
}
}
/**
* Produces a string representation of this Operation. It defaults to a JSON
* representation, but falls back to a string representation of the
* fingerprint and details in the case of a JSON encoding failure.
* @return String
*/
@Override
public String toString() {
return toString(DEFAULT_MAX_COLS);
}
}