Yangman - history and collections
[dlux.git] / modules / yangman-resources / src / main / resources / yangman / controllers / request-header.controller.js
index 40a05c5eb9e8045d8164d6d1e1c0298aa537fc21..6b8e7dec014fa2bb7e8bbe3f564dea3399d4dc1d 100644 (file)
@@ -6,12 +6,12 @@ define([
     angular.module('app.yangman').controller('RequestHeaderCtrl', RequestHeaderCtrl);
 
     RequestHeaderCtrl.$inject = [
-        '$mdDialog', '$mdToast', '$scope', '$rootScope', 'ENV', 'YangmanService', 'ParametersService', 'PathUtilsService',
-        'RequestsService', '$filter', 'DataBackupService',
+        '$mdDialog', '$mdToast', '$scope', '$rootScope', 'ENV', 'YangmanService', 'ParametersService',
+        'PathUtilsService', 'RequestsService', '$filter', 'DataBackupService',
     ];
 
-    function RequestHeaderCtrl($mdDialog, $mdToast, $scope, $rootScope, ENV, YangmanService, ParametersService, PathUtilsService,
-                               RequestService, $filter, DataBackupService) {
+    function RequestHeaderCtrl($mdDialog, $mdToast, $scope, $rootScope, ENV, YangmanService, ParametersService,
+                               PathUtilsService, RequestService, $filter, DataBackupService) {
         var requestHeader = this;
 
         requestHeader.allOperations = ['GET', 'POST', 'PUT', 'DELETE'];
@@ -64,19 +64,24 @@ define([
             (args.cbk || angular.noop)();
         });
 
-        $scope.$on('YANGMAN_EXECUTE_WITH_DATA', executeWithData);
+        $scope.$on('YANGMAN_EXECUTE_WITH_DATA', function (event, args) {
+            executeOperation(args.params.data ? angular.fromJson(args.params.data) : {}, args.cbk);
+        });
 
         init();
 
-
-        function executeWithData(event, args) {
-            executeOperation(args.params.data ? angular.fromJson(args.params.data) : {}, args.cbk);
-        }
-
+        /**
+         * Setter for selected operation
+         * @param method
+         */
         function setRequestMethod(method){
             requestHeader.selectedOperation = method;
         }
 
+        /**
+         * Setter for request status
+         * @param statusObj
+         */
         function setRequestStatus(statusObj){
             requestHeader.statusObj = statusObj;
         }
@@ -96,8 +101,8 @@ define([
                 locals: {
                     parametersList: $scope.parametersList,
                 },
-            }).then(function (parametersList){
-                $scope.setParametersList(parametersList);
+            }).then(function (){
+                $scope.parametersList.loadListFromStorage();
 
             });
         }
@@ -132,24 +137,57 @@ define([
 
             // if changing to form, try to fill node data
             if (requestHeader.selectedShownDataType === 'form') {
-                var params = {
-                        reqData: null,
-                    },
-                    reqData = {},
-                    dataType = requestHeader.selectedOperation === 'GET' ? 'RECEIVED' : 'SENT';
-
+                var reqData = {};
 
-                $scope.rootBroadcast('YANGMAN_GET_CODEMIRROR_DATA_' + dataType, params);
-                reqData = params.reqData ? angular.fromJson(params.reqData) : {};
+                reqData = getDataForForm();
                 setNodeDataFromRequestData(requestHeader.requestUrl);
 
                 if ( $scope.node ) {
+
                     YangmanService.fillNodeFromResponse($scope.node, reqData);
                     $scope.node.expanded = true;
                 }
             }
         }
 
+        /**
+         * Helper method for building correct json data for form, rpc included
+         * @returns {*}
+         */
+        function getDataForForm(){
+            var params = {
+                    reqData: null,
+                },
+                dataTypeFunc = {
+                    rpc: function () {
+                        var sentData = { reqData: null },
+                            allData = { sent: null, received: null };
+
+                        $scope.rootBroadcast('YANGMAN_GET_CODEMIRROR_DATA_RECEIVED', params);
+                        $scope.rootBroadcast('YANGMAN_GET_CODEMIRROR_DATA_SENT', sentData);
+
+                        allData.sent = sentData.reqData ? angular.fromJson(sentData.reqData) : {};
+                        allData.received = params.reqData ? angular.fromJson(params.reqData) : {};
+
+                        return YangmanService.prepareReceivedData(
+                            $scope.node,
+                            requestHeader.selectedOperation,
+                            allData.received,
+                            allData.sent,
+                            requestHeader.selectedShownDataType
+                        );
+                    },
+                    default: function (){
+                        var dataType = requestHeader.selectedOperation === 'GET' ? 'RECEIVED' : 'SENT';
+
+                        $scope.rootBroadcast('YANGMAN_GET_CODEMIRROR_DATA_' + dataType, params);
+                        return params.reqData ? angular.fromJson(params.reqData) : {};
+                    },
+                };
+
+            return $scope.node ? (dataTypeFunc[$scope.node.type] || dataTypeFunc.default)() : {};
+        }
+
         /**
          * Send data to codemirror
          * @param data
@@ -206,40 +244,58 @@ define([
          */
         function setNodeDataFromRequestData(requestUrl, leftpanel){
 
+            setApiByUrl(requestUrl, function (treeApis) {
+                // set module
+                $scope.setModule($filter('filter')(treeApis, { label: $scope.selectedApi.module })[0]);
+
+                // set datastore
+                $scope.setDataStore(
+                    $filter('filter')(
+                        $scope.selectedModule.children,
+                        { label: $scope.selectedSubApi.storage })[0],
+                    true,
+                    leftpanel
+                );
+
+                // set node
+                $scope.setNode($scope.selectedSubApi.node);
+
+                // fill subapi path
+                PathUtilsService.fillPath($scope.selectedSubApi.pathArray, requestUrl);
+                setRequestUrl();
+            });
+        }
+
+        function setApiByUrl(url, cbk, fill){
             $scope.rootBroadcast('YANGMAN_GET_API_TREE_DATA', null, function (treeApis) {
                 var apisIndexes =
-                        PathUtilsService.searchNodeByPath(requestUrl, treeApis, null, true, true);
+                    PathUtilsService.searchNodeByPath(url, treeApis, null, true, true);
+
+                if ( apisIndexes ) {
 
-                if ( apisIndexes ){
                     // set apis
                     $scope.setApi(
                         $scope.apis[apisIndexes.indexApi],
                         $scope.apis[apisIndexes.indexApi].subApis[apisIndexes.indexSubApi]
                     );
 
-                    // set module
-                    $scope.setModule($filter('filter')(treeApis, { label: $scope.selectedApi.module })[0]);
+                    if ( $scope.selectedSubApi && fill ) {
+                        var updatedUrl = YangmanService.cutUrl(url);
+                        PathUtilsService.fillPath($scope.selectedSubApi.pathArray, updatedUrl);
 
-                    // set datastore
-                    $scope.setDataStore(
-                        $filter('filter')(
-                            $scope.selectedModule.children,
-                            { label: $scope.selectedSubApi.storage })[0],
-                        true,
-                        leftpanel
-                    );
-
-                    // set node
-                    $scope.setNode($scope.selectedSubApi.node);
+                    }
 
-                    // fill subapi path
-                    PathUtilsService.fillPath($scope.selectedSubApi.pathArray, requestUrl);
-                    setRequestUrl();
+                    (cbk || angular.noop)(treeApis);
                 }
             });
         }
 
         function saveRequestToCollection(event) {
+
+            if (requestHeader.selectedShownDataType === 'form') {
+                requestHeader.setRequestUrl();
+            }
+
             var historyReq = RequestService.createHistoryRequest(null, null, requestHeader.requestUrl,
                     requestHeader.selectedOperation, '', '', ''),
                 reqData = {};
@@ -249,19 +305,11 @@ define([
                 $scope.rootBroadcast('YANGMAN_GET_CODEMIRROR_DATA_SENT', params);
                 reqData = params.reqData ? angular.fromJson(params.reqData) : {};
             }
-            else{
-                var historyReqData = YangmanService.prepareAllRequestData(
-                    $scope.selectedApi,
-                    $scope.selectedSubApi,
-                    requestHeader.selectedOperation,
-                    $scope.node,
-                    requestHeader.selectedShownDataType,
-                    requestHeader.requestUrl,
-                    reqData,
-                    null
-                );
+            else {
+                var data = { srcData: {} };
 
-                reqData = historyReqData.reqData;
+                YangmanService.setSrcDataByDataType(data, $scope.node, {}, 'form');
+                reqData = data.srcData;
             }
 
             historyReq.setExecutionData(reqData, {}, '');
@@ -274,7 +322,7 @@ define([
         }
 
 
-        function finishRequestProgress(message){
+        function finishRequestProgress (message){
             $scope.rootBroadcast('YANGMAN_EXECUTING_REQUEST_PROGRESS_STOP');
             // $mdToast.show(
             //     $mdToast.simple()
@@ -290,26 +338,41 @@ define([
          * Execute request operation
          */
         function executeOperation(requestData, executeCbk){
+            var allowExecuteOperation =
+                requestHeader.selectedShownDataType === 'form' && $scope.selectedSubApi ?
+                    !PathUtilsService.checkEmptyIdentifiers($scope.selectedSubApi.pathArray) : true;
 
-            showRequestProgress();
+            if ( allowExecuteOperation ) {
 
-            setRequestUrl(requestHeader.selectedShownDataType === 'req-data' ? requestHeader.requestUrl : null);
+                showRequestProgress();
+                setRequestUrl(requestHeader.selectedShownDataType === 'req-data' ? requestHeader.requestUrl : null);
+                $scope.rootBroadcast('YANGMAN_SET_ERROR_MESSAGE', '');
 
-            var historyReq = RequestService.createHistoryRequest(null, null, requestHeader.requestUrl,
-                requestHeader.selectedOperation, '', '', '');
-
-            YangmanService.executeRequestOperation(
-                $scope.selectedApi,
-                $scope.selectedSubApi,
-                requestHeader.selectedOperation,
-                $scope.node,
-                requestHeader.selectedShownDataType,
-                requestHeader.requestUrl,
-                requestData,
-                $scope.parametersList,
-                executeReqSuccCbk,
-                executeReqErrCbk
-            );
+                if ( requestHeader.selectedShownDataType !== 'form' ){
+                    setApiByUrl(requestHeader.requestUrl, null, true);
+                }
+
+                var historyReq = RequestService.createHistoryRequest(null, null, requestHeader.requestUrl,
+                    requestHeader.selectedOperation, '', '', '');
+
+                YangmanService.executeRequestOperation(
+                    $scope.selectedApi,
+                    $scope.selectedSubApi,
+                    requestHeader.selectedOperation,
+                    $scope.node,
+                    requestHeader.selectedShownDataType,
+                    requestHeader.requestUrl,
+                    requestData,
+                    $scope.parametersList,
+                    executeReqSuccCbk,
+                    executeReqErrCbk
+                );
+            } else {
+                $scope.rootBroadcast(
+                    'YANGMAN_SET_ERROR_MESSAGE',
+                    $filter('translate')('YANGMAN_ERROR_EMPTY_IDENTIFIERS')
+                );
+            }
 
             /**
              * Success callback after executin operation
@@ -331,40 +394,38 @@ define([
 
                 sendErrorData({});
 
-                // create and set history request
-                historyReq.setExecutionData(
-                    reqInfo.requestSrcData,
-                    preparedReceivedData,
-                    reqInfo.status,
-                    reqInfo.status,
-                    reqInfo.statusText,
-                    reqInfo.time
-                );
-
                 if (requestHeader.selectedShownDataType === 'req-data'){
 
                     setNodeDataFromRequestData(requestHeader.requestUrl);
                     sendRequestData(preparedReceivedData, 'RECEIVED');
                     sendRequestData(reqInfo.requestSrcData || {}, 'SENT');
-                }
-                else {
+                } else {
 
                     if ($scope.node){
 
-                        YangmanService.fillNodeFromResponse(
-                            $scope.node,
-                            preparedReceivedData
-                        );
-
+                        YangmanService.fillNodeFromResponse($scope.node, preparedReceivedData);
                         $scope.node.expanded = true;
+
                         $scope.rootBroadcast('YANGMAN_DISABLE_ADDING_LIST_ELEMENT');
-                        sendRequestData(YangmanService.checkRpcReceivedData(preparedReceivedData, $scope.node), 'RECEIVED');
+                        preparedReceivedData = YangmanService.checkRpcReceivedData(preparedReceivedData, $scope.node);
+                        sendRequestData(preparedReceivedData, 'RECEIVED');
                     }
                 }
 
+                // create and set history request
+                historyReq.setExecutionData(
+                    reqInfo.requestSrcData,
+                    preparedReceivedData,
+                    reqInfo.status,
+                    reqInfo.status,
+                    reqInfo.statusText,
+                    reqInfo.time
+                );
+
                 $scope.rootBroadcast('YANGMAN_SAVE_EXECUTED_REQUEST', historyReq, function (){
                     $scope.rootBroadcast('YANGMAN_SELECT_THE_NEWEST_REQUEST');
                 });
+
                 (executeCbk || angular.noop)(historyReq);
 
 
@@ -392,8 +453,6 @@ define([
                     $scope.rootBroadcast('YANGMAN_SELECT_THE_NEWEST_REQUEST');
                 });
 
-
-
                 //setNodeDataFromRequestData(requestHeader.requestUrl);
 
                 if (response.data) {
@@ -401,6 +460,7 @@ define([
                     sendRequestData(response.data, 'RECEIVED');
                     sendErrorData(response.data);
                 }
+
                 (executeCbk || angular.noop)(historyReq);
 
 
@@ -425,7 +485,6 @@ define([
          */
         function prepareDataAndExecute(cbk){
 
-
             if ( requestHeader.requestUrl.length ) {
 
                 if ( requestHeader.selectedShownDataType === 'req-data' ) {