goog.provide('M.Parameters');
goog.require('M.utils');
goog.require('M.exception');
goog.require('M.parameter.layer');
goog.require('M.parameter.projection');
goog.require("M.parameter.maxExtent");
goog.require("M.parameter.resolutions");
goog.require("M.parameter.zoom");
goog.require("M.parameter.center");
(function(document) {
'use strict';
/**
* @classdesc
* Main constructor of the class. Creates the parsed parameters
* with parameters specified by the user
*
* @constructor
* @param {string|Mx.parameters.Map} userParameters parameters
* provided by the user
* @api stable
*/
M.Parameters = (function(userParameters) {
if (M.utils.isNullOrEmpty(userParameters)) {
M.exception('No ha especificado ningún parámetro');
}
/**
* @public
* @type {Object}
* @api stable
*/
this.container = parseContainer(userParameters);
/**
* @public
* @type {Object}
* @api stable
*/
this.layers = parseLayers(userParameters);
/**
* @public
* @type {Object}
* @api stable
*/
this.wmc = parseWMC(userParameters);
/**
* @public
* @type {Object}
* @api stable
*/
this.wms = parseWMS(userParameters);
/**
* @public
* @type {Object}
* @api stable
*/
this.wmts = parseWMTS(userParameters);
/**
* @public
* @type {Object}
* @api stable
*/
this.kml = parseKML(userParameters);
/**
* @public
* @type {Object}
* @api stable
*/
this.controls = parseControls(userParameters);
/**
* @public
* @type {Object}
* @api stable
*/
this.getfeatureinfo = parseGetFeatureInfo(userParameters);
/**
* @public
* @type {Object}
* @api stable
*/
this.maxExtent = parseMaxExtent(userParameters);
/**
* @public
* @type {Object}
* @api stable
*/
this.bbox = parseBbox(userParameters);
/**
* @public
* @type {Number}
* @api stable
*/
this.zoom = parseZoom(userParameters);
/**
* @public
* @type {Object}
* @api stable
*/
this.center = parseCenter(userParameters);
/**
* @public
* @type {String|Array<String>|Array<Number>}
* @api stable
*/
this.resolutions = parseResolutions(userParameters);
/**
* @public
* @type {Object}
* @api stable
*/
this.projection = parseProjection(userParameters);
/**
* @public
* @type {Object}
* @api stable
*/
this.label = parseLabel(userParameters);
/**
* @public
* @type {Object}
* @api stable
*/
this.ticket = parseTicket(userParameters);
});
/**
* This function parses a container parameter in a legible
* parameter to Mapea and checks posible errors
*
* @private
* @function
* @param {string|Mx.parameters.Map} userParameters parameters
* especified by the user
* @returns {Object} container of the map
*/
var parseContainer = function(userParameters) {
var container;
if (M.utils.isString(userParameters)) {
container = document.getElementById(userParameters);
}
else if (M.utils.isObject(userParameters)) {
if (!M.utils.isNullOrEmpty(userParameters.id)) {
container = document.getElementById(userParameters.id);
}
else if (!M.utils.isNullOrEmpty(userParameters.container)) {
container = parseContainer(userParameters.container);
}
else {
M.exception('No ha especificado ningún parámetro contenedor');
}
}
else {
M.exception('El tipo del parámetro container no es válido: ' + (typeof userParameters));
}
if (M.utils.isNullOrEmpty(container)) {
M.exception('No existe ningún contenedor con el id especificado');
}
return container;
};
/**
* This function parses a layer parameter in a legible
* parameter to Mapea and checks posible errors
*
* @private
* @function
* @param {string|Mx.parameters.Map} parameter parameters
* especified by the user
* @returns {string|Object|Array<string|Object>} layers specified by the user
*/
var parseLayers = function(parameter) {
var layers;
if (M.utils.isString(parameter)) {
layers = M.utils.getParameterValue('layers', parameter);
}
else if (M.utils.isObject(parameter)) {
layers = parameter.layers;
}
else {
M.exception('El tipo del parámetro container no es válido: ' + (typeof parameter));
}
return layers;
};
/**
* This function parses a wmc parameter in a legible
* parameter to Mapea and checks posible errors
*
* @private
* @function
* @param {string|Mx.parameters.Map} parameter parameters
* especified by the user
* @returns {string|Object|Array<string|Object>} WMC layers
*/
var parseWMC = function(parameter) {
var wmc;
if (M.utils.isString(parameter)) {
wmc = M.utils.getParameterValue('wmc', parameter);
if (M.utils.isNullOrEmpty(wmc)) {
wmc = M.utils.getParameterValue('wmcfile', parameter);
}
if (M.utils.isNullOrEmpty(wmc)) {
wmc = M.utils.getParameterValue('wmcfiles', parameter);
}
}
else if (M.utils.isObject(parameter)) {
wmc = parameter.wmc;
if (M.utils.isNullOrEmpty(wmc)) {
wmc = parameter.wmcfile;
}
if (M.utils.isNullOrEmpty(wmc)) {
wmc = parameter.wmcfiles;
}
}
else {
M.exception('El tipo del parámetro container no es válido: ' + (typeof parameter));
}
return wmc;
};
/**
* This function parses a wms parameter in a legible
* parameter to Mapea and checks posible errors
*
* @private
* @function
* @param {string|Mx.parameters.Map} parameter parameters
* especified by the user
* @returns {string|Object|Array<string|Object>} WMS layers
*/
var parseWMS = function(parameter) {
var wms;
if (M.utils.isString(parameter)) {
wms = M.utils.getParameterValue('wms', parameter);
}
else if (M.utils.isObject(parameter)) {
wms = parameter.wms;
}
else {
M.exception('El tipo del parámetro container no es válido: ' + (typeof parameter));
}
return wms;
};
/**
* This function parses a wmts parameter in a legible
* parameter to Mapea and checks posible errors
*
* @private
* @function
* @param {string|Mx.parameters.Map} parameter parameters
* especified by the user
* @returns {string|Object|Array<string|Object>} WMTS layers
*/
var parseWMTS = function(parameter) {
var wmts;
if (M.utils.isString(parameter)) {
wmts = M.utils.getParameterValue('wmts', parameter);
}
else if (M.utils.isObject(parameter)) {
wmts = parameter.wmts;
}
else {
M.exception('El tipo del parámetro container no es válido: ' + (typeof parameter));
}
return wmts;
};
/**
* This function parses a kml parameter in a legible
* parameter to Mapea and checks posible errors
*
* @private
* @function
* @param {string|Mx.parameters.Map} parameter parameters
* especified by the user
* @returns {string|Object|Array<string|Object>} KML layers
*/
var parseKML = function(parameter) {
var kml;
if (M.utils.isString(parameter)) {
kml = M.utils.getParameterValue('kml', parameter);
}
else if (M.utils.isObject(parameter)) {
kml = parameter.kml;
}
else {
M.exception('El tipo del parámetro container no es válido: ' + (typeof parameter));
}
return kml;
};
/**
* This function parses a controls parameter in a legible
* parameter to Mapea and checks posible errors
*
* @private
* @function
* @param {string|Mx.parameters.Map} parameter parameters
* especified by the user
* @returns {string|Object|Array<string|Object>} WMS layers
*/
var parseControls = function(parameter) {
var controls;
if (M.utils.isString(parameter)) {
controls = M.utils.getParameterValue('controls', parameter);
}
else if (M.utils.isObject(parameter)) {
controls = parameter.controls;
}
else {
M.exception('El tipo del parámetro controls no es válido: ' + (typeof parameter));
}
return controls;
};
/**
* This function parses a controls parameter in a legible
* parameter to Mapea and checks posible errors
*
* @private
* @function
* @param {string|Mx.parameters.Map} parameter parameters
* especified by the user
* @returns {string|Object|Array<string|Object>} WMS layers
*/
var parseGetFeatureInfo = function(parameter) {
var getFeatureInfo;
if (M.utils.isString(parameter)) {
getFeatureInfo = M.utils.getParameterValue('getfeatureinfo', parameter);
}
else if (M.utils.isObject(parameter)) {
getFeatureInfo = parameter.getfeatureinfo;
if (!M.utils.isUndefined(getFeatureInfo) && M.utils.isNullOrEmpty(getFeatureInfo)) {
getFeatureInfo = 'plain';
}
}
else {
M.exception('El tipo del parámetro controls no es válido: ' + (typeof parameter));
}
return getFeatureInfo;
};
/**
* This function parses a maxExtent parameter in a legible
* parameter to Mapea and checks posible errors
*
* @private
* @function
* @param {string|Mx.parameters.Map} parameter parameters
* especified by the user
* @returns {String|Array<String>|Array<Number>|Mx.Extent} maximum extent
* established by the user
*/
var parseMaxExtent = function(parameter) {
var maxExtent;
if (M.utils.isString(parameter)) {
maxExtent = M.utils.getParameterValue('maxExtent', parameter);
if (M.utils.isNullOrEmpty(maxExtent)) {
maxExtent = M.utils.getParameterValue('maxextent', parameter);
}
}
else if (M.utils.isObject(parameter)) {
maxExtent = parameter.maxExtent;
if (M.utils.isNullOrEmpty(maxExtent)) {
maxExtent = parameter.maxextent;
}
}
else {
M.exception('El tipo del parámetro container no es válido: ' + (typeof parameter));
}
return maxExtent;
};
/**
* This function parses a bbox parameter in a legible
* parameter to Mapea and checks posible errors
*
* @private
* @function
* @param {string|Mx.parameters.Map} parameter parameters
* especified by the user
* @returns {String|Array<String>|Array<Number>|Mx.Extent} bbox
* established by the user
*/
var parseBbox = function(parameter) {
var bbox;
if (M.utils.isString(parameter)) {
bbox = M.utils.getParameterValue('bbox', parameter);
}
else if (M.utils.isObject(parameter)) {
bbox = parameter.bbox;
}
else {
M.exception('El tipo del parámetro container no es válido: ' + (typeof parameter));
}
return bbox;
};
var parseZoom = function(parameter) {
var zoom;
if (M.utils.isString(parameter)) {
zoom = M.utils.getParameterValue('zoom', parameter);
}
else if (M.utils.isObject(parameter)) {
zoom = parameter.zoom;
}
else {
M.exception('El tipo del parámetro zoom no es válido: ' + (typeof parameter));
}
return zoom;
};
var parseCenter = function(parameter) {
var center;
if (M.utils.isString(parameter)) {
center = M.utils.getParameterValue('center', parameter);
}
else if (M.utils.isObject(parameter)) {
center = parameter.center;
}
else {
M.exception('El tipo del parámetro center no es válido: ' + (typeof parameter));
}
return center;
};
/**
* This function parses a ticket parameter in a legible
* parameter to Mapea and checks posible errors
*
* @private
* @function
* @param {string|Mx.parameters.Map} parameter parameters
* especified by the user
* @returns {String} ticket
* established by the user
*/
var parseTicket = function(parameter) {
var ticket;
if (M.utils.isString(parameter)) {
ticket = M.utils.getParameterValue('ticket', parameter);
}
else if (M.utils.isObject(parameter)) {
ticket = parameter.ticket;
}
else {
M.exception('El tipo del parámetro ticket no es válido: ' + (typeof parameter));
}
return ticket;
};
/**
* This function parses a resolutions parameter in a legible
* parameter to Mapea and checks posible errors
*
* @private
* @function
* @param {string|Mx.parameters.Map} parameter parameters
* especified by the user
* @returns {String|Array<String>|Array<Number> resolutions
* established by the user
*/
var parseResolutions = function(parameter) {
var resolutions;
if (M.utils.isString(parameter)) {
resolutions = M.utils.getParameterValue('resolutions', parameter);
}
else if (M.utils.isObject(parameter)) {
resolutions = parameter.resolutions;
}
else {
M.exception('El tipo del parámetro container no es válido: ' + (typeof parameter));
}
return resolutions;
};
/**
* This function parses a projection parameter in a legible
* parameter to Mapea and checks posible errors
*
* @private
* @function
* @param {string|Mx.parameters.Map} parameter parameters
* especified by the user
* @returns {String|Array<String>|Array<Number>|Mx.Extent} bbox
* established by the user
*/
var parseProjection = function(parameter) {
var projection;
if (M.utils.isString(parameter)) {
projection = M.utils.getParameterValue('projection', parameter);
}
else if (M.utils.isObject(parameter)) {
projection = parameter.projection;
}
else {
M.exception('El tipo del parámetro container no es válido: ' + (typeof parameter));
}
return projection;
};
/**
* This function parses a projection parameter in a legible
* parameter to Mapea and checks posible errors
*
* @private
* @function
* @param {string|Mx.parameters.Map} parameter parameters
* especified by the user
* @returns {String|Array<String>|Array<Number>|Mx.Extent} bbox
* established by the user
*/
var parseLabel = function(parameter) {
var label;
if (M.utils.isString(parameter)) {
label = M.utils.getParameterValue('label', parameter);
}
else if (M.utils.isObject(parameter)) {
label = parameter.label;
}
else {
M.exception('El tipo del parámetro container no es válido: ' + (typeof parameter));
}
return label;
};
})((window && window.document) || {});