YangUI Controllers Split
[dlux.git] / modules / yangui-resources / src / main / resources / yangui / yangui.controller.js
1 var services = [\r
2         'app/yangui/yangui.services',\r
3         'app/yangui/pluginHandler.services',\r
4     ],\r
5     directives = [\r
6         'app/yangui/directives/abn_tree.directive',\r
7         'app/yangui/directives/sticky.directive',\r
8         'app/yangui/directives/read_file.directive',\r
9         'app/yangui/directives/ui-codemirror.directive'\r
10     ],\r
11     controllers = [\r
12         'app/yangui/controllers/api/augmentation-modal.controller',\r
13         'app/yangui/controllers/api/case.controller',\r
14         'app/yangui/controllers/api/coll-box.controller',\r
15         'app/yangui/controllers/api/container.controller',\r
16         'app/yangui/controllers/api/filter.controller',\r
17         'app/yangui/controllers/api/filter-type.controller',\r
18         'app/yangui/controllers/api/filter-type-bit.controller',\r
19         'app/yangui/controllers/api/filter-type-empty.controller',\r
20         'app/yangui/controllers/api/filter-type-enum.controller',\r
21         'app/yangui/controllers/parameters/history-param.controller',\r
22         'app/yangui/controllers/api/choice.controller',\r
23         'app/yangui/controllers/api/input.controller',\r
24         'app/yangui/controllers/api/leaf.controller',\r
25         'app/yangui/controllers/api/leaf-list.controller',\r
26         'app/yangui/controllers/api/list.controller',\r
27         'app/yangui/controllers/api/output.controller',\r
28         'app/yangui/controllers/parameters/param-box.controller',\r
29         'app/yangui/controllers/parameters/params-view.controller',\r
30         'app/yangui/controllers/history/req-in-history.controller',\r
31         'app/yangui/controllers/history/request-history.controller',\r
32         'app/yangui/controllers/api/rpc.controller',\r
33         'app/yangui/controllers/api/type.controller',\r
34         'app/yangui/controllers/api/type-bit.controller',\r
35         'app/yangui/controllers/api/type-empty.controller',\r
36         'app/yangui/controllers/api/type-enum.controller'\r
37     ];\r
38 \r
39 define(['app/yangui/yangui.module'].concat(services).concat(directives).concat(controllers), function(yangui) {\r
40 \r
41 \r
42   yangui.register.controller('yanguiCtrl', ['$scope', '$timeout', '$rootScope', '$http', '$filter', 'YangUtilsRestangular', 'yangUtils', 'reqBuilder', 'custFunct',\r
43     'pluginHandler', 'pathUtils', 'constants', 'nodeWrapper', 'mountPointsConnector', 'filterConstants','displayMountPoints','yinParser', 'designUtils', 'eventDispatcher', 'syncFact',\r
44     'customFunctUnsetter', 'HistoryServices', 'dataBackuper', 'parsingJson',\r
45     function ($scope, $timeout, $rootScope, $http, $filter, YangUtilsRestangular, yangUtils, reqBuilder, custFunctFact, pluginHandler, pathUtils, constants, nodeWrapper, mountPointsConnector, \r
46       filterConstants, displayMountPoints, yinParser, designUtils, eventDispatcher, syncFact, customFunctUnsetter, HistoryServices, dataBackuper, parsingJson) {\r
47       $rootScope['section_logo'] = 'assets/images/logo_yangui.gif';\r
48       $scope.currentPath = 'src/app/yangui/views/';\r
49       $scope.apiType = '';\r
50       $scope.constants = constants;\r
51       $scope.filterConstants = filterConstants;\r
52       $scope.filterRootNode = null;\r
53       $scope.previewValidity = true;\r
54       $scope.previewDelay = 2000;\r
55       $scope.selCustFunct = null;\r
56       $scope.selCustFunctButts = [];\r
57       $scope.mpSynchronizer = syncFact.generateObj();\r
58       $scope.defaultTreeName = $filter('translate')('YANGUI_ROOT');\r
59       $scope.treeName = $scope.defaultTreeName;\r
60 \r
61       $scope.status = {\r
62           type: 'noreq',\r
63           msg: null\r
64       };\r
65       \r
66       $scope.mainTabs = {\r
67         api: true,\r
68         history : false,\r
69         collection : false,\r
70         parameters : false\r
71       };\r
72 \r
73       $scope.showTabs = function(tabs, tabName){\r
74         for(var prop in tabs){\r
75           tabs[prop] = tabName === prop;\r
76         }\r
77 \r
78         designUtils.triggerWindowResize(100);\r
79       };\r
80 \r
81       var mountPrefix = constants.MPPREFIX;\r
82 \r
83       var statusChangeEvent = function(messages) {\r
84           // var newMessage = $scope.status.rawMsg + '\r\n' + messages.join('\r\n');\r
85           processingModulesCallback(messages[0]);\r
86       };\r
87 \r
88       var fillPathIdentifiersByKey = function(inputs) {\r
89           var node = inputs[0],\r
90               value = inputs[1] || '';\r
91 \r
92           if($scope.selSubApi && node.parent && $scope.selSubApi.node.id === node.parent.id) { //or $scope.node === node.parent?\r
93               var identifiers = $scope.selSubApi.pathArray[$scope.selSubApi.pathArray.length - 1].identifiers;\r
94               pathUtils.fillIdentifiers(identifiers, node.label, value);\r
95           }\r
96       };\r
97 \r
98       var fillPathIdentifiersByListData = function(inputs) {\r
99           var node = inputs[0];\r
100 \r
101           if($scope.selSubApi && node && $scope.selSubApi.node.id === node.id) { //or $scope.node === node.parent?\r
102               var identifiers = $scope.selSubApi.pathArray[$scope.selSubApi.pathArray.length - 1].identifiers,\r
103                   keys = node.refKey;\r
104 \r
105               keys.forEach(function(key) {\r
106                   pathUtils.fillIdentifiers(identifiers, key.label, key.value);\r
107               });\r
108           }\r
109       };\r
110 \r
111       $scope.parameterizeData = function(path) {\r
112           var parameterList = null;\r
113           \r
114           $scope.$broadcast('GET_PARAMETER_LIST', function(parameters) {\r
115               parameterList = parameters;\r
116           });\r
117 \r
118           return HistoryServices.parametrizeData(parameterList.list, path);\r
119       };\r
120 \r
121       eventDispatcher.registerHandler(constants.EV_SRC_MAIN, statusChangeEvent);\r
122       eventDispatcher.registerHandler(constants.EV_FILL_PATH, fillPathIdentifiersByKey);\r
123       eventDispatcher.registerHandler(constants.EV_LIST_CHANGED, fillPathIdentifiersByListData);\r
124 \r
125       var processingModulesCallback = function(e) {\r
126           $scope.status = {\r
127               isWorking: true,\r
128               type: 'warning',\r
129               msg: 'PROCESSING_MODULES',\r
130               rawMsg: e || ''\r
131           };\r
132       };\r
133 \r
134       $scope.processingModulesSuccessCallback = function(e) {\r
135           $scope.status = {\r
136               type: 'success',\r
137               msg: 'PROCESSING_MODULES_SUCCESS',\r
138               rawMsg: e || ''\r
139           };\r
140       };\r
141 \r
142       $scope.processingModulesErrorCallback = function(e) {\r
143           $scope.status = {\r
144               type: 'danger',\r
145               msg: 'PROCESSING_MODULES_ERROR',\r
146               rawMsg: e || ''\r
147           };\r
148       };\r
149 \r
150       var requestWorkingCallback = function() {\r
151           $scope.status = {\r
152               isWorking: true,\r
153               type: 'warning',\r
154               msg: 'SEND_WAIT'\r
155           };\r
156       };\r
157 \r
158       var requestSuccessCallback = function() {\r
159           $scope.status = {\r
160               type: 'success',\r
161               msg: 'SEND_SUCCESS'\r
162           };\r
163       };\r
164 \r
165       $scope.setStatusMessage = function(type, msg, e){\r
166           $scope.status = {\r
167               type: type,\r
168               msg: msg,\r
169               rawMsg: e || ''\r
170           };\r
171       };\r
172 \r
173       var requestErrorCallback = function(e, resp) {\r
174         var errorMessages = yangUtils.errorMessages,\r
175             msg = errorMessages.method[resp.config.method] ? errorMessages.method[resp.config.method][resp.status] ? errorMessages.method[resp.config.method][resp.status] : 'SEND_ERROR' : 'SEND_ERROR';\r
176 \r
177           $scope.status = {\r
178               type: 'danger',\r
179               msg: msg,\r
180               rawMsg: e.toString()\r
181           };\r
182       };\r
183 \r
184       var setCustFunct = function(apis) {\r
185           pluginHandler.plugAll($scope.apis, $scope);\r
186       };\r
187       \r
188       $scope.removeMountPointPath = function(pathArray){\r
189           var mpPathIndex = pathArray.length;\r
190 \r
191           pathArray.some(function(pathElem, index) {\r
192               var isMPElem = pathElem.name === mountPrefix;\r
193               if(isMPElem) {\r
194                   mpPathIndex = index;\r
195               }\r
196 \r
197               return isMPElem;\r
198           });\r
199 \r
200           var pathCopy = pathArray.slice(0, mpPathIndex);\r
201           return pathCopy;\r
202       };\r
203 \r
204       $scope.invalidatePreview = function() {\r
205           $scope.previewValidity = false;\r
206       };\r
207 \r
208       $scope.validatePreview = function() {\r
209           $scope.previewValidity = true;\r
210       };\r
211 \r
212       $scope.isPreviewValid = function() {\r
213           return $scope.previewValidity;\r
214       };\r
215 \r
216       $scope.preview = function() {\r
217           if($scope.isPreviewValid()) {\r
218               $scope.invalidatePreview();\r
219 \r
220               $timeout(function () {\r
221                   $scope.buildPreview();\r
222                   $scope.validatePreview();\r
223               }, $scope.previewDelay);\r
224           }\r
225       };\r
226 \r
227       $scope.buildPreview = function() {\r
228           if($scope.node) {\r
229               var reqString = $scope.selSubApi.buildApiRequestString(),\r
230                   requestData = {};\r
231 \r
232               // create request\r
233               $scope.node.buildRequest(reqBuilder, requestData, $scope.node.module);\r
234               // update request data (remove envelope from POST request etc.)\r
235               requestData = yangUtils.prepareRequestData(requestData, $scope.selectedOperation, reqString, $scope.selSubApi);\r
236 \r
237               var jsonRequestData = requestData ? JSON.stringify(requestData, null, 4) : '';\r
238               // preview data\r
239               $scope.previewValue = $scope.selApi.basePath + reqString;\r
240               $scope.previewValue = $scope.previewValue + '\r\n' + jsonRequestData;\r
241           } else {\r
242               $scope.previewValue = '';\r
243           }\r
244       };\r
245 \r
246       $scope.getNodeName = function(localeLabel, label) {\r
247           var localeResult = $filter('translate')(localeLabel);\r
248           return localeResult.indexOf(constants.LOCALE_PREFIX) === 0 ? label : localeResult;\r
249       };\r
250 \r
251       $scope.showCustFunctButton = function() {\r
252           return $scope.selCustFunct === null;\r
253       };\r
254 \r
255       $scope.showCustFunctCancelButton = function() {\r
256           return $scope.selCustFunct !== null;\r
257       };\r
258 \r
259       $scope.unsetCustomFunctionality = function() {\r
260           if($scope.selCustFunct) {\r
261               customFunctUnsetter.unset($scope.selCustFunct, $scope);\r
262           }\r
263           $scope.selCustFunct = null;\r
264           $scope.treeName = $scope.defaultTreeName;\r
265           $scope.selCustFunctButts = [];\r
266       };\r
267 \r
268       var loadApis = function loadApis() {\r
269           $scope.apis = [];\r
270           $scope.allNodes = [];\r
271           $scope.treeApis = [];\r
272           $scope.augmentations = {};\r
273 \r
274           processingModulesCallback();\r
275           yangUtils.generateNodesToApis(function(apis, allNodes, augGroups) {\r
276               $scope.apis = apis;\r
277               $scope.allNodes = allNodes;\r
278               $scope.augmentations = augGroups;\r
279               console.info('got data', $scope.apis, $scope.allNodes, $scope.augmentations);\r
280               $scope.treeApis = yangUtils.generateApiTreeData(apis);\r
281               console.info('tree api', $scope.treeApis);\r
282               $scope.processingModulesSuccessCallback();\r
283 \r
284               setCustFunct($scope.apis);\r
285               $scope.$broadcast('LOAD_REQ_DATA');\r
286           }, function(e) {\r
287               $scope.processingModulesErrorCallback(e);\r
288           });\r
289       };\r
290 \r
291       $scope.isMountPointSelected = function() {\r
292           return $scope.selCustFunct.label === 'YANGUI_CUST_MOUNT_POINTS';\r
293       };\r
294 \r
295       $scope.dismissStatus = function() {\r
296           $scope.status = {};\r
297       };\r
298 \r
299       $scope.setNode = function() {\r
300           $scope.node = $scope.selSubApi.node;\r
301       };\r
302 \r
303       $scope.setApiNode = function(indexApi, indexSubApi) {\r
304           $scope.selectedOperation = null;\r
305 \r
306           if(indexApi !== undefined && indexSubApi !== undefined ) {\r
307               $scope.selApi = $scope.apis[indexApi];\r
308               $scope.selSubApi = $scope.selApi.subApis[indexSubApi];\r
309 \r
310               $scope.apiType = $scope.selSubApi.pathArray[0].name === 'operational' ? 'operational/':'';\r
311               $scope.node = $scope.selSubApi.node;\r
312               $scope.filterRootNode = $scope.selSubApi.node;\r
313               $scope.node.clear();\r
314 \r
315               if($scope.selSubApi && $scope.selSubApi.operations) {\r
316                   $scope.selectedOperation = $scope.selSubApi.operations[0];\r
317               }\r
318               $scope.$broadcast('EV_REFRESH_LIST_INDEX');\r
319               designUtils.triggerWindowResize(100);\r
320           } else {\r
321               $scope.selApi = null;\r
322               $scope.selSubApi = null;\r
323               $scope.node = null;\r
324           }\r
325       };\r
326 \r
327       $scope.loadController = function() {\r
328           $scope.flows = [];\r
329           $scope.devices = [];\r
330           $scope.apis = [];\r
331           $scope.previewVisible = false;\r
332           $scope.previewValue = '';\r
333           $scope.popupData = { show: false};\r
334           $scope.dataToFill = '';\r
335           $scope.apiToFill = '';\r
336 \r
337           loadApis();\r
338 \r
339           $rootScope.$on('$includeContentLoaded', function() {\r
340               designUtils.setDraggablePopups();\r
341               //designUtils.getHistoryPopUpWidth();\r
342           });\r
343       };\r
344 \r
345       $scope.executeOperation = function(operation, callback, reqPath) {\r
346           var reqString = $scope.selSubApi.buildApiRequestString(),\r
347               requestData = {},\r
348               preparedRequestData = {},\r
349               headers = null;\r
350 \r
351           reqString = reqPath ? reqPath.slice($scope.selApi.basePath.length, reqPath.length) : reqString;\r
352           var requestPath = $scope.selApi.basePath + reqString;\r
353 \r
354           $scope.node.buildRequest(reqBuilder, requestData, $scope.node.module);\r
355           angular.copy(requestData, preparedRequestData);\r
356 \r
357           preparedRequestData = yangUtils.prepareRequestData(preparedRequestData, operation, reqString, $scope.selSubApi);\r
358 \r
359           operation = yangUtils.prepareOperation(operation);\r
360           headers = yangUtils.prepareHeaders(preparedRequestData);\r
361 \r
362           requestWorkingCallback();\r
363 \r
364           YangUtilsRestangular.one('restconf').customOperation(operation.toLowerCase(), reqString, null, headers, preparedRequestData).then(\r
365               function(data) {\r
366                   if(operation === 'REMOVE'){\r
367                       $scope.node.clear();\r
368                   }\r
369 \r
370                   if(data) {\r
371                       $scope.node.clear();\r
372                       var props = Object.getOwnPropertyNames(data);\r
373 \r
374                       props.forEach(function(p) { //fill each property - needed for root mountpoint node, in other cases there should be only one property anyway\r
375                           $scope.node.fill(p, data[p]);\r
376                       });\r
377                       $scope.node.expanded = true;\r
378                   }\r
379                   \r
380                   requestSuccessCallback();\r
381                   //TODO after first GET we have set $scope.node with data so build from the top of this function return requestData\r
382                   if(operation === 'GET'){\r
383                       requestData = {};\r
384                   }\r
385                   $scope.$broadcast('YUI_ADD_TO_HISTORY', 'success', data, preparedRequestData, operation, requestPath);\r
386 \r
387                   if ( angular.isFunction(callback) ) {\r
388                       callback(data);\r
389                   }\r
390 \r
391                   if($scope.previewVisible === true){\r
392                       $scope.preview();\r
393                   }\r
394 \r
395               }, function(resp) {\r
396                   var errorMsg = '';\r
397 \r
398                   if(resp.data && resp.data.errors && resp.data.errors.error && resp.data.errors.error.length) {\r
399                       errorMsg = ': ' + resp.data.errors.error.map(function(e) {\r
400                           return e['error-message'];\r
401                       }).join(', ');\r
402                   }\r
403 \r
404                   requestErrorCallback(errorMsg, resp);\r
405                   \r
406                   //TODO after first GET we have set $scope.node with data so build from the top of this function return requestData\r
407                   if(operation === 'GET'){\r
408                       requestData = {};\r
409                   }\r
410                   $scope.$broadcast('YUI_ADD_TO_HISTORY', 'error', resp.data, preparedRequestData, operation, requestPath);\r
411 \r
412                   console.info('error sending request to',$scope.selSubApi.buildApiRequestString(),'reqString',reqString,'got',resp.status,'data',resp.data);\r
413               }\r
414           );\r
415       };\r
416 \r
417       $scope.executeCustFunctionality = function(custFunct) {\r
418           custFunct.runCallback($scope);\r
419           $scope.selCustFunct = custFunct;\r
420       };\r
421 \r
422       $scope.fillNodeData = function(pathElem, identifier) {\r
423           if($scope.selSubApi && $scope.selSubApi.storage === 'config' &&\r
424             $scope.selSubApi.pathArray.indexOf(pathElem) === ($scope.selSubApi.pathArray.length - 1)) {\r
425               pathUtils.fillListNode($scope.node, identifier.label, identifier.value);\r
426           }\r
427       };\r
428 \r
429       $scope.showPreview = function() {\r
430           $scope.previewVisible = true;\r
431           $scope.buildPreview();\r
432       };\r
433 \r
434       $scope.hidePreview = function() {\r
435           $scope.previewVisible = false;\r
436       };\r
437 \r
438       $scope.copyReqPathToClipboard = function(req){\r
439           var reqPath = req ? req.api.parent.basePath : $scope.selApi.basePath;\r
440 \r
441           reqPath += req ? req.parametrizedPath ? $scope.parameterizeData(req.parametrizedPath) : req.api.buildApiRequestString() : $scope.selSubApi.buildApiRequestString();\r
442 \r
443           return reqPath;\r
444       };\r
445 \r
446       $scope.fallback = function(path) {\r
447           window.prompt($filter('translate')('YANGUI_CLIPBOARD_ALERT_MSG'), path);\r
448       };\r
449 \r
450       $scope.buildRoot = function() {\r
451           $scope.node.buildRequest(reqBuilder, {}, $scope.node.module);\r
452       };\r
453 \r
454       $scope.changePathInPreview = function() {\r
455           $scope.preview();\r
456       };\r
457 \r
458       $scope.fillApiAndData = function(req, dataForView, fromSetCustApi) {\r
459         var path = req.parametrizedPath ? req.parametrizedPath : req.path,\r
460             rdata = req.receivedData,\r
461             sdata = dataForView ? parsingJson.parseJson(dataForView) : req.sentData;\r
462 \r
463         if(path) {\r
464             $scope.fillApi(path, fromSetCustApi);\r
465             \r
466             if($scope.node && (rdata || sdata)) {\r
467               if(rdata) {\r
468                  $scope.fillApiData(rdata);\r
469               }\r
470 \r
471               if(sdata) {\r
472                  $scope.fillApiData(sdata); \r
473               }\r
474             }\r
475         }\r
476 \r
477         $scope.selectedOperation = req.method;\r
478       };\r
479 \r
480       $scope.fillStandardApi = function(searchPath, fillPath, fromSetCustApi) {\r
481           fillPath = fillPath || searchPath;\r
482 \r
483           var moduleNew = pathUtils.getModuleNameFromPath(searchPath),\r
484               moduleOld = $scope.selSubApi && $scope.selSubApi.pathArray.length > 1 ? $scope.selSubApi.pathArray[1].module : null;\r
485 \r
486           if((fromSetCustApi && searchPath.indexOf(mountPrefix) === -1 && $scope.selCustFunct && $scope.selCustFunct.label === 'YANGUI_CUST_MOUNT_POINTS') ||\r
487             (fromSetCustApi && searchPath.indexOf(mountPrefix) !== -1 && $scope.selCustFunct && $scope.selCustFunct.label === 'YANGUI_CUST_MOUNT_POINTS' && moduleNew !== moduleOld)){\r
488               $scope.unsetCustomFunctionality();\r
489           }\r
490 \r
491           var apiIndexes = fromSetCustApi ? pathUtils.searchNodeByPath(searchPath, $scope.treeApis, $scope.treeRows) : pathUtils.searchNodeByPath(mountPointsConnector.alterMpPath(searchPath), $scope.treeApis, $scope.treeRows);\r
492 \r
493           if(apiIndexes) {\r
494               $scope.setApiNode(apiIndexes.indexApi, apiIndexes.indexSubApi);\r
495               if($scope.selSubApi) {\r
496                   pathUtils.fillPath($scope.selSubApi.pathArray, fillPath);\r
497               }\r
498           }\r
499       };\r
500 \r
501       $scope.fillApi = function(path, fromSetCustApi) {\r
502           var parameterizedPath = $scope.parameterizeData(path);\r
503               fillPath = parameterizedPath;\r
504 \r
505           if(parameterizedPath.indexOf(mountPrefix) !== -1) {\r
506               fillPath = parameterizedPath.replace('restconf/config','restconf/operational');\r
507           }\r
508 \r
509           $scope.fillStandardApi(fillPath, null, fromSetCustApi);\r
510 \r
511           if(path.indexOf(mountPrefix) !== -1 && $scope.selSubApi) {\r
512               $scope.selSubApi.pathArray = $scope.removeMountPointPath($scope.selSubApi.pathArray);\r
513               $scope.selectMP();\r
514 \r
515               $scope.mpSynchronizer.waitFor(function () {\r
516                   $scope.fillMPApi(parameterizedPath);\r
517               });\r
518           }\r
519       };\r
520 \r
521       $scope.selectMP = function() {\r
522           var mpCF = custFunctFact.getMPCustFunctionality($scope.selSubApi.custFunct);\r
523           if(mpCF) {\r
524               $scope.executeCustFunctionality(mpCF);\r
525           } else {\r
526               console.warn('Mountpoint custom functionality for api', $scope.selSubApi.buildApiRequestString(), ' is not set');\r
527           }\r
528       };\r
529 \r
530       $scope.fillMPApi = function(path) {\r
531           var mpPath = mountPointsConnector.alterMpPath(path),\r
532               apiIndexes = pathUtils.searchNodeByPath(mpPath, $scope.treeApis, $scope.treeRows);\r
533           if(apiIndexes) {\r
534               $scope.setApiNode(apiIndexes.indexApi, apiIndexes.indexSubApi);\r
535               if($scope.selSubApi) {\r
536                   pathUtils.fillPath($scope.selSubApi.pathArray, path);\r
537               }\r
538           }\r
539       };\r
540 \r
541       $scope.fillApiData = function(data){\r
542           var parametrizedData = $scope.parameterizeData(data),\r
543               obj = null;\r
544 \r
545           obj = typeof parametrizedData === "object" ? parametrizedData : parsingJson.parseJson(parametrizedData);\r
546 \r
547           if (obj !== null && typeof obj === "object") {\r
548               var p = Object.keys(obj)[0];\r
549               $scope.node.fill(p, obj[p]);\r
550           }\r
551       };\r
552 \r
553       $scope.show_add_data_popup = function(){\r
554           $scope.popupData.show = true;\r
555       };\r
556 \r
557       $scope.close_popup = function(popObj){\r
558           popObj.show = false;\r
559       };\r
560 \r
561       $scope.tabs = function(event, index){\r
562         var tabDom = $(event.target).closest('.tabs');\r
563 \r
564         tabDom.find(' > .tab-content').children('.tab-pane')\r
565           .removeClass('active')\r
566           .eq(index).addClass('active');\r
567 \r
568         tabDom.find('> .nav-tabs').children('li')\r
569           .removeClass('btn-selected')\r
570           .eq(index).addClass('btn-selected');\r
571       };\r
572 \r
573       $scope.initMp = function(mountPointStructure, mountPointTreeApis, mountPointApis, augmentations){\r
574           dataBackuper.storeFromScope(['treeApis', 'treeRows', 'apis', 'node', 'selApi', 'selSubApi', 'augmentations'], $scope);\r
575           $scope.filterRootNode = null;\r
576           $scope.node = null;\r
577           $scope.treeApis = mountPointTreeApis;\r
578           $scope.apis = mountPointApis;\r
579           $scope.processingModulesSuccessCallback();\r
580           $scope.augmentations = augmentations;\r
581           $scope.$broadcast('REFRESH_HISTORY_REQUEST_APIS');\r
582       };\r
583 \r
584       $scope.showModalRequestWin = function(){\r
585         $scope.$broadcast('LOAD_REQ_DATA');\r
586       };\r
587 \r
588       $scope.$on('SET_SCOPE_TREE_ROWS', function(e, rows){\r
589         $scope.treeRows = rows;\r
590       });\r
591 \r
592       $scope.__test = {\r
593           loadApis: loadApis,\r
594           processingModulesErrorCallback: $scope.processingModulesErrorCallback,\r
595           requestErrorCallback: requestErrorCallback,\r
596           requestSuccessCallback: requestSuccessCallback,\r
597           requestWorkingCallback: requestWorkingCallback,\r
598           processingModulesCallback: processingModulesCallback,\r
599           processingModulesSuccessCallback: $scope.processingModulesSuccessCallback\r
600       };\r
601 \r
602       $scope.loadController();\r
603 \r
604     }]);\r
605 \r
606 \r
607 \r
608 \r
609 \r
610 \r
611 \r
612 \r
613 \r
614 \r
615 \r
616 \r
617 \r
618 \r
619 \r
620 \r
621 \r
622 \r
623 \r
624 \r
625 \r
626 \r
627 \r
628 \r
629 \r
630   yangui.register.filter('onlyConfigStmts', function(nodeUtils){\r
631         return function(nodes){\r
632             \r
633             if(nodes.length) {\r
634                 nodes = nodes.filter(function(n){\r
635                     return nodeUtils.isOnlyOperationalNode(n);\r
636                 });\r
637             }\r
638 \r
639             return nodes;\r
640         };\r
641     });\r
642 \r
643 });\r