53a38f556cd99a2ee0c32fdc42f8aed27074b92a
[groupbasedpolicy.git] / groupbasedpolicy-ui / module / src / main / resources / gbp / endpoints / endpoint.service.js
1 define([], function () {
2     'use strict';
3
4     angular.module('app.gbp').service('EndpointService', EndpointService);
5
6     EndpointService.$inject = ['Restangular'];
7
8     function EndpointService(Restangular) {
9         /* methods */
10         this.createObject = createObject;
11
12         /**
13          * Endpoint constructor
14          * @constructor
15          */
16         function Endpoint() {
17             /* properties */
18             this.data = {};
19             this.data['endpoint-group'] = [];
20             this.data.condition = [];
21
22             /* methods */
23             this.setData = setData;
24             this.post = post;
25             this.deleteEndpoint = deleteEndpoint;
26             this.getEndpointContextTypeAcronym = getEndpointContextTypeAcronym;
27
28             /* Implementation */
29
30             function getEndpointContextTypeAcronym() {
31                 switch(this.data['context-type']) {
32                     case 'l2-l3-forwarding:l2-bridge-domain':
33                         return 'L2B';
34                     case 'l2-l3-forwarding:l2-flood-domain':
35                         return 'L2F';
36                     default:
37                         return 'L3';
38                 }
39             }
40             /**
41              * fills Endpoint object with data
42              * @param data
43              */
44
45             function setData(data) {
46                 this.data['context-type'] = data['context-type'];
47                 this.data['context-id'] = data['context-id'];
48                 this.data['address-type'] = data['address-type'];
49                 this.data.address = data.address;
50                 this.data['network-containment'] = data['network-containment'];
51                 this.data.tenant = data.tenant;
52                 this.data['endpoint-group'] = data['endpoint-group'] ? data['endpoint-group'] : [];
53                 this.data.condition = data.condition ? data.condition : [];
54                 this.data.timestamp = data.timestamp ? data.timestamp : Date();
55                 if (this.data['absolute-location']){
56                     this.data['absolute-location']['internal-node'] = data['absolute-location']['internal-node'];
57                     this.data['absolute-location']['internal-node-connector'] = data['absolute-location']['internal-node-connector'];
58                 }
59             }
60             /**
61              * gets one Endpoint object from Restconf
62              * @param id
63              * @returns {*}
64              */
65
66             function post(successCbk) {
67
68                 var self = this,
69                     restObj = Restangular.one('restconf').one('operations').one('base-endpoint:register-endpoint'),
70                     reqData = {
71                         'input': {
72                             'address-endpoint-reg': [
73                                 self.data,
74                             ],
75                         },
76                     };
77                 restObj.customPOST(reqData).then(function (data) {
78                     successCbk(data);
79                 }, function () {
80
81                 });
82             }
83
84             function deleteEndpoint(successCallback) {
85                 var self = this,
86                     tmpEndpointObject = {
87                         'context-type': self.data['context-type'],
88                         'context-id': self.data['context-id'],
89                         'address': self.data.address,
90                         'address-type': self.data['address-type'],
91                     };
92                 var restObj = Restangular
93                         .one('restconf')
94                         .one('operations')
95                         .one('base-endpoint:unregister-endpoint'),
96                     reqData = {
97                         'input': {
98                             'address-endpoint-unreg': [
99                                 tmpEndpointObject,
100                             ],
101                         },
102                     };
103                 return restObj.customPOST(reqData).then(function () {
104                     (successCallback() || angular.noop)();
105                 }, function () {
106
107                 });
108             }
109         }
110
111         /**
112          * creates Endpoint object and fills it with data if available
113          * @param data
114          * @returns {Endpoint}
115          */
116         function createObject(data) {
117             var obj = new Endpoint();
118
119             if (data) {
120                 obj.setData(data);
121             }
122
123             return obj;
124         }
125     }
126
127     return EndpointService;
128 });