X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=modules%2Fyangman-resources%2Fsrc%2Fmain%2Fresources%2Fyangman%2Fcontrollers%2Frequests-list.controller.js;h=5d792a2018aba294dfc2889edb1d04db785d37e0;hb=19b078e3c071e77c43b6cef39e8f22f15dc630ea;hp=de13d1ca6ffa4be339421f2381d2944d6f5dc150;hpb=b9d8874ada6aa47b0ce60bc9105a444e9653e762;p=dlux.git diff --git a/modules/yangman-resources/src/main/resources/yangman/controllers/requests-list.controller.js b/modules/yangman-resources/src/main/resources/yangman/controllers/requests-list.controller.js index de13d1ca..5d792a20 100644 --- a/modules/yangman-resources/src/main/resources/yangman/controllers/requests-list.controller.js +++ b/modules/yangman-resources/src/main/resources/yangman/controllers/requests-list.controller.js @@ -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'); + $scope.rootBroadcast(constants.YANGMAN_REFRESH_COLLECTIONS); + YangmanDesignService.enableMdMenuItem(event); + }, function () { + YangmanDesignService.enableMdMenuItem(event); }); } @@ -105,14 +136,15 @@ define([ * @param params */ function saveBcstedHistoryRequest(broadcastEvent, 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(''); @@ -124,21 +156,13 @@ define([ * @param $fileContent */ function readCollectionFromFile($fileContent) { - var data = $fileContent, - checkArray = [ - 'sentData', - 'receivedData', - 'path', - 'collection', - 'method', - 'status', - 'name', - ]; - - if (data && YangmanService.validateFile(data, checkArray)){ + var data = $fileContent; + + if (data && YangmanService.validateFile(data, constants.COLLECTION_CHECK_ARRAY)){ try { vm.collectionList.loadListFromFile(data); vm.collectionList.saveToStorage(); + $scope.rootBroadcast(constants.YANGMAN_REFRESH_COLLECTIONS); clearFileInputValue(); } catch (e) { @@ -149,6 +173,11 @@ define([ else { clearFileInputValue(); } + removeButtonBackground(); + + function removeButtonBackground() { + $('#importCollection').next().css({ 'background': 'transparent' }); + } } function toggleCollectionsSort() { @@ -161,9 +190,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); @@ -176,14 +205,47 @@ 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( + constants.YANGMAN_SET_CODEMIRROR_DATA_RECEIVED, { data: reqObj.setDataForView(reqObj.receivedData) } + ); + $scope.rootBroadcast( + constants.YANGMAN_SET_CODEMIRROR_DATA_SENT, { data: reqObj.setDataForView(reqObj.sentData) } + ); + + $scope.rootBroadcast(constants.YANGMAN_SET_ERROR_DATA, + reqObj.receivedData && reqObj.receivedData.hasOwnProperty('errors') ? reqObj.receivedData : {}); - $scope.rootBroadcast('YANGMAN_FILL_NODE_FROM_REQ', { requestUrl: reqObj.path, requestData: data }, + $scope.rootBroadcast(constants.YANGMAN_FILL_NODE_FROM_REQ, { requestUrl: reqObj.path, requestData: data }, function (){ - $scope.setRightPanelSection('form'); - $scope.rootBroadcast('YANGMAN_HEADER_INIT', { path: reqObj.path, method: reqObj.method }); + $scope.setRightPanelSection(constants.DISPLAY_TYPE_FORM); + $scope.rootBroadcast(constants.YANGMAN_HEADER_INIT, { + path: reqObj.path, + method: reqObj.method, + statusObj: { + status: reqObj.responseStatus, + statusText: reqObj.responseStatusText, + time: reqObj.responseTime, + }, + }); 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; @@ -199,55 +261,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(constants.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) { + function showData(reqObj, select){ + var headerObj = { + path: reqObj.path, + method: reqObj.method, + }; + + // action select request + if ( select ) { + headerObj.statusObj = { + status: reqObj.responseStatus, + statusText: reqObj.responseStatusText, + time: reqObj.responseTime, + }; + + $scope.rootBroadcast( + constants.YANGMAN_SET_ERROR_DATA, + reqObj.receivedData && reqObj.receivedData.hasOwnProperty('errors') ? reqObj.receivedData : {} + ); + } - $scope.setRightPanelSection('req-data'); - $scope.setJsonView(true, reqObj.method !== 'GET'); + $scope.setRightPanelSection(constants.DISPLAY_TYPE_REQ_DATA); + $scope.setJsonView(true, reqObj.method !== constants.OPERATION_GET); - $scope.rootBroadcast('YANGMAN_HEADER_INIT', { path: reqObj.path, method: reqObj.method }); + $scope.rootBroadcast(constants.YANGMAN_HEADER_INIT, headerObj); + $scope.rootBroadcast(constants.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', + constants.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( + constants.YANGMAN_SET_CODEMIRROR_DATA_SENT, + { data: reqObj.setDataForView(reqObj.sentData) } ); } @@ -261,34 +317,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); }); } @@ -312,7 +376,7 @@ define([ $mdDialog.show(confirm).then(function (){ vm.collectionList.deleteCollection(collObj); vm.collectionList.saveToStorage(); - refreshCollections(); + refreshCollectionsWithExpansion(); }, function (){ YangmanDesignService.enableMdMenuItem(ev); }); @@ -324,7 +388,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; } /** @@ -350,7 +417,7 @@ define([ * @returns {boolean} */ function filterColName(colObj){ - return colObj.name.indexOf(vm.search) !== -1; + return colObj.name.toLowerCase().indexOf(vm.search.toLowerCase()) > -1; } /** @@ -361,6 +428,7 @@ define([ return true; } + /** * Show dialog for saving reqObj to collection (used for duplicate req too) * @param ev @@ -377,7 +445,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, }, @@ -390,9 +460,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(); }); } @@ -426,7 +496,7 @@ define([ function changeCollectionName(names){ vm.collectionList.renameCollection(names[0], names[1]); vm.collectionList.saveToStorage(); - refreshCollections(); + refreshCollectionsWithExpansion(); } /** @@ -436,90 +506,136 @@ 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(constants.YANGMAN_DESELECT_REQUESTS, function (event, params) { + if (params.params.broadcastingCtrl !== vm) { + deselectAllRequests(); + } + }); + + $scope.$on(constants.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(constants.YANGMAN_REFRESH_HISTORY, loadHistoryList); // saving from request header after execution - $scope.$on('YANGMAN_SAVE_EXECUTED_REQUEST', saveBcstedHistoryRequest); + $scope.$on(constants.YANGMAN_SAVE_EXECUTED_REQUEST, saveBcstedHistoryRequest); + // select newest request + $scope.$on(constants.YANGMAN_SELECT_THE_NEWEST_REQUEST, selectNewestRequest); + } + else { + vm.mainList = vm.collectionList; // saving from request header - $scope.$on('YANGMAN_SAVE_REQUEST_TO_COLLECTION', saveRequestFromExt); - } else { + $scope.$on(constants.YANGMAN_SAVE_REQUEST_TO_COLLECTION, saveRequestFromExt); // 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(constants.YANGMAN_REFRESH_AND_EXPAND_COLLECTIONS, function(){ + var expandedColNames = vm.collectionList.getExpandedCollectionNames(); + $scope.rootBroadcast(constants.YANGMAN_REFRESH_COLLECTIONS, {}, function (){ + vm.collectionList.expandCollectionByNames(expandedColNames); + }); }); } } + /** - * Loading history request and grouping by date + * Request in list selection + * For history reqs it is possible multiselect, thats why event.ctrlKey is used + * @param event + * @param requestObj */ - function loadHistoryRequests(){ - vm.requestList.loadListFromStorage(); - vm.requestList.groupListByDate(); + function selectRequest(event, requestObj){ + $scope.rootBroadcast(constants.YANGMAN_DESELECT_REQUESTS, { broadcastingCtrl: vm }); + vm.mainList.toggleReqSelection(!event.ctrlKey, requestObj); + if (!event.ctrlKey){ + if ($scope.rightPanelSection === constants.DISPLAY_TYPE_FORM) { + vm.showForm(requestObj, true); + } + else { + vm.showData(requestObj, true); + } + } } /** - * Loading collections + * Mark only requestObj in current list as selected + * Used for example when user clicks on request submenu + * @param requestObj */ - function loadCollectionRequest(){ - vm.collectionList.loadListFromStorage(); + function selectOnlyThisRequest(requestObj){ + vm.mainList.toggleReqSelection(true, requestObj); } /** - * Loading both history and collections reqs + * Deselect history requests */ - function loadRequests(){ - loadHistoryRequests(); - loadCollectionRequest(); + function deselectAllFilteredReqs(){ + vm.mainList.deselectAllFilteredItems(vm.mainList === vm.collectionList ? filterCollReq : vm.filterReq); } - /** - * Request in list selection - * For history reqs it is possible multiselect, thats why event.ctrlKey is used - * @param event - * @param requestObj - */ - function selectRequest(event, requestObj){ - vm.mainList.toggleReqSelection(!event.ctrlKey, requestObj); - $scope.setHistoryReqsSelected(vm.requestList.selectedRequests.length > 0); + function deselectAllRequests() { + vm.mainList.deselectAllItems(); } /** - * Deselect history requests + * Select history requests */ - function deselectAllRequests(){ - vm.mainList.deselectReqs(); + function selectAllFilteredReqs(){ + vm.mainList.selectAllFilteredItems(vm.mainList === vm.collectionList ? filterCollReq : vm.filterReq); } /** - * Select history requests + * 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 selectAllRequests(){ - deselectAllRequests(); - vm.mainList.dateGroups.forEach(function(group){ - vm.mainList.selectReqs(group.requests); - }); + 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(constants.YANGMAN_REFRESH_AND_EXPAND_COLLECTIONS); } }