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