Ext.namespace('Zarafa.core'); /** * @class Zarafa.core.Enum * @extends Object * * Base class for Enumerations, which are defined as <String, Number> hash maps. * Provides a set of get methods for getting properties or property names by value. */ Zarafa.core.Enum = Ext.extend(Object, { /** * Get a property by value. * @param {Number} value * @return the property value (equal to the input) iff a property with the given value exists. Returns undefined otherwise. */ get : function(value) { value = parseInt(value, 10); for (var key in this) { if (this[key]==value) { return this[key]; } } }, /** * Gets a property name by value. * @param {Number} value * @return the property name iff a property with the given value exists. Returns undefined otherwise. */ getName : function(value) { value = parseInt(value, 10); for (var key in this) { if (this[key]==value) { return key; } } }, /** * Gets a property value by name. * @param {String} key key of the <String, Number> hashmap * @return {Number} the property value corresponding to string key */ getValue : function(key) { var value = this[key]; if(Ext.isNumber(value)) { return value; } }, /** * Adds a new property and assigns it a unique value. If the property already exists it does not * add the new property and returns the value of the existing one. * @param {String} key key of the <String, Number> hashmap * @return {Number} the property value corresponding to string key */ addProperty: function(propKey) { // Look for the highest value var highestValue = 0; for (var key in this) { if (typeof this[key] == 'number'){ // Return the value if the property already exists if(key == propKey) { return this[key]; } if(highestValue < this[key]){ highestValue = this[key]; } } } // Take the highest value, increase it by one and set it as value for the new property highestValue++; this[propKey] = highestValue; return highestValue; } }); // Convenience method Zarafa.core.Enum.create = function(object) { var ExtendedObject = Ext.extend(Zarafa.core.Enum, object); return new ExtendedObject(); };