Yangman - validate collection name, ...
[dlux.git] / modules / yangman-resources / src / main / resources / yangman / models / historylist.model.js
1 define(['app/yangman/models/baselist.model'], function (BaseListModel){
2     'use strict';
3
4     /**
5      * Base history list object
6      * @constructor
7      * @param ParsingJsonService
8      * @param RequestsService
9      */
10     function HistoryListModel($filter, ParsingJsonService, RequestsService){
11
12         BaseListModel.call(this, ParsingJsonService);
13
14         /* jshint validthis: true */
15         var self = this;
16         self.list = [];
17         self.dateGroups = [];
18         self.selectedRequests = [];
19
20         self.addRequestToList = addRequestToList;
21         self.clear = clear;
22         self.createEntry = createEntry;
23         self.deleteRequestItem = deleteRequestItem;
24         self.deselectReqs = deselectReqs;
25         self.groupListByDate = groupListByDate;
26         self.selectReqs = selectReqs;
27         self.toggleReqSelection = toggleReqSelection;
28         self.getNewestRequest = getNewestRequest;
29
30         /**
31          * Get request with max timestamp (was executed as the last)
32          */
33         function getNewestRequest() {
34             return $filter('orderBy')(self.list, '-timestamp')[0];
35         }
36
37         /**
38          * Mark reqObj as selected
39          * @param {boolean} onlyOneSelected boolean if only this object should be marked as selected
40          * @param reqObj HistoryRequest object to be selected
41          */
42         function toggleReqSelection(onlyOneSelected, reqObj){
43             if (onlyOneSelected){
44                 self.selectedRequests.forEach(function (req){
45                     req.selected = false;
46                 });
47                 self.selectedRequests = [];
48             }
49
50             if (reqObj.selected && !onlyOneSelected){
51                 self.selectedRequests.splice(self.selectedRequests.indexOf(reqObj), 1);
52             }
53
54             reqObj.selected = (reqObj.selected && onlyOneSelected) || !reqObj.selected;
55             if (reqObj.selected){
56                 self.selectedRequests.push(reqObj);
57             }
58
59         }
60
61         /**
62          * Round timestamp to day
63          * @param timeStamp
64          * @returns {number|*}
65          */
66         function roundTimestampToDate(timeStamp){
67             timeStamp -= timeStamp % (24 * 60 * 60 * 1000);//subtract amount of time since midnight
68             timeStamp += new Date().getTimezoneOffset() * 60 * 1000;//add on the timezone offset
69             return timeStamp;
70         }
71
72         /**
73          * Grouping by date to show date groups in yangman
74          */
75         function groupListByDate(){
76             self.list.forEach(addToListDateGroup);
77
78             function addToListDateGroup(elem){
79                 if (elem.timestamp){
80                     var groupName = roundTimestampToDate(elem.timestamp),
81                         dateGroupArr = self.dateGroups.filter(function(group){
82                             return group.name === groupName;
83                         }),
84                         dateGroup = null;
85
86                     if (dateGroupArr.length){
87                         dateGroup = dateGroupArr[0];
88                     }
89                     else {
90                         dateGroup = {
91                             name: groupName,
92                             longName: new Date(groupName).toDateString(),
93                             requests: [],
94                         };
95                         self.dateGroups.push(dateGroup);
96                     }
97                     dateGroup.requests.push(elem);
98                 }
99             }
100         }
101
102         /**
103          *
104          * @param elem
105          * @returns {HistoryRequest|*}
106          */
107         function createEntry(elem) {
108             return RequestsService.createHistoryRequestFromElement(elem);
109         }
110
111         /**
112          *
113          * @param reqObj
114          */
115         function addRequestToList(reqObj){
116             self.list.push(reqObj);
117         }
118
119         /**
120          *
121          * @param elem
122          */
123         function deleteRequestItem(elem){
124             self.list.splice(self.list.indexOf(elem), 1);
125         }
126
127         function clear() {
128             self.list = [];
129             self.dateGroups = [];
130             self.selectedRequests = [];
131         }
132
133         /**
134          *
135          * @returns {Array}
136          */
137         self.toJSON = function () {
138             return self.list.map(function (elem) {
139                 return elem.toJSON();
140             });
141         };
142
143         /**
144          * Mark all history requests as deselected
145          */
146         function deselectReqs(){
147             self.selectedRequests.forEach(function (request){
148                 request.selected = false;
149             });
150             self.selectedRequests = [];
151         }
152
153         /**
154          * Mark all history requests as selected
155          */
156         function selectReqs(requestsList){
157             requestsList.forEach(function (reqObj){
158                 reqObj.selected = true;
159                 self.selectedRequests.push(reqObj);
160             });
161         }
162     }
163
164     HistoryListModel.prototype = Object.create(BaseListModel.prototype);
165
166     return HistoryListModel;
167
168 });