1 define([], function () {
4 angular.module('app.yangman').service('YangmanService', YangmanService);
6 YangmanService.$inject = [
7 'RequestBuilderService',
9 'YangUtilsRestangularService',
16 function YangmanService(
17 RequestBuilderService,
19 YangUtilsRestangularService,
25 executeRequestOperation: executeRequestOperation,
26 fillNodeFromResponse: fillNodeFromResponse,
27 getDataStoreIndex: getDataStoreIndex,
28 prepareAllRequestData: prepareAllRequestData,
29 validateFile: validateFile,
35 * Validating collection import file
40 function validateFile(data, checkArray){
42 var obj = ParsingJsonService.parseJson(data);
44 return obj && obj.every(function (el){
45 return checkArray.every(function (arr){
46 return el.hasOwnProperty(arr);
55 * Return index of selected datastore in list
60 function getDataStoreIndex(list, dataStore){
62 result = list.some(function (item, index) {
64 return item.label === dataStore;
67 return result ? rIndex : null;
71 * Prepare all necessary data for executing or saving request
73 * @param selectedSubApi
80 * @returns {{customRestangular: null, headers: {}, operation: string, reqString: string, reqHeaders: {},
83 function prepareAllRequestData(selectedApi, selectedSubApi, operation, node, dataType, requestUrl, requestData,
85 var allPreparedData = {
86 customRestangular: null,
89 reqString: selectedSubApi ? selectedSubApi.buildApiRequestString() : '',
95 if ( dataType === 'form' && node){
96 node.buildRequest(RequestBuilderService, requestData, node.module);
97 allPreparedData.srcData = angular.copy(requestData);
100 allPreparedData.srcData = requestData;
102 allPreparedData.reqData = RequestsService.applyParams(params, allPreparedData.srcData);
105 if (operation === 'GET' || operation === 'DELETE'){
106 allPreparedData.srcData = null;
107 allPreparedData.reqData = null;
109 else if (operation === 'POST'){
110 allPreparedData.reqData = YangUtilsService.postRequestData(
111 allPreparedData.reqData,
112 allPreparedData.reqString,
117 // set correct host into restangular based on shown data type and prepare data
118 if ( dataType === 'req-data' ){
119 var parser = locationHelper(requestUrl, ['pathname', 'origin']),
122 YangUtilsRestangularService.setBaseUrl(parser.origin);
123 allPreparedData.reqString = parser.pathname.slice(1).split('/');
124 raParam = allPreparedData.reqString.shift();
125 allPreparedData.reqString = allPreparedData.reqString.join('/');
127 allPreparedData.customRestangular = YangUtilsRestangularService.one(raParam);
131 YangUtilsRestangularService.setBaseUrl(ENV.getBaseURL('MD_SAL'));
132 allPreparedData.customRestangular = YangUtilsRestangularService.one('restconf');
135 allPreparedData.headers = YangUtilsService.prepareHeaders(allPreparedData.reqData);
139 allPreparedData.operation = YangUtilsService.prepareOperation(operation);
140 return allPreparedData;
144 * Execute request built from this data
146 * @param selectedSubApi
156 function executeRequestOperation(selectedApi, selectedSubApi, operation, node, dataType, requestUrl,
157 requestData, params, successCbk, errorCbk) {
163 YangUtilsRestangularService.setFullResponse(true);
165 // prepare all necessary data
166 var allPreparedData = prepareAllRequestData(selectedApi, selectedSubApi, operation, node, dataType,
167 requestUrl, requestData, params);
169 // start track time response
170 time.started = new Date().getMilliseconds();
172 // executing operation
173 allPreparedData.customRestangular.customOperation(
174 allPreparedData.operation.toLowerCase(),
175 allPreparedData.reqString,
177 allPreparedData.headers,
178 allPreparedData.reqData
181 function (response) {
182 (successCbk || angular.noop)(finishExecuting(response), response);
184 function (response) {
185 (errorCbk || angular.noop)(finishExecuting(response), response);
189 function finishExecuting(response){
190 // finish track time response
191 time.finished = new Date().getMilliseconds();
194 status: response.status,
195 statusText: response.statusText,
196 time: (time.finished - time.started),
197 requestData: allPreparedData.reqData,
198 requestSrcData: allPreparedData.srcData,
204 * Method for parsing path to additional properties based on JS LOCATION
209 function locationHelper(path, properties){
210 var parser = document.createElement('a'),
215 properties.forEach(function (prop) {
216 obj[prop] = parser[prop];
223 * Fill node values from response
227 function fillNodeFromResponse(node, data){
228 var props = data ? Object.getOwnPropertyNames(data) : [];
230 // fill each property - needed for root mountpoint node,
231 // in other cases there should be only one property anyway
232 props.forEach(function (p) {
233 node.fill(p, data[p]);