[LIB-2] Add snooker-score-api source files
[snooker-score-api.git] / src / main / java / org / hedgecode / snooker / json / JsonEvents.java
1 /*
2  * Copyright (c) 2017. 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.util.ArrayList;
20 import java.util.List;
21
22 import org.hedgecode.snooker.api.Event;
23 import org.hedgecode.snooker.api.Events;
24 import org.hedgecode.snooker.api.Season;
25 import org.hedgecode.snooker.compare.EventComparators;
26
27 /**
28  * Events Entity (set of {@link Event}) to JSON deserialize.
29  *
30  * @author Dmitry Samoshin aka gotty
31  */
32 public class JsonEvents extends JsonCollectionEntity<Event> implements Events {
33
34     protected JsonEvents(Event[] entities) {
35         super(entities);
36     }
37
38     protected JsonEvents(List<Event> entities) {
39         super(entities);
40     }
41
42     @Override
43     public Events bySeason(Season season) {
44         List<Event> events = new ArrayList<>();
45         for (Event event : this)
46             if (event.season().equals(season))
47                 events.add(event);
48         return events.isEmpty() ? null : new JsonEvents(events);
49     }
50
51     @Override
52     public Events byType(String type) {
53         List<Event> events = new ArrayList<>();
54         for (Event event : this)
55             if (event.type().equals(type))
56                 events.add(event);
57         return events.isEmpty() ? null : new JsonEvents(events);
58     }
59
60     @Override
61     public Events byCity(String city) {
62         List<Event> events = new ArrayList<>();
63         for (Event event : this)
64             if (event.city().equals(city))
65                 events.add(event);
66         return events.isEmpty() ? null : new JsonEvents(events);
67     }
68
69     @Override
70     public Events byCountry(String country) {
71         List<Event> events = new ArrayList<>();
72         for (Event event : this)
73             if (event.country().equals(country))
74                 events.add(event);
75         return events.isEmpty() ? null : new JsonEvents(events);
76     }
77
78     @Override
79     public Events bySex(String sex) {
80         List<Event> events = new ArrayList<>();
81         for (Event event : this)
82             if (event.sex().equals(sex))
83                 events.add(event);
84         return events.isEmpty() ? null : new JsonEvents(events);
85     }
86
87     @Override
88     public Events byStage(String stage) {
89         List<Event> events = new ArrayList<>();
90         for (Event event : this)
91             if (event.stage().equals(stage))
92                 events.add(event);
93         return events.isEmpty() ? null : new JsonEvents(events);
94     }
95
96     @Override
97     public Events byValueType(String valueType) {
98         List<Event> events = new ArrayList<>();
99         for (Event event : this)
100             if (event.valueType().equals(valueType))
101                 events.add(event);
102         return events.isEmpty() ? null : new JsonEvents(events);
103     }
104
105     @Override
106     public Events bySnookerId(int worldSnookerId) {
107         List<Event> events = new ArrayList<>();
108         for (Event event : this)
109             if (event.worldSnookerId() == worldSnookerId)
110                 events.add(event);
111         return events.isEmpty() ? null : new JsonEvents(events);
112     }
113
114     @Override
115     public Events ended() {
116         List<Event> events = new ArrayList<>();
117         long currentTime = System.currentTimeMillis();
118         for (Event event : this)
119             if (event.endDate().getTime() < currentTime)
120                 events.add(event);
121         return events.isEmpty() ? null : new JsonEvents(events);
122     }
123
124     @Override
125     public Events current() {
126         List<Event> events = new ArrayList<>();
127         long currentTime = System.currentTimeMillis();
128         for (Event event : this)
129             if (event.startDate().getTime() < currentTime
130                     && event.endDate().getTime() > currentTime)
131                 events.add(event);
132         return events.isEmpty() ? null : new JsonEvents(events);
133     }
134
135     @Override
136     public Events upcoming() {
137         List<Event> events = new ArrayList<>();
138         long currentTime = System.currentTimeMillis();
139         for (Event event : this)
140             if (event.startDate().getTime() > currentTime)
141                 events.add(event);
142         return events.isEmpty() ? null : new JsonEvents(events);
143     }
144
145     @Override
146     public void sortByDate() {
147         sort(
148                 EventComparators.DATE.comparator()
149         );
150     }
151
152     @Override
153     public void sortBySnookerId() {
154         sort(
155                 EventComparators.SNOOKER_ID.comparator()
156         );
157     }
158
159 }