GeoKnow/Jassa-Core

View on GitHub
lib/sponate/acc/AccMap.js

Summary

Maintainability
A
1 hr
Test Coverage
var Class = require('../../ext/Class');

var HashMap = require('../../util/collection/HashMap');

var Acc = require('./Acc');

var AccMap = Class.create(Acc, {
    classLabel: 'jassa.sponate.AccMap',

    initialize: function(keyBindingMapper, subAgg) {
        this.keyBindingMapper = keyBindingMapper;
        this.subAgg = subAgg;

        this.state = new HashMap();
    },

    getState: function() {
        return this.state;
    },

    accumulate: function(binding) {
        var k = this.keyBindingMapper.map(binding, 0);

        if(k != null) {
            var subAcc = this.state.get(k);
            if(!subAcc) {
                subAcc = this.subAgg.createAcc();
                this.state.put(k, subAcc);
            }
            subAcc.accumulate(binding);
        }
    },

    getValue: function() {
        var result = new HashMap();

        var entries = this.state.entries();
        entries.forEach(function(item) {
            var k = item.key;
            var acc = item.val;

            var v = acc.getValue();
            result.put(k, v);
        });

        return result;
    },

    getSubAccs: function() {

        var entries = this.state.entries();
        var result = entries.map(function(entry) {
            return entry.val;
        });

        return result;
    },

});

module.exports = AccMap;