0e095a841e7109ec81fa620eee0335c53260e125
[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 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                 content: model && model.content || '',
34                 recursive: false,
35                 sizeKb: function() {
36                     return Math.round(this.size / 1024, 1);
37                 },
38                 fullPath: function() {
39                     if(this.version == ""){
40                         return ('/' + this.path.join('/') + '/' + this.name).replace(/\/\//, '/');
41                     }else{
42                         return ('/' + this.path.join('/') + '/' + this.name + '.' + this.version + '.xml').replace(/\/\//, '/');
43                     }
44                 }
45             };
46
47             this.error = '';
48             this.inprocess = false;
49
50             this.model = angular.copy(rawModel);
51             this.tempModel = angular.copy(rawModel);
52
53             function parseMySQLDate(mysqlDate) {
54                 var d = (mysqlDate || '').toString().split(/[- :]/);
55                 return new Date(d[0], d[1] - 1, d[2], d[3], d[4], d[5]);
56             }
57         };
58
59         Item.prototype.update = function() {
60             angular.extend(this.model, angular.copy(this.tempModel));
61         };
62
63         Item.prototype.revert = function() {
64             angular.extend(this.tempModel, angular.copy(this.model));
65             this.error = '';
66         };
67
68         Item.prototype.deferredHandler = function(data, deferred, defaultMsg) {
69             if (!data || typeof data !== 'object') {
70                 this.error = 'Bridge response error, please check the docs';
71             }
72             if (data.result && data.result.error) {
73                 this.error = data.result.error;
74             }
75             if (!this.error && data.error) {
76                 this.error = data.error.message;
77             }
78             if (!this.error && defaultMsg) {
79                 this.error = defaultMsg;
80             }
81             if (this.error) {
82                 return deferred.reject(data);
83             }
84             this.update();
85             return deferred.resolve(data);
86         };
87                 
88         Item.prototype.createFolder = function() {
89             var self = this;
90             var deferred = $q.defer();
91             var data = {params: {
92                 mode: 'ADDFOLDER',
93                 path: self.tempModel.path.join('/'),
94                 name: self.tempModel.name
95             }};
96
97             self.inprocess = true;
98             self.error = '';
99             $http.post(policyManagerConfig.createFolderUrl, data).success(function(data) {
100                 self.deferredHandler(data, deferred);
101             }).error(function(data) {
102                 self.deferredHandler(data, deferred, 'Error Occured While Creating Scope');
103             })['finally'](function() {
104                 self.inprocess = false;
105             });
106         
107             return deferred.promise;
108         };
109
110         Item.prototype.rename = function() {
111             var self = this;
112             var deferred = $q.defer();
113             var data = {params: {
114                 mode: 'RENAME',
115                 path: self.model.fullPath(),
116                 newPath: self.tempModel.fullPath()
117             }};
118             self.inprocess = true;
119             self.error = '';
120             $http.post(policyManagerConfig.renameUrl, data).success(function(data) {
121                 self.deferredHandler(data, deferred);
122             }).error(function(data) {
123                 self.deferredHandler(data, deferred, 'Error Occured While Renaming');
124             })['finally'](function() {
125                 self.inprocess = false;
126             });
127             return deferred.promise;
128         };
129
130         
131         Item.prototype.move = function() {
132             var self = this;
133             var deferred = $q.defer();
134             var data = {params: {
135                 mode: 'RENAME',
136                 path: self.model.fullPath(),
137                 newPath: self.tempModel.fullPath()
138             }};
139             self.inprocess = true;
140             self.error = '';
141             $http.post(policyManagerConfig.renameUrl, data).success(function(data) {
142                 if(data.result.error != undefined){
143                         var value = data.result.error;
144                         value = value.replace("rename" , "move");
145                         data.result.error = value;
146                 }
147                 self.deferredHandler(data, deferred);
148             }).error(function(data) {
149                 self.deferredHandler(data, deferred, 'Error Occured While Moving');
150             })['finally'](function() {
151                 self.inprocess = false;
152             });
153             return deferred.promise;
154         };
155         
156         Item.prototype.copy = function() {
157             var self = this;
158             var deferred = $q.defer();
159             var data = {params: {
160                 mode: 'COPY',
161                 path: self.model.fullPath(),
162                 newPath: self.tempModel.fullPath()
163             }};
164
165             self.inprocess = true;
166             self.error = '';
167             $http.post(policyManagerConfig.copyUrl, data).success(function(data) {
168                 self.deferredHandler(data, deferred);
169             }).error(function(data) {
170                 self.deferredHandler(data, deferred, 'Error Occured While Cloning');
171             })['finally'](function() {
172                 self.inprocess = false;
173             });
174             return deferred.promise;
175         };
176
177         
178         Item.prototype.getContent = function(policyNavigator) {
179             var self = this;
180             var deferred = $q.defer();
181             var data = {params: {
182                 mode: 'EDITFILE',
183                 path: self.tempModel.fullPath()
184             }};
185
186             self.inprocess = true;
187             self.error = '';
188             $http.post(policyManagerConfig.getContentUrl, data).success(function(data) {
189                 self.tempModel.content =  self.model.content = data.result;
190                 var json = data.result;
191                 var policy = JSON.parse(json);
192                 self.policy = policy;
193                 self.itemContent = policyNavigator;
194                 console.log(policy);
195                 self.deferredHandler(data, deferred);
196             }).error(function(data) {
197                 self.deferredHandler(data, deferred, 'Error Occured While retrieving the Policy Data');
198             })['finally'](function() {
199                 self.inprocess = false;
200             });
201             return deferred.promise;
202         };
203
204         Item.prototype.getViewPolicyContent = function() {
205             var self = this;
206             var deferred = $q.defer();
207             var data = {params: {
208                 mode: 'VIEWPOLICY',
209                 path: self.tempModel.fullPath()
210             }};
211
212             self.inprocess = true;
213             self.error = '';
214             $http.post(policyManagerConfig.viewPolicyUrl, data).success(function(data) {
215                 self.tempModel.content =  self.model.content = data.result;
216                 var json = data.result;
217                 var policy = JSON.parse(json);
218                 self.policy = policy;
219                 console.log(data.result);
220                 console.log(policy);
221                 self.deferredHandler(data, deferred);
222             }).error(function(data) {
223                 self.deferredHandler(data, deferred, 'Error Occured While retrieving the Policy Data');
224             })['finally'](function() {
225                 self.inprocess = false;
226             });
227             return deferred.promise;
228         };
229
230         Item.prototype.getSwitchVersionContent = function() {
231             var self = this;
232             var deferred = $q.defer();
233             var data = {params: {
234                 mode: 'SWITCHVERSION',
235                 path: self.tempModel.fullPath(),
236                 activeVersion : self.tempModel.content.activeVersion,
237                 highestVersion : self.tempModel.content.highestVersion
238             }};
239
240             self.inprocess = true;
241             self.error = '';
242             $http.post(policyManagerConfig.switchVersionUrl, data).success(function(data) {
243                 self.tempModel.content =  self.model.content = data;
244                 self.deferredHandler(data, deferred);
245             }).error(function(data) {
246                 self.deferredHandler(data, deferred, 'Error Occured While retrieving the Switch Version Data');
247             })['finally'](function() {
248                 self.inprocess = false;
249             });
250             return deferred.promise;
251         };
252         
253         Item.prototype.getDescribePolicyContent = function() {
254             var self = this;
255             var deferred = $q.defer();
256             var data = {params: {
257                 mode: 'DESCRIBEPOLICYFILE',
258                 path: self.tempModel.fullPath()
259             }};
260
261             self.inprocess = true;
262             self.error = '';
263             $http.post(policyManagerConfig.describePolicyUrl, data).success(function(data) {
264                 self.tempModel.content =  self.model.content = data.html;
265                 var describeTemplate =  self.tempModel.content;
266              
267                 self.deferredHandler(data, deferred);
268             }).error(function(data) {
269                 self.deferredHandler(data, deferred, 'Error Occured While retrieving the Policy Data to Describe');
270             })['finally'](function() {
271                 self.inprocess = false;
272             });
273             return deferred.promise;
274         };
275
276         Item.prototype.getScopeContent = function() {
277             var self = this;
278             var deferred = $q.defer();
279             var data = {params: {
280                 mode: 'ADDSUBSCOPE',
281                 name: self.tempModel.name,
282                 subScopename: self.tempModel.subScopename,
283                 path: self.tempModel.fullPath()
284             }};
285
286             self.inprocess = true;
287             self.error = '';
288             $http.post(policyManagerConfig.addSubScopeUrl, data).success(function(data) {
289                 self.deferredHandler(data, deferred);
290             }).error(function(data) {
291                 self.deferredHandler(data, deferred, 'Error Occured While Creating the Sub Scope');
292             })['finally'](function() {
293                 self.inprocess = false;
294             });
295             return deferred.promise;
296         };
297
298         Item.prototype.remove = function() {
299             var self = this;
300             var deferred = $q.defer();
301             var data = {params: {
302                 mode: 'DELETE',
303                 path: self.tempModel.fullPath(),
304                 deleteVersion : self.model.versions
305             }};
306
307             self.inprocess = true;
308             self.error = '';
309             $http.post(policyManagerConfig.removeUrl, data).success(function(data) {
310                 self.deferredHandler(data, deferred);
311             }).error(function(data) {
312                 self.deferredHandler(data, deferred, 'Error Occured While retrieving the Deleting Scope');
313             })['finally'](function() {
314                 self.inprocess = false;
315             });
316             return deferred.promise;
317         };
318         
319         Item.prototype.removePolicy = function() {
320             var self = this;
321             var deferred = $q.defer();
322             var data = {params: {
323                 mode: 'DELETE',
324                 path: self.tempModel.fullPath(),
325                 deleteVersion : self.model.versions
326             }};
327
328             self.inprocess = true;
329             self.error = '';
330             $http.post(policyManagerConfig.removeUrl, data).success(function(data) {
331                 self.deferredHandler(data, deferred);
332             }).error(function(data) {
333                 self.deferredHandler(data, deferred, 'Error Occured While retrieving the Deleting Policy');
334             })['finally'](function() {
335                 self.inprocess = false;
336             });
337             return deferred.promise;
338         };
339
340         Item.prototype.isFolder = function() {
341             return this.model.type === 'dir';
342         };
343
344         Item.prototype.isEditable = function() {
345             return !this.isFolder() && policyManagerConfig.isEditableFilePattern.test(this.model.name);
346         };
347
348         return Item;
349     }]);