2 'app/yangman/controllers/params-admin.controller',
3 ], function (ParamsAdminCtrl) {
6 angular.module('app.yangman').controller('RequestHeaderCtrl', RequestHeaderCtrl);
8 RequestHeaderCtrl.$inject = [
9 '$mdDialog', '$mdToast', '$scope', '$rootScope', 'ENV', 'YangmanService', 'ParametersService', 'PathUtilsService',
10 'RequestsService', '$filter', 'DataBackupService',
13 function RequestHeaderCtrl($mdDialog, $mdToast, $scope, $rootScope, ENV, YangmanService, ParametersService, PathUtilsService,
14 RequestService, $filter, DataBackupService) {
15 var requestHeader = this;
17 requestHeader.allOperations = ['GET', 'POST', 'PUT', 'DELETE'];
18 requestHeader.selectedOperationsList = [];
19 requestHeader.selectedOperation = null;
20 requestHeader.requestUrl = '';
21 requestHeader.selectedPluginsButtons = [];
22 requestHeader.selectedPlugin = null;
23 requestHeader.statusObj = null;
24 requestHeader.executingProgress = false;
27 requestHeader.executeOperation = executeOperation;
28 requestHeader.executePluginFunctionality = executePluginFunctionality;
29 requestHeader.fillNodeData = fillNodeData;
30 requestHeader.changeDataType = changeDataType;
31 requestHeader.prepareDataAndExecute = prepareDataAndExecute;
32 requestHeader.initMountPoint = initMountPoint;
33 requestHeader.setJsonView = setJsonView;
34 requestHeader.setRequestUrl = setRequestUrl;
35 requestHeader.showParamsAdmin = showParamsAdmin;
36 requestHeader.saveRequestToCollection = saveRequestToCollection;
37 requestHeader.unsetPluginFunctionality = unsetPluginFunctionality;
41 * Set selected operations based on data store
43 $scope.$on('SET_SEL_OPERATIONS', function (event, operations, setUrl) {
44 setAllowedMethods(operations);
52 * Watching for changes in shown detail data type (radio button)
54 $scope.$on('YANGMAN_HEADER_INIT', function (event, args) {
56 setRequestUrl(args.params.path);
57 setRequestMethod(args.params.method);
58 setRequestStatus(args.params.statusObj);
60 (args.cbk || angular.noop)();
63 $scope.$on('YANGMAN_FILL_NODE_FROM_REQ', function (event, args) {
64 setNodeDataFromRequestData(args.params.requestUrl, args.params.leftpanel);
65 (args.cbk || angular.noop)();
68 $scope.$on('YANGMAN_EXECUTE_WITH_DATA', executeWithData);
73 function executeWithData(event, args) {
74 executeOperation(args.params.data ? angular.fromJson(args.params.data) : {}, args.cbk);
77 function setRequestMethod(method){
78 requestHeader.selectedOperation = method;
81 function setRequestStatus(statusObj){
82 requestHeader.statusObj = statusObj;
86 * Show popup for parameters administration
89 function showParamsAdmin(event) {
91 controller: ParamsAdminCtrl,
92 controllerAs: 'paramsAdmin',
93 templateUrl: $scope.globalViewPath + 'popup/parameters-admin.tpl.html',
94 parent: angular.element('#yangmanModule'),
96 clickOutsideToClose: true,
98 parametersList: $scope.parametersList,
100 }).then(function (parametersList){
101 $scope.setParametersList(parametersList);
107 * Method for selecting correct json view by selected operation
109 function setJsonView(){
110 var both = ['PUT', 'POST'];
112 if ( both.indexOf(requestHeader.selectedOperation) > -1 ){
113 $scope.setJsonView(true, true);
115 $scope.setJsonView(true, false);
118 // sendRequestData({}, 'RECEIVED');
122 * Change displayed data type to json or form, after switching set current data to be displayed
124 function changeDataType(){
125 $scope.switchSection('rightPanelSection', requestHeader.selectedShownDataType);
126 requestHeader.setRequestUrl();
128 // if changing to json, fill codemirror data
129 if ( requestHeader.selectedShownDataType === 'req-data' && $scope.node ){
131 sendRequestData($scope.buildRootRequest(), 'SENT');
134 // if changing to form, try to fill node data
135 if (requestHeader.selectedShownDataType === 'form') {
140 dataType = requestHeader.selectedOperation === 'GET' ? 'RECEIVED' : 'SENT';
143 $scope.rootBroadcast('YANGMAN_GET_CODEMIRROR_DATA_' + dataType, params);
144 reqData = params.reqData ? angular.fromJson(params.reqData) : {};
145 setNodeDataFromRequestData(requestHeader.requestUrl);
148 YangmanService.fillNodeFromResponse($scope.node, reqData);
149 $scope.node.expanded = true;
155 * Send data to codemirror
158 function sendRequestData(data, type){
159 $scope.rootBroadcast('YANGMAN_SET_CODEMIRROR_DATA_' + type, { data: JSON.stringify(data, null, 4) });
162 function sendErrorData(response) {
163 $scope.rootBroadcast('YANGMAN_SET_ERROR_DATA', response);
167 * Create empty parameters list, load from local storage and set to $scope
169 function initParams(){
170 $scope.parametersList.loadListFromStorage();
177 setAllowedMethods(requestHeader.allOperations);
179 requestHeader.selectedShownDataType = $scope.rightPanelSection;
183 * Set allowed operations for request
186 function setAllowedMethods(operations){
187 requestHeader.selectedOperationsList = operations.length ? operations : requestHeader.allOperations;
188 if (operations.indexOf(requestHeader.selectedOperation) === -1){
189 requestHeader.selectedOperation = requestHeader.selectedOperationsList[0];
194 * Set header request url if json selected
196 function setRequestUrl(path){
197 requestHeader.requestUrl = path || ($scope.selectedSubApi ?
198 ENV.getBaseURL('MD_SAL') + '/restconf/' + $scope.selectedSubApi.buildApiRequestString() : '');
203 * Try to set api, module, dataStore and node, if api indexes for request url available
204 * and set (or unset) module detail panel to be displayed
205 * @param requestUrl url to try to find
206 * @param leftpanel index of main left tabs to be displayed (we dont want to display module detail in all cases)
208 function setNodeDataFromRequestData(requestUrl, leftpanel){
210 $scope.rootBroadcast('YANGMAN_GET_API_TREE_DATA', null, function (treeApis) {
212 PathUtilsService.searchNodeByPath(requestUrl, treeApis, null, true, true);
217 $scope.apis[apisIndexes.indexApi],
218 $scope.apis[apisIndexes.indexApi].subApis[apisIndexes.indexSubApi]
222 $scope.setModule($filter('filter')(treeApis, { label: $scope.selectedApi.module })[0]);
227 $scope.selectedModule.children,
228 { label: $scope.selectedSubApi.storage })[0],
234 $scope.setNode($scope.selectedSubApi.node);
237 PathUtilsService.fillPath($scope.selectedSubApi.pathArray, requestUrl);
243 function saveRequestToCollection(event) {
244 var historyReq = RequestService.createHistoryRequest(null, null, requestHeader.requestUrl,
245 requestHeader.selectedOperation, '', '', ''),
248 if ( requestHeader.selectedShownDataType === 'req-data' ) {
249 var params = { reqData: null };
250 $scope.rootBroadcast('YANGMAN_GET_CODEMIRROR_DATA_SENT', params);
251 reqData = params.reqData ? angular.fromJson(params.reqData) : {};
254 var historyReqData = YangmanService.prepareAllRequestData(
256 $scope.selectedSubApi,
257 requestHeader.selectedOperation,
259 requestHeader.selectedShownDataType,
260 requestHeader.requestUrl,
265 historyReq.setExecutionData(historyReqData.reqData, {}, '');
267 $scope.rootBroadcast('YANGMAN_SAVE_REQUEST_TO_COLLECTION', { event: event, reqObj: historyReq });
270 function showRequestProgress(){
271 requestHeader.executingProgress = true;
275 function finishRequestProgress(message){
276 requestHeader.executingProgress = false;
280 // .textContent(message)
281 // .position('bottom right')
282 // .parent(angular.element('.yangmanModule__right-panel__header'))
289 * Execute request operation
291 function executeOperation(requestData, executeCbk){
293 showRequestProgress();
295 setRequestUrl(requestHeader.selectedShownDataType === 'req-data' ? requestHeader.requestUrl : null);
297 var historyReq = RequestService.createHistoryRequest(null, null, requestHeader.requestUrl,
298 requestHeader.selectedOperation, '', '', '');
300 YangmanService.executeRequestOperation(
302 $scope.selectedSubApi,
303 requestHeader.selectedOperation,
305 requestHeader.selectedShownDataType,
306 requestHeader.requestUrl,
308 $scope.parametersList,
314 * Success callback after executin operation
318 function executeReqSuccCbk(reqInfo, response) {
319 var preparedReceivedData = YangmanService.prepareReceivedData(
321 requestHeader.selectedOperation,
322 response.data ? response.data.plain() : {},
323 reqInfo.requestSrcData,
324 requestHeader.selectedShownDataType
327 requestHeader.statusObj = reqInfo;
331 // create and set history request
332 historyReq.setExecutionData(
333 reqInfo.requestSrcData,
334 preparedReceivedData,
341 if (requestHeader.selectedShownDataType === 'req-data'){
343 setNodeDataFromRequestData(requestHeader.requestUrl);
344 sendRequestData(preparedReceivedData, 'RECEIVED');
345 sendRequestData(reqInfo.requestSrcData || {}, 'SENT');
351 YangmanService.fillNodeFromResponse(
356 $scope.node.expanded = true;
357 $scope.rootBroadcast('YANGMAN_DISABLE_ADDING_LIST_ELEMENT');
358 sendRequestData(YangmanService.checkRpcReceivedData(preparedReceivedData, $scope.node), 'RECEIVED');
362 $scope.rootBroadcast('YANGMAN_SAVE_EXECUTED_REQUEST', historyReq);
363 (executeCbk || angular.noop)(historyReq);
365 finishRequestProgress('dfsaf dasf adsfx');
370 * Error callback after executin operation
374 function executeReqErrCbk(reqInfo, response) {
375 requestHeader.statusObj = reqInfo;
377 historyReq.setExecutionData(
378 reqInfo.requestSrcData, null,
384 $scope.rootBroadcast('YANGMAN_SAVE_EXECUTED_REQUEST', historyReq);
386 //setNodeDataFromRequestData(requestHeader.requestUrl);
389 // try to fill code mirror editor
390 sendRequestData(response.data, 'RECEIVED');
391 sendErrorData(response.data);
393 (executeCbk || angular.noop)(historyReq);
395 finishRequestProgress('sadfsadf adsf');
402 * TODO :: description
406 function fillNodeData(pathElem, identifier) {
407 if ($scope.selectedSubApi && $scope.selectedSubApi.storage === 'config' &&
408 $scope.selectedSubApi.pathArray.indexOf(pathElem) === ($scope.selectedSubApi.pathArray.length - 1)) {
409 PathUtilsService.fillListNode($scope.node, identifier.label, identifier.value);
414 * Check data before executin operations
416 function prepareDataAndExecute(cbk){
419 if ( requestHeader.requestUrl.length ) {
421 if ( requestHeader.selectedShownDataType === 'req-data' ) {
423 var params = { reqData: null };
424 $scope.rootBroadcast('YANGMAN_GET_CODEMIRROR_DATA_SENT', params);
425 executeOperation(params.reqData ? angular.fromJson(params.reqData) : {}, cbk);
427 executeOperation({}, cbk);
433 * Mount point initialization
434 * @param mountPointStructure
435 * @param mountPointTreeApis
436 * @param mountPointApis
437 * @param augmentations
439 function initMountPoint(mountPointTreeApis, mountPointApis, augmentations, reqObj){
440 DataBackupService.storeFromScope(
442 'selectedDatastore', 'node', 'apis',
443 'selectedApi', 'selectedSubApi', 'augmentations', 'selectedModule',
449 $scope.rootBroadcast('YANGMAN_GET_API_TREE_DATA', null, function (treeApis) {
450 DataBackupService.storeFromScope(
452 { treeApis: treeApis },
457 $scope.setNode(null);
458 $scope.setModule(null);
459 $scope.setGlobalParams(mountPointApis, augmentations);
460 $scope.setDataStore(null);
461 requestHeader.statusObj = reqObj;
462 $scope.rootBroadcast('YANGMAN_SET_API_TREE_DATA', mountPointTreeApis);
466 * Executing custom plugin callback
467 * @param customPlugin
469 function executePluginFunctionality(customPlugin){
470 requestHeader.selectedPlugin = customPlugin;
471 customPlugin.runCallback({ scope: $scope, controller: requestHeader });
475 * Unset custom plugin functionality - get back major params from scope
477 function unsetPluginFunctionality(){
478 if ( requestHeader.selectedPlugin ) {
479 $scope.unsetPlugin(requestHeader);
482 requestHeader.selectedPlugin = null;
483 requestHeader.selectedPluginsButtons = [];