geoportal-access-lib
Version:
French Geoportal resources access library
131 lines (118 loc) • 4.67 kB
JavaScript
/**
* Creation d'une requête en REST ou WPS
* (Factory)
*
* @module AltiRequestFactory
* @alias Gp.Services.Alti.Request.AltiRequestFactory
* @private
*/
import Logger from "../../../Utils/LoggerByDefault";
import ErrorService from "../../../Exceptions/ErrorService";
import AltiRequestREST from "./AltiRequestREST";
import AltiRequestWPS from "./AltiRequestWPS";
var AltiRequestFactory = {
/**
* interface unique
*
* @method build
* @static
* @param {Object} options - options definies dans le composant Alti
*
* @example
* var options = {
* httpMethod : 'GET', // GET|POST
* onSuccess : function (response) {},
* onError : function (error) {},
* scope : this,
* positions : [{lon:, lat:}, {lon:, lat:}],
* outputFormat : 'json' // json|xml
* sampling : 3,
* api : 'REST', // REST|WPS
* zonly : false // false|true
* };
*
*/
build : function (options) {
// logger
var logger = Logger.getLogger("AltiRequestFactory");
logger.trace(["AltiRequestFactory::build()"]);
var request = null;
// on factorise les options par groupe;
// - global,
// - param, les params pour les data inputs
// - wps, les param du service
// - callback
var settings = {
// ajout des valeurs par defaut spécifiques au service
type : options.sampling ? "Profil" : "Elevation",
method : options.httpMethod,
param : {
positions : null,
delimiter : null, // FIXME par defaut, on ne le met pas en place car ça fait planter la requête !?
indent : null, // par defaut
crs : null, // par defaut
format : null, // (only to POST)
sampling : null, // (only use by Profil)
zonly : null, // (only use by Elevation)
measures : null // (only use by Elevation)
}
};
// surcharge des valeurs obligatoires
settings.param.positions = options.positions;
settings.param.format = options.outputFormat;
settings.param.sampling = options.sampling;
settings.param.zonly = options.zonly;
settings.param.measures = options.measures;
settings.param.resource = options.resource;
// gestion des callback
var bOnError = !!(options.onError !== null && typeof options.onError === "function"); // cast variable to boolean
var bOnSuccess = !!(options.onSuccess !== null && typeof options.onSuccess === "function");
var message = null;
switch (options.api) {
case "REST":
// FIXME les exceptions ne sont pas 'catchées' sur le constructeur !
var myReq = new AltiRequestREST(settings);
if (!myReq.processRequestString()) {
message = "Error in process request (rest) !";
if (bOnError) {
options.onError.call(options.scope, new ErrorService(message));
return;
}
throw new Error(message);
}
request = myReq.requestString;
break;
case "WPS":
// ajout des valeurs par defaut spécifiques au service WPS
settings.wps = {
service : null, // par defaut
version : null, // par defaut
identifier : null, // par defaut
rawdataoutput : null, // par defaut
request : null // par defaut
};
request = AltiRequestWPS.build(settings);
if (!request) {
message = "Error in process request (wps) !";
if (bOnError) {
options.onError.call(options.scope, new ErrorService(message));
return;
}
throw new Error(message);
}
break;
default:
message = "Type of API is not supported by service (REST or WPS) !";
if (bOnError) {
options.onError.call(options.scope, new ErrorService(message));
return;
}
throw new Error(message);
}
if (bOnSuccess) {
options.onSuccess.call(options.scope, request);
}
return request;
}
};
export default AltiRequestFactory;