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',
10 'PathUtilsService', 'RequestsService', '$filter', 'DataBackupService',
13 function RequestHeaderCtrl($mdDialog, $mdToast, $scope, $rootScope, ENV, YangmanService, ParametersService,
14 PathUtilsService, 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;
26 requestHeader.executeOperation = executeOperation;
27 requestHeader.executePluginFunctionality = executePluginFunctionality;
28 requestHeader.fillNodeData = fillNodeData;
29 requestHeader.changeDataType = changeDataType;
30 requestHeader.prepareDataAndExecute = prepareDataAndExecute;
31 requestHeader.initMountPoint = initMountPoint;
32 requestHeader.setJsonView = setJsonView;
33 requestHeader.setRequestUrl = setRequestUrl;
34 requestHeader.showParamsAdmin = showParamsAdmin;
35 requestHeader.saveRequestToCollection = saveRequestToCollection;
36 requestHeader.unsetPluginFunctionality = unsetPluginFunctionality;
40 * Set selected operations based on data store
42 $scope.$on('SET_SEL_OPERATIONS', function (event, operations, setUrl) {
43 setAllowedMethods(operations);
51 * Watching for changes in shown detail data type (radio button)
53 $scope.$on('YANGMAN_HEADER_INIT', function (event, args) {
55 setRequestUrl(args.params.path);
56 setRequestMethod(args.params.method);
57 setRequestStatus(args.params.statusObj);
59 (args.cbk || angular.noop)();
62 $scope.$on('YANGMAN_FILL_NODE_FROM_REQ', function (event, args) {
63 setNodeDataFromRequestData(args.params.requestUrl, args.params.leftpanel);
64 (args.cbk || angular.noop)();
67 $scope.$on('YANGMAN_EXECUTE_WITH_DATA', executeWithData);
72 function executeWithData(event, args) {
73 executeOperation(args.params.data ? angular.fromJson(args.params.data) : {}, args.cbk);
76 function setRequestMethod(method){
77 requestHeader.selectedOperation = method;
80 function setRequestStatus(statusObj){
81 requestHeader.statusObj = statusObj;
85 * Show popup for parameters administration
88 function showParamsAdmin(event) {
90 controller: ParamsAdminCtrl,
91 controllerAs: 'paramsAdmin',
92 templateUrl: $scope.globalViewPath + 'popup/parameters-admin.tpl.html',
93 parent: angular.element('#yangmanModule'),
95 clickOutsideToClose: true,
97 parametersList: $scope.parametersList,
99 }).then(function (parametersList){
100 $scope.setParametersList(parametersList);
106 * Method for selecting correct json view by selected operation
108 function setJsonView(){
109 var both = ['PUT', 'POST'];
111 if ( both.indexOf(requestHeader.selectedOperation) > -1 ){
112 $scope.setJsonView(true, true);
114 $scope.setJsonView(true, false);
117 // sendRequestData({}, 'RECEIVED');
121 * Change displayed data type to json or form, after switching set current data to be displayed
123 function changeDataType(){
124 $scope.switchSection('rightPanelSection', requestHeader.selectedShownDataType);
125 requestHeader.setRequestUrl();
127 // if changing to json, fill codemirror data
128 if ( requestHeader.selectedShownDataType === 'req-data' && $scope.node ){
130 sendRequestData($scope.buildRootRequest(), 'SENT');
133 // if changing to form, try to fill node data
134 if (requestHeader.selectedShownDataType === 'form') {
139 dataType = requestHeader.selectedOperation === 'GET' ? 'RECEIVED' : 'SENT';
142 $scope.rootBroadcast('YANGMAN_GET_CODEMIRROR_DATA_' + dataType, params);
143 reqData = params.reqData ? angular.fromJson(params.reqData) : {};
144 setNodeDataFromRequestData(requestHeader.requestUrl);
147 YangmanService.fillNodeFromResponse($scope.node, reqData);
148 $scope.node.expanded = true;
154 * Send data to codemirror
157 function sendRequestData(data, type){
158 $scope.rootBroadcast('YANGMAN_SET_CODEMIRROR_DATA_' + type, { data: JSON.stringify(data, null, 4) });
161 function sendErrorData(response) {
162 $scope.rootBroadcast('YANGMAN_SET_ERROR_DATA', response);
166 * Create empty parameters list, load from local storage and set to $scope
168 function initParams(){
169 $scope.parametersList.loadListFromStorage();
176 setAllowedMethods(requestHeader.allOperations);
178 requestHeader.selectedShownDataType = $scope.rightPanelSection;
182 * Set allowed operations for request
185 function setAllowedMethods(operations){
186 requestHeader.selectedOperationsList = operations.length ? operations : requestHeader.allOperations;
187 if (operations.indexOf(requestHeader.selectedOperation) === -1){
188 requestHeader.selectedOperation = requestHeader.selectedOperationsList[0];
193 * Set header request url if json selected
195 function setRequestUrl(path){
196 requestHeader.requestUrl = path || ($scope.selectedSubApi ?
197 ENV.getBaseURL('MD_SAL') + '/restconf/' + $scope.selectedSubApi.buildApiRequestString() : '');
202 * Try to set api, module, dataStore and node, if api indexes for request url available
203 * and set (or unset) module detail panel to be displayed
204 * @param requestUrl url to try to find
205 * @param leftpanel index of main left tabs to be displayed (we dont want to display module detail in all cases)
207 function setNodeDataFromRequestData(requestUrl, leftpanel){
209 $scope.rootBroadcast('YANGMAN_GET_API_TREE_DATA', null, function (treeApis) {
211 PathUtilsService.searchNodeByPath(requestUrl, treeApis, null, true, true);
216 $scope.apis[apisIndexes.indexApi],
217 $scope.apis[apisIndexes.indexApi].subApis[apisIndexes.indexSubApi]
221 $scope.setModule($filter('filter')(treeApis, { label: $scope.selectedApi.module })[0]);
226 $scope.selectedModule.children,
227 { label: $scope.selectedSubApi.storage })[0],
233 $scope.setNode($scope.selectedSubApi.node);
236 PathUtilsService.fillPath($scope.selectedSubApi.pathArray, requestUrl);
242 function saveRequestToCollection(event) {
244 if (requestHeader.selectedShownDataType === 'form') {
245 requestHeader.setRequestUrl();
248 var historyReq = RequestService.createHistoryRequest(null, null, requestHeader.requestUrl,
249 requestHeader.selectedOperation, '', '', ''),
252 if ( requestHeader.selectedShownDataType === 'req-data' ) {
253 var params = { reqData: null };
254 $scope.rootBroadcast('YANGMAN_GET_CODEMIRROR_DATA_SENT', params);
255 reqData = params.reqData ? angular.fromJson(params.reqData) : {};
258 var historyReqData = YangmanService.prepareAllRequestData(
260 $scope.selectedSubApi,
261 requestHeader.selectedOperation,
263 requestHeader.selectedShownDataType,
264 requestHeader.requestUrl,
269 reqData = historyReqData.reqData;
272 historyReq.setExecutionData(reqData, {}, '');
274 $scope.rootBroadcast('YANGMAN_SAVE_REQUEST_TO_COLLECTION', { event: event, reqObj: historyReq });
277 function showRequestProgress(){
278 $scope.rootBroadcast('YANGMAN_EXECUTING_REQUEST_PROGRESS_START');
282 function finishRequestProgress(message){
283 $scope.rootBroadcast('YANGMAN_EXECUTING_REQUEST_PROGRESS_STOP');
286 // .textContent(message)
287 // .position('bottom right')
288 // .parent(angular.element('.yangmanModule__right-panel__header'))
295 * Execute request operation
297 function executeOperation(requestData, executeCbk){
299 showRequestProgress();
301 setRequestUrl(requestHeader.selectedShownDataType === 'req-data' ? requestHeader.requestUrl : null);
303 var historyReq = RequestService.createHistoryRequest(null, null, requestHeader.requestUrl,
304 requestHeader.selectedOperation, '', '', '');
306 YangmanService.executeRequestOperation(
308 $scope.selectedSubApi,
309 requestHeader.selectedOperation,
311 requestHeader.selectedShownDataType,
312 requestHeader.requestUrl,
314 $scope.parametersList,
320 * Success callback after executin operation
324 function executeReqSuccCbk(reqInfo, response) {
325 var preparedReceivedData = YangmanService.prepareReceivedData(
327 requestHeader.selectedOperation,
328 response.data ? response.data.plain() : {},
329 reqInfo.requestSrcData,
330 requestHeader.selectedShownDataType
333 finishRequestProgress();
335 requestHeader.statusObj = reqInfo;
339 // create and set history request
340 historyReq.setExecutionData(
341 reqInfo.requestSrcData,
342 preparedReceivedData,
349 if (requestHeader.selectedShownDataType === 'req-data'){
351 setNodeDataFromRequestData(requestHeader.requestUrl);
352 sendRequestData(preparedReceivedData, 'RECEIVED');
353 sendRequestData(reqInfo.requestSrcData || {}, 'SENT');
359 YangmanService.fillNodeFromResponse(
364 $scope.node.expanded = true;
365 $scope.rootBroadcast('YANGMAN_DISABLE_ADDING_LIST_ELEMENT');
367 YangmanService.checkRpcReceivedData(preparedReceivedData, $scope.node),
373 $scope.rootBroadcast('YANGMAN_SAVE_EXECUTED_REQUEST', historyReq, function (){
374 $scope.rootBroadcast('YANGMAN_SELECT_THE_NEWEST_REQUEST');
376 (executeCbk || angular.noop)(historyReq);
382 * Error callback after executin operation
386 function executeReqErrCbk(reqInfo, response) {
387 requestHeader.statusObj = reqInfo;
389 finishRequestProgress();
391 historyReq.setExecutionData(
392 reqInfo.requestSrcData,
399 $scope.rootBroadcast('YANGMAN_SAVE_EXECUTED_REQUEST', historyReq, function (){
400 $scope.rootBroadcast('YANGMAN_SELECT_THE_NEWEST_REQUEST');
405 //setNodeDataFromRequestData(requestHeader.requestUrl);
408 // try to fill code mirror editor
409 sendRequestData(response.data, 'RECEIVED');
410 sendErrorData(response.data);
412 (executeCbk || angular.noop)(historyReq);
420 * TODO :: description
424 function fillNodeData(pathElem, identifier) {
425 if ($scope.selectedSubApi && $scope.selectedSubApi.storage === 'config' &&
426 $scope.selectedSubApi.pathArray.indexOf(pathElem) === ($scope.selectedSubApi.pathArray.length - 1)) {
427 PathUtilsService.fillListNode($scope.node, identifier.label, identifier.value);
432 * Check data before executin operations
434 function prepareDataAndExecute(cbk){
437 if ( requestHeader.requestUrl.length ) {
439 if ( requestHeader.selectedShownDataType === 'req-data' ) {
441 var params = { reqData: null };
442 $scope.rootBroadcast('YANGMAN_GET_CODEMIRROR_DATA_SENT', params);
443 executeOperation(params.reqData ? angular.fromJson(params.reqData) : {}, cbk);
445 executeOperation({}, cbk);
451 * Mount point initialization
452 * @param mountPointStructure
453 * @param mountPointTreeApis
454 * @param mountPointApis
455 * @param augmentations
457 function initMountPoint(mountPointTreeApis, mountPointApis, augmentations, reqObj){
458 DataBackupService.storeFromScope(
460 'selectedDatastore', 'node', 'apis',
461 'selectedApi', 'selectedSubApi', 'augmentations', 'selectedModule',
467 $scope.rootBroadcast('YANGMAN_GET_API_TREE_DATA', null, function (treeApis) {
468 DataBackupService.storeFromScope(
470 { treeApis: treeApis },
475 $scope.setNode(null);
476 $scope.setModule(null);
477 $scope.setGlobalParams(mountPointApis, augmentations);
478 $scope.setDataStore(null);
479 requestHeader.statusObj = reqObj;
480 $scope.rootBroadcast('YANGMAN_SET_API_TREE_DATA', mountPointTreeApis);
484 * Executing custom plugin callback
485 * @param customPlugin
487 function executePluginFunctionality(customPlugin){
488 requestHeader.selectedPlugin = customPlugin;
489 customPlugin.runCallback({ scope: $scope, controller: requestHeader });
493 * Unset custom plugin functionality - get back major params from scope
495 function unsetPluginFunctionality(){
496 if ( requestHeader.selectedPlugin ) {
497 $scope.unsetPlugin(requestHeader);
500 requestHeader.selectedPlugin = null;
501 requestHeader.selectedPluginsButtons = [];