Yangutils - uses statement can be root
[dlux.git] / modules / common-yangutils-resources / src / main / resources / yangutils / services / list-filtering.services.js
index 89b79c10bae24c9c3588fc20c7853c38048ae669..bd8529bf57060ce2631b80558c841af7449acf57 100644 (file)
@@ -3,251 +3,288 @@ define([], function () {
 
     function ListFilteringService(FilterNodeWrapperService, RequestBuilderService){
         var wasFound,
-            filterResult;
-
-
-        var getNodePathInStructure = function (filterRootNode,node) {
-                var iterator = -1,
-                    findNodeInStructure = function (currentParentStructure){
-                        if(currentParentStructure.children.length && currentParentStructure.type !== 'leaf'){
-                            if(!(currentParentStructure.children.some(function(element){ return element === node; }))){
-                                currentParentStructure.children.forEach(function(child,index){
-                                    checkHasSearchedNode(child,node);
-                                });
-                            }else{
-                                wasFound = true;
-                            }
-                        }
-                    },
-                    checkHasSearchedNode = function (currentParent) {
-                        if(currentParent === node){
-                            wasFound = true;
-                        }else{
-                            if(currentParent.actElemStructure){
-                                findNodeInStructure(currentParent.actElemStructure);
-                            }else{
-                                findNodeInStructure(currentParent);
-                            }
-                        }
-                    },
-                    getIndexOfSearchedNode = function (parentNodeStructure) {
-                        parentNodeStructure.children.forEach(function(elem,index){
-                            wasFound = false;
-                            checkHasSearchedNode(elem,node);
-                            if(wasFound){
-                                node.searchedPath.push(index);
-                            }
-                        });
-                        if(parentNodeStructure.children[node.searchedPath[iterator]] !== node){
-                            getSearchedPath(parentNodeStructure.children[node.searchedPath[iterator]]);
-                        }
-                    },
-                    getSearchedPath = function(parentNode){
-                        iterator++;
-                        if(parentNode.actElemStructure){
-                            getIndexOfSearchedNode(parentNode.actElemStructure);
-                        }else{
-                            getIndexOfSearchedNode(parentNode);
-                        }
-                    };
-
-                if(filterRootNode !== node){
-                    getSearchedPath(filterRootNode);
-                }
-            },
-
-            clearFilterNodes = function(node) {
-                node.referenceNode.filterNodes.forEach(function(filterNode){
-                    filterNode.clear();
-                });
-            },
-
-            loadFilterNodes = function (node) {
-                var fillFuc = function(fillNods, prop, filVal){
-                    fillNods.forEach(function(filterNode){
-                        filterNode.fill(prop, filVal[prop]);
-                    });
-                };
-
-                if(node.referenceNode.filters[node.currentFilter].filteredValues){
-                    node.referenceNode.filters[node.currentFilter].filteredValues.forEach(function(item){
-                        for (var prop in item) {
-                            fillFuc(node.referenceNode.filterNodes, prop, item);
-                        }
-                    });
-                }
-            },
-
-            getFilterResult = function(element, filterValue, node){
-                for (var i in filterValue){
-                    if(!filterValue[i].hasOwnProperty('value') && !filterValue[i].hasOwnProperty('selectboxBitsValue') && !filterValue[i].hasOwnProperty('bitsValue') &&
-                        !filterValue[i].hasOwnProperty('filterRangeFrom') && !filterValue[i].hasOwnProperty('filterRangeTo')){
-                        getFilterResult(element[i],filterValue[i]);
-                    }else{
-                        if(filterValue[i].selectboxBitsValue && filterValue[i].selectboxBitsValue.length){
-                            filterResult = filterValue[i].getResult(element,filterValue[i].selectboxBitsValue,i);
-                        }else{
-                            if((filterValue[i].filterRangeFrom && filterValue[i].filterRangeFrom !== '') || (filterValue[i].filterRangeTo && filterValue[i].filterRangeTo !== '')){
-                                filterResult = filterValue[i].getFilterResult[filterValue[i].filterType](element,filterValue[i].filterRangeFrom,filterValue[i].filterRangeTo,i);
-                            }else if(filterValue[i].bitsValue && filterValue[i].bitsValue !== ''){
-                                filterResult = filterValue[i].getFilterResult[filterValue[i].filterType](element,filterValue[i].bitsValue,i);
-                            }else {
-                                filterResult = filterValue[i].getFilterResult[filterValue[i].filterType](element,filterValue[i].value,i);
-                            }
-                        }
-                    }
-                }
-            },
-
-            getActElementFilter = function (node) {
-                var actData = [];
-
-                node.actElemIndex = 0;
-                if(node.filteredListData && node.filteredListData.length){
-                    actData = node.filteredListData[node.actElemIndex];
-                }else{
-                    actData = node.listData[node.actElemIndex];
-                }
-
-                node.actElemStructure.clear();
-                for (var prop in actData) {
-                    node.actElemStructure.fillListElement(prop, actData[prop]);
-                }
+            filterResult,
+            service = {
+                applyFilter: applyFilter,
+                clearFilterData: clearFilterData,
+                createNewFilter: createNewFilter,
+                getFilterData: getFilterData,
+                removeEmptyFilters: removeEmptyFilters,
+                showListFilterWin: showListFilterWin,
+                switchFilter: switchFilter
             };
 
-        var listFiltering = {};
+        return service;
 
-        listFiltering.removeEmptyFilters = function (node) {
-            if(node.referenceNode && node.referenceNode.filters){
+        // TODO: add service's description
+        function removeEmptyFilters(node) {
+            if (node.referenceNode && node.referenceNode.filters){
                 var wasDeleted = false;
-                node.referenceNode.filters = node.referenceNode.filters.filter(function(filter){
-                    if(filter.filteredValues && filter.filteredValues.length){
+                node.referenceNode.filters = node.referenceNode.filters.filter(function (filter){
+                    if (filter.filteredValues && filter.filteredValues.length){
                         return true;
-                    }else{
+                    } else {
                         wasDeleted = true;
                         return false;
                     }
                 });
 
-                if(wasDeleted){
-                    listFiltering.switchFilter(node,0,true);
+                if (wasDeleted){
+                    switchFilter(node, 0, true);
                 }
             }
-        };
+        }
 
-        listFiltering.showListFilterWin = function (filterRootNode,node) {
-            if(!node.searchedPath.length){
-                getNodePathInStructure(filterRootNode,node);
+        // TODO: add service's description
+        function showListFilterWin(filterRootNode, node) {
+            if (!node.searchedPath.length){
+                getNodePathInStructure(filterRootNode, node);
             }
 
-            if(!node.referenceNode){
+            if (!node.referenceNode){
                 node.referenceNode = filterRootNode;
-                node.searchedPath.forEach(function(elem){
+                node.searchedPath.forEach(function (elem){
                     node.referenceNode = node.referenceNode.children[elem];
                 });
             }
 
-            if(!node.referenceNode.filterNodes.length){
+            if (!node.referenceNode.filterNodes.length){
                 FilterNodeWrapperService.init(node);
                 node.referenceNode.filterNodes = node.getNewFilterElement();
             }
 
-            if(!(node.referenceNode.filters && node.referenceNode.filters.length)){
-                node.referenceNode.filters.push({name : 'Filter 1 name', active : 1});
-            }else{
-                listFiltering.getFilterData(node);
-                listFiltering.removeEmptyFilters(node);
+            if (!(node.referenceNode.filters && node.referenceNode.filters.length)){
+                node.referenceNode.filters.push({ name: 'Filter 1 name', active: 1 });
+            } else {
+                getFilterData(node);
+                removeEmptyFilters(node);
             }
-        };
-
-        listFiltering.createNewFilter = function (node) {
-            node.referenceNode.filters.push({name : 'Filter ' + (node.referenceNode.filters.length+1) + ' name', active : 1});
+        }
 
-            listFiltering.switchFilter(node,node.referenceNode.filters.length-1);
-        };
-
-        listFiltering.getFilterData = function (node) {
-            node.referenceNode.filters[node.currentFilter].filteredValues = node.referenceNode.filterNodes.map(function(element){
-                var requestData = {};
-                element.buildRequest(RequestBuilderService, requestData);
-                return requestData;
-            }).filter(function(item){
-                return $.isEmptyObject(item) === false;
+        // TODO: add service's description
+        function createNewFilter(node) {
+            node.referenceNode.filters.push({
+                name: 'Filter ' + (node.referenceNode.filters.length + 1) + ' name',
+                active: 1
             });
-        };
 
-        listFiltering.switchFilter = function (node,showedFilter,fromRemoveEmptyFilters) {
-            if(node.referenceNode.filters.length){
-                if(!fromRemoveEmptyFilters){
-                    listFiltering.getFilterData(node);
+            switchFilter(node, node.referenceNode.filters.length - 1);
+        }
+
+        // TODO: add service's description
+        function getFilterData(node) {
+            node.referenceNode.filters[node.currentFilter].filteredValues =
+                node.referenceNode.filterNodes.map(function (element){
+                    var requestData = {};
+                    element.buildRequest(RequestBuilderService, requestData);
+                    return requestData;
+                }).filter(function (item){
+                    return $.isEmptyObject(item) === false;
+                });
+        }
+
+        // TODO: add service's description
+        function switchFilter(node, showedFilter, fromRemoveEmptyFilters) {
+            if (node.referenceNode.filters.length){
+                if (!fromRemoveEmptyFilters){
+                    getFilterData(node);
                 }
                 clearFilterNodes(node);
                 node.currentFilter = showedFilter;
                 loadFilterNodes(node);
-            }else{
+            } else {
                 node.currentFilter = 0;
             }
-        };
+        }
 
-        listFiltering.applyFilter = function (node) {
-            listFiltering.getFilterData(node);
-            listFiltering.removeEmptyFilters(node);
+        // TODO: add service's description
+        function applyFilter(node) {
+            getFilterData(node);
+            removeEmptyFilters(node);
 
-            node.filteredListData = node.listData.slice().filter(function(element){
-                return node.referenceNode.filters.filter(function(fil){
+            node.filteredListData = node.listData.slice().filter(function (element){
+                return node.referenceNode.filters.filter(function (fil){
                     return fil.active === 1;
-                }).some(function(filter){
-                    return filter.filteredValues.every(function(filterValue){
+                }).some(function (filter){
+                    return filter.filteredValues.every(function (filterValue){
                         filterResult = null;
-                        getFilterResult(element,filterValue,node);
+                        getFilterResult(element, filterValue, node);
                         return filterResult;
                     });
                 });
             });
 
             getActElementFilter(node);
-            // console.info('applyFilter node',node,'node.referenceNode.filterNodes',node.referenceNode.filterNodes,'node.referenceNode.filters',node.referenceNode.filters);
-        };
+            // node.referenceNode.filterNodes, 'node.referenceNode.filters', node.referenceNode.filters);
+        }
 
-        listFiltering.clearFilterData = function (node, changeAct, filterForClear, removeFilters) {
-            if(filterForClear){
+        // TODO: add service's description
+        function clearFilterData(node, changeAct, filterForClear, removeFilters) {
+            if (filterForClear){
                 filterForClear--;
-                if(node.referenceNode.filters.length === 1){
+                if (node.referenceNode.filters.length === 1){
                     node.referenceNode.filters = [];
-                    node.referenceNode.filters.push({name : 'Filter 1 name', active : 1});
+                    node.referenceNode.filters.push({ name: 'Filter 1 name', active: 1 });
                     clearFilterNodes(node);
-                }else{
-                    node.referenceNode.filters.splice(filterForClear,1);
+                } else {
+                    node.referenceNode.filters.splice(filterForClear, 1);
                     node.currentFilter = 0;
                     clearFilterNodes(node);
                     loadFilterNodes(node);
                 }
-            }else{
-                if(removeFilters){
+            } else {
+                if (removeFilters){
                     node.referenceNode.filters = [];
                     clearFilterNodes(node);
                     node.currentFilter = 0;
-                }else{
-                    node.referenceNode.filters.forEach(function(filter){
+                } else {
+                    node.referenceNode.filters.forEach(function (filter){
                         filter.active = 2;
                     });
-                    listFiltering.getFilterData(node);
-                    listFiltering.removeEmptyFilters(node);
+                    getFilterData(node);
+                    removeEmptyFilters(node);
                 }
                 node.filteredListData = [];
             }
 
-            if(changeAct){
+            if (changeAct){
                 getActElementFilter(node);
             }
 
-        };
+        }
+
+        // TODO: add function's description
+        function getNodePathInStructure(filterRootNode, node) {
+            var iterator = -1;
+
+            if (filterRootNode !== node){
+                getSearchedPath(filterRootNode);
+            }
+
+            // TODO: add function's description
+            function getSearchedPath(parentNode){
+                iterator++;
+                if (parentNode.actElemStructure){
+                    getIndexOfSearchedNode(parentNode.actElemStructure);
+                } else {
+                    getIndexOfSearchedNode(parentNode);
+                }
+            }
+
+            // TODO: add function's description
+            function findNodeInStructure(currentParentStructure){
+                if (currentParentStructure.children.length && currentParentStructure.type !== 'leaf'){
+                    if (!(currentParentStructure.children.some(function (element){ return element === node; }))){
+                        currentParentStructure.children.forEach(function (child){
+                            checkHasSearchedNode(child, node);
+                        });
+                    } else {
+                        wasFound = true;
+                    }
+                }
+            }
+
+            // TODO: add function's description
+            function getIndexOfSearchedNode(parentNodeStructure) {
+                parentNodeStructure.children.forEach(function (elem, index){
+                    wasFound = false;
+                    checkHasSearchedNode(elem, node);
+                    if (wasFound){
+                        node.searchedPath.push(index);
+                    }
+                });
+                if (parentNodeStructure.children[node.searchedPath[iterator]] !== node){
+                    getSearchedPath(parentNodeStructure.children[node.searchedPath[iterator]]);
+                }
+            }
+
+            // TODO: add function's description
+            function checkHasSearchedNode(currentParent) {
+                if (currentParent === node){
+                    wasFound = true;
+                } else {
+                    if (currentParent.actElemStructure){
+                        findNodeInStructure(currentParent.actElemStructure);
+                    } else {
+                        findNodeInStructure(currentParent);
+                    }
+                }
+            }
+        }
+
+        // TODO: add function's description
+        function clearFilterNodes(node) {
+            node.referenceNode.filterNodes.forEach(function (filterNode){
+                filterNode.clear();
+            });
+        }
+
+        // TODO: add function's description
+        function loadFilterNodes(node) {
+            var fillFuc = function (fillNods, prop, filVal){
+                fillNods.forEach(function (filterNode){
+                    filterNode.fill(prop, filVal[prop]);
+                });
+            };
+
+            if (node.referenceNode.filters[node.currentFilter].filteredValues){
+                node.referenceNode.filters[node.currentFilter].filteredValues.forEach(function (item){
+                    Object.keys(item).forEach(function (prop) {
+                        fillFuc(node.referenceNode.filterNodes, prop, item);
+                    });
+                });
+            }
+        }
+
+        // TODO: add function's description
+        function getFilterResult(element, filterValue){
+            for (var i in filterValue){
+                if(!filterValue[i].filterType) {
+                    continue;
+                }
+
+                if (!filterValue[i].hasOwnProperty('value') && !filterValue[i].hasOwnProperty('selectboxBitsValue') &&
+                    !filterValue[i].hasOwnProperty('bitsValue') && !filterValue[i].hasOwnProperty('filterRangeFrom') &&
+                    !filterValue[i].hasOwnProperty('filterRangeTo') && element[i]){
+                    getFilterResult(element[i], filterValue[i]);
+                } else {
+                    if (filterValue[i].selectboxBitsValue && filterValue[i].selectboxBitsValue.length){
+                        filterResult = filterValue[i].getResult(element, filterValue[i].selectboxBitsValue, i);
+                    } else {
+                        if ((filterValue[i].filterRangeFrom && filterValue[i].filterRangeFrom !== '') ||
+                            (filterValue[i].filterRangeTo && filterValue[i].filterRangeTo !== '')){
+                            filterResult = filterValue[i].getFilterResult[filterValue[i].filterType](element, filterValue[i].filterRangeFrom, filterValue[i].filterRangeTo, i);
+                        } else if (filterValue[i].bitsValue && filterValue[i].bitsValue !== ''){
+                            filterResult = filterValue[i].getFilterResult[filterValue[i].filterType](element, filterValue[i].bitsValue, i);
+                        } else {
+                            filterResult = filterValue[i].getFilterResult[filterValue[i].filterType](element, filterValue[i].value, i);
+                        }
+                    }
+                }
+            }
+        }
+
+        // TODO: add function's description
+        function getActElementFilter(node) {
+            var actData = [];
+
+            node.actElemIndex = 0;
+            if (node.filteredListData && node.filteredListData.length){
+                actData = node.filteredListData[node.actElemIndex];
+            } else {
+                actData = node.listData[node.actElemIndex];
+            }
+
+            node.actElemStructure.clear();
+            Object.keys(actData).forEach(function (prop) {
+                node.actElemStructure.fillListElement(prop, actData[prop]);
+            });
+        }
 
-        return listFiltering;
     }
 
-    ListFilteringService.$inject=['FilterNodeWrapperService', 'RequestBuilderService'];
+    ListFilteringService.$inject = ['FilterNodeWrapperService', 'RequestBuilderService'];
 
     return ListFilteringService;
 
-});
\ No newline at end of file
+});