Add capability for multi-role support
[policy/engine.git] / POLICY-SDK-APP / src / main / webapp / app / policyApp / policy-models / Editor / js / entities / item.js
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP Policy Engine
4  * ================================================================================
5  * Copyright (C) 2017, 2019 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20 angular.module('abs').factory('item', ['$http', '$q', 'policyManagerConfig', function($http, $q, policyManagerConfig) {
21
22         var Item = function(model, path) {
23             var rawModel = {
24                 name: model && model.name || '',
25                 subScopename: model && model.subScopename || '',
26                 path: path || [],
27                 type: model && model.type || 'file',
28                 size: model && parseInt(model.size || 0),
29                 date: model && model.date,
30                 version: model && model.version || '',
31                 createdBy: model && model.createdBy || '',
32                 modifiedBy: model && model.modifiedBy || '',
33                 roleType: model && model.roleType || '',
34                 content: model && model.content || '',
35                 recursive: false,
36                 sizeKb: function() {
37                     return Math.round(this.size / 1024, 1);
38                 },
39                 fullPath: function() {
40                     if(this.version == ""){
41                         return ('/' + this.path.join('/') + '/' + this.name).replace(/\/\//, '/');
42                     }else{
43                         return ('/' + this.path.join('/') + '/' + this.name + '.' + this.version + '.xml').replace(/\/\//, '/');
44                     }
45                 }
46             };
47
48             this.error = '';
49             this.inprocess = false;
50
51             this.model = angular.copy(rawModel);
52             this.tempModel = angular.copy(rawModel);
53
54             function parseMySQLDate(mysqlDate) {
55                 var d = (mysqlDate || '').toString().split(/[- :]/);
56                 return new Date(d[0], d[1] - 1, d[2], d[3], d[4], d[5]);
57             }
58         };
59
60         Item.prototype.update = function() {
61             angular.extend(this.model, angular.copy(this.tempModel));
62         };
63
64         Item.prototype.revert = function() {
65             angular.extend(this.tempModel, angular.copy(this.model));
66             this.error = '';
67         };
68
69         Item.prototype.deferredHandler = function(data, deferred, defaultMsg) {
70             if (!data || typeof data !== 'object') {
71                 this.error = 'Bridge response error, please check the docs';
72             }
73             if (data.result && data.result.error) {
74                 this.error = data.result.error;
75             }
76             if (!this.error && data.error) {
77                 this.error = data.error.message;
78             }
79             if (!this.error && defaultMsg) {
80                 this.error = defaultMsg;
81             }
82             if (this.error) {
83                 return deferred.reject(data);
84             }
85             this.update();
86             return deferred.resolve(data);
87         };
88
89         Item.prototype.createFolder = function() {
90             var self = this;
91             var deferred = $q.defer();
92             var data = {params: {
93                 mode: 'ADDFOLDER',
94                 path: self.tempModel.path.join('/'),
95                 name: self.tempModel.name
96             }};
97
98             self.inprocess = true;
99             self.error = '';
100             $http.post(policyManagerConfig.createFolderUrl, data).success(function(data) {
101                 self.deferredHandler(data, deferred);
102             }).error(function(data) {
103                 self.deferredHandler(data, deferred, 'Error Occured While Creating Scope');
104             })['finally'](function() {
105                 self.inprocess = false;
106             });
107         
108             return deferred.promise;
109         };
110
111         Item.prototype.rename = function() {
112             var self = this;
113             var deferred = $q.defer();
114             var data = {params: {
115                 mode: 'RENAME',
116                 path: self.model.fullPath(),
117                 newPath: self.tempModel.fullPath()
118             }};
119             self.inprocess = true;
120             self.error = '';
121             $http.post(policyManagerConfig.renameUrl, data).success(function(data) {
122                 self.deferredHandler(data, deferred);
123             }).error(function(data) {
124                 self.deferredHandler(data, deferred, 'Error Occured While Renaming');
125             })['finally'](function() {
126                 self.inprocess = false;
127             });
128             return deferred.promise;
129         };
130
131         
132         Item.prototype.move = function() {
133             var self = this;
134             var deferred = $q.defer();
135             var data = {params: {
136                 mode: 'RENAME',
137                 path: self.model.fullPath(),
138                 newPath: self.tempModel.fullPath()
139             }};
140             self.inprocess = true;
141             self.error = '';
142             $http.post(policyManagerConfig.renameUrl, data).success(function(data) {
143                 if(data.result.error != undefined){
144                     var value = data.result.error;
145                     value = value.replace("rename" , "move");
146                     data.result.error = value;
147                 }
148                 self.deferredHandler(data, deferred);
149             }).error(function(data) {
150                 self.deferredHandler(data, deferred, 'Error Occured While Moving');
151             })['finally'](function() {
152                 self.inprocess = false;
153             });
154             return deferred.promise;
155         };
156
157         Item.prototype.copy = function() {
158             var self = this;
159             var deferred = $q.defer();
160             var data = {params: {
161                 mode: 'COPY',
162                 path: self.model.fullPath(),
163                 newPath: self.tempModel.fullPath()
164             }};
165
166             self.inprocess = true;
167             self.error = '';
168             $http.post(policyManagerConfig.copyUrl, data).success(function(data) {
169                 self.deferredHandler(data, deferred);
170             }).error(function(data) {
171                 self.deferredHandler(data, deferred, 'Error Occured While Cloning');
172             })['finally'](function() {
173                 self.inprocess = false;
174             });
175             return deferred.promise;
176         };
177
178         
179         Item.prototype.getContent = function(policyNavigator) {
180             var self = this;
181             var deferred = $q.defer();
182             var data = {params: {
183                 mode: 'EDITFILE',
184                 path: self.tempModel.fullPath()
185             }};
186
187             self.inprocess = true;
188             self.error = '';
189             $http.post(policyManagerConfig.getContentUrl, data).success(function(data) {
190                 self.tempModel.content =  self.model.content = data.result;
191                 var json = data.result;
192                 var policy = JSON.parse(json);
193                 self.policy = policy;
194                 self.itemContent = policyNavigator;
195                 console.log(policy);
196                 self.deferredHandler(data, deferred);
197             }).error(function(data) {
198                 self.deferredHandler(data, deferred, 'Error Occured While retrieving the Policy Data');
199             })['finally'](function() {
200                 self.inprocess = false;
201             });
202             return deferred.promise;
203         };
204
205         Item.prototype.getViewPolicyContent = function() {
206             var self = this;
207             var deferred = $q.defer();
208             var data = {params: {
209                 mode: 'VIEWPOLICY',
210                 path: self.tempModel.fullPath()
211             }};
212
213             self.inprocess = true;
214             self.error = '';
215             $http.post(policyManagerConfig.viewPolicyUrl, data).success(function(data) {
216                 self.tempModel.content =  self.model.content = data.result;
217                 var json = data.result;
218                 var policy = JSON.parse(json);
219                 self.policy = policy;
220                 console.log(data.result);
221                 console.log(policy);
222                 self.deferredHandler(data, deferred);
223             }).error(function(data) {
224                 self.deferredHandler(data, deferred, 'Error Occured While retrieving the Policy Data');
225             })['finally'](function() {
226                 self.inprocess = false;
227             });
228             return deferred.promise;
229         };
230
231         Item.prototype.getSwitchVersionContent = function() {
232             var self = this;
233             var deferred = $q.defer();
234             var data = {params: {
235                 mode: 'SWITCHVERSION',
236                 path: self.tempModel.fullPath(),
237                 activeVersion : self.tempModel.content.activeVersion,
238                 highestVersion : self.tempModel.content.highestVersion
239             }};
240
241             self.inprocess = true;
242             self.error = '';
243             $http.post(policyManagerConfig.switchVersionUrl, data).success(function(data) {
244                 self.tempModel.content =  self.model.content = data;
245                 self.deferredHandler(data, deferred);
246             }).error(function(data) {
247                 self.deferredHandler(data, deferred, 'Error Occured While retrieving the Switch Version Data');
248             })['finally'](function() {
249                 self.inprocess = false;
250             });
251             return deferred.promise;
252         };
253
254         Item.prototype.getDescribePolicyContent = function() {
255             var self = this;
256             var deferred = $q.defer();
257             var data = {params: {
258                 mode: 'DESCRIBEPOLICYFILE',
259                 path: self.tempModel.fullPath()
260             }};
261
262             self.inprocess = true;
263             self.error = '';
264             $http.post(policyManagerConfig.describePolicyUrl, data).success(function(data) {
265                 self.tempModel.content =  self.model.content = data.html;
266                 var describeTemplate =  self.tempModel.content;
267
268                 self.deferredHandler(data, deferred);
269             }).error(function(data) {
270                 self.deferredHandler(data, deferred, 'Error Occured While retrieving the Policy Data to Describe');
271             })['finally'](function() {
272                 self.inprocess = false;
273             });
274             return deferred.promise;
275         };
276
277         Item.prototype.getScopeContent = function() {
278             var self = this;
279             var deferred = $q.defer();
280             var data = {params: {
281                 mode: 'ADDSUBSCOPE',
282                 name: self.tempModel.name,
283                 subScopename: self.tempModel.subScopename,
284                 path: self.tempModel.fullPath()
285             }};
286
287             self.inprocess = true;
288             self.error = '';
289             $http.post(policyManagerConfig.addSubScopeUrl, data).success(function(data) {
290                 self.deferredHandler(data, deferred);
291             }).error(function(data) {
292                 self.deferredHandler(data, deferred, 'Error Occured While Creating the Sub Scope');
293             })['finally'](function() {
294                 self.inprocess = false;
295             });
296             return deferred.promise;
297         };
298
299         Item.prototype.remove = function() {
300             var self = this;
301             var deferred = $q.defer();
302             var data = {params: {
303                 mode: 'DELETE',
304                 path: self.tempModel.fullPath(),
305                 deleteVersion : self.model.versions
306             }};
307
308             self.inprocess = true;
309             self.error = '';
310             $http.post(policyManagerConfig.removeUrl, data).success(function(data) {
311                 self.deferredHandler(data, deferred);
312             }).error(function(data) {
313                 self.deferredHandler(data, deferred, 'Error Occured While retrieving the Deleting Scope');
314             })['finally'](function() {
315                 self.inprocess = false;
316             });
317             return deferred.promise;
318         };
319
320         Item.prototype.removePolicy = function() {
321             var self = this;
322             var deferred = $q.defer();
323             var data = {params: {
324                 mode: 'DELETE',
325                 path: self.tempModel.fullPath(),
326                 deleteVersion : self.model.versions
327             }};
328
329             self.inprocess = true;
330             self.error = '';
331             $http.post(policyManagerConfig.removeUrl, data).success(function(data) {
332                 self.deferredHandler(data, deferred);
333             }).error(function(data) {
334                 self.deferredHandler(data, deferred, 'Error Occured While retrieving the Deleting Policy');
335             })['finally'](function() {
336                 self.inprocess = false;
337             });
338             return deferred.promise;
339         };
340
341         Item.prototype.isFolder = function() {
342             return this.model.type === 'dir';
343         };
344
345         Item.prototype.isEditable = function() {
346             return !this.isFolder() && policyManagerConfig.isEditableFilePattern.test(this.model.name);
347         };
348
349         return Item;
350     }]);