1 define([], function () {
4 angular.module('app.yangman').service('YangmanService', YangmanService);
6 YangmanService.$inject = [
7 'RequestBuilderService',
9 'YangUtilsRestangularService',
13 function YangmanService(
14 RequestBuilderService,
16 YangUtilsRestangularService,
20 executeRequestOperation: executeRequestOperation,
21 fillNodeFromResponse: fillNodeFromResponse,
22 getDataStoreIndex: getDataStoreIndex,
28 * Return index of selected datastore in list
33 function getDataStoreIndex(list, dataStore){
35 result = list.some(function (item, index) {
37 return item.label === dataStore;
40 return result ? rIndex : null;
43 function executeRequestOperation(
52 var reqString = selectedSubApi ? selectedSubApi.buildApiRequestString() : '',
54 preparedRequestData = {},
60 customRestangular = null;
62 // set full response detail
63 YangUtilsRestangularService.setFullResponse(true);
65 // set correct host into restangular based on shown data type
66 if ( dataType === 'json' ){
67 var parser = locationHelper(requestUrl, ['pathname', 'origin']),
70 YangUtilsRestangularService.setBaseUrl(parser.origin);
71 reqString = parser.pathname.slice(1).split('/');
72 raParam = reqString.shift();
73 reqString = reqString.join('/');
75 customRestangular = YangUtilsRestangularService.one(raParam);
77 YangUtilsRestangularService.setBaseUrl(ENV.getBaseURL('MD_SAL'));
78 customRestangular = YangUtilsRestangularService.one('restconf');
81 //reqString = reqPath ? reqPath.slice(selectedApi.basePath.length, reqPath.length) : reqString;
82 //var requestPath = selectedApi.basePath + reqString;
84 // if node build sent request
87 node.buildRequest(RequestBuilderService, requestData, node.module);
88 angular.copy(requestData, preparedRequestData);
90 preparedRequestData = YangUtilsService.prepareRequestData(
93 reqString, selectedSubApi
96 headers = YangUtilsService.prepareHeaders(preparedRequestData);
99 operation = YangUtilsService.prepareOperation(operation);
101 // start track time response
102 time.started = new Date().getMilliseconds();
104 // executing operation
106 .customOperation(operation.toLowerCase(), reqString, null, headers, preparedRequestData)
107 .then(function (response) {
108 // finish track time response
109 time.finished = new Date().getMilliseconds();
112 status: response.status,
113 statusText: response.statusText,
114 time: (time.finished - time.started),
117 (successCbk || angular.noop)(reqObj, response);
120 console.log('resp', resp);
121 // finish track time response
122 time.finished = new Date().getMilliseconds();
126 statusText: resp.statusText,
127 time: (time.finished - time.started),
130 (errorCbk || angular.noop)(reqObj);
134 if (resp.data && resp.data.errors && resp.data.errors.error && resp.data.errors.error.length) {
135 errorMsg = ': ' + resp.data.errors.error.map(function (e) {
136 return e['error-message'];
141 * TODO after first GET we have set $scope.node with data
142 * so build from the top of this function return requestData
144 if (operation === 'GET'){
149 'error sending request to', selectedSubApi ? selectedSubApi.buildApiRequestString() : '',
150 'reqString', reqString,
159 * Method for parsing path to additional properties based on JS LOCATION
164 function locationHelper(path, properties){
165 var parser = document.createElement('a'),
170 properties.forEach(function (prop) {
171 obj[prop] = parser[prop];
178 * Fill node values from response
182 function fillNodeFromResponse(node, data){
183 var props = Object.getOwnPropertyNames(data);
185 // fill each property - needed for root mountpoint node,
186 // in other cases there should be only one property anyway
187 props.forEach(function (p) {
188 node.fill(p, data[p]);