angular.module('app.yangman').controller('RequestHeaderCtrl', RequestHeaderCtrl);
RequestHeaderCtrl.$inject = [
- '$mdDialog', '$scope', '$rootScope', 'ENV', 'YangmanService', 'ParametersService', 'PathUtilsService',
- 'RequestsService', '$filter', 'DataBackupService',
+ '$mdDialog', '$mdToast', '$scope', '$rootScope', 'ENV', 'YangmanService', 'ParametersService',
+ 'PathUtilsService', 'RequestsService', '$filter', 'DataBackupService',
];
- function RequestHeaderCtrl($mdDialog, $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'];
/**
* Set selected operations based on data store
*/
- $scope.$on('SET_SEL_OPERATIONS', function (event, operations) {
+ $scope.$on('SET_SEL_OPERATIONS', function (event, operations, setUrl) {
setAllowedMethods(operations);
- setRequestUrl();
+
+ if ( setUrl ) {
+ setRequestUrl();
+ }
});
/**
init();
setRequestUrl(args.params.path);
setRequestMethod(args.params.method);
+ setRequestStatus(args.params.statusObj);
+ setJsonView();
(args.cbk || angular.noop)();
});
(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;
+ }
+
/**
* Show popup for parameters administration
* @param event
locals: {
parametersList: $scope.parametersList,
},
+ }).then(function (){
+ $scope.parametersList.loadListFromStorage();
+
});
}
// 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
$scope.rootBroadcast('YANGMAN_SET_CODEMIRROR_DATA_' + type, { data: JSON.stringify(data, null, 4) });
}
+ function sendErrorData(response) {
+ $scope.rootBroadcast('YANGMAN_SET_ERROR_DATA', response);
+ }
+
/**
* Create empty parameters list, load from local storage and set to $scope
*/
function initParams(){
- var paramsList = ParametersService.createEmptyParametersList('yangman_parameters');
- paramsList.loadListFromStorage();
- $scope.setParametersList(paramsList);
+ $scope.parametersList.loadListFromStorage();
}
/**
*/
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);
+ 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);
+ }
+ (cbk || angular.noop)(treeApis);
}
});
}
function saveRequestToCollection(event) {
+
+ if (requestHeader.selectedShownDataType === 'form') {
+ requestHeader.setRequestUrl();
+ }
+
var historyReq = RequestService.createHistoryRequest(null, null, requestHeader.requestUrl,
requestHeader.selectedOperation, '', '', ''),
reqData = {};
$scope.rootBroadcast('YANGMAN_GET_CODEMIRROR_DATA_SENT', params);
reqData = params.reqData ? angular.fromJson(params.reqData) : {};
}
+ else {
+ var data = { srcData: {} };
- var historyReqData = YangmanService.prepareAllRequestData(
- $scope.selectedApi,
- $scope.selectedSubApi,
- requestHeader.selectedOperation,
- $scope.node,
- requestHeader.selectedShownDataType,
- requestHeader.requestUrl,
- reqData,
- $scope.parametersList
- );
+ YangmanService.setSrcDataByDataType(data, $scope.node, {}, 'form');
+ reqData = data.srcData;
+ }
- historyReq.setExecutionData(historyReqData.reqData, {}, '');
+ historyReq.setExecutionData(reqData, {}, '');
$scope.rootBroadcast('YANGMAN_SAVE_REQUEST_TO_COLLECTION', { event: event, reqObj: historyReq });
}
+ function showRequestProgress(){
+ $scope.rootBroadcast('YANGMAN_EXECUTING_REQUEST_PROGRESS_START');
+ }
+
+
+ function finishRequestProgress (message){
+ $scope.rootBroadcast('YANGMAN_EXECUTING_REQUEST_PROGRESS_STOP');
+ // $mdToast.show(
+ // $mdToast.simple()
+ // .textContent(message)
+ // .position('bottom right')
+ // .parent(angular.element('.yangmanModule__right-panel__header'))
+ // .hideDelay(1500)
+ // );
+ }
+
/**
* Execute request operation
*/
function executeOperation(requestData, executeCbk){
+ var allowExecuteOperation =
+ requestHeader.selectedShownDataType === 'form' && $scope.selectedSubApi ?
+ !PathUtilsService.checkEmptyIdentifiers($scope.selectedSubApi.pathArray) : 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
- );
+ if ( allowExecuteOperation ) {
+
+ showRequestProgress();
+ setRequestUrl(requestHeader.selectedShownDataType === 'req-data' ? requestHeader.requestUrl : null);
+ $scope.rootBroadcast('YANGMAN_SET_ERROR_MESSAGE', '');
+
+ 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
* @param reqInfo
* @param response
*/
function executeReqSuccCbk(reqInfo, response) {
- requestHeader.statusObj = reqInfo;
-
- // create and set history request
- historyReq.setExecutionData(
- reqInfo.requestData,
+ var preparedReceivedData = YangmanService.prepareReceivedData(
+ $scope.node,
+ requestHeader.selectedOperation,
response.data ? response.data.plain() : {},
- reqInfo.status
+ reqInfo.requestSrcData,
+ requestHeader.selectedShownDataType
);
- if (response.data) {
+ finishRequestProgress();
- // if executing from json form, try to find api, subapi and node
- if ( requestHeader.selectedShownDataType === 'req-data' ) {
- setNodeDataFromRequestData(requestHeader.requestUrl);
- }
+ requestHeader.statusObj = reqInfo;
- // try to fill code mirror editor
- sendRequestData(response.data.plain(), 'RECEIVED');
+ sendErrorData({});
- // try to fill node, if some was found or filled in form
- if ( $scope.node ) {
- $scope.node.clear();
- YangmanService.fillNodeFromResponse($scope.node, response.data);
- $scope.node.expanded = true;
- }
+ if (requestHeader.selectedShownDataType === 'req-data'){
+ setNodeDataFromRequestData(requestHeader.requestUrl);
+ sendRequestData(preparedReceivedData, 'RECEIVED');
+ sendRequestData(reqInfo.requestSrcData || {}, 'SENT');
} else {
- sendRequestData({}, 'RECEIVED');
+
+ if ($scope.node){
+
+ YangmanService.fillNodeFromResponse($scope.node, preparedReceivedData);
+ $scope.node.expanded = true;
+
+ $scope.rootBroadcast('YANGMAN_DISABLE_ADDING_LIST_ELEMENT');
+ preparedReceivedData = YangmanService.checkRpcReceivedData(preparedReceivedData, $scope.node);
+ sendRequestData(preparedReceivedData, 'RECEIVED');
+ }
}
- $scope.rootBroadcast('YANGMAN_SAVE_EXECUTED_REQUEST', historyReq);
+ // 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);
+
}
/**
- *
+ * Error callback after executin operation
* @param reqInfo
* @param response
*/
function executeReqErrCbk(reqInfo, response) {
-
requestHeader.statusObj = reqInfo;
- historyReq.setExecutionData(reqInfo.requestData, null, reqInfo.status);
- $scope.rootBroadcast('YANGMAN_SAVE_EXECUTED_REQUEST', historyReq);
+ finishRequestProgress();
+
+ historyReq.setExecutionData(
+ reqInfo.requestSrcData,
+ response.data,
+ reqInfo.status,
+ reqInfo.status,
+ reqInfo.statusText,
+ reqInfo.time
+ );
+ $scope.rootBroadcast('YANGMAN_SAVE_EXECUTED_REQUEST', historyReq, function (){
+ $scope.rootBroadcast('YANGMAN_SELECT_THE_NEWEST_REQUEST');
+ });
+
+ //setNodeDataFromRequestData(requestHeader.requestUrl);
if (response.data) {
- if ( requestHeader.selectedShownDataType === 'req-data' ) {
- // try to fill code mirror editor
- sendRequestData(response.data, 'RECEIVED');
- }
+ // try to fill code mirror editor
+ sendRequestData(response.data, 'RECEIVED');
+ sendErrorData(response.data);
}
+
(executeCbk || angular.noop)(historyReq);
+
+
}
}
/**
* Check data before executin operations
*/
- function prepareDataAndExecute(){
+ function prepareDataAndExecute(cbk){
if ( requestHeader.requestUrl.length ) {
// get json data
var params = { reqData: null };
$scope.rootBroadcast('YANGMAN_GET_CODEMIRROR_DATA_SENT', params);
- executeOperation(params.reqData ? angular.fromJson(params.reqData) : {});
+ executeOperation(params.reqData ? angular.fromJson(params.reqData) : {}, cbk);
} else {
- executeOperation({});
+ executeOperation({}, cbk);
}
}
}
$scope.setNode(null);
$scope.setModule(null);
$scope.setGlobalParams(mountPointApis, augmentations);
- $scope.selectedDatastore = null;
+ $scope.setDataStore(null);
requestHeader.statusObj = reqObj;
$scope.rootBroadcast('YANGMAN_SET_API_TREE_DATA', mountPointTreeApis);
}