lib/facete/table/TableConfigFacet.js
var Class = require('../../ext/Class');
var CollectionUtils = require('../../util/CollectionUtils');
var TableMod = require('./TableMod');
var ElementUtils = require('../ElementUtils');
var Path = require('../Path');
var Concept = require('../../sparql/Concept');
var ArrayUtils = require('../../util/ArrayUtils');
var ArrayList = require('../../util/collection/ArrayList');
// TODO: Maybe this class should be TableModFacet and inherit from TableMod?
var TableConfigFacet = Class.create({
initialize: function(facetConfig, tableMod, paths) {
this.facetConfig = facetConfig;
this.tableMod = tableMod || new TableMod();
this.paths = paths || []; //new util.ArrayList();
},
getFacetConfig: function() {
return this.facetConfig;
},
getTableMod: function() {
return this.tableMod;
},
getPaths: function() {
return this.paths;
},
/**
* Return the path for a given column id
*/
getPath: function(colId) {
var index = this.tableMod.getColumnIds().indexOf(colId);
var result = this.paths[index];
return result;
},
getColumnId: function(path) {
var index = ArrayUtils.firstIndexOf(this.paths, path);
var result = this.tableMod.getColumnIds()[index];
return result;
},
removeColumn: function(colId) {
var path = this.getPath(colId);
ArrayUtils.removeItem(this.paths, path);
},
getColIdForPath: function(path) {
var rootFacetNode = this.facetConfig.getRootFacetNode();
var facetNode = rootFacetNode.forPath(path);
var result = facetNode.getVar().getName();
return result;
},
togglePath: function(path) {
// Updates the table model accordingly
var tmp = new ArrayList(this.paths);
var status = CollectionUtils.toggleItem(tmp, path);
var varName = this.getColIdForPath(path);
if(status) {
this.tableMod.addColumn(varName);
}
else {
this.tableMod.removeColumn(varName);
}
},
createDataConcept: function() {
var emptyPath = new Path();
var paths = this.paths.slice(0);
if(!ArrayUtils.contains(this.paths, emptyPath)) {
paths.push(emptyPath);
}
var dataElement = ElementUtils.createElementTable(this.facetConfig, paths);//new ElementFactoryFacetPaths(this.facetConfig, paths);
//var dataElement = dataElementFactory.createElement();
var rootFacetNode = this.facetConfig.getRootFacetNode();
var dataVar = rootFacetNode.getVar();
var result = new Concept(dataElement, dataVar);
return result;
}
/*
createQueryFactory: function() {
// create an ElementFactory based on the paths and the facetConfig
var elementFactory = new ns.ElementFactoryFacetPaths(this.facetConfig, this.paths);
var queryFactory = new ns.QueryFactoryTableMod(elementFactory, tableMod);
return queryFactory;
}
*/
});
module.exports = TableConfigFacet;