goog.provide('M.layer.WMS'); goog.require('M.Layer'); goog.require('M.utils'); goog.require('M.exception'); (function() { /** * @classdesc * Main constructor of the class. Creates a WMS layer * with parameters specified by the user * * @constructor * @extends {M.Layer} * @param {string|Mx.parameters.WMS} userParameters parameters * @param {Mx.parameters.LayerOptions} options provided by the user * @api stable */ M.layer.WMS = (function(userParameters, options, implParam) { // checks if the implementation can create WMC layers if (M.utils.isUndefined(M.impl.layer.WMS)) { M.exception('La implementación usada no puede crear capas WMS'); } // checks if the param is null or empty if (M.utils.isNullOrEmpty(userParameters)) { M.exception('No ha especificado ningún parámetro'); } options = (options || {}); /** * Implementation of this layer * @public * @type {M.layer.WMS} */ var impl = implParam; if (M.utils.isNullOrEmpty(impl)) { impl = new M.impl.layer.WMS(options); } var parameters = M.parameter.layer(userParameters, M.layer.type.WMS); // calls the super constructor goog.base(this, parameters, impl); // legend this.legend = parameters.legend; // cql this.cql = parameters.cql; // version this.version = parameters.version; // tiled if (!M.utils.isNullOrEmpty(parameters.tiled)) { this.tiled = parameters.tiled; } // transparent this.transparent = parameters.transparent; // options this.options = options; }); goog.inherits(M.layer.WMS, M.Layer); /** * 'url' The service URL of the * layer */ Object.defineProperty(M.layer.WMS.prototype, "url", { get: function() { return this.getImpl().url; }, // defining new type is not allowed set: function(newUrl) { this.getImpl().url = newUrl; this._updateNoCache(); } }); /** * 'name' the layer name */ Object.defineProperty(M.layer.WMS.prototype, "name", { get: function() { return this.getImpl().name; }, // defining new type is not allowed set: function(newName) { this.getImpl().name = newName; this._updateNoCache(); } }); /** * 'type' This property indicates if * the layer was selected */ Object.defineProperty(M.layer.WMS.prototype, "type", { get: function() { return M.layer.type.WMS; }, // defining new type is not allowed set: function(newType) { if (!M.utils.isUndefined(newType) && !M.utils.isNullOrEmpty(newType) && (newType !== M.layer.type.WMS)) { M.exception('El tipo de capa debe ser \''.concat(M.layer.type.WMS).concat('\' pero se ha especificado \'').concat(newType).concat('\'')); } } }); /** * 'legend' the layer name */ Object.defineProperty(M.layer.WMS.prototype, "legend", { get: function() { return this.getImpl().legend; }, // defining new type is not allowed set: function(newLegend) { if (M.utils.isNullOrEmpty(newLegend)) { this.getImpl().legend = this.name; } else { this.getImpl().legend = newLegend; } } }); /** * 'tiled' the layer name */ Object.defineProperty(M.layer.WMS.prototype, "tiled", { get: function() { return this.getImpl().tiled; }, set: function(newTiled) { if (!M.utils.isNullOrEmpty(newTiled)) { if (M.utils.isString(newTiled)) { this.getImpl().tiled = (M.utils.normalize(newTiled) === 'true'); } else { this.getImpl().tiled = newTiled; } } else { this.getImpl().tiled = true; } } }); /** * 'cql' the CQL filter */ Object.defineProperty(M.layer.WMS.prototype, "cql", { get: function() { return this.getImpl().cql; }, // defining new type is not allowed set: function(newCql) { this.getImpl().cql = newCql; } }); /** * 'version' the service version * default value is 1.3.0 */ Object.defineProperty(M.layer.WMS.prototype, "version", { get: function() { return this.getImpl().version; }, // defining new type is not allowed set: function(newVersion) { if (!M.utils.isNullOrEmpty(newVersion)) { this.getImpl().version = newVersion; } else { this.getImpl().version = '1.1.0'; // default value } } }); /** * 'options' the layer options */ Object.defineProperty(M.layer.WMS.prototype, "options", { get: function() { return this.getImpl().options; }, // defining new type is not allowed set: function(newOptions) { this.getImpl().options = newOptions; } }); /** * TODO * * @function * @api stable */ M.layer.WMS.prototype.getNoChacheUrl = function() { return this._noCacheUrl; }; /** * TODO * * @function * @api stable */ M.layer.WMS.prototype.getNoChacheName = function() { return this._noCacheName; }; /** * Update minimum and maximum resolution WMS layers * * @public * @function * @param {String|Mx.Projection} projection - Projection map * @api stable */ M.layer.WMS.prototype.updateMinMaxResolution = function(projection) { return this.getImpl().updateMinMaxResolution(projection); }; /** * TODO * * @private * @function */ M.layer.WMS.prototype._updateNoCache = function() { var tiledIdx = M.config.tileMappgins.tiledNames.indexOf(this.name); if ((tiledIdx !== -1) && M.utils.sameUrl(M.config.tileMappgins.tiledUrls[tiledIdx], this.url)) { this._noCacheUrl = M.config.tileMappgins.urls[tiledIdx]; this._noCacheName = M.config.tileMappgins.names[tiledIdx]; } }; /** * This function checks if an object is equals * to this layer * * @function * @api stable */ M.layer.WMS.prototype.equals = function(obj) { var equals = false; if (obj instanceof M.layer.WMS) { equals = (this.url === obj.url); equals = equals && (this.name === obj.name); equals = equals && (this.cql === obj.cql); equals = equals && (this.version === obj.version); } return equals; }; })();