File: lib/commands/kv/fetchpropsbase.js
'use strict';
var CommandBase = require('../commandbase');
var inherits = require('util').inherits;
/**
* Base class for FetchBucketProps and FetchBucketTypeProps classes.
* @module KV
*/
/**
* @class FetchPropsBase
* @constructor
* @param {String} pbRequestName name of the Riak protocol buffer this command will send
* @param {String} pbResponseName name of the Riak protocol buffer this command will receive
* @param {Function} callback The callback to be executed when the operation completes.
* @param {String} callback.err An error message. Will ne null if no error.
* @param {Object} callback.response The response from Riak. This is an oject with all the bucket properties.
* @param {Object} callback.data additional error data. Will be null if no error.
* @extends CommandBase
*/
function FetchPropsBase(pbRequestName, pbResponseName, callback) {
CommandBase.call(this, pbRequestName, pbResponseName, callback);
}
inherits(FetchPropsBase, CommandBase);
FetchPropsBase.prototype.onSuccess = function(rpbGetBucketResp) {
var rpbBucketProps = rpbGetBucketResp.getProps();
var bucketProps = {
nVal : rpbBucketProps.getNVal(),
allowMult : rpbBucketProps.getAllowMult(),
lastWriteWins: rpbBucketProps.getLastWriteWins(),
hasPrecommit : rpbBucketProps.getHasPrecommit(),
hasPostcommit: rpbBucketProps.getHasPostcommit(),
oldVClock : rpbBucketProps.getOldVclock(),
youngVClock: rpbBucketProps.getYoungVclock(),
bigVClock : rpbBucketProps.getBigVclock(),
smallVClock: rpbBucketProps.getSmallVclock(),
pr: rpbBucketProps.getPr(),
r: rpbBucketProps.getR(),
w: rpbBucketProps.getW(),
pw: rpbBucketProps.getPw(),
dw: rpbBucketProps.getDw(),
rw: rpbBucketProps.getRw(),
basicQuorum: rpbBucketProps.getBasicQuorum(),
notFoundOk: rpbBucketProps.getNotfoundOk(),
search: rpbBucketProps.getSearch(),
consistent: rpbBucketProps.getConsistent(),
repl: rpbBucketProps.getRepl()
};
var backend;
if ((backend = rpbBucketProps.getBackend()) !== null) {
bucketProps.backend = backend.toString('utf8');
}
var searchIndex;
if ((searchIndex = rpbBucketProps.getSearchIndex()) !== null) {
bucketProps.searchIndex = searchIndex.toString('utf8');
}
var dataType;
if ((dataType = rpbBucketProps.getDatatype()) !== null) {
bucketProps.dataType = dataType.toString('utf8');
}
if (rpbBucketProps.getHasPrecommit()) {
bucketProps.precommit = this._parseHooks(rpbBucketProps.getPrecommit());
} else {
bucketProps.precommit = [];
}
if (rpbBucketProps.getHasPostcommit()) {
bucketProps.postcommit = this._parseHooks(rpbBucketProps.getPostcommit());
} else {
bucketProps.postcommit = [];
}
var chashKeyFun;
if ((chashKeyFun = rpbBucketProps.getChashKeyfun()) !== null) {
bucketProps.chashKeyfun = { mod: chashKeyFun.module.toString('utf8'),
fun: chashKeyFun.function.toString('utf8') };
}
var linkfun;
if ((linkfun = rpbBucketProps.getLinkfun()) !== null) {
bucketProps.linkFun = { mod: linkfun.module.toString('utf8'),
fun: linkfun.function.toString('utf8') };
}
this._callback(null, bucketProps);
return true;
};
FetchPropsBase.prototype._parseHooks = function(rpbCommitHooks) {
var hooks = new Array(rpbCommitHooks.length);
for (var i = 0; i < rpbCommitHooks.length; i++) {
if (rpbCommitHooks[i].name) {
hooks[i] = { name: rpbCommitHooks[i].name.toString('utf8') };
} else {
hooks[i] = { mod: rpbCommitHooks[i].modfun.module.toString('utf8'),
fun: rpbCommitHooks[i].modfun.function.toString('utf8') };
}
}
return hooks;
};
function Builder() {}
/**
* Set the bucket type.
* If not supplied, 'default' is used.
* @method withBucketType
* @param {String} bucketType the bucket type in riak
* @chainable
*/
Builder.prototype.withBucketType = function(bucketType) {
this.bucketType = bucketType;
return this;
};
/**
* Set the callback to be executed when the operation completes.
* @method withCallback
* @param {Function} callback The callback to be executed when the operation completes.
* @param {String} callback.err An error message. Will ne null if no error.
* @param {Object} callback.response The response from Riak. This is an oject with all the bucket properties.
* @chainable
*/
Builder.prototype.withCallback = function(callback) {
this.callback = callback;
return this;
};
module.exports = FetchPropsBase;
module.exports.Builder = Builder;