Yangman - requests settings
[dlux.git] / modules / yangman-resources / src / main / resources / yangman / models / parameterslist.model.js
1 define(['app/yangman/models/baselist.model'], function (BaseListModel){
2     'use strict';
3
4     /**
5      * Base parameters list object
6      * @constructor
7      * @param ParsingJsonService
8      * @param ParametersService
9      */
10     function ParametersListModel($filter, ParsingJsonService, ParametersService){
11
12         BaseListModel.call(this, $filter, ParsingJsonService);
13
14         /* jshint validthis: true */
15         var self = this;
16         self.list = [];
17
18         self.addItemToList = addItemToList;
19         self.clear = clear;
20         self.createItem = createItem;
21         self.deleteParameterItem = deleteParameterItem;
22         self.setName = setName;
23         self.addEmptyItem = addEmptyItem;
24         self.toJSON = toJSON;
25         self.createParamsFromJson = createParamsFromJson;
26         self.isNameUnique = isNameUnique;
27         self.removeEmptyParams = removeEmptyParams;
28         self.applyValsForFilters = applyValsForFilters;
29         self.clone = clone;
30
31         /**
32          * Create copy of parameters list model
33          */
34         function clone() {
35             var result = ParametersService.createEmptyParametersList(self.name);
36             self.list.forEach(function (param) {
37                 result.addItemToList(param.clone());
38             });
39             return result;
40         }
41
42         /**
43          * Apply all parameters names and values for filtering
44          */
45         function applyValsForFilters() {
46             self.list.forEach(function (param) {
47                 param.applyValsForFilters();
48             });
49         }
50
51         /**
52          * Returns false if name is already used
53          * @param nameValue
54          * @returns {boolean}
55          */
56         function isNameUnique(nameValue) {
57             return !nameValue || self.list.filter(function (item) {
58                 return item.name === nameValue;
59             }).length === 1;
60         }
61
62         /**
63          * Using when importing data from json file
64          * @param data
65          */
66         function createParamsFromJson(data){
67             if (data){
68                 self.clear();
69                 ParsingJsonService.parseJson(data).map(function (elem) {
70                     return ParametersService.createParameter(elem);
71                 }).forEach(function (elem) {
72                     self.addItemToList(elem);
73                 });
74             }
75         }
76
77         /**
78          * Get all parameters in json for exporting
79          * @returns {Array}
80          */
81         function toJSON() {
82             return self.list.map(function (param){
83                 return param.toJSON();
84             });
85         }
86
87         /**
88          * Set list name
89          * @param name
90          */
91         function setName(name) {
92             self.name = name;
93         }
94
95         /**
96          * Add empty param to list
97          */
98         function addEmptyItem() {
99             self.addItemToList(self.createItem());
100         }
101
102         function removeEmptyParams() {
103             self.list = self.list.filter(function (param) {
104                 return param.name && param.name.length > 0;
105             });
106         }
107
108         /**
109          *
110          * @param elem
111          * @returns {Parameter|*}
112          */
113         function createItem(element) {
114             if (!element){
115                 element = {
116                     name: '',
117                     value: '',
118                 };
119             }
120             return ParametersService.createParameter(element);
121         }
122
123         /**
124          *
125          * @param paramObj
126          */
127         function addItemToList(paramObj){
128             self.list.push(paramObj);
129         }
130
131         /**
132          *
133          * @param paramObj
134          */
135         function deleteParameterItem(paramObj){
136             self.list.splice(self.list.indexOf(paramObj), 1);
137         }
138
139         function clear() {
140             self.list = [];
141         }
142
143         /**
144          *
145          * @returns {Array}
146          */
147         self.toJSON = function () {
148             return self.list.filter(notEmptyParam).map(function (elem) {
149                 return elem.toJSON();
150             });
151
152             function notEmptyParam(item){
153                 return item.name;
154             }
155         };
156     }
157
158     ParametersListModel.prototype = Object.create(BaseListModel.prototype);
159
160     return ParametersListModel;
161
162 });