/**
* Creates an attribute group handler that will generate stylistic attribute values such as colors or shapes based on data set categories.
* @param {Object} [matchRules] A map of key value pairs for categories and the matching attribute value e.g. {"soda" : "square", "water" : "circle", "iced tea" : "triangleUp"}.
* Attribute values listed in the matchRules object will be reserved only for the matching categories when getAttributeValue is called.
* @export
* @constructor
*/
oj.AttributeGroupHandler = function(matchRules) {
this.Init(matchRules);
};
oj.Object.createSubclass(oj.AttributeGroupHandler, oj.Object, "oj.AttributeGroupHandler");
oj.AttributeGroupHandler.prototype.Init = function(matchRules) {
oj.AttributeGroupHandler.superclass.Init.call(this);
this._matchRules = matchRules ? matchRules : {};
this._assignments = {};
this._valueIndex = 0;
this.Values = this.getValueRamp();
for (var key in this._matchRules) {
// remove match rule value from attribute group values
var idx = this.Values.indexOf(this._matchRules[key]);
if (idx !== -1)
this.Values.splice(idx, 1);
}
}
/**
* Returns the array of possible attribute values for this attribute group handler.
* This array can be modified so subclasses should return a copy of its internal value ramp.
* @returns {Array} The array of attribute values
* @export
*/
oj.AttributeGroupHandler.prototype.getValueRamp = function() {
return [];
}
/**
* Assigns the given category an attribute value. Will consistently return the same attribute value for equal categories.
* @param {Object} category The category to assign
* @returns {Object} The attribute value for the category
* @export
*/
oj.AttributeGroupHandler.prototype.getValue = function(category) {
if (this._matchRules[category])
return this._matchRules[category];
else if (this._assignments[category])
return this._assignments[category];
else {
this._assignments[category] = this.Values[this._valueIndex];
if (this._valueIndex == this.Values.length - 1)
this._valueIndex = 0;
else
this._valueIndex++;
return this._assignments[category];
}
}
/**
* Returns the current map of key value pairs for categories and the assigned attribute values
* @return {Array} The current list of category and value pairing
* @export
*/
oj.AttributeGroupHandler.prototype.getCategoryAssignments = function() {
var assignments = [];
for (var i in this._assignments)
assignments.push({"category": i, "value": this._assignments[i]});
return assignments;
}
/**
* Reserves an attribute value for the given category
* @param {String} category Used for checking inputs to getAttributeValue against when assigning an attribute value
* @param {String} attributeValue The attribute value to assign for inputs matching the given category e.g. "square" or "circle"
* @export
*/
oj.AttributeGroupHandler.prototype.addMatchRule = function(category, attributeValue) {
this._matchRules[category] = attributeValue;
}
Source: src/main/javascript/oracle/oj/ojdvt-base/AttributeGroupHandler.js
Oracle® JavaScript Extension Toolkit (JET)
1.1.2
E65298-01