lib/facete/table/facete-tables.txt
(function() {
var rdf = Jassa.rdf;
var sparql = Jassa.sparql;
var util = Jassa.util;
var ns = Jassa.facete;
/*
getSortConditions: function() {
return this.sortConditions;
},
getAggregators: function() {
return this.aggregators;
},
getLimitAndOffset: function() {
return limitAndOffset;
},
getSearchStrings: function() {
return this.searchStrings;
},
removeColumn: function(columnId) {
util.ArrayUtils.filter(this.sortConditions, function(sc) {
var r = sc.getColumnId() != columnId;
return r;
});
util.ArrayUtils.filter(this.aggregators, function(agg) {
var r = agg.getColumnId() != columnId;
return r;
});
delete this.searchStrings[columnId];
},
*/
/**
* TODO Should this method return a ColumnViews on the internal state?
* Then we could toggle e.g. the sortDirection on a column directly
*
* @returns
*/
/*
getEffectiveColumnData: function() {
var result = [];
for(var i = 0; i < this.columnNames.length; ++i) {
var columnName = this.columnNames[i];
var data = {
index: i,
name: columnName,
sort: {
index: null
condition: null
},
aggregator: null
}
}
return result;
}
});
*/
ns.ExprModFactoryAggCount = Class.create({
createExpr: function(baseExpr) {
var result = new sparql.E_Count(baseExpr);
return result;
}
});
ns.ExprModFactoryAggMin = Class.create({
createExpr: function(baseExpr) {
var result = new sparql.E_Min(baseExpr);
return result;
}
});
ns.ExprModFactoryAggMax = Class.create({
createExpr: function(baseExpr) {
var result = new sparql.E_Min(baseExpr);
return result;
}
});
ns.ExprModRegistry = {
'count': new ns.ExprModFactoryAggCount,
'min': new ns.ExprModFactoryAggMin,
'max': new ns.ExprModFactoryAggMax
};
ns.ElementFactoryFacetPaths = Class.create({
initialize: function(facetConfig, paths) {
this.facetConfig = facetConfig;
this.paths = paths || new util.ArrayList();
},
createElement: function() {
var facetConceptGenerator = facete.FaceteUtils.createFacetConceptGenerator(this.facetConfig);
var concept = facetConceptGenerator.createConceptResources(new facete.Path());
var rootFacetNode = this.facetConfig.getRootFacetNode();
var pathElements = _(this.paths).map(function(path) {
var facetNode = rootFacetNode.forPath(path);
console.log('facetNode: ', facetNode);
var e = facetNode.getElements(true);
// TODO On certain constraints affecting the path, we can skip the Optional
var g = new sparql.ElementGroup(e);
var r;
if(e.length !== 0) {
r = new sparql.ElementOptional(g);
}
else {
r = g;
}
return r;
});
var elements = [];
elements.push.apply(elements, concept.getElements());
elements.push.apply(elements, pathElements);
var tmp = new sparql.ElementGroup(elements);
var result = tmp.flatten();
return result;
}
});
/*
* TODO: How to connect this class with a facetTreeConfig?
* We might need a FacetNodeFactoryFacetTreeConfig
*
*/
ns.FaceteTable = Class.create({
initialize: function() {
//this.pathVarMap = pathVarMap;// Formerly called facetNode
// FIXME: varNode not defined!!!
this.varNode = varNode;
this.paths = new util.ArrayList();
this.tableMod = tableMod;
},
getPaths: function() {
return this.paths;
},
getTableMod: function() {
return this.tableMod;
},
togglePath: function(path) {
// Updates the table model accordingly
var status = util.CollectionUtils.toggleItem(this.paths, path);
var target = this.varNode.forPath(path);
var varName = target.getVarName();
if(status) {
// FIXME: this.tableMode not defined
this.tableMode.addColumn(varName);
}
else {
// FIXME: this.tableMode not defined
this.tableMode.removeColumn(varName);
}
}
});
/*
* Old code below, delete once the new code is working
*/
ns.FaceteTableModOld = Class.create({
initialize: function() {
this.columnIds = [];
//this.columnIdToPath = [];
//this.pathToColumnId = [];
this.columnIdToPath = new util.HashBidiMap();
this.columnIdToData = {};
this.tableMod = new ns.TableMod();
},
getTableMod: function() {
return this.tableMod;
},
createColumnData: function() {
var self = this;
var result = _(this.columnIds).map(function(columnId) {
var r = self.columnIdToData;
if(!r) {
r = {};
self.columnIdToData[columnId] = r;
}
return r;
});
},
getColumns: function() {
var self = this;
var result = _(this.columnIds).map(function(columnId) {
var r = self.columnIdToData;
return r;
});
// var self = this;
//
// var tableMod = this.tableMod;
// var sortConditions = tableMod.getSortConditions();
// var aggregators = tableMod.getAggregators();
//
// var sortMap = sortConditions.createMap();
//
// var result = _(this.columnIds).map(function(columnId) {
// var r = {};
//
// var path = self.columnIdToPath[columnIdToPath];
//
// var sort = sortMap[columnId];
// if(sort) {
// r.sort = sort;
// }
//
// });
//
// return result;
},
putColumn: function(columnId, path) {
this.columnIds.push(path);
this.columnIdToPath.put(columnId, path);
},
removeColumn: function(columnId) {
var tableMod = this.tableMod;
//debugger;
//var pathToColumnId = this.columnIdToPath.getInverse();
this.columnIdToPath.remove(columnId);
tableMod.removeColumn(columnId);
util.ArrayUtils.filter(this.columnIds, function(item) {
return item != columnId;
});
},
getPaths: function() {
var r = this.columnIdToPath.getInverse().keyList(); //.map(function(entry) {
var result = new util.ArrayList();
result.setItems(r);
// return entry.getValue();
// });
return result;
},
togglePath: function(path) {
var pathToColumnId = this.columnIdToPath.getInverse();
var columnId = pathToColumnId.get(path);
if(columnId) {
this.removeColumn(columnId);
} else {
columnId = 'col_' + this.columnIds.length;
this.putColumn(columnId, path);
}
/*
var columnIds = pathToColumnId.get(path);
if(columnIds.length === 0) {
var columnId = 'col_' + this.columnIds.length;
this.addColumn(columnId, path);
//pathToColumnId.put(path, columnId);
//this.columnIds.push(columnId);
} else {
var lastColumnId = columnIds[columnIds.length - 1];
this.removeColumn(lastColumnId);
}
*/
}
});
})();