Yangman - fix parameters duplicity validation
[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(ParsingJsonService, ParametersService){
11
12         BaseListModel.call(this, ParsingJsonService);
13
14         /* jshint validthis: true */
15         var self = this;
16         self.list = [];
17
18         self.addRequestToList = addRequestToList;
19         self.clear = clear;
20         self.createEntry = createEntry;
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
29         /**
30          * Returns false if name is already used
31          * @param nameValue
32          * @returns {boolean}
33          */
34         function isNameUnique(nameValue) {
35             return nameValue.length === 0 || self.list.filter(function (item) {
36                 return item.name === nameValue;
37             }).length === 1;
38         }
39
40         /**
41          * Using when importing data from json file
42          * @param data
43          */
44         function createParamsFromJson(data){
45             if (data){
46                 self.clear();
47                 ParsingJsonService.parseJson(data).map(function (elem) {
48                     return ParametersService.createParameter(elem);
49                 }).forEach(function (elem) {
50                     self.addRequestToList(elem);
51                 });
52             }
53         }
54
55         /**
56          * Get all parameters in json for exporting
57          * @returns {Array}
58          */
59         function toJSON() {
60             return self.list.map(function (param){
61                 return param.toJSON();
62             });
63         }
64
65         /**
66          * Set list name
67          * @param name
68          */
69         function setName(name) {
70             self.name = name;
71         }
72
73         /**
74          * Add empty param to list
75          */
76         function addEmptyItem() {
77             self.addRequestToList(self.createEntry());
78         }
79
80         function removeEmptyParams() {
81             self.list = self.list.filter(function (param) {
82                 return param.name.length > 0;
83             });
84         }
85
86         /**
87          *
88          * @param elem
89          * @returns {Parameter|*}
90          */
91         function createEntry(element) {
92             if (!element){
93                 element = {
94                     name: '',
95                     value: '',
96                 };
97             }
98             return ParametersService.createParameter(element);
99         }
100
101         /**
102          *
103          * @param paramObj
104          */
105         function addRequestToList(paramObj){
106             self.list.push(paramObj);
107         }
108
109         /**
110          *
111          * @param paramObj
112          */
113         function deleteParameterItem(paramObj){
114             self.list.splice(self.list.indexOf(paramObj), 1);
115         }
116
117         function clear() {
118             self.list = [];
119         }
120
121         /**
122          *
123          * @returns {Array}
124          */
125         self.toJSON = function () {
126             return self.list.filter(notEmptyParam).map(function (elem) {
127                 return elem.toJSON();
128             });
129
130             function notEmptyParam(item){
131                 return item.name;
132             }
133         };
134     }
135
136     ParametersListModel.prototype = Object.create(BaseListModel.prototype);
137
138     return ParametersListModel;
139
140 });