GeoKnow/Jassa-Core

View on GitHub
lib/facete/FacetValueServiceBuilder.js

Summary

Maintainability
A
3 hrs
Test Coverage
var Class = require('../ext/Class');

var ListServiceTransformConcept = require('../service/list_service/ListServiceTransformConcept');
var ListServiceConceptKeyLookup = require('../service/list_service/ListServiceConceptKeyLookup');
var ListServiceTransformItems   = require('../service/list_service/ListServiceTransformItems');

var LookupServiceUtils = require('../sponate/LookupServiceUtils');

var FacetValueService = require('./facet_value_service/FacetValueService');
var FacetValueServiceWrapListService = require('./facet_value_service/FacetValueServiceWrapListService');

var LiteralPreference = require('../sparql/LiteralPreference');
var KeywordSearchUtils = require('../sparql/search/KeywordSearchUtils');
var LabelUtils = require('../sparql/LabelUtils');


var FacetValueServiceBuilder = Class.create({
    initialize: function(facetValueService, sparqlService, facetConfig) {
        this.facetValueService = facetValueService;
        this.sparqlService = sparqlService;
        this.facetConfig = facetConfig;
    },

    labelConfig: function(literalPreference) {
        literalPreference = literalPreference || new LiteralPreference();

        this._labelConfigLookup(literalPreference);
        this._labelConfigFilter(literalPreference);

        return this;
    },

    wrapListService: function(listServiceWrapperFn) {
        this.facetValueService = new FacetValueServiceWrapListService(this.facetValueService, listServiceWrapperFn);

        return this;
    },

    constraintTagging: function() {
        var constraintManager = this.facetConfig.getConstraintManager();

        var listServiceWrapperFn = function(listService, path) {
            var r = new ListServiceTransformItems(listService, function(entries) {

                var cs = constraintManager.getConstraintsByPath(path);
                var values = {};
                cs.forEach(function(c) {
                    if(c.getName() === 'equals') {
                        values[c.getValue()] = true;
                    }
                });

                entries.forEach(function(entry) {
                    var item = entry.val;

                    var isConstrained = values['' + item.node];
                    item.isConstrainedEqual = isConstrained;
                });
                //$scope.facetValues = items;
                return entries;
            });

            return r;
        };

        this.wrapListService(listServiceWrapperFn);
        return this;
    },


    _labelConfigFilter: function(literalPreference) {
        // TODO: Make the search function configurable

        var fnTransformSearch = function(searchString) {
            var r;
            if(searchString) {

                var relation = LabelUtils.createRelationLiteralPreference(literalPreference);
                // TODO Make it configurable to whether scan URIs too (the true argument)
                r = KeywordSearchUtils.createConceptRegex(relation, searchString, true);
                //var result = sparql.KeywordSearchUtils.createConceptBifContains(relation, searchString);
            } else {
                r = null;
            }

            return r;
        };


        var listServiceWrapperFn = function(ls) {
          var r = new ListServiceTransformConcept(ls, fnTransformSearch);
          return r;
        };

        this.wrapListService(listServiceWrapperFn);
        return this;
    },

    _labelConfigLookup: function(literalPreference) {
        //this._labelConfigLabels(bestLiteralConfig);
        //this._labelConfigFilter(bestLiteralConfig);

        var self = this;

        var listServiceWrapperFn = function(ls) {
            var lookupServiceNodeLabels = LookupServiceUtils.createLookupServiceNodeLabels(self.sparqlService, literalPreference);

            var r = new ListServiceConceptKeyLookup(ls, lookupServiceNodeLabels, null, function(entry, lookup) {
                entry.val.labelInfo = lookup;
                return entry;
            });
            return r;
        };

        this.wrapListService(listServiceWrapperFn);
        return this;
    },

    create: function() {
        return this.facetValueService;
    }
});


FacetValueServiceBuilder.core = function(sparqlService, facetConfig, rowLimit) {
    var facetValueService = new FacetValueService(sparqlService, facetConfig, rowLimit);

    var result = new FacetValueServiceBuilder(facetValueService, sparqlService, facetConfig);
    return result;
};

module.exports = FacetValueServiceBuilder;