GeoKnow/Jassa-Core

View on GitHub
lib/service/query_execution/QueryExecutionHttp.js

Summary

Maintainability
A
45 mins
Test Coverage
/* jshint maxparams: 6 */
var Class = require('../../ext/Class');
var QueryExecution = require('./QueryExecution');
var ResultSetUtils = require('../ResultSetUtils');
var AjaxUtils = require('../AjaxUtils');

var shared = require('../../util/shared');
var ajax = shared.ajax;
var Promise = shared.Promise;

var QueryExecutionHttp = Class.create(QueryExecution, {
    initialize: function(queryString, serviceUri, defaultGraphUris, ajaxOptions, httpArgs, httpClient) {
        this.queryString = queryString;
        this.serviceUri = serviceUri;
        this.defaultGraphUris = defaultGraphUris;

        this.ajaxOptions = ajaxOptions || {};
        this.httpArgs = httpArgs;
        this.httpClient = httpClient || ajax;
    },

    /**
     *
     * @returns {Promise<sparql.ResultSet>}
     */
    execSelect: function() {
        var result = this.execAny().then(function(raw) {
            var r;
            try {
                r = ResultSetUtils.jsonToResultSet(raw);
            } catch(e) {
                console.log('Error processing result set. Response was: ', raw);
                throw e;
            }
            return r;
        });

        return result;
    },

    execAsk: function() {
        var result = this.execAny().then(function(json) {
            return json.boolean;
        });

        return result;
    },

    // Returns an iterator of triples
    execConstructTriples: function() {
        throw new Error('Not implemented yet');
        // return this.execAny(queryString);
    },

    execDescribeTriples: function() {
        throw new Error('Not implemented yet');
        // return this.execAny(queryString);
    },

    setTimeout: function(timeoutInMillis) {
        this.ajaxOptions.timeout = timeoutInMillis;
    },

    getTimeout: function() {
        return this.ajaxOptions.timeout;
    },

    execAny: function() {
        var ajaxSpec = AjaxUtils.createSparqlRequestAjaxSpec(this.serviceUri, this.defaultGraphUris, this.queryString, this.httpArgs, this.ajaxOptions);
        var result = this.httpClient(ajaxSpec);
        return result;
    },
});

module.exports = QueryExecutionHttp;