Policy 1707 commit to LF
[policy/engine.git] / POLICY-SDK-APP / src / main / webapp / app / policyApp / policy-models / Editor / js / entities / item.js
1 /*-
2  * ============LICENSE_START=======================================================
3  * ECOMP 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: parseMySQLDate(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                 self.deferredHandler(data, deferred);
143             }).error(function(data) {
144                 self.deferredHandler(data, deferred, 'Error Occured While Moving');
145             })['finally'](function() {
146                 self.inprocess = false;
147             });
148             return deferred.promise;
149         };
150         
151         Item.prototype.copy = function() {
152             var self = this;
153             var deferred = $q.defer();
154             var data = {params: {
155                 mode: 'COPY',
156                 path: self.model.fullPath(),
157                 newPath: self.tempModel.fullPath()
158             }};
159
160             self.inprocess = true;
161             self.error = '';
162             $http.post(policyManagerConfig.copyUrl, data).success(function(data) {
163                 self.deferredHandler(data, deferred);
164             }).error(function(data) {
165                 self.deferredHandler(data, deferred, 'Error Occured While Cloning');
166             })['finally'](function() {
167                 self.inprocess = false;
168             });
169             return deferred.promise;
170         };
171
172         
173         Item.prototype.getContent = function() {
174             var self = this;
175             var deferred = $q.defer();
176             var data = {params: {
177                 mode: 'EDITFILE',
178                 path: self.tempModel.fullPath()
179             }};
180
181             self.inprocess = true;
182             self.error = '';
183             $http.post(policyManagerConfig.getContentUrl, data).success(function(data) {
184                 self.tempModel.content =  self.model.content = data.result;
185                 var json = data.result;
186                 var policy = JSON.parse(json);
187                 self.policy = policy;
188                 console.log(policy);
189                 self.deferredHandler(data, deferred);
190             }).error(function(data) {
191                 self.deferredHandler(data, deferred, 'Error Occured While retrieving the Policy Data');
192             })['finally'](function() {
193                 self.inprocess = false;
194             });
195             return deferred.promise;
196         };
197
198         Item.prototype.getViewPolicyContent = function() {
199             var self = this;
200             var deferred = $q.defer();
201             var data = {params: {
202                 mode: 'VIEWPOLICY',
203                 path: self.tempModel.fullPath()
204             }};
205
206             self.inprocess = true;
207             self.error = '';
208             $http.post(policyManagerConfig.viewPolicyUrl, data).success(function(data) {
209                 self.tempModel.content =  self.model.content = data.result;
210                 var json = data.result;
211                 var policy = JSON.parse(json);
212                 self.policy = policy;
213                 console.log(data.result);
214                 console.log(policy);
215                 self.deferredHandler(data, deferred);
216             }).error(function(data) {
217                 self.deferredHandler(data, deferred, 'Error Occured While retrieving the Policy Data');
218             })['finally'](function() {
219                 self.inprocess = false;
220             });
221             return deferred.promise;
222         };
223
224         Item.prototype.getSwitchVersionContent = function() {
225             var self = this;
226             var deferred = $q.defer();
227             var data = {params: {
228                 mode: 'SWITCHVERSION',
229                 path: self.tempModel.fullPath(),
230                 activeVersion : self.tempModel.content.activeVersion,
231                 highestVersion : self.tempModel.content.highestVersion
232             }};
233
234             self.inprocess = true;
235             self.error = '';
236             $http.post(policyManagerConfig.switchVersionUrl, data).success(function(data) {
237                 self.tempModel.content =  self.model.content = data;
238                 self.deferredHandler(data, deferred);
239             }).error(function(data) {
240                 self.deferredHandler(data, deferred, 'Error Occured While retrieving the Switch Version Data');
241             })['finally'](function() {
242                 self.inprocess = false;
243             });
244             return deferred.promise;
245         };
246         
247         Item.prototype.getDescribePolicyContent = function() {
248             var self = this;
249             var deferred = $q.defer();
250             var data = {params: {
251                 mode: 'DESCRIBEPOLICYFILE',
252                 path: self.tempModel.fullPath()
253             }};
254
255             self.inprocess = true;
256             self.error = '';
257             $http.post(policyManagerConfig.describePolicyUrl, data).success(function(data) {
258                 self.tempModel.content =  self.model.content = data.html;
259                 var describeTemplate =  self.tempModel.content;
260              
261                 self.deferredHandler(data, deferred);
262             }).error(function(data) {
263                 self.deferredHandler(data, deferred, 'Error Occured While retrieving the Policy Data to Describe');
264             })['finally'](function() {
265                 self.inprocess = false;
266             });
267             return deferred.promise;
268         };
269
270         Item.prototype.getScopeContent = function() {
271             var self = this;
272             var deferred = $q.defer();
273             var data = {params: {
274                 mode: 'ADDSUBSCOPE',
275                 name: self.tempModel.name,
276                 subScopename: self.tempModel.subScopename,
277                 path: self.tempModel.fullPath()
278             }};
279
280             self.inprocess = true;
281             self.error = '';
282             $http.post(policyManagerConfig.addSubScopeUrl, data).success(function(data) {
283                 self.deferredHandler(data, deferred);
284             }).error(function(data) {
285                 self.deferredHandler(data, deferred, 'Error Occured While Creating the Sub Scope');
286             })['finally'](function() {
287                 self.inprocess = false;
288             });
289             return deferred.promise;
290         };
291
292         Item.prototype.remove = function() {
293             var self = this;
294             var deferred = $q.defer();
295             var data = {params: {
296                 mode: 'DELETE',
297                 path: self.tempModel.fullPath(),
298                 deleteVersion : self.model.versions
299             }};
300
301             self.inprocess = true;
302             self.error = '';
303             $http.post(policyManagerConfig.removeUrl, data).success(function(data) {
304                 self.deferredHandler(data, deferred);
305             }).error(function(data) {
306                 self.deferredHandler(data, deferred, 'Error Occured While retrieving the Deleting Scope');
307             })['finally'](function() {
308                 self.inprocess = false;
309             });
310             return deferred.promise;
311         };
312         
313         Item.prototype.removePolicy = function() {
314             var self = this;
315             var deferred = $q.defer();
316             var data = {params: {
317                 mode: 'DELETE',
318                 path: self.tempModel.fullPath(),
319                 deleteVersion : self.model.versions
320             }};
321
322             self.inprocess = true;
323             self.error = '';
324             $http.post(policyManagerConfig.removeUrl, data).success(function(data) {
325                 self.deferredHandler(data, deferred);
326             }).error(function(data) {
327                 self.deferredHandler(data, deferred, 'Error Occured While retrieving the Deleting Policy');
328             })['finally'](function() {
329                 self.inprocess = false;
330             });
331             return deferred.promise;
332         };
333
334         Item.prototype.isFolder = function() {
335             return this.model.type === 'dir';
336         };
337
338         Item.prototype.isEditable = function() {
339             return !this.isFolder() && policyManagerConfig.isEditableFilePattern.test(this.model.name);
340         };
341
342         /*Item.prototype.isImage = function() {
343             return policyManagerConfig.isImageFilePattern.test(this.model.name);
344         };*/
345
346         return Item;
347     }]);