Yangman - cleaned code
[dlux.git] / modules / yangman-resources / src / main / resources / yangman / controllers / requests-list.controller.js
index 8ba6c21375b3fa9303cdd4ef76a3500fc7d6181a..62a35f891961f1126a63fff73e1352e5382911ff 100644 (file)
@@ -8,25 +8,49 @@ define([
     angular.module('app.yangman').controller('RequestsListCtrl', RequestsListCtrl);
 
     RequestsListCtrl.$inject = [
-        '$filter', '$mdDialog', '$scope', 'HandleFileService', 'PathUtilsService', 'RequestsService', 'YangmanService',
-        'YangmanDesignService',
+        '$filter', '$mdDialog', '$scope', 'YMHandleFileService', 'PathUtilsService', 'RequestsService', 'YangmanService',
+        'YangmanDesignService', 'constants',
     ];
 
-    function RequestsListCtrl($filter, $mdDialog, $scope, HandleFileService, PathUtilsService, RequestsService,
-                              YangmanService, YangmanDesignService) {
+    /**
+     * Controller for requests lists, means History requests and Collections requests
+     * @param $filter
+     * @param $mdDialog
+     * @param $scope
+     * @param YMHandleFileService
+     * @param PathUtilsService
+     * @param RequestsService
+     * @param YangmanService
+     * @param YangmanDesignService
+     * @constructor
+     */
+    function RequestsListCtrl($filter, $mdDialog, $scope, YMHandleFileService, PathUtilsService, RequestsService,
+                              YangmanService, YangmanDesignService, constants) {
         var vm = this;
 
-        vm.collectionList = RequestsService.createEmptyCollectionList('yangman_collectionsList');
-        vm.collectionsSortAsc = true;
+        /**
+         * List of all collections containing requests, loads even for history controller to use collection names
+         * in saving requests dialog
+         * @type {*|CollectionList}
+         */
+        vm.collectionList = null;
+        vm.constants = constants;
+
+        /**
+         *
+         * @type {*|HistoryList}
+         */
+        vm.requestList = null;
         vm.mainList = null;
-        vm.requestList = RequestsService.createEmptyHistoryList('yangman_requestsList');
+        vm.collectionsSortAsc = true;
         vm.search = '';
 
+        // methods
+        vm.clearCollectionList = clearCollectionList;
         vm.clearFilter = clearFilter;
         vm.clearHistoryList = clearHistoryList;
-        vm.clearCollectionList = clearCollectionList;
         vm.colMatchingReqsCount = colMatchingReqsCount;
-        vm.deselectAllRequests = deselectAllRequests;
+        vm.deselectAllFilteredRequests = deselectAllFilteredReqs;
         vm.downloadCollection = downloadCollection;
         vm.executeRequest = executeRequest;
         vm.fakeFilter = fakeFilter;
@@ -34,23 +58,19 @@ define([
         vm.filterColName = filterColName;
         vm.filterReq = filterReq;
         vm.init = init;
-        vm.loadRequests = loadRequests;
         vm.readCollectionFromFile = readCollectionFromFile;
-        vm.refreshCollections = refreshCollections;
-        vm.selectAllRequests = selectAllRequests;
+        vm.selectAllFilteredRequests = selectAllFilteredReqs;
         vm.selectRequest = selectRequest;
         vm.showData = showData;
         vm.showDgDeleteCollection = showDgDeleteCollection;
         vm.showDgDeleteRequests = showDgDeleteRequests;
         vm.showDgEditCollection = showDgEditCollection;
         vm.showDgSaveReq = showDgSaveReq;
-        vm.toggleCollectionsSort = toggleCollectionsSort;
         vm.showForm = showForm;
-
-        $scope.$on('YANGMAN_REFRESH_COLLECTIONS', loadCollectionRequest);
-        $scope.$on('YANGMAN_REFRESH_HISTORY', loadHistoryRequests);
-
-        loadRequests();
+        vm.toggleCollectionsSort = toggleCollectionsSort;
+        vm.selectOnlyThisRequest = selectOnlyThisRequest;
+        vm.deselectAllRequests = deselectAllRequests;
+        vm.filterCollReq = filterCollReq;
 
         /**
          * Save request obje to collection from other controller
@@ -64,38 +84,49 @@ define([
         /**
          * Clear history requests list and save to storage
          */
-        function clearHistoryList(ev) {
+        function clearHistoryList(event) {
+
+            YangmanDesignService.disableMdMenuItem(event);
+
             var confirm = $mdDialog.confirm()
                 .title($filter('translate')('YANGMAN_DELETE_HISTORY_CONFIRM_TITLE'))
                 .textContent($filter('translate')('YANGMAN_DELETE_HISTORY_CONFIRM_TEXT'))
                 .ariaLabel($filter('translate')('YANGMAN_DELETE_HISTORY_CONFIRM_TITLE'))
-                .targetEvent(ev)
+                .targetEvent(event)
                 .ok($filter('translate')('YANGMAN_OK'))
                 .cancel($filter('translate')('YANGMAN_CANCEL'));
 
             $mdDialog.show(confirm).then(function (){
                 vm.requestList.clear();
                 vm.requestList.saveToStorage();
-                $scope.rootBroadcast('YANGMAN_REFRESH_HISTORY');
+                loadHistoryList();
+                YangmanDesignService.enableMdMenuItem(event);
+            }, function (){
+                YangmanDesignService.enableMdMenuItem(event);
             });
         }
 
         /**
          * Clear collections requests list and save to storage
          */
-        function clearCollectionList(ev) {
+        function clearCollectionList(event) {
             var confirm = $mdDialog.confirm()
                 .title($filter('translate')('YANGMAN_DELETE_COLLECTION_CONFIRM_TITLE'))
                 .textContent($filter('translate')('YANGMAN_DELETE_COLLECTION_CONFIRM_TEXT'))
                 .ariaLabel($filter('translate')('YANGMAN_DELETE_COLLECTION_CONFIRM_TITLE'))
-                .targetEvent(ev)
+                .targetEvent(event)
                 .ok($filter('translate')('YANGMAN_OK'))
                 .cancel($filter('translate')('YANGMAN_CANCEL'));
 
+            YangmanDesignService.disableMdMenuItem(event);
+
             $mdDialog.show(confirm).then(function (){
                 vm.collectionList.clear();
                 vm.collectionList.saveToStorage();
                 $scope.rootBroadcast('YANGMAN_REFRESH_COLLECTIONS');
+                YangmanDesignService.enableMdMenuItem(event);
+            }, function () {
+                YangmanDesignService.enableMdMenuItem(event);
             });
         }
 
@@ -105,16 +136,15 @@ define([
          * @param params
          */
         function saveBcstedHistoryRequest(broadcastEvent, params) {
-            console.debug('params.params', params.params);
-
-            vm.requestList.addRequestToList(params.params);
-            vm.requestList.groupListByDate();
+            vm.requestList.addItemToList(params.params);
             vm.requestList.saveToStorage();
-            loadHistoryRequests();
+            loadHistoryList();
+            (params.cbk || angular.noop)();
         }
 
         /**
          * Clear value of input file used to import collection
+         * todo: move to design utils
          */
         function clearFileInputValue(){
             angular.element(document).find('#importCollection').val('');
@@ -127,20 +157,13 @@ define([
          */
         function readCollectionFromFile($fileContent) {
             var data = $fileContent,
-                checkArray = [
-                    'sentData',
-                    'receivedData',
-                    'path',
-                    'collection',
-                    'method',
-                    'status',
-                    'name',
-                ];
+                checkArray = ['sentData', 'receivedData', 'path', 'collection', 'method', 'status', 'name'];
 
             if (data && YangmanService.validateFile(data, checkArray)){
                 try {
                     vm.collectionList.loadListFromFile(data);
                     vm.collectionList.saveToStorage();
+                    $scope.rootBroadcast('YANGMAN_REFRESH_COLLECTIONS');
                     clearFileInputValue();
                 }
                 catch (e) {
@@ -151,6 +174,11 @@ define([
             else {
                 clearFileInputValue();
             }
+            removeButtonBackground();
+
+            function removeButtonBackground() {
+                $('#importCollection').next().css({ 'background': 'transparent' });
+            }
         }
 
         function toggleCollectionsSort() {
@@ -163,9 +191,9 @@ define([
          */
         function downloadCollection(collection) {
 
-            var cListJSON = vm.collectionList.getCollectionInJSON(collection.name);
+            var cListJSON = vm.collectionList.getCollectionInRawJSON(collection.name);
 
-            HandleFileService.downloadFile(collection.name + '.json', cListJSON, 'json', 'charset=utf-8',
+            YMHandleFileService.downloadFile(collection.name + '.json', cListJSON, 'json', 'charset=utf-8',
                 function (){},
                 function (e){
                     console.error('ExportCollection error:', e);
@@ -178,13 +206,26 @@ define([
          * @param reqObj
          */
         function showForm(reqObj) {
-            var data = reqObj.method === 'GET' ? reqObj.receivedData : reqObj.sentData;
+            var data = reqObj.sentData;
+
+            // exception for get meth
+            if ( reqObj.method === constants.OPERATION_GET ) {
+                data = reqObj.receivedData;
+            }
 
-            $scope.rootBroadcast('YANGMAN_SET_ERROR_DATA', reqObj.receivedData.hasOwnProperty('errors') ? reqObj.receivedData : {});
+            $scope.rootBroadcast(
+                'YANGMAN_SET_CODEMIRROR_DATA_RECEIVED', { data: reqObj.setDataForView(reqObj.receivedData) }
+            );
+            $scope.rootBroadcast(
+                'YANGMAN_SET_CODEMIRROR_DATA_SENT', { data: reqObj.setDataForView(reqObj.sentData) }
+            );
+
+            $scope.rootBroadcast('YANGMAN_SET_ERROR_DATA',
+                reqObj.receivedData && reqObj.receivedData.hasOwnProperty('errors') ? reqObj.receivedData : {});
 
             $scope.rootBroadcast('YANGMAN_FILL_NODE_FROM_REQ', { requestUrl: reqObj.path, requestData: data },
                 function (){
-                    $scope.setRightPanelSection('form');
+                    $scope.setRightPanelSection(constants.DISPLAY_TYPE_FORM);
                     $scope.rootBroadcast('YANGMAN_HEADER_INIT', {
                         path: reqObj.path,
                         method: reqObj.method,
@@ -196,6 +237,16 @@ define([
                     });
 
                     if ( $scope.node ) {
+                        // prepare data for filling form
+                        data = $scope.node.type === constants.NODE_RPC ?
+                                YangmanService.prepareReceivedData(
+                                    $scope.node,
+                                    reqObj.method,
+                                    reqObj.receivedData,
+                                    reqObj.sentData,
+                                    constants.DISPLAY_TYPE_FORM
+                                ) : data;
+
                         // try to fill node
                         YangmanService.fillNodeFromResponse($scope.node, data);
                         $scope.node.expanded = true;
@@ -211,68 +262,49 @@ define([
          * @param reqObj
          */
         function executeRequest(reqObj) {
-            $scope.rootBroadcast(
-                'YANGMAN_HEADER_INIT',
-                { path: reqObj.path, method: reqObj.method },
-                function (){
-                    $scope.rootBroadcast(
-                        'YANGMAN_EXECUTE_WITH_DATA',
-                        { data: reqObj.sentData },
-                        function (historyReq){
-                            showData(historyReq);
-                        }
-                    );
-                }
-            );
-
+            showData(reqObj);
+            $scope.rootBroadcast('YANGMAN_EXECUTE_WITH_DATA',{ data: reqObj.sentData });
         }
 
-
         /**
-         * Show current reqObj json data in right panel section
+         * Method for setup data into CM, Header, find api, subapi, node
          * @param reqObj
-         * @param dataType
+         * @param status
          */
-        function showData(reqObj) {
-
-            $scope.setRightPanelSection('req-data');
-            $scope.setJsonView(true, reqObj.method !== 'GET');
-
-            $scope.rootBroadcast('YANGMAN_HEADER_INIT', {
+        function showData(reqObj, select){
+            var headerObj = {
                 path: reqObj.path,
                 method: reqObj.method,
-                statusObj: {
+            };
+
+            // action select request
+            if ( select ) {
+                headerObj.statusObj = {
                     status: reqObj.responseStatus,
                     statusText: reqObj.responseStatusText,
                     time: reqObj.responseTime,
-                },
-            });
+                };
 
-            $scope.rootBroadcast(
-                'YANGMAN_SET_ERROR_DATA',
-                reqObj.receivedData && reqObj.receivedData.hasOwnProperty('errors') ? reqObj.receivedData : {}
-            );
+                $scope.rootBroadcast(
+                    'YANGMAN_SET_ERROR_DATA',
+                    reqObj.receivedData && reqObj.receivedData.hasOwnProperty('errors') ? reqObj.receivedData : {}
+                );
+            }
+
+            $scope.setRightPanelSection(constants.DISPLAY_TYPE_REQ_DATA);
+            $scope.setJsonView(true, reqObj.method !== constants.OPERATION_GET);
+
+            $scope.rootBroadcast('YANGMAN_HEADER_INIT', headerObj);
+            $scope.rootBroadcast('YANGMAN_FILL_NODE_FROM_REQ', { requestUrl: reqObj.path });
 
-            $scope.rootBroadcast(
-                'YANGMAN_SET_CODEMIRROR_DATA_SENT',
-                { data: reqObj.setDataForView(reqObj.sentData) }
-            );
             $scope.rootBroadcast(
                 'YANGMAN_SET_CODEMIRROR_DATA_RECEIVED',
                 { data: reqObj.setDataForView(reqObj.receivedData) }
             );
 
-            var data = reqObj.method === 'GET' ? reqObj.receivedData : reqObj.sentData;
-
-            $scope.rootBroadcast('YANGMAN_FILL_NODE_FROM_REQ', { requestUrl: reqObj.path, leftpanel: 0},
-                function (){
-                    if ( $scope.node ) {
-                        // try to fill node
-                        YangmanService.fillNodeFromResponse($scope.node, data);
-                        $scope.node.expanded = true;
-                    }
-
-                }
+            $scope.rootBroadcast(
+                'YANGMAN_SET_CODEMIRROR_DATA_SENT',
+                { data: reqObj.setDataForView(reqObj.sentData) }
             );
         }
 
@@ -286,34 +318,42 @@ define([
         /**
          * Dialog for deleting either selected requests or reqObj
          *
-         * @param ev
+         * @param event
          * @param reqObj
          */
-        function showDgDeleteRequests(ev, reqObj){
+        function showDgDeleteRequests(event, reqObj){
 
             var confirm = $mdDialog.confirm()
                 .title($filter('translate')('YANGMAN_DELETE_REQ_CONFIRM_TITLE'))
                 .textContent($filter('translate')('YANGMAN_DELETE_REQ_CONFIRM_TEXT'))
                 .ariaLabel($filter('translate')('YANGMAN_DELETE_REQ_CONFIRM_TITLE'))
-                .targetEvent(ev)
+                .targetEvent(event)
                 .ok($filter('translate')('YANGMAN_OK'))
                 .cancel($filter('translate')('YANGMAN_CANCEL'));
 
-            YangmanDesignService.disableMdMenuItem(ev);
+            YangmanDesignService.disableMdMenuItem(event);
 
             $mdDialog.show(confirm).then(function (){
                 if (reqObj){
                     vm.mainList.deleteRequestItem(reqObj);
                 }
                 else {
-                    vm.mainList.selectedRequests.forEach(function (elem){
+                    vm.mainList.getSelectedItems(
+                        vm.mainList === vm.collectionList ? filterCollReq : filterReq
+                    ).forEach(function (elem){
                         vm.mainList.deleteRequestItem(elem);
                     });
                 }
                 vm.mainList.saveToStorage();
-                $scope.rootBroadcast('YANGMAN_REFRESH_HISTORY');
+
+                if (vm.mainList === vm.requestList) {
+                    loadHistoryList();
+                }
+                else {
+                    refreshCollectionsWithExpansion();
+                }
             }, function (){
-                YangmanDesignService.enableMdMenuItem(ev);
+                YangmanDesignService.enableMdMenuItem(event);
             });
         }
 
@@ -337,7 +377,7 @@ define([
             $mdDialog.show(confirm).then(function (){
                 vm.collectionList.deleteCollection(collObj);
                 vm.collectionList.saveToStorage();
-                refreshCollections();
+                refreshCollectionsWithExpansion();
             }, function (){
                 YangmanDesignService.enableMdMenuItem(ev);
             });
@@ -349,7 +389,10 @@ define([
          * @returns {boolean}
          */
         function filterReq(reqObj){
-            return reqObj.path.indexOf(vm.search) !== -1;
+            var searchPhrase = vm.search.toLocaleLowerCase();
+            return reqObj.path.toLowerCase().indexOf(searchPhrase) > -1 ||
+                reqObj.collection.toLowerCase().indexOf(searchPhrase) > -1 ||
+                reqObj.method.toLowerCase() === searchPhrase;
         }
 
         /**
@@ -375,7 +418,7 @@ define([
          * @returns {boolean}
          */
         function filterColName(colObj){
-            return colObj.name.indexOf(vm.search) !== -1;
+            return colObj.name.toLowerCase().indexOf(vm.search.toLowerCase()) > -1;
         }
 
         /**
@@ -386,6 +429,7 @@ define([
             return true;
         }
 
+
         /**
          * Show dialog for saving reqObj to collection (used for duplicate req too)
          * @param ev
@@ -402,7 +446,9 @@ define([
                 targetEvent: ev,
                 clickOutsideToClose: true,
                 locals: {
-                    requests: reqObj ? [reqObj] : vm.requestList.selectedRequests,
+                    requests: reqObj ? [reqObj] : vm.mainList.getSelectedItems(
+                        vm.mainList === vm.collectionList ? filterCollReq : filterReq
+                    ),
                     collectionNames: vm.collectionList.getCollectionNames(),
                     duplicate: duplicate || false,
                 },
@@ -415,9 +461,9 @@ define([
          */
         function saveRequests(requests){
             requests.forEach(function (reqObj){
-                vm.collectionList.addRequestToList(reqObj);
+                vm.collectionList.addItemToList(RequestsService.clearUnnecessaryProperties(reqObj.clone()));
                 vm.collectionList.saveToStorage();
-                refreshCollections();
+                refreshCollectionsWithExpansion();
             });
         }
 
@@ -451,7 +497,7 @@ define([
         function changeCollectionName(names){
             vm.collectionList.renameCollection(names[0], names[1]);
             vm.collectionList.saveToStorage();
-            refreshCollections();
+            refreshCollectionsWithExpansion();
         }
 
         /**
@@ -461,53 +507,74 @@ define([
         function duplicateCollection(names){
             vm.collectionList.duplicateCollection(names[0], names[1]);
             vm.collectionList.saveToStorage();
-            refreshCollections();
+            refreshCollectionsWithExpansion();
+        }
+
+
+        function selectNewestRequest() {
+            vm.mainList.toggleReqSelection(true, vm.mainList.getNewestRequest());
+        }
+
+        function loadCollectionsList() {
+            vm.collectionList.loadListFromStorage();
+        }
+
+        function loadHistoryList() {
+            vm.requestList.loadListFromStorage();
         }
 
         /**
          *
-         * @param list collectionList or requestList object
+         * @param mainList collectionList or requestList object
          */
-        function init(list){
-            vm.mainList = list;
+        function init(mainList){
+
+            vm.collectionList = RequestsService.createEmptyCollectionList('yangman_collectionsList');
+            // collections are loaded for both history and collections tab
+            loadCollectionsList();
+
+            vm.requestList = RequestsService.createEmptyHistoryList('yangman_requestsList');
+
+
+            // if request was selected, deselect requests in all other instances of RequestsListCtrl
+            $scope.$on('YANGMAN_DESELECT_REQUESTS', function (event, params) {
+                if (params.params.broadcastingCtrl !== vm) {
+                    deselectAllRequests();
+                }
+            });
+
+            $scope.$on('YANGMAN_REFRESH_COLLECTIONS', function (event, params){
+                loadCollectionsList();
+                (params.cbk || angular.noop)();
+            });
+
+            // list type dependend operations
+            if (mainList === 'history') {
 
-            if (list === vm.requestList){
+                vm.mainList = vm.requestList;
+                loadHistoryList();
+
+                $scope.$on('YANGMAN_REFRESH_HISTORY', loadHistoryList);
                 // saving from request header after execution
                 $scope.$on('YANGMAN_SAVE_EXECUTED_REQUEST', saveBcstedHistoryRequest);
+                // select newest request
+                $scope.$on('YANGMAN_SELECT_THE_NEWEST_REQUEST', selectNewestRequest);
+            }
+            else {
+                vm.mainList = vm.collectionList;
                 // saving from request header
                 $scope.$on('YANGMAN_SAVE_REQUEST_TO_COLLECTION', saveRequestFromExt);
-            } else {
                 // saving collections expanded status on refresh
-                $scope.$on('YANGMAN_REFRESH_AND_EXPAND_COLLECTIONS', function(event, params){
-                    $scope.rootBroadcast('YANGMAN_REFRESH_COLLECTIONS');
-                    (params.cbk || angular.noop)();
+                $scope.$on('YANGMAN_REFRESH_AND_EXPAND_COLLECTIONS', function(){
+                    var expandedColNames = vm.collectionList.getExpandedCollectionNames();
+                    $scope.rootBroadcast('YANGMAN_REFRESH_COLLECTIONS', {}, function (){
+                        vm.collectionList.expandCollectionByNames(expandedColNames);
+                    });
                 });
             }
 
         }
 
-        /**
-         * Loading history request and grouping by date
-         */
-        function loadHistoryRequests(){
-            vm.requestList.loadListFromStorage();
-            vm.requestList.groupListByDate();
-        }
-
-        /**
-         * Loading collections
-         */
-        function loadCollectionRequest(){
-            vm.collectionList.loadListFromStorage();
-        }
-
-        /**
-         * Loading both history and collections reqs
-         */
-        function loadRequests(){
-            loadHistoryRequests();
-            loadCollectionRequest();
-        }
 
         /**
          * Request in list selection
@@ -516,38 +583,55 @@ define([
          * @param requestObj
          */
         function selectRequest(event, requestObj){
+            $scope.rootBroadcast('YANGMAN_DESELECT_REQUESTS', { broadcastingCtrl: vm });
             vm.mainList.toggleReqSelection(!event.ctrlKey, requestObj);
-            $scope.setHistoryReqsSelected(vm.requestList.selectedRequests.length > 0);
             if (!event.ctrlKey){
-                vm.showData(requestObj);
+                vm.showData(requestObj, true);
             }
         }
 
+        /**
+         * Mark only requestObj in current list as selected
+         * Used for example when user clicks on request submenu
+         * @param requestObj
+         */
+        function selectOnlyThisRequest(requestObj){
+            vm.mainList.toggleReqSelection(true, requestObj);
+        }
+
         /**
          * Deselect history requests
          */
-        function deselectAllRequests(){
-            vm.mainList.deselectReqs();
+        function deselectAllFilteredReqs(){
+            vm.mainList.deselectAllFilteredItems(vm.mainList === vm.collectionList ? filterCollReq : vm.filterReq);
+        }
+
+        function deselectAllRequests() {
+            vm.mainList.deselectAllItems();
         }
 
         /**
          * Select history requests
          */
-        function selectAllRequests(){
-            deselectAllRequests();
-            vm.mainList.dateGroups.forEach(function(group){
-                vm.mainList.selectReqs(group.requests);
-            });
+        function selectAllFilteredReqs(){
+            vm.mainList.selectAllFilteredItems(vm.mainList === vm.collectionList ? filterCollReq : vm.filterReq);
+        }
+
+        /**
+         * Use when selecting filtered requests if they are saved to some collection
+         * Additional filter is if the collection of the request is expanded
+         * @param request
+         * @returns {*|boolean}
+         */
+        function filterCollReq(request) {
+            return vm.collectionList.getCollection(request.collection).expanded && vm.filterReq(request);
         }
 
         /**
          * Refresh and expand collections
          */
-        function refreshCollections(){
-            var collectionNames = vm.collectionList.getExpandedCollectionNames();
-            $scope.rootBroadcast('YANGMAN_REFRESH_AND_EXPAND_COLLECTIONS', null, function(){
-                vm.collectionList.expandCollectionByNames(collectionNames);
-            });
+        function refreshCollectionsWithExpansion(){
+            $scope.rootBroadcast('YANGMAN_REFRESH_AND_EXPAND_COLLECTIONS');
         }
 
     }