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