baja/obj/Enum.js
/**
* @copyright 2015 Tridium, Inc. All Rights Reserved.
* @author Gareth Johnson
*/
/**
* Define {@link baja.Enum}.
* @module baja/obj/Enum
*/
define([ "bajaScript/sys",
"bajaScript/baja/obj/Simple" ],
function (baja, Simple) {
"use strict";
var subclass = baja.subclass,
callSuper = baja.callSuper;
/**
* Represents a `baja:Enum` in BajaScript.
*
* @class
* @alias baja.Enum
* @extends baja.Simple
*/
var Enum = function Enum() {
callSuper(Enum, this, arguments);
};
subclass(Enum, Simple);
/**
* Return the `Enum` (itself).
*
* @returns {baja.Enum}
*/
Enum.prototype.getEnum = function () {
return this;
};
/**
* Return the ordinal of the `Enum` (itself).
*
* @returns {Number}
*/
Enum.prototype.valueOf = function () {
return this.getOrdinal();
};
/**
* Return an `Enum` from a BIEnum.
*
* @param {baja.Complex|Object} enumVal - a `baja:StatusEnum`, a `baja.Complex` with a `baja:StatusEnum` `out` slot, or any object with a `getEnum` function defined.
*
* @returns {baja.Enum} the derived `Enum` value, or `baja.DynamicEnum.DEFAULT` if none present.
*
* @throws {Error} if a non-`baja.Value` was passed in
*/
Enum.getEnumFromIEnum = function (enumVal) {
var val = enumVal,
type = enumVal.getType(),
hasOut = false,
out;
if (type.isComplex()) {
out = enumVal.get("out");
if (out && out.getType().is("baja:StatusValue")) {
val = out.getValue();
hasOut = true;
}
}
if (!hasOut) {
if (type.is("baja:StatusValue")) {
val = enumVal.getValue();
} else if (typeof enumVal.getEnum === "function") {
val = enumVal.getEnum();
}
}
return val instanceof baja.Enum ? val : baja.DynamicEnum.DEFAULT;
};
/**
* Return facets from an IEnum
*
* @param {baja.Value} enumVal
* @returns {baja.Facets}
*/
Enum.getFacetsFromIEnum = function (enumVal) {
// First check if getBooleanFacets is available
if (typeof enumVal.getEnumFacets === 'function') {
return enumVal.getEnumFacets();
}
if (baja.hasType(enumVal, 'baja:StatusEnum')) {
return baja.Facets.make({ range: enumVal.getValue().getRange() });
}
// Next check the 'out' and 'facets' slots
return baja.Facets.getFacetsFromObject(enumVal);
};
return Enum;
});