All files / src/Services/Geocode/Response GeocodeResponseFactory.js

4.54% Statements 1/22
0% Branches 0/10
0% Functions 0/1
4.54% Lines 1/22

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87                          1x                                                                                                                                                  
/**
 * Factory pour générer une reponse JSON à partir d'un XML
 * (Factory)
 *
 * @module GeocodeResponseFactory
 * @alias Gp.Services.Geocode.Response.GeocodeResponseFactory
 * @private
 */
// import Logger from "../../../Utils/LoggerByDefault";
import ErrorService from "../../../Exceptions/ErrorService";
import MRes from "../../../Utils/MessagesResources";
import GeocodeResponseParser from "../Formats/GeocodeResponseParser";
 
var GeocodeReponseFactory = {
 
    /**
     * interface unique
     *
     * @method build
     * @static
     * @param {Object} options - options definies dans le composant Geocode
     *
     * @example
     *   var options = {
     *      response :
     *      rawResponse :
     *      scope :
     *      onSuccess :
     *      onError :
     *   };
     *
     */
    build : function (options) {
        // data de type GeocodeResponse
        var data = null;
 
        if (options.response) {
            if (options.rawResponse) {
                data = options.response;
            } else {
                try {
                    const parser = new GeocodeResponseParser();
                    data = parser.parse(options.response);
 
                    if (!data) {
                        throw new Error("L'analyse de la réponse du service !?");
                    }
                } catch (e) {
                    var message = e.message;
                    if (typeof options.response === "string") {
                        message += "('" + options.response + "')";
                    } else {
                        message += "('" + options.response.documentElement.innerHTML + "')";
                    }
                    options.onError.call(options.scope, new ErrorService({
                        message : MRes.getMessage("SERVICE_RESPONSE_ANALYSE", message),
                        type : ErrorService.TYPE_UNKERR,
                        status : -1
                    }));
                    return;
                }
 
                // Si la réponse contenait une exception renvoyée par le service
                if (data.exceptionReport) {
                    options.onError.call(options.scope, new ErrorService({
                        message : MRes.getMessage("SERVICE_RESPONSE_EXCEPTION", data.exceptionReport),
                        type : ErrorService.TYPE_SRVERR,
                        status : 200 // FIXME : 200 ?
                    }));
                    return;
                }
            }
        } else {
            options.onError.call(options.scope, new ErrorService({
                message : MRes.getMessage("SERVICE_RESPONSE_EMPTY"),
                type : ErrorService.TYPE_SRVERR,
                status : -1 // FIXME : status response
            }));
            return;
        }
 
        options.onSuccess.call(options.scope, data);
    }
};
 
export default GeocodeReponseFactory;