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', 'constants'
13 function RequestHeaderCtrl($mdDialog, $mdToast, $scope, $rootScope, ENV, YangmanService, ParametersService,
14 PathUtilsService, RequestService, $filter, DataBackupService, constants) {
15 var requestHeader = this;
17 requestHeader.allOperations = [constants.OPERATION_GET, constants.OPERATION_POST, constants.OPERATION_PUT, constants.OPERATION_DELETE];
18 requestHeader.constants = constants;
19 requestHeader.urlChanged = false;
20 requestHeader.executedOperation = null;
21 requestHeader.selectedOperationsList = [];
22 requestHeader.selectedOperation = null;
23 requestHeader.requestUrl = '';
24 requestHeader.selectedPluginsButtons = [];
25 requestHeader.selectedPlugin = null;
26 requestHeader.statusObj = null;
29 requestHeader.executeOperation = executeOperation;
30 requestHeader.executePluginFunctionality = executePluginFunctionality;
31 requestHeader.fillNodeData = fillNodeData;
32 requestHeader.changeDataType = changeDataType;
33 requestHeader.prepareDataAndExecute = prepareDataAndExecute;
34 requestHeader.initMountPoint = initMountPoint;
35 requestHeader.setJsonView = setJsonView;
36 requestHeader.setRequestUrl = setRequestUrl;
37 requestHeader.showParamsAdmin = showParamsAdmin;
38 requestHeader.saveRequestToCollection = saveRequestToCollection;
39 requestHeader.unsetPluginFunctionality = unsetPluginFunctionality;
43 * Set selected operations based on data store
45 $scope.$on(constants.SET_SEL_OPERATIONS, function (event, operations, setUrl) {
46 setAllowedMethods(operations);
54 * Watching for changes in shown detail data type (radio button)
56 $scope.$on(constants.YANGMAN_HEADER_INIT, function (event, args) {
58 setRequestUrl(args.params.path);
59 setRequestMethod(args.params.method);
60 setRequestStatus(args.params.statusObj);
62 (args.cbk || angular.noop)();
65 $scope.$on(constants.YANGMAN_FILL_NODE_FROM_REQ, function (event, args) {
66 setNodeDataFromRequestData(args.params.requestUrl, args.params.leftpanel);
67 (args.cbk || angular.noop)();
70 $scope.$on(constants.YANGMAN_EXECUTE_WITH_DATA, function (event, args) {
71 executeOperation(args.params.data ? angular.fromJson(args.params.data) : {}, args.cbk);
77 * Setter for selected operation
80 function setRequestMethod(method){
81 requestHeader.selectedOperation = method;
85 * Setter for request status
88 function setRequestStatus(statusObj){
89 requestHeader.statusObj = statusObj;
93 * Show popup for parameters administration
96 function showParamsAdmin(event) {
98 controller: ParamsAdminCtrl,
99 controllerAs: 'paramsAdmin',
100 templateUrl: $scope.globalViewPath + 'popup/parameters-admin.tpl.html',
101 parent: angular.element('#yangmanModule'),
103 clickOutsideToClose: true,
105 parametersList: $scope.parametersList,
109 $scope.parametersList.loadListFromStorage();
112 $scope.parametersList.loadListFromStorage();
118 * Method for selecting correct json view by selected operation
120 function setJsonView(){
121 var both = [constants.OPERATION_PUT, constants.OPERATION_POST];
123 if ( both.indexOf(requestHeader.selectedOperation) > -1 ){
124 $scope.setJsonView(true, true);
126 $scope.setJsonView(true, false);
131 * Change displayed data type to json or form, after switching set current data to be displayed
133 function changeDataType(){
134 $scope.switchSection('rightPanelSection', requestHeader.selectedShownDataType);
136 if(!$scope.node || requestHeader.urlChanged) {
137 requestHeader.setRequestUrl();
138 requestHeader.urlChanged = false;
141 // if changing to json, fill codemirror data
142 if ( requestHeader.selectedShownDataType === constants.DISPLAY_TYPE_REQ_DATA && $scope.node ){
144 sendRequestData($scope.buildRootRequest(), 'SENT');
147 // if changing to form, try to fill node data
148 if (requestHeader.selectedShownDataType === constants.DISPLAY_TYPE_FORM) {
151 reqData = getDataForForm();
152 setNodeDataFromRequestData(requestHeader.requestUrl);
156 YangmanService.fillNodeFromResponse($scope.node, reqData);
157 $scope.node.expanded = true;
163 * Helper method for building correct json data for form, rpc included
166 function getDataForForm(){
172 var sentData = { reqData: null },
173 allData = { sent: null, received: null };
175 $scope.rootBroadcast(constants.YANGMAN_GET_CODEMIRROR_DATA_RECEIVED, params);
176 $scope.rootBroadcast(constants.YANGMAN_GET_CODEMIRROR_DATA_SENT, sentData);
178 allData.sent = sentData.reqData ? angular.fromJson(sentData.reqData) : {};
179 allData.received = params.reqData ? angular.fromJson(params.reqData) : {};
181 return YangmanService.prepareReceivedData(
183 requestHeader.selectedOperation,
186 requestHeader.selectedShownDataType
189 default: function (){
191 if(requestHeader.executedOperation) {
192 dataType = requestHeader.executedOperation === constants.OPERATION_GET ? constants.REQUEST_DATA_TYPE_RECEIVED : 'SENT';
195 dataType = requestHeader.selectedOperation === constants.OPERATION_GET ? constants.REQUEST_DATA_TYPE_RECEIVED : 'SENT';
198 $scope.rootBroadcast(constants.YANGMAN_GET_CODEMIRROR_DATA + dataType, params);
199 return params.reqData ? angular.fromJson(params.reqData) : {};
203 return $scope.node ? (dataTypeFunc[$scope.node.type] || dataTypeFunc.default)() : {};
207 * Send data to codemirror
210 function sendRequestData(data, type){
211 $scope.rootBroadcast(
212 constants.YANGMAN_SET_CODEMIRROR_DATA + type,
213 { data: data instanceof Object ? JSON.stringify(data, null, 4) : data }
217 function sendErrorData(response) {
218 $scope.rootBroadcast(constants.YANGMAN_SET_ERROR_DATA, response);
222 * Create empty parameters list, load from local storage and set to $scope
224 function initParams(){
225 $scope.parametersList.loadListFromStorage();
232 setAllowedMethods(requestHeader.allOperations);
234 requestHeader.selectedShownDataType = $scope.rightPanelSection;
238 * Set allowed operations for request
241 function setAllowedMethods(operations){
242 requestHeader.selectedOperationsList = operations.length ? operations : requestHeader.allOperations;
243 if (operations.indexOf(requestHeader.selectedOperation) === -1){
244 requestHeader.selectedOperation = requestHeader.selectedOperationsList[0];
249 * Set header request url if json selected
251 function setRequestUrl(path){
252 requestHeader.requestUrl = path || ($scope.selectedSubApi ?
253 ENV.getBaseURL('MD_SAL') + '/restconf/' + $scope.selectedSubApi.buildApiRequestString() : '');
258 * Try to set api, module, dataStore and node, if api indexes for request url available
259 * and set (or unset) module detail panel to be displayed
260 * @param requestUrl url to try to find
261 * @param leftpanel index of main left tabs to be displayed (we dont want to display module detail in all cases)
263 function setNodeDataFromRequestData(requestUrl, leftpanel){
265 setApiByUrl(requestUrl, function (treeApis) {
267 $scope.setModule($filter('filter')(treeApis, { label: $scope.selectedApi.module })[0]);
272 $scope.selectedModule.children,
273 { label: $scope.selectedSubApi.storage })[0],
279 $scope.setNode($scope.selectedSubApi.node);
282 PathUtilsService.fillPath($scope.selectedSubApi.pathArray, requestUrl);
287 function setApiByUrl(url, cbk, fill){
288 $scope.rootBroadcast(constants.YANGMAN_GET_API_TREE_DATA, null, function (treeApis) {
290 PathUtilsService.searchNodeByPath(url, treeApis, null, true, true);
296 $scope.apis[apisIndexes.indexApi],
297 $scope.apis[apisIndexes.indexApi].subApis[apisIndexes.indexSubApi]
300 if ( $scope.selectedSubApi && fill ) {
301 var updatedUrl = YangmanService.cutUrl(url);
302 PathUtilsService.fillPath($scope.selectedSubApi.pathArray, updatedUrl);
306 (cbk || angular.noop)(treeApis);
311 function saveRequestToCollection(event) {
312 var historyReq = null,
313 sentData = { reqData: null },
314 receivedData = { reqData: null };
316 if (requestHeader.selectedShownDataType === constants.DISPLAY_TYPE_FORM) {
317 requestHeader.setRequestUrl();
320 historyReq = RequestService.createHistoryRequest(
321 null, null, requestHeader.requestUrl, requestHeader.selectedOperation, '', '', ''
324 $scope.rootBroadcast(constants.YANGMAN_GET_CODEMIRROR_DATA_SENT, sentData);
325 $scope.rootBroadcast(constants.YANGMAN_GET_CODEMIRROR_DATA_RECEIVED, receivedData);
327 RequestService.fillRequestByMethod(
328 historyReq, sentData, receivedData, requestHeader.selectedOperation, $scope.node,
329 requestHeader.selectedShownDataType
332 $scope.rootBroadcast(constants.YANGMAN_SAVE_REQUEST_TO_COLLECTION, { event: event, reqObj: historyReq });
335 function showRequestProgress(){
336 $scope.rootBroadcast(constants.YANGMAN_EXECUTING_REQUEST_PROGRESS_START);
340 function finishRequestProgress(message){
341 $scope.rootBroadcast(constants.YANGMAN_EXECUTING_REQUEST_PROGRESS_STOP);
345 * Execute request operation
347 function executeOperation(requestData, executeCbk){
348 var allowExecuteOperation =
349 requestHeader.selectedShownDataType === constants.DISPLAY_TYPE_FORM && $scope.selectedSubApi ?
350 !PathUtilsService.checkEmptyIdentifiers($scope.selectedSubApi.pathArray) : true;
352 if ( allowExecuteOperation ) {
354 showRequestProgress();
355 setRequestUrl(requestHeader.selectedShownDataType === constants.DISPLAY_TYPE_REQ_DATA ? requestHeader.requestUrl : null);
356 $scope.rootBroadcast(constants.YANGMAN_SET_ERROR_MESSAGE, '');
358 if ( requestHeader.selectedShownDataType !== constants.DISPLAY_TYPE_FORM ){
359 setApiByUrl(requestHeader.requestUrl, null, true);
362 var historyReq = RequestService.createHistoryRequest(null, null, requestHeader.requestUrl,
363 requestHeader.selectedOperation, '', '', '');
365 YangmanService.executeRequestOperation(
367 $scope.selectedSubApi,
368 requestHeader.selectedOperation,
370 requestHeader.selectedShownDataType,
371 requestHeader.requestUrl,
373 $scope.parametersList,
377 requestHeader.executedOperation = requestHeader.selectedOperation;
379 $scope.rootBroadcast(
380 constants.YANGMAN_SET_ERROR_MESSAGE,
381 $filter('translate')(constants.YANGMAN_ERROR_EMPTY_IDENTIFIERS)
386 * Success callback after executin operation
390 function executeReqSuccCbk(reqInfo, response) {
391 var preparedReceivedData = YangmanService.prepareReceivedData(
393 requestHeader.selectedOperation,
394 response.data ? response.data.plain() : {},
395 reqInfo.requestSrcData,
396 requestHeader.selectedShownDataType
399 finishRequestProgress();
401 requestHeader.statusObj = reqInfo;
405 if (requestHeader.selectedShownDataType === constants.DISPLAY_TYPE_REQ_DATA){
407 setNodeDataFromRequestData(requestHeader.requestUrl);
408 sendRequestData(preparedReceivedData, constants.REQUEST_DATA_TYPE_RECEIVED);
409 sendRequestData(reqInfo.requestSrcData || {}, 'SENT');
414 YangmanService.fillNodeFromResponse($scope.node, preparedReceivedData);
415 YangmanService.handleNodeIdentifier(
416 $scope.parametersList, $scope.selectedSubApi, $scope.node
418 $scope.node.expanded = true;
420 $scope.rootBroadcast(constants.YANGMAN_DISABLE_ADDING_LIST_ELEMENT);
421 preparedReceivedData = YangmanService.checkRpcReceivedData(preparedReceivedData, $scope.node);
422 sendRequestData(preparedReceivedData, constants.REQUEST_DATA_TYPE_RECEIVED);
426 // create and set history request
427 historyReq.setExecutionData(
428 reqInfo.requestSrcData,
429 preparedReceivedData,
436 $scope.rootBroadcast(constants.YANGMAN_SAVE_EXECUTED_REQUEST, historyReq, function (){
437 $scope.rootBroadcast(constants.YANGMAN_SELECT_THE_NEWEST_REQUEST);
440 (executeCbk || angular.noop)(historyReq);
446 * Error callback after executin operation
450 function executeReqErrCbk(reqInfo, response) {
451 requestHeader.statusObj = reqInfo;
453 finishRequestProgress();
455 historyReq.setExecutionData(
456 reqInfo.requestSrcData,
463 $scope.rootBroadcast(constants.YANGMAN_SAVE_EXECUTED_REQUEST, historyReq, function (){
464 $scope.rootBroadcast(constants.YANGMAN_SELECT_THE_NEWEST_REQUEST);
468 // try to fill code mirror editor
469 sendRequestData(response.data, constants.REQUEST_DATA_TYPE_RECEIVED);
470 sendErrorData(response.data);
473 (executeCbk || angular.noop)(historyReq);
481 * TODO :: description
485 function fillNodeData(pathElem, identifier) {
486 if ($scope.selectedSubApi && $scope.selectedSubApi.storage === constants.DATA_STORE_CONFIG &&
487 $scope.selectedSubApi.pathArray.indexOf(pathElem) === ($scope.selectedSubApi.pathArray.length - 1)) {
488 PathUtilsService.fillListNode($scope.node, identifier.label, identifier.value);
491 requestHeader.urlChanged = true;
495 * Check data before executin operations
497 function prepareDataAndExecute(cbk){
498 if (requestHeader.statusObj) {
499 requestHeader.statusObj.statusText = null;
500 requestHeader.statusObj.time = null;
503 if ( requestHeader.requestUrl.length ) {
505 if ( requestHeader.selectedShownDataType === constants.DISPLAY_TYPE_REQ_DATA ) {
507 var params = { reqData: null };
508 $scope.rootBroadcast(constants.YANGMAN_GET_CODEMIRROR_DATA_SENT, params);
509 executeOperation(params.reqData ? angular.fromJson(params.reqData) : {}, cbk);
511 executeOperation({}, cbk);
517 * Mount point initialization
518 * @param mountPointStructure
519 * @param mountPointTreeApis
520 * @param mountPointApis
521 * @param augmentations
523 function initMountPoint(mountPointTreeApis, mountPointApis, augmentations, reqObj){
524 DataBackupService.storeFromScope(
526 'selectedDatastore', 'node', 'apis',
527 'selectedApi', 'selectedSubApi', 'augmentations', 'selectedModule',
533 $scope.rootBroadcast(constants.YANGMAN_GET_API_TREE_DATA, null, function (treeApis) {
534 DataBackupService.storeFromScope(
536 { treeApis: treeApis },
541 $scope.setNode(null);
542 $scope.setModule(null);
543 $scope.setGlobalParams(mountPointApis, augmentations);
544 $scope.setDataStore(null);
545 requestHeader.statusObj = reqObj;
546 $scope.rootBroadcast(constants.YANGMAN_SET_API_TREE_DATA, mountPointTreeApis);
550 * Executing custom plugin callback
551 * @param customPlugin
553 function executePluginFunctionality(customPlugin){
554 requestHeader.selectedPlugin = customPlugin;
555 customPlugin.runCallback({ scope: $scope, controller: requestHeader });
559 * Unset custom plugin functionality - get back major params from scope
561 function unsetPluginFunctionality(){
562 if ( requestHeader.selectedPlugin ) {
563 $scope.unsetPlugin(requestHeader);
566 requestHeader.selectedPlugin = null;
567 requestHeader.selectedPluginsButtons = [];