2 * Copyright (c) 2017-2020. Developed by Hedgecode.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 package org.hedgecode.snooker.json;
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;
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;
31 * Events Entity (set of {@link Event}) to JSON deserialize.
33 * @author Dmitry Samoshin aka gotty
35 public class JsonEvents extends JsonCollectionEntity<Event> implements Events, Serializable {
37 private static final long serialVersionUID = 3333612126168481839L;
39 private static final JsonEvents EMPTY = new JsonEvents(new Event[0]);
41 JsonEvents(Event[] entities) {
45 JsonEvents(List<Event> entities) {
50 public Events bySeason(Season season) {
51 List<Event> events = new ArrayList<>();
52 for (Event event : this)
53 if (event.season().equals(season))
55 return events.isEmpty() ? EMPTY : new JsonEvents(events);
59 public Events byType(String type) {
60 List<Event> events = new ArrayList<>();
61 for (Event event : this)
62 if (event.type().equals(type))
64 return events.isEmpty() ? EMPTY : new JsonEvents(events);
68 public Events byCity(String city) {
69 List<Event> events = new ArrayList<>();
70 for (Event event : this)
71 if (event.city().equals(city))
73 return events.isEmpty() ? EMPTY : new JsonEvents(events);
77 public Events byCountry(String country) {
78 List<Event> events = new ArrayList<>();
79 for (Event event : this)
80 if (event.country().equals(country))
82 return events.isEmpty() ? EMPTY : new JsonEvents(events);
86 public Events bySex(String sex) {
87 List<Event> events = new ArrayList<>();
88 for (Event event : this)
89 if (event.sex().equals(sex))
91 return events.isEmpty() ? EMPTY : new JsonEvents(events);
95 public Events byStage(String stage) {
96 List<Event> events = new ArrayList<>();
97 for (Event event : this)
98 if (event.stage().equals(stage))
100 return events.isEmpty() ? EMPTY : new JsonEvents(events);
104 public Events byValueType(String valueType) {
105 List<Event> events = new ArrayList<>();
106 for (Event event : this)
107 if (event.valueType().equals(valueType))
109 return events.isEmpty() ? EMPTY : new JsonEvents(events);
113 public Events bySnookerId(int worldSnookerId) {
114 List<Event> events = new ArrayList<>();
115 for (Event event : this)
116 if (event.worldSnookerId() == worldSnookerId)
118 return events.isEmpty() ? EMPTY : new JsonEvents(events);
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())
128 return events.isEmpty() ? EMPTY : new JsonEvents(events);
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())
139 return events.isEmpty() ? EMPTY : new JsonEvents(events);
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())
149 return events.isEmpty() ? EMPTY : new JsonEvents(events);
153 public void sortByDate() {
155 EventComparators.DATE.comparator()
160 public void sortBySnookerId() {
162 EventComparators.SNOOKER_ID.comparator()
166 private Date nextDate(Date date) {
167 Calendar c = Calendar.getInstance();
169 c.add(Calendar.DATE, 1);