GeoKnow/Jassa-Core

View on GitHub
lib/facete/table/facete-tables.txt

Summary

Maintainability
Test Coverage
(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);
            }
            */
        }
    });


})();