/*-
* ============LICENSE_START=======================================================
* ECOMP Policy Engine
* ================================================================================
* Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ============LICENSE_END=========================================================
*/
angular.module('abs').factory('item', ['$http', '$q', 'policyManagerConfig', function($http, $q, policyManagerConfig) {
var Item = function(model, path) {
var rawModel = {
name: model && model.name || '',
subScopename: model && model.subScopename || '',
path: path || [],
type: model && model.type || 'file',
size: model && parseInt(model.size || 0),
date: parseMySQLDate(model && model.date),
version: model && model.version || '',
createdBy: model && model.createdBy || '',
modifiedBy: model && model.modifiedBy || '',
content: model && model.content || '',
recursive: false,
sizeKb: function() {
return Math.round(this.size / 1024, 1);
},
fullPath: function() {
if(this.version == ""){
return ('/' + this.path.join('/') + '/' + this.name).replace(/\/\//, '/');
}else{
return ('/' + this.path.join('/') + '/' + this.name + '.' + this.version + '.xml').replace(/\/\//, '/');
}
}
};
this.error = '';
this.inprocess = false;
this.model = angular.copy(rawModel);
this.tempModel = angular.copy(rawModel);
function parseMySQLDate(mysqlDate) {
var d = (mysqlDate || '').toString().split(/[- :]/);
return new Date(d[0], d[1] - 1, d[2], d[3], d[4], d[5]);
}
};
Item.prototype.update = function() {
angular.extend(this.model, angular.copy(this.tempModel));
};
Item.prototype.revert = function() {
angular.extend(this.tempModel, angular.copy(this.model));
this.error = '';
};
Item.prototype.deferredHandler = function(data, deferred, defaultMsg) {
if (!data || typeof data !== 'object') {
this.error = 'Bridge response error, please check the docs';
}
if (data.result && data.result.error) {
this.error = data.result.error;
}
if (!this.error && data.error) {
this.error = data.error.message;
}
if (!this.error && defaultMsg) {
this.error = defaultMsg;
}
if (this.error) {
return deferred.reject(data);
}
this.update();
return deferred.resolve(data);
};
Item.prototype.createFolder = function() {
var self = this;
var deferred = $q.defer();
var data = {params: {
mode: 'ADDFOLDER',
path: self.tempModel.path.join('/'),
name: self.tempModel.name
}};
self.inprocess = true;
self.error = '';
$http.post(policyManagerConfig.createFolderUrl, data).success(function(data) {
self.deferredHandler(data, deferred);
}).error(function(data) {
self.deferredHandler(data, deferred, 'Error Occured While Creating Scope');
})['finally'](function() {
self.inprocess = false;
});
return deferred.promise;
};
Item.prototype.rename = function() {
var self = this;
var deferred = $q.defer();
var data = {params: {
mode: 'RENAME',
path: self.model.fullPath(),
newPath: self.tempModel.fullPath()
}};
self.inprocess = true;
self.error = '';
$http.post(policyManagerConfig.renameUrl, data).success(function(data) {
self.deferredHandler(data, deferred);
}).error(function(data) {
self.deferredHandler(data, deferred, 'Error Occured While Renaming');
})['finally'](function() {
self.inprocess = false;
});
return deferred.promise;
};
Item.prototype.move = function() {
var self = this;
var deferred = $q.defer();
var data = {params: {
mode: 'RENAME',
path: self.model.fullPath(),
newPath: self.tempModel.fullPath()
}};
self.inprocess = true;
self.error = '';
$http.post(policyManagerConfig.renameUrl, data).success(function(data) {
self.deferredHandler(data, deferred);
}).error(function(data) {
self.deferredHandler(data, deferred, 'Error Occured While Moving');
})['finally'](function() {
self.inprocess = false;
});
return deferred.promise;
};
Item.prototype.copy = function() {
var self = this;
var deferred = $q.defer();
var data = {params: {
mode: 'COPY',
path: self.model.fullPath(),
newPath: self.tempModel.fullPath()
}};
self.inprocess = true;
self.error = '';
$http.post(policyManagerConfig.copyUrl, data).success(function(data) {
self.deferredHandler(data, deferred);
}).error(function(data) {
self.deferredHandler(data, deferred, 'Error Occured While Cloning');
})['finally'](function() {
self.inprocess = false;
});
return deferred.promise;
};
Item.prototype.getContent = function() {
var self = this;
var deferred = $q.defer();
var data = {params: {
mode: 'EDITFILE',
path: self.tempModel.fullPath()
}};
self.inprocess = true;
self.error = '';
$http.post(policyManagerConfig.getContentUrl, data).success(function(data) {
self.tempModel.content = self.model.content = data.result;
var json = data.result;
var policy = JSON.parse(json);
self.policy = policy;
console.log(policy);
self.deferredHandler(data, deferred);
}).error(function(data) {
self.deferredHandler(data, deferred, 'Error Occured While retrieving the Policy Data');
})['finally'](function() {
self.inprocess = false;
});
return deferred.promise;
};
Item.prototype.getViewPolicyContent = function() {
var self = this;
var deferred = $q.defer();
var data = {params: {
mode: 'VIEWPOLICY',
path: self.tempModel.fullPath()
}};
self.inprocess = true;
self.error = '';
$http.post(policyManagerConfig.viewPolicyUrl, data).success(function(data) {
self.tempModel.content = self.model.content = data.result;
var json = data.result;
var policy = JSON.parse(json);
self.policy = policy;
console.log(data.result);
console.log(policy);
self.deferredHandler(data, deferred);
}).error(function(data) {
self.deferredHandler(data, deferred, 'Error Occured While retrieving the Policy Data');
})['finally'](function() {
self.inprocess = false;
});
return deferred.promise;
};
Item.prototype.getSwitchVersionContent = function() {
var self = this;
var deferred = $q.defer();
var data = {params: {
mode: 'SWITCHVERSION',
path: self.tempModel.fullPath(),
activeVersion : self.tempModel.content.activeVersion,
highestVersion : self.tempModel.content.highestVersion
}};
self.inprocess = true;
self.error = '';
$http.post(policyManagerConfig.switchVersionUrl, data).success(function(data) {
self.tempModel.content = self.model.content = data;
self.deferredHandler(data, deferred);
}).error(function(data) {
self.deferredHandler(data, deferred, 'Error Occured While retrieving the Switch Version Data');
})['finally'](function() {
self.inprocess = false;
});
return deferred.promise;
};
Item.prototype.getDescribePolicyContent = function() {
var self = this;
var deferred = $q.defer();
var data = {params: {
mode: 'DESCRIBEPOLICYFILE',
path: self.tempModel.fullPath()
}};
self.inprocess = true;
self.error = '';
$http.post(policyManagerConfig.describePolicyUrl, data).success(function(data) {
self.tempModel.content = self.model.content = data.html;
var describeTemplate = self.tempModel.content;
self.deferredHandler(data, deferred);
}).error(function(data) {
self.deferredHandler(data, deferred, 'Error Occured While retrieving the Policy Data to Describe');
})['finally'](function() {
self.inprocess = false;
});
return deferred.promise;
};
Item.prototype.getScopeContent = function() {
var self = this;
var deferred = $q.defer();
var data = {params: {
mode: 'ADDSUBSCOPE',
name: self.tempModel.name,
subScopename: self.tempModel.subScopename,
path: self.tempModel.fullPath()
}};
self.inprocess = true;
self.error = '';
$http.post(policyManagerConfig.addSubScopeUrl, data).success(function(data) {
self.deferredHandler(data, deferred);
}).error(function(data) {
self.deferredHandler(data, deferred, 'Error Occured While Creating the Sub Scope');
})['finally'](function() {
self.inprocess = false;
});
return deferred.promise;
};
Item.prototype.remove = function() {
var self = this;
var deferred = $q.defer();
var data = {params: {
mode: 'DELETE',
path: self.tempModel.fullPath(),
deleteVersion : self.model.versions
}};
self.inprocess = true;
self.error = '';
$http.post(policyManagerConfig.removeUrl, data).success(function(data) {
self.deferredHandler(data, deferred);
}).error(function(data) {
self.deferredHandler(data, deferred, 'Error Occured While retrieving the Deleting Scope');
})['finally'](function() {
self.inprocess = false;
});
return deferred.promise;
};
Item.prototype.removePolicy = function() {
var self = this;
var deferred = $q.defer();
var data = {params: {
mode: 'DELETE',
path: self.tempModel.fullPath(),
deleteVersion : self.model.versions
}};
self.inprocess = true;
self.error = '';
$http.post(policyManagerConfig.removeUrl, data).success(function(data) {
self.deferredHandler(data, deferred);
}).error(function(data) {
self.deferredHandler(data, deferred, 'Error Occured While retrieving the Deleting Policy');
})['finally'](function() {
self.inprocess = false;
});
return deferred.promise;
};
Item.prototype.isFolder = function() {
return this.model.type === 'dir';
};
Item.prototype.isEditable = function() {
return !this.isFolder() && policyManagerConfig.isEditableFilePattern.test(this.model.name);
};
/*Item.prototype.isImage = function() {
return policyManagerConfig.isImageFilePattern.test(this.model.name);
};*/
return Item;
}]);