[LIB-10] SerialVersionUID for Serializable classes
[snooker-score-api.git] / src / main / java / org / hedgecode / snooker / json / JsonEvents.java
1 /*
2  * Copyright (c) 2017-2020. Developed by Hedgecode.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package org.hedgecode.snooker.json;
18
19 import java.io.Serializable;
20 import java.util.ArrayList;
21 import java.util.Calendar;
22 import java.util.Date;
23 import java.util.List;
24
25 import org.hedgecode.snooker.api.Event;
26 import org.hedgecode.snooker.api.Events;
27 import org.hedgecode.snooker.api.Season;
28 import org.hedgecode.snooker.compare.EventComparators;
29
30 /**
31  * Events Entity (set of {@link Event}) to JSON deserialize.
32  *
33  * @author Dmitry Samoshin aka gotty
34  */
35 public class JsonEvents extends JsonCollectionEntity<Event> implements Events, Serializable {
36
37     private static final long serialVersionUID = 3333612126168481839L;
38
39     private static final JsonEvents EMPTY = new JsonEvents(new Event[0]);
40
41     JsonEvents(Event[] entities) {
42         super(entities);
43     }
44
45     JsonEvents(List<Event> entities) {
46         super(entities);
47     }
48
49     @Override
50     public Events bySeason(Season season) {
51         List<Event> events = new ArrayList<>();
52         for (Event event : this)
53             if (event.season().equals(season))
54                 events.add(event);
55         return events.isEmpty() ? EMPTY : new JsonEvents(events);
56     }
57
58     @Override
59     public Events byType(String type) {
60         List<Event> events = new ArrayList<>();
61         for (Event event : this)
62             if (event.type().equals(type))
63                 events.add(event);
64         return events.isEmpty() ? EMPTY : new JsonEvents(events);
65     }
66
67     @Override
68     public Events byCity(String city) {
69         List<Event> events = new ArrayList<>();
70         for (Event event : this)
71             if (event.city().equals(city))
72                 events.add(event);
73         return events.isEmpty() ? EMPTY : new JsonEvents(events);
74     }
75
76     @Override
77     public Events byCountry(String country) {
78         List<Event> events = new ArrayList<>();
79         for (Event event : this)
80             if (event.country().equals(country))
81                 events.add(event);
82         return events.isEmpty() ? EMPTY : new JsonEvents(events);
83     }
84
85     @Override
86     public Events bySex(String sex) {
87         List<Event> events = new ArrayList<>();
88         for (Event event : this)
89             if (event.sex().equals(sex))
90                 events.add(event);
91         return events.isEmpty() ? EMPTY : new JsonEvents(events);
92     }
93
94     @Override
95     public Events byStage(String stage) {
96         List<Event> events = new ArrayList<>();
97         for (Event event : this)
98             if (event.stage().equals(stage))
99                 events.add(event);
100         return events.isEmpty() ? EMPTY : new JsonEvents(events);
101     }
102
103     @Override
104     public Events byValueType(String valueType) {
105         List<Event> events = new ArrayList<>();
106         for (Event event : this)
107             if (event.valueType().equals(valueType))
108                 events.add(event);
109         return events.isEmpty() ? EMPTY : new JsonEvents(events);
110     }
111
112     @Override
113     public Events bySnookerId(int worldSnookerId) {
114         List<Event> events = new ArrayList<>();
115         for (Event event : this)
116             if (event.worldSnookerId() == worldSnookerId)
117                 events.add(event);
118         return events.isEmpty() ? EMPTY : new JsonEvents(events);
119     }
120
121     @Override
122     public Events ended() {
123         List<Event> events = new ArrayList<>();
124         long currentTime = System.currentTimeMillis();
125         for (Event event : this)
126             if (currentTime > nextDate(event.endDate()).getTime())
127                 events.add(event);
128         return events.isEmpty() ? EMPTY : new JsonEvents(events);
129     }
130
131     @Override
132     public Events current() {
133         List<Event> events = new ArrayList<>();
134         long currentTime = System.currentTimeMillis();
135         for (Event event : this)
136             if (currentTime > event.startDate().getTime()
137                     && currentTime < nextDate(event.endDate()).getTime())
138                 events.add(event);
139         return events.isEmpty() ? EMPTY : new JsonEvents(events);
140     }
141
142     @Override
143     public Events upcoming() {
144         List<Event> events = new ArrayList<>();
145         long currentTime = System.currentTimeMillis();
146         for (Event event : this)
147             if (currentTime < event.startDate().getTime())
148                 events.add(event);
149         return events.isEmpty() ? EMPTY : new JsonEvents(events);
150     }
151
152     @Override
153     public void sortByDate() {
154         sort(
155                 EventComparators.DATE.comparator()
156         );
157     }
158
159     @Override
160     public void sortBySnookerId() {
161         sort(
162                 EventComparators.SNOOKER_ID.comparator()
163         );
164     }
165
166     private Date nextDate(Date date) {
167         Calendar c = Calendar.getInstance();
168         c.setTime(date);
169         c.add(Calendar.DATE, 1);
170         return c.getTime();
171     }
172
173 }