2 'app/yangman/models/historylist.model',
3 'app/yangman/models/collectionlist.model',
4 'app/yangman/models/history-request.model',
5 ], function (HistoryListModel, CollectionListModel, HistoryRequestModel) {
8 angular.module('app.yangman').service('RequestsService', RequestsService);
10 RequestsService.$inject = [
11 '$filter', 'PathUtilsService', 'ParametersService', 'ParsingJsonService', 'YangUtilsService',
12 'RequestBuilderService', 'constants',
15 function RequestsService($filter, PathUtilsService, ParametersService, ParsingJsonService, YangUtilsService,
16 RequestBuilderService, constants) {
20 service.applyParamsToObj = applyParamsToObj;
21 service.applyParamsToStr = applyParamsToStr;
22 service.clearUnnecessaryProperties = clearUnnecessaryProperties;
23 service.createEmptyCollectionList = createEmptyCollectionList;
24 service.createEmptyHistoryList = createEmptyHistoryList;
25 service.createHistoryRequestFromElement = createHistoryRequestFromElement;
26 service.createHistoryRequest = createHistoryRequest;
27 service.fillRequestByMethod = fillRequestByMethod;
28 service.fillRequestByViewType = fillRequestByViewType;
29 service.findIdentifierByParam = findIdentifierByParam;
30 service.scanDataParams = scanDataParams;
31 service.replaceStringInText = replaceStringInText;
34 * Clear unnecesary properties for saving to collection
37 function clearUnnecessaryProperties(request){
39 request.responseStatus = null;
40 request.responseStatusText = null;
41 request.responseTime = null;
47 * Find parametrized identifier in path array
52 function findIdentifierByParam(params, pathElement){
53 var foundIdentifier = null;
55 if ( pathElement.hasIdentifier() ){
56 pathElement.identifiers.some(function (item){
57 return params.list.some(function (param){
58 var contained = item.value.indexOf('<<' + param.name + '>>') > -1;
61 foundIdentifier = item;
69 return foundIdentifier;
73 * Get data for saving request depend on view type
81 function fillRequestByViewType(node, viewType, requestData, dataType, method){
82 var setDataByViewType = {
85 emptyObject = method === constants.OPERATION_POST && dataType.toUpperCase() === constants.REQUEST_DATA_TYPE_RECEIVED && node.type !== constants.NODE_RPC;
88 node.buildRequest(RequestBuilderService, data, node.module);
89 data = checkNodeTypeData(node, data, dataType, requestData);
94 'req-data': function (){
95 return requestData ? angular.fromJson(requestData) : {};
99 return setDataByViewType[viewType]();
102 * Exceptions based on node type
109 function checkNodeTypeData(node, data, dataType, requestData){
110 var copyData = angular.copy(data),
111 setDataByNodeType = {
114 if ( dataType.toUpperCase() === constants.REQUEST_DATA_TYPE_RECEIVED ) {
115 copyData = requestData ? angular.fromJson(requestData) : {};
120 default: function () {
125 return (setDataByNodeType[node.type] || setDataByNodeType.default)();
130 * Fill history request data depend on selected method - saving to collection
133 * @param receivedData
136 function fillRequestByMethod(requestObj, sentData, receivedData, method, node, viewType){
137 var setDataByMethod = {
141 receivedData: receivedData.reqData ? angular.fromJson(receivedData.reqData) : {},
146 sentData: fillRequestByViewType(node, viewType, sentData.reqData, 'sent', method),
147 receivedData: fillRequestByViewType(
148 node, viewType, receivedData.reqData, constants.REQUEST_DATA_TYPE_RECEIVED, method
154 sentData: fillRequestByViewType(node, viewType, sentData.reqData, 'sent', method),
165 data = setDataByMethod[method]();
167 requestObj.setExecutionData(data.sentData, data.receivedData, '');
171 * Scan used parameters in current line of codemirror
172 * @param {ParametersListModel} paramsObj - list of parameters to be searched for
173 * @param {string} lineString - line from current codemirror to be inspected
174 * @returns array of {ParameterModel}
176 function scanDataParams(paramsObj, lineString) {
178 var usedParamLabelArray = [];
180 var params = lineString ? lineString.match(/<<(?!<<)[a-zA-Z0-9]+>>/g) : null;
185 .forEach(function (param) {
186 usedParamLabelArray.push(removeUnwantedChars(param));
190 var returnedParamsList = paramsObj.list.filter( function (param){
191 var paramIndex = usedParamLabelArray.indexOf(param.name);
193 if ( paramIndex !== -1 ) {
194 return usedParamLabelArray.splice(paramIndex, 1);
201 usedParamLabelArray.forEach(function (param){
202 returnedParamsList.push(ParametersService.createParameter({ name: param }));
205 return returnedParamsList;
208 * remove chars greater then and less then from parameter definition
212 function removeUnwantedChars(val){
213 var string = val.substring(2);
214 return string.substring(0, string.indexOf('>>'));
224 function onlyUnique(value, index, self) {
225 return self.indexOf(value) === index;
230 * Replace all parameters with its values
235 function applyParamsToStr(paramsObj, str) {
236 if (paramsObj && paramsObj.hasOwnProperty('list')) {
237 paramsObj.list.forEach(function (param){
238 str = service.replaceStringInText(str, '<<' + param.name + '>>', param.value);
246 * Replace all parameters with its values
251 function applyParamsToObj(paramsObj, data) {
252 var dataStr = JSON.stringify(data);
254 dataStr = service.applyParamsToStr(paramsObj, dataStr);
256 return ParsingJsonService.parseJson(dataStr);
260 * Service for replacing string in text
262 * @param strToReplace
266 function replaceStringInText(text, strToReplace, newStr) {
267 var replacedText = text;
268 if (text.indexOf(strToReplace) > -1) {
269 replacedText = text.split(strToReplace).join(newStr);
275 * Service for creating basic history object
277 * @param receivedData
286 function createHistoryRequest(sentData, receivedData, path, operation, status, name, collection, timestamp,
287 responseStatus, responseStatusText, responseTime) {
288 var result = new HistoryRequestModel(PathUtilsService, YangUtilsService, ParsingJsonService);
290 timestamp = timestamp || Date.now();
292 result.setData(sentData, receivedData, status, path, operation, name, collection, timestamp,
293 responseStatus, responseStatusText, responseTime);
299 * Creating {HistoryRequest} from elem containing all necessary data
300 * @param {Object} elem
303 function createHistoryRequestFromElement(elem) {
304 if (!elem.hasOwnProperty('timestamp') || elem.timestamp === ''){
305 elem.timestamp = Date.now();
308 return service.createHistoryRequest(elem.sentData, elem.receivedData, elem.path, elem.method,
309 elem.status, elem.name, elem.collection, elem.timestamp, elem.responseStatus,
310 elem.responseStatusText, elem.responseTime
315 * Service for creating empty collection list
317 * @param getApiFunction
318 * @returns {CollectionList}
320 function createEmptyCollectionList(name){
321 var result = new CollectionListModel($filter, ParsingJsonService, service);
322 result.setName(name);
327 * Service for creating empty history list
331 function createEmptyHistoryList(name, settingsObj){
332 var result = new HistoryListModel($filter, ParsingJsonService, service);
333 result.setName(name);
334 result.setSettings(settingsObj);