-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathListServiceUtils.js
More file actions
93 lines (65 loc) · 3.16 KB
/
ListServiceUtils.js
File metadata and controls
93 lines (65 loc) · 3.16 KB
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
88
89
90
91
92
93
var Concept = require('../sparql/Concept');
var ConceptUtils = require('../sparql/ConceptUtils');
var ServiceUtils = require('./ServiceUtils');
var ListServiceSparqlQuery = require('../service/list_service/ListServiceSparqlQuery');
var ListServiceTransformItem = require('../service/list_service/ListServiceTransformItem');
var NodeFactory = require('../rdf/NodeFactory');
var BindingUtils = require('../sparql/BindingUtils');
var ListServiceUtils = {
createListServiceAcc: function(sparqlService, mappedConcept, isLeftJoin) {
isLeftJoin = !!isLeftJoin;
var concept = mappedConcept.getConcept();
var query = ConceptUtils.createQueryList(concept);
var agg = mappedConcept.getAgg();
var rowId = NodeFactory.createVar('rowId');
// TODO Set up a projection using the grouping variable and the variables referenced by the aggregator
query.setQueryResultStar(true);
var ls = new ListServiceSparqlQuery(sparqlService, query, concept.getVar(), isLeftJoin);
var result = new ListServiceTransformItem(ls, function(entry) {
var key = entry.key;
var bindings = entry.val.getBindings();
// Clone the bindings to avoid corrupting caches
bindings = BindingUtils.cloneBindings(bindings);
// Augment them with a rowId attribute
BindingUtils.addRowIds(bindings, rowId);
var acc = agg.createAcc();
bindings.forEach(function(binding) {
acc.accumulate(binding);
});
var r = {key: key, val: acc};
return r;
});
//var result = this.createLookupServiceAgg(sparqlService, query, concept.getVar(), mappedConcept.getAgg());
return result;
},
createListServiceMappedConcept: function(sparqlService, mappedConcept, isLeftJoin) {
var ls = this.createListServiceAcc(sparqlService, mappedConcept, isLeftJoin);
// Add a transformer that actually retrieves the value from the acc structure
var result = new ListServiceTransformItem(ls, function(accEntries) {
var r = accEntries.map(function(accEntry) {
var s = accEntry.val.getValue();
return s;
});
return r;
});
return result;
/*
isLeftJoin = !!isLeftJoin;
var concept = mappedConcept.getConcept();
var query = ConceptUtils.createQueryList(concept);
var agg = mappedConcept.getAgg();
// TODO Set up a projection using the grouping variable and the variables referenced by the aggregator
query.setQueryResultStar(true);
var ls = new ListServiceSparqlQuery(sparqlService, query, concept.getVar(), isLeftJoin);
var result = new ListServiceTransformItem(ls, function(entry) {
var bindings = entry.val.getBindings();
var acc = agg.createAcc();
var r = ServiceUtils.processBindings(bindings, acc);
return r;
});
//var result = this.createLookupServiceAgg(sparqlService, query, concept.getVar(), mappedConcept.getAgg());
return result;
*/
}
};
module.exports = ListServiceUtils;