4a3f3db58fe73d1ab67fa685705fa80b721ed3ef
[groupbasedpolicy.git] / groupbasedpolicy-ui / module / src / main / resources / gbp / endpoints / sxp-mapping-list.service.js
1 define(['app/gbp/endpoints/sxp-mapping.service'], function () {
2     'use strict';
3
4     angular.module('app.gbp').service('SxpMappingListService', SxpMappingListService);
5
6     SxpMappingListService.$inject = ['$filter', 'Restangular', 'SxpMappingService'];
7
8     function SxpMappingListService($filter, Restangular, SxpMappingService) {
9         /* methods */
10         this.createList = createList;
11
12         function EndpointsSgtList() {
13             /* properties */
14             this.data = [];
15
16             /* methods */
17             this.setData = setData;
18             this.get = get;
19             this.clearData = clearData;
20             this.findSgtsForEndpoint = findSgtsForEndpoint;
21
22             /* Implementation */
23             /**
24              * fills EndpointsSgtList object with data
25              * @param data
26              */
27             function setData(data) {
28                 var self = this;
29
30                 data && data.forEach(function (dataElement) {
31                     self.data.push(SxpMappingService.createObject(dataElement));
32                 });
33             }
34
35             function clearData() {
36                 var self = this;
37                 self.data = [];
38             }
39
40             function get() {
41                 /* jshint validthis:true */
42                 var self = this;
43                 var restObj = Restangular.one('restconf').one('config').one('sxp-mapper-model:sxp-mapper');
44
45                 return restObj.get().then(function (data) {
46                     self.setData(data['sxp-mapper']['endpoint-policy-template-by-sgt']);
47                 });
48             }
49
50             function findSgtsForEndpoint(EPobject) {
51                 var self = this,
52                     result = self.data.map(function (ele) {
53                     // properties correction
54                     var condition = ele.data.conditions === undefined ? [] : ele.data.conditions,
55                         epg = ele.data['endpoint-groups'] === undefined ? [] : ele.data['endpoint-groups'];
56
57                     return condition.length==EPobject.data.condition.length && condition.every(function(v,i) { return ($.inArray(v,EPobject.data.condition) != -1)}) &&
58                            epg.length==EPobject.data['endpoint-group'].length && epg.every(function(v,i) { return ($.inArray(v,EPobject.data['endpoint-group']) != -1)}) &&
59                            angular.equals(ele.data.tenant, EPobject.data.tenant) ? ele.data.sgt : false;
60                 }).filter(Boolean);
61                 return result.toString();
62             }
63         }
64
65         function createList() {
66             var obj = new EndpointsSgtList();
67
68             return obj;
69         }
70     }
71
72     return SxpMappingListService;
73 });