goog.provide('M.Layer'); goog.provide('M.layer'); goog.require('M.utils'); goog.require('M.exception'); goog.require('M.facade.Base'); goog.require('M.parameter.layer'); (function() { /** * @classdesc * Main constructor of the class. Creates a layer * with parameters specified by the user * * @constructor * @extends {M.facade.Base} * @param {string|Mx.parameters.Layer} userParameters parameters * provided by the user * @api stable */ M.Layer = (function(userParameters, impl) { // calls the super constructor goog.base(this, impl); var parameter = M.parameter.layer(userParameters); /** * @private * @type {string} * @expose */ this.type = parameter.type; /** * @private * @type {string} * @expose */ this.url = parameter.url; /** * @private * @type {string} * @expose */ this.name = parameter.name; /** * @private * @type {string} * @expose */ this.transparent = parameter.transparent; }); goog.inherits(M.Layer, M.facade.Base); /** * 'options' the layer options */ Object.defineProperty(M.Layer.prototype, "options", { get: function() { return this.getImpl().options; }, // defining new type is not allowed set: function(newOptions) { this.getImpl().options = newOptions; } }); /** * 'url' The service URL of the * layer */ Object.defineProperty(M.Layer.prototype, "url", { get: function() { return this.getImpl().url; }, // defining new type is not allowed set: function(newUrl) { this.getImpl().url = newUrl; } }); /** * 'name' the layer name */ Object.defineProperty(M.Layer.prototype, "name", { get: function() { return this.getImpl().name; }, // defining new type is not allowed set: function(newName) { this.getImpl().name = newName; } }); /** * 'transparent' the layer transparence */ Object.defineProperty(M.Layer.prototype, "transparent", { get: function() { return this.getImpl().transparent; }, // defining new type is not allowed set: function(newTransparent) { if (!M.utils.isNullOrEmpty(newTransparent)) { if (M.utils.isString(newTransparent)) { this.getImpl().transparent = (M.utils.normalize(newTransparent) === 'true'); } else { this.getImpl().transparent = newTransparent; } } else { this.getImpl().transparent = true; } } }); /** * 'displayInLayerSwitcher' the layer transparence */ Object.defineProperty(M.Layer.prototype, "displayInLayerSwitcher", { get: function() { return this.getImpl().displayInLayerSwitcher; }, // defining new type is not allowed set: function(newDisplayInLayerSwitcher) { if (!M.utils.isNullOrEmpty(newDisplayInLayerSwitcher)) { if (M.utils.isString(newDisplayInLayerSwitcher)) { this.getImpl().displayInLayerSwitcher = (M.utils.normalize(newDisplayInLayerSwitcher) === 'true'); } else { this.getImpl().displayInLayerSwitcher = newDisplayInLayerSwitcher; } } else { this.getImpl().displayInLayerSwitcher = true; } } }); /** * This function indicates if the layer is visible * * @function * @api stable * @export */ M.Layer.prototype.isVisible = function() { // checks if the implementation can manage this method if (M.utils.isUndefined(this.getImpl().isVisible)) { M.exception('La implementación usada no posee el método isVisible'); } return this.getImpl().isVisible(); }; /** * This function indicates if the layer is visible * * @function * @api stable * @export */ M.Layer.prototype.isQueryable = function() { // checks if the implementation can manage this method if (M.utils.isUndefined(this.getImpl().isQueryable)) { M.exception('La implementación usada no posee el método isQueryable'); } return this.getImpl().isQueryable(); }; /** * This function sets the visibility of this layer * * @function * @api stable * @export */ M.Layer.prototype.setVisible = function(visibility) { // checks if the param is null or empty if (M.utils.isNullOrEmpty(visibility)) { M.exception('No ha especificado ningún parámetro de visibilidad'); } // checks if the param is boolean or string if (!M.utils.isString(visibility) && !M.utils.isBoolean(visibility)) { M.exception('No ha especificado ningún parámetro de visibilidad'); } // checks if the implementation can manage this method if (M.utils.isUndefined(this.getImpl().setVisible)) { M.exception('La implementación usada no posee el método setVisible'); } visibility = /^1|(true)$/i.test(visibility); this.getImpl().setVisible(visibility); }; /** * This function indicates if the layer is in range * * @function * @api stable * @export */ M.Layer.prototype.inRange = function() { // checks if the implementation can manage this method if (M.utils.isUndefined(this.getImpl().inRange)) { M.exception('La implementación usada no posee el método inRange'); } return this.getImpl().inRange(); }; /** * This function checks if an object is equals * to this layer * * @function * @api stable */ M.Layer.prototype.getLegendURL = function() { return this.getImpl().getLegendURL(); }; /** * This function checks if an object is equals * to this layer * * @function * @api stable */ M.Layer.prototype.setLegendURL = function(legendUrl) { if (M.utils.isNullOrEmpty(legendUrl)) { legendUrl = M.utils.concatUrlPaths([M.config.THEME_URL, M.Layer.LEGEND_DEFAULT]); } this.getImpl().setLegendURL(legendUrl); }; /** * This function gets the z-index of this layer * * @function * @api stable */ M.Layer.prototype.getZIndex = function() { return this.getImpl().getZIndex(); }; /** * This function sets the z-index for this layer * * @function * @api stable */ M.Layer.prototype.setZIndex = function(zIndex) { this.getImpl().setZIndex(zIndex); }; /** * This function gets the opacity of this layer * * @function * @api stable */ M.Layer.prototype.getOpacity = function() { return this.getImpl().getOpacity(); }; /** * This function sets the opacity of this layer * * @function * @api stable */ M.Layer.prototype.setOpacity = function(opacity) { this.getImpl().setOpacity(opacity); }; /** * This function refreshes the state of this * layer * * @function * @api stable * @export */ M.Layer.prototype.refresh = function() { // checks if the implementation can manage this method if (!M.utils.isUndefined(this.getImpl().refresh) && M.utils.isFunction(this.getImpl().refresh)) { this.getImpl().refresh(); } }; /** * This function auto-generates a name for this layer * @private * @function * @export */ M.Layer.prototype.generateName_ = (function() { this.name = M.utils.generateRandom('layer_', '_'.concat(this.type)); }); /** * Image PNG for legend default * @const * @type {string} * @public * @api stable */ M.Layer.LEGEND_DEFAULT = '/img/legend-default.png'; /** * Image PNG for legend default * @const * @type {string} * @public * @api stable */ M.Layer.LEGEND_ERROR = '/img/legend-error.png'; })();